From 1b9bfcd4701fc12f1388d7608d04e75b8c4e979a Mon Sep 17 00:00:00 2001 From: Wolf Date: Sun, 21 Jun 2026 18:45:44 -0400 Subject: [PATCH 01/50] I need to use this folder again oof --- .../java/com/hbm/blocks/BlockDummyable.java | 44 +++++++++++++++++++ .../com/hbm/main/ModEventHandlerRenderer.java | 11 +++++ 2 files changed, 55 insertions(+) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index c7d7bd432..062781c0e 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -5,6 +5,8 @@ import com.hbm.handler.ThreeInts; import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; +import com.hbm.util.EntityDamageUtil; +import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -594,5 +596,47 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl return meta; } + public int[][] getAllDimensions() { + return new int[][] { getDimensions() }; +} +@SideOnly(Side.CLIENT) +public void drawPlacementHighlight(EntityPlayer player, float interp) { + MovingObjectPosition mop = EntityDamageUtil.getMouseOver(player, 5.0D); + + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { + double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) interp; + double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp; + double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) interp; + + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int o = -getOffset(); + int py = mop.blockY + getHeightOffset(); + + ForgeDirection facing = ForgeDirection.NORTH; + if(i == 0) facing = ForgeDirection.getOrientation(2); + if(i == 1) facing = ForgeDirection.getOrientation(5); + if(i == 2) facing = ForgeDirection.getOrientation(3); + if(i == 3) facing = ForgeDirection.getOrientation(4); + + facing = getDirModified(facing); + + double originX = mop.blockX - dX + facing.offsetX * o; + double originY = py - dY + (mop.sideHit == 1 ? 1 : 0); + double originZ = mop.blockZ - dZ + facing.offsetZ * o; + + float exp = 0.002F; + ICustomBlockHighlight.setup(); + boolean canPlace = checkRequirement(player.worldObj, mop.blockX, py + 1, mop.blockZ, facing, o); + int color = canPlace ? 0x008000 : 0x800000; + + for(int[] dims : getAllDimensions()) { + int[] rot = MultiblockHandlerXR.rotate(dims, facing); + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(-rot[4], -rot[1], -rot[2], rot[5] + 1, rot[0] + 1, rot[3] + 1); + RenderGlobal.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(originX, originY, originZ), color); + } + + ICustomBlockHighlight.cleanup(); + } +} } \ No newline at end of file diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index f1a16b507..65272819c 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -1,5 +1,6 @@ package com.hbm.main; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ICustomBlockHighlight; import com.hbm.config.ClientConfig; import com.hbm.config.RadiationConfig; @@ -414,6 +415,16 @@ public class ModEventHandlerRenderer { public void onDrawHighlight(DrawBlockHighlightEvent event) { EntityPlayer player = MainRegistry.proxy.me(); + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemBlock) { + Block b = Block.getBlockFromItem(player.getHeldItem().getItem()); + if(b instanceof BlockDummyable) { + ((BlockDummyable) b).drawPlacementHighlight(player, event.partialTicks); + event.setCanceled(true); + return; + } + } + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.gun_drill) { XFactoryDrill.drawBlockHighlight(player, player.getHeldItem(), event.partialTicks); event.setCanceled(true); From adc5437963de76675ae41b8aedbfb3c88103d56e Mon Sep 17 00:00:00 2001 From: Wolf Date: Sun, 21 Jun 2026 18:46:01 -0400 Subject: [PATCH 02/50] might have to undo, just need it free --- .../machine/fusion/MachineFusionPlasmaForge.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java index 5da87a630..1e61fe62e 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java @@ -31,7 +31,20 @@ public class MachineFusionPlasmaForge extends BlockDummyable { @Override public int[] getDimensions() { return new int[] { 2, 0, 2, 2, 5, 5 }; } @Override public int getOffset() { return 5; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 2, 0, 2, 2, 5, 5 }, + new int[] { 4, -3, 0, 0, 4, 4 }, + new int[] { 2, 0, 3, -2, 4, 4 }, + new int[] { 2, 0, -2, 3, 4, 4 }, + new int[] { 2, 0, 4, -3, 3, 3 }, + new int[] { 2, 0, -3, 4, 3, 3 }, + new int[] { 2, 0, 5, -4, 2, 2 }, + new int[] { 2, 0, -4, 5, 2, 2 }, + new int[] { 3, -2, 1, 1, 5, 5 } + }; + } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && From 60e339c7d7d161c3afa62e1c2ea7423120bcd695 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:22:41 +0200 Subject: [PATCH 03/50] Add files via upload --- .../assets/hbm/structures/tower_base.nbt | Bin 0 -> 6846 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f2af67a08ce17afa06ce01502a783bb568ce5ee9 GIT binary patch literal 6846 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 sA1eE}mg Date: Fri, 3 Jul 2026 15:26:20 +0200 Subject: [PATCH 04/50] Update StructureConfig.java le config --- src/main/java/com/hbm/config/StructureConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/hbm/config/StructureConfig.java b/src/main/java/com/hbm/config/StructureConfig.java index 279cf0a52..e20d2410c 100644 --- a/src/main/java/com/hbm/config/StructureConfig.java +++ b/src/main/java/com/hbm/config/StructureConfig.java @@ -50,6 +50,7 @@ public class StructureConfig { public static int radioSpawnWeight = 30; public static int forestChemSpawnWeight = 30; public static int forestPostSpawnWeight = 30; + public static int towerBaseSpawnWeight = 30; public static int spireSpawnWeight = 2; public static int craneSpawnWeight = 20; @@ -115,6 +116,7 @@ public class StructureConfig { oceanNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.38_oceanNullWeight", "Null spawn weight for ocean biomes", 35); craneSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.39_craneSpawnWeight", "Spawn weight for crane structure.", 20); broadcastingTowerSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.40_broadcastingTowerSpawnWeight", "Spawn weight for broadcasting tower structure.", 25); + towerBaseSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.41_towerBaseSpawnWeight", "Spawn weight for tower base.", 30); structureMinChunks = CommonConfig.setDef(structureMinChunks, 4); From 2e6a2d9f1deeaa906b454821c7bb2804eba476ed Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:27:41 +0200 Subject: [PATCH 05/50] le structure --- src/main/java/com/hbm/main/StructureManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 1fa86803a..8b0709e87 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -82,6 +82,7 @@ public class StructureManager { public static final NBTStructure forest_chem = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/forest_chem.nbt")); public static final NBTStructure plane1 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_1.nbt")); public static final NBTStructure plane2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_2.nbt")); + public static final NBTStructure tower_base = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/tower_base.nbt")); public static final NBTStructure factory = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/factory.nbt")); public static final NBTStructure crane = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crane_mod.nbt")); From b5faf15c5abc58b336cf2aa1c7a8668c5c32664d Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:30:26 +0200 Subject: [PATCH 06/50] le le structure --- src/main/java/com/hbm/world/gen/NTMWorldGenerator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index dbf6922fa..0d8f2d275 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -239,6 +239,11 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("NTMRuinsJ", StructureManager.ntmruinsJ, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); + NBTStructure.registerStructure(0, new SpawnCondition("tower_base") {{ + canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + structure = new JigsawPiece("tower_base", StructureManager.tower_base, -6); + spawnWeight = StructureConfig.towerBaseSpawnWeight; + }}); NBTStructure.registerNullWeight(0, StructureConfig.plainsNullWeight, biome -> biome == BiomeGenBase.plains); NBTStructure.registerNullWeight(0, StructureConfig.oceanNullWeight, biome -> BiomeDictionary.isBiomeOfType(biome, Type.OCEAN)); From ec36efc274a77910ed7a45e16b6e034add1aa730 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:32:55 +0200 Subject: [PATCH 07/50] le loot --- .../hbm/world/gen/util/LogicBlockActions.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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 cbbf17142..c0b816fd0 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -487,6 +487,39 @@ public class LogicBlockActions { } }; + public static Consumer DEAD_GUY_BASE_TOWER = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 1) { + world.setBlock(x, y, z, ModBlocks.skeleton_holder); + TileEntity te = world.getTileEntity(x, y, z); + EntityPlayer player = (EntityPlayer) world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).get(0); + + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + int roll = world.rand.nextInt(100); + + if (roll < 44) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 3, 91); + + } else if (roll < 71) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 92); + + } else if (roll < 92) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 73); + + } else if (roll < 96) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 3); + + } else { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 4); + } + } + } + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -506,6 +539,7 @@ public class LogicBlockActions { actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); + actions.put("DEAD_GUY_CRANE", DEAD_GUY_TOWER_BASE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); From 976ef4bbc00ccf85cd06ba87f1602b8943549037 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 21:46:03 +0200 Subject: [PATCH 08/50] I forgor --- src/main/java/com/hbm/world/gen/util/LogicBlockActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c0b816fd0..1ef0b73d4 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -539,7 +539,7 @@ public class LogicBlockActions { actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); - actions.put("DEAD_GUY_CRANE", DEAD_GUY_TOWER_BASE); + actions.put("DEAD_GUY_TOWER_BASE", DEAD_GUY_TOWER_BASE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); From 3a0523462c29c3a5fbd2bfadf81e76020aa64efe Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 18 Jul 2026 14:51:17 +0200 Subject: [PATCH 09/50] ough2 ough2 --- .../storage/TileEntityBatterySocket.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 4f2cde942..0f8703227 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -46,10 +46,10 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileEntityBatterySocket extends TileEntityBatteryBase implements IRORValueProvider, IRORInteractive, IInfoProviderEC { public boolean frame = false; - + public static BulletConfig discharge; public static BiConsumer BEAM_DISCHARGE_HIT = (beam, mop) -> { - + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { beam.worldObj.func_147480_a(mop.blockX, mop.blockY, mop.blockZ, false); explodeDischarge(beam.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); @@ -59,7 +59,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR explodeDischarge(beam.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); } }; - + public static void explodeDischarge(World world, double x, double y, double z) { ExplosionVNT vnt = new ExplosionVNT(world, x, y, z, 5F); vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 20).setDamageClass(DamageClass.ELECTRIC)); @@ -68,7 +68,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR vnt.explode(); world.playSoundEffect(x, y, z, "hbm:entity.ufoBlast", 5.0F, 0.9F + world.rand.nextFloat() * 0.2F); } - + static { discharge = new BulletConfig().setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(3).setThresholdNegation(20F).setArmorPiercing(0.5F).setRenderRotations(false).setDoesPenetrate(true) .setOnBeamImpact(BEAM_DISCHARGE_HIT); @@ -83,7 +83,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR public int damageTimer; public int damageTarget; public double scPowerMult = 1D; - + public TileEntityBatterySocket() { super(1); } @@ -97,7 +97,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR super.updateEntity(); if(!worldObj.isRemote) { - + if(hasSCLoaded()) { if(this.damageTarget == 0) pickNewSCTarget(); this.damageTimer++; @@ -114,30 +114,30 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR this.log[19] = avg; } else { - + if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 2, zCoord).isAir(worldObj, xCoord, yCoord + 2, zCoord); } } } - + protected boolean hasSCLoaded() { return slots[0] != null && slots[0].getItem() == ModItems.battery_sc && slots[0].getItemDamage() != EnumBatterySC.EMPTY.ordinal(); } - + protected void pickNewSCTarget() { this.damageTimer = 0; //this.damageTarget = 100; this.damageTarget = 1200 + worldObj.rand.nextInt(2400); // 1-3 minutes; this.markChanged(); } - + protected void discharge() { pickNewSCTarget(); - + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); - + double x = xCoord + 0.5 - dir.offsetX * 0.5 + rot.offsetX * 0.5; double y = yCoord + 1; double z = zCoord + 0.5 - dir.offsetZ * 0.5 + rot.offsetX * 0.5; @@ -156,15 +156,15 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR initialDelta.multiply(1.125D / dominantAxis); // move 1.125 blocks outwards sub.setPosition(xCoord + initialDelta.xCoord, yCoord + initialDelta.yCoord, zCoord + initialDelta.zCoord); Vec3NT actualDelta = new Vec3NT(target.posX - sub.posX, target.posY + target.height / 2 - sub.posY, target.posZ - sub.posZ); - + sub.setRotationsFromVector(actualDelta); sub.performHitscanExternal(actualDelta.lengthVector()); worldObj.spawnEntityInWorld(sub); } - + explodeDischarge(worldObj, x + worldObj.rand.nextGaussian() * 0.5, y + worldObj.rand.nextGaussian() * 0.5, z + worldObj.rand.nextGaussian() * 0.5); } - + protected void fluctuate() { double steppy = 1D / 100D; this.scPowerMult += (steppy * (worldObj.rand.nextDouble() * 2 - 1)); @@ -233,18 +233,18 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR return power; } @Override public long getMaxPower() { return maxPowerFromStack(slots[0]); } - + @Override public void setPower(long power) { if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return; ((IBatteryItem) slots[0].getItem()).setCharge(slots[0], power); } - + public static long powerFromStack(ItemStack stack) { if(stack == null || !(stack.getItem() instanceof IBatteryItem)) return 0; return ((IBatteryItem) stack.getItem()).getCharge(stack); } - + public static long maxPowerFromStack(ItemStack stack) { if(stack == null || !(stack.getItem() instanceof IBatteryItem)) return 0; return ((IBatteryItem) stack.getItem()).getMaxCharge(stack); @@ -319,6 +319,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR public String[] getFunctionInfo() { return new String[] { PREFIX_VALUE + "fill", + PREFIX_VALUE + "maxfill", PREFIX_VALUE + "fillpercent", PREFIX_VALUE + "delta", PREFIX_FUNCTION + "setmode" + NAME_SEPARATOR + "mode (0-3)", @@ -332,6 +333,7 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase implements IR @Override public String provideRORValue(String name) { if((PREFIX_VALUE + "fill").equals(name)) return "" + this.getPower(); + if((PREFIX_VALUE + "maxfill").equals(name)) return "" + this.getMaxPower(); if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.getPower() * 100 / (Math.max(this.getMaxPower(), 1)); if((PREFIX_VALUE + "delta").equals(name)) return "" + delta; return null; From b127041ffebfc4ba9a536aefa08712eb9d53bb21 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 18 Jul 2026 18:59:05 +0200 Subject: [PATCH 10/50] yay ough 3 --- .../machine/albion/TileEntityPADetector.java | 17 +++++++- .../machine/albion/TileEntityPADipole.java | 12 +++++- .../albion/TileEntityPAQuadrupole.java | 17 +++++++- .../machine/albion/TileEntityPARFC.java | 17 +++++++- .../machine/albion/TileEntityPASource.java | 41 ++++++++++++++++++- 5 files changed, 98 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java index ceaa30bfc..aa8175616 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java @@ -16,6 +16,7 @@ import com.hbm.tileentity.machine.albion.TileEntityPASource.Particle; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +32,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 TileEntityPADetector extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityPADetector extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { public static final long usage = 100_000; @@ -186,6 +187,20 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr return true; } + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm", + }; + } + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); + if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); + return null; + } + @Override public BlockPos getExitPos(Particle particle) { return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java index 25900ded6..736fe6aeb 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java @@ -16,6 +16,7 @@ import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; @@ -35,7 +36,7 @@ import net.minecraftforge.common.util.ForgeDirection; @SuppressWarnings("unused") @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProvider, IControlReceiver, IParticleUser, OCComponent, SimpleComponent, IRORInteractive { +public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProvider, IControlReceiver, IParticleUser, OCComponent, SimpleComponent, IRORInteractive, IRORValueProvider { public int dirLower; public int dirUpper; @@ -392,9 +393,18 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv public String[] getFunctionInfo() { return new String[] { PREFIX_FUNCTION + "setthreshold" + NAME_SEPARATOR + "threshold", + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm" }; } + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); + if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); + return null; + } + @Override public String runRORFunction(String name, String[] params) { diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java index 6a893cfef..655f29255 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java @@ -13,6 +13,7 @@ import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -27,7 +28,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 TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { public static final long usage = 100_000; public static final int focusGain = 100; @@ -137,6 +138,20 @@ public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUI return new GUIPAQuadrupole(player.inventory, this); } + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm", + }; + } + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); + if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); + return null; + } + @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java index 139cd9529..81a747c08 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java @@ -10,6 +10,7 @@ import com.hbm.tileentity.machine.albion.TileEntityPASource.Particle; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -24,7 +25,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 TileEntityPARFC extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityPARFC extends TileEntityCooledBase implements IGUIProvider, IParticleUser, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { public static final long usage = 250_000; public static final int momentumGain = 100; @@ -129,6 +130,20 @@ public class TileEntityPARFC extends TileEntityCooledBase implements IGUIProvide return new GUIPARFC(player.inventory, this); } + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm", + }; + } + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); + if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); + return null; + } + @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { 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 993b76359..ed1007ba7 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine.albion; +import api.hbm.redstoneoverradio.IRORInteractive; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.CompatHandler; import com.hbm.interfaces.IControlReceiver; @@ -12,6 +13,8 @@ import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORValueProvider; +import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -32,7 +35,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 TileEntityPASource extends TileEntityCooledBase implements IGUIProvider, IConditionalInvAccess, IControlReceiver, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityPASource extends TileEntityCooledBase implements IGUIProvider, IConditionalInvAccess, IControlReceiver, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { public static final long usage = 100_000; public Particle particle; @@ -81,7 +84,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv int steps = 1; if(this.particle != null) steps = 1 + MathHelper.clamp_int(this.particle.momentum / 1_000, 0, 9); - + for(int i = 0; i < steps; i++) { if(particle != null) { this.state = PAState.RUNNING; @@ -448,4 +451,38 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv if(this.defocus < 0) this.defocus = 0; } } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "status", + PREFIX_VALUE + "momentum", + PREFIX_VALUE + "defocus", + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm", + PREFIX_FUNCTION + "cancel" + }; + } + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "status").equals(name)) return "" + this.state; + if((PREFIX_VALUE + "momentum").equals(name)) return "" + this.lastSpeed; + if((PREFIX_VALUE + "defocus").equals(name)) { + return this.particle != null ? "" + this.particle.defocus : "0"; + } + if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); + if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if ((PREFIX_FUNCTION + "cancel").equals(name)) { + particle = null; + state = PAState.IDLE; + return null; + } + return null; + } } From 022ab91ecce13e8a33919999b57e8140d1ef9ff7 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 18 Jul 2026 19:12:51 +0200 Subject: [PATCH 11/50] oughium ough 4 --- .../tileentity/machine/albion/TileEntityPADetector.java | 4 +++- .../hbm/tileentity/machine/albion/TileEntityPADipole.java | 8 +++++--- .../tileentity/machine/albion/TileEntityPAQuadrupole.java | 4 +++- .../hbm/tileentity/machine/albion/TileEntityPARFC.java | 4 +++- .../hbm/tileentity/machine/albion/TileEntityPASource.java | 2 ++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java index aa8175616..140d646a7 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java @@ -190,12 +190,14 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr @Override public String[] getFunctionInfo() { return new String[] { + PREFIX_VALUE + "temperature", PREFIX_VALUE + "pfmcold", - PREFIX_VALUE + "pfm", + PREFIX_VALUE + "pfm" }; } @Override public String provideRORValue(String name) { + if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java index 736fe6aeb..226fc102b 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java @@ -392,14 +392,16 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv @Override public String[] getFunctionInfo() { return new String[] { - PREFIX_FUNCTION + "setthreshold" + NAME_SEPARATOR + "threshold", - PREFIX_VALUE + "pfmcold", - PREFIX_VALUE + "pfm" + PREFIX_VALUE + "temperature", + PREFIX_VALUE + "pfmcold", + PREFIX_VALUE + "pfm", + PREFIX_FUNCTION + "setthreshold" + NAME_SEPARATOR + "threshold" }; } @Override public String provideRORValue(String name) { + if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java index 655f29255..e2b5d6383 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java @@ -141,12 +141,14 @@ public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUI @Override public String[] getFunctionInfo() { return new String[] { + PREFIX_VALUE + "temperature", PREFIX_VALUE + "pfmcold", - PREFIX_VALUE + "pfm", + PREFIX_VALUE + "pfm" }; } @Override public String provideRORValue(String name) { + if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java index 81a747c08..78008248c 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java @@ -133,12 +133,14 @@ public class TileEntityPARFC extends TileEntityCooledBase implements IGUIProvide @Override public String[] getFunctionInfo() { return new String[] { + PREFIX_VALUE + "temperature", PREFIX_VALUE + "pfmcold", - PREFIX_VALUE + "pfm", + PREFIX_VALUE + "pfm" }; } @Override public String provideRORValue(String name) { + if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; 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 ed1007ba7..a3aa5ac5b 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -458,6 +458,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv PREFIX_VALUE + "status", PREFIX_VALUE + "momentum", PREFIX_VALUE + "defocus", + PREFIX_VALUE + "temperature", PREFIX_VALUE + "pfmcold", PREFIX_VALUE + "pfm", PREFIX_FUNCTION + "cancel" @@ -470,6 +471,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv if((PREFIX_VALUE + "defocus").equals(name)) { return this.particle != null ? "" + this.particle.defocus : "0"; } + if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; From 6240294525f643b9b06552c1432d6f2b93e0a4d2 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 18 Jul 2026 19:25:21 +0200 Subject: [PATCH 12/50] im upid --- .../hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java index e2b5d6383..8a04c6db6 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java @@ -148,7 +148,7 @@ public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUI } @Override public String provideRORValue(String name) { - if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; From adaab85b3ab6f40723745940c13263d17c5de246 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 18 Jul 2026 19:32:09 +0200 Subject: [PATCH 13/50] ok it works ok --- .../com/hbm/tileentity/machine/albion/TileEntityPADetector.java | 2 +- .../com/hbm/tileentity/machine/albion/TileEntityPADipole.java | 2 +- .../hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java | 2 +- .../java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java | 2 +- .../com/hbm/tileentity/machine/albion/TileEntityPASource.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java index 140d646a7..dfd0cdb86 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADetector.java @@ -197,7 +197,7 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr } @Override public String provideRORValue(String name) { - if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java index 226fc102b..31d6024fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPADipole.java @@ -401,7 +401,7 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv @Override public String provideRORValue(String name) { - if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java index 8a04c6db6..df032e4b5 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPAQuadrupole.java @@ -148,7 +148,7 @@ public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUI } @Override public String provideRORValue(String name) { - if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java index 78008248c..a8fa30740 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPARFC.java @@ -140,7 +140,7 @@ public class TileEntityPARFC extends TileEntityCooledBase implements IGUIProvide } @Override public String provideRORValue(String name) { - if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; 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 a3aa5ac5b..a74cdd0d8 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -471,7 +471,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv if((PREFIX_VALUE + "defocus").equals(name)) { return this.particle != null ? "" + this.particle.defocus : "0"; } - if((PREFIX_VALUE + "temperature").equals(name)) return "" + this.temperature; + if((PREFIX_VALUE + "temperature").equals(name)) return "" + (int) this.temperature; if((PREFIX_VALUE + "pfmcold").equals(name)) return "" + coolantTanks[0].getFill(); if((PREFIX_VALUE + "pfm").equals(name)) return "" + coolantTanks[1].getFill(); return null; From af4fc10d1af549113ca09888bf6bd7b04d318732 Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Sun, 19 Jul 2026 08:06:30 +0400 Subject: [PATCH 14/50] =?UTF-8?q?=D0=9F=D0=BE=D0=B5=D1=85=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../container/ContainerMachineKeyForge.java | 10 +-- .../container/ContainerMachineSatLinker.java | 10 +-- .../inventory/container/ContainerSatDock.java | 36 ++++----- .../container/ContainerSoyuzCapsule.java | 8 +- .../container/ContainerSoyuzLauncher.java | 32 ++++---- .../hbm/inventory/gui/GUIMachineKeyForge.java | 22 +++--- .../inventory/gui/GUIMachineSatLinker.java | 20 ++--- .../com/hbm/inventory/gui/GUISatDock.java | 16 ++-- .../hbm/inventory/gui/GUISoyuzCapsule.java | 6 +- .../hbm/inventory/gui/GUISoyuzLauncher.java | 74 +++++++++--------- src/main/resources/assets/hbm/lang/en_US.lang | 8 ++ .../assets/hbm/textures/gui/gui_dock.png | Bin 1130 -> 0 bytes .../assets/hbm/textures/gui/gui_keyforge.png | Bin 1294 -> 0 bytes .../assets/hbm/textures/gui/gui_linker.png | Bin 1317 -> 0 bytes .../assets/hbm/textures/gui/gui_soyuz.png | Bin 3949 -> 0 bytes .../hbm/textures/gui/gui_soyuz_capsule.png | Bin 1058 -> 0 bytes .../hbm/textures/gui/machine/gui_keyforge.png | Bin 0 -> 1575 bytes .../textures/gui/machine/gui_sat_linker.png | Bin 0 -> 1621 bytes .../hbm/textures/gui/machine/gui_soyuz.png | Bin 0 -> 4861 bytes .../hbm/textures/gui/storage/gui_sat_dock.png | Bin 0 -> 1585 bytes .../gui/storage/gui_soyuz_capsule.png | Bin 0 -> 2543 bytes .../assets/hbm/textures/items/sat_chip.png | Bin 283 -> 342 bytes .../hbm/textures/models/machines/autosaw.png | Bin 3214 -> 3264 bytes 23 files changed, 127 insertions(+), 115 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_dock.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_keyforge.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_linker.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_soyuz.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_soyuz_capsule.png create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_keyforge.png create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_sat_linker.png create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_soyuz.png create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_sat_dock.png create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_soyuz_capsule.png diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineKeyForge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineKeyForge.java index e95d67023..8c35c1d43 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineKeyForge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineKeyForge.java @@ -17,21 +17,21 @@ public class ContainerMachineKeyForge extends Container { diFurnace = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 44, 35)); - this.addSlotToContainer(new Slot(tedf, 1, 80, 35)); - this.addSlotToContainer(new Slot(tedf, 2, 116, 35)); + this.addSlotToContainer(new Slot(tedf, 0, 44, 36)); + this.addSlotToContainer(new Slot(tedf, 1, 80, 36)); + this.addSlotToContainer(new Slot(tedf, 2, 116, 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, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineSatLinker.java b/src/main/java/com/hbm/inventory/container/ContainerMachineSatLinker.java index 449ee965e..273cacbe8 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineSatLinker.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineSatLinker.java @@ -17,21 +17,21 @@ public class ContainerMachineSatLinker extends Container { diFurnace = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 44, 35)); - this.addSlotToContainer(new Slot(tedf, 1, 80, 35)); - this.addSlotToContainer(new Slot(tedf, 2, 116, 35)); + this.addSlotToContainer(new Slot(tedf, 0, 44, 36)); + this.addSlotToContainer(new Slot(tedf, 1, 80, 36)); + this.addSlotToContainer(new Slot(tedf, 2, 116, 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, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerSatDock.java b/src/main/java/com/hbm/inventory/container/ContainerSatDock.java index 02f02db56..3cee8e12e 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerSatDock.java +++ b/src/main/java/com/hbm/inventory/container/ContainerSatDock.java @@ -18,23 +18,23 @@ public class ContainerSatDock extends Container { tileSatelliteDock = tesd; //Storage - this.addSlotToContainer(new SlotTakeOnly(tesd, 0, 62, 17)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 1, 80, 17)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 2, 98, 17)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 3, 116, 17)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 4, 134, 17)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 5, 62, 35)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 6, 80, 35)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 7, 98, 35)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 8, 116, 35)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 9, 134, 35)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 10, 62, 53)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 11, 80, 53)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 12, 98, 53)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 13, 116, 53)); - this.addSlotToContainer(new SlotTakeOnly(tesd, 14, 134, 53)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 0, 71, 18)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 1, 71 + 18, 18)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 2, 71 + 18 * 2, 18)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 3, 71 + 18 * 3, 18)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 4, 71 + 18 * 4, 18)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 5, 71, 36)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 6, 71 + 18, 36)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 7, 71 + 18 * 2, 36)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 8, 71 + 18 * 3, 36)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 9, 71 + 18 * 4, 36)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 10, 71, 54)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 11, 71 + 18, 54)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 12, 71 + 18 * 2, 54)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 13, 71 + 18 * 3, 54)); + this.addSlotToContainer(new SlotTakeOnly(tesd, 14, 71 + 18 * 4, 54)); //Chip - this.addSlotToContainer(new Slot(tesd, 15, 26, 35) { + this.addSlotToContainer(new Slot(tesd, 15, 26, 36) { @Override public boolean isItemValid(ItemStack stack) { return stack.getItem() instanceof ItemSatChip; @@ -43,12 +43,12 @@ public class ContainerSatDock extends Container { 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)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerSoyuzCapsule.java b/src/main/java/com/hbm/inventory/container/ContainerSoyuzCapsule.java index 390391847..4ccf28730 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerSoyuzCapsule.java +++ b/src/main/java/com/hbm/inventory/container/ContainerSoyuzCapsule.java @@ -19,23 +19,23 @@ public class ContainerSoyuzCapsule extends Container { { for(int j = 0; j < 6; j++) { - this.addSlotToContainer(new Slot(tedf, j + i * 6, 8 + j * 18 + 18 * 2, 17 + i * 18)); + this.addSlotToContainer(new Slot(tedf, j + i * 6, 26 + j * 18 + 18 * 2, 18 + i * 18)); } } - this.addSlotToContainer(new Slot(tedf, 18, 8, 35)); + this.addSlotToContainer(new Slot(tedf, 18, 17, 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, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerSoyuzLauncher.java b/src/main/java/com/hbm/inventory/container/ContainerSoyuzLauncher.java index 6c13565d7..6fa787caa 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerSoyuzLauncher.java +++ b/src/main/java/com/hbm/inventory/container/ContainerSoyuzLauncher.java @@ -17,29 +17,29 @@ public class ContainerSoyuzLauncher extends Container { nukeBoy = tedf; //Soyuz - this.addSlotToContainer(new Slot(tedf, 0, 62, 18)); + this.addSlotToContainer(new Slot(tedf, 0, 98, 80)); //Designator - this.addSlotToContainer(new Slot(tedf, 1, 62, 36)); + this.addSlotToContainer(new Slot(tedf, 1, 80, 80)); //Satellite - this.addSlotToContainer(new Slot(tedf, 2, 116, 18)); + this.addSlotToContainer(new Slot(tedf, 2, 98, 26)); //Landing module - this.addSlotToContainer(new Slot(tedf, 3, 116, 36)); + this.addSlotToContainer(new Slot(tedf, 3, 80, 26)); //Kerosene IN - this.addSlotToContainer(new Slot(tedf, 4, 8, 90)); + this.addSlotToContainer(new Slot(tedf, 4, 152, 98)); //Kerosene OUT - this.addSlotToContainer(new Slot(tedf, 5, 8, 108)); - //Peroxide IN - this.addSlotToContainer(new Slot(tedf, 6, 26, 90)); - //Peroxide OUT - this.addSlotToContainer(new Slot(tedf, 7, 26, 108)); + this.addSlotToContainer(new Slot(tedf, 5, 152, 116)); + //Oxyden IN + this.addSlotToContainer(new Slot(tedf, 6, 170, 98)); + //Oxyden OUT + this.addSlotToContainer(new Slot(tedf, 7, 170, 116)); //Battery - this.addSlotToContainer(new Slot(tedf, 8, 44, 108)); + this.addSlotToContainer(new Slot(tedf, 8, 134, 98)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 6; j++) { - this.addSlotToContainer(new Slot(tedf, j + i * 6 + 9, 62 + j * 18, 72 + i * 18)); + this.addSlotToContainer(new Slot(tedf, j + i * 6 + 9, 44 - i * 18, 26 + j * 18)); } } @@ -47,13 +47,13 @@ public class ContainerSoyuzLauncher extends Container { { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 56)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 17 + j * 18, 162 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); + this.addSlotToContainer(new Slot(invPlayer, i, 17 + i * 18, 220)); } } @@ -68,8 +68,8 @@ public class ContainerSoyuzLauncher extends Container { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - if (par2 <= 27) { - if (!this.mergeItemStack(var5, 9, this.inventorySlots.size(), true)) + if (par2 < 27) { + if (!this.mergeItemStack(var5, 27, this.inventorySlots.size(), true)) { return null; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineKeyForge.java b/src/main/java/com/hbm/inventory/gui/GUIMachineKeyForge.java index 54cafc0d0..dfa6794a7 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineKeyForge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineKeyForge.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineKeyForge; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineKeyForge; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; @@ -13,7 +14,7 @@ import net.minecraft.util.ResourceLocation; public class GUIMachineKeyForge extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_keyforge.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_keyforge.png"); private TileEntityMachineKeyForge siren; public GUIMachineKeyForge(InventoryPlayer invPlayer, TileEntityMachineKeyForge tedf) { @@ -21,26 +22,25 @@ public class GUIMachineKeyForge extends GuiInfoContainer { siren = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - String[] text = new String[] { "The first slot will copy the key/lock's", - "pin configuration and paste it to the second slot." }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + String[] keyText = I18nUtil.resolveKeyArray("desc.gui.keyforge.key"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28, 16, 16, guiLeft - 8, guiTop + 36 + 16, keyText); - String[] text1 = new String[] { "The third slot will randomize the", - "key/lock's pin configuration."}; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); + String[] randomText = I18nUtil.resolveKeyArray("desc.gui.keyforge.random"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, randomText); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.siren.hasCustomInventoryName() ? this.siren.getInventoryName() : I18n.format(this.siren.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + + 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); } @@ -50,7 +50,7 @@ public class GUIMachineKeyForge extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); + this.drawInfoPanel(guiLeft + 12, guiTop + 28, 16, 16, 2); + this.drawInfoPanel(guiLeft + 12, guiTop + 28 + 16, 16, 16, 3); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineSatLinker.java b/src/main/java/com/hbm/inventory/gui/GUIMachineSatLinker.java index 9bd5eeb50..c6783fa0a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineSatLinker.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineSatLinker.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineSatLinker; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineSatLinker; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; @@ -13,7 +14,7 @@ import net.minecraft.util.ResourceLocation; public class GUIMachineSatLinker extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_linker.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_sat_linker.png"); private TileEntityMachineSatLinker siren; public GUIMachineSatLinker(InventoryPlayer invPlayer, TileEntityMachineSatLinker tedf) { @@ -21,25 +22,24 @@ public class GUIMachineSatLinker extends GuiInfoContainer { siren = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - String[] text = new String[] { "The first slot will copy the satellite/chip's", - "frequency and paste it to the second slot." }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + String[] chipText = I18nUtil.resolveKeyArray("desc.gui.satlinker.chip"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28, 16, 16, guiLeft - 8, guiTop + 36 + 16, chipText); - String[] text1 = new String[] { "The third slot will randomize the", - "satellite/chip's frequency."}; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); + String[] randomText = I18nUtil.resolveKeyArray("desc.gui.satlinker.random"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, randomText); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.siren.hasCustomInventoryName() ? this.siren.getInventoryName() : I18n.format(this.siren.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); } @@ -50,7 +50,7 @@ public class GUIMachineSatLinker extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); + this.drawInfoPanel(guiLeft + 12, guiTop + 28, 16, 16, 2); + this.drawInfoPanel(guiLeft + 12, guiTop + 28 + 16, 16, 16, 3); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUISatDock.java b/src/main/java/com/hbm/inventory/gui/GUISatDock.java index 369530b2f..08d66d82a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISatDock.java +++ b/src/main/java/com/hbm/inventory/gui/GUISatDock.java @@ -3,6 +3,8 @@ package com.hbm.inventory.gui; import com.hbm.inventory.container.ContainerSatDock; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineSatDock; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; @@ -11,7 +13,7 @@ import org.lwjgl.opengl.GL11; public class GUISatDock extends GuiInfoContainer { - public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_dock.png"); + public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_sat_dock.png"); private final TileEntityMachineSatDock tileSatelliteDock; public GUISatDock(InventoryPlayer invPlayer, TileEntityMachineSatDock tesd) { @@ -19,24 +21,22 @@ public class GUISatDock extends GuiInfoContainer { tileSatelliteDock = tesd; this.xSize = 176; - this.ySize = 168; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - String[] text = new String[] { "Requires linked miner sat chip.", - "Cargo ship will land periodically to", - "deliver resources." }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + String[] text = I18nUtil.resolveKeyArray("desc.gui.satdock.desc"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 7, guiTop + 36, 16, 16, guiLeft - 7, guiTop + 36 + 16, text); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.tileSatelliteDock.hasCustomInventoryName() ? this.tileSatelliteDock.getInventoryName() : I18n.format(this.tileSatelliteDock.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0x404040); + this.fontRendererObj.drawString(name, 115 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0x404040); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 0x404040); } @@ -46,6 +46,6 @@ public class GUISatDock extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); + this.drawInfoPanel(guiLeft - 7, guiTop + 36, 16, 16, 2); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java b/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java index 055aeabd5..4a7400bb3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java +++ b/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java @@ -14,7 +14,7 @@ import net.minecraft.util.ResourceLocation; public class GUISoyuzCapsule extends GuiContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_soyuz_capsule.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_soyuz_capsule.png"); private TileEntitySoyuzCapsule diFurnace; public GUISoyuzCapsule(InventoryPlayer invPlayer, TileEntitySoyuzCapsule tedf) { @@ -22,14 +22,14 @@ public class GUISoyuzCapsule extends GuiContainer { diFurnace = tedf; this.xSize = 176; - this.ySize = 168; + this.ySize = 186; } @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(name, 115 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java b/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java index a1fdb30cc..aace50777 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java +++ b/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java @@ -7,6 +7,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntitySoyuzLauncher; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; @@ -16,49 +17,50 @@ import net.minecraft.util.ResourceLocation; public class GUISoyuzLauncher extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_soyuz.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_soyuz.png"); private TileEntitySoyuzLauncher launcher; public GUISoyuzLauncher(InventoryPlayer invPlayer, TileEntitySoyuzLauncher tedf) { super(new ContainerSoyuzLauncher(invPlayer, tedf)); launcher = tedf; - this.xSize = 176; - this.ySize = 222; + this.xSize = 194; + this.ySize = 244; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - launcher.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 36, 16, 52); - launcher.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 36, 16, 52); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 49, guiTop + 72, 6, 34, launcher.power, launcher.maxPower); + launcher.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 44, 16, 52); + launcher.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 170, guiTop + 44, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 44, 16, 52, launcher.power, launcher.maxPower); + + String[] descText = I18nUtil.resolveKeyArray("desc.gui.soyuz.desc"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 53, 16, 16, guiLeft - 8, guiTop + 53 + 16, descText); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 17, 18, 18, mouseX, mouseY, new String[]{"The Soyuz goes here"} ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 35, 18, 18, mouseX, mouseY, new String[]{"Designator only for CARGO MODE"} ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 17, 18, 18, mouseX, mouseY, new String[]{"The payload for SATELLITE MODE"} ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 35, 18, 18, mouseX, mouseY, new String[]{"The orbital module for special payloads"} ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 88, guiTop + 17, 18, 18, mouseX, mouseY, new String[]{"SATELLITE MODE"} ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 88, guiTop + 35, 18, 18, mouseX, mouseY, new String[]{"CARGO MODE"} ); + String[] cargoText = I18nUtil.resolveKeyArray("desc.gui.soyuz.cargo"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 52, 18, 18, mouseX, mouseY, cargoText ); + String[] satelliteText = I18nUtil.resolveKeyArray("desc.gui.soyuz.satellite"); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 97, guiTop + 52, 18, 18, mouseX, mouseY, satelliteText ); } protected void mouseClicked(int x, int y, int i) { super.mouseClicked(x, y, i); - if(guiLeft + 88 <= x && guiLeft + 88 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) { + if(guiLeft + 97 <= x && guiLeft + 97 + 18 > x && guiTop + 52 < y && guiTop + 52 + 18 >= y) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, 0, 0)); } - if(guiLeft + 88 <= x && guiLeft + 88 + 18 > x && guiTop + 35 < y && guiTop + 35 + 18 >= y) { + if(guiLeft + 79 <= x && guiLeft + 79 + 18 > x && guiTop + 52 < y && guiTop + 52 + 18 >= y) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, 1, 0)); } - if(guiLeft + 151 <= x && guiLeft + 151 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) { + if(guiLeft + 88 <= x && guiLeft + 88 + 18 > x && guiTop + 97 < y && guiTop + 97 + 18 >= y) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, 0, 1)); @@ -69,8 +71,8 @@ public class GUISoyuzLauncher extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.launcher.hasCustomInventoryName() ? this.launcher.getInventoryName() : I18n.format(this.launcher.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); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 17, this.ySize - 96 + 2, 4210752); String secs = "" + launcher.countdown / 20; String cents = "" + (launcher.countdown % 20) * 5; @@ -79,9 +81,9 @@ public class GUISoyuzLauncher extends GuiInfoContainer { if(cents.length() == 1) cents += "0"; - float scale = 0.5F; + float scale = 1; GL11.glScalef(scale, scale, 1); - this.fontRendererObj.drawString(secs + ":" + cents, (int)(153.5F / scale), (int)(37.5F / scale), 0xff0000); + this.fontRendererObj.drawString(secs + ":" + cents, (int)(85 / scale), (int)(121 / scale), 0xff0000); GL11.glScalef(1/scale, 1/scale, 1); } @@ -91,47 +93,49 @@ public class GUISoyuzLauncher extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int i = (int)launcher.getPowerScaled(34); - drawTexturedModalRect(guiLeft + 49, guiTop + 106 - i, 194, 52 - i, 6, i); + int i = (int)launcher.getPowerScaled(52); + drawTexturedModalRect(guiLeft + 134, guiTop + 96 - i, 194, 52 - i, 16, i); - drawTexturedModalRect(guiLeft + 61, guiTop + 17, 176 + (launcher.hasRocket() ? 18 : 0), 0, 18, 18); + drawTexturedModalRect(guiLeft + 97, guiTop + 79, 210 + (launcher.hasRocket() ? 18 : 0), 8, 18, 18); int j = launcher.designator(); if(j > 0) - drawTexturedModalRect(guiLeft + 61, guiTop + 35, 176 + (j - 1) * 18, 0, 18, 18); + drawTexturedModalRect(guiLeft + 79, guiTop + 79, 210 + (j - 1) * 18, 8, 18, 18); int k = launcher.mode; - drawTexturedModalRect(guiLeft + 88, guiTop + 17 + k * 18, 176, 18 + k * 18, 18, 18); + drawTexturedModalRect(guiLeft + 97 - k * 18, guiTop + 52, 228 - k * 18, 26, 18, 18); int l = launcher.orbital(); if(l > 0) - drawTexturedModalRect(guiLeft + 115, guiTop + 35, 176 + (l - 1) * 18, 0, 18, 18); + drawTexturedModalRect(guiLeft + 79, guiTop + 25, 210 + (l - 1) * 18, 8, 18, 18); int m = launcher.satellite(); if(m > 0) - drawTexturedModalRect(guiLeft + 115, guiTop + 17, 176 + (m - 1) * 18, 0, 18, 18); + drawTexturedModalRect(guiLeft + 97, guiTop + 25, 210 + (m - 1) * 18, 8, 18, 18); if(launcher.starting) - drawTexturedModalRect(guiLeft + 151, guiTop + 17, 176, 54, 18, 18); + drawTexturedModalRect(guiLeft + 88, guiTop + 97, 210, 44, 18, 18); if(launcher.hasFuel()) - drawTexturedModalRect(guiLeft + 13, guiTop + 23, 212, 0, 6, 8); + drawTexturedModalRect(guiLeft + 157, guiTop + 31, 210, 0, 6, 8); else - drawTexturedModalRect(guiLeft + 13, guiTop + 23, 218, 0, 6, 8); + drawTexturedModalRect(guiLeft + 157, guiTop + 31, 216, 0, 6, 8); if(launcher.hasOxy()) - drawTexturedModalRect(guiLeft + 31, guiTop + 23, 212, 0, 6, 8); + drawTexturedModalRect(guiLeft + 175, guiTop + 31, 210, 0, 6, 8); else - drawTexturedModalRect(guiLeft + 31, guiTop + 23, 218, 0, 6, 8); + drawTexturedModalRect(guiLeft + 175, guiTop + 31, 216, 0, 6, 8); if(launcher.hasPower()) - drawTexturedModalRect(guiLeft + 49, guiTop + 59, 212, 0, 6, 8); + drawTexturedModalRect(guiLeft + 139, guiTop + 31, 210, 0, 6, 8); else - drawTexturedModalRect(guiLeft + 49, guiTop + 59, 218, 0, 6, 8); + drawTexturedModalRect(guiLeft + 139, guiTop + 31, 216, 0, 6, 8); - launcher.tanks[0].renderTank(guiLeft + 8, guiTop + 88, this.zLevel, 16, 52); - launcher.tanks[1].renderTank(guiLeft + 26, guiTop + 88, this.zLevel, 16, 52); + launcher.tanks[0].renderTank(guiLeft + 152, guiTop + 96, this.zLevel, 16, 52); + launcher.tanks[1].renderTank(guiLeft + 170, guiTop + 96, this.zLevel, 16, 52); + + this.drawInfoPanel(guiLeft - 16, guiTop + 53, 16, 16, 2); } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 375d2c3c0..cabeaa8bf 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -953,6 +953,8 @@ desc.gui.assembler.warning=§cError:§r This machine requires an assembly templa desc.gui.chemplant.warning=§cError:§r This machine requires an chemistry template! desc.gui.gasCent.enrichment=§2Enrichment§r$Uranium enrichment requires cascades.$Two-centrifuge cascades will give$uranium fuel, four-centrifuge cascades$will give total separation. desc.gui.gasCent.output=§6Fluid Transfer§r$Fluid can be transferred to another centrifuge$via the output port for further processing. +desc.gui.keyforge.key=The first slot will copy the key/lock's$pin configuration and paste it to the second slot. +desc.gui.keyforge.random=The third slot will randomize the$key/lock's pin configuration. desc.gui.nukeBoy.desc=§1Requires:§r$ * Neutron Shielding$ * U235 Projectile$ * Subcritical U235 Target$ * Propellant$ * Bomb Igniter desc.gui.nukeGadget.desc=§1Requires:§r$ * 4 Arrays of First-Generation$ High-Explosive Lenses$ * Heavy Plutonium Core$ * Wiring desc.gui.nukeMan.desc=§1Requires:§r$ * 4 Arrays of First-Generation$ High-Explosive Lenses$ * Plutonium Core$ * Bomb Firing Unit @@ -974,6 +976,12 @@ desc.gui.rtg.heat=§eCurrent heat level: %s desc.gui.rtg.pellets=Accepted Pellets: desc.gui.rtg.pelletHeat=%s (%s heat) desc.gui.rtg.pelletPower=%s (%s HE/tick) +desc.gui.satdock.desc=Requires linked miner sat chip.$Cargo ship will land periodically to$deliver resources. +desc.gui.satlinker.chip=The first slot will copy the satellite/chip's$frequency and paste it to the second slot. +desc.gui.satlinker.random=The third slot will randomize the$satellite/chip's frequency. +desc.gui.soyuz.cargo=CARGO MODE +desc.gui.soyuz.desc=Designator only for CARGO MODE$The payload for SATELLITE MODE +desc.gui.soyuz.satellite=SATELLITE MODE 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.fuels=§6Accepted fuels:§r diff --git a/src/main/resources/assets/hbm/textures/gui/gui_dock.png b/src/main/resources/assets/hbm/textures/gui/gui_dock.png deleted file mode 100644 index 7596be55ec91e18a753ecf018f7e1b218944ce2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1130 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGwrqNj^v zNX4ADcLVco1qifVe66wCYum$Kmn8W}k3D>wbbbX~T;`#=<;O3+f9ESZqe7KiUh%&< zP?5ENu9Qt%<`?E0-JgXkt>()72l8e`2{(q?n6lgRKdZ3W_DuG**0M6ehV$po7xuH| zefan9UR3tm$B!4AzGr#&>C0DszPb~izWlXk{N}}=FoVItfUzNgiQym%LlY+hi!cL+ z8iRljSYpHTi~I>K+qZAuoqp!?ooT6t&ri*{e*OCH=NH0L7@~gvl>Z{vet4no>7;X0 zE%(KQ%@0P>i_=hqgzG!z8P9jh^060NonN@mK9B!icH`kF>56N&43d>Em=#y$vJ_Q+ z_?q*LZ^5m$nO?JtzgZo3TktD}8RlGG&I3P{E|=Rk?la>*u$KM*CLJe+xx7DR4m=fo z_PO!j_WkU?B+7UXXxsFJznk2!h~c)TU_-Ti3DckXii|&gX}uSfKX&tv)B&6G`{O?5 z|Kq0JUae$%=7&&EMZ#U#E z&h=}x+?!{7jyIltUCHjuVx#9jre)dtG2)F*45Lcr9k$-~ojuvIy>8t-xjSwO#ad@} z-r;!i?ZNAff+yyDD$Zefb=;J+NWICC;`h_?OS19=%csw8a9ru{b$B*qezJ0a{W?b6 zDGl9ez$ADE=$upM7tUWT-MBzWy7Ag$5m@>x`>M2H?SW?@Gm3YL&iHzRD+g$yp5J$b z0(b((Vk{(OgCw>w%?_^P`+I}y%;Alq6}GUzd$4fM{ePSLo?p9V;(PgJg-unF;+dba z2flpzWb~!+!2SZp0@>;Q4>C_IZm56$fE}2zX#x`3>lipYW^MCos_Ft+;OXk;vd$@? F2>@>>f2;ri diff --git a/src/main/resources/assets/hbm/textures/gui/gui_keyforge.png b/src/main/resources/assets/hbm/textures/gui/gui_keyforge.png deleted file mode 100644 index ec1f6ccb6b215afbdd8ba576c84c45604dda3f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGxWQBN1g zkcv5P@7~V6?IqEAaem|KO}7%1nQpXm3ErL%B6hy{V9UjgqS5A)Ze{P4XnT9n;bG05 z8#7G49uL^SclM5Oh3I2xOP=Ph=dDb9gH@TzKd#oP3wu^!6SgyHZ}+luOa)eRpUvj2 zIh?nB^{Q2W>*Ak!Jy6@fY<|R_2~V%@-_KeR%EWMxg`tU)fkl{sLybYehe2TmgM$HM zLjq+I-^{+V)Fth{d(X!0_O`7zbKV(9e@^@xCfcy7pZSYe?De}}_dA-)Upu4Az!H5| z^uUVuzgO-0+w-00am?yxGv9yty8POQdmkfK?`Qh)>OoxB=byIK`=-a`zkDy-zx@|O zi0wZII~l(4zjwmZ|LqiuyS?q)uRp0%8Gqz3>Y6fz){Fh0)1Ck8mePTYsf;u9R;161 z%zg@K|YybW5TA9N!CxIbJ-6%v!4f)ge?YNtlU)Q)T zclG<~#}dz96`IXHd-m~%o!yKpe*IwI;d;IF>i4~cJ;h%wmS29k%<#voXwni?>>d6E zxwl{KdiPA+u&*#;*|Jq_i4v<;{oDSrNw%?Pb4%g5a+X_f%R)o9-haQ^t}k(2io3#N zojMt7CfmMr(h}}wRdd8S*UH!Qp*p4WsYygR<`07#{rpM4*RL30ymNVk0Z@r~LBtCPbY{4V5% zX4=(8asP_t^Fyzi_!`UfyXWh*NUmp?_5J(zNOdOrhl~$u=j?Ahth2dc{^lQ`qKGD- b!tp=j;(z|^E8R>_fGqHI^>bP0l+XkKa(~>R diff --git a/src/main/resources/assets/hbm/textures/gui/gui_linker.png b/src/main/resources/assets/hbm/textures/gui/gui_linker.png deleted file mode 100644 index 5ccf509365025d0efd388790196e4125fb3edd9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGxW9Zwg> zkcv5P@4gOv>><&1(LdOw^>TpHx*$2eBVNoL-oKkatqJe$bu`NRIPdfE!)sqA-RUn~ zIBVTMQ_&pf?=Lw2h%J|YV&Z$v{`Q5^*r^<0< z0zQ;U%#*WiTz}*J_wM5_e(x*WeV1#qq5QV|V8#_y^-X$)Jcn1+v)!$^VYHk){r>m<{_S=D{CA2hnm>m*w}@p!)90i0`))kT58t}^hy8B}Ni*4o z%fdf4A72_57iaf(jUR7E7^NZNcpMnRrD*O@Yo|_FcaMkJVe`4GBtg8QFy8Vv2{n_QM z9A_-QKTrA0xZ_En|EGSjAAk4`PRh`oD?R6TDC3V;O}oCD-#gbYvaa^*((vy;4^@8= zbkHt-@DXU#=hm;n>+`(D{)gB3Ke!h)gE{xco7jfW(NWv&^gd4Qu2)~qTK`t;p?{I| zgq>&E9xQ1+T3=WA{*vu~F{KUHbOY=9&$2II{apQbI^Wmm4u(0x4O8#@>Ne}&BlbX~ z!IClJ;@a-hN=rm%@8Z7jy_WazhZmWDQtfhL!$U8d_=bj>H6;l1wL6D~%Jv^$_5HcQ z{U;*Si&MOXl2m2h3WhTz~+2_!Hc;Tv5 zeaDlp{w|)8ze#yQ;Vk*%eGcCrOOckC-*BYNd3O9^9faPfeBtj6!4no|`;*-l{4V4r zEgZ{OjQl=7F0cVska@QM@uM$)Em%p* zgt3jim;YGY>5px^DYKht{c%mGZ*xw){4l@NCN%VV>D@2Ce!XhvPV{qUxcm9@XJ>V$ w_=ijnte)8)c&WI#Vg2SGpc0BE;798}#&WO2Ct{Q|&VelOboFyt=akR{0Jw1FsQ>@~ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_soyuz.png b/src/main/resources/assets/hbm/textures/gui/gui_soyuz.png deleted file mode 100644 index 2ae2fbdfe1d07c11dca1b6686b6cb2453b623efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3949 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 F>hG`nSatva diff --git a/src/main/resources/assets/hbm/textures/gui/gui_soyuz_capsule.png b/src/main/resources/assets/hbm/textures/gui/gui_soyuz_capsule.png deleted file mode 100644 index d5d1c4cfc409ca0642becd3b3af2726e6406403d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIE+9%r`w< z978JRyuIt_cRN7D;bQ)gRSD8JIfA|&bUI;mXwxOf)>~;4#1hT#-ziS>cyY4p!_jS1 zo~QmPlH9<5dN2Qj-9LUP=uhwdJij(#S}KoV#L>eApEesm|6IuvzGijAu~3G4_wTu{Xck;UzflBzvzSALJS66@;s$o;8mJRBumaqSjQvhsy}&vLd3o_Kxm`seG~4L8jWpV{*9*qqzN zIV`j0r!xqs5sk`<Ax&tP4Q@n0F(`LEo#1lkd$Ls_xKm{o;y!9 k9(mdKI;Vst0D-hu5C8xG diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_keyforge.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_keyforge.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3a58a63df11da51733d5e55cb08b1b98d63039 GIT binary patch literal 1575 zcmbtUdr%T~9RGn@l$E(MD+xF^*O}8%wzLOeuOmyObeS5aJsjpzhUSCDOK;iC#MVqQ z$()|)nU87}iYw@xP>A6m=K~!niKGGshH0R~J?{4B+`f0;*M0B4-@EVk`}yP^48<>9 zymm1FU}^BaJz)Sq>>&ie7T6srrTUAxEHwB~v`em)F`Jqdtjx?u%KW<(`R~d77 zVPACNxpcSKlGDD4L^d^%p-IOvt<@8X5dF-|}3!Apms^ z1fl;^p%dpZj)}N^Snn+}2wl42@f=O6l&-^@A(3?vUIWT+j7B5gSJ1?fcTaV2Z&4s& zt61JRc_R|@y_`lD%P!1pW;xw4@^FOAci-we6F-}lZ6A75d;)vFp#;=+jo#}y6N(r% zneLHDq!4t4;srf=#~-yNMQuaDu`C7y^SW3;*F`DifK5xwa6+&4%OGMjj2znm^IEe_ zS+~RI!p=<2vGj#r*}jG>VuTTAm&XSB_))!i&FuUxwk6K*1u7xbjNiX@Q?;#e_`Wh*ISA(g(mV(KV}!_N1;UVdcp z98;AmMh$09(U=caN#1XN3%_*GT=JkrJEnH+qd;cC5__JK??X zrvYw??tJXF>rcNzWi;P-OGK{9+w1L#&ShO}C6Y^T-aJ5U-Ilv|D@=6mQGI|%<^{Wi z?e{JyD5z}wAn@6z?;(-a%dI)6e}jQoj!iRZR1=w5DwWDKF>wm6xr7*2@hR&IT2vhS z!f&eC;eGx6SF5VlYgUsd0%y1*^gigkfHkIL0zRKVWH1EpbXby)}mV!wCg4lK6FWX8z$r8{m4HEX(E6R@R_d5x3Jb!5V|C-ErFW*lc- z);}W6n)&g=80-{JD>;tEXETyljmJIouR`5t@uUmJZ@1@j6AGGqW&mHP@q@?Bb zRHM`UxF{woUug}LN$N#s?W&|Y|HWf5Yy4)5#oRFIiMx?w_M@*O!Td>(PaZRE(P^IJ tt_TpS83%?M85H|`aN(cN^ZzV6%I1uM3kkVbSc!9;g7=2*soxcs{X2rGf-(RA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_sat_linker.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_sat_linker.png new file mode 100644 index 0000000000000000000000000000000000000000..a1262001b64250f9c1ed63c0b1f880dbacb11c83 GIT binary patch literal 1621 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

dJ1tSD!WQ!{|J91RN9i7f2we$bR_m>0f}d@J z5W0#L*cT5PX_0@m$Wu7<_bl$B)-l0gV>8dl7*aW}Lzlh6Uro^cu`!wLf^Nnf)#daI zgaK%YtjX4S@>Etc^-?@O4Xw@!+9%_-Vqzgp<>b#dA-|x$E2SapELpTo6lPxBY1ae4 zOBHgZIJLRkCL=$7xf!Tt{{~4q zzk2RRTQ2k$R3**>%|n}$$&83S0wp=I>U#>JG!`KySr&+cwso`6URnjCLz-mB7qH&W zC@dzAR(Zd_=97 zd6Hcp$A*aZqTEK~iT+0scFF+&paJsSBi%vlwh zap7-HJwoYIF#3y58+nJu#!|PdzND#-=o2dLmrtF23X}V~X1YS^&D*AT*6rzJPm3Vkwt?h*SzqP`y0rL2`loLQdie1D=SCthmbF^Z^mg%|o=BIC>RM{qP7gOa5U zcgytyX@SCr8W57nMwv8Jv{ohe!W9>36 z+FWHctWwN#dfA68HHD6YOC^<+GKN(;6BhK+Eh;Jft4jZ)!dtKA))*o$4-duN2UzQL z1VZNg()8*(j@TC1>P^lJ*k9Z@q6X_sLyCw%Wq#AJ9U>BY83Tm0p(ABk64w)|+pWU;?x|w7<`rlq}9Zc84W-+Kw3=UsdnQEPCZ;a$=jpQ(^iAK46 z=4l?dzYZ=P`MrLFJa|pKvbNT)WoBCNC=?rma+`4&S3mTU!yyjj)&FQuHlnB6O;7!9 zoI5n_DAL@Fw+}9nRRaujfWDPWGoqKuBr}O*ky>H^bz87j?Ofv=YX^isS zXpKfcHD77nQGH;w-k7hNah#EW z=UG8aZD9bD87DJScCps`DVy&1Ye83xSHJdf>!+~I zkv9TXwGf+$zRPpOL( z8E_n!F*$^UjJKs_GlsaQcl6ToEtGib2ikNPwCnkj6Q&lc1Pl~;fagmpW4n5OmLt2> z_rG6mc+8)uk!sv3!X3FsXmTafdaJyCL|2xSpq13*=O8}SW0+SWX20QtJ$e>XT53_f zc7vOneo;2pP&69NY?amBPtU71Ha2Ct zn&HG}>FKJNRz1sF;rpJRgt;9#Ik}OMku0&1Q={BYZv-2U|Fg<}uoyeY#2A|U+S;O5 zBD%RL89~-{s$*+fCOs>~EKYh7BX4vy2?C)iDk@TjVGZcEg9l5Zmawc;%d*C3bh9G! z|L(#+*!vrRzm$aCvf}&0?_UINIj8_bVOejqA0q{XTK@lN{fDWRzm%B9u0*5JVx^L% zDx%Q;hBuZ4Vl9y3x6p0uW8rYSF~9z&L7|rl5xW0(SpLJ%-%%?)tw<@$5<9|B<}7V_ zsPo@c74rMgm2M1Z*Bj^du0%8*cUS0^#0G#=Or_>~F35dH;888<9_JJ+hab+^{&|D- dKOXekJ(SH%7^2H-nD3{+P|x^6k&eT|{{q`q3Qzz5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_sat_dock.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_sat_dock.png new file mode 100644 index 0000000000000000000000000000000000000000..c0609a312b255d44be71edf3fd85f98c6bba5db2 GIT binary patch literal 1585 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 YN0#S4HozZdI@}Jmq!sckdsaBLDyZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/sat_chip.png b/src/main/resources/assets/hbm/textures/items/sat_chip.png index ff0a9aa21cfcbe2093fad13650ca6d2d6e9ee1f6..79f9fbc4aa0b4905392a8166da7dc9da1ec12ea2 100644 GIT binary patch delta 315 zcmV-B0mS~B0@ebMB!2;OQb$4nuFf3k0003HNklTAiA^o{SDTTEbYc1a|AME#g0P4DCx7!^HT8EJ5 zxvbY~#^W*Gdp;in52mK7DprFoukIdeEoE6U8ja}ndacHScDs#Iin1)(Y&HN)CKFbJ zE?>{@c<=GvQ#4goW5JQ4D8zez_HYLmMIkPUWj34r|BZgXFPHerAHRJWv-2sfcgO$$ N002ovPDHLkV1lt4k+T2* delta 255 zcmVOLFr|lU`caN}U7S@Cd=7AT?X3H$MtSI-STMRSI4X>N{0Q!~xaL@UF&gB4q z9O5{xhcpaBM_=*ULMc@r=66ST{uxTCx(F&rDLa)?c0r?|O?Yl)31bWv*C`+bc7F42 zt?kWv??xd+V|>EQI4(DiNo(B?FvfI)%#0{cz{~)EC{K`O8CG_NG)+Hm(3)F_2t`mK zkJi23V1U*dMNol=y8pJi9iKo%*iSCK5QlFk96IH%^8f_Ja_9yx_dEaq002ovPDHLk FV1nS$Y`Fjc diff --git a/src/main/resources/assets/hbm/textures/models/machines/autosaw.png b/src/main/resources/assets/hbm/textures/models/machines/autosaw.png index 61a97f9bf0047ff596b65660b20ebf692411a050..3c364ceaebb2e65ef80d1efa3dfcc8db378730f2 100644 GIT binary patch delta 3196 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 Ap#T5? From 73adc23f118afe8767823c183b67b111d93cf7d9 Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Sun, 19 Jul 2026 08:28:56 +0400 Subject: [PATCH 15/50] =?UTF-8?q?=D0=A1=D0=B3=D0=BE=D1=80=D0=B5=D0=BB=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D1=82=D0=BC=D0=BE=D1=81=D1=84=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java b/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java index 4a7400bb3..b1a83afe0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java +++ b/src/main/java/com/hbm/inventory/gui/GUISoyuzCapsule.java @@ -29,7 +29,7 @@ public class GUISoyuzCapsule extends GuiContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - this.fontRendererObj.drawString(name, 115 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); + this.fontRendererObj.drawString(name, 115 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0x7daf71); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } From 93f60ada2fc8f926e500f099d2b2bed0224afe93 Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Sun, 19 Jul 2026 08:31:12 +0400 Subject: [PATCH 16/50] =?UTF-8?q?=D0=92=20=D1=81=D0=BC=D1=8B=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=20=D1=82=D1=8B=20=D0=B2=D1=8B=D0=B6=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hbm/textures/gui/machine/gui_soyuz.png | Bin 4861 -> 4849 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_soyuz.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_soyuz.png index 2a2fe97b9e36d11439340afab503efa64a1dcacf..c7f8304000102bec571faf67cd8a740b9c9cb07e 100644 GIT binary patch delta 3980 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 b;oj_+IM3ck^@WT{{cW Date: Sun, 19 Jul 2026 16:24:35 +0200 Subject: [PATCH 17/50] added modulo to calculator yeah --- src/main/java/com/hbm/inventory/gui/GUICalculator.java | 2 +- src/main/java/com/hbm/util/Calculator.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUICalculator.java b/src/main/java/com/hbm/inventory/gui/GUICalculator.java index 63933eec5..ddfa8e3b7 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICalculator.java +++ b/src/main/java/com/hbm/inventory/gui/GUICalculator.java @@ -48,7 +48,7 @@ public class GUICalculator extends GuiScreen { if (!inputField.textboxKeyTyped(p_73869_1_, p_73869_2_)) super.keyTyped(p_73869_1_, p_73869_2_); - String input = inputField.getText().replaceAll("[^\\d+\\-*/^!.()\\sA-Za-z]+", ""); + String input = inputField.getText().replaceAll("[^\\d+\\-*/%^!.()\\sA-Za-z]+", ""); if (p_73869_1_ == 13 || p_73869_1_ == 10) { // when pressing enter (CR or LF) if (selectedHist != -1) { diff --git a/src/main/java/com/hbm/util/Calculator.java b/src/main/java/com/hbm/util/Calculator.java index 88d91000f..439c7c606 100644 --- a/src/main/java/com/hbm/util/Calculator.java +++ b/src/main/java/com/hbm/util/Calculator.java @@ -21,7 +21,7 @@ public class Calculator { for (int i = 0; i < tokens.length; i++) { if (tokens[i] == ' ') continue; - if (tokens[i] >= '0' && tokens[i] <= '9' || tokens[i] == '.' || (tokens[i] == '-' && (i == 0 || "+-*/^(".contains(String.valueOf(tokens[i - 1]))))) { + if (tokens[i] >= '0' && tokens[i] <= '9' || tokens[i] == '.' || (tokens[i] == '-' && (i == 0 || "+-*/%^(".contains(String.valueOf(tokens[i - 1]))))) { StringBuilder buffer = new StringBuilder(); if (tokens[i] == '-') { buffer.append('-'); // for negative numbers @@ -37,7 +37,7 @@ public class Calculator { operators.pop(); if (!operators.isEmpty() && operators.peek().length() > 1) values.push(evaluateFunction(operators.pop(), values.pop())); - } else if (tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/' || tokens[i] == '^') { + } else if (tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/' || tokens[i] == '%' || tokens[i] == '^') { while (!operators.isEmpty() && hasPrecedence(String.valueOf(tokens[i]), operators.peek())) values.push(evaluateOperator(operators.pop().charAt(0), values.pop(), values.pop())); operators.push(Character.toString(tokens[i])); @@ -67,6 +67,7 @@ public class Calculator { case '-': return y - x; case '*': return y * x; case '/': return y / x; + case '%': return y % x; case '^': return Math.pow(y, x); // should not happen here, but oh well } @@ -102,7 +103,7 @@ public class Calculator { char secondChar = second.charAt(0); if (secondChar == '(' || secondChar == ')') return false; - else return (firstChar != '*' && firstChar != '/' && firstChar != '^') || (secondChar != '+' && secondChar != '-'); + else return (firstChar != '*' && firstChar != '/' && firstChar != '%' && firstChar != '^') || (secondChar != '+' && secondChar != '-'); } /** Returns the input with all powers evaluated */ From b1a00f98a66e4962745acf60702c98271e95040c Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Mon, 20 Jul 2026 09:55:52 +0400 Subject: [PATCH 18/50] =?UTF-8?q?=D0=A3=20=D0=BC=D0=B5=D0=BD=D1=8F=20?= =?UTF-8?q?=D0=BE=D1=82=20=D1=81=D0=B0=D0=B6=D0=B8=20=D1=83=D0=B6=D0=B5=20?= =?UTF-8?q?=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=B0=20=D0=B1=D0=BE=D0=BB=D0=B8?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hbm/inventory/fluid/Fluids.java | 2 +- .../inventory/fluid/trait/FT_Combustible.java | 17 ++++--- .../inventory/fluid/trait/FT_Coolable.java | 9 ++-- .../inventory/fluid/trait/FT_Corrosive.java | 6 ++- .../inventory/fluid/trait/FT_Flammable.java | 5 +- .../inventory/fluid/trait/FT_Heatable.java | 15 +++--- .../fluid/trait/FT_PWRModerator.java | 6 ++- .../inventory/fluid/trait/FT_Pheromone.java | 5 +- .../inventory/fluid/trait/FT_Polluting.java | 13 +++-- .../hbm/inventory/fluid/trait/FT_Toxin.java | 6 +-- .../fluid/trait/FT_VentRadiation.java | 3 +- .../fluid/trait/FluidTraitSimple.java | 21 ++++---- .../hbm/items/tool/ItemPollutionDetector.java | 7 +-- src/main/resources/assets/hbm/lang/en_US.lang | 51 +++++++++++++++++++ 14 files changed, 116 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 99d05b0ac..2efe207de 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -194,7 +194,7 @@ public class Fluids { public static FluidType CONCRETE; public static FluidType DHC; - /* Lagacy names for compatibility purposes */ + /* Legacy names for compatibility purposes */ @Deprecated public static FluidType ACID; //JAOPCA uses this, apparently public static final HashBiMap renameMapping = HashBiMap.create(); diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java index a297d40ca..c0c21ffaf 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java @@ -6,6 +6,7 @@ import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.util.BobMathUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; @@ -25,11 +26,11 @@ public class FT_Combustible extends FluidTrait { public void addInfo(List info) { super.addInfo(info); - info.add(EnumChatFormatting.GOLD + "[Combustible]"); + info.add(EnumChatFormatting.GOLD + "[" + I18nUtil.resolveKey("hbmfluid.trait.combustible") + "]"); if(combustionEnergy > 0) { - info.add(EnumChatFormatting.GOLD + "Provides " + EnumChatFormatting.RED + "" + BobMathUtil.getShortNumber(combustionEnergy) + "HE " + EnumChatFormatting.GOLD + "per bucket"); - info.add(EnumChatFormatting.GOLD + "Fuel grade: " + EnumChatFormatting.RED + this.fuelGrade.getGrade()); + info.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.provides") + " " + EnumChatFormatting.RED + "" + BobMathUtil.getShortNumber(combustionEnergy) + "HE " + EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.perBucket")); + info.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.fuelGrade") + ": " + EnumChatFormatting.RED + this.fuelGrade.getGrade()); } } @@ -42,11 +43,11 @@ public class FT_Combustible extends FluidTrait { } public static enum FuelGrade { - LOW("Low"), //heating and industrial oil < star engine, iGen - MEDIUM("Medium"), //petroil < diesel generator - HIGH("High"), //diesel, gasoline < HP engine - AERO("Aviation"), //kerosene and other light aviation fuels < turbofan - GAS("Gaseous"); //fuel gasses like NG, PG and syngas < gas turbine + LOW(I18nUtil.resolveKey("hbmfluid.trait.fuel.low")), //heating and industrial oil < star engine, iGen + MEDIUM(I18nUtil.resolveKey("hbmfluid.trait.fuel.medium")), //petroil < diesel generator + HIGH(I18nUtil.resolveKey("hbmfluid.trait.fuel.high")), //diesel, gasoline < HP engine + AERO(I18nUtil.resolveKey("hbmfluid.trait.fuel.aviation")), //kerosene and other light aviation fuels < turbofan + GAS(I18nUtil.resolveKey("hbmfluid.trait.fuel.gaseous")); //fuel gasses like NG, PG and syngas < gas turbine private String grade; diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java index 3e57ac963..d2664fb22 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java @@ -9,6 +9,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; @@ -42,20 +43,20 @@ public class FT_Coolable extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.RED + "Thermal capacity: " + heatEnergy + " TU per " + amountReq + "mB"); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey("hbmfluid.trait.thermalCapacity") + ": " + heatEnergy + " " + I18nUtil.resolveKey("hbmfluid.trait.perTU") + " " + amountReq + "mB"); for(CoolingType type : CoolingType.values()) { double eff = getEfficiency(type); if(eff > 0) { - info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + "Efficiency: " + ((int) (eff * 100D)) + "%"); + info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); } } } public static enum CoolingType { - TURBINE("Turbine Steam"), - HEATEXCHANGER("Coolable"); + TURBINE(I18nUtil.resolveKey("hbmfluid.trait.steam")), + HEATEXCHANGER(I18nUtil.resolveKey("hbmfluid.trait.coolable")); public String name; diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Corrosive.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Corrosive.java index 2a459e25c..e1ed00366 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Corrosive.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Corrosive.java @@ -6,6 +6,8 @@ import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.util.EnumChatFormatting; public class FT_Corrosive extends FluidTrait { @@ -31,9 +33,9 @@ public class FT_Corrosive extends FluidTrait { public void addInfo(List info) { if(isHighlyCorrosive()) - info.add(EnumChatFormatting.GOLD + "[Strongly Corrosive]"); + info.add(EnumChatFormatting.GOLD + "[" + I18nUtil.resolveKey("hbmfluid.trait.corrosiveStrong") + "]"); else - info.add(EnumChatFormatting.YELLOW + "[Corrosive]"); + info.add(EnumChatFormatting.YELLOW + "[" + I18nUtil.resolveKey("hbmfluid.trait.corrosive") + "]"); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Flammable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Flammable.java index 82e309ef9..42078c841 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Flammable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Flammable.java @@ -6,6 +6,7 @@ import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.util.BobMathUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; @@ -28,10 +29,10 @@ public class FT_Flammable extends FluidTrait { public void addInfo(List info) { super.addInfo(info); - info.add(EnumChatFormatting.YELLOW + "[Flammable]"); + info.add(EnumChatFormatting.YELLOW + "[" + I18nUtil.resolveKey("hbmfluid.trait.flammable") + "]"); if(energy > 0) - info.add(EnumChatFormatting.YELLOW + "Provides " + EnumChatFormatting.RED + "" + BobMathUtil.getShortNumber(energy) + "TU " + EnumChatFormatting.YELLOW + "per bucket"); + info.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("hbmfluid.trait.provides") + " " + EnumChatFormatting.RED + "" + BobMathUtil.getShortNumber(energy) + "TU " + EnumChatFormatting.YELLOW + I18nUtil.resolveKey("hbmfluid.trait.perBucket")); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java index f51d64ab8..1e599b6a0 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java @@ -5,6 +5,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; @@ -42,13 +43,13 @@ public class FT_Heatable extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.RED + "Thermal capacity: " + this.getFirstStep().heatReq + " TU per " + this.getFirstStep().amountReq + "mB"); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey("hbmfluid.trait.thermalCapacity") + ": " + this.getFirstStep().heatReq + " " + I18nUtil.resolveKey("hbmfluid.trait.perTU") + " " + this.getFirstStep().amountReq + "mB"); for(HeatingType type : HeatingType.values()) { double eff = getEfficiency(type); if(eff > 0) { - info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + "Efficiency: " + ((int) (eff * 100D)) + "%"); + info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); } } } @@ -68,11 +69,11 @@ public class FT_Heatable extends FluidTrait { } public static enum HeatingType { - BOILER("Boilable"), - HEATEXCHANGER("Heatable"), - PWR("PWR Coolant"), - ICF("ICF Coolant"), - PA("Particle Accelerator Coolant"); + BOILER(I18nUtil.resolveKey("hbmfluid.trait.boilable")), + HEATEXCHANGER(I18nUtil.resolveKey("hbmfluid.trait.heatable")), + PWR(I18nUtil.resolveKey("hbmfluid.trait.coolantPWR")), + ICF(I18nUtil.resolveKey("hbmfluid.trait.coolantICF")), + PA(I18nUtil.resolveKey("hbmfluid.trait.coolantPA")); public String name; diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_PWRModerator.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_PWRModerator.java index 26f254e54..4d873a8cc 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_PWRModerator.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_PWRModerator.java @@ -6,6 +6,8 @@ import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.util.EnumChatFormatting; public class FT_PWRModerator extends FluidTrait { @@ -22,13 +24,13 @@ public class FT_PWRModerator extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.BLUE + "[PWR Flux Multiplier]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.pwrFluxMultiplier") + "]"); } @Override public void addInfoHidden(List info) { int mult = (int) (multiplier * 100 - 100); - info.add(EnumChatFormatting.BLUE + "Core flux " + (mult >= 0 ? "+" : "") + mult + "%"); + info.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("hbmfluid.trait.pwrFluxCore") + " " + (mult >= 0 ? "+" : "") + mult + "%"); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Pheromone.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Pheromone.java index 123b2751b..670cbc70c 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Pheromone.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Pheromone.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import net.minecraft.util.EnumChatFormatting; +import com.hbm.util.i18n.I18nUtil; import java.io.IOException; import java.util.List; @@ -25,9 +26,9 @@ public class FT_Pheromone extends FluidTrait{ public void addInfo(List info) { if(type == 1) { - info.add(EnumChatFormatting.AQUA + "[Glyphid Pheromones]"); + info.add(EnumChatFormatting.AQUA + "[" + I18nUtil.resolveKey("hbmfluid.trait.glyphidPheromones") + "]"); } else { - info.add(EnumChatFormatting.BLUE + "[Modified Pheromones]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.modifiedPheromones") + "]"); } } diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Polluting.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Polluting.java index 79103bc68..ab4566820 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Polluting.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Polluting.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; +import java.util.Locale; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; @@ -11,9 +12,11 @@ import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraft.util.StatCollector; public class FT_Polluting extends FluidTrait { @@ -33,20 +36,20 @@ public class FT_Polluting extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.GOLD + "[Polluting]"); + info.add(EnumChatFormatting.GOLD + "[" + I18nUtil.resolveKey("hbmfluid.trait.polluting") + "]"); } @Override public void addInfoHidden(List info) { if(!this.releaseMap.isEmpty()) { - info.add(EnumChatFormatting.GREEN + "When spilled:"); - for(Entry entry : releaseMap.entrySet()) info.add(EnumChatFormatting.GREEN + " - " + entry.getValue() + " " + entry.getKey() + " per mB"); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("hbmfluid.trait.spilled") + ":"); + for(Entry entry : releaseMap.entrySet()) info.add(EnumChatFormatting.GREEN + " - " + entry.getValue() + " " + StatCollector.translateToLocal("pollution.trait." + entry.getKey().name().toLowerCase(Locale.US)) + " " + I18nUtil.resolveKey("hbmfluid.trait.perMB")); } if(!this.burnMap.isEmpty()) { - info.add(EnumChatFormatting.RED + "When burned:"); - for(Entry entry : burnMap.entrySet()) info.add(EnumChatFormatting.RED + " - " + entry.getValue() + " " + entry.getKey() + " per mB"); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey("hbmfluid.trait.burned") + ":"); + for(Entry entry : burnMap.entrySet()) info.add(EnumChatFormatting.RED + " - " + entry.getValue() + " " + StatCollector.translateToLocal("pollution.trait." + entry.getKey().name().toLowerCase(Locale.US)) + " " + I18nUtil.resolveKey("hbmfluid.trait.perMB")); } } 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 748459014..92e60adf7 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 @@ -31,7 +31,7 @@ public class FT_Toxin extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.LIGHT_PURPLE + "[Toxin]"); + info.add(EnumChatFormatting.LIGHT_PURPLE + "[" + I18nUtil.resolveKey("hbmfluid.trait.toxin") + "]"); for(ToxinEntry entry : entries) { entry.addInfo(info); @@ -101,7 +101,7 @@ public class FT_Toxin extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (requires hazmat suit)" : "") + ": " + EnumChatFormatting.YELLOW + String.format(Locale.US, "%,.1f", amount * 20 / delay) + " DPS"); + info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (" + I18nUtil.resolveKey("hbmfluid.trait.hazmat") + ")" : "") + ": " + EnumChatFormatting.YELLOW + String.format(Locale.US, "%,.1f", amount * 20 / delay) + " " + I18nUtil.resolveKey("hbmfluid.trait.perDamage")); } } @@ -130,7 +130,7 @@ public class FT_Toxin extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (requires hazmat suit)" + EnumChatFormatting.YELLOW : "") + ":"); + info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (" + I18nUtil.resolveKey("hbmfluid.trait.hazmat") + ")" + EnumChatFormatting.YELLOW : "") + ":"); for(PotionEffect eff : effects) { info.add(EnumChatFormatting.YELLOW + " - " + I18nUtil.resolveKey(eff.getEffectName()) + (eff.getAmplifier() > 0 ? " " + StatCollector.translateToLocal("potion.potency." + eff.getAmplifier()).trim() : "") + " " + StringUtils.ticksToElapsedTime(eff.getDuration())); diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_VentRadiation.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_VentRadiation.java index 976dfedb2..dbc4fdfa6 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_VentRadiation.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_VentRadiation.java @@ -7,6 +7,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; @@ -32,7 +33,7 @@ public class FT_VentRadiation extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.YELLOW + "[Radioactive]"); + info.add(EnumChatFormatting.YELLOW + "[" + I18nUtil.resolveKey("hbmfluid.trait.radioactive") + "]"); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java index 71cdc2a3e..30a7ae2e9 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java @@ -2,37 +2,38 @@ package com.hbm.inventory.fluid.trait; import java.util.List; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.util.EnumChatFormatting; public class FluidTraitSimple { public static class FT_Gaseous extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.BLUE + "[Gaseous]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.gaseous") + "]"); } } /** gaseous at room temperature, for cryogenic hydrogen for example */ public static class FT_Gaseous_ART extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.BLUE + "[Gaseous at Room Temperature]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.gaseousRoom") + "]"); } } public static class FT_Liquid extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.BLUE + "[Liquid]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.liquid") + "]"); } } /** to viscous to be sprayed/turned into a mist */ public static class FT_Viscous extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.BLUE + "[Viscous]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.viscous") + "]"); } } - - public static class FT_Plasma extends FluidTrait { + @Deprecated public static class FT_Plasma extends FluidTrait { @Override public void addInfoHidden(List info) { info.add(EnumChatFormatting.LIGHT_PURPLE + "[Plasma]"); } @@ -40,25 +41,25 @@ public class FluidTraitSimple { public static class FT_Amat extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.DARK_RED + "[Antimatter]"); + info.add(EnumChatFormatting.DARK_RED + "[" + I18nUtil.resolveKey("hbmfluid.trait.antimatter") + "]"); } } public static class FT_LeadContainer extends FluidTrait { @Override public void addInfo(List info) { - info.add(EnumChatFormatting.DARK_RED + "[Requires hazardous material tank to hold]"); + info.add(EnumChatFormatting.DARK_RED + "[" + I18nUtil.resolveKey("hbmfluid.trait.leadContainer") + "]"); } } public static class FT_Delicious extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.DARK_GREEN + "[Delicious]"); + info.add(EnumChatFormatting.DARK_GREEN + "[" + I18nUtil.resolveKey("hbmfluid.trait.delicious") + "]"); } } public static class FT_Unsiphonable extends FluidTrait { @Override public void addInfoHidden(List info) { - info.add(EnumChatFormatting.BLUE + "[Ignored by siphon]"); + info.add(EnumChatFormatting.BLUE + "[" + I18nUtil.resolveKey("hbmfluid.trait.unsiphonable") + "]"); } } diff --git a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java index c83ca9459..c05f62632 100644 --- a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java @@ -6,6 +6,7 @@ import com.hbm.handler.pollution.PollutionHandler.PollutionType; 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.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; @@ -34,9 +35,9 @@ public class ItemPollutionDetector extends Item { heavymetal = ((int) (heavymetal * 100)) / 100F; //fallout = ((int) (fallout * 100)) / 100F; - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Soot: " + soot).color(EnumChatFormatting.YELLOW).flush(), 100, 4000), (EntityPlayerMP) entity); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Poison: " + poison).color(EnumChatFormatting.YELLOW).flush(), 101, 4000), (EntityPlayerMP) entity); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Heavy metal: " + heavymetal).color(EnumChatFormatting.YELLOW).flush(), 102, 4000), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.soot") + ": " + soot).color(EnumChatFormatting.YELLOW).flush(), 100, 4000), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.poison") + ": " + poison).color(EnumChatFormatting.YELLOW).flush(), 101, 4000), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.heavymetal") + ": " + heavymetal).color(EnumChatFormatting.YELLOW).flush(), 102, 4000), (EntityPlayerMP) entity); //PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Fallout: " + fallout).color(EnumChatFormatting.YELLOW).flush(), 103, 4000), (EntityPlayerMP) entity); } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 375d2c3c0..c4b20d6c5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6392,6 +6392,57 @@ tile.round_airlock_door.name=Round Airlock Door tile.secure_access_door.name=Secure Access Door tile.sliding_seal_door.name=Sliding Seal Door +hbmfluid.trait.antimatter=Antimatter +hbmfluid.trait.boilable=Boilable +hbmfluid.trait.burned=When burned +hbmfluid.trait.combustible=Combustible +hbmfluid.trait.coolable=Coolable +hbmfluid.trait.coolantICF=ICF Coolant +hbmfluid.trait.coolantPA=Particle Accelerator Coolant +hbmfluid.trait.coolantPWR=PWR Coolant +hbmfluid.trait.corrosive=Corrosive +hbmfluid.trait.corrosiveStrong=Strongly Corrosive +hbmfluid.trait.delicious=Delicious +hbmfluid.trait.efficiency=Efficiency +hbmfluid.trait.flammable=Flammable +hbmfluid.trait.fuel.aviation=Aviation +hbmfluid.trait.fuel.gaseous=Gaseous +hbmfluid.trait.fuel.high=High +hbmfluid.trait.fuel.low=Low +hbmfluid.trait.fuel.medium=Medium +hbmfluid.trait.fuelGrade=Fuel grade +hbmfluid.trait.gaseous=Gaseous +hbmfluid.trait.gaseousRoom=Gaseous at Room Temperature +hbmfluid.trait.glyphidPheromones=Glyphid Pheromones +hbmfluid.trait.hazmat=requires hazmat suit +hbmfluid.trait.heatable=Heatable +hbmfluid.trait.leadContainer=Requires hazardous material tank to hold +hbmfluid.trait.liquid=Liquid +hbmfluid.trait.modifiedPheromones=Modified Pheromones +hbmfluid.trait.perBucket=per bucket +hbmfluid.trait.perDamage=DPS +hbmfluid.trait.perMB=per mB +hbmfluid.trait.perTU=TU per +hbmfluid.trait.polluting=Polluting +hbmfluid.trait.provides=Provides +hbmfluid.trait.pwrFluxCore=Core flux +hbmfluid.trait.pwrFluxMultiplier=PWR Flux Multiplier +hbmfluid.trait.radioactive=Radioactive +hbmfluid.trait.spilled=When spilled +hbmfluid.trait.steam=Turbine Steam +hbmfluid.trait.thermalCapacity=Thermal capacity +hbmfluid.trait.toxin=Toxin +hbmfluid.trait.unsiphonable=Ignored by siphon +hbmfluid.trait.viscous=Viscous + +pollution.soot=Soot +pollution.poison=Poison +pollution.heavymetal=Heavy metal + +pollution.trait.soot=SOOT +pollution.trait.poison=POISON +pollution.trait.heavymetal=HEAVY METAL + trait.asbestos=Asbestos trait.blinding=Blinding trait.coal=Coal Dust From 38d29878c89fb2e474713fb3a5f9e694d081b901 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Tue, 21 Jul 2026 00:05:55 +0200 Subject: [PATCH 19/50] more ports on the pa yay j --- .../blocks/machine/albion/BlockPASource.java | 7 +++++-- .../machine/albion/TileEntityPASource.java | 3 +++ .../models/particleaccelerator/source.png | Bin 8163 -> 10669 bytes 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java index 4b7461433..612bfa56d 100644 --- a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java +++ b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java @@ -9,6 +9,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.albion.TileEntityPASource; +import com.hbm.util.fauxpointtwelve.DirPos; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -43,9 +44,8 @@ public class BlockPASource extends BlockDummyable implements ITooltipProvider { @Override public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); - - ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); this.makeExtra(world, x + rot.offsetX * 4, y, z + rot.offsetZ * 4); this.makeExtra(world, x + dir.offsetX, y, z + dir.offsetZ); this.makeExtra(world, x + dir.offsetX + rot.offsetX * 2, y, z + dir.offsetZ + rot.offsetZ * 2); @@ -53,6 +53,9 @@ public class BlockPASource extends BlockDummyable implements ITooltipProvider { this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ); this.makeExtra(world, x - dir.offsetX + rot.offsetX * 2, y, z - dir.offsetZ + rot.offsetZ * 2); this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y, z - dir.offsetZ - rot.offsetZ * 2); + this.makeExtra(world, x, y-1, z); + this.makeExtra(world, x + dir.offsetX + rot.offsetX * 2, y-1, z + rot.offsetZ*2); + this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y-1, z - rot.offsetZ*2); } @Override 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 a74cdd0d8..a472b55dd 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -167,6 +167,9 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, dir.getOpposite()), new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, dir.getOpposite()), new DirPos(xCoord + rot.offsetX * 5, yCoord, zCoord + rot.offsetZ * 5, rot), + new DirPos(xCoord, yCoord-2, zCoord, dir), + new DirPos(xCoord + rot.offsetX * 2, yCoord-2, zCoord + rot.offsetZ, dir), + new DirPos(xCoord - rot.offsetX * 2, yCoord-2, zCoord - rot.offsetZ, dir), }; } diff --git a/src/main/resources/assets/hbm/textures/models/particleaccelerator/source.png b/src/main/resources/assets/hbm/textures/models/particleaccelerator/source.png index 1c7bb4de69c2a6ef5f11c6d63b7537c317b26398..95498a359961c755730f534017358e16521a0f62 100644 GIT binary patch literal 10669 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 literal 8163 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 Date: Tue, 21 Jul 2026 11:56:12 +0200 Subject: [PATCH 20/50] fixed fixed --- .../java/com/hbm/blocks/machine/albion/BlockPASource.java | 6 +++--- .../hbm/tileentity/machine/albion/TileEntityPASource.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java index 612bfa56d..e383f4e49 100644 --- a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java +++ b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java @@ -53,9 +53,9 @@ public class BlockPASource extends BlockDummyable implements ITooltipProvider { this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ); this.makeExtra(world, x - dir.offsetX + rot.offsetX * 2, y, z - dir.offsetZ + rot.offsetZ * 2); this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y, z - dir.offsetZ - rot.offsetZ * 2); - this.makeExtra(world, x, y-1, z); - this.makeExtra(world, x + dir.offsetX + rot.offsetX * 2, y-1, z + rot.offsetZ*2); - this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y-1, z - rot.offsetZ*2); + this.makeExtra(world, x,y - 1, z); + this.makeExtra(world, x + rot.offsetX * 2, y - 1, z + rot.offsetZ * 2); + this.makeExtra(world, x - rot.offsetX * 2, y - 1, z - rot.offsetZ * 2); } @Override 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 a472b55dd..825169a17 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -168,8 +168,8 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, dir.getOpposite()), new DirPos(xCoord + rot.offsetX * 5, yCoord, zCoord + rot.offsetZ * 5, rot), new DirPos(xCoord, yCoord-2, zCoord, dir), - new DirPos(xCoord + rot.offsetX * 2, yCoord-2, zCoord + rot.offsetZ, dir), - new DirPos(xCoord - rot.offsetX * 2, yCoord-2, zCoord - rot.offsetZ, dir), + new DirPos(xCoord + rot.offsetX * 2, yCoord-2, zCoord + rot.offsetZ * 2, dir), + new DirPos(xCoord - rot.offsetX * 2, yCoord-2, zCoord - rot.offsetZ * 2, dir), }; } From 1917eeb191d5773bef937cd0ca7c945a30b69448 Mon Sep 17 00:00:00 2001 From: Wolf Date: Tue, 21 Jul 2026 23:48:49 -0400 Subject: [PATCH 21/50] A rectangle is not always a cube, but a cube is a cube, its also a rectangle --- .../java/com/hbm/blocks/BlockDummyable.java | 183 ++++++++++++++---- .../fusion/MachineFusionPlasmaForge.java | 2 + 2 files changed, 146 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 062781c0e..8f5051aaf 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -6,7 +6,7 @@ import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; import com.hbm.util.EntityDamageUtil; -import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -15,6 +15,7 @@ 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.OpenGlHelper; import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -34,10 +35,14 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraft.client.renderer.Tessellator; import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.Set; + +import org.lwjgl.opengl.GL11; public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable, INBTBlockTransformable { @@ -596,47 +601,147 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl return meta; } + public int[][] getAllDimensions() { - return new int[][] { getDimensions() }; -} -@SideOnly(Side.CLIENT) -public void drawPlacementHighlight(EntityPlayer player, float interp) { - MovingObjectPosition mop = EntityDamageUtil.getMouseOver(player, 5.0D); - - if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { - double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) interp; - double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp; - double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) interp; + return new int[][] { getDimensions() }; + } + + @SideOnly(Side.CLIENT) + public void drawPlacementHighlight(EntityPlayer player, float interp) { + MovingObjectPosition mop = EntityDamageUtil.getMouseOver(player, 5.0D); + + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { + double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) interp; + double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp; + double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) interp; - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - int o = -getOffset(); - int py = mop.blockY + getHeightOffset(); + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int o = -getOffset(); + int pY = mop.blockY + getHeightOffset(); - ForgeDirection facing = ForgeDirection.NORTH; - if(i == 0) facing = ForgeDirection.getOrientation(2); - if(i == 1) facing = ForgeDirection.getOrientation(5); - if(i == 2) facing = ForgeDirection.getOrientation(3); - if(i == 3) facing = ForgeDirection.getOrientation(4); + ForgeDirection facing = ForgeDirection.NORTH; + if(i == 0) facing = ForgeDirection.getOrientation(2); + if(i == 1) facing = ForgeDirection.getOrientation(5); + if(i == 2) facing = ForgeDirection.getOrientation(3); + if(i == 3) facing = ForgeDirection.getOrientation(4); + + facing = getDirModified(facing); + + double originX = mop.blockX + facing.offsetX * o; + double originY = pY + (mop.sideHit == 1 ? 1 : 0); + double originZ = mop.blockZ + facing.offsetZ * o; + + //float exp = 0.002F; + //ICustomBlockHighlight.setup(); + boolean canPlace = checkRequirement(player.worldObj, mop.blockX, pY + 1, mop.blockZ, facing, o); + //int color = canPlace ? 0x008000 : 0x800000; + Tessellator tess = Tessellator.instance; + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + //mc.renderEngine.bindTexture(EMPTY); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + //GL11.glColor3f(1F, 1F, 1F); + GL11.glLineWidth(2.0F); + GL11.glDepthMask(false); + //tess.setTranslation(-dX, -dY, -dZ); + tess.startDrawing(GL11.GL_LINES); + tess.setBrightness(240); + + if (canPlace) { + tess.setColorRGBA(0, 255, 0, 255); + } else { + tess.setColorRGBA(255, 0, 0, 255); + } + /* + for(int[] dims : getAllDimensions()) { + int[] rot = MultiblockHandlerXR.rotate(dims, facing); + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(-rot[4], -rot[1], -rot[2], rot[5] + 1, rot[0] + 1, rot[3] + 1); + RenderGlobal.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(originX, originY, originZ), color); + } + */ + List blocks = new java.util.ArrayList<>(); + Set set = new java.util.HashSet<>(); + + for(int[] dims : getAllDimensions()) { + int[] rot = MultiblockHandlerXR.rotate(dims, facing); + for(int bx = -rot[4]; bx <= rot[5]; bx++) { + for(int by = -rot[1]; by <= rot[0]; by++) { + for(int bz = -rot[2]; bz <= rot[3]; bz++) { + BlockPos bp = new BlockPos( + MathHelper.floor_double(originX) + bx, + MathHelper.floor_double(originY) + by, + MathHelper.floor_double(originZ) + bz + ); + blocks.add(bp); + set.add(bp); + } + } + + } + } + for(BlockPos pos : blocks) { + boolean px = set.contains(pos.add(1, 0, 0)); + boolean nx = set.contains(pos.add(-1, 0, 0)); + boolean ppy = set.contains(pos.add(0, 1, 0)); + boolean ny = set.contains(pos.add(0, -1, 0)); + boolean ppz = set.contains(pos.add(0, 0, 1)); + boolean nz = set.contains(pos.add(0, 0, -1)); + + double minX = pos.getX() - dX; + double maxX = pos.getX() + 1 - dX; + double minY = pos.getY() - dY; + double maxY = pos.getY() + 1 - dY; + double minZ = pos.getZ() - dZ; + double maxZ = pos.getZ() + 1 - dZ; + if(!ppy) { + if(!nx) { tess.addVertex(minX, maxY, minZ); tess.addVertex(minX, maxY, maxZ); } + if(!ppz) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(maxX, maxY, maxZ); } + if(!px) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, maxY, minZ); } + if(!nz) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(minX, maxY, minZ); } + } + if(!ny) { + if(!nx) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, minY, maxZ); } + if(!ppz) { tess.addVertex(minX, minY, maxZ); tess.addVertex(maxX, minY, maxZ); } + if(!px) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(maxX, minY, minZ); } + if(!nz) { tess.addVertex(maxX, minY, minZ); tess.addVertex(minX, minY, minZ); } + } + if(!nz) { + if(!nx) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, maxY, minZ); } + if(!ppy) { tess.addVertex(minX, maxY, minZ); tess.addVertex(maxX, maxY, minZ); } + if(!px) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(maxX, minY, minZ); } + if(!ny) { tess.addVertex(maxX, minY, minZ); tess.addVertex(minX, minY, minZ); } + } + if(!ppz) { + if(!nx) { tess.addVertex(minX, minY, maxZ); tess.addVertex(minX, maxY, maxZ); } + if(!ppy) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(maxX, maxY, maxZ); } + if(!px) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, minY, maxZ); } + if(!ny) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(minX, minY, maxZ); } + } + if(!nx) { + if(!nz) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, maxY, minZ); } + if(!ppy) { tess.addVertex(minX, maxY, minZ); tess.addVertex(minX, maxY, maxZ); } + if(!ppz) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(minX, minY, maxZ); } + if(!ny) { tess.addVertex(minX, minY, maxZ); tess.addVertex(minX, minY, minZ); } + } + if(!px) { + if(!nz) { tess.addVertex(maxX, minY, minZ); tess.addVertex(maxX, maxY, minZ); } + if(!ppy) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(maxX, maxY, maxZ); } + if(!ppz) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, minY, maxZ); } + if(!ny) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(maxX, minY, minZ); } + } + } - facing = getDirModified(facing); - - double originX = mop.blockX - dX + facing.offsetX * o; - double originY = py - dY + (mop.sideHit == 1 ? 1 : 0); - double originZ = mop.blockZ - dZ + facing.offsetZ * o; - - float exp = 0.002F; - ICustomBlockHighlight.setup(); - boolean canPlace = checkRequirement(player.worldObj, mop.blockX, py + 1, mop.blockZ, facing, o); - int color = canPlace ? 0x008000 : 0x800000; - - for(int[] dims : getAllDimensions()) { - int[] rot = MultiblockHandlerXR.rotate(dims, facing); - AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(-rot[4], -rot[1], -rot[2], rot[5] + 1, rot[0] + 1, rot[3] + 1); - RenderGlobal.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(originX, originY, originZ), color); - } - - ICustomBlockHighlight.cleanup(); - } -} + tess.draw(); + tess.setTranslation(0, 0, 0); + GL11.glDepthMask(true); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, OpenGlHelper.lastBrightnessX, OpenGlHelper.lastBrightnessY); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + //ICustomBlockHighlight.cleanup(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java index 1e61fe62e..7f06b7840 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java @@ -31,6 +31,7 @@ public class MachineFusionPlasmaForge extends BlockDummyable { @Override public int[] getDimensions() { return new int[] { 2, 0, 2, 2, 5, 5 }; } @Override public int getOffset() { return 5; } + @Override public int[][] getAllDimensions() { return new int[][] { @@ -45,6 +46,7 @@ public class MachineFusionPlasmaForge extends BlockDummyable { new int[] { 3, -2, 1, 1, 5, 5 } }; } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && From 5ac837125c76ecf0fb73eea7be235b4139b98dbc Mon Sep 17 00:00:00 2001 From: HbmMods Date: Wed, 22 Jul 2026 15:05:31 +0200 Subject: [PATCH 22/50] now technically operational --- .../blocks/machine/pile/BlockPileBrick.java | 2 +- .../blocks/machine/pile/BlockPileDevice.java | 30 +- .../com/hbm/items/machine/ItemPileRodMK2.java | 38 ++- .../machine/pile/TileEntityPileCore.java | 305 +++++++++++++++--- .../machine/pile/TileEntityPileVent.java | 2 +- 5 files changed, 320 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java index f309e03ba..955b8ac53 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java @@ -127,7 +127,7 @@ public class BlockPileBrick extends Block implements IToolable { world.setBlock(iX, iY, iZ, ModBlocks.pile_block, BlockPile.META_CORE, 3); TileEntityPileCore core = (TileEntityPileCore) world.getTileEntity(iX, iY, iZ); core.orientation = PileOrientation.getOrientation(dir); - core.setupSize(posHeight + negHeight + 1, left + right + 1, depth + 1); + core.setupSize(posHeight + negHeight + 1, left, right, depth + 1); } else { int edgeCount = 0; if(h == -negHeight || h == posHeight) edgeCount++; diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java index d362e0c7e..b59090bce 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java @@ -6,14 +6,17 @@ import java.util.List; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; import com.hbm.main.NTMSounds; import com.hbm.tileentity.machine.pile.TileEntityPileControl; import com.hbm.tileentity.machine.pile.TileEntityPileLoader; import com.hbm.tileentity.machine.pile.TileEntityPileVent; import com.hbm.util.i18n.I18nUtil; +import api.hbm.block.IToolable; 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.creativetab.CreativeTabs; @@ -28,7 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider { +public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider, IToolable { public static final int ITEM_META_LOADER = 0; public static final int ITEM_META_VENT = 1; @@ -79,6 +82,8 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILoo @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()) return false; + int meta = world.getBlockMetadata(x, y, z); meta -= meta % 4; @@ -184,4 +189,27 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILoo if(meta == ITEM_META_CONTROL) return this.getUnlocalizedName() + ".control"; return this.getUnlocalizedName(); } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + int meta = world.getBlockMetadata(x, y, z); + + if(meta >= BLOCK_META_CONTROL) { + y -= 1; + side = 1; + } else { + ForgeDirection dir = ForgeDirection.getOrientation(meta % 4 + 2); + x -= dir.offsetX; + z -= dir.offsetZ; + side = dir.ordinal(); + } + + Block b = world.getBlock(x, y, z); + if(b == ModBlocks.pile_block) { + return ((BlockPile) b).onScrew(world, player, x, y, z, side, fX, fY, fZ, tool); + } + + return false; + } } diff --git a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java index 2fd4fc344..7a0542ccc 100644 --- a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java +++ b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java @@ -29,18 +29,19 @@ public class ItemPileRodMK2 extends ItemEnumMulti { } public static enum EnumPileRod { - RA226BE(1D), - PO210BE(1D), - ZR( 0D, 0D, 0D), - NU( 1D, 1_000D, 1D), - RGP( 1D, 1_000D, 1D), - PU239( 1D, 1_000D, 1D), - WASTE( 1D, 1_000D, 1D); + /* 0 */ RA226BE(1D), + /* 1 */ PO210BE(1D), + /* 2 */ ZR( 0D, 0D, 0D, 2), + /* 3 */ NU( 1D, 1_000D, 1D, 4), + /* 4 */ PU239( 1D, 1_000D, 1D, 5), + /* 5 */ RGP( 1D, 1_000D, 1D, 6), + /* 6 */ WASTE( 1D, 0D, 1D, 6); public double reactionMult = 1.0D; public double life = 1_000D; - public double heatMult = 1.0D; + public double heatMult = 0.0D; public double neutronSource = 0D; + public int turnsInto; private EnumPileRod(double neutronSource) { this.neutronSource = neutronSource; @@ -49,10 +50,11 @@ public class ItemPileRodMK2 extends ItemEnumMulti { this.heatMult = 0; } - private EnumPileRod(double reaction, double life, double heat) { + private EnumPileRod(double reaction, double life, double heat, int turnsInto) { this.reactionMult = reaction; this.life = life; this.heatMult = heat; + this.turnsInto = turnsInto; } } @@ -87,4 +89,22 @@ public class ItemPileRodMK2 extends ItemEnumMulti { } return outFlux; } + + public static double getHeatPerNeutron(ItemStack stack) { + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + return rod.heatMult; + } + + public static ItemStack react(ItemStack stack, double inFlux) { + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + if(rod.life <= 0) return stack; + double dep = getDepletion(stack) + inFlux; + + if(dep < rod.life) { + setDepletion(stack, dep); + return stack; + } else { + return new ItemStack(stack.getItem(), 1, rod.turnsInto); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index a92e97f8d..b47823138 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -8,18 +8,25 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.MachinePWRController; import com.hbm.blocks.machine.pile.BlockPile; import com.hbm.interfaces.NotableComments; +import com.hbm.items.machine.ItemPileRodMK2; +import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.main.NTMSounds; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.TileEntityTickingBase; +import com.hbm.util.EnumUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.item.EntityItem; 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.nbt.NBTTagList; +import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; @NotableComments @@ -56,12 +63,23 @@ public class TileEntityPileCore extends TileEntityTickingBase { public List ventilationChannels = new ArrayList(); public List controlChannels = new ArrayList(); + public int left; + public int right; + /** + * Segments are fuel and control channels grouped by vertical slices viewed from the front, this makes the simulation part easier. + */ + public PileSegment[] segments = new PileSegment[0]; + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); height = nbt.getInteger("height"); width = nbt.getInteger("width"); depth = nbt.getInteger("depth"); + left = nbt.getInteger("left"); + right = nbt.getInteger("right"); + + segments = new PileSegment[width]; int fuelCount = nbt.getByte("fc"); int ventCount = nbt.getByte("vc"); @@ -74,6 +92,30 @@ public class TileEntityPileCore extends TileEntityTickingBase { for(int i = 0; i < fuelCount; i++) fuelChannels.add(readChannelFromNBT(nbt, "f" + i)); for(int i = 0; i < ventCount; i++) ventilationChannels.add(readChannelFromNBT(nbt, "v" + i)); for(int i = 0; i < contCount; i++) controlChannels.add(readChannelFromNBT(nbt, "c" + i)); + + this.recalculateSegments(); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("height", height); + nbt.setInteger("width", width); + nbt.setInteger("depth", depth); + nbt.setInteger("left", left); + nbt.setInteger("right", right); + + int fuelCount = fuelChannels.size(); + int ventCount = ventilationChannels.size(); + int contCount = controlChannels.size(); + + nbt.setByte("fc", (byte) fuelCount); + nbt.setByte("vc", (byte) ventCount); + nbt.setByte("cc", (byte) contCount); + + for(int i = 0; i < fuelCount; i++) fuelChannels.get(i).writeChannelToNBT(nbt, "f" + i); + for(int i = 0; i < ventCount; i++) ventilationChannels.get(i).writeChannelToNBT(nbt, "v" + i); + for(int i = 0; i < contCount; i++) controlChannels.get(i).writeChannelToNBT(nbt, "c" + i); } public PileChannel getFuelChannel(int x, int y, int z) { return getChannel(x, y, z, fuelChannels); } @@ -93,30 +135,13 @@ public class TileEntityPileCore extends TileEntityTickingBase { return list.indexOf(chan); // more reliable when channels change and not that big of a deal because we have lists in single digit length } - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setInteger("height", height); - nbt.setInteger("width", width); - nbt.setInteger("depth", depth); - - int fuelCount = fuelChannels.size(); - int ventCount = ventilationChannels.size(); - int contCount = controlChannels.size(); - - nbt.setByte("fc", (byte) fuelCount); - nbt.setByte("vc", (byte) ventCount); - nbt.setByte("cc", (byte) contCount); - - for(int i = 0; i < fuelCount; i++) fuelChannels.get(i).writeChannelToNBT(nbt, "f" + i); - for(int i = 0; i < ventCount; i++) ventilationChannels.get(i).writeChannelToNBT(nbt, "v" + i); - for(int i = 0; i < contCount; i++) controlChannels.get(i).writeChannelToNBT(nbt, "c" + i); - } - - public TileEntityPileCore setupSize(int h, int w, int d) { + public TileEntityPileCore setupSize(int h, int l, int r, int d) { this.height = h; - this.width = w; + this.width = l + 1 + r; this.depth = d; + this.left = l; + this.right = r; + this.segments = new PileSegment[width]; return this; } @@ -148,6 +173,7 @@ public class TileEntityPileCore extends TileEntityTickingBase { worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_DUMMY, 3); } worldObj.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, NTMSounds.VANILLA_PLINK, 1F, 0.75F); + recalculateSegments(); return true; } } @@ -190,6 +216,8 @@ public class TileEntityPileCore extends TileEntityTickingBase { worldObj.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, NTMSounds.VANILLA_PLINK, 1F, 1.25F); this.markChanged(); + recalculateSegments(); + return true; } @@ -198,37 +226,168 @@ public class TileEntityPileCore extends TileEntityTickingBase { if(!worldObj.isRemote) { - for(PileChannel chan : this.ventilationChannels) { - if(chan.air <= 0) continue; - - int toUse = (int) Math.ceil(chan.air * 5D / 1_000); - chan.air -= toUse; - - if(worldObj.getTotalWorldTime() % 3 != 0) continue; - - double x = chan.entry.getX() + 0.5 + chan.entry.getDir().offsetX * (this.width - 0.375); - double y = chan.entry.getY() + 0.5; - double z = chan.entry.getZ() + 0.5 + chan.entry.getDir().offsetZ * (this.width - 0.375); - Random rand = worldObj.rand; - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "tower"); - data.setFloat("lift", 1F); - data.setFloat("base", 0.125F + rand.nextFloat() * 0.125F); - data.setFloat("max", 1F); - data.setFloat("strafe", 0.0025F); - data.setBoolean("noWind", true); - data.setInteger("life", 20 + worldObj.rand.nextInt(30)); - data.setInteger("color", 0xa0a0a0); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); + this.runSimulation(); + this.handleVentilation(); + } + } + + protected void runSimulation() { + + // reaction + for(PileChannel chan : this.fuelChannels) { + if(chan.length <= 0) continue; + double producedNeutrons = 0; + double latestDepletion = 0D; + + for(int i = 0; i < chan.rods.length; i++) { + ItemStack stack = chan.rods[i]; + if(stack != null && stack.getItem() instanceof ItemPileRodMK2) { + double neut = ItemPileRodMK2.getReactivity(stack, chan.incomingNeutrons / chan.length); + producedNeutrons += neut; + chan.heat += neut * ItemPileRodMK2.getHeatPerNeutron(stack); + chan.rods[i] = ItemPileRodMK2.react(stack, neut); + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + double life = rod.life < 1 ? 1 : rod.life; + latestDepletion = ItemPileRodMK2.getDepletion(chan.rods[i]) / life; + } + } + chan.outgoingNeutrons = producedNeutrons; + chan.incomingNeutrons = 0; + + /// DEBUG /// + int hash = BlockPos.getIdentity(xCoord, yCoord, zCoord); + + for(Object o : worldObj.playerEntities) { + if(o instanceof EntityPlayerMP) { + EntityPlayerMP player = (EntityPlayerMP) o; + int index = this.getFuelChannelNum(chan); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("#" + index + " " + Math.round(chan.heat) + "TU " + Math.round(chan.outgoingNeutrons) + "n " + Math.round(latestDepletion * 100) + "%", hash + index), player); + } + } + /// DEBUG /// + } + + // intra-segment propagation + for(PileSegment seg : this.segments) { + if(seg == null || seg.segType != seg.segType.FUEL) continue; + double outgoing = 0D; + for(PileChannel chan : seg.channels) outgoing += chan.outgoingNeutrons; + for(PileChannel chan : seg.channels) chan.incomingNeutrons += outgoing; + } + + // inter-segment propagation + for(int i = 1; i < this.segments.length - 1; i++) { // bound chosen because edges can't have channels + PileSegment seg = this.segments[i]; + if(seg == null || seg.segType != seg.segType.FUEL) continue; + double outgoing = 0D; + for(PileChannel chan : seg.channels) outgoing += chan.outgoingNeutrons; + + double mult = 1D; + for(int j = i - 1; j >= 1; j--) { // center to left + PileSegment neighbor = this.segments[j]; + if(neighbor == null) continue; + mult *= neighbor.getNeutronMult(this); + if(neighbor.segType == neighbor.segType.FUEL) { + for(PileChannel chan : neighbor.channels) chan.incomingNeutrons += outgoing * mult; + } + } + + mult = 1D; + for(int j = i + 1; j < this.segments.length - 1; j++) { // center to right + PileSegment neighbor = this.segments[j]; + if(neighbor == null) continue; + mult *= neighbor.getNeutronMult(this); + if(neighbor.segType == neighbor.segType.FUEL) { + for(PileChannel chan : neighbor.channels) chan.incomingNeutrons += outgoing * mult; + } } } } + protected void handleVentilation() { + + for(PileChannel chan : this.ventilationChannels) { + if(chan.air <= 0) continue; + + double airCap = (double) chan.air / (double) chan.MAX_AIR; + + for(PileChannel fuel : this.fuelChannels) { + if(Math.abs(fuel.entry.getY() - chan.entry.getY()) <= 1) { + fuel.heat *= (1D - airCap * 0.5D); // channel can hold up to 1000mB, turning into a 0.5 heat mult for connected fuel channels + } + } + + int toUse = (int) Math.ceil(airCap * 5D); + chan.air -= toUse; + + if(worldObj.getTotalWorldTime() % 3 != 0) continue; + + double x = chan.entry.getX() + 0.5 + chan.entry.getDir().offsetX * (this.width - 0.375); + double y = chan.entry.getY() + 0.5; + double z = chan.entry.getZ() + 0.5 + chan.entry.getDir().offsetZ * (this.width - 0.375); + Random rand = worldObj.rand; + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", 1F); + data.setFloat("base", (0.125F + rand.nextFloat() * 0.125F) * (float) airCap); + data.setFloat("max", 1F * (float) airCap); + data.setFloat("strafe", 0.0025F); + data.setBoolean("noWind", true); + data.setInteger("life", 20 + worldObj.rand.nextInt(30)); + data.setInteger("color", 0xa0a0a0); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); + } + } + + protected void recalculateSegments() { + this.segments = new PileSegment[width]; + + for(PileChannel chan : fuelChannels) { + int index = getChannelVerticalIndex(chan); + if(index < 0 || index >= this.segments.length) continue; + + if(this.segments[index] == null) { + this.segments[index] = new PileSegment(PileChannelType.FUEL).addChan(chan); + } else { + if(this.segments[index].segType == PileChannelType.FUEL) this.segments[index].addChan(chan); + } + } + + for(PileChannel chan : controlChannels) { + int index = getChannelVerticalIndex(chan); + if(index < 0 || index >= this.segments.length) continue; + + if(this.segments[index] == null) { + this.segments[index] = new PileSegment(PileChannelType.CONTROL).addChan(chan); + } else { + if(this.segments[index].segType == PileChannelType.CONTROL) this.segments[index].addChan(chan); + } + } + } + + /** + * Splits the entire pile into vertical slices, left to right, and returns the index of which slice a channel belongs to. + * Since this left-to-right approach assumes the front of the pile, this only is used for fuel channels and control rods. + */ + protected int getChannelVerticalIndex(PileChannel chan) { + DirPos pos = chan.entry; + ForgeDirection right = pos.getDir().getRotation(ForgeDirection.UP); + int deltaX = (pos.getX() - xCoord) * right.offsetX; + int deltaZ = (pos.getZ() - zCoord) * right.offsetZ; + int abs = deltaX == 0 ? deltaZ : deltaX; + int index = abs + this.left; + return index; + } + public void destroy() { worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.pile_brick); } + /** + * The orientation of the pile, based on the direction the core is pointing in. + * Channels that follow the orientation are fuel, perpendicular ones are for ventilation. + */ public static enum PileOrientation { NORTH_SOUTH, EAST_WEST, @@ -241,6 +400,10 @@ public class TileEntityPileCore extends TileEntityTickingBase { } } + /** + * A channel, represents any type, therefore has the data of all three types. + * Could have been an abstract class + three child classes but then we'd just be overcomplicating it. + */ public class PileChannel { // originally called "PileHole", however i didn't want it sounding too sexual public final DirPos entry; // first channel block plus direction it faces inward @@ -249,6 +412,9 @@ public class TileEntityPileCore extends TileEntityTickingBase { public final ItemStack[] rods; public double heat = 0D; + public double outgoingNeutrons = 0D; + public double incomingNeutrons = 0D; + public static final int MAX_AIR = 1_000; public int air; public double control = 1D; // pulled out by default, unlike me who never pulls out @@ -286,6 +452,17 @@ public class TileEntityPileCore extends TileEntityTickingBase { } } nbt.setTag("items", list); + + nbt.setDouble("heat", heat); + nbt.setDouble("neutrons", incomingNeutrons); + } + + if(type == type.VENTILATION) { + nbt.setInteger("air", air); + } + + if(type == type.CONTROL) { + nbt.setDouble("control", control); } } @@ -335,6 +512,17 @@ public class TileEntityPileCore extends TileEntityTickingBase { chan.rods[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + chan.heat = nbt.getDouble("heat"); + chan.incomingNeutrons = nbt.getDouble("neutrons"); + } + + if(chan.type == chan.type.VENTILATION) { + chan.air = nbt.getInteger("air"); + } + + if(chan.type == chan.type.CONTROL) { + chan.control = nbt.getDouble("control"); } return chan; @@ -354,4 +542,31 @@ public class TileEntityPileCore extends TileEntityTickingBase { } } } + + /** A vertical "slice" of the front of the reactor, can include multiple channels per slice, + * due to reactor geometry constraints, all channels are of the same type. */ + public static class PileSegment { + + public List channels = new ArrayList(); + public final PileChannelType segType; + + public PileSegment(PileChannelType segType) { + this.segType = segType; + } + + public PileSegment addChan(PileChannel chan) { + this.channels.add(chan); + return this; + } + + public double getNeutronMult(TileEntityPileCore core) { + if(this.segType != this.segType.CONTROL) return 1D; + int size = core.depth - 1; // minus one to make the calculation easier, a xixix pattern becomes xixi which means the rods cover 50% + if(size < 3) return 0D; // reactors this small can't exist, nor can they have control rods + double total = 0D; + + for(PileChannel chan : channels) total += chan.control; + return MathHelper.clamp_double(total / size, 0D, 0.5D); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java index 149c4bec4..02b2b702b 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java @@ -62,7 +62,7 @@ public class TileEntityPileVent extends TileEntityPileDeviceBase implements IFlu if(ventChan != null) { this.chanNum = core.getVentilationChannelNum(ventChan); - int toFill = BobMathUtil.min(compair.getFill(), 1_000 - ventChan.air); + int toFill = BobMathUtil.min(compair.getFill(), ventChan.MAX_AIR - ventChan.air); ventChan.air += toFill; this.compair.setFill(this.compair.getFill() - toFill); this.isActive = toFill > 0; From 432c61daa78c4468251800c09900570e3167a5f2 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:40:48 -0400 Subject: [PATCH 23/50] there is no hope kill yourself and kill everyone around you --- .../java/com/hbm/itempool/ItemPoolsPile.java | 13 +++++++++++ src/main/java/com/hbm/util/LootGenerator.java | 21 ++++++++++++++++-- .../assets/hbm/structures/crane_mod.nbt | Bin 14651 -> 17895 bytes 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsPile.java b/src/main/java/com/hbm/itempool/ItemPoolsPile.java index 8c303556c..a0e414951 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsPile.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsPile.java @@ -30,6 +30,7 @@ public class ItemPoolsPile { public static final String POOL_PILE_OF_GARBAGE = "POOL_PILE_OF_GARBAGE"; public static final String POOL_PILE_MECHANICAL = "POOL_PILE_MECHANICAL"; public static final String POOL_PILE_GEAR = "POOL_PILE_GEAR"; + public static final String POOL_PILE_SUPPLIES = "POOL_PILE_SUPPLIES"; public static void init() { @@ -173,5 +174,17 @@ public class ItemPoolsPile { weighted(ModItems.taurun_boots, 0, 1, 1, 20) }; }}; + + new ItemPool(POOL_PILE_SUPPLIES) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ItemGrenadeUniversal.make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.HE, EnumGrenadeFuze.S3, EnumGrenadeExtra.FRAG_SLEEVE), 3, 5, 10), + weighted(ItemGrenadeUniversal.make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.HE, EnumGrenadeFuze.S3, EnumGrenadeExtra.FRAG_SLEEVE), 3, 5, 10), + weighted(ItemGrenadeUniversal.make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.HE, EnumGrenadeFuze.S3, EnumGrenadeExtra.FRAG_SLEEVE), 3, 5, 10), + weighted(ModItems.syringe_metal_stimpak, 0, 3, 5, 30), + weighted(ModItems.syringe_metal_psycho, 0, 3, 5, 30), + weighted(ModItems.syringe_antidote, 0, 1, 2, 30), + weighted(ModItems.ammo_container, 0, 2, 3, 40) + }; + }}; } } diff --git a/src/main/java/com/hbm/util/LootGenerator.java b/src/main/java/com/hbm/util/LootGenerator.java index 77bc6d2a0..9ad983f1c 100644 --- a/src/main/java/com/hbm/util/LootGenerator.java +++ b/src/main/java/com/hbm/util/LootGenerator.java @@ -32,6 +32,7 @@ public class LootGenerator { public static final String LOOT_SHIT = "LOOT_SHIT"; public static final String LOOT_MECHANICAL = "LOOT_MECHANICAL"; public static final String LOOT_GEAR = "LOOT_GEAR"; + public static final String LOOT_SUPPLIES = "LOOT_SUPPLIES"; public static void applyLoot(World world, int x, int y, int z, String name) { switch(name) { @@ -47,7 +48,8 @@ public class LootGenerator { case LOOT_FLAREGUN: lootFlareGun(world, x, y, z); case LOOT_SHIT: lootShit(world, x, y, z); case LOOT_MECHANICAL: lootMechanical(world, x, y, z); - case LOOT_GEAR: lootMechanical(world, x, y, z); + case LOOT_GEAR: lootGear(world, x, y, z); + case LOOT_SUPPLIES: lootSupplies(world, x, y, z); default: lootBones(world, x, y, z); break; } } @@ -65,8 +67,10 @@ public class LootGenerator { LOOT_METEOR, LOOT_FLAREGUN, LOOT_MECHANICAL, - LOOT_GEAR, LOOT_SHIT, + LOOT_GEAR, + LOOT_SUPPLIES + }; } @@ -280,4 +284,17 @@ public class LootGenerator { } } } + + public static void lootSupplies(World world, int x, int y, int z) { + + TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z); + + if(loot != null && loot.items.isEmpty()) { + + int limit = world.rand.nextInt(3) + 4; + for(int i = 0; i < limit; i++) { + addItemWithDeviation(loot, world.rand, ItemPool.getStack(ItemPool.getPool(ItemPoolsPile.POOL_PILE_SUPPLIES), world.rand), world.rand.nextDouble() - 0.5, i * 0.03125, world.rand.nextDouble() - 0.5); + } + } + } } diff --git a/src/main/resources/assets/hbm/structures/crane_mod.nbt b/src/main/resources/assets/hbm/structures/crane_mod.nbt index fe86cd9b065a4172d64ba488825a1e7bfafb457c..a9db562f9d8f354937b86f254aca3c3f4768226f 100644 GIT binary patch literal 17895 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 From a63d7d73e27c5d73c9e29c60ca334bd21b2a397d Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Wed, 22 Jul 2026 12:54:24 -0400 Subject: [PATCH 24/50] Update crane_mod.nbt --- .../assets/hbm/structures/crane_mod.nbt | Bin 17895 -> 17983 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/structures/crane_mod.nbt b/src/main/resources/assets/hbm/structures/crane_mod.nbt index a9db562f9d8f354937b86f254aca3c3f4768226f..bd2743c58e780b01bc4d4ebe3c2170d6d8d5f898 100644 GIT binary patch literal 17983 zcmZ|12|SeD|2Hm6l8G!aLMnU2Fl7z*EfGeN$|TE-u_PqRP}ZczHi#@Eq>``pCp%BlBl zdbw+uQ0JxL^n;fzUe(H7Ej{!s{SE#1yInT#K|8@iS6}`0A=*yRZ2JCh>4(&njOp!X z{Qd)v63bT8d|s|xnBLu_rX{?|7Yt`~j^2R?UgF!cS=dWs?4`XE%cNFTe1-XiV&p-wmBb2gtmsw`1%J{TT$sBZ3zhnE`p-g&(%n+1v`TNTI#7**%dn z8t|IT+1|9oaCz;ycNzpfBiroZw2)RY^Wm3hoH(MjF-aWJ+=$m8?=B9!CyC}Jf?2O&HvDE~KEfG6EtW84m#WQk4kQ9Wx!+H|yz`<&rT z_i00SF?a&)%-fBpvi9Dn??W^Qe{;frfQNh_Wo)475&6zj+jCrv#BO%j9&R|Fg(*n28d z-e0tQtGL%HNo!$hq9xXE-LoAH56rIaJR9)0eZhYIww~P?;ftcf-yFPiDu4ZF!Hk2YlW6sIrMqHmUDeO z+GO1)c6Ez9X;^V8Cpjw}e~@PnL+U#`!zJg?p=avuj6w zdIzfn&Cq0<_qInf)3XBauU}ax>00VL@$E&mRke*0CH;M-VW7ZVh=VVwtg0_)ZE1pg zrNrK^RW!>!>%HypRK{apF%=aT!kw>j0u;vVtJWm2!d6RM-qH*5e?=DmT_KA+etj^%~AO|VghHXf1GbWx}G@iX|cpRW+@`V3G>V_WVldC% z+lKEhL3@iMoMqct%8DJMFJj7df|c(KTN(^M_Npx)^T-@tc|t|H+=tP=A43R!Hg1iC zfBJYK<8s8`ICOhQlrPkAK5Azr(eYhDr==EPi(^K%l5aDf$5ma)#maZc8)@eCcqfgW zEzdL2bO?NbzJOKP&+zNR4vl50i%r&y$xY+4GvIOFRIN5m#?Mp3s*g!=0x04HJ2YO0 z=BK%%xm3JalbyjG=dGmC_ORW8dK=tnwN(;QvYW;evolOV5p0F&-ejq#BedMCGGi?k zuj8KXEnW8Tvdhl;DeZ4UJ269J4{qPb_>Jv_4{ockhunVV6@eWRRSb|V{+m-^;qLk@ z;>VUnro1NMV|Gz~_545@A18bcMG?c7NgwV==<5=pm}EYV+OeVirvcHo7ELu6Ze&Y* zc)m=QY_JBojLWQPM9O-?Xsx1n?5~3YtDE6knE$$L`Cp3k3KP%GjCdr7d)TWN^w-F!<0!b46d!dE7`8J!vB zu>6sVG%|om@=#1H!qZN!W!&GGHW2kJH~4)uG>NuJ|3+CtcN=*?f|#cf7_ z4#nQ|gcA^je{ZRpZJMbm*&Qq6cmI+%vN_@iHMdn2D{~|*=F4u*Mg!C ziBs>mo1cy=YkT1>?J-bFMS2^rM9isuarzMz@eGN`+iQhknqFGjNs8QFHHRz_txY`JC(PuMS`+*A(kaHfDpT$hm4zxzzjuOd?3ZO?)krn(X;%zP% zt&kncxXB9i2(!jeeC@%GdnSqv{+yyiMyd;=i0RxgS|$%8tlN zdUsoA9;H~R2Q@u?6e`2Vg2^0hMDibi(Kf{qeMQd`3v$)WXYtsB2Q0n%oN|t_k>Bp1 zh$~hodL=&|OXG%UTRlc&Nj}n0nv!1;J0??sjZ95OAvHZU0UvhzrCd2k-r_Zt4M$HF zuc$)HwMf3I&?yN&HD0`izc~X^Vw92kd}Q<|Wpwzk8O*|#6Pv3~=q@dSkmrtL`_510 zyLDI$5VDKBjBF?3swm=Ev$t5YS;%|0&lUr3vx|(4Y@fT@=1Hw2W*4RQRH;rDSLKRf z%{1p;cyHX#$}S4#ky!NUD;u>K*efj>z~cI`4c*hc8bjEVg^W^1o?NUG;bVBz+!AqCF@YCdPD{M( zPWuvZQOk1h`G?xw+4_t}6gTe)H_!DY>gd+nwb^N(mB81(qU%@Gh!wuqwT*am)-`|i zaBCTz=r4SEGI%Wc9Mxph(LV?5eoaGU;MWo@c)3weBV&JWzp%Nd(R|uvsWW(OGqX08 z=jQL+IDu4gGh4qaE|j%j?J3IdV(R2Q^iurvnmJppNdU=WyZ1OMMcye&D7C(gFAS8> zw-5Sla_5d0yEIv(wnWe-m7$DZ>M*$Ls8vd5gMn~R+eZ;lBaFvxa#N~yI56NDQrrNL ztLLE%4e;Q{@kK>sY4>TvP|2%;b@Pn`=!A>-D|C-3nCP)V`1nO!Y9Wr zAikcv4x1ZK<$!8jnXS#%pHXIcotqkq%gq5LP2Q=#tnUbhPI&T#P6p+fm2I)$kgV*5 z)AEUE<|X1@)%vZvmIhId?`_eTwGovbp%RV+l?!ixL>;aD0@NCl^u*O6{`wy z+YT#T$dmSgc?9Cn9>T^%2zf{;5h)UAC^75W%Nz90=}E5 znYb1U=`|0MHS1qEl1g$(Oj?O1pGeqfgSji3YtOy#>pP!G%bCAzXU1rQr4ZN< z*R5{3P%dj4iLZ$P>!)vQ8pER(<9-bnHFx|OB=8>=#JPda8OX3{B&Y+^AAAcT?{s`L zMiJflp$h5jl*A-XXPF%rRf&U?fHz0+$!4q=r{@jGK`GcxH7-2X|1hOWn*%eF`M5yi zPyaTVFw%cNE(lF9tICH5^H8=}MWG6T5K7yLa1lRP%GG0t!N%)i5YeUiPJI|H8-hY2 znzJFPzB0d7oHCHHU(=#XzZ8>9D^5Mrh^$ZHplp>X!j5rboL;d> z+P%B(CpykB62UFJX|hTZOdott2;;l8BA-c8{fashS4I5b!hv(DZZyD}nHoC2dQQBt zIVhp9edGHM27b&)^O%b!E$R^dJSHW^t~@ZZuleH=3R#U@V>&R!ez96Z%^x?I6+#ja zx707=OjAHojPQ)F!jA<-2qhe6fvoUavOPlYq3^Q5PVD3PoWG4-e0}DsyYo9%SVsin z1`BTUS;653m_(d*kjB{0*H>lb)ZkcF=+wpBD=g%oFMV7gYIT@}-w&RnBa*C{atCF&_A2_L#izR1( zif1tW0H%8kgrD@wM^|@(i2t;&kV+TSeRH2sHK8&CY_&xXrDk97-sY_ipEAy_6U4T{ z0}>M6Cvp8lUsL&8_R(IZ8O#1m=&^MBN8br7y6OAgV^f9ZchxDX6L4Axh$Z zHG!gn3NV}T;UxYE)ES=t*-a_8kQSUUUD5EXK9Z^T#Sx*~YWOD;s;DcuD8S8?hr zLU7(3D|7ro)+}Ps;z~2RD>BV;kR7(PcJ5AKfA`wE?1dXf!|z>(lhYBeSE`9{ zG7qK4%X4Yt?n+*0P2ztJq0HS(`BLa6)#P!G~*d{5m;eGTm$f zn#;S<(n~}$=M4cdfi5La)#ns-Em9kqtcR3xQnG4@m_k#M7O7S&m>$@T+%(pr&AzV*g%aXrhSrT?a7W^N?W3 zW1M7%Q$PIEycNL$F}f9Dv=92>Q3e*$nGd5%O}~sR&U8$5`CUJu_xCe*^t z-Zi-Ylh}1Hw&od1y-kx#$dmfIzHLT=OXx_uu+kBs$uinN>{@KVx+hsLwC)kF4Mbu_ z8K;`-yuJ<(*7oGZH<&SlC-_{v^KP*;B zx3=|A^wUAQsi)N4D;K?O`}X#ngIi_4Qk;TsbYe;?}Sa(yoy(-*wsS`$9DttteQbZ|oaYIc% zvr-a^|7Q^x75`U*DT?rf1H$Oi|D1>>TFo^e-|;f_eu3_vyOcRenEvYW05DIw0Cyzu zGWE+Do2ha(UAvOtkKyE$Bc#* z;>xXh%0aAbFD;?ta>6`3+1pS|*YS)X(5Fib5Jff61!@s+^ix*nzD9%XjsdL9kjt51 zY#$$YuJZwb=5e1)l9FH}Qn(dG<~?@Our#zA&y zG*Cey6`#mWaf2YpYrOKQ=+=#hW(URCOZASAA2bDsNI+szkNy*6<$|nv!Xis9exP!I z2ZUqM7^6sERY=UhCrLYjxCdq$?CG@uolp=?6I?f(mP|gCr0Z7 zx3>x_J1d0zmOnmLm4I6a6Y}e8KEP?UhoCh3C;18jF6Harrf0bI#d13Y5Ml>$3r++L z2qcC>AR(Z=;Ac7|S$o?cv6Xqp4svis_b{XSktjZ})I{HREXCKxr3Kim(31A~{)f}yL za(509dQ%D^BI!`3F!a+2VgDJwc4 zLNb=BMRw529LmlRw=-L?plrV{&>0;_yJNHSj+!JkX)rMk`0ltcH;9OVD9*OF7G~Cs z)kpE{G;kw(VmJ)%d;=nwvhab?@hlv@8{zt`0eQTlp+oSJg$C4g;vl8xQyA&oJ(Oas z=>Jg!H1~fugz+6$cM5T?|9(g&+RDu3f8`ipg$H^Y!_aPG+pCm@VtY?^%khrBuMp~P~h!SycL#QAEPbdFd2|{Qi@8gAR+_(VI z-Z@*J4R}Na5NB=~JCG*anSkKIV}Rh@1{K0vKo5x-d@|<&pcG3}OcV(;ex_4|gcVAI zXI_^PO>wSg8;c*1TBv~URhYHPU?lRmH0Z78$Q;Q|->sl2=1(tXd->v_!pRRaK+=4* zK0`Wc-40B2ig2&>h?kMcynnAiXMWvb2j&V`pG*W{;5M|I zKwt(BKF9O`c}iWJ&DVNun>pLC3c$6Y|32pjm zoCPTjycC#J%rba{56~`nE6Eoh#;0Z2d}57o64-n3zPOP_W|ygpV1S@6V1UySi_amw za*xqIkH5+}w~7&6fQ)!V7-Hk7G^|)V?GX{jOqPk~v^@6|+oqZG3?|n`B>7CxjA! zaD+s|xeqACP6dJ&f6PD+Qf{r|Nu2@hb=qfIGgulDO3_vkYAVc4>1lo};zxIPwF6-c ze9l8Kpj{*Kg%vDi>KG^L)2z2CKP))2~qrN;4qj zHnitAAe-#M(8rZw$3ENmCi$qGb+J~R&#bU38l*n_?cKR{TL^`;oj+1xM;)Sag^|4V zQG`wenVo_uNydOsv~aCWO=kE3@(%eNg6WFmxPW2W3kzG`aKR^$e;YHcSzUQD(i4a- zUB@jcrrDmwPSFBGEw%>)#5?l7>N`Id*_>!6hpyEG;z6nIF z$X2a;>=~?I!;s3Bvj@k8tMqo-_bvYsu4TBZ8_e&hUZdf@WJH@2tbRibIE zR#jhqwy8?mF(@sE&~X^TP(tW)0K4nW>*{=XM;9ni0$vuZua`Tr0CIVLH4LOnY%|g1 zbR8>Bz);5d4F<~r`Ak05=lHh_*q-YcP}01!7LtbJun3Y7Qe6T>x^3G(Fx>94sEF1Pp!rQE2%G z4Cnw@(3u0bAWir20#?w!SLOagcW0(4K!dH=nS+wbM3R9cD(y4q9$7m zW{L#!1|-0|`mlnzkQ{G@p_$(jGH?u%u1*l-#;<~bOrycpfG?761{#g-t|JWg!}Kyq zb&~l!voEs+v-`jW#hmXOzs%mWC}Ej_fCF7fg%zP~mEHyzpAb~7f+V}pfHWTh)<#@Z zF)R6HDI2EMs=)xWzO9APapj~Wet1-%F^~2+D{zN7E%OO5_-P>sLr?!S$QRwZf+Cc1 zf#9X73r-Bec#kk)Mk3jrbLFD%)F}8kg4`7pYAORN0U-*E2`}DO zgBL$n=?;KsY29$f54#W8Evip^LeCtr7X~gyQE^V|6Z3aq1xZgZ*R}; zEn1e&ub5=j_EkuEQhvm^#x5_((yYA|MihJfs|{RpsjQfS5?1o{8>lz(4uH9_g?3uK zA)4<~sinR0wZ6H#oqn*F-e;bm-<^VWoX9=SIzehN(f-|2>Zip4B7s+bfnc>#?vDc# zuBm0xEEtc70QtMx(i|XAEO%cOpPa}lu=&$-4&mf;&)(im>HH95WVY;^P1X`MQ}pgu zW9(p1b}?+=#J8f)p8lpq=Z6dX3q>A2@EO{j>DqJMn9jNp{n|N?^zlRnebfq4q+FpT zu-p7ob~Slx!jQfX@sRtyy>*d;^PW%_flV!2`N&hU57Fq*sVg!=L?gUrKocR`2%n=f z4!j~Il}2Q$5$cV_>QgF+L23qRO#M71Q1^)RM3CwC|KwnrpP=}ihZVT%Pn5@&(xAZQ zikPnuXe=Jg-1R#RRjY=p9A?t8As7B=Br`NAbMye{%>E}Z_?J|#5^(H~YD$Zo8oJts zeshHB%9s8LBi;dF#MehX9Ctvt@`<2{t^Vb1TH4scXwh)U8QTS7AFckbqPo`Dx4Y(! z2#*6evlsdvDnz*CP;0=<)6svly81+xN-lF(MqG<~=IRJl2pR@er6@-;qvP+Q=Zy^sOZ%%3Pp3w>PyU7pNhFUM0Ml?pFPNc zGe2ID6~rq|6ZyOkf=G)C3)zo^pn`C%(H9X_wGv&K9}p8w1dat{Hd>E16gNkLD{LPo zqK~30oJApr(}Gw);4Cl)kVEw|Uc3p;n5_Z%q4bf+eV9Asqm^|7vWEqha*hSRYU<65 zMm6hSW&;chdXVf~4`7(RK?jR7K?qgR9v1(5Z#<1gdA2_V$!z-3ce{jzraU_rjIH0G zhT9}v2W$q?&_mBRSqodIS=I;oP8>})Ycq}D`OlpswSK{4bxwKhJI7Ub6Lib zu`P}`=OJ&z@%q6R*!-8qk9#P(H@0I;Vj0%<$kBkNM=qAX?YIlax13O5@KV~gIR7xQ z;?jUf`F!WwU6-paM4}#)*%lzij!$0Y{1>K>qRN8Lfv{lY*%}@=+?8izl}tKdqB$Nh zpL9KE!>f`jlN9297@thx!C%I>Kova1fD@kaE?X=m%BNQSp^82Uppir9{Yb?BWQ%rCW-61BpDy^|7!FZ|kQ8QNa0^XLfHSo}HmVD4hG z-b9?P+RLqJifC-Pw|p4H02E&c}Mb^FL2d#J|CeZnu3uX<+Wh$8PS3x(yhgU%(z^_8xSPB z<{Qm>DO!m+KTxR<%!*sR$b33T?%$Rx%kh`Ho!b6=oCrGEqL9(RmwbJ>TL;)%%slM( z?Dq>w(()@Sj_vFsR7Q9R2WprbfjiJ>kD(oUCwf>jjd zqO=)4Ce`IbC|hq-2_QdKc>N|S?rrcz*Hkc7Aolh8{y@f{LLVgK9z-RfDSFS}iY3go z!xBP^W`XDQ0h^n+z4~Z%u_YxnJ=3t7M8BitH*h23Mu+L?0|me5o@qFiwD=};oG`If zH0F}|^#ho}tIu3PHcQs(gfGrc)I*3?3m&)B%eNI4v{K4VXPXtvjsSK-4i$O&=FaEG#9m0a zYc;g@0%R6rc|c}yM=7$$Z@Kzpnm4^eDnwg~j4TL+(QZ$NrO8LXxep8G$pv@;-j2tl zo-GuyR2QmH$ctem8g;idP$!>U*!#kV5*_n4~CrL*O_8|hRv7=u_XzFp= zTa@KePdOLmQ}?QsQ_arohAky?%o%FSTa|JUw`EJPbYS2|AtL&1B|}w?u)M zz8t#$m+EN`X2qo;E#~k+o|KnhZsSVc#Ui-D4)5YHKFuzGx8T?8N_3>F%Qhkh55jI1 z@gsase9ME=vfEHd34zKskbnD9r^yA<*LbZVr(hp`{A#B$vmZYBJp}*dhBG1GGoxEX zNIBts2k?SVTcwc(w~q4=jC+*Uu=+5f?P=aLG*Zv;*59z3H;+O}9uA>Pz8pT0jQ=uq zWEQb+XG}P;Ga+)Ba7L6rw`-G zA(kE|+_`0w)Pc~dOL7YXTYnx#>sN;|h9vOGH`y>b{SE&MmPzWl3rPAnAnAk78BMlt zJ1D-+C}F+bzz05?5BhBG73mh8rAeq+iFzMN+qLo!d3@f{d*Z+xVIS{g8h5Yr-|JE#qNcLZ05zjE_X5Gtk{0puD(aI~qQU`Crs-1I zwbW1fRFJcfQ^F-z(VJn=o2j27Z_GIWZ3KM1aRJDCQ=6c@zf{NHsE`4^^}3a@>U?TT z12WYS$zMJBpyJCRTLest$Js}dP$f09+8jDe>b zECg7oj(eX4@Hv~WY57GT9iKpS$p$_>(Nz3&9eek}>-VwESKizHCw{L}{XgROoJOhN zHkO|rePXj@`>agD%*ZFpu_^NkF3S1UXt&7C)MpwlgfA}-`~mfaGa2y;6lE9{+SKk8 zlbFV}JVLF>fz#xV;ISrbm=Q2*DFOfpxQGS20||#C)rl~H0idFX;M@ivc#4bTN>j30 z0?oVr*xXTzIII?@K(p`eD#Z5?+3RYUWf%a6bmQ+zfeT& zR}I&Dy;bp8PC=+2Cp)fFX`bg0gyA&LBL|ybJP7a&0#LtcR+$%?0NJu=nYinvkrlmy zz(wtpn7a_)>OmP7*eF_Ek4RKFfM-Ge6t|?EV6=w^I|$@1@Po&`kHr( ziXlXJI-Ehj=CixpI~6doRuZ!!3>%D7{I;9C_(L;vo#Nk&5Z$#ENfz!+SKm@tZIB724HZsK8fvGdM@-#QzObRHE}PXq-2Q!Vqdxr>E>*n*!l~vlw|jU9K&X)^^N$C9X`Fh{i(H_ye;!gl-RS@bH#)=76IE2Suh2S;h z_ReNLq@lNC#ujfm*R5iahHY*O&hJOCwxcMOQrebQPYaZNWazNfNx_(xHlEPqQ2FB*BUU4h4_(y&5W&g9$q(%n@{jf|l%}q<- z5~Ij5x1y$Gz^K80b*M1n5i2?F5sG-$2Ss1z!DDLxJQ8HdTC`y_P|UNnNSc<0KVPdF z?M>6=>|Fw2?lok(0&v`u5>%g4+<*ajP7A64)Mm4rOso}UO3u#H7#EBY1lR#Dqb%Xk z-`9sifEhNyBXPoi<7&|Rb4*jm6VEh=>L(#GA2)LWK31oV&IJ(-4?|;$t)(z9Ah*^= zQ}G)2oq%=|7=%lU_#I-kJkh z-cC%DpI_#o9A82y-jam6d4L?3L?bfF1$J{>1Yf2WMxx2UEJinUS|b@f5GG2TkTrOM z1$fL3ywA`?h5O8$;*R1POLS;c%u!$$-l{qDnjZ9d%%wb)g}f7VdesMq4iVZ;fe38g z0?6ahL^QqT6nJ^{y8_-&B0SlCkrCS5+kfu3Wg@y-6h>Q=fw}t&Na?v-u~LSTACdf| zQAArVLNwXgZIuU4=h*SceCW3j!FXMNcz=`+#@q`p`i19PFid=z8i!%W3fSA1U9b*kwJreY zCpAQB+7y^}j4>^MsrxYEhnwPS*O~ux1y^dWQH>*XWC2XwcZlo|aHb4|*0+xUM5qX) zWb^vnl_W>{76-+;o|R1d&=9$*K-xsT#!s$j2@D3=xFBsEAZM^qD*1iVlz+^zlxSh- z`*?B1q~IiQnjtT`(;?%GT8YeR29Z`5;wH$iTB&}(ZJ$z+mBT~xz@&ezv~!GJWWsC9`0@SVA-CRk z4tsOp5e^0%#tkY`3LN60d0<~5LWz8ss|BX`#u$*BQlh--@l!c?Yzj}Fg7fTWcx_B0 z?si$U*4&a>e=qDS^YNjHs{0idOeYtLxNC^|ZrpCX6J#JN{FI7Zfdh#4%~1dX=8h8# z%HpETiGp==;4J`~N%hJkQFx&5Kb-KwbHh4b!U2wwZm}at0jE!}^dK5~HSr%U70VS}!g%GG)6&Ieq zD2I)b*CvA%@dFmR6gQsm5e_MdFdGcx>m^-_BgBD{5u(Ke(d>IcF%8!LZm9#ZFgJb1 z^IK+CmhC4!t7`xC#k{h>lB~X>1(TP#53Cf$L?}a7!$@k^QOMG+obNhk($v-W{6i90 zF=v6*W2OpqdoBi5QwS$H1MS+V8AQ6$k$ae|bhZ(>d>En~83wkiQwsVX(4$&K7&_e; zxE5+~GvT1@LzE$U_;R09p;Yfv)s$m_O~^VBg4T0Tlt>2h9;G-Y0i_kGi-&~3%PPN$ zFg~A!xz~h~DB4iB7GZ*aZ4iu3#IhD0XaUHJm!Nx3?J z*mtl>PCa3IPCkzTO)h~$95pUbXK?qFT1>FJ>;cfbT8AjsoFK~sN_8hiRQ4SK2%umF z@q4l#7_^#aU=DHD+8z$viYwda>ZkxvZanth;m2+&6~B!^9;uNjfNp+kL$+OaZa5z8Xooj z-Cxn;cT5Y@sfQv8-)l5j0AT;$k$uk`m4pIQZ8io&ce|RWy29P1gzx$U?PT3JQ)_FNt1D0ZU z41}HB+CmHeu{;iSLxz)ZK%!T%!cFGUy%1o4as%P%W9VWCKz+Tyc$=LWfOS4AxA!gG zeUt5J1AZKaK$5k1dG!S*D2!C@9QLrwf*RxmTTB+o z=4GCZ`Nj`bsQ^q;DgB2@08lpL2%d0T6)*{N4LkstkibD1sskG0ED+B3K)86peeVEy zt1G8(3W6!jLlLv#P`6!Hfx!!BMbsn?;yN)XqNMXi$O}TKpkW7Ba3VU8<&Rj4)`lu9 zws42^0Y4gT1oQ>p$|p6Yq$*^VUeT&cj#77)@*Ex;#6CfaXdeGac3z%(=@9?GN7*tJ zyC6=eunYvo4CNoM7AQMr!I*WWE<0o0c-Z_-ur3*i5y77y2wSFOR$~P?Mn8aHgEBZL z1w&;@9rhuV7q2{}K4n>x2d_DlNwN_jS zf>ZH?mOqP)39EduB}+zrG=kAaPJ*pT2&G90Opz0Gs@C>a()!cuKe;Vse>7`VJdeX1}4hRRUiYb)bUj?21AvAyX%JM{J5ZA_ zvn_1oDIu_gtiTF=;;4VkeIr#jSXj{sZiAwCuv4OY@lBbcWFnob3cR3^&*i_;Wt>c~q9@vy`k>kYdiUIJt-?I2$ zISb?3k4%P}{aN5^NTZ((#n*#?KIHu)eZci@_eUu2Vm6A2`islt}ts<}Yjf|+_4WHUj@+!WUt0TBF9z>|(4x(iVIyfPAa z(Hamr4CEg&xAwo{hLHuE4Yc1p--Nz=L}5E~7B&D7%?F4T7HE)VwX;%0*3)mz1ct%9 z=p7)8pPX~Gb|L5>>I4C55FC@z^-WqiwcI88^kWNiAns|Qw zNMV=4WaQq3{C`g_bm+a&Q|PD=13`LTV6sU8m`-|xR7ryKr~-CXVs|*}eN|PYl1{E8 zX7C>lj9Iyh7~27SKbk7oMwtcH&~p|*w~P!F@c;*94*XELaDzK`cUPWKlh)p`?Z@wL zw$y*(A^O&=U&}Ky#$kblX(CLB7n=++U=6;>_#r}>gM{%Z=;KIN3S7#rR3jRj!!Z9#@CEwG}Y7e?9cD0RVHZ4-H6NAlF)= z15r%@0SK_s?u8IMQX#pjNuv`;RENUrZG0F_^7TWK)RQ70RCBL~D%_@Vqm6F@_<(`* zhn(PqMoU2_Fg^5ub*}a2psrRpyR%x^LlYOE>LDdAYGtzB3LIe{2?BzK_};8J{IOo{ zr>a+&uedSCKT-NsXQ5_gT~wmCq1*!cHhNBGtmuD09KK9Wv6m#3be-sJcARr1f@6=%L5>jWrm5Q*_< zjr9Mj3J^jdbfj$nzC!xD#x`4Pq%zIr&mpSgsrajvHBut4FKiY#Hf@@so9eEho5YG> z4vROSe!NGaDg(gtkzxfPA5O!0kEAO4OLoY62FA!%LVIpYqtMhGtvrT27M&K*-502GU1M$cp`!jxNCn}gnrBWM@8t)^Nk1*-OQ|7_4UDN|FzTS zRj;~x&RNtJ&{PGQo{UE^AOdFDdVL~p@=R2e1wk(X|Des^%wa}lx?@10UeXp~t_VQe# z+N|qkKXwS6|FwE0o0M^9t0GuccBbo`mUoB5Wy1>(H~f8p>qcBS1O!RFg2?jj*Lqoz z<;+gKB>d5hD<+2Sw*(hV#P*3@c zEW!OH@ORcw{voMH(9-WxuF`?AUnPM*vLW>xy@T-i+Ij*_N2YmnA&{dU%Q8 z1bpoc+RkVyWH=XOt%d=n*W)gVu67>go_-vh?mYtP58^y5*~sMuVd($=<|z!PWcjPM zZ>P&snMaP(m@Zr(fMOkiK!)ue0}VN>59_9l=R4BZB=Hu0$?V{C1vZmZl-PhA=7rG$ zjzdYiP+D3K_x4$Gl=+mi-t6Mh`ld^lOaB&oQC<7#bX}N9HDN{9!1Rs+*Vaw<)oOjFqK`O z1d!dPySCk1XdLNUC`#WpM?!6gQHvhU>@js)oixnrh0g9V^kz;-EcRLb4(v#9aC|*t z?N+MYNeS2-9LrvE$gfy`Ex8;qWIj+`61kMksiwD;PpYElb36*Y+ujzjFg0#fwmP|W zarffr(AL-P!rovvENNus#82Vd?S+1r0@{W}1g#Q#boheQY*yvl!OeMie0q%b#!Jo#zNUV*v@#*@4!cisg)Wt)-{h zL==4gE06xKHCi4|i_V?e-jFK#!y#(W&tHpG-*1c$#1>Uph17mbf4#ZWZx^!2|NSBO z``&L5>}nN!H?^ckOf;z;V-R?z35( zqu+Bn=Q5gZrc7rY{-EQ}H5|}%??N1C{)jBE>8rb^w5(KG zqE(^k9OU-fU%WCr+oY@M1EW1ns}J3wTgvDz?Tk_OEW0zYuVy7NpmoZvlucImw&nl` zeu}pw!7Dc#TVkg$E#*r&g?#&Ozf(iThm_d9g&ONUDm&pf^7F05!1n$99NYLMk2=El zoqtS%myOj0%OVOF>&x5Y z4yQcMxks?7#?IYZb>;dWB%!l5?al~rYpZ9{0h95^} zsOaC}6St29Rn)14b>W}k8G61uj#XVj_v z+niek9=qdTX}&$$!@5C3vwQpEHg|i5`YttAMBU)bTFM@#eVn5i4OnMRPEE*WTKiy0 zfp^`B%4#>YH$`rbE_(_kN*D;+8!Qa?Resc2KjB>A5;0>lrQ7>nHuCI^(+kns-<)k} zQ`Z&8?A7PoM!L4+*thxJs#Ss;T~x4L3x}Ts_*BrW7b*2_bHBWOFrvluJ9}TfPNzki z&Xm&pil?WZFD>RK+uCw0e1BcN`(w>wr-$Y^tfNyDGWq4+r_=?HE8og5+1zuSsP<^q zO8K^`Tz->gZ62=bkjI(XS$My;cO*TeB%A|1d}jYs;K!*V&6M3c9)*jSbv%OWR!Re3 zE%ni=pL=bm4_yNXE$CjS>arQqr>&SQE@(;uGpg+9DE V*b5wIir&5i<{Rr$jWa9D{|8*`_ay)T literal 17895 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 sObd*SviY^@jC-woabs%DwcOrl Date: Wed, 22 Jul 2026 12:54:24 -0400 Subject: [PATCH 25/50] Update crane_mod.nbt --- .../java/com/hbm/world/gen/NTMWorldGenerator.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 051b11d1e..2c2e79b87 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -34,12 +34,12 @@ import net.minecraftforge.event.world.WorldEvent; public class NTMWorldGenerator implements IWorldGenerator { boolean regTest = false; - + /** Includes all biomes tagged as ocean or river */ public static boolean isWaterBiome(BiomeGenBase biome) { return BiomeDictionary.isBiomeOfType(biome, Type.WATER); } - + /** Includes biomes with little height variation and sparse vegetation, excludes water biomes */ public static boolean isFlatBiome(BiomeGenBase biome) { return biome.heightVariation <= 0.2F && !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SPARSE); @@ -144,17 +144,17 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("factory") {{ - canSpawn = biome -> isFlatBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.2F && !isWaterBiome(biome); structure = new JigsawPiece("factory", StructureManager.factory, -10); spawnWeight = StructureConfig.factorySpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("crane") {{ - canSpawn = biome -> isFlatBiome(biome); - structure = new JigsawPiece("crane", StructureManager.crane, -9); + canSpawn = biome -> biome.heightVariation <= 0.2F && !isWaterBiome(biome); + structure = new JigsawPiece("crane", StructureManager.crane, -13); spawnWeight = StructureConfig.craneSpawnWeight; }}); - + NBTStructure.registerStructure(0, new SpawnCondition("broadcaster_tower") {{ canSpawn = biome -> isFlatBiome(biome); structure = new JigsawPiece("broadcaster_tower", StructureManager.broadcasting_tower, -9); From 3818e231f4beba9493f59e10567454238243b337 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Wed, 22 Jul 2026 12:58:30 -0400 Subject: [PATCH 26/50] Merge branch 'crane_modifications' of https://github.com/70000hp/Hbm-s-Nuclear-Tech-GIT into crane_modifications From ba09553fffbc39ee1dbc5bb0a4eda274f37ccdbc Mon Sep 17 00:00:00 2001 From: HbmMods Date: Wed, 22 Jul 2026 23:23:52 +0200 Subject: [PATCH 27/50] it snew --- changelog | 21 +- .../blocks/machine/pile/BlockPileDevice.java | 15 +- .../container/ContainerMachineDiesel.java | 71 +++---- .../hbm/inventory/gui/GUIMachineDiesel.java | 48 +++-- .../com/hbm/items/machine/ItemPileRodMK2.java | 14 ++ .../machine/TileEntityMachineDiesel.java | 192 ++++++++---------- .../machine/pile/TileEntityPileCore.java | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 14 ++ .../textures/gui/generators/gui_diesel.png | Bin 0 -> 3818 bytes 9 files changed, 202 insertions(+), 175 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/generators/gui_diesel.png diff --git a/changelog b/changelog index 3e1f26717..c06d71eef 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,26 @@ +## Added +* New Chicago Pile + * Assembled multiblock, similar to the PWR + * Requires new chicago pile graphite bricks + * Assembled with a hand drill out of a box made from graphite bricks, at least 5x5x5, and at most 15x15x15 blocks large + * Drilling the assembled reactor will add channels at the selected locations + * Drilling along the reactor's orientation will add a fuel channel + * Drilling perpendicular to fuel channels will add a ventilation channel + * Drilling vertically will add a control rod channel + * Fuel insertion is now done with a dedicated fuel loader which can be operated by hand or automated with hopper IO and redstone + * Ventilation channels need chicago pile vents which are powered with compressed air at 1 PU + * Chicago pile control rods can either be fully withdrawn with redstone or fine tuned with RoR + * Additionally, channels can be drilled by right clicking a pile addon device with the hand drill, the addon doesn't need to be removed beforehand + * This is mainly for convenience when disassembling and reassembling the reactor, which requires all channels to be drilled again + ## Changed * Updated all oil well GUI textures * There's now only two upgrade slots instead of three * All legacy pixel gauges have been replaced with smooth ones (watz, ZIRNOX, CCGT) making them more accurate +* Updated the diesel generator's GUI + * The diesel gen now also has an in-GUI button for turning it on and off like the industrial combustion engine ## Fixed -* Fixed held block being placed when not sneaking when opening the cable diode's GUI \ No newline at end of file +* Fixed held block being placed when not sneaking when opening the cable diode's GUI +* Fixed an issue where the diesel generator's fuel capacity is the original 4,000mB instead of the intended new 16,000mB + * This means that explosive barrels and universal barrels can now be loaded into the diesel generator \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java index b59090bce..443523846 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java @@ -9,6 +9,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.main.NTMSounds; import com.hbm.tileentity.machine.pile.TileEntityPileControl; +import com.hbm.tileentity.machine.pile.TileEntityPileDeviceBase; import com.hbm.tileentity.machine.pile.TileEntityPileLoader; import com.hbm.tileentity.machine.pile.TileEntityPileVent; import com.hbm.util.i18n.I18nUtil; @@ -156,20 +157,18 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILoo List text = new ArrayList(); TileEntity tile = world.getTileEntity(x, y, z); - if(tile instanceof TileEntityPileLoader) { - TileEntityPileLoader device = (TileEntityPileLoader) tile; - text.add("Index: " + device.chanNum); - if(device.syncStack != null) text.add("Loading: " + device.syncStack.getDisplayName()); + if(tile instanceof TileEntityPileDeviceBase) { + TileEntityPileDeviceBase device = (TileEntityPileDeviceBase) tile; + text.add("#" + (device.chanNum + 1)); } - if(tile instanceof TileEntityPileVent) { - TileEntityPileVent device = (TileEntityPileVent) tile; - text.add("Index: " + device.chanNum); + if(tile instanceof TileEntityPileLoader) { + TileEntityPileLoader device = (TileEntityPileLoader) tile; + if(device.syncStack != null) text.add("Loading: " + device.syncStack.getDisplayName()); } if(tile instanceof TileEntityPileControl) { TileEntityPileControl device = (TileEntityPileControl) tile; - text.add("Index: " + device.chanNum); text.add("Extraction level: " + (int) + (device.level * 100) + "%"); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineDiesel.java b/src/main/java/com/hbm/inventory/container/ContainerMachineDiesel.java index a4539cf77..86406303b 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineDiesel.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineDiesel.java @@ -10,68 +10,57 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerMachineDiesel extends Container { - + private TileEntityMachineDiesel diFurnace; - + public ContainerMachineDiesel(InventoryPlayer invPlayer, TileEntityMachineDiesel tedf) { - + diFurnace = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 44, 17)); - this.addSlotToContainer(new SlotTakeOnly(tedf, 1, 44, 53)); - this.addSlotToContainer(new Slot(tedf, 2, 116, 53)); - this.addSlotToContainer(new Slot(tedf, 3, 8, 17)); - this.addSlotToContainer(new SlotTakeOnly(tedf, 4, 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)); + + this.addSlotToContainer(new Slot(tedf, 0, 17, 17)); + this.addSlotToContainer(new SlotTakeOnly(tedf, 1, 17, 53)); + this.addSlotToContainer(new Slot(tedf, 2, 141, 71)); + this.addSlotToContainer(new Slot(tedf, 3, 35, 71)); + + 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, 121 + i * 18)); } } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 179)); } } - + @Override public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { + + if(var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - - if (par2 <= 4) { - if (!this.mergeItemStack(var5, 5, this.inventorySlots.size(), true)) - { + + if(par2 <= 4) { + if(!this.mergeItemStack(var5, 5, this.inventorySlots.size(), true)) { return null; } + } else if(!this.mergeItemStack(var5, 0, 1, false)) { + if(!this.mergeItemStack(var5, 2, 3, false)) + if(!this.mergeItemStack(var5, 4, 5, false)) + return null; } - else if (!this.mergeItemStack(var5, 0, 1, false)) - { - if (!this.mergeItemStack(var5, 2, 3, false)) - if (!this.mergeItemStack(var5, 4, 5, false)) - return null; - } - - if (var5.stackSize == 0) - { + + if(var5.stackSize == 0) { var4.putStack((ItemStack) null); - } - else - { + } else { var4.onSlotChanged(); } } - + return var3; - } + } @Override public boolean canInteractWith(EntityPlayer player) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java b/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java index a50cb1277..a7a3d900d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java @@ -4,16 +4,20 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineDiesel; import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineDiesel; 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 GUIMachineDiesel extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/GUIDiesel.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/generators/gui_diesel.png"); private TileEntityMachineDiesel diesel; public GUIMachineDiesel(InventoryPlayer invPlayer, TileEntityMachineDiesel tedf) { @@ -21,35 +25,43 @@ public class GUIMachineDiesel extends GuiInfoContainer { diesel = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 203; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - diesel.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 69 - 52, 16, 52); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 69 - 52, 16, 52, diesel.power, diesel.powerCap); + diesel.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 69 - 52, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 141, guiTop + 69 - 52, 16, 52, diesel.power, diesel.powerCap); String[] text = new String[] { "Fuel consumption rate:", " 1 mB/t", " 20 mB/s", "(Consumption rate is constant)" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 8, guiTop + 36, 16, 16, guiLeft, guiTop + 36 + 16, text); if(!diesel.hasAcceptableFuel()) { - String[] text2 = new String[] { "Error: The currently set fuel type", "is not supported by this engine!" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 32, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 32, text2); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 8, guiTop + 36 + 32, 16, 16, guiLeft, guiTop + 36 + 16 + 32, text2); + } + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 89 <= x && guiLeft + 89 + 16 > x && guiTop + 61 < y && guiTop + 61 + 14 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("turnOn", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, diesel.xCoord, diesel.yCoord, diesel.zCoord)); } } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diesel.hasCustomInventoryName() ? this.diesel.getInventoryName() : I18n.format(this.diesel.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); } @@ -60,20 +72,18 @@ public class GUIMachineDiesel extends GuiInfoContainer { drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); if(diesel.power > 0) { - int i = (int)diesel.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 152, guiTop + 69 - i, 176, 52 - i, 16, i); + int i = (int) diesel.getPowerScaled(52); + drawTexturedModalRect(guiLeft + 141, guiTop + 69 - i, 176, 52 - i, 16, i); } - if(diesel.tank.getFill() > 0 && diesel.hasAcceptableFuel()) - { - drawTexturedModalRect(guiLeft + 43 + 18 * 4, guiTop + 34, 208, 0, 18, 18); - } + if(diesel.isOn) drawTexturedModalRect(guiLeft + 79, guiTop + 61, 192, 16, 35, 14); + if(diesel.wasOn) drawTexturedModalRect(guiLeft + 89, guiTop + 42, 192, 0, 16, 16); - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); + this.drawInfoPanel(guiLeft - 8, guiTop + 36, 16, 16, 2); if(!diesel.hasAcceptableFuel()) - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32, 16, 16, 6); + this.drawInfoPanel(guiLeft - 8, guiTop + 36 + 32, 16, 16, 6); - diesel.tank.renderTank(guiLeft + 80, guiTop + 69, this.zLevel, 16, 52); + diesel.tank.renderTank(guiLeft + 35, guiTop + 69, this.zLevel, 16, 52); } } diff --git a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java index 7a0542ccc..cc9273223 100644 --- a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java +++ b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java @@ -1,11 +1,17 @@ package com.hbm.items.machine; +import java.util.List; + import com.hbm.items.ItemEnumMulti; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; +import com.hbm.util.i18n.I18nUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; public class ItemPileRodMK2 extends ItemEnumMulti { @@ -57,6 +63,14 @@ public class ItemPileRodMK2 extends ItemEnumMulti { this.turnsInto = turnsInto; } } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + for(String loc : I18nUtil.autoBreak(Minecraft.getMinecraft().fontRenderer, I18nUtil.resolveKey(this.getUnlocalizedName(stack) + ".desc"), 225)) { + list.add(EnumChatFormatting.YELLOW + loc); + } + } @Override public boolean showDurabilityBar(ItemStack stack) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index e3ef0ab69..a0d77cf4e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -6,6 +6,7 @@ import java.util.HashMap; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.FluidContainerRegistry; import com.hbm.inventory.container.ContainerMachineDiesel; import com.hbm.inventory.fluid.FluidType; @@ -28,10 +29,8 @@ import com.hbm.util.CompatEnergyControl; import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; 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; @@ -40,8 +39,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC, IFluidCopiable { +public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiverMK2, IControlReceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC, IFluidCopiable { + public boolean isOn = false; public long power; public long powerCap = maxPower; public FluidTank tank; @@ -50,8 +50,8 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen private AudioWrapper audio; /* CONFIGURABLE CONSTANTS */ - public static long maxPower = 50000; - public static int fluidCap = 16000; + public static long maxPower = 50_000; + public static int fuelCap = 16_000; public static HashMap fuelEfficiency = new HashMap(); static { fuelEfficiency.put(FuelGrade.MEDIUM, 0.5D); @@ -63,9 +63,45 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen private static final int[] slots_bottom = new int[] { 1, 2 }; private static final int[] slots_side = new int[] { 2 }; + @Override + public String getConfigName() { + return "dieselgen"; + } + + @Override + public void readIfPresent(JsonObject obj) { + maxPower = IConfigurableMachine.grab(obj, "L:powerCap", maxPower); + fuelCap = IConfigurableMachine.grab(obj, "I:fuelCap", fuelCap); + + if(obj.has("D[:efficiency")) { + JsonArray array = obj.get("D[:efficiency").getAsJsonArray(); + for(FuelGrade grade : FuelGrade.values()) { + fuelEfficiency.put(grade, array.get(grade.ordinal()).getAsDouble()); + } + } + } + + @Override + public void writeConfig(JsonWriter writer) throws IOException { + writer.name("L:powerCap").value(maxPower); + writer.name("I:fuelCap").value(fuelCap); + + String info = "Fuel grades in order: "; + for(FuelGrade grade : FuelGrade.values()) info += grade.name() + " "; + info = info.trim(); + writer.name("INFO").value(info); + + writer.name("D[:efficiency").beginArray().setIndent(""); + for(FuelGrade grade : FuelGrade.values()) { + double d = fuelEfficiency.containsKey(grade) ? fuelEfficiency.get(grade) : 0.0D; + writer.value(d); + } + writer.endArray().setIndent(" "); + } + public TileEntityMachineDiesel() { - super(5, 100); - tank = new FluidTank(Fluids.DIESEL, 4_000); + super(4, 100); + tank = new FluidTank(Fluids.DIESEL, fuelCap); } @Override @@ -84,6 +120,7 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); + this.isOn = nbt.getBoolean("isOn"); this.power = nbt.getLong("powerTime"); this.powerCap = nbt.getLong("powerCap"); tank.readFromNBT(nbt, "fuel"); @@ -92,7 +129,8 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - + + nbt.setBoolean("isOn", isOn); nbt.setLong("powerTime", power); nbt.setLong("powerCap", powerCap); tank.writeToNBT(nbt, "fuel"); @@ -110,9 +148,7 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen return false; } - public long getPowerScaled(long i) { - return (power * i) / powerCap; - } + public long getPowerScaled(long i) { return (power * i) / powerCap; } @Override public void updateEntity() { @@ -120,29 +156,18 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen if(!worldObj.isRemote) { this.wasOn = false; + + tank.setType(3, slots); + tank.loadTank(0, 1, slots); for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { this.tryProvide(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); this.sendSmoke(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + this.trySubscribe(tank.getTankType(), worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } - - //Tank Management - FluidType last = tank.getTankType(); - if(tank.setType(3, 4, slots)) this.unsubscribeToAllAround(last, this); - tank.loadTank(0, 1, slots); - this.subscribeToAllAround(tank.getTankType(), this); - - FluidType type = tank.getTankType(); - if(type == Fluids.NITAN) - powerCap = maxPower * 10; - else - powerCap = maxPower; - - // Battery Item power = Library.chargeItemsFromTE(slots, 2, power, powerCap); - - generate(); + if(isOn) generate(); this.networkPackNT(50); } else { @@ -196,6 +221,7 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen super.serialize(buf); buf.writeInt((int) power); buf.writeInt((int) powerCap); + buf.writeBoolean(isOn); buf.writeBoolean(wasOn); tank.serialize(buf); } @@ -205,17 +231,13 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen super.deserialize(buf); this.power = buf.readInt(); this.powerCap = buf.readInt(); + this.isOn = buf.readBoolean(); this.wasOn = buf.readBoolean(); tank.deserialize(buf); } - public boolean hasAcceptableFuel() { - return getHEFromFuel() > 0; - } - - public long getHEFromFuel() { - return getHEFromFuel(tank.getTankType()); - } + public boolean hasAcceptableFuel() { return getHEFromFuel() > 0; } + public long getHEFromFuel() { return getHEFromFuel(tank.getTankType()); } public static long getHEFromFuel(FluidType type) { @@ -234,28 +256,36 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen public void generate() { + if(!this.isOn) return; if(this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) return; + if(!hasAcceptableFuel()) return; + if(tank.getFill() <= 0) return; - if(hasAcceptableFuel()) { - if (tank.getFill() > 0) { - - this.wasOn = true; - - tank.setFill(tank.getFill() - 1); - if(tank.getFill() < 0) - tank.setFill(0); - - if(worldObj.getTotalWorldTime() % 5 == 0) { - super.pollute(tank.getTankType(), FluidReleaseType.BURN, 5F); - } - - if(power + getHEFromFuel() <= powerCap) { - power += getHEFromFuel(); - } else { - power = powerCap; - } - } + this.wasOn = true; + tank.setFill(tank.getFill() - 1); + + if(tank.getFill() < 0) tank.setFill(0); + + if(worldObj.getTotalWorldTime() % 5 == 0) { + super.pollute(tank.getTankType(), FluidReleaseType.BURN, 5F); } + + if(power + getHEFromFuel() <= powerCap) { + power += getHEFromFuel(); + } else { + power = powerCap; + } + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return player.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 25; + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("turnOn")) this.isOn = !this.isOn; + this.markChanged(); } @Override public long getPower() { return power; } @@ -265,57 +295,9 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {tank}; } @Override public FluidTank[] getAllTanks() { return new FluidTank[] { tank }; } - @Override - public String getConfigName() { - return "dieselgen"; - } - - @Override - public void readIfPresent(JsonObject obj) { - maxPower = IConfigurableMachine.grab(obj, "L:powerCap", maxPower); - fluidCap = IConfigurableMachine.grab(obj, "I:fuelCap", fluidCap); - - if(obj.has("D[:efficiency")) { - JsonArray array = obj.get("D[:efficiency").getAsJsonArray(); - for(FuelGrade grade : FuelGrade.values()) { - fuelEfficiency.put(grade, array.get(grade.ordinal()).getAsDouble()); - } - } - } - - @Override - public void writeConfig(JsonWriter writer) throws IOException { - writer.name("L:powerCap").value(maxPower); - writer.name("I:fuelCap").value(fluidCap); - - String info = "Fuel grades in order: "; - for(FuelGrade grade : FuelGrade.values()) info += grade.name() + " "; - info = info.trim(); - writer.name("INFO").value(info); - - writer.name("D[:efficiency").beginArray().setIndent(""); - for(FuelGrade grade : FuelGrade.values()) { - double d = fuelEfficiency.containsKey(grade) ? fuelEfficiency.get(grade) : 0.0D; - writer.value(d); - } - writer.endArray().setIndent(" "); - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerMachineDiesel(player.inventory, this); - } - - @Override - @SideOnly(Side.CLIENT) - public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIMachineDiesel(player.inventory, this); - } - - @Override - public FluidTank[] getSendingTanks() { - return this.getSmokeTanks(); - } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineDiesel(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineDiesel(player.inventory, this); } + @Override public FluidTank[] getSendingTanks() { return this.getSmokeTanks(); } @Override public void provideExtraInfo(NBTTagCompound data) { diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index b47823138..d8981f5ca 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -504,7 +504,7 @@ public class TileEntityPileCore extends TileEntityTickingBase { PileChannel chan = new PileChannel(x, y, z, dir); if(chan.type == chan.type.FUEL) { - NBTTagList list = nbt.getTagList("fuel", 10); + NBTTagList list = nbt.getTagList("items", 10); for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); byte b0 = nbt1.getByte("slot"); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 375d2c3c0..59fdcf7d7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3815,6 +3815,20 @@ item.pellet_rtg_weak.name=Weak Uranium RTG Pellet item.pellet_rtg_weak.desc=Cheaper and weaker pellet, now with more U238! item.pellet_schrabidium.name=Pure Schrabidium Watz Pellet item.photo_panel.name=Photovoltaic Panel +item.pile_rod.nu.name=Chicago Pile Natural Uranium Rod +item.pile_rod.nu.desc=Basic breeding target for making plutonium-239. +item.pile_rod.po210be.name=Chicago Pile Po210Be Neutron source +item.pile_rod.po210be.desc=Advanced polonium-beryllium neutron source for starting the Chicago Pile's reaction. +item.pile_rod.pu239.name=Chicago Pile Plutonium-239 Rod +item.pile_rod.pu239.desc=Plutonium bred from natural uranium, can be bred further into RGP. +item.pile_rod.ra226be.name=Chicago Pile Ra226Be Neutron source +item.pile_rod.ra226be.desc=Basic radium-beryllium neutron source for starting the Chicago Pile's reaction. +item.pile_rod.rgp.name=Chicago Pile RGP Rod +item.pile_rod.rgp.desc=Reactor-grade plutonium rod, mainly plutonium-239 with plutonium-240 impurities. +item.pile_rod.waste.name=Chicago Pile Nuclear Waste Rod +item.pile_rod.waste.desc=Highly reactive end product from leaving a Chicago Pile fuel rod in the reactor for too long. +item.pile_rod.zr.name=Chicago Pile Zirconium Rod +item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for safely pushing other rods safely out of the reactor. item.pile_rod_boron.name=Chicago Pile Control Rod item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle item.pile_rod_detector.name=Chicago Pile Control & Detector Rod diff --git a/src/main/resources/assets/hbm/textures/gui/generators/gui_diesel.png b/src/main/resources/assets/hbm/textures/gui/generators/gui_diesel.png new file mode 100644 index 0000000000000000000000000000000000000000..710d16891f6d7752b0a904d05a624dbf11eca1fe GIT binary patch literal 3818 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 Date: Wed, 22 Jul 2026 21:19:02 -0400 Subject: [PATCH 28/50] Why the phone be ringing when I like tacos --- .../java/com/hbm/blocks/BlockDummyable.java | 14 +++++++++++--- .../blocks/machine/MachineAnnihilator.java | 8 +++++++- .../hbm/blocks/machine/MachineBigAssTank.java | 13 ++++++++++++- .../machine/MachineCatalyticCracker.java | 11 ++++++++++- .../machine/MachineCatalyticReformer.java | 9 ++++++++- .../hbm/blocks/machine/MachineChungus.java | 10 +++++++++- .../com/hbm/blocks/machine/MachineCoker.java | 12 +++++++++++- .../hbm/blocks/machine/MachineCompressor.java | 9 ++++++++- .../blocks/machine/MachineElectrolyser.java | 19 ++++++++++++++++++- .../hbm/blocks/machine/MachineExcavator.java | 10 +++++++++- .../machine/MachineExposureChamber.java | 12 +++++++++++- .../blocks/machine/MachineFrackingTower.java | 15 ++++++++++++++- .../com/hbm/blocks/machine/MachineICF.java | 9 ++++++++- .../hbm/blocks/machine/MachinePumpjack.java | 11 ++++++++++- .../blocks/machine/MachineStrandCaster.java | 8 +++++++- .../com/hbm/blocks/machine/ReactorZirnox.java | 10 +++++++++- .../com/hbm/blocks/machine/SoyuzLauncher.java | 13 ++++++++++++- .../java/com/hbm/blocks/machine/Watz.java | 11 ++++++++++- .../machine/fusion/MachineFusionKlystron.java | 8 +++++++- .../fusion/MachineFusionKlystronCreative.java | 8 +++++++- .../machine/fusion/MachineFusionMHDT.java | 12 +++++++++++- .../hbm/blocks/machine/rbmk/RBMKConsole.java | 8 +++++++- .../blocks/machine/rbmk/RBMKCraneConsole.java | 8 +++++++- 23 files changed, 223 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 8f5051aaf..524092c7b 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -665,10 +665,18 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl Set set = new java.util.HashSet<>(); for(int[] dims : getAllDimensions()) { + int offFwd = dims.length > 6 ? dims[6] : 0; + int offUp = dims.length > 7 ? dims[7] : 0; + int offLat = dims.length > 8 ? dims[8] : 0; + int worldOffX, worldOffY, worldOffZ; + worldOffY = offUp; + worldOffX = facing.offsetX * offFwd + facing.getRotation(ForgeDirection.UP).offsetX * offLat; + worldOffZ = facing.offsetZ * offFwd + facing.getRotation(ForgeDirection.UP).offsetZ * offLat; + int[] rot = MultiblockHandlerXR.rotate(dims, facing); - for(int bx = -rot[4]; bx <= rot[5]; bx++) { - for(int by = -rot[1]; by <= rot[0]; by++) { - for(int bz = -rot[2]; bz <= rot[3]; bz++) { + for(int bx = -rot[4] + worldOffX; bx <= rot[5] + worldOffX; bx++) { + for(int by = -rot[1] + worldOffY; by <= rot[0] + worldOffY; by++) { + for(int bz = -rot[2] + worldOffZ; bz <= rot[3] + worldOffZ; bz++) { BlockPos bp = new BlockPos( MathHelper.floor_double(originX) + bx, MathHelper.floor_double(originY) + by, diff --git a/src/main/java/com/hbm/blocks/machine/MachineAnnihilator.java b/src/main/java/com/hbm/blocks/machine/MachineAnnihilator.java index 38bb83680..1c00e165b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineAnnihilator.java +++ b/src/main/java/com/hbm/blocks/machine/MachineAnnihilator.java @@ -31,7 +31,13 @@ public class MachineAnnihilator extends BlockDummyable { @Override public int[] getDimensions() { return new int[] {2, 0, 4, 4, 1, 1}; } @Override public int getOffset() { return 4; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {2, 0, 4, 4, 1, 1}, + new int[] {8, -2, 1, 1, 1, 1, -3, 0, 0} + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java index aea632987..77df48aff 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java +++ b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java @@ -43,7 +43,18 @@ public class MachineBigAssTank extends BlockDummyable implements IPersistentInfo @Override public int[] getDimensions() { return new int[] {5, 0, 4, 4, 4, 4}; } @Override public int getOffset() { return 6; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {5, 0, 4, 4, 4, 4}, + new int[] {4, 0, 5, -4, 2, 2}, + new int[] {4, 0, -4, 5, 2, 2}, + new int[] {4, 0, 2, 2, 5, -4}, + new int[] {4, 0, 2, 2, -4, 5}, + new int[] {3, 0, 6, -5, 0, 0}, + new int[] {3, 0, -5, 6, 0, 0} + }; + } @Override public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java b/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java index 9b7910686..282405fe7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java @@ -49,7 +49,16 @@ public class MachineCatalyticCracker extends BlockDummyable implements ILookOver public int getOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {0, 0, 3, 3, 2, 3}, + new int[]{8, -1, 3, -1, 2, 0}, + new int[]{13, 0, 0, 3, 2, 1}, + new int[]{14, -13, -1, 2, 1, 0}, + new int[]{3, -1, 2, 3, -1, 3} + }; + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java b/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java index b8401426a..e190051ed 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java @@ -68,7 +68,14 @@ public class MachineCatalyticReformer extends BlockDummyable implements IPersist public int getOffset() { return 1; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {2, 0, 1, 1, 2, 2}, + new int[] {3, -3, 1, 0, -1, 2}, + new int[] {6, -3, 1, 1, 2, 0}, + }; + } @Override public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index 8972ca7ac..6614dbfe8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -89,7 +89,15 @@ public class MachineChungus extends BlockDummyable implements ITooltipProvider, public int getOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 3, 0, 0, 3, 2, 2 }, + new int[] { 4, -4, 0, 3, 1, 1 }, + new int[] { 3, 0, 6, -1, 1, 1 }, + new int[] { 2, 0, 10, -7, 1, 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); diff --git a/src/main/java/com/hbm/blocks/machine/MachineCoker.java b/src/main/java/com/hbm/blocks/machine/MachineCoker.java index 695698016..4c26a4aa7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCoker.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCoker.java @@ -43,7 +43,17 @@ public class MachineCoker extends BlockDummyable implements ITooltipProvider { public int getOffset() { return 1; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {22, 0, 1, 1, 1, 1}, + new int[] {5, 0, 2, 2, 2, 2, 0, 1, 0}, + new int[] {0, 1, 0, 0, 0, 0, 2, 1, 2}, + new int[] {0, 1, 0, 0, 0, 0, 2, 1, -2}, + new int[] {0, 1, 0, 0, 0, 0, -2, 1, 2}, + new int[] {0, 1, 0, 0, 0, 0, -2, 1, -2}, + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { if(super.checkRequirement(world, x, y, z, dir, o)) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineCompressor.java b/src/main/java/com/hbm/blocks/machine/MachineCompressor.java index f22bc3fc1..22cc0d0e8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCompressor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCompressor.java @@ -34,7 +34,14 @@ public class MachineCompressor extends BlockDummyable { public int getOffset() { return 2; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {2, 0, 1, 2, 1, 1}, + new int[] {3, -3, 1, 1, 1, 1}, + new int[] {8, -4, 0, 0, 1, 1} + }; + } @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/blocks/machine/MachineElectrolyser.java b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java index ec787564a..0a4825728 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java +++ b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java @@ -32,7 +32,24 @@ public class MachineElectrolyser extends BlockDummyable { public int getOffset() { return 5; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {0, 0, 5, 5, 1, 3}, + new int[] {2, -1, 5, 5, 1, 1}, + new int[] {3, -3, 5, 5, 0, 0}, + new int[] {3, -1, 4, -4, -3, 3}, + new int[] {3, -1, 2, -2, -3, 3}, + new int[] {3, -1, 0, 0, -3, 3}, + new int[] {3, -1, -2, 2, -3, 3}, + new int[] {3, -1, -4, 4, -3, 3}, + new int[] {0, 0, 0, 0, -1, 2, 4, 3, 0}, + new int[] {0, 0, 0, 0, -1, 2, 2, 3, 0}, + new int[] {0, 0, 0, 0, -1, 2, 0, 3, 0}, + new int[] {0, 0, 0, 0, -1, 2, -2, 3, 0}, + new int[] {0, 0, 0, 0, -1, 2, -4, 3, 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, -1); diff --git a/src/main/java/com/hbm/blocks/machine/MachineExcavator.java b/src/main/java/com/hbm/blocks/machine/MachineExcavator.java index c91d6bb16..06dfce2e8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineExcavator.java +++ b/src/main/java/com/hbm/blocks/machine/MachineExcavator.java @@ -44,7 +44,15 @@ public class MachineExcavator extends BlockDummyable { public int getHeightOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {3, 0, 3, 3, 3, 3}, + new int[] {-1, 3, 3, -2, 3, -2}, + new int[] {-1, 3, 3, -2, -2, 3}, + new int[] {-1, 3, -2, 3, 3, 3}, + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { x += dir.offsetX * o; diff --git a/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java b/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java index e0d906181..e062201dc 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java +++ b/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java @@ -32,7 +32,17 @@ public class MachineExposureChamber extends BlockDummyable { public int getOffset() { return 2; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + getDimensions(), + new int[] {3, 0, 0, 0, -3, 8}, + new int[] {0, 0, 1, -1, -3, 6, 0, 2, 0}, + new int[] {0, 0, -1, 1, -3, 6, 0, 2, 0}, + new int[] {3, 0, 1, -1, 0, 1, 0, 0, -7}, + new int[] {3, 0, -1, 1, 0, 1, 0, 0, -7}, + }; + } @Override public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java b/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java index 761aa10ed..d872fc7a9 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java @@ -46,7 +46,20 @@ public class MachineFrackingTower extends BlockDummyable implements IPersistentI public int getOffset() { return 0; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {3, 0, 0, 0, 0, 0}, + new int[] {1, 0, 3, 3, 3, 3, 0, 2, 0}, + new int[] {-1, 2, 0, 1, 0, 1, -2, 2, -2}, + new int[] {-1, 2, 0, 1, 0, 1, 3, 2, -2}, + new int[] {-1, 2, 0, 1, 0, 1, -2, 2, 3}, + new int[] {-1, 2, 0, 1, 0, 1, 3, 2, 3}, + new int[] {10, -4, 2, 2, 2, 2}, + new int[] {24, -9, 1, 1, 1, 1}, + new int[] {1, 0, -2, 3, 1, 1, 0, 15, 0}, + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineICF.java b/src/main/java/com/hbm/blocks/machine/MachineICF.java index 29bca9b90..6e39bd62e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineICF.java +++ b/src/main/java/com/hbm/blocks/machine/MachineICF.java @@ -33,7 +33,14 @@ public class MachineICF extends BlockDummyable { public int getOffset() { return 1; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {5, 0, 1, 1, 8, 8}, + new int[] {1, 1, -1, 2, 8, 8, 0, 3, 0}, + new int[] {1, 1, 2, -1, 8, 8, 0, 3, 0}, + }; + } @Override public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java b/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java index 56f05147d..ad8af4b7b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java @@ -47,7 +47,16 @@ public class MachinePumpjack extends BlockDummyable implements IPersistentInfoPr public int getOffset() { return 0; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {3, 0, 0, 0, 0, 6}, + new int[] {0, 0, -1, 1, -2, 4}, + new int[] {0, 0, 1, -1, -1, 5}, + new int[] {0, 0, -1, 1, 1, 1, 0, 0, -3}, + new int[] {0, 0, 1, -1, 2, 2, 0, 0, -3}, + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java index 354e91136..10345bcb8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java +++ b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java @@ -47,7 +47,13 @@ public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcce public int getOffset() { return 0; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 0, 0, 6, 0, 1, 0 }, + new int[] { 2, 0, 1, 0, 1, 0 } + }; + } @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineStrandCaster(); diff --git a/src/main/java/com/hbm/blocks/machine/ReactorZirnox.java b/src/main/java/com/hbm/blocks/machine/ReactorZirnox.java index 1316a02eb..5d892c5ea 100644 --- a/src/main/java/com/hbm/blocks/machine/ReactorZirnox.java +++ b/src/main/java/com/hbm/blocks/machine/ReactorZirnox.java @@ -62,7 +62,15 @@ public class ReactorZirnox extends BlockDummyable { public int getOffset() { return 2; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {1, 0, 2, 2, 2, 2,}, + new int[] {4, -2, 1, 1, 1, 1}, + new int[] {4, -2, 0, 0, 2, -2}, + new int[] {4, -2, 0, 0, -2, 2} + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java index 598f9aef4..98106fada 100644 --- a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java +++ b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java @@ -168,7 +168,18 @@ public class SoyuzLauncher extends BlockDummyable { public int getOffset() { return 0; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 0, 1, 6, 6, 6, 6 }, + new int[] { -2, 4, -3, 6, -3, 6 }, + new int[] { -2, 4, 6, -3, -3, 6 }, + new int[] { -2, 4, 6, -3, 6, -3 }, + new int[] { -2, 4, -3, 6, 6, -3 }, + new int[] { 0, 4, 1, 1, -6, 8 }, + new int[] { 0, 4, 2, 2, 9, -5 }, + }; + } private final Random field_149933_a = new Random(); private static boolean keepInventory; diff --git a/src/main/java/com/hbm/blocks/machine/Watz.java b/src/main/java/com/hbm/blocks/machine/Watz.java index 41f6767ed..bedbd245e 100644 --- a/src/main/java/com/hbm/blocks/machine/Watz.java +++ b/src/main/java/com/hbm/blocks/machine/Watz.java @@ -53,7 +53,16 @@ public class Watz extends BlockDummyable { public int getOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {2, 0, 3, 3, 1, 1}, + new int[] {2, 0, 2, 2, 2, -2}, + new int[] {2, 0, 2, 2, -2, 2}, + new int[] {2, 0, 1, 1, 3, -3}, + new int[] {2, 0, 1, 1, -3, 3}, + }; + } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java index 46f5abc0f..db8df5641 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java @@ -35,7 +35,13 @@ public class MachineFusionKlystron extends BlockDummyable implements ITooltipPro @Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; } @Override public int getOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 3, 0, 4, 3, 2, 2 }, + new int[] { 4, -3, 4, 3, 1, 1 }, + }; + } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java index 5b0b2edba..198f49f88 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java @@ -28,7 +28,13 @@ public class MachineFusionKlystronCreative extends BlockDummyable implements ITo @Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; } @Override public int getOffset() { return 3; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 3, 0, 4, 3, 2, 2 }, + new int[] { 4, -3, 4, 3, 1, 1 }, + }; + } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java index 2af2192b9..64dd13fec 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java @@ -44,7 +44,17 @@ public class MachineFusionMHDT extends BlockDummyable implements ILookOverlay, I public int getOffset() { return 7; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 2, 0, 6, 7, 2, 2 }, + new int[] { 3, -2, 6, 2, 1, 1 }, + new int[] { 3, -2, -6, 7, 1, 1 }, + new int[] { 3, -2, -3, 5, 2, 2 }, + new int[] { 4, -3, -3, 5, 1, 1 }, + new int[] { 1, 0, 0, 1, 3, 3, 3, 0, 0 }, + }; + } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && 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 de8789215..568c4f3ec 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java @@ -107,7 +107,13 @@ public class RBMKConsole extends BlockDummyable implements IToolable { public int getOffset() { return 1; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {3, 0, 0, 0, 2, 2}, + new int[] {0, 0, 0, 1, 2, 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); diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCraneConsole.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCraneConsole.java index 680856254..9468765bd 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCraneConsole.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCraneConsole.java @@ -38,7 +38,13 @@ public class RBMKCraneConsole extends BlockDummyable implements IToolable { public int getOffset() { return 1; } - + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] {1, 0, 0, 0, 1, 1}, + new int[] {0, 0, 0, 1, 1, 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); From c3cd832abc8cd95979699ff18d6f74477bc03467 Mon Sep 17 00:00:00 2001 From: Wolf Date: Wed, 22 Jul 2026 21:29:18 -0400 Subject: [PATCH 29/50] Meow Meow Meow Meow Meow Meow Meow Meow Meow Meow --- .../java/com/hbm/blocks/BlockDummyable.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 524092c7b..595298e61 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -619,6 +619,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl int o = -getOffset(); int pY = mop.blockY + getHeightOffset(); + //Orientation ForgeDirection facing = ForgeDirection.NORTH; if(i == 0) facing = ForgeDirection.getOrientation(2); if(i == 1) facing = ForgeDirection.getOrientation(5); @@ -631,21 +632,15 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl double originY = pY + (mop.sideHit == 1 ? 1 : 0); double originZ = mop.blockZ + facing.offsetZ * o; - //float exp = 0.002F; - //ICustomBlockHighlight.setup(); boolean canPlace = checkRequirement(player.worldObj, mop.blockX, pY + 1, mop.blockZ, facing, o); - //int color = canPlace ? 0x008000 : 0x800000; Tessellator tess = Tessellator.instance; GL11.glPushMatrix(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_TEXTURE_2D); - //mc.renderEngine.bindTexture(EMPTY); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); - //GL11.glColor3f(1F, 1F, 1F); GL11.glLineWidth(2.0F); GL11.glDepthMask(false); - //tess.setTranslation(-dX, -dY, -dZ); tess.startDrawing(GL11.GL_LINES); tess.setBrightness(240); @@ -654,21 +649,21 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } else { tess.setColorRGBA(255, 0, 0, 255); } - /* - for(int[] dims : getAllDimensions()) { - int[] rot = MultiblockHandlerXR.rotate(dims, facing); - AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(-rot[4], -rot[1], -rot[2], rot[5] + 1, rot[0] + 1, rot[3] + 1); - RenderGlobal.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(originX, originY, originZ), color); - } - */ + + //Gets the list of different dimensions that each XLmultiblock has, and generates the list of blocks that needs to be highlighted. + //Each XL multiblock has the getAllDimensions overridden in its own class List blocks = new java.util.ArrayList<>(); Set set = new java.util.HashSet<>(); for(int[] dims : getAllDimensions()) { + //Some of the multiblocks have offsets for the placements, so this allows for the ones that dont need it to have a bunch of 0s at the end. int offFwd = dims.length > 6 ? dims[6] : 0; int offUp = dims.length > 7 ? dims[7] : 0; int offLat = dims.length > 8 ? dims[8] : 0; - int worldOffX, worldOffY, worldOffZ; + int worldOffX; + int worldOffY; + int worldOffZ; + worldOffY = offUp; worldOffX = facing.offsetX * offFwd + facing.getRotation(ForgeDirection.UP).offsetX * offLat; worldOffZ = facing.offsetZ * offFwd + facing.getRotation(ForgeDirection.UP).offsetZ * offLat; @@ -689,6 +684,8 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } } + //This looks for the blocks nearby and draws lines between the vertexes to make different shaped boxes. + //Most of this was taken from Mellow (Thanks mellow) -Wolf for(BlockPos pos : blocks) { boolean px = set.contains(pos.add(1, 0, 0)); boolean nx = set.contains(pos.add(-1, 0, 0)); @@ -703,6 +700,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl double maxY = pos.getY() + 1 - dY; double minZ = pos.getZ() - dZ; double maxZ = pos.getZ() + 1 - dZ; + if(!ppy) { if(!nx) { tess.addVertex(minX, maxY, minZ); tess.addVertex(minX, maxY, maxZ); } if(!ppz) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(maxX, maxY, maxZ); } @@ -749,7 +747,6 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LIGHTING); GL11.glPopMatrix(); - //ICustomBlockHighlight.cleanup(); } } } \ No newline at end of file From 0d1dff70ade199bef449a8d45fab90eb677274d9 Mon Sep 17 00:00:00 2001 From: Wolf Date: Wed, 22 Jul 2026 22:11:32 -0400 Subject: [PATCH 30/50] meow finale_real_finalfinal_real_lastone --- src/main/java/com/hbm/blocks/BlockDummyable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 595298e61..e128f8e95 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -651,7 +651,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } //Gets the list of different dimensions that each XLmultiblock has, and generates the list of blocks that needs to be highlighted. - //Each XL multiblock has the getAllDimensions overridden in its own class + //Each XL multiblock has the getAllDimensions overridden in its own class. Each NEEDS it or it will show the incorect shape. List blocks = new java.util.ArrayList<>(); Set set = new java.util.HashSet<>(); From 6ac520467b1bc68308bc54c3ed7f6b1ed2fbbe13 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 23 Jul 2026 12:03:14 +0200 Subject: [PATCH 31/50] tiny bit of cleanup --- .../com/hbm/blocks/machine/MachineDiesel.java | 2 +- .../hbm/blocks/machine/MachineTurbofan.java | 2 +- .../inventory/fluid/trait/FT_Combustible.java | 16 ++++++++-------- .../hbm/inventory/fluid/trait/FT_Coolable.java | 12 ++++++++---- .../hbm/inventory/fluid/trait/FT_Heatable.java | 18 +++++++++++------- .../com/hbm/items/machine/ItemPistons.java | 2 +- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineDiesel.java b/src/main/java/com/hbm/blocks/machine/MachineDiesel.java index 1f7b923a2..d4204d79f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineDiesel.java +++ b/src/main/java/com/hbm/blocks/machine/MachineDiesel.java @@ -59,7 +59,7 @@ public class MachineDiesel extends BlockMachineBase implements ITooltipProvider if(efficiency != null) { int eff = (int)(efficiency * 100); - list.add(EnumChatFormatting.YELLOW + "-" + grade.getGrade() + ": " + EnumChatFormatting.RED + "" + eff + "%"); + list.add(EnumChatFormatting.YELLOW + "-" + grade.getLocalizedName() + ": " + EnumChatFormatting.RED + "" + eff + "%"); } } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java b/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java index fb8a30c88..78f9ac60e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java @@ -78,6 +78,6 @@ public class MachineTurbofan extends BlockDummyable implements ITooltipProvider @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { list.add(EnumChatFormatting.YELLOW + "Fuel efficiency:"); - list.add(EnumChatFormatting.YELLOW + "-" + FuelGrade.AERO.getGrade() + ": " + EnumChatFormatting.RED + "100%"); + list.add(EnumChatFormatting.YELLOW + "-" + FuelGrade.AERO.getLocalizedName() + ": " + EnumChatFormatting.RED + "100%"); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java index c0c21ffaf..781b92004 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Combustible.java @@ -30,7 +30,7 @@ public class FT_Combustible extends FluidTrait { if(combustionEnergy > 0) { info.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.provides") + " " + EnumChatFormatting.RED + "" + BobMathUtil.getShortNumber(combustionEnergy) + "HE " + EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.perBucket")); - info.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.fuelGrade") + ": " + EnumChatFormatting.RED + this.fuelGrade.getGrade()); + info.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hbmfluid.trait.fuelGrade") + ": " + EnumChatFormatting.RED + this.fuelGrade.getLocalizedName()); } } @@ -43,11 +43,11 @@ public class FT_Combustible extends FluidTrait { } public static enum FuelGrade { - LOW(I18nUtil.resolveKey("hbmfluid.trait.fuel.low")), //heating and industrial oil < star engine, iGen - MEDIUM(I18nUtil.resolveKey("hbmfluid.trait.fuel.medium")), //petroil < diesel generator - HIGH(I18nUtil.resolveKey("hbmfluid.trait.fuel.high")), //diesel, gasoline < HP engine - AERO(I18nUtil.resolveKey("hbmfluid.trait.fuel.aviation")), //kerosene and other light aviation fuels < turbofan - GAS(I18nUtil.resolveKey("hbmfluid.trait.fuel.gaseous")); //fuel gasses like NG, PG and syngas < gas turbine + LOW("low"), //heating and industrial oil < star engine, iGen + MEDIUM("medium"), //petroil < diesel generator + HIGH("high"), //diesel, gasoline < HP engine + AERO("aviation"), //kerosene and other light aviation fuels < turbofan + GAS("gaseous"); //fuel gasses like NG, PG and syngas < gas turbine private String grade; @@ -55,8 +55,8 @@ public class FT_Combustible extends FluidTrait { this.grade = grade; } - public String getGrade() { - return this.grade; + public String getLocalizedName() { + return I18nUtil.resolveKey("hbmfluid.trait.fuel." + this.grade); } } diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java index d2664fb22..7de6e2e07 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java @@ -49,20 +49,24 @@ public class FT_Coolable extends FluidTrait { double eff = getEfficiency(type); if(eff > 0) { - info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); + info.add(EnumChatFormatting.YELLOW + "[" + type.getLocalizedName() + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); } } } public static enum CoolingType { - TURBINE(I18nUtil.resolveKey("hbmfluid.trait.steam")), - HEATEXCHANGER(I18nUtil.resolveKey("hbmfluid.trait.coolable")); + TURBINE("steam"), + HEATEXCHANGER("coolable"); - public String name; + private String name; private CoolingType(String name) { this.name = name; } + + public String getLocalizedName() { + return I18nUtil.resolveKey("hbmfluid.trait." + this.name); + } } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java index 1e599b6a0..3186da963 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Heatable.java @@ -49,7 +49,7 @@ public class FT_Heatable extends FluidTrait { double eff = getEfficiency(type); if(eff > 0) { - info.add(EnumChatFormatting.YELLOW + "[" + type.name + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); + info.add(EnumChatFormatting.YELLOW + "[" + type.getLocalizedName() + "] " + EnumChatFormatting.AQUA + I18nUtil.resolveKey("hbmfluid.trait.efficiency") + ": " + ((int) (eff * 100D)) + "%"); } } } @@ -69,17 +69,21 @@ public class FT_Heatable extends FluidTrait { } public static enum HeatingType { - BOILER(I18nUtil.resolveKey("hbmfluid.trait.boilable")), - HEATEXCHANGER(I18nUtil.resolveKey("hbmfluid.trait.heatable")), - PWR(I18nUtil.resolveKey("hbmfluid.trait.coolantPWR")), - ICF(I18nUtil.resolveKey("hbmfluid.trait.coolantICF")), - PA(I18nUtil.resolveKey("hbmfluid.trait.coolantPA")); + BOILER("boilable"), + HEATEXCHANGER("heatable"), + PWR("coolantPWR"), + ICF("coolantICF"), + PA("coolantPA"); - public String name; + private String name; private HeatingType(String name) { this.name = name; } + + public String getLocalizedName() { + return I18nUtil.resolveKey("hbmfluid.trait." + this.name); + } } @Override diff --git a/src/main/java/com/hbm/items/machine/ItemPistons.java b/src/main/java/com/hbm/items/machine/ItemPistons.java index 4736b5cdd..822c0a5ba 100644 --- a/src/main/java/com/hbm/items/machine/ItemPistons.java +++ b/src/main/java/com/hbm/items/machine/ItemPistons.java @@ -46,7 +46,7 @@ public class ItemPistons extends ItemEnumMulti { list.add(EnumChatFormatting.YELLOW + "Fuel efficiency:"); for(int i = 0; i < type.eff.length; i++) { - list.add(EnumChatFormatting.YELLOW + "-" + FuelGrade.values()[i].getGrade() + ": " + EnumChatFormatting.RED + "" + (int)(type.eff[i] * 100) + "%"); + list.add(EnumChatFormatting.YELLOW + "-" + FuelGrade.values()[i].getLocalizedName() + ": " + EnumChatFormatting.RED + "" + (int)(type.eff[i] * 100) + "%"); } } From 9ab159d9b64066676339d6b951fffadaa6e3e9c0 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 23 Jul 2026 12:53:16 +0200 Subject: [PATCH 32/50] fusion reactor port markers on place preview --- changelog | 8 +- .../java/com/hbm/blocks/BlockDummyable.java | 250 +++++++++++++----- .../machine/fusion/MachineFusionBoiler.java | 7 + .../machine/fusion/MachineFusionBreeder.java | 7 + .../fusion/MachineFusionCollector.java | 7 + .../machine/fusion/MachineFusionCoupler.java | 8 + .../machine/fusion/MachineFusionKlystron.java | 8 + .../fusion/MachineFusionKlystronCreative.java | 8 + .../machine/fusion/MachineFusionMHDT.java | 9 + .../fusion/MachineFusionPlasmaForge.java | 8 + .../machine/fusion/MachineFusionTorus.java | 21 ++ .../com/hbm/handler/MultiblockHandlerXR.java | 31 ++- 12 files changed, 298 insertions(+), 74 deletions(-) diff --git a/changelog b/changelog index c06d71eef..7ec181e52 100644 --- a/changelog +++ b/changelog @@ -19,8 +19,14 @@ * All legacy pixel gauges have been replaced with smooth ones (watz, ZIRNOX, CCGT) making them more accurate * Updated the diesel generator's GUI * The diesel gen now also has an in-GUI button for turning it on and off like the industrial combustion engine +* MS-ESv1.1 `split` instruction now supports variable substitution +* Multiblocks now display a wireframe preview of how much space they take up + * This preview is green if it can be placed and red if it can not + * On some machines, this preview might not be perfect, but the check on whether it can be placed should always be accurate + * This makes it easier to anticipate how much space a machine takes up, as well as lining up large parts like fusion reactor components which were notoriously hard to place down right ## Fixed * Fixed held block being placed when not sneaking when opening the cable diode's GUI * Fixed an issue where the diesel generator's fuel capacity is the original 4,000mB instead of the intended new 16,000mB - * This means that explosive barrels and universal barrels can now be loaded into the diesel generator \ No newline at end of file + * This means that explosive barrels and universal barrels can now be loaded into the diesel generator +* Fixed RoR terminal's `set` command not working \ 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 e128f8e95..1dacf9c01 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -603,13 +603,17 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } public int[][] getAllDimensions() { - return new int[][] { getDimensions() }; + return new int[][] { getDimensions() }; } - + + public double[][] getAABBExtras() { + return new double[0][0]; + } + @SideOnly(Side.CLIENT) public void drawPlacementHighlight(EntityPlayer player, float interp) { MovingObjectPosition mop = EntityDamageUtil.getMouseOver(player, 5.0D); - + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) interp; double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp; @@ -619,13 +623,13 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl int o = -getOffset(); int pY = mop.blockY + getHeightOffset(); - //Orientation + // Orientation ForgeDirection facing = ForgeDirection.NORTH; if(i == 0) facing = ForgeDirection.getOrientation(2); if(i == 1) facing = ForgeDirection.getOrientation(5); if(i == 2) facing = ForgeDirection.getOrientation(3); if(i == 3) facing = ForgeDirection.getOrientation(4); - + facing = getDirModified(facing); double originX = mop.blockX + facing.offsetX * o; @@ -638,32 +642,36 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl GL11.glPushMatrix(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_TEXTURE_2D); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); - GL11.glLineWidth(2.0F); - GL11.glDepthMask(false); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glLineWidth(2.0F); + GL11.glDepthMask(false); tess.startDrawing(GL11.GL_LINES); tess.setBrightness(240); - if (canPlace) { + if(canPlace) { tess.setColorRGBA(0, 255, 0, 255); } else { tess.setColorRGBA(255, 0, 0, 255); } - //Gets the list of different dimensions that each XLmultiblock has, and generates the list of blocks that needs to be highlighted. - //Each XL multiblock has the getAllDimensions overridden in its own class. Each NEEDS it or it will show the incorect shape. + // Gets the list of different dimensions that each XLmultiblock has, + // and generates the list of blocks that needs to be highlighted. + // Each XL multiblock has the getAllDimensions overridden in its own + // class. Each NEEDS it or it will show the incorect shape. List blocks = new java.util.ArrayList<>(); Set set = new java.util.HashSet<>(); for(int[] dims : getAllDimensions()) { - //Some of the multiblocks have offsets for the placements, so this allows for the ones that dont need it to have a bunch of 0s at the end. + // Some of the multiblocks have offsets for the placements, so + // this allows for the ones that dont need it to have a bunch of + // 0s at the end. int offFwd = dims.length > 6 ? dims[6] : 0; - int offUp = dims.length > 7 ? dims[7] : 0; + int offUp = dims.length > 7 ? dims[7] : 0; int offLat = dims.length > 8 ? dims[8] : 0; int worldOffX; int worldOffY; int worldOffZ; - + worldOffY = offUp; worldOffX = facing.offsetX * offFwd + facing.getRotation(ForgeDirection.UP).offsetX * offLat; worldOffZ = facing.offsetZ * offFwd + facing.getRotation(ForgeDirection.UP).offsetZ * offLat; @@ -672,27 +680,24 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl for(int bx = -rot[4] + worldOffX; bx <= rot[5] + worldOffX; bx++) { for(int by = -rot[1] + worldOffY; by <= rot[0] + worldOffY; by++) { for(int bz = -rot[2] + worldOffZ; bz <= rot[3] + worldOffZ; bz++) { - BlockPos bp = new BlockPos( - MathHelper.floor_double(originX) + bx, - MathHelper.floor_double(originY) + by, - MathHelper.floor_double(originZ) + bz - ); + BlockPos bp = new BlockPos(MathHelper.floor_double(originX) + bx, MathHelper.floor_double(originY) + by, MathHelper.floor_double(originZ) + bz); blocks.add(bp); set.add(bp); } } - + } } - //This looks for the blocks nearby and draws lines between the vertexes to make different shaped boxes. - //Most of this was taken from Mellow (Thanks mellow) -Wolf - for(BlockPos pos : blocks) { - boolean px = set.contains(pos.add(1, 0, 0)); - boolean nx = set.contains(pos.add(-1, 0, 0)); - boolean ppy = set.contains(pos.add(0, 1, 0)); - boolean ny = set.contains(pos.add(0, -1, 0)); - boolean ppz = set.contains(pos.add(0, 0, 1)); - boolean nz = set.contains(pos.add(0, 0, -1)); + // This looks for the blocks nearby and draws lines between the + // vertexes to make different shaped boxes. + // Most of this was taken from Mellow (Thanks mellow) -Wolf + for(BlockPos pos : blocks) { + boolean px = set.contains(pos.add(1, 0, 0)); + boolean nx = set.contains(pos.add(-1, 0, 0)); + boolean ppy = set.contains(pos.add(0, 1, 0)); + boolean ny = set.contains(pos.add(0, -1, 0)); + boolean ppz = set.contains(pos.add(0, 0, 1)); + boolean nz = set.contains(pos.add(0, 0, -1)); double minX = pos.getX() - dX; double maxX = pos.getX() + 1 - dX; @@ -701,44 +706,155 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl double minZ = pos.getZ() - dZ; double maxZ = pos.getZ() + 1 - dZ; - if(!ppy) { - if(!nx) { tess.addVertex(minX, maxY, minZ); tess.addVertex(minX, maxY, maxZ); } - if(!ppz) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(maxX, maxY, maxZ); } - if(!px) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, maxY, minZ); } - if(!nz) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(minX, maxY, minZ); } - } - if(!ny) { - if(!nx) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, minY, maxZ); } - if(!ppz) { tess.addVertex(minX, minY, maxZ); tess.addVertex(maxX, minY, maxZ); } - if(!px) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(maxX, minY, minZ); } - if(!nz) { tess.addVertex(maxX, minY, minZ); tess.addVertex(minX, minY, minZ); } - } - if(!nz) { - if(!nx) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, maxY, minZ); } - if(!ppy) { tess.addVertex(minX, maxY, minZ); tess.addVertex(maxX, maxY, minZ); } - if(!px) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(maxX, minY, minZ); } - if(!ny) { tess.addVertex(maxX, minY, minZ); tess.addVertex(minX, minY, minZ); } - } - if(!ppz) { - if(!nx) { tess.addVertex(minX, minY, maxZ); tess.addVertex(minX, maxY, maxZ); } - if(!ppy) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(maxX, maxY, maxZ); } - if(!px) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, minY, maxZ); } - if(!ny) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(minX, minY, maxZ); } - } - if(!nx) { - if(!nz) { tess.addVertex(minX, minY, minZ); tess.addVertex(minX, maxY, minZ); } - if(!ppy) { tess.addVertex(minX, maxY, minZ); tess.addVertex(minX, maxY, maxZ); } - if(!ppz) { tess.addVertex(minX, maxY, maxZ); tess.addVertex(minX, minY, maxZ); } - if(!ny) { tess.addVertex(minX, minY, maxZ); tess.addVertex(minX, minY, minZ); } - } - if(!px) { - if(!nz) { tess.addVertex(maxX, minY, minZ); tess.addVertex(maxX, maxY, minZ); } - if(!ppy) { tess.addVertex(maxX, maxY, minZ); tess.addVertex(maxX, maxY, maxZ); } - if(!ppz) { tess.addVertex(maxX, maxY, maxZ); tess.addVertex(maxX, minY, maxZ); } - if(!ny) { tess.addVertex(maxX, minY, maxZ); tess.addVertex(maxX, minY, minZ); } - } - } - + if(!ppy) { + if(!nx) { + tess.addVertex(minX, maxY, minZ); + tess.addVertex(minX, maxY, maxZ); + } + if(!ppz) { + tess.addVertex(minX, maxY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + } + if(!px) { + tess.addVertex(maxX, maxY, maxZ); + tess.addVertex(maxX, maxY, minZ); + } + if(!nz) { + tess.addVertex(maxX, maxY, minZ); + tess.addVertex(minX, maxY, minZ); + } + } + if(!ny) { + if(!nx) { + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, minY, maxZ); + } + if(!ppz) { + tess.addVertex(minX, minY, maxZ); + tess.addVertex(maxX, minY, maxZ); + } + if(!px) { + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, minY, minZ); + } + if(!nz) { + tess.addVertex(maxX, minY, minZ); + tess.addVertex(minX, minY, minZ); + } + } + if(!nz) { + if(!nx) { + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, maxY, minZ); + } + if(!ppy) { + tess.addVertex(minX, maxY, minZ); + tess.addVertex(maxX, maxY, minZ); + } + if(!px) { + tess.addVertex(maxX, maxY, minZ); + tess.addVertex(maxX, minY, minZ); + } + if(!ny) { + tess.addVertex(maxX, minY, minZ); + tess.addVertex(minX, minY, minZ); + } + } + if(!ppz) { + if(!nx) { + tess.addVertex(minX, minY, maxZ); + tess.addVertex(minX, maxY, maxZ); + } + if(!ppy) { + tess.addVertex(minX, maxY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + } + if(!px) { + tess.addVertex(maxX, maxY, maxZ); + tess.addVertex(maxX, minY, maxZ); + } + if(!ny) { + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(minX, minY, maxZ); + } + } + if(!nx) { + if(!nz) { + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, maxY, minZ); + } + if(!ppy) { + tess.addVertex(minX, maxY, minZ); + tess.addVertex(minX, maxY, maxZ); + } + if(!ppz) { + tess.addVertex(minX, maxY, maxZ); + tess.addVertex(minX, minY, maxZ); + } + if(!ny) { + tess.addVertex(minX, minY, maxZ); + tess.addVertex(minX, minY, minZ); + } + } + if(!px) { + if(!nz) { + tess.addVertex(maxX, minY, minZ); + tess.addVertex(maxX, maxY, minZ); + } + if(!ppy) { + tess.addVertex(maxX, maxY, minZ); + tess.addVertex(maxX, maxY, maxZ); + } + if(!ppz) { + tess.addVertex(maxX, maxY, maxZ); + tess.addVertex(maxX, minY, maxZ); + } + if(!ny) { + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, minY, minZ); + } + } + } + + tess.setColorRGBA(0, 0, 255, 255); + + // boo-yeah + for(double[] extra : this.getAABBExtras()) { + ForgeDirection rot = facing.getRotation(ForgeDirection.UP); + double cX = MathHelper.floor_double(originX) - dX + 0.5; + double cY = MathHelper.floor_double(originY) - dY; + double cZ = MathHelper.floor_double(originZ) - dZ + 0.5; + + double upr = extra[0]; + double lwr = extra[1]; + double fwd = extra[2]; + double bwd = extra[3]; + double lft = extra[4]; + double rgt = extra[5]; + + double x0 = cX + fwd * facing.offsetX + lft * rot.offsetX; + double x1 = cX + bwd * facing.offsetX + rgt * rot.offsetX; + double y0 = cY + lwr; + double y1 = cY + upr; + double z0 = cZ + fwd * facing.offsetZ + lft * rot.offsetZ; + double z1 = cZ + bwd * facing.offsetZ + rgt * rot.offsetZ; + + tess.addVertex(x0, y0, z0); tess.addVertex(x0, y0, z1); + tess.addVertex(x1, y0, z0); tess.addVertex(x1, y0, z1); + tess.addVertex(x0, y0, z0); tess.addVertex(x1, y0, z0); + tess.addVertex(x0, y0, z1); tess.addVertex(x1, y0, z1); + + tess.addVertex(x0, y1, z0); tess.addVertex(x0, y1, z1); + tess.addVertex(x1, y1, z0); tess.addVertex(x1, y1, z1); + tess.addVertex(x0, y1, z0); tess.addVertex(x1, y1, z0); + tess.addVertex(x0, y1, z1); tess.addVertex(x1, y1, z1); + + tess.addVertex(x0, y0, z0); tess.addVertex(x0, y1, z0); + tess.addVertex(x1, y0, z0); tess.addVertex(x1, y1, z0); + tess.addVertex(x0, y0, z1); tess.addVertex(x0, y1, z1); + tess.addVertex(x1, y0, z1); tess.addVertex(x1, y1, z1); + } + tess.draw(); tess.setTranslation(0, 0, 0); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java index 7e61a254d..38426d68a 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java @@ -44,6 +44,13 @@ public class MachineFusionBoiler extends BlockDummyable implements ILookOverlay, return 4; } + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -4.5, -4.5, 1, -1} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBreeder.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBreeder.java index d86c1f6bd..e16e9a468 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBreeder.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBreeder.java @@ -36,6 +36,13 @@ public class MachineFusionBreeder extends BlockDummyable implements ITooltipProv public int getOffset() { return 2; } + + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -2.5, -2.5, 1, -1} + }; + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java index 2c7b92ebc..f8ff9fe50 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java @@ -35,6 +35,13 @@ public class MachineFusionCollector extends BlockDummyable implements ITooltipPr return 1; } + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -2.5, -2.5, 1, -1} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCoupler.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCoupler.java index e9ddafbe1..fcfa2b5b4 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCoupler.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCoupler.java @@ -34,6 +34,14 @@ public class MachineFusionCoupler extends BlockDummyable implements ITooltipProv return 0; } + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, 1, -1, 1.5, 1.5}, + {1.5, 3.5, 1, -1, -1.5, -1.5} + }; + } + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { addStandardInfo(stack, player, list, ext); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java index db8df5641..b186de59a 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java @@ -42,6 +42,14 @@ public class MachineFusionKlystron extends BlockDummyable implements ITooltipPro new int[] { 4, -3, 4, 3, 1, 1 }, }; } + + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -4.5, -4.5, 1, -1} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java index 198f49f88..28cba05a4 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java @@ -35,6 +35,14 @@ public class MachineFusionKlystronCreative extends BlockDummyable implements ITo new int[] { 4, -3, 4, 3, 1, 1 }, }; } + + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -4.5, -4.5, 1, -1} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java index 64dd13fec..952abfb17 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionMHDT.java @@ -44,6 +44,7 @@ public class MachineFusionMHDT extends BlockDummyable implements ILookOverlay, I public int getOffset() { return 7; } + @Override public int[][] getAllDimensions() { return new int[][] { @@ -55,6 +56,14 @@ public class MachineFusionMHDT extends BlockDummyable implements ILookOverlay, I new int[] { 1, 0, 0, 1, 3, 3, 3, 0, 0 }, }; } + + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, -6.5, -6.5, 1, -1} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java index 7f06b7840..aa365a6f4 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionPlasmaForge.java @@ -47,6 +47,14 @@ public class MachineFusionPlasmaForge extends BlockDummyable { }; } + @Override + public double[][] getAABBExtras() { + return new double[][] { + {1.5, 3.5, 1, -1, 5.5, 5.5}, + {1.5, 3.5, 1, -1, -5.5, -5.5} + }; + } + @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { return super.checkRequirement(world, x, y, z, dir, o) && diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java index 578e23738..d557e8886 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java @@ -97,6 +97,27 @@ public class MachineFusionTorus extends BlockDummyable implements ITooltipProvid public int getOffset() { return 7; } + + @Override + public int[][] getAllDimensions() { + return new int[][] { + new int[] { 4, 0, 7, 7, 3, 3 }, + new int[] { 4, 0, 6, 6, 4, 4 }, + new int[] { 4, 0, 5, 5, 5, 5 }, + new int[] { 4, 0, 4, 4, 6, 6 }, + new int[] { 4, 0, 3, 3, 7, 7 }, + }; + } + + @Override + public double[][] getAABBExtras() { + return new double[][] { + {3.5, 1.5, 7.5, 7.5, 1, -1}, + {3.5, 1.5, -7.5, -7.5, 1, -1}, + {3.5, 1.5, 1, -1, 7.5, 7.5}, + {3.5, 1.5, 1, -1, -7.5, -7.5}, + }; + } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { diff --git a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java index 80ed65dc5..7f054d8c7 100644 --- a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java +++ b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java @@ -128,11 +128,8 @@ public class MultiblockHandlerXR { public static int[] rotate(int[] dim, ForgeDirection dir) { - if(dim == null) - return null; - - if(dir == ForgeDirection.SOUTH) - return dim; + if(dim == null) return null; + if(dir == ForgeDirection.SOUTH) return dim; if(dir == ForgeDirection.NORTH) { // U D N S W E @@ -151,5 +148,27 @@ public class MultiblockHandlerXR { return dim; } - + + public static double[] rotateDouble(double[] dim, ForgeDirection dir) { + + if(dim == null) return null; + if(dir == ForgeDirection.SOUTH) return dim; + + if(dir == ForgeDirection.NORTH) { + // U D N S W E + return new double[] { dim[0], dim[1], dim[3], dim[2], dim[5], dim[4] }; + } + + if(dir == ForgeDirection.EAST) { + // U D N S W E + return new double[] { dim[0], dim[1], dim[5], dim[4], dim[2], dim[3] }; + } + + if(dir == ForgeDirection.WEST) { + // U D N S W E + return new double[] { dim[0], dim[1], dim[4], dim[5], dim[3], dim[2] }; + } + + return dim; + } } From 3709ac1818b9324dc7365bef875a2fed184995f9 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 23 Jul 2026 13:01:19 +0200 Subject: [PATCH 33/50] squirintg with precision and elegance and prelegance and elegision --- src/main/java/com/hbm/blocks/BlockDummyable.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 1dacf9c01..5597cf783 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -5,6 +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.util.Clock; import com.hbm.util.EntityDamageUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.world.gen.nbt.INBTBlockTransformable; @@ -647,11 +648,15 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl GL11.glDepthMask(false); tess.startDrawing(GL11.GL_LINES); tess.setBrightness(240); + + double timer = (Clock.get_ms() % (1000D * Math.PI)) / 250D; + double sine = Math.sin(timer); + int color = (int) (255 * (sine * 0.25 + 0.75)); if(canPlace) { - tess.setColorRGBA(0, 255, 0, 255); + tess.setColorRGBA(0, color, 0, 255); } else { - tess.setColorRGBA(255, 0, 0, 255); + tess.setColorRGBA(color, 0, 0, 255); } // Gets the list of different dimensions that each XLmultiblock has, @@ -816,7 +821,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } } - tess.setColorRGBA(0, 0, 255, 255); + tess.setColorRGBA(0, 0, color, 255); // boo-yeah for(double[] extra : this.getAABBExtras()) { From 11668d2412e2783bd39fab95061825b5ac42a875 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 23 Jul 2026 18:41:12 +0200 Subject: [PATCH 34/50] straight up piling it and by it i mean, hehe, my peanits --- .../blocks/machine/albion/BlockPASource.java | 4 +- .../hbm/blocks/machine/pile/BlockPile.java | 35 +++-- .../blocks/machine/pile/BlockPileBrick.java | 8 +- .../blocks/machine/pile/BlockPileDevice.java | 12 +- .../com/hbm/items/machine/ItemPileRodMK2.java | 25 +++- .../java/com/hbm/main/CraftingManager.java | 5 +- .../machine/albion/TileEntityPASource.java | 1 - .../machine/pile/TileEntityPileCore.java | 121 ++++++++++++------ .../machine/pile/TileEntityPileLoader.java | 71 +++++++++- .../com/hbm/world/gen/NTMWorldGenerator.java | 2 +- .../hbm/world/gen/util/LogicBlockActions.java | 31 ++--- 11 files changed, 227 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java index e383f4e49..4c6e24608 100644 --- a/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java +++ b/src/main/java/com/hbm/blocks/machine/albion/BlockPASource.java @@ -9,7 +9,6 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.albion.TileEntityPASource; -import com.hbm.util.fauxpointtwelve.DirPos; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -53,7 +52,8 @@ public class BlockPASource extends BlockDummyable implements ITooltipProvider { this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ); this.makeExtra(world, x - dir.offsetX + rot.offsetX * 2, y, z - dir.offsetZ + rot.offsetZ * 2); this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y, z - dir.offsetZ - rot.offsetZ * 2); - this.makeExtra(world, x,y - 1, z); + + this.makeExtra(world, x, y - 1, z); this.makeExtra(world, x + rot.offsetX * 2, y - 1, z + rot.offsetZ * 2); this.makeExtra(world, x - rot.offsetX * 2, y - 1, z - rot.offsetZ * 2); } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java index c205ef53d..51d620a2f 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java @@ -98,19 +98,21 @@ public class BlockPile extends BlockContainer implements IBlockCT, IToolable, IL @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityPileBaseMK2) { - TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; - world.removeTileEntity(x, y, z); - if(pile.coreY >= 0) world.setBlock(x, y, z, ModBlocks.pile_brick); + if(!TileEntityPileCore.meltingDown) { + TileEntity tile = world.getTileEntity(x, y, z); - TileEntityPileCore core = pile.getCore(); - if(core != null && !core.isInvalid()) core.destroy(); - - } else { - world.removeTileEntity(x, y, z); - world.setBlock(x, y, z, ModBlocks.pile_brick); + if(tile instanceof TileEntityPileBaseMK2) { + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; + world.removeTileEntity(x, y, z); + if(pile.coreY >= 0) world.setBlock(x, y, z, ModBlocks.pile_brick); + + TileEntityPileCore core = pile.getCore(); + if(core != null && !core.isInvalid()) core.destroy(); + + } else { + world.removeTileEntity(x, y, z); + world.setBlock(x, y, z, ModBlocks.pile_brick); + } } super.breakBlock(world, x, y, z, block, meta); } @@ -151,6 +153,15 @@ public class BlockPile extends BlockContainer implements IBlockCT, IToolable, IL if(meta == META_AIR_IN) text.add("Air Inlet"); if(meta == META_AIR_OUT) text.add("Air Outlet"); if(meta == META_CONTROL) text.add("Control Rod Channel"); + + if(meta == META_CORE) { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityPileCore) { + TileEntityPileCore core = (TileEntityPileCore) tile; + text.add("Max Temp: " + (int) Math.round(core.highestHeat) + " / " + core.MAX_HEAT + "°C"); + } + } + if(!text.isEmpty()) ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java index 955b8ac53..7a3d77f88 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine.pile; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockFlammable; import com.hbm.blocks.machine.MachinePWRController; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.pile.TileEntityPileBaseMK2; @@ -10,7 +11,6 @@ import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileOrientation; import api.hbm.block.IToolable; 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.entity.player.EntityPlayer; @@ -18,13 +18,13 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockPileBrick extends Block implements IToolable { +public class BlockPileBrick extends BlockFlammable implements IToolable { @SideOnly(Side.CLIENT) protected IIcon iconTop; @SideOnly(Side.CLIENT) protected IIcon iconSide; public BlockPileBrick() { - super(Material.rock); + super(Material.rock, 30, 5); } @Override @@ -127,7 +127,7 @@ public class BlockPileBrick extends Block implements IToolable { world.setBlock(iX, iY, iZ, ModBlocks.pile_block, BlockPile.META_CORE, 3); TileEntityPileCore core = (TileEntityPileCore) world.getTileEntity(iX, iY, iZ); core.orientation = PileOrientation.getOrientation(dir); - core.setupSize(posHeight + negHeight + 1, left, right, depth + 1); + core.setupSize(posHeight, negHeight, left, right, depth + 1); } else { int edgeCount = 0; if(h == -negHeight || h == posHeight) edgeCount++; diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java index 443523846..c0fc2adc5 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java @@ -9,7 +9,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.main.NTMSounds; import com.hbm.tileentity.machine.pile.TileEntityPileControl; -import com.hbm.tileentity.machine.pile.TileEntityPileDeviceBase; +import com.hbm.tileentity.machine.pile.TileEntityPileCore; import com.hbm.tileentity.machine.pile.TileEntityPileLoader; import com.hbm.tileentity.machine.pile.TileEntityPileVent; import com.hbm.util.i18n.I18nUtil; @@ -157,14 +157,20 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILoo List text = new ArrayList(); TileEntity tile = world.getTileEntity(x, y, z); - if(tile instanceof TileEntityPileDeviceBase) { + /*if(tile instanceof TileEntityPileDeviceBase) { TileEntityPileDeviceBase device = (TileEntityPileDeviceBase) tile; text.add("#" + (device.chanNum + 1)); - } + }*/ if(tile instanceof TileEntityPileLoader) { TileEntityPileLoader device = (TileEntityPileLoader) tile; + text.add("Temp: " + (int) Math.round(device.channelTemp) + " / " + TileEntityPileCore.MAX_HEAT + "°C"); if(device.syncStack != null) text.add("Loading: " + device.syncStack.getDisplayName()); + + if(device.channelStack != null) { + text.add("Last rod: " + device.channelStack.getDisplayName()); + if(device.channelDepletion > 0) text.add("Depletion: " + (int) Math.round(device.channelDepletion) + "%"); + } } if(tile instanceof TileEntityPileControl) { diff --git a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java index cc9273223..a1db4e42f 100644 --- a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java +++ b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java @@ -37,11 +37,11 @@ public class ItemPileRodMK2 extends ItemEnumMulti { public static enum EnumPileRod { /* 0 */ RA226BE(1D), /* 1 */ PO210BE(1D), - /* 2 */ ZR( 0D, 0D, 0D, 2), - /* 3 */ NU( 1D, 1_000D, 1D, 4), - /* 4 */ PU239( 1D, 1_000D, 1D, 5), - /* 5 */ RGP( 1D, 1_000D, 1D, 6), - /* 6 */ WASTE( 1D, 0D, 1D, 6); + /* 2 */ ZR( 0D, 0D, 0D, 2), + /* 3 */ NU( 1D, 25_000D, 0.25D, 4), + /* 4 */ PU239( 1D, 500D, 0.5D, 5), + /* 5 */ RGP( 1D, 1_000D, 0.5D, 6), + /* 6 */ WASTE( 1D, 0D, 1.5D, 6); public double reactionMult = 1.0D; public double life = 1_000D; @@ -66,6 +66,13 @@ public class ItemPileRodMK2 extends ItemEnumMulti { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + + if(rod.life > 0) { + list.add("Lifetime: " + (int) Math.round(rod.life)); + double depletion = getDepletionPercent(stack); + if(depletion > 0) list.add("Depletion: " + (int) Math.round(depletion) + "%"); + } for(String loc : I18nUtil.autoBreak(Minecraft.getMinecraft().fontRenderer, I18nUtil.resolveKey(this.getUnlocalizedName(stack) + ".desc"), 225)) { list.add(EnumChatFormatting.YELLOW + loc); @@ -85,6 +92,14 @@ public class ItemPileRodMK2 extends ItemEnumMulti { return getDepletion(stack) / life; } + public static double getDepletionPercent(ItemStack stack) { + if(stack == null) return 0D; + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + double life = rod.life; + if(life <= 0) return 0D; + return (getDepletion(stack) / life) * 100; + } + public static double getDepletion(ItemStack stack) { if(!stack.hasTagCompound()) return 0D; return stack.stackTagCompound.getDouble(KEY_NBT_DEPLETION); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 9f25e38bc..1055ef5c5 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -134,7 +134,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.gas_empty, 2), new Object[] { "S ", "AA", "AA", 'A', STEEL.plate(), 'S', CU.plate() }); addShapelessAuto(new ItemStack(ModBlocks.block_waste_painted, 1), new Object[] { KEY_YELLOW, ModBlocks.block_waste }); - addRecipeAuto(new ItemStack(ModItems.ingot_aluminium, 1), new Object[] { "###", "###", "###", '#', AL.wireFine() }); addRecipeAuto(new ItemStack(ModItems.ingot_copper, 1), new Object[] { "###", "###", "###", '#', CU.wireFine() }); addRecipeAuto(new ItemStack(ModItems.ingot_tungsten, 1), new Object[] { "###", "###", "###", '#', W.wireFine() }); @@ -312,6 +311,10 @@ public class CraftingManager { addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.DESH), new Object[] { "C", "T", "C", 'C', DESH.ingot(), 'T', W.ingot() }); addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.SATURNITE), new Object[] { "C", "T", "C", 'C', BIGMT.ingot(), 'T', NB.ingot() }); + addRecipeAuto(new ItemStack(ModBlocks.pile_device, 1, 0), new Object[] { " A ", "CBS", 'A', AL.plate(), 'C', STEEL.plateCast(), 'B', B.ingot(), 'S', STEEL.shell() }); + addRecipeAuto(new ItemStack(ModBlocks.pile_device, 1, 1), new Object[] { " M ", "ACA", " S ", 'M', ModItems.motor, 'A', AL.plate(), 'C', CU.shell(), 'S', STEEL.plateCast() }); + addRecipeAuto(new ItemStack(ModBlocks.pile_device, 1, 2), new Object[] { " B ", "SBS", "SBS", 'B', B.ingot(), 'S', STEEL.plate() }); + 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) }); addShapelessAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { ModItems.rangefinder, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), RUBBER.ingot(), GOLD.wireDense() }); 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 825169a17..e27e7649a 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -14,7 +14,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.redstoneoverradio.IRORValueProvider; -import api.hbm.redstoneoverradio.IRORInteractive; 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/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index d8981f5ca..ae06015f2 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -9,20 +9,17 @@ import com.hbm.blocks.machine.MachinePWRController; import com.hbm.blocks.machine.pile.BlockPile; import com.hbm.interfaces.NotableComments; import com.hbm.items.machine.ItemPileRodMK2; -import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.main.NTMSounds; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.util.EnumUtil; -import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.item.EntityItem; 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.nbt.NBTTagList; @@ -65,11 +62,16 @@ public class TileEntityPileCore extends TileEntityTickingBase { public int left; public int right; + public int up; /** * Segments are fuel and control channels grouped by vertical slices viewed from the front, this makes the simulation part easier. */ public PileSegment[] segments = new PileSegment[0]; + public double highestHeat; + public static final int MAX_HEAT = 800; + public static boolean meltingDown = false; + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -78,16 +80,19 @@ public class TileEntityPileCore extends TileEntityTickingBase { depth = nbt.getInteger("depth"); left = nbt.getInteger("left"); right = nbt.getInteger("right"); + up = nbt.getInteger("up"); + + orientation = EnumUtil.grabEnumSafely(PileOrientation.class, nbt.getInteger("orientation")); segments = new PileSegment[width]; - - int fuelCount = nbt.getByte("fc"); - int ventCount = nbt.getByte("vc"); - int contCount = nbt.getByte("cc"); fuelChannels.clear(); ventilationChannels.clear(); controlChannels.clear(); + + int fuelCount = nbt.getByte("fc"); + int ventCount = nbt.getByte("vc"); + int contCount = nbt.getByte("cc"); for(int i = 0; i < fuelCount; i++) fuelChannels.add(readChannelFromNBT(nbt, "f" + i)); for(int i = 0; i < ventCount; i++) ventilationChannels.add(readChannelFromNBT(nbt, "v" + i)); @@ -104,6 +109,9 @@ public class TileEntityPileCore extends TileEntityTickingBase { nbt.setInteger("depth", depth); nbt.setInteger("left", left); nbt.setInteger("right", right); + nbt.setInteger("up", up); + + nbt.setInteger("orientation", orientation.ordinal()); int fuelCount = fuelChannels.size(); int ventCount = ventilationChannels.size(); @@ -135,12 +143,13 @@ public class TileEntityPileCore extends TileEntityTickingBase { return list.indexOf(chan); // more reliable when channels change and not that big of a deal because we have lists in single digit length } - public TileEntityPileCore setupSize(int h, int l, int r, int d) { - this.height = h; + public TileEntityPileCore setupSize(int up, int down, int l, int r, int d) { + this.height = up + 1 + down; this.width = l + 1 + r; this.depth = d; this.left = l; this.right = r; + this.up = up; this.segments = new PileSegment[width]; return this; } @@ -228,8 +237,23 @@ public class TileEntityPileCore extends TileEntityTickingBase { this.runSimulation(); this.handleVentilation(); + this.handleMeltdown(); + + this.networkPackNT(25); } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.highestHeat); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.highestHeat = buf.readDouble(); + } protected void runSimulation() { @@ -237,7 +261,6 @@ public class TileEntityPileCore extends TileEntityTickingBase { for(PileChannel chan : this.fuelChannels) { if(chan.length <= 0) continue; double producedNeutrons = 0; - double latestDepletion = 0D; for(int i = 0; i < chan.rods.length; i++) { ItemStack stack = chan.rods[i]; @@ -246,25 +269,10 @@ public class TileEntityPileCore extends TileEntityTickingBase { producedNeutrons += neut; chan.heat += neut * ItemPileRodMK2.getHeatPerNeutron(stack); chan.rods[i] = ItemPileRodMK2.react(stack, neut); - EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); - double life = rod.life < 1 ? 1 : rod.life; - latestDepletion = ItemPileRodMK2.getDepletion(chan.rods[i]) / life; } } chan.outgoingNeutrons = producedNeutrons; chan.incomingNeutrons = 0; - - /// DEBUG /// - int hash = BlockPos.getIdentity(xCoord, yCoord, zCoord); - - for(Object o : worldObj.playerEntities) { - if(o instanceof EntityPlayerMP) { - EntityPlayerMP player = (EntityPlayerMP) o; - int index = this.getFuelChannelNum(chan); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("#" + index + " " + Math.round(chan.heat) + "TU " + Math.round(chan.outgoingNeutrons) + "n " + Math.round(latestDepletion * 100) + "%", hash + index), player); - } - } - /// DEBUG /// } // intra-segment propagation @@ -313,7 +321,7 @@ public class TileEntityPileCore extends TileEntityTickingBase { for(PileChannel fuel : this.fuelChannels) { if(Math.abs(fuel.entry.getY() - chan.entry.getY()) <= 1) { - fuel.heat *= (1D - airCap * 0.5D); // channel can hold up to 1000mB, turning into a 0.5 heat mult for connected fuel channels + fuel.heat *= (1D - airCap * 0.05D); // channel can hold up to 1000mB, turning into a 0.95 heat mult for connected fuel channels } } @@ -338,6 +346,34 @@ public class TileEntityPileCore extends TileEntityTickingBase { data.setInteger("color", 0xa0a0a0); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); } + + for(PileChannel chan : this.fuelChannels) { + chan.heat *= 0.999; + if(chan.heat < 20) chan.heat = 20; + } + } + + protected void handleMeltdown() { + + this.highestHeat = 0; + for(PileChannel chan : this.fuelChannels) { + if(chan.heat > this.highestHeat) this.highestHeat = chan.heat; + } + + if(this.highestHeat > this.MAX_HEAT) { + this.destroy(); + double avgX = 0; + double avgZ = 0; + for(PileChannel chan : this.fuelChannels) { + avgX += chan.entry.getX() + 0.5 + chan.entry.getDir().offsetX * (chan.length - 1) / 2D; + avgZ += chan.entry.getZ() + 0.5 + chan.entry.getDir().offsetZ * (chan.length - 1) / 2D; + } + avgX /= this.fuelChannels.size(); + avgZ /= this.fuelChannels.size(); + meltingDown = true; + worldObj.newExplosion(null, avgX, yCoord + up, avgZ, 15F, true, true); + meltingDown= false; + } } protected void recalculateSegments() { @@ -440,29 +476,29 @@ public class TileEntityPileCore extends TileEntityTickingBase { nbt.setInteger(name + "_y", entry.getY()); nbt.setInteger(name + "_z", entry.getZ()); nbt.setByte(name + "_d", (byte) entry.getDir().ordinal()); - + if(type == type.FUEL) { NBTTagList list = new NBTTagList(); for(int i = 0; i < rods.length; i++) { if(rods[i] != null) { NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setByte("slot", (byte)i); + nbt1.setByte("slot", (byte) i); rods[i].writeToNBT(nbt1); list.appendTag(nbt1); } } - nbt.setTag("items", list); + nbt.setTag(name + "items", list); - nbt.setDouble("heat", heat); - nbt.setDouble("neutrons", incomingNeutrons); + nbt.setDouble(name + "heat", heat); + nbt.setDouble(name + "neutrons", incomingNeutrons); } if(type == type.VENTILATION) { - nbt.setInteger("air", air); + nbt.setInteger(name + "air", air); } if(type == type.CONTROL) { - nbt.setDouble("control", control); + nbt.setDouble(name + "control", control); } } @@ -490,6 +526,11 @@ public class TileEntityPileCore extends TileEntityTickingBase { int y = entry.getY(); int z = entry.getZ() + entry.getDir().offsetZ * depth; + if(stack.hasTagCompound() && stack.stackTagCompound.hasKey(ItemPileRodMK2.KEY_NBT_DEPLETION)) { + stack.stackTagCompound.removeTag(ItemPileRodMK2.KEY_NBT_DEPLETION); + if(stack.stackTagCompound.hasNoTags()) stack.stackTagCompound = null; + } + EntityItem item = new EntityItem(worldObj, x + 0.5, y + 0.5, z + 0.5, stack); worldObj.spawnEntityInWorld(item); } @@ -502,9 +543,9 @@ public class TileEntityPileCore extends TileEntityTickingBase { ForgeDirection dir = ForgeDirection.getOrientation(nbt.getByte(name + "_d")); PileChannel chan = new PileChannel(x, y, z, dir); - + if(chan.type == chan.type.FUEL) { - NBTTagList list = nbt.getTagList("items", 10); + NBTTagList list = nbt.getTagList(name + "items", 10); for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); byte b0 = nbt1.getByte("slot"); @@ -513,16 +554,16 @@ public class TileEntityPileCore extends TileEntityTickingBase { } } - chan.heat = nbt.getDouble("heat"); - chan.incomingNeutrons = nbt.getDouble("neutrons"); + chan.heat = nbt.getDouble(name + "heat"); + chan.incomingNeutrons = nbt.getDouble(name + "neutrons"); } if(chan.type == chan.type.VENTILATION) { - chan.air = nbt.getInteger("air"); + chan.air = nbt.getInteger(name + "air"); } if(chan.type == chan.type.CONTROL) { - chan.control = nbt.getDouble("control"); + chan.control = nbt.getDouble(name + "control"); } return chan; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java index 503d7684e..91ea334da 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java @@ -3,10 +3,14 @@ package com.hbm.tileentity.machine.pile; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.pile.BlockPile; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemPileRodMK2; +import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.main.NTMSounds; import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; import com.hbm.util.Compat; +import com.hbm.util.EnumUtil; +import api.hbm.redstoneoverradio.IRORValueProvider; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -15,7 +19,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPileLoader extends TileEntityPileDeviceBase implements ISidedInventory{ +public class TileEntityPileLoader extends TileEntityPileDeviceBase implements ISidedInventory, IRORValueProvider { public double syncLevel; public double level; @@ -30,6 +34,10 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS public ItemStack syncStack; public ItemStack stack; public boolean wasRedstone; + + public ItemStack channelStack; + public double channelDepletion; + public double channelTemp; @Override public void updateEntity() { @@ -38,6 +46,9 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS ForgeDirection dir = getOrientation(); PileChannel fuelChan = null; + this.channelStack = null; + this.channelDepletion = 0D; + this.channelTemp = 0D; int x = xCoord - dir.offsetX; int y = yCoord; @@ -55,6 +66,9 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS if(fuelChan != null) { this.chanNum = core.getFuelChannelNum(fuelChan); + this.channelStack = fuelChan.rods[fuelChan.rods.length - 1]; + this.channelDepletion = ItemPileRodMK2.getDepletionPercent(channelStack); + this.channelTemp = fuelChan.heat; } } } @@ -114,12 +128,23 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS public void serialize(ByteBuf buf) { super.serialize(buf); buf.writeDouble(this.level); + if(this.stack != null) { buf.writeInt(Item.getIdFromItem(this.stack.getItem())); buf.writeShort(this.stack.getItemDamage()); } else { buf.writeInt(-1); } + + if(this.channelStack != null) { + buf.writeInt(Item.getIdFromItem(this.channelStack.getItem())); + buf.writeShort(this.channelStack.getItemDamage()); + } else { + buf.writeInt(-1); + } + + buf.writeDouble(this.channelDepletion); + buf.writeDouble(this.channelTemp); } @Override @@ -127,9 +152,17 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS super.deserialize(buf); double lastSync = this.syncLevel; this.syncLevel = buf.readDouble(); + int itemId = buf.readInt(); if(itemId != -1) this.syncStack = new ItemStack(Item.getItemById(itemId), 1, buf.readShort()); else this.syncStack = null; + + int chanId = buf.readInt(); + if(chanId != -1) this.channelStack = new ItemStack(Item.getItemById(chanId), 1, buf.readShort()); + else this.channelStack = null; + + this.channelDepletion = buf.readDouble(); + this.channelTemp = buf.readDouble(); if(this.syncLevel != lastSync) this.turnProgress = 2; } @@ -169,4 +202,40 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return isItemLoadable(stack); } @Override public boolean canInsertItem(int slot, ItemStack stack, int side) { return isItemLoadable(stack); } @Override public boolean canExtractItem(int slot, ItemStack stack, int side) { return false; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "meta", + PREFIX_VALUE + "depletion", + PREFIX_VALUE + "deppercent", + PREFIX_VALUE + "lifetime", + PREFIX_VALUE + "temp", + }; + } + + @Override + public String provideRORValue(String name) { + + if(name.equals(PREFIX_VALUE + "meta")) { + return this.channelStack == null ? "-1" : this.channelStack.getItemDamage() + ""; + } + if(name.equals(PREFIX_VALUE + "deppercent")) { + return "" + (int) Math.round(this.channelDepletion); + } + if(name.equals(PREFIX_VALUE + "depletion")) { + if(this.channelStack == null) return "0"; + return "" + (int) Math.round(ItemPileRodMK2.getDepletionPercent(this.channelStack)); + } + if(name.equals(PREFIX_VALUE + "lifetime")) { + if(this.channelStack == null) return "0"; + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, this.channelStack.getItemDamage()); + return "" + (int) Math.round(rod.life); + } + if(name.equals(PREFIX_VALUE + "meta")) { + return "" + (int) Math.round(this.channelTemp); + } + + return null; + } } diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 529d449b3..c0be7e888 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -242,7 +242,7 @@ public class NTMWorldGenerator implements IWorldGenerator { spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("tower_base") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("tower_base", StructureManager.tower_base, -6); spawnWeight = StructureConfig.towerBaseSpawnWeight; }}); 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 1ef0b73d4..59380d70d 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -495,26 +495,21 @@ public class LogicBlockActions { if(tile.phase == 1) { world.setBlock(x, y, z, ModBlocks.skeleton_holder); TileEntity te = world.getTileEntity(x, y, z); - EntityPlayer player = (EntityPlayer) world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).get(0); - if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + if(te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; - int roll = world.rand.nextInt(100); + int roll = world.rand.nextInt(100); - if (roll < 44) { - skeleton.item = new ItemStack(ModItems.ammo_standard, 3, 91); - - } else if (roll < 71) { - skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 92); - - } else if (roll < 92) { - skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 73); - - } else if (roll < 96) { - skeleton.item = new ItemStack(ModItems.item_secret, 1, 3); - - } else { - skeleton.item = new ItemStack(ModItems.item_secret, 1, 4); + if(roll < 44) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 3, 91); + } else if(roll < 71) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 92); + } else if(roll < 92) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 73); + } else if(roll < 96) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 3); + } else { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 4); } } } @@ -539,7 +534,7 @@ public class LogicBlockActions { actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); - actions.put("DEAD_GUY_TOWER_BASE", DEAD_GUY_TOWER_BASE); + //actions.put("DEAD_GUY_TOWER_BASE", DEAD_GUY_TOWER_BASE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); From f42775cfcff2b11aa33b3cd4fc6a10fab7ad55c6 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Thu, 23 Jul 2026 22:45:00 +0200 Subject: [PATCH 35/50] flaming debris --- changelog | 1 + src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../blocks/generic/BlockForgottenBrick.java | 80 ++++++++++++++++++ .../sedna/factory/GunFactoryClient.java | 3 + .../weapon/sedna/factory/LegoClient.java | 9 ++ .../entity/projectile/RenderRBMKDebris.java | 12 +-- .../machine/pile/TileEntityPileCore.java | 29 +++++++ .../assets/hbm/textures/blocks/nr_planks.png | Bin 0 -> 839 bytes .../assets/hbm/textures/blocks/vacuum.png | Bin 134 -> 0 bytes .../assets/hbm/textures/blocks/vent.png | Bin 547 -> 0 bytes .../assets/hbm/textures/blocks/vent_side.png | Bin 607 -> 0 bytes 11 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/nr_planks.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/vacuum.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/vent.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/vent_side.png diff --git a/changelog b/changelog index 7ec181e52..158b030c1 100644 --- a/changelog +++ b/changelog @@ -12,6 +12,7 @@ * Chicago pile control rods can either be fully withdrawn with redstone or fine tuned with RoR * Additionally, channels can be drilled by right clicking a pile addon device with the hand drill, the addon doesn't need to be removed beforehand * This is mainly for convenience when disassembling and reassembling the reactor, which requires all channels to be drilled again + * Piles that overheat will explode, throwing flaming graphite everywhere ## Changed * Updated all oil well GUI textures diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 507d6d814..5915da10a 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1510,7 +1510,7 @@ public class ModBlocks { reinforced_ducrete = new BlockNoSpawn(Material.rock).setBlockName("reinforced_ducrete").setCreativeTab(MainRegistry.blockTab).setHardness(20.0F).setResistance(1000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_ducrete"); lightstone = new BlockLightstone(Material.rock, LightstoneType.class, true, true).setBlockName("lightstone").setCreativeTab(MainRegistry.blockTab).setHardness(2F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":lightstone"); - brick_forgotten = new BlockPillar(Material.rock, RefStrings.MODID + ":brick_forgotten_top").setBlockName("brick_forgotten").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten"); + brick_forgotten = new BlockForgottenBrick().setBlockName("brick_forgotten").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten"); brick_forgotten_lock = new BlockForgottenLock(Material.rock, RefStrings.MODID + ":brick_forgotten_top").setBlockName("brick_forgotten_lock").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten_lock"); concrete_slab = new BlockMultiSlab(null, Material.rock, concrete_smooth, concrete, concrete_asbestos, ducrete_smooth, ducrete, asphalt).setBlockName("concrete_slab").setCreativeTab(MainRegistry.blockTab); diff --git a/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java new file mode 100644 index 000000000..6ab602ed0 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java @@ -0,0 +1,80 @@ +package com.hbm.blocks.generic; + +import java.util.List; + +import com.hbm.blocks.BlockMulti; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +public class BlockForgottenBrick extends BlockMulti { + + private IIcon iconTop; + private IIcon iconAlt; + private IIcon iconAltTop; + private IIcon iconStone; + private IIcon iconHole; + private IIcon iconEmpty; + private IIcon iconPlanks; + + public BlockForgottenBrick() { + super(Material.rock); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_top"); + this.iconAlt = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_bw"); + this.iconAltTop = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_bw_top"); + this.iconStone = reg.registerIcon(RefStrings.MODID + ":playground/nullstone_demo_1_wip"); + this.iconHole = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_hole"); + this.iconEmpty = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_hole_empty"); + this.iconPlanks = reg.registerIcon(RefStrings.MODID + ":nr_planks"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + + if(meta == 1) { + if(side == 0 || side == 1) return this.iconAltTop; + return this.iconAlt; + } + if(meta == 2) { + return this.iconStone; + } + if(meta == 3) { + if(side == 0 || side == 1) return this.iconTop; + return this.iconHole; + } + if(meta == 4) { + if(side == 0 || side == 1) return this.iconTop; + return this.iconEmpty; + } + if(meta == 5) { + return this.iconPlanks; + } + + if(side == 0 || side == 1) return this.iconTop; + return this.blockIcon; + } + + @Override public int getSubCount() { return 6; } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < getSubCount(); ++i) { + list.add(new ItemStack(item, 1, i)); + } + } +} 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 208243818..c225a3283 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 @@ -33,6 +33,7 @@ import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.main.ResourceManager; import com.hbm.render.item.weapon.sedna.*; +import com.hbm.tileentity.machine.pile.TileEntityPileCore; import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; import net.minecraftforge.client.MinecraftForgeClient; @@ -250,6 +251,8 @@ public class GunFactoryClient { setRendererBulk(LegoClient.RENDER_FRAGMENTATION, ItemGrenadeFilling.fragmentation, ItemGrenadeFilling.pellets, ItemGrenadeFilling.pellets_heavy); ItemGrenadeFilling.laser.setRendererBeam(LegoClient.RENDER_LASER_RED); + TileEntityPileCore.pile_debris.setRenderer(LegoClient.RENDER_GRAPHITE); + //HUDS ((ItemGunBaseNT) ModItems.gun_debug) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO, LegoClient.HUD_COMPONENT_AMMO_SECOND); 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 bc46023ec..bb28f3dd1 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.entity.projectile.RenderRBMKDebris; import com.hbm.render.item.weapon.sedna.ItemRenderFatMan; import com.hbm.render.tileentity.RenderArcFurnace; import com.hbm.render.util.BeamPronter; @@ -210,6 +211,14 @@ public class LegoClient { GL11.glPopMatrix(); } + public static BiConsumer RENDER_GRAPHITE = (bullet, interp) -> { + GL11.glScalef(2F, 2F, 2F); + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().getTextureManager().bindTexture(RenderRBMKDebris.tex_graphite); + ResourceManager.deb_graphite.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }; + public static BiConsumer RENDER_GRENADE = (bullet, interp) -> { GL11.glScalef(0.25F, 0.25F, 0.25F); GL11.glRotated(90, 0, 0, 1); diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java b/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java index 383b7a77b..d774dffe5 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java @@ -14,12 +14,12 @@ import net.minecraft.util.ResourceLocation; public class RenderRBMKDebris extends Render { //for fallback only - private static final ResourceLocation tex_base = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_side.png"); - private static final ResourceLocation tex_element = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_fuel.png"); - private static final ResourceLocation tex_control = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_control.png"); - private static final ResourceLocation tex_blank = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_side.png"); - private static final ResourceLocation tex_lid = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_cover_top.png"); - private static final ResourceLocation tex_graphite = new ResourceLocation(RefStrings.MODID + ":textures/blocks/block_graphite.png"); + public static final ResourceLocation tex_base = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_side.png"); + public static final ResourceLocation tex_element = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_fuel.png"); + public static final ResourceLocation tex_control = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_control.png"); + public static final ResourceLocation tex_blank = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_side.png"); + public static final ResourceLocation tex_lid = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_cover_top.png"); + public static final ResourceLocation tex_graphite = new ResourceLocation(RefStrings.MODID + ":textures/blocks/block_graphite.png"); @Override public void doRender(Entity entity, double x, double y, double z, float f0, float f1) { diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index ae06015f2..cc4c137fb 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -3,27 +3,35 @@ package com.hbm.tileentity.machine.pile; import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.function.BiConsumer; +import java.util.function.Consumer; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.MachinePWRController; import com.hbm.blocks.machine.pile.BlockPile; +import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.interfaces.NotableComments; import com.hbm.items.machine.ItemPileRodMK2; +import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.main.MainRegistry; import com.hbm.main.NTMSounds; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.particle.helper.FlameCreator; import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; 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.nbt.NBTTagList; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.common.util.ForgeDirection; @NotableComments @@ -373,6 +381,12 @@ public class TileEntityPileCore extends TileEntityTickingBase { meltingDown = true; worldObj.newExplosion(null, avgX, yCoord + up, avgZ, 15F, true, true); meltingDown= false; + + for(int i = 0; i < 15; i++) { + double mY = worldObj.rand.nextDouble() * 0.5 + 1D; + EntityBulletBaseMK4 fragment = new EntityBulletBaseMK4(worldObj, null, pile_debris, 100F, 0.35F, avgX, yCoord + up + 1, avgZ, 0, mY, 0); + worldObj.spawnEntityInWorld(fragment); + } } } @@ -610,4 +624,19 @@ public class TileEntityPileCore extends TileEntityTickingBase { return MathHelper.clamp_double(total / size, 0D, 0.5D); } } + + public static BulletConfig pile_debris; + + public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { + bullet.worldObj.newExplosion(bullet, bullet.posX, bullet.posY, bullet.posZ, 5F, true, false); + bullet.setDead(); + }; + + public static Consumer LAMBDA_FIRE = (bullet) -> { + if(bullet.worldObj.isRemote && MainRegistry.proxy.me().getDistanceToEntity(bullet) < 100) FlameCreator.composeEffectClient(bullet.worldObj, bullet.posX, bullet.posY - 0.125, bullet.posZ, FlameCreator.META_FIRE); + }; + + static { + pile_debris = new BulletConfig().setLife(200).setVel(1F).setGrav(0.1D).setOnUpdate(LAMBDA_FIRE).setOnImpact(LAMBDA_STANDARD_EXPLODE); + } } diff --git a/src/main/resources/assets/hbm/textures/blocks/nr_planks.png b/src/main/resources/assets/hbm/textures/blocks/nr_planks.png new file mode 100644 index 0000000000000000000000000000000000000000..eb891d6d575ca922693f02467bf19567a32f1ca5 GIT binary patch literal 839 zcmV-N1GxN&P)lwNGZ`YjkED3TGKRGx%?(Px9!vR+g$m?owtUKWm)8T&hm1H>2!+YI7lhU^Be$O*NLJS+qS8yiZo48%B9=w zBES56m-ES(`F#GLX^r*%3YKMYczVKWx5vr(8FgLr%ic3S-oAzFx&%SMU}J!GczS|m zS^V_tA8f3wFE$_wVerF`zjObiZ8S|IiXzIgLloFu{gbn z03cu8x=s=&=$?+IX}HS8G)?xNJVq&nloHSLaHPq@&u%atk7>ItlxZ^>Um)(?z1ajo zNUOEL7>&;GJdd(0@%=Vwni543p68LKDYorU*ELmDQB~!lgQ}_s!;o&bOP=Q(938T? zIpo=k=d@buJbL<);kr+!a~)IYwEZ?psl|7W4v%Q0#@>?`?C!h+z}DsvAq0-&FkBzt zE03Zmn8qPVSyD6=$7dt14K|T}$EU7qUVm+qi|GV_p5LLaYp&GLaBzIcdT)i^V1v4@ ziQ^czL*oH+mFUa$pmg6#u7Tp+zL0#8eUXBT(Ilbk@YVGzC{{pXUYWT$h R;SK-*002ovPDHLkV1mR1k=y_P literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/vacuum.png b/src/main/resources/assets/hbm/textures/blocks/vacuum.png deleted file mode 100644 index 3636b9ca4afdb4542ca35b42254cc85709427517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfIEGmC zCWnNC{5kKyn2?x|knrQ*U+Yvh10dK_@v$l8tdNipk55W8FY98q9w`GKo`!TaPEO8E aJPZs4PuRES1#o6otP#b9ebE?8coNppE1xktzIGNbdX)G&~GMM2VCq zNE|7O6Gs#_9g)^(|6pe(1+WA;!6V&bMsv=bbMF}$jYfeNRtVvs(lq7!&pW*LsP`Tb zVLYAi_TmkyimKwh$6AZ35<t;IQaK-leeIpqX`kQEs!BCJ-c`ohD* z!_j{9`+er~ImQSgf&!Ff34pa0fFwzdk{Dw)B?fiQp{m4jjQ5_wU_iUwJ^*A{2Ebym z;A#1U_n!5-!UvD8*K5kMtZfX3!+$n&w{C8308q8C0=3o>MNusc;Oy+|zXVlP0U#n9 zA`zk0YSo8>!2qDP@wfb4zf=_?W>1jkIdL3QRn?0YuCK2*x!CS?CtFo(S;s6i8jY=5 z_6m$KWLZY1)8X>+@)@8g3YyI(d7jrJ_s&BIng*e1>S(idKAukYf8q1(7rYO|jfkQw@LS-H lzz2U|$%s&tB~h#Z`~fDi0hpiaX>$Mo002ovPDHLkV1kbE`?UZ7 diff --git a/src/main/resources/assets/hbm/textures/blocks/vent_side.png b/src/main/resources/assets/hbm/textures/blocks/vent_side.png deleted file mode 100644 index 51f0e451f689a00b65b70d0af134d8f35a96a954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)?9w1Iy(TcXxL$x@TF2_nsKH zMz4Q-XSsYL%iUVw&Ff?C@9&w-X34UMV67#Dup@YQc*raEAqsU{<3xnM?^D8fJfx?N=W~n^L<9%WbsYfKT83fZ{pl%LmeKb;Wm%%CJUl#bb8`cL zF=icNa3KVobL4r>^Fm$bI6psUu~-05RTU>ECk(?tB%-PegGZy{hGC%Vx-^C{1`Wz$ zv3RjmV+>_c0^pp59*nh?EXz_t2!YXP^iLM7wRrCV5RtWzh@=7$VQ+5_5uvK8R9saR z)>`sBPiz=5TY;u&$nzZUJ#}3(o6VR^CIEQvQ|G2>==*-n#YWs2vr%#`*_uwL0E7?{ zNZxz$Jf|p%ja#-3j4{-8&3HWCvCf8twrwfPlBQ|W$u%g%xW2;C(Gj=5fAWfb=JRvQ}gM|XO_z+1R;cg4 Date: Fri, 24 Jul 2026 12:56:55 +0200 Subject: [PATCH 36/50] fixed multiblock preview horizontal offset --- .../java/com/hbm/blocks/BlockDummyable.java | 9 +++++---- .../com/hbm/render/tileentity/RenderLPW2.java | 2 +- .../blocks/brick_forgotten_bw_lock.png | Bin 0 -> 446 bytes .../hbm/textures/models/machines/lpw2.png | Bin 104090 -> 104424 bytes 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_lock.png diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 5597cf783..1cca3e365 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -631,13 +631,14 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl if(i == 2) facing = ForgeDirection.getOrientation(3); if(i == 3) facing = ForgeDirection.getOrientation(4); + ForgeDirection sideHit = ForgeDirection.getOrientation(mop.sideHit); facing = getDirModified(facing); - double originX = mop.blockX + facing.offsetX * o; - double originY = pY + (mop.sideHit == 1 ? 1 : 0); - double originZ = mop.blockZ + facing.offsetZ * o; + double originX = mop.blockX + facing.offsetX * o + sideHit.offsetX; + double originY = pY + sideHit.offsetY; + double originZ = mop.blockZ + facing.offsetZ * o + sideHit.offsetZ; - boolean canPlace = checkRequirement(player.worldObj, mop.blockX, pY + 1, mop.blockZ, facing, o); + boolean canPlace = checkRequirement(player.worldObj, mop.blockX + sideHit.offsetX, pY + sideHit.offsetY, mop.blockZ + sideHit.offsetZ, facing, o); Tessellator tess = Tessellator.instance; GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLPW2.java b/src/main/java/com/hbm/render/tileentity/RenderLPW2.java index 4e4eacf41..34989045e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLPW2.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLPW2.java @@ -29,7 +29,7 @@ public class RenderLPW2 extends TileEntitySpecialRenderer { case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } - long time = te.getWorldObj().getTotalWorldTime(); + long time = te.getWorldObj().getTotalWorldTime() % 1000000; double swayTimer = ((time + interp) / 3D) % (Math.PI * 4); double sway = (Math.sin(swayTimer) + Math.sin(swayTimer * 2) + Math.sin(swayTimer * 4) + 2.23255D) * 0.5; diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_lock.png b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cccb643a26d32e75df46a20006113a1af9122ae2 GIT binary patch literal 446 zcmV;v0YUzWP)z9e7HF(Hv1>Tz osQ%)&1+Job{SAtg#%J)Ke z@5xqj8`o%ABy;zA&&yN2uRvZ1JAE`(J(Qe+dAw{M)fw|mpYa77Z5PZTAywH@a6&Zi z4CUHSwi+27ujcx1x?MIyeMR*g;tp@bRKpk>?!GU)OYhus_Vo4cpU*2AD@u>@4+G3? zZp@61nvQzz96{7;Td{izhJ;e5!c{9YJK60|0=b0v^j_K4)>cSpV0&VIoX9PVw8GG1 zKAIlM8!kg0V&yC8EZ!_sZOs$*0w6}^W@M0h%hU3ar%g=-2&ntF+mTif zb1N&|`V(?~lq!t>yu9fGCg`;2SdfRy;-o{{^o*uoW7M-+kBUt$GQyd51KU56!X{<; znA`F7m2|m>6Kc^5j|hf zU$(c$J3{zseq=YILVM+ZEn%7}=pc-gWU#4;uJxU3tQM(Hpvga0$D|X>;E>P?tirM$ zg4Mct-|1#@bg;(18>7Og9@u9Ky{JEwXD+JxR8Z?FB^+^UQkoKyS*SAZ%Nhpr1-*)611BcB9*@?aPeQ*2gtS2`;s zU37BesgO3aA^Qzhsx(IxMyjTYxZPb}J$-$6;@LA6KI_{IS5QYK6u2};`?-cIy2mPKY*7k*%VnXqWuzwCYo@>$`nsw0vh0!&TM(~!GkBC#zK6BEh>#xdv6Hy*jMz6V!<`nx!97KO3{B30|P zzCQ0JY$w-dPFs|j?0}bqSaA;d?%d{39c^3^Zd~$J_yvfc4Fekxvf^E?~C`zgD0N`d*Z~2 zxg@$oa_H{^`SA%%w{&POadt19MC{nx_2H>O24#b~CGtcuRlDNt2q8a^{vGary6e%CP6Nar{?L}ka#q2frSoYsvGIS(x5n=>^mZsjV z7#PUIW*NC@B1G8^{NB*h(_7pDu_E}4pgK}o+6A`wR$x$&ys045ZPKAIT9XzVUQlz#Tk~ITM$sp6B1-kEkX{?_#mojI6B3(AXxwbxw8NA$381 zy!FPdRSSul1ir3;np2nt`%GbX3=i(!ae8zRd?n^aslx3CE_&&BR7%-YNvChSt!A~k zdV%qR)V;!@BJUA*2Ul`|<6jbaiF*QNc2~|VIXXdwvF8pG`zz%OcYC0W>EAS%E>d2} zF-n&TglhN&oJIVZHO=(ec*?S6N*%pP zhn`>lS=p8pWzPYU1*jMZRvi)k76*HJ^@RcIHmJv7lm^#rO$2S_VzGJ zBfb>9-`-w5owd=Si?F9;QZ?X8zL9McTId2QBuFt3$cLdJwGqkU(%2b)&-mZ_E+C{E z=9*~@FWCnMa^^uD+}!9urQB3tz{)guKMaiZ%#tcC_1nE^D;4Zo&nfM{hbS@Oi{)S4 z4a5-XoCMN+YU_?t8qwR_XxqweNquktrltXev*3=pWLiV7>ffIjJP!^cI{D7lKKZZa zqhI#okAI|mbSulT=Kv)eUt3;|&3Jy@{044)FdZXT%S5@5BDWh4zqYovHXkFB)A{Wi z|ECw%y9Ky4g7Kn1QX|cv+);VZHpgaY>}Sc-i7Q(kcP&_OedD=FG-meTE z334WILP#pJ?5JH`yxiWTb1w4e0CxYo9!5%HRPB8lSS-)y5bjD_o9-AEUFwG5oh~YC zJkctu<2t>Hy0Qs%xrTj3H1VflU2y~^sBc1p;!Z|3iger6wmH2)s!lo zNtRRs;ZFhKdg6Me~R81v(g0IWX_{rL+k=3}X`7n+}#a)!m6H z$JWb&MERejlrocLr1;wXfJFRt+T`ML!w?RKL(G-&?z;ygv(@>-ekf-dnUsxs`D{^& zVj>~v-G&M*lr7H7hP?vY<<0#dhkCFElqJJ*3rowcsVPp|z@I`dR|BRi|K{VtyBHwFkQJA_(tV5He&Yls9*kl4-WISx9y$w8s$){}j(@M_%r8%z7vSyfb)2toBoQhJMI>tHp%4l*sk?DY z27Ms(f>1_^r{=-a#HdpaM^G@q{jkEO2v&~Bx1PoTUx^-NT~q05K;~H9fU2<tRjP+wjlg6}?#_99~Tbia1=TVeO z2k#8$JuN+92lq)VIGo3s7U62I-&Kk)H>T=CLVuExUvp;@l5;Wo&Jaq~3Ek z?XXgkJryO}^o+J>NzH=-7!U^S^tE|YS$W&lwY1!PV|Dc+WPa&gib5v;ryRxQzkrka zdlDDyladEfA(}a^!iISMyC>|~15(PN_$ND_HtQ93N-}^cInDL+>ae_xJ2H3*E73#W zSMQgvf>%KflTEc~oMtW)rAm(q`PMx6hkwBxg!0?HQ1SO*?*(F?dKjKcSHPYp3-P&G z*);;d!7Y!4JL9>F^AAY7=#EHn6ln(%O2WC7mGlof1S6`n_;Il$$`^`9ryqV}n2q%L zWv0%=xUS~#`<8>gh>FPSkpzOADTr5wXulL{BpAzY-5-$$WrQbd+DK;UN9PUX^RTh8 zO&JeK%gAhPb~D`e_GS|A*yl$x`EeJOwe!&wkGg`b$%FD_z&!A>M@_pc@Kp1H_jea{^rfC`}b3hbWOinukgOsqU75>T*N=yJ>cSj{XFcxo0-db^Wrn3 z5)&;bs1_D%pto3*wGIcDo=*c@L9gZaXGodlyUG{#c_1KpoEofY+D!2Ya%ftzVTegs zdALNSwbIdJ2g7TM&wGaKj0H*Ca=W(yz(R+r`h}UPKZPGzPTBWFH^j<_ThHGXIV;}Q zk>0T_g2WI!lR_$rw(=f)o0h@MZrJnY;+I51?-PUA5bFHH`-~zJ>cPCuEUXFiwR~S= zC{&XdWkL3zn460#bWtdMRM0P*NYRN_VQBp3)LZztXOjAvkM`4B7{B9OK z8dHyf-xTYJ0bSWzz;P_lT*`TfTeBcq7?VVvqt>I?sb^s<9>?mc%l*F90K>((K^ zhc(*;r6NI?=!xl_a;QY@WHrv_g44H?)uxI2ys(SHuW3BQ4w3z|ZrOEw#(6NLbO0N< z4tv#85K4tMJ>~P({>RF2lX`M*x=evPsv3O*EVy_pPq3exy@CK3H=rQ`jI! zAqF(>ZQJiJ;Yp%8d0FlM)h@_Npr-e|ao*UWEKmp#(7ig6HyzNTC1h-Pa8?k+uUu{#zTwUYoeH`6Uss_4oNC?Qg ze!A^u(k?q@R;2v4x}K7^i_^kJH>E&y*TzwdR;CX<4Lm`EB5_f9MDlLti4n;F`x(BG zk&(863YScYQxvtewGjN1u6g}?GC^!_d%7IY^}A%jJRYhrwoLVZgwf>n7!N38{zJXh7St_*i@}^Qe=I4N*xZ0TIxD_@7~QR6j*kiACE`oir_c=O z4d1qI^*dZbaKyfT)xU^;MeYyc2PF&r6FfX9Q;^Vt0-+EAX6KC-G0)SVT&pNo{>e}( zOhRny)>di<6V|1>QG2jYcCmSa+o);$u7BleeL?akfdugMa%}aIBJ|WIAmFHr>9~?* z(j0|KucU&zx2z))trIRm5lS?~BMrTPUBs^y~S3HAaAr-i zZxG%|ALowwF9o^~ODbmZj>%D_3*D?SkXx_<(wl>W3S!H{g;vFc5f@_9VzLk6!`!KE ziI-5&CM?1$Pv)^i+P@sWt319-fw%`+m~JN{@+~OcLqpQHs5Tvy-W>b4sP;$izn1Uu z+PIU5xerkcB85fXyM3ogyHipm-^$$sLsA_(o|xOdV}N<6naHi({(amwD1j0IfZ@q} zedyH8jJ}exV=S!tR&U{C5T@aX^Zt`XhD>NRRM&h3`iX(cBp5tY9Cuya$LfBvP{ z)6_P?v%P)LN2fU!m%hgiF{+E`jV!4qyJU9T(u0ow%B`?2MwSOkn~xY?mv(P;QZVSL zpG)%kt@DNR`kQ4%fbInup9iKI#q-kVaFu6EW01`%XP-8WxllYh|t@pHGwPEmTzhFiPq z@)w!P@<8p?A0IBic%2)-FU4coo8euiM1Lf@AMik)VY7?GfZ5&d7B1jC7!AGbco1Azh*Z5-aJdfMz>QY@po2(KLyd*#ZIu$R} zyy^5d`|zSE_~i~+=i|LO8A;y4ncTmpHcw4O8wMHLc?s1i-HLwK*MJmbJzbM=%+y@r z#COB+YFQj<((Ccb>OIY%Pp5n7f4;~F3Q^88umGU@b8YCz`m5TVWOlynBV&y7G2%Kd zH~W`V?)2X4aWvu9Gl7^;l=V54_7WIo1ai9jDSqkbko`WSiB1$fp{fe#lk0YWRtifV}SGnH}?|cHGCDkPfBoPE9HZ$Fp_P0YxrsGl&FQuHY@~5iiwev9OulS$XfR zBhRhzke7j4>a2sW#^+ZShPvt~a}$}A^#lV;bq~#pt^_{M%}_8NhdP`~_w)1H>|rsy z1+a|srxy!08K6Vc7Fer%_Uw#x+k<5M=%YW|*6Y9oUd#8+F5i1@JQQ7Fp4OW`1c5wa zr39_Cj5Ddy?gS&F3B_FX*Gi8tSMjduS{Y@WsucL}2wB>H%lZcMDEFbv=xoF7N)bZ>m-s$0Fv)Mmb_1`V zu*1AL==r;efbRJ09mMDGk@PLBD4U$;AW8Ap?GHGWFziW>MNH1xOlA4??p)Hm-E8pu zbUxSuk*;LbL0OIk7QFlQuAIrhM>iM7n#}1(C1{JXsQRNbb7d6DeU=Jr-lV(JMb-#;Bggu6K92fd7V06tGyT$hFvaU7y1c{UcDfll(k_*{ z6q{s0>OsFqgt_~3ypVkcUZR&_e@=`l+V_zDVNJJx&(gLDv{Yo3l&usu)q#<2PaJj$ z`R2vvmU&`mXJ5Z`rbXNInE&3)G8wGl8w@GrWD#`7d@qrTP$ere%>7PL`!!QG$Re%v z6HH2K)E8feP0B(|uPr9_7gwS_;}%1Ru91VxpYp;X)}60o#4@ zAh;l&V|Pn9qFDO(jFN6kf^rx`GUH^8D4?8O>tn%>S7GFP#|$AwrYicHvG!Jao~H$^ z^D)zvndy3IthJ?u79tz4EtpgoU7G|@6L{ua$s<`*z@|nZ;c)}+-cF+tw5}lMOk6J| zjM!tZmgWe6=7^*{23M7?2D;nueeuS!Vph>LQ-+mGq4<@nq9(MZBsr_MIo0VHEHCkk z+U)EcX~k;ijEMpvj(0n3W2k-82eap0X@9hdzg)?+2AeG=Ea$>%u#8M+-njI@sCSx zm4}Vs6;(0e{e00OPabEd3u*&ltqog+{S3L3OOTF>NHb8xHRoD-z z$p+-w`uee27RL9|vb<|Y0UAp_BKgXN(|UY)n4tmL?Q7%i?*7ua1SmWig)u22h7P{I zXDZvaX-Q~Di;!@2_M@hQ#XiGUqINCAA@*P;mpXJ{@k%L{w=TGn`2HI{ffKfV2)Yu{ zK_k;=Csvf4C&T`!<5^ST*_8y3yBsf90O- z@DIix4t){zj?=C#=ynk6rn=03 zQFYG~jz;E=az49dnmtACIJ{`BVI_; zIHFd+mVCXfCuayF_;@&|R`MghAp5hIqeY85&PMSCs`%NYH-2Y>Glk~T zcYB0M>8pXh2`DzEXr)-uK`(CVmWrLOVz35~DFD;BcAY|WHe4WQ{~Dh{zn7o5fB!$ zX$kM=2|5)Q7x!TMoe0^!jF4Y2AQVXYK!0|q#)8WNF4HW|&21b4kslv>a>B{3ZBGP) zudk`;5|;ye`Yg`Vuij9e)HG?evtvW>J?Qek@sZbG0axi+XoB8usSF_WdEne)M2qhxai#so2r1DRb0ww=;IqFIJS}nL}gGLL}VF zCl-2knZF;j8$EYwrvn|s3{A?8z?F8@AZJPj=#9+W^&=jy@G18Xc)uMI!o$VIRfUw_ zCEwveeWCda+acRG+5bRx_J7qQTWmC++}l-$09!0ifU|QG9av7rE#X&mnBrvk6bGP= z^55V4A%#bE8VXpQX!A4l)(Dn+R6rRPY2!u6n;>+-)|0RKO~T82v)5Suy$%s_TI30J=(jP<}Usv9r4)@QCdNmX#WTAml& z*s>!|jYr{FSB}9pf9jn5;pW?;4c+DL=PZr>gq$-kc}BO2l5&@r;Lmh`fKb4hl;Qp_ z|IvIBzQ9_C(7VpnD27zWh2Qvm81rMGC5}^taV7vTA5@V2?R4}Dxjbl`Hx0jA3wR6< z_^E(LH_w|i1wPMc?qdUj zjA%6!nZRpm+Ir}g+Fv=2{VbWF$@*;2k(D;W1S=%W^{+aV`SJU4#pf?h%Rl%QBU07W6b*`z@<^SYoW!ysQDQ(> zkevR|&C!vHUEKD=M>}ABP-Bn#@&t$!Jm`PxeI`%aqOj0Wgb z`}KIk-okob!}(}YSw2>w1c}U>thVeCzCyP*&cL;8)Sw$%)cWRv?*j=csA@5*baA^A zPm<83qpL=}d391DsT`<;Z~Ke0Ka==0$X35-+#&Nt2-HMU#{W_v{2np+kO_1fNZm=` zjySE!ZrE9aq=884KmPy8mV@LXsBOerfFw3;>5kO??frp_RflCb68|5H{6T+q3?8I` z;2^hRhv5c~0!z}lof(2@di{q_fF>JfshAtto5IaWoZ_i}{lBSZ&eN2p%)f+lMJaih zV^%D%F-Cy~%+jbeS>{k@%rvpH9shtMdm+5(PE%E=2bDsSl92Rg3Y~$bze$w7mw55FP;V+yKc%*+w=d%A6l$KXL9oniz>5h($ zKKm**M!)x3dJFZ3QS{~OawRJ+M5jp342Ai*^q;56lec)CfLNWJzkdIFJOnbNbmVRq z;*6tIIh6>Q(LabOHcy!q&f^O-Q&2>b0?p0M@9HXIrl)(l8DR0fz3{gEZ*h2y2~a+9 zpyZmBy{!?A&U^6B^N;1qAoz#Bo%8SVevyNNc@XT6s?b1Ps%mb2M<}@H3Kk=WzPH9P z8*oHT0j@>`AgwHN(F@0nX}n7&kjI`1f>zv?A%-unN;Hl?mL^Q=L(|F9e7@;jOvL)v zk{btN?jPReF-o1O6{ZP`UI{f?lBEZT8EB9Ir6jrD`gtXB5whv|x!XnT&4kYr*`r(X zp8vz=%4@>^;d9k>i#EcrEs7f`V-l5pZ^}@P;vh_Sl_a<`=Qpm{bZ_h9qgc2F4+)BL z3;?Y~t`A}1l7X<_AM&8Dfral12Y~jf!!OZlPV|HaT({*So|6pBi*hlDAr=hwaEot&Mo$jFT2 z4!(aEo(ilm%%w&ttbKkx3HQ`iH1PmNPZh|)05q$rv% zvYYHx@$lXMXK*%WA#x1Pa^MoxftM2(>j1v#;G+TQ<@?ZMgP%@sMfTf&fdlJ3h=UI= zNud{I&D$0~Jt}xrpm|)_xcnwk5@URl9S38XnW%?)8m$r10>lF)&c#Z39(k zCGMJqhDn(ze%TH!Hx(uvT9g|imm=jPW$+|qC>?Rj`q=67c;Ob8(Ed+}HDU7+Ng%yE z$mz%C4%B>bTbpS3=ovmfHU@#{>gs}yv;o;a)mkxV^|+Q(^esTkNyn{~8%RVf{zMLO z$!wp$YEx|9k{qm-*M!q@YBvdUfHhA^5&I1+VzZ6rscd839?s6xh6-Dh;C6X!ed}%b z6$;{zl5GC7LI#j@x^27EC3N~FPx|0bhSA(phHn2>lzp`4cj<{L`F!21EQA#jdvPl| zMmJq-p}L=^8))4*54W`;<%uS{*%dgVOlZJPBn*WOiZm7VJ4ez|`RU5rNE8LmDvwqy z5Bge0>2_Cl1M+rI5ZC?sduzo0O7x7<9|EQ-EI7^a?c|*P63O;Es&Q7i+I&g+P2vzA ze;hz|f2iSIN6(K#{=4JLbaU%2FAR2$Y2u1S5gSsI?L(iu6mwRC%h-lFg7pM6wkrZ= zCcnD9JcyTXF+T=?HK9CujFjFP2aTxBtenM`s>^gw1@mm@9z$cGcd1f!gdm|a?;m() z3v>5JAgvhTB$Y!J^v(wKJyHu4KZ3$&`lTCfLNb@6Kh9zrvgM5VHnwW>{^KCAc`A4k ztVhg^;V^Cn0^6Iu582)scQ21D7F2>GB>XYwCfc_BJRA^~3q1|%6-3V6Es;lm-E-be z6zAIry~b1qH*$Cs8m*j@Ik zzX^Qmoi}yW@?M(k0e))tu#-P0u$opZ?WGzwC>e^Zg zIHIbfBeA*pdURg2+jzyo(wdJ4Is+saJjexn{-^_TMlZ)5InXon(U3PZG=Ri~ANy6) z=l1?oDVJsC(t4#mcapcDD4S`Ssr6rtSn|$w;y7#TyIRpW&mqe5mp_rIgB9woNo-Y`p48VuLBWxqdHbPi1`&X)=tox6&P5@#>cNnN%hKq0Bg4u zk3R`7D=UNGJ$&9cg;Q4^YpYN0z>qhdzV6upN18&|pI}jcqWw@pWvO45W|1;kB=%db zbJ|R}V5|}AD0{ddTG}mtIMfWfxjwnlfK*BS!F^76`^y*OQnC*j8=Ap*N#LAZz8!Lt z&TpXvD|d6ZNb>s4qj*~P??$~_*j_~p8s z-csEKqtVHTiWzRdx%Mkx7WZ_4rO+fv+0+z78}J1G{OJPTl$T$Ak#RjxS@3Yo-s)7GXMIIU!16e@k&~TSyV2&!R1!YDH5=v0z=0u^LLV`FRv3p=y|XDUA+jjS?{Vi zUL0#eL>X;Zs8el>Dkdcs$B%pC)H7M@eBkVjYe42(i`@oVNoJu?&i^UePV(Dn*l>tM zw*eM~k&>g33~pw0w;-)KFPfl1G3t6c(!SH%rZ`rd^LiqMHtYG=N$DK^r^#|TaS>l@ zJm^95D+}B+wz~Qr2X>7Bdo!(`_%VU=|xJFP$UL0a-hQm5nA#VcASZ%xNX*da4Ps zwe=h7q-rg>2u(EDZ5ogJ!tQA>0&(vJVWxr~F(&02*7bp})eRhAJtw0m#rrNBDwTmZ zoxW3qcNn{FIi3_{=IQ}S{Tvi;_-MZayDKmk)`*I+o{fAoIcWh|ug^DURS`M5b^5CQ z2=kC3?v5dD@wOqOitzed^^9(wpD+AK-Frg$V)2?F(T(7y7+lzZ*b7oB z_lF|P4TmO2e;m3eK8c4o{B{25wQ`+mY1MdQ;E-&rc&{_W!-Kx1BEO^knU1Iq7A^n1 z^{6bTs#P19MqKf`sn}efz%y|`1^UDDSZAa-o&_5AxNlR%VDJak%I8KstLm38Uj~j< zp0t^dJev_petJ(o{nsjY-%=(sBxu|g4d3Fk&|qZ>7vy=PX!6;FqcFm?o_x@wtHxcK zab8ZJbfgn8F3KMn^}+bjgud&S)kD$x!W%MCb)yGGg@rANfNN}L7GgGaW|yn5tNWev z<>QwM)WnQbmwGH5!d<}Vf&%6$;MALHG*@5QSYi=jTmSVdZ}v7~Guw^m*BgXlE_C?@ z^xX$*)%{g9HDLf!kU{?CcQ(>R*UCmOUc9!WFwMQ0ziU2hG9p0?)H73su`gNT+1C5#;ca@?fxnD&fp1y7n z3D0k1=-F3Y;q}hAeu_buK1gOvbPx9KfY~Xd>p@P5Gti%2Wx}IQ!OegH8VoPkPwIEp zAjF={%Zj;Uwr>nmlEvoD#>!q~otOKn=P)tgQihFcy)FuTbiM3$OEO*Bt!m-Ng8oKB zE+*E>$_gY7VCDSlUd3BmtU{(>k4YCmRLtF9(Fy+D=r^`M?XE)It-Z~zq(CTKzpitQ~o95aMCE*LXP=K z2U7Hs^f^JKFWB;0Yg7g_`R>o(HeNO|_XrX=7JnJtR-(QC_z#UDNy*~gfdfx~7>~yk z_^YA+W0BcWK#4F31Jp2TvasOv(up$e1MOHmNB!p`ulF|pvB|z#I(BmKs60Vn*d6dM zcar!Hou_#L091MX=uDBH^|+x5-7SvtPtJv8&QR1_aBc- z@(lN3`6ob^+9Eyk)$?uu??@sxx9k~9oI2#{hKB?wH{L!vYC$W921|JVc2beo7B8v8 z89ee%V-~tb7M0&u)bR10_S9L=>42r$+%1Ljp4JN`@1J%*;$L@a-D)*WKhtMH1vmRf-uL^}DAsMRBOaL1kWO{`6K~C_EaBt)rzh`oa%Q7@1b2?7YXBkT^$aM_ zz{Gq!C{tkk2pS6<=@~gWk>D#+Q(a(IKw+pGhm&UKo!lt*uvw(ZW7!QnSD^Ng2tQLO zbfOx*w|tY$t~CaX3e-+BucmwxkCzNVne7_bDq zOONe2zGiz59AB4y-}_ot*+6@GgPGNcQ5X4zzhVoObGN%u&;j!9bAK5QAO8f~pC+|; z`xA4}*~hH1lfKOpp+Ah1!$t2H)tDFQ?7?#-5J(R!)DHCRL9~oi!Fd zkw(=mX@qptD~>(oW*#RDfovy-p{hP)$v_}Hp|>K)T7{Oh|J!`?w&hQvcqfue`FT~# zbnd6?25KZAq|AIx4zT{z|7pfNtHBMz6)b)3z+SXIAxfeGA&ooBZ-|yH1L>vw}9BIYjarMN*CB?VO&OB_Nh*CU|$ad?JSRKZy)6&=HxrUUo*2JX zubsAjXCLO6yeXp2)6^I($~!1BsZ~%odh#ZXS{)}^zOC+t@(guL2cv4i+LFw ze$&LM$Nw3SqR@T{fX$n+kJrocO-0!N$&;k9qrd>>sgjeO8)tkOj@`+?q4uMN$Hf!0 zguni@gj`uL@gT!Fx1$-`%p83wRQc=r1R0kj;H#TzumjA7-U@7O#qNn^c_ipxfa03( zWH&dPnSu5tyzZhB_%-3%xjdMD;NNWkrq!^bw42k-_aCg+k3;rRNr~LozX+eoDvW7w zZ*N$i*!?7%vP@(+n!t5W?VbboZ;D2`#LFfMeIo7#b!&?D(*gK7)8rdNL#rHH+b#QiG zQO3;u(?JRY*c-3rp8&jrmF~9vU0q#|8U{gEEbDl=;&0RFEz8sMpvWKm=`xEumS1qOpDCdb!xF+=F2?fXh-<0U}eEw@uEN8T4-P#`+eGfT`)NN&Q>o zJy?KHPQMx}ENu0=50rRNdH!^wwA2`)(`9ByLY=*J%P|0M{CKW=mmZmJGY$`STMPv; zb}rz^%{r0#%0syrb;yILw*S%VI~4f9Jlr0FwO9P9*gtxG@~chl^^s4xUzHw~863^c z@SMNg_gIrSjwR-Gv??+=AdKx3fLu>Y^+G8)Gl@k{k*lGK{k0Kv6I+$9 zndATj(i`=hC>=YobikH#_rC?sZSRftJqOS`E#C{^|8lixqM{g?CZJY;H*b-RGh=KG zgw?Xj!l|OyJ2mS&8I3nHywVGJ>A7aq`8&~9%KzAy9k4$W{mD8__vaI4wP0 z-nLQqDGhv!inrf8K<@eRP|X>SGN&hk+Qs905AM7Yj0NFRU@OlO$_n2dnPEM%sQ_?S znJ-z7@!Y8qyA-6=6G1SSdU(Ka?I#QMNe6NoS|N)>7Lknj?Y8zY($wVSbv`j6n<0B) z13~i6TsewHF@wQ>*>Lp!Z9^stj|M&(U_DkY_JRdnoGJ^Jc-WMCkTMlzXfQ?kb;KKq z&jqOaz&~{y_8#{(v2ZbVQ8p%AN|+Vt;qh%DinkApw*c#Svr($q#7DIZX?>Q`(mWuv z%iR%u7Bj=xQi0vD!=5l6sf*Dn844uz>rV(pOXLZvQ9XF;+PQJZ?BX;0Z}?4IelR7O z<)zpnlZ%dKyaT@HnkpW9easIGW*^m|iu{?2O(f4N4KdqzK6p}T)Rf0!U*s;2wPV8 zqkjl@RZ~+ilkzX;j<2|J{^?XvHms!mY>Qa|VZ(#Bi{)NiUh(BexUtd1#io#!ESIeTA#GN|p?U!`d%WP~EII9{ zGt5Bg_@N__$)}b2QsuXSNb-PbT=6(2E)Fmn_nMC7Sb$gSqi;xZ0FQUOv3Cr zq3JqRYhW%;HDFcC@aK}cGdNtDFb)YYzN2|TIf3zenEl3DQcfNeFRb@3bDkUd{&?^a zZ?qj9H!g^CSuu3o2oFDABMxz-K^*cR<#R0WCdCn&3SSAG>B}$z6M#U_Aghz9*SfUU z_i?UF5x9>4J<-wUT2K4OGyBJhzLb2irQ$ZAUIC~D9?OSSk_LC$NsGdwEb6RJ1@k)^ zsmqN*O9zU_{Q-Ii$#l~Go~QrHtE{*lrBnbbQrAAAuxIw$D7f*A;}XdC(NFCJN-WD? zRimj}pRujT>PI_BJB->#goF8}XtFP+g02ybnqV~6=v4UT2`ch&-+<%pH{e{@`uh3+ z?)6&Nl~1*xI?k#r8BYjA0iqHRcIHMJM7CUp9zyj4lY=NXLtKJhSlRF-Jtpd6 zNrE^8Dx-BWDmQ(yVP*vHpv(C4JK)(31Bn5LwstFqRUv&Z3B1d~N+>%N6 zIRJ{1C2h zt2t0p6L(ee6le%K8$3@Mu5Hl7@jLX^!{5Pj0dP|!`&rc;9?t*G=-$#m@(0Tik#o+| zE9b`cQnC-ehFg|@Cp}7H)cv*w*X4cwwM$`q zIF5A3!eE&cvi7*=9I2Qlqv;@pd+yB;IwZ-t{6v#$Q2S$*eKc2oATd6LFpc!Tweucx z`}|)5gE{EiMDusgo4}O<<~INJvj76L$>%3C1orXg`(ByWsXbjZ4)9_?k9(^t-X0Fr zUi*N6vwO2a;@`i22R5>_da!lb+1U;2!V7YIg9O8S9o**qPZD9uCC=*d$m|~VyrfSI;ygy&1D+G3J;kyP1@vc{7Hb? z#0R}L`+`5|)4~zijVuA>&c;6knMaZAwA{y2OdcL$S93E*;b2Yx0B0c7hVs#XCQcQ! zb$L)EZoI;#8?eXy)9zze8&lf9nF|OoFRM%wqX_9^B<=P5G0ew~(mKqW@^as7QbY6Y zm_*O96+84AAa~3tL=k6;N%{CI?^lLor(_(#eF+xr$$RZqhs~ymWJtj8VQ_VEWaOn&A4v8Z1pL{XLF2xNxhalTF08Ei>Ld^pc~E$7NGEs$ zco&VD?1u%$Z-4y~1NEN_0>)2(ya49#7k80hYNXI*Vsg?2Y>g{x!OXEQ;z8UHjgDfL zg3?xu;qMt_lV!Pb>K#_gb3KCPpZ&@&#_)q3I3Cmw8WfQwGmDjd(O-;cBK24Ye6F<|F5YkAFc(>E~AwB30!T+Ee#L<~p`LP_M zhbbtlq*euX9D2{jE*0U?yU9`bwzt59hMzWqT>Rxnx!lRL2-gDgRw2dnbFk*DAS}i_GYQzCuXu0Zn;qH#^Udfj2PR73{P#yvEes!1mMeElL=Xr@dDF3 z)-66K#nJffN4K}0RX*&+?jGH=3zn)@yb=g4r8Q?0H&|!)y=l)OY+|}aB{--7s5ig@ z3dTNBKa+=bGQKw8n_1;fa@KpQuJx4nt)Mo)_!kg(Vz;#OXb`_q9+Q`bc?DUSD2J0p z<3d;(k3Z+c$EF{24P^UFd~c4l#(Zr8pTn#t9=uSe)DXGy%B*ZbqZ{3M>+<8cUWc0` zx6D3ID5c80Oy%R6sOq@}Pj4K}nOa-mImtr3fb(lKE?%m~lP`e)@`j7U3zxR-B>Hw z_wOCbi;aKVIdfBw8Jqd zY$`jUQ;7H>lJ%y-5ZBV-^Wdgth)TSCC228%;^$FFY7X7d2n8aL-g-Q#Zzq4vgB(H} zyk`5?&c7^3m zb{XDL=UwDmO&ER|3DkwaO$eG|6MsZKgt5Fyd~Vo}_ocSL5`v}#SsO}=g0#z0o`5K! z=fWWT86^{~_75Oh6wRjVjr~aMzE>F}j z^C8IR0a6cOrtZJhJx`epbm;Ns*lDntAk-Y78E}g39B`$+fVia`Ki*aH=+clc>chjU zF}y*f9_g&-1WmGx=W>lr%zi8ZTq~8A3WqaA%lx=j&-tfJr+$O03(u3V6*mG6-s3ph zg*|;Z_Ge&;s2@9J){A7V%=i%8pK9_}Ef0w?Mf2GQ)lP?z0+38yg15!Ew(zzik>C3s zl&-&j*xY^>)$3#;Rq|pOvzd2=bhn@YQ0SmDoJ+DyBY^zJCXc6)W6RR_Kg)2Ru~mjn zi=C99SWfq@|5r9ec1RTJ|F%<_Jo?SYh6X-N-xek^VHx;{=d@>wm^aA2rLne_?U^XY z93D|gK52Dr{CW2=FPNBI24#Am@zOMDuahB98VD(RmPiB6v;tm7CY()>>&;ks%9Dup zhx8%J;)N7pdS&cuxbCMIQY1k6hrI819%Go973~ z$&HMSJAf_#s9^sN7owt9rp_%)%!t!E5-7$kY_uU07d9wYq@Nb+ke}|Lf5_!x$zu<8 zU>o}$RMPIc^2r4>o;FX?wdnxi^tZN<=uy9da^g*p0(B-Lz!yNgvg&c+4tq6l9;GdR zc4A_JA(-$TBM_-+@+WA5%$aWI{{7|yujYi4t?Zf8shO)y$HS$b9!0Qk(y13DFSptb z;9n8XeK+7#K{SAscO_EP$hcGR5>L6mLe|_xh0t`PTwY;~+f;B;tKNK~x(}4E6%jzN zCHz8&(w6j7b#?r38C4gDVOiAmzhLwPf(yWC4!cLN3%hO)U=M_iUP-;z!d(W=?^ag> zAoJIx20H7l)b9_3fLL-r*vrJk4`xyX#8bMbY!sAqQ{UeiWKO2z5wO_&%y`3OTvUz!ElAOsX&OGdshgS# zr|jwNpIhovLo^N)p3*jL2l}0=AGgvru{L1-bQ{I5Z<&E27dTcXB`Xi2ijsRRP+Gjm^FTbEcwt@zj5g_F-^3Rt&9_~) zTIr}l|F+r#;yWcJ#ehfas%v(@U0Dh+lm{VUpA447`~i6~oa}5kI@3Htg;X2Dti&;I zAXgI**0asA%pQxBa~jx1jRwAvnO^Ch4;L#;y!@dcr~xB-AdULL)G_z|+fVTvt^BKM zKa6_xW8_hi&45H>TYtdI>+-eA2J%6si~oPBcAAxw3; z16MXd9<%*vsJksn+=P#BgV^M25oq@AMZSLiu@gBG+s9(b!u5(Qv9X|_m|tObbM9U* zizSRK`pwR#ejjzEdaU?~pa)BH(IzQ7Ak@HaF*u|oA}Du$Kyg7Kf2_JUi=(YI%kHQu z7+BKmp876>n*kABOBVqe< z&p$Zr%dQ+MxYtj(57gkYI(H9aPiK|cY5qyTK!9LIR1I&m6bEI|UX;N*0<6HA`grrC z(HkG_82`b({7L!Bb0Ry!5xNkq$V_=w0F_5(*0I4z9}I4zaXpG-)MM!=m8vGZ;qen! zSJ#h)^_+LA7`m5=Bw1N?ncv*Zw?1Nzswxiq6>a^t1)=+#z?9$|#_Yj|=x3({1|}a* zOcJsm3rof*1V~j5S9fXF5R{TdtPU4R#lt7eFF$>}W3tGq zbhM@i`z{88(tErkpZY-F;tSQ5#|(xcZj%9)DS z_aiACFYj_ZzwvN+(O~f8e$~}ba}%wYC6jrwx1z(Jzq778bwoe$qKV#azZLM3Ij|w> zsmePAmc}_vu0cZ8Z+d1rYlI8#E-uu+o~*h^03*q`M$AsS4y<5pgu~}BBX7yQT<-@9 zak?AkMA`GScO7%14q?P`JM24yY52!Zo(mTnL2lJ&*Qph?2HW<%!9hx(2pzDgDr;_z z3ZoS`N7vK8cp`n7oP5xxN(L&MHTZ@d8ia1%z1Mtw%JTao4Jo)Z?x;VEV^d=Yr`c)W zv%h{d)C9zLSSM>YQCwT@*-_bn`nBEm@p{! zRl)~3TGUe7<#wVe5mbcvw1)IV1a&^6B9G&n}vlQb%_FHo?Un;@kSiH8|6|$7Q*r?z|T1XhFULUCPDcmiO z&@-m=gIOGk)0T6Bd5Y(2J_W5w@k1W!Q2HT|#Wr!LVAy7lv%b2TrZK;(pyu01OSP{s zr2?fi#bsQR0Y5oivfLi;E5|;N`1QO4R@j8Z#;i>A<|fZjhNsL_E`ZIkwVSu%Ne}IR z?>P3HrZvYBj3YZL`lT;I#F1D@kVvNx|0rDyq%HzyY zyuBsM40W9f2d$`EIWB<5<4Qm3v6M%i06{^R@wHmr#*}NYt zh^xPQG!#&$>ehA+wERDHllamt-`q@kUBmvr(-Z4 z)(le8GE1M)qn=txpBbvfF8N@o4Fw2IZqEvSchoP6tKw1A)Kx2lB~{s4vxqMPoVW@< zCrE5K`kC%N#h&yNuxiZ^Nx7sG)w0kKRrbESP3U5WE|F-`qjs?-S?PmM{UJrC{hm!c z)a9Ah@h?tf`NpHgLrtY= zGE~9Mmp@^9=VNs>vC0ili9R+pU1pn4KUhG=&a{{fcdH|Dah*RHX4) zO7C4UDUH*9T$llE=JVfsiqiYs#WZpm6PpT}ZgnNEwHV;Efy%}A{aGQqUX%*CnfHfy zcyf5+`u0?FV`m2dMraPpDCM-lRD);Z+V8%>J|FVGL{W?oWpg0Du%IcX@pC zj()LDrFS|7fXP{V=MR2Qc|B8h!~I#no#L?kbyN1G<73n~Y0P%pbI?4`;IIe76<=?N zJfqGx;0QH0*P)bZI|&g{HIuggPSUlous|Yx?|Zf77+}DsyV@voTxRXmVn}kteI^$z zhG_}dh(HxZ)#wB58*mQPC3T^q7@M~v#w(ApJEg-mA11hT>|UBJ4h+tHZb6UQ-qAFK zk+Tt%PfwlXzb3(-Dfa_U2QbZ5|JMLgnpH!S4)fhQ4c57s3 zgzKs&b9YZ81D}uV2_VJPsHW`2j*)CcJUP)vELa2HIMlBW$U_j21=5XK(al?)qxDy2 z>Tg&)Fr&VDw26|7jt5>^RgPP<>4Atg4!a~z`pA3MM|#Ppmuf60zc-uvy_Z}JQihz| z_jHw#9(Xx@%${MbU#Va;>I!8;1^*~I=2%F0Jky`Owd};%zEox)22_caQEK21)U%V%V#e;hd$eR|v_f$J`LVrDwloRDy~bV)Cz50I(UVQQ!B z3;Xx{vknrz_Uhlrggrto6-!jZ{8B!0w-`i@B^?~4AArNpC=(ny&azPDMvU$#nt)1K zQxZjM$pRG5@-(zfMx_f~8pc$adf7}qfpVF2Y7|7E>|51Ll=0p4EM(^I?<|OVxmvMi z&J8^WX=G%aIUtGA<-Rtf?AiYF%T9Mese@#|+OdaYAAZIMzHy33n;=CcBUQ8MLL>_Z zy?h9GZt$Btasex(yGiBQ*om>QH`92ulmhW(#~{FfZBFZEKpbD5A)<(f zUt&Ncr2IFqN=ZJWxj|j-ywsDF#Oa_>pN?X2H##xq0AZK`6kx@dtOGT)W1mU#Qj6zr zYqY)Ug=FwCNM{_cF);!2zQ0hAPGKM#jh0_v1aAn|u3K{4a3XN8+!*H3k3+3r1@D-R z9He5Kn{$R@RKbUs*zBtq3#HFENRh8_oV#CP<=`N&+e97OkoYd!BT<}?L(R2Jw9|9a zX>m9Wo;|b*3?aZh08(b_?Ds4zXpU>YGU}nrsg~ySo<0q0&A1tNL3K#A(nwmJg-8~4 z)ct@(4Cb^caE$qeI1T9Z#8Sgc6C-PL^27Sd4~#PtZwFAkN~3)&`k)T;Q?%DFdo*-D zbJV6PN&Xy}BIPOm;Jj**@is{>5u|-xuiDXET!=JH-sig)WFk+l2^>cUK2Wx2$rctq zF$Fq$Xkk-25LXKF6+z8S-95>fqgs?vMn$DGH=sTCo1vZFr;ww6zXg(0xLvLu{@ouJ zq22^(z6iKl9t&DDjv9g>;l@*?E zQQucxo=xoc?8UYVc(=tTNcXLUyg&{XvyYXgH!LFu(V@0{ClAKWw~&MMaSN8GM13N7fkh4EFl;K_?A% zz7$K-d^ni?^(OLo`7kgF%ZHtZ;Vxl^HKhD;7-Phn4&+ka&NA}oRC@xsh{LQ~g**a< zx?7;|!Yeqpb&L(%Ik^|84iu{NBbv;B`wk^`TMw->_U*C2J)mTI7LrAAF7@SEi#Z^b z#`K8-Uqu?wdSHv1H6zSmNV8FJX2B<&%bb$4f35C<-yCpvB&z8g-BH8k74uo)D9$!h zvH-2g7oyMfpMdS3u_~c6I`S-$>vzNHosm8S>p1`BK70;6YRqyZi$t#t|1f6C!prlt ze4;zuCiOV;)F;x+*)V^|9)wCnQZ*JUYcYFHgB@Jx5CCL?a6b+;Vku>o$ieKL?nmkF zICIPCW#pB{o@EWnz0g&?eV$qHmCGv{8*fdY{&pwF{O%Q-VM;ntYCr9U=1@m2$a{ny zCskrZlzSEa)&l%=Vv6gjn*}ewOSgF9gSK6f_N_z-znqH?iFoKC;%)6?5{VNb)eq`@ z21z3#tRqsaBPhorpO%hN&DchSifa)MnyC&E0bHu6Ljp^BH>EI>{az# zat?{a57tdhO=l0>e@}j%aA>~tpmUdX*h;j_8G9~(qSk$j8MLj2h9Emk)5BIy>79GP z%gC&(>xWG&@Yom0L8SoOuk#k$E%?DHm2eqeL8yg=^6uVZ8r6!Cb@$J z1Rt#;s)nh(dsm-d-C<(?%T5K~%_maNndRrlS@IID{as4Rx1-4sGC<(+V;!yfpzOsm zKH(ZfJpkwffdDWRe8xvb)NJ(?bR}8eN%`=80aQZE{qqG9Ek91G#!WtYuzxiSj_(}k3;@|QL8x3z zAm1GvNI`g&Zw6iB4v(&#tG32H?jbR!zC|CfmXRE3QAh}zE$e*Y z8dVyOZ-%v+MoDqS#E13EHJjk;D_O_;N(^5wHfTb`es!iCRcVT|z!y>TV;Txmmtl*#}I&C=WB!RK|j`5ialM%+7&mA7p^-CQv zl^8cif*BO}$!Edvo|E+3ii(N=_qSXWXz&Hfo9DpB3cw;*$`Fd)F;E9>ssR24Qjlli zU{MmvL1izL$8WbsFg~w69olcU;A<7La_aIT{mCvM#Hcv(s{`O?-8!MC)SZVQ1?8TDqxs`w34d0lR0F3NX?skon2pD(Mix%^@128~4&WO6u%_2*A%e#C z9l%wk_6F`B1{xop5BODksV&hay~34i2%RkGtd|_&~QIzMK@#ax*l{v)ou%oJ7C) zj&1$98S(*FdfWQ&tSm11qz?y6UZT8WApp^zGhd_m7jQx{9u;*M3BuYTIB)PZk#kF?dG$Nyhtj#G^yCZ7oV&3iT@5`Wt z1^NMCJ0OO5uiR&8{S*;FvWHiwL?QOFtm-Q)`$5x0AxFHIj>9Z}O=#NVyunh2cga8f zQU$Za1t;tqA+}DO-#6>6o6oQ2rK{U6sXnTc-Z~YypqGGu50@90U)|(3l-3>=34D&F zkjq$Y?7aN1o_KFs$>K+cl#TgtcchGi)G45G02eol2WLPy5pv~v`zmmIKa44q-okcA zZj5Sx6MN;@Bl-)->Kv!Ln2;8y!YTQu^ZFp-I3caetOxw>UqM}nl&bNr#2R9$;w+{~rug0gh5Ib40uqW8P{+){~r+VIpxK~o&T(wF^cm8w_J-MkHu>UKf zz;k2)dr{88 zam!M;u#$8VWi@t4e#A#X6ll-qMv9+8e1XXf-c_`0r%L`5Ub3!0tem5@x~dUhw9m~A zLaP({modb@ug!!xGei!78vlkn-CHZvYvuj>YXq#1PyEbISrpt%-E?6N?Q!YpUmUd` z)}Gd$E`Gwn4b$TB{Yl~?c3zyH-F&)px=AmqAPxQBT3`d-el9Gb~E;sV?5!tMsN+9RdzMZ$F+odE${!^eHCV5ILSL6yiIL$rEaq z%UbDsfA8=|o^&8Elq`ThM{9~Yn0nI5K|!gtP6p3B`1)DxyBprRi>U|4mV3YBZgsE0 zOH~Jun=g#1@bP8Rqa>?mW5j^B`Qz!?xHiD!UdHpdtvP04S8{Td)PE~z8pwZZh;H<$ zP=ttmlVIv}I^IflNjHyd)6YZ5>|Fp1Y-_vNM)3^~J zwogJr0<0O&!ZU|$;9XZM*1$p*ivOPrdC2T1hl*AcpVu&0N4B1O=E(Ar=D)>BgH&xrfKbyWkPEnMthF5Ykt#& znOi5CmzfMlO_D9BUBNKme)&=~4pWBNHgx^#YiPe4{}WTMNlhCq>|o|F zBM20F4;p#1Vcb;9qN4?tr(80igB>n>0%tIt1#P1McHKUZo#3AU=L+MG*gfR}eNbV- zP3Q((ugOxhIHmfT6Dm7ra13_z8c!cfo){CEH6cLO9zYx(BHuWiiPW@RZxsvCFu^^l)@q~scC5e^SI3#9!Jo6pY zWX>~07x4_jLkFpE$Q3CCh}pBH?((eWueT$Ae_36S{t1wEun=)OU1Ve=N)V%-CsLNp zT8Q|580hfx&-V^JDS#I19&`MwSCn>8NRl7<#-Ljmx3cN3ZyGK{Lk|ZS3gQchRs1&( zNzW4!vkiCdb8>MB0Bu{P{;iFzt%dooVG!b7k)x(409?S&z|&fZqO9VwkMYW?`3J_w zS|t{P4yPjyA?kUt4^9+U71`>ACQ1|hoVs$t{+z(?!}D(me1egGfoJzHj!lTY0Hq(U z|2;7_bT7bRUsNr{X7wu|CQ#N4Ky4`T{xX1_Ia*zCU|3UskY05P2W>kJz&}m2hY-J0 zmDd(O86+s5fGYkyaNn0%2&m{2Qj{5`5Y9F+>sM+(wrv?p)}I64V87%p8NO`+!`bN> zNpjhGAx#1GeHLfu&MzGrsI6tt*?@lK)m$L0WKGriy({+g)SJG9BR3HiKyfvvI{QO` zWlW932>6dw`z@z>PxPAV1?k59@fZ2_o@V!c7sWivv+FOX;3AZil#~az3YpOT1l$kE zE=J|Z?v8Z#O;0lex(U@3;K5lp#ShqCO81*gc{7ufsp5zlhnc>|NRI{E-2IN#GdzQ4C$)7*4u8yVRRf>$E@&$r!V3EiWQ4 z-Fojn?U!p!I1%{ry$%rH-Lf#$!GK0)zH)q~wBzj<`vm4&U%C7$bqM^8)+5#60#7cF z6AN%K-ANkwnK)9LG(s1>S&R0R+KH*q6qEhNnydy`?-vOgo1o5;bxOL{uVf+}i=)xgsYi}8>=*{Fc{ z;=`S1XJx*9AN=p52wx#$kd1%#p%S~z7)~vvcjHYSs#|sDNUjJhX7t(y(&*3mrr2OHo~U9y zQDGav8Qb>O0Pwjrx0Ttqmx~kL3kJ(8CHlUjh!LmX@!bKkJ!C z=J+dch}k%V^~zUZ__@K%N#jhn%N5Lc>1lGAofrQmiRXcOdG9J}8#F4HFqj{YG_Km< z;DK7n)_7vzU&}AM_<6kB32OVNX;et|ulb4rP*iR`5@>Vcz6EomTg}# z_64}Tcyh!gCBJ}ibVh_#y# znZ^i===!*qTc-d515ExXG}w)*$TpyaqV=MtW2`wsmZE(*u| zsxNV~2fcJA=%8k2AusRoDufI(3(M=55<=`bIQar_&y^>-K{iOB!(gszO911z7)`NEZRd9g2XhA(9DuxcB&WDIZj^{;gQ+JyzzIA<@fiyWSWJz z0-|3GSD2WpWj>UAV?wvB&K${;GYf_^n=27&IzFlO>ENjVwE6k-4X-`W@PhzAD|%TP zpUK1XvTqBqqQ?RvfAh2E7Ri$$%O~u)tp%2Igda@kUiMpxq|V;!p&B;sEd)AR&|wp{ zr-6GVs`Nn}9G(hQUBWURTsrdT-$d@^!l0?yz*lQeXjD~?e4Fb*28O5{~OUY_WU0-$GHOBWB)*N5WKSw92X!3?LK+4B}!U!1PTFk zvbcJ|LI;>u!}9PXu>0!`@q(*V z1{ANPgH80Hll%d*85xkRtGu%r+i(akQ3ln!2NII;8k`Tlu4eq_tteG^3-&>jA6?_S zRL<pt3PH;yJ00hBtp5UJV^o%y|RVW*95)R(*hd`*d>kJ>>CmeQNVengaA|fC#Cz~pf$O{cG@QiQ~dPNy#C^w;C?^e~>KUhy1Lei0r>2?7X6 zYwV}aL4Zd6hKhw006mAYEv{3Ytoho!Qm0)p!`Q{e;livguQ^>K1 zF_XsU!gG>QDO>PQmydTs&X1Uvy@_hsHHqhY)kMAxVWpOYKFohSfcCax@XI6!%9W+K zCJ{Y@c@oa;p2hPws1S)Nuq==HZ#;joS^ZRyx!z#!(?c4;LTUaE6+DtK4<}{Y_Cd0S zy!^iNKHD-}jj6fk*o}}Ha{gH&_vTgUS z$(-+a<5A*^(3jKe>4RZSHGD7F*tP!iu*wN(x2{x$hWL^|>zHdbW`&5;3Duvp%wAi` zC4D>nNu3m;GEg@fWO(cK+8@r1CmjEL&e-Zuz46Vf7vPe>O)Ceb3nCbG_2P8B8w?~q z?7e)RVoOE>V2;tsc=Gx+A&9vXY{$!onwrwAycfXN>!9n-c7JdCE3RVS*bQ*we+}Qc z|1Zkh)TpQUJ%gW(Tr?cb`m?z(hld{iG5G)FL8)`g)F;~gB+p6j>rC%74{ z3lnpujKEzi!mBm&(qI+>Fi<%km_&h*GKQdHpyTU4fJf@DD)9Oe&h;W~UQnwv|Au}J z`d}s*1;#SVPxjZj&5V}&Q7h)0qR(R)Oo3L{)evu&z{es(_Ttl~>RfMz9w*iaO+_tx z3|`58NWP~^GINl{Bo5NHMSFR8LxgnRyeSjMZ@*t}rxLG?bhm&^17ZZ?WV1#QEB$+G zZtLopqXfS}|9vp{6(y{@(IQD6WX;CvTk_~tMx%N7Y?;fo)`ONC=M8=P1I)QbcvMoV zPRFZWpm3j^tEQ9aqJ=T6$A7v7mX9S?D<|9mH)Ld@S-_;o=X_%<}ycO6CJnt>g=se42!VLXnk~#Y5ISwAxY~dn-x}l`e`f zVSZzcZd))0lACrqaL?Dhy3hADxEvaHUPq@~o0%r`UAg3;NvZyVwg1XJkLf`OQ4!-r zb37D0RPNeL2&(7W#;$5@g^REmsK zk3_3b={mrq8iVL^t-|4!)mI^zdo1L06l-%tRsRe#M zH+Oe0iKI1pMIh!d{RJe);Db;>Mm(g}_}2Q$ z3KSp^!iih07l(^ZOH&RK#(&sU>6$WjN+Ty}S4Qiu~r14}3cX)>lmSJ_#lJ4@k{QdMw|+jhH8+N{UL^ z^TUr@{8HK~H}&qc##99d2LsXy%*uhE3iMn`m7-Q)z%~Xh#T^;Z`H>)4Dql1470~_j z_JIp~XL7o&zvXl<6n2(3M7vJ@5-udXue8YdpU`v#J{IpD{1OkoCu^MuWgJM0%=HM{ zr|)ew5ULFkSI4r^JL?D^AUkcN?GRxtwUcsAcZ0RnQQq4gkfHCgw=dZzd=}*C)8(}C z6d*}axP4ecl1}wbg;+dOQ1nt<==u0E{X#kQvn7xachHPG1&;v&_^a(iZ5ffa6J@X? zCrq4O7KVx#%K|yh(U=z?Fu)qaBAOv(`!K_{b;!u{uEUOmZ`=XqDTWr(ew}Re8cE** zj-h!=+);Y}(c#Q*aYw|w$RQ5#MQgb-nKnvlKT%1aU;5%{kn*@NTA0aQ>(CajK*{4- zRyG2Ore|C9hfGQ|zs4e5-4j1yu(4x%+ zdgc_cvphiGJ}SU4_q_s-kHMvt=OOq+5x_8N#m9owRx42kJb^#(fWmeHuNQhZ6ZCJK zJjK4q^KBC6zkHY?2ClK2?>uR%wXs@oVZm+(TPELh1GR@fmsI7p;HY0FB^@Uf^Tk=0 zI!6P7`-D*OHzutM5P1lIO`^5lJJLf5A(Ig(>w?htT;(+ynTcWx_Lwzvo#&%FoF?Xp zf=<~B;+pDy9KSM$R@!oukcW9;jKk>nTL_1>CaI%Ul8cuE?()dB66FR^JXFaNN)yHE zp-;c85t&5A`cSBok^iR8rDmLzspXu=YwoaafgL}CJ z+d-(6HbP3Y8HAqY?GmYLe*Ji zAakG1A-7dmn#kKm2ul2*emWh2(CmWMY$fI2LQRFPUe6zY^tkSI0_Obll<_|<-OLGa z;Bqz8aH)`rK>Q%wEvJg?Dw`X#sq%bKXLB1&o#U=l^WEfi5wylstObV*9UQ=&(w%lw z4$xv}ipw$G++ZxAil^K^CwF{EVd&FQ8PKH#8rewElTh_#xZFk6}j4=AXKJ_5&!W3PXDV`3CM{qKW#)92H&`kS?a|?DA#x?y}XL z15`>A2(AIalH4#KH9qG>Wd?;LC>T~hjcTAxeF;E36llWa_9PR_7R&4=s5)lKi&Q;b zNMfDZSKD$f+aR_?>=7)Uhf?_+$i&*e(?L0cW$;1lW%5+r+inka^T=dEyZzV;6C9Zl+&kFFm%hIovm$)ljoqsnLrQR zPtVDWvqonbwWxg$&SxLSM5fPFJWUXZK;jikK=5giyw!nylV7$rmg3Mve`+@^pcm9! zAJ*VvL(@}^+fAF`puXX+8dPA>otV{$7T<^=_;&YA?tL*=T~0zy4U&t{Z(Q(M5i4y% z+D3zyh}pJEzA~A|Qa6SF^(Y;G4MmPGW_EU5>k!@4v!F9&mC?2l^H%yJNnXc{`6d{(=Fss$bgI}e59DvuGZIg$%|r(Y9?G1B7Ah2(}kqS&_7 zcDxkL!h4Fr8b4I%Z~{YK@M`>jJFbq6jL_gi!wDfJ2A}*J8>PUlD%I8+KZ4sCWVb2+ zw~rrfiXH3|$E(=c+4WjJ<79h*19>OJh!I}2!Lq~1F3h2|;7glDPw~?luC?RB_5I!9 zQiSX5mL8Irx#)OeW@OapX-g}cf7WwGK|aQ`ev=7KXz4{0h5@3$k{1-Y1O%6)$z=$v z7-S%|Y7W!IPt3q8!LLh!YIi34&umho3X}I1Wm`M(*j1`*C1uby)64GOxQ6y$ZM0dEuSqf z%b5MO&6=6^!NEarpY9iMz0yG67UAJY1paSum=`nlx%#BUn+$nG4(UVCA+Z`Q9Wd;U z)r0_IC+vY!o74lm;3ViGT-@=Fa??TYF%j8)sB%;79JJ%dG)gP3?&;h zAM!I{SDJ6-=!xElfy$tEfcpSg>)(CPZ-+%75_NqJK1&xK**#zQ(3|Ve7LM2%&y8M?R)+76+o*m(Fy@KpJT!v~*WbDKP;;_)7cwl9knbU2gTMr;f-atx>kiDY^4h~)R= zr`H-jYme}~C-^fJJv`S$#k?n<30|?;ENn59#U8qddd|qB#{gZPmGxd2o<<8GuHZI< zku}s7gW^cjfKIYq z7iJ>74if)4kKfz2PXgvy>WG_7v3wr~yqYb(qkQ!r`L6S#l=xp!Kn#LSo@Q7G_!pa< zlZQ->X0CG8r9mvE14?8m2pY8l*DEtqzVYx1Kca^_G@@xBvw*P?u?y$p^TaK6aS(o( zdDfjWYK-(*jA*Gfdu6Sh(xZN+NJqj?J zxN0J`b&M;4bZxpxn(Y*k-Os=f#Z`Z~|Xv{zkYAKqLy zr}%10r?5w1u1DiN6HLL*o0a+)+{f>Ex$i~bac>H@~` zC69cs_&)skn9+TU|3GU5CGuE)@L%E`dNDXNO(Sym**j%Xe#ODKn@`lIw3GjVdtAE4 zc6N3MbG3lcfN?J3sZ!#DucE!3opg%DI6-$5_J@*mppm^u z?;+eLFSuUln0i9olD$K|E6#N78r%c}7D%;SdMM%t?JmcuBN3TtQ9>}vjktGdN2>?_ z4!T@1Cn5ESS`bgekY(n|1vBB?AA=MTm3&ms>(015&ge$ zZwnKN=$-X+ISVaDIJn)W9e_#5EVu(zK>nQ)L(oZHXE4~ieyQ?VSM-;=@Cq{Z1vU7; z1!Q|)6D*KzoAfn%4)mlm8`jD3hnI}w8#F=tH;mpL><^>X6U~=Dt`%-sXb0I2V9Mem zaSbS1RdSpQ{_>q=u|GpCtV<*-249qFW=voKQ>>bu^nju>sQleZbU;$bYhJu*YN8LZ zcM9qR&=TS^2OUq3(JRwqyOIs)c5<$@JkCO+==Y+_-GbecIQ%!~AsR2f!&}8L8F_I8 zJ>cw9ly2x}&+yEMwoai%*Vk=`VDNTge8@qdu^IwK~4Zj|RCGk5TJ4NFR(a1F```4+@fjNjFeWE@&6LC1b&DjF>l6 z9Oz{B1~_r~H{!_~5McV(F!m!z`gg)O%rr$57Z+Rct3QRQrZ!oS*??I;ail|O3GFl= zgIF^LW8jX!B=R<>X}N_Y{JuH|&3^zqa2(;K0I$unm=8A_x$CYrg* zFv5p6FLtV_1;9Fd-j~oJpo)7 z?~;1vL-_#m)obdY$YwpejsQTQVm^7rHQ!!yZh;O%I8@;p@)zd(cw6=V-!AcN8ui%^rd62@hcdD=We1}$B zoz9b8Vx46TB8?)XAdrDV2WOr09R#R_R*W(8w5FEZpu_MNz6aUZ*mw(qpghE~9K%Ct z)^JlFR@knpW$TK9tEC9ZR}bh&AmWi!zo_XR2g>W3YpXH_?0t*5A_q+2bf)-e-j%pd zzZz=#1!Z|5Ke|U+?(c6`15-^BX$5nXo(R*FPT}xF9tk&7#C&p5}`%1mw z%IF(u;I6EXT`se@FACs>{0pZB^+Edch`>I1sg~s)cr0xd}mnthh zgxh%ao9QawMwt9)!}|rv$)Y4R2K_!9(_z^90N1l8FVQUXw_RP7#S-YCZ5G z^&nNGpny`g2)j~1tkLRuamwlFL%lsDhQ*Ej6eham3potl!kK5|=8Rd)B(UVTQR|yBY+%>jY6(oal`#~xYEA`64tDNs`%B)+(GK`A^G)_ zqet4O?8qgarQiwkf!i1AwTMLt-(5Hi|IAMh^(L>&^^+wzNBpqm#|_CS*%tqP!rJ%0 ze|QcF&sJZ1CH+*%r((=Emom}KgR8@R(n!t=tU6kT9ZJV@HNynEcUiq_oBV9X0?02v zsA-Y7oNPxf@k`M4TEyixm9Z80wHp_@wa?mv^BGUrY$^5juw6aY3behgd^VyC`OQqB z-jhzMLuuw_MS4V#``wwxYyq=pxY-&Hw1wIPiT@Y`c*;TTr|Lj({sp=mzf;b^V2eS? z6{K!YOp5gntnc1};*DNWEZ~uKOeQf=1)enSm|l07|AYhf5o#wHeI&M-Dh(v5xe|zx z9TtWC-MlxR=2vd~X)PzC3-WXRM5H$K`4jnzoXa&6f%$Q)P}!PwzqeOhBK)n0>T<8M z5-BQ1o@5X$bUlr0;C?oXL#w^V~BF9eoaU>PsNJ+k09)VP`r|btHhd(~zq6$XUXj(=D+)Mb8ZIY2YYPUhu!^fb3f>~gkYB%*^juo> z(d*?C3W#pa#R~*WVflMTHH4R_`4`I6E*iDas5m4_FpWwLQn5mXud$@wAM!*5gaX6q z;)E+l(vy#-X)% zAy6i7DyWYPWRT6E2lmeurRB?t-99v844^nn3$~~yL|KDO#Ho^Cw~qTc*%~>`?xln? zBn9S##R^n)pI&*Y4b6$rCR=9>ZJJ3)Q?#ts9`?>)dRIP~Xitv{epS@OVe#r0Jw;Wt zqG%)bc%AoHQAp%}^+v|E!I(MhjdCH|E0=I;Y+`utF`ZeAo+xH^@n5=QO*E_8))*le zQEMvUeS4A=)dtGSpD-?PgE3$zc95<#ued>UbNspiH1_AhP}pBTqX=`L+p? z0ckN^mOVeOg)MdPMURuIPE~ z!=;*L5wz4CHv*g0dgnGp0o%60$~ze`SHbkQO;1NDzcfo;8JBC)B%Z{i1kk{ayEKM4 z66Aimg=hciM-8m!H3QIx|HpU8!oLOm8%2}!eEzBo zX2{=zm96r?Bb{z5=O4p9;o3gzq}$;XBT9QV6AVk)L#W}iNX$>g0H}CD9B--{t;Lvs z$$|7mjdN=<`6T?1f|LOzNcVS$tSsrk@7l6Ugu|g#Z;#b$!bn>6u7*6MgomOsxI>!W z&dnMBf1G`JIMi+Xw?v^rLbfbr86t%2`@S2b?8?4G_AMq$-1h8Q$G(JQOJR%>vW{J3 z3t3~VVa$y8(tY30b3gCz`MrO<{&Ez@;d_0rxvum4oS)^w8D(N%V4x+--Knn`^NlxQ z4o03}DtdWZ^xpzugoSR)l8Yfx?AkYQmcWdbL_&@fRuc9vi>qy%M^5so2do=qTi(dFfFn%Z%P( zfC0Ewsg>pb3$h{TRBrHv{rqE#&wLz=s+sFUvu*`ZGEzo|e1xb*;&U-1V7 zwm5*bb50KW)oR?lK1GPYdbTXAn z7d@|f1yVaJCBUL$UigMZ8ygX^B|%W#kV@%B z!N{hHOx__M-E=CC2nIUra_^+MP!u?q+uj;~rlY+ruN5d=U zJUBmeO3wqq4gBN^;ea^60~|9E#cEuncA%8Jup36e)oYhci`jf3Kwo=-RqU9Jz=}XX zYjcVJIhcw*pY6As#o&L9YpQfE^81`dHd0K*W!#XpF>gu^OUTiVU$n4 z12$jqL3(v`HS+H1mqiqQ7e#s%==TY{&Zo%_ZXHol=4FTJUHLT326>^wEd_5ECVjOb zSI7`f@ScRy%Un(iPesM7st+IX_O>p2KeOfKwke(C1+=}qlmh+o*y(#_yTIw8ZJ6S3pB82{PBY;! zxA9H$eLSiO)*FmJFj#tbd%24RJL&tS8vLzMZ%|ebdLfR_^Dbz~=WTFNpayd8^4mGHyB!GQn}F@N1`_ z5BNFSUtozlQY9vluQCgLlflaHqKmG{{DLM|UemcP!G|T}pQI^sZjulPoU8suEF!FD z9{DEG;`BUW69FbLj{H6PlVlVRcD&K@{*aQ8+&^A&fwDcj`K}>#M1NAt?XMm8ha}_3 z0@QhqbHqJ4-S1b64gWP~N>4;TI}BVp6TqYEo9DB`JOLCE3dkMb-T|wfLMFB|*+ju4 z;66Vc0gQQ|1X%fcO*!$Z0x$0P!Tzt?OY?K5-{CL0WOw$!Pf;h47yUGs4M0 zVrM>?>S6lFn=*u`NaNc1W0|(|&-J!hA@#F^5S}rb=_mE`0Zd3tukIh!NRNPs&!xdz z?vFBPh0RqPTog+g2%xWadNt>4nff*h`U&KpwP3qS-RAjt0ImY1E{TSi5S_QB0u{xG zfZeixOVJa$dkMqOUUky5I=&7omLFe?zg7L~^4?NuwXIB-S-~R6#{e_{x+7eUr0@2x zZ*J{W!Q+a3DRrs(!mTrQ*HY^cK9MxVOkGh){ZtBiq75O(pw#I3Vqo()1BJ|SYt3Fe zw+1lU=LD2Lm;g|}x@|%4&jwhkgE~~f6kNe~cHj3$SHh3mR~FpUKMMCJF2c}Ory(^c ziPQF<*pKj+x~IeU-TkU#GS_~^s|ILFai5bTH94GmTVbm=BUkKlbN*cDn~Pi5{9-?@ zJRhME@VnULNNeGis%02<*DJ1IW^4W$3vOb80zYDz9W5vi0akLMk6yjyyCy|KCK_Bf zj`Z}qEYID6k3nFsuNMz zh5O$zGFtFOi{2OVB!7e4*NNV0a{kR4W1r71{0}TVIRAhF!aD+bO22d4-Imz0qw&T) z?QCp$0*)fo>4F)jTsVcLD4Ari5QzQ+mOg{p<{3)jf7S=OwOXnXkgN2-lbH>eeDArc z@RVrZ%i%2dO$#621MPb7cGzc@!T;=@)HRQc#I?4wiQ5H08w3b2JJX)1@4!+Pj8jFe zjK{z7xZMSjzGQ#**!XbUa_(ZeMrqVCH!YJl7;L2&d$|YEO!G<$1gF`80vfcDBg1Ja za1o&GHz|(y9*KDJjUpR~{)zB*;)H$?ZN)Jhk6AYHn4w-gy_}*=rpfg;ZEQ?fte^aE zcG;;K#Rn?R zI;%Xh5+;c&qIaaxr&c;D9rm)vEsg#?c2%)=e92<@F-Ph03EoBSS?ubhpMIQ5*GE%J zMw1y4OMfAnnw?#4n6Qu>*x?lcpztq1w34d51El_7EM;GweJC$d6hY5hNPCc5uQOJ# zP;F{nr5f@^eH6WhVQ)|z_}MHNxZBNj{IyG_^GsFl<;swTU{BhUp7uVz%OSP zez+j=h%7CA0h<+zmyBWkc9`ob0jCT#i|mjZ_yaMz+nRS->KWbwwlP(crDSe#Jif62 zM;^5#OkFABze-1(e}S#s@V3%sxQDos6R|>`P3e(mgVC*c>z-6fej@*rn?-WYr23Wh z77%TYe$v}CTQlDlMP-h!o?e{8ZfQ*{TDI(y!a2FQSiTkMb1#~&NH$*XLaHGe#5aZ6 zq75{DP)SH2^nvu+P-a#?T2p_{>-^gv?Yss=x_`bY{Sno>dUPRtEW^xs^7^gwUJP*&E< zihyg}bsc%6oacFGw#7f0mBerNJPT8qXy;2idP0)+myqbrXxZD+UOud1E99%rr2~3F z*!|%Iw#u2r z);MCE0gQn;^Rog#ddV5W9{{hDJ#cv`6ZkawaqOB@Dx*+vKL7rUVDJ69l4@h3hXy7+ zi?lCs#3pR^0^z>fOS(WsVfw$o(zbg4#1xqipTz-G`SjnuK%Pzb-dI)v_bE7&i0O*!YaOaD4cUq+86)hZ{ljs9(X_CnSX4OcUS=riNT3@4%@~#`GU=@+5`O-Cp zPP*axx))R8U4T~bb!zISwm~f~7%+rMp#mkNL6>r77&l*Dn!8R@_v@jiMqRV$c zdTe0%MF1%jIYy_{+EdSb@Ql1}`7E*GLA3|aQRYIaUs>f@XhhYKTVK}KsO4q6{rA4u zTPSmNc-{2DunXymu@#PL!hRG*a#>)GJn_MW$_><3(Cq0-*5aF*H)E+@>C0sr7x-wU z_{9>2D870=dTut9k|bX(yV&IJ?W*dr*Eas7zOd`*ronsg;LoRcBm>fJND~G7a>>fG z0x;w3Z&bZA$1K7dXD4IDT(AA06>srOQVJ2xeGwi2Q6<5c@po6hl=k|T$G*BlxHkgDz67#_-fcK7DUtQ^jIyw;jC>Fz$+T^au$O1nOD5F+lXSQcBg&U2ifUsE;?T3iGie2`$c)C z+1>tVs#|94AJj|_POZVt!T84(n6VY??bCq$9Dd}lY1v;EZJjEq`gBPvxnlhfmXB7- z-8ux-xAZ>kcFpBJYc!IV|A-MBiZAdM(7RBx)g{Uk^JYxA_vi%V4Iu^^oG0wYpIA|z zTuFBSHp;I!Ex%^J_-yw3P7APO3WCM%3q`#<{dO9^gbzF~i!{{}B?0y$HpUU2@xbZE zpknMxZLD2gcez0+WkKDHggRAjz&iJD0#D9p9iyo0ey#+?u$zm^Jfe$EF^L_ljnTi> zrXQ>g8f)Xr9S<|#H@5a&180RLuG9B(we+EG%c1xoqq}|jA2h;Qfnvg)YV~P;@LR=g zKg0(@wjs$|w$a}%PXqV^`MO>p)7rHe8k6+y94kxN~n@$Fi$POemxXU-il;ONRqqBc@* zPu=0(2T;3na!g$yJv6ffVNRsFR@Ly(nY8_-z~!!g9R}`$C|-%fBT|#J7c8d|s}H)t zuHc$GY4rogTM$*_;M7ZY?hNmFp`>X&KE}#MA|BQ!s`XR!CIPWV!iCv!wIwt^Al*}I zh`TAV-$h}Y*7(EIrS&#%!-w@?FKrgnpWa=&-9Tn}-0pVgz&9W4eZf`e`UhS`iJ`l1 z>*{U+NQ+iFwuUZ+L9EY;zQJguXe}}(8tJ;0v>_*(yo$YeYEiviuYGZX6#U&%sGZqs zMCS-hoGTlYpy8h6#S&Gi%_4kFDre*Pb7H<*OzKJd>*kk-6}#j%X2W9{k%QMU3P=ge z;zC)ba`U7UYOdfQjs@B5!3j-&(0b5xv|nwpZ#?DbPo76a$M;7e35Q4(ucEVJRf+q+ z&7uNMnhei*j@iI*!K{yM=jn{37*lQk$AC)S0ec1!rFuP7|{3} zl|>P{(6Vq4TY+P|a!5V#+iCD6x;CQqkCv;&Z;OB2RZjwjtjE|DSrlO12d+RfOTLcJ z${}Fe$L39nOd@|CZK?ZRsBfLiwa4IH?6$}-7QB|@%agT7?Q?1mQ}B|TBg^a;QcG4<8pOg-uzIpnsk;R z$f&4A&psXB@HVL$SLhOQm>76_L%ML(DU);41-i3wAOT{D=sr|T2z27I?t5UHr=m7VBm9fjZ5ckb8~OhHLfEB5V+3HVMJUrme4aOfMeeXd`3)M(Wj&` zR1m|2%JP5eUtk1l)>oB7!J$as;tgjW>w_#(ke%2^i6O5~&uDR_nC{&V4N zT?$v9CVmGrY?QUxCF|^)Jr!+_>TG5YN+QNuB;o@e6pqe>?p#hO>`MkQk~ML!?#BmG zFUGIzR$J}@={@KVYZiVch?di`PD@NyKAHAOKHCI;` zsS{Z#%SrZ=QhyZ&;8l@7`9SDPF(4^7j2dAoCQ=E3lJN_h6fG4f(b|XK>?%1nS*`NE zAw8c{NFCv4pQvC>okFO7dmQq;<|gm5TlBFhaT8Lu3ui8+9vd2}8WrV39cN~1C8u5`I&B!Y#wiGqtWqt_9S$ow^Zt}I2E-h0ldVhRGL&}&6Q1VKzvl2sv6x5;&GvB^K zmM^=}e1!+xqxe;tOG7QC5gSA-W@h6zLq?ilqI3+k8she=i$%^!0T|A#+2_eRiuWP! zNRc&>yc}Hw;1RpdwO;YkM|~1tCkeedR+yKUr&>7lYCQs$bVD9gDF*0l-c^BqGac*U z{`HUuPuiBQaJH#%u@wk0tJHh5LNB@O0JF5khEJCg-i)hN6`PSgy?2p<^KxRy!)u5l zCWy=H#GaQn%-=mdo=9LcQhl1^$oCWX(mT07`1)OHjw6EGs#R@&dh9KCO9S#E0{r(O z>x;JA^4ZG{#ALp5ENX%yi*8Co4|gKtkouV}c<=#aHs@?2tZWXc)#(y-tXXr{-!9>H zK!DO4D$G#Fi$Q47S%anmP&0#9e1juFS+zTE>UK4Pt@D*K1vnY3q5xX+YKoU364$Bn z$V3-~&r#|UDK$@apsfKVqg|RlT^?Z^xrDc^7Ug4N2R`*g67HvB3ROG)(aBWh)X+lh zq!JewL-~w`!LELyCxj{E5RUE0{Y)Yb4rb-y_>%!Rxx!QxwV6&@z+3wFv3j?6h1+j^ zNnv+YE;0tbaTjd$s1_i~-2@v1>9+)hWP>@_ja^lvWnHiYA>x8VSQ=_-sU~Wpomg?R zO*{xdzoeZ=U%%-5>f>D}ve}~M9$FgMjL*mZEL-$@p{PXLSfJmWFEvNa0(IEz-1rdF zZ3yI5Ecjeyfc$XZcRxk1VKS6D-W05@`ouHZ&|Wb~cF!nQC!&lf*&|RSN!fodRccak zwM+1a#vj*1r8KVU=QR*<%c=2W}hBkLVWl&dn>$+&NHv(h5qY9U$peN&-w{=a}LjEDse77(Jp7F zODsva)R3>P@%mLrh+(u?zur{xXYpc>46!KE6!xwp6+s22(R63qE%d$PK-ejZj!0`< zk}`?-4z`L=Ij$fy^f*tI8{2%@+deG>xbD<|7_8Mtu^j>iOOQIdQR#^P3UaMtApSmCJV28~9j_I^|v@PnfRC3bBOOFq+p5!Y`<0dVKMUEQO$|P*S890E=LtOR35!(1vm595d4|dY~Lr|sp;vZ8ZOk~0&=gN zh3V+qqhtq9&uh*ax20h*3uhtfa{3vOOkx3<2mopXqnS;FQ+p%Ll! zY+;;I1jlwf>)_G{;PY%q1^-c|muM%>tX6oBOg%}w=aE{by>ns0BK0+g0(Sqr>sEXk zQMocP*6g{whpK(>f>c{S^at3fjJ`&!AiH`f=qQ@JPLY%ahsfXLgN}oZiQ|q^;!aqZ<{>AWwn6=tOUh3M1&|Hd z&>1+_+`U?I=2it9*E42Ue(Fjy7NMA@i|DK+bd|ee|LOsQzD4Cm30 zA4IWFY4Sayd$W(_Gdca5yz=32AR%5j29VFb5>;{^>?i;JiOtXO3FQUHMiZCU4FB(5 zS-Y0$Ud6e7m21~tH4GsqVj-!7DZ@*~p=3SJPs(Kkrjc`bV>;z&UUSD4V?AXTS7_US zI!iIl7Q~PgK-T+D@iUV88rhzHXuxG5VLOtw6q^vdpQ6I8T{o$qrruzb+r4qx)jSfX zyWl92HR?1L^?%nZ3?Q5}$Ec!V{;G6SY^~{=-b$Z+CVcjzi0->xH$W(jukRt7f#dX! zR*Wb4D%MJ4WPsLZg$Zb$L9k+suy%KCY+T%xT`5_;J`CV15J(-28Xz8zGt27nhs&)E z7`YXXe%%56H2;1@v70TuZr>MPDut&Nc*}@PCDCB)>@d^m>y5DfE{C5pj4rfK6qeiF z)32?%QF%|enN<23hEf*OI3`)gE-5`!aFow1fs}tqPMIdv;0U`$RY*PNq?We4G(Z*3 zP)@C$UG*Z^`4;=(OI3P(9v8drxB`POKYf=ffeorpcYh~aDpxZ0Iu|V_yP(MHgY84t1z|Aor5i6+1 z-CgVQ_bD(UY5jFN`;8s6i?T_4l-)z#e=Qz1cCftD71;bf{$9+zt~Y$6V1FWmM+zEL zGM-EILN1;wp?+zXR(9hW2Xmp^JS8Wq_wzomE z!iZJ#TuEhMzy_0onm!lg;`$%Qnhp&TDt}NCI&X%IsvND6=LDC>X>f;AVs%d!`So8L zzDEYK6bnPCJ$HAyx|4osSs;H|mNLTcU9eTy<;`)x8-*08K;=I^qXV7%blf`jcyEtx z;uBrzw{f1Q(+9I^~8E+p{>Y z7-J-6y#g^2u~x@hXi_!o)F7d|-uc%D6&mE7tX(1$6Oo~m@_K&SgZVUi1CF1BuV73k zE@Ub%4mNTQS5BY2-r?r{14u_2hL!dj$*4u5$;g)5l_aB8HdPv4SDx&| z^%VFT_20z@?*WFJ=jK#Hxon-4|EkRWOQCs<%HPDhHorBNk2(FB`#M@~Kr%GBmCH`5 zD}6wHW+oV-vpyNeC>o$!b#YDf-o5QvYpv3^Hgplz9RS*E9jt!SiaBz$lBipSBtxbp zKJ0fP*D-J$`t;%~<`loEHZyo(2*tkM7(9|>S{5E5KoV6*6v;_Kt)j`^l zG-vr`k9M-F6C81!_Ray{=>jpf_-mo8pNY=Bcj2r)MT?d)TBa$|(S3R={8t4M`-J+& zmP&(bRj2Cay9S=$eSOaTKl}Pm5EK3+_BCnqZzzyx9cWqu;%ES#TH=U;L@&PL%Jn0B zE*7tz6fUeCs2h?nZ0cO|&cNp0<@TCI(9&A2J}^ax?tXT32pjJIRm#J+w^QAO@1}V6 z)QVwBAYMas13Z1f+i-bedp>=qBHxE@WfA8-(1JpBDvtK>8>xRT6+^$P(2p9E=X-fJ z@uY;cyq1hXKiTE21oGE@X7A*R)j%fMg)3@<-R2J9Rha&}qm+ld);_lFKH4M=y zQY&L4kxeRTwoBu;iWX)OCsIDU>>TY{7Aw;yB@A#X@#41;y_-sV5A^i5SMUA}`G8{c z%NItwx3NuiPWp9E|Lz@Msedz}L*h1HcbSi_P~5z%xGU8as7vV;eB@YFGft&^b>PDQ ztxIu$Y~_Ep`oUILh80)V%nvzjrvEA_Can9uIy$IkC>5Bs%R=grJZGEZ5%?FdB^c_# zmI#zjS@tU@5q4lB3A?!Vu;*<$C*8HD3*jH9n98ZSQaBsP(HsN*!(#2{a}Nd|#LmxJ zg!f8S@mhNpelikKa*i^LuF~$Zxcv#EvvCx>=ZhTrWCCMF1W%8uIP;y(f8zh1eXEyG zJxTx013i;lHA4P4*;dJ!BM&ZzE_!)7En!%N9JH`3&q{{c9A($H0`eQq%Tn^2H`Nbj zO1Eo)b}kd@YcvK%1wN^KJb1C|*nf7VEuBId)1Bw*>>YmkN}_L{F7PL^lY(pR%r4Cg z5zyevT|3Y+%30lz}(4C46JZ{#wqW&Ha99xS9jHjg0e=xrMqhzHX`<9&h7$AfQj z9!UnMOd5-5PfZpq_+AMC=H#F)wmxmI>2XhZoV3%IT>|K1{;<2DLxvY1~jl=xG32zIyYFinDfu$>xcF*cm!lzVcWW-HP+g4#u2EoaTaI zN^@&qSPPl(udR=Z39|bb{XS%a^tCd$aXm0P8e}&)I%09ht(D5Q0fh0TN zCv;VdT_C9n;fAjSK647rO0rXBuNK{6>qaOCP?+d(I}Z1S`i{OnH*jfqx(awEZhg;I zUic_pBuug2TFS4koOFC^1ttD%?HwnPJ5xf=)YqAhdlYxDQX1SI8)``@QjJ89)bcvC zEKVx|N8%{ZWoaONPe%+!TxSOgP=Hbana)?=(3OKjN0u$!-e13bhRhr~2LBfX3uyzk z8TeYb^p^c{6P@|{rymnAOOIYU-i^<{>zakJjg{=(;Z1T~p9JJ_VCmdS&<4IaBWp~C zy{qfhYRvmF)9ee*d^&638%0~H3s=$TZbrBE0#l9vM_T{f!UoQG>#bQtFF^Jq*KHZ9 zVxtIhvKl2PU|-7j(C}`s#`rGLS&I(`K`W86ZJERReRGPKZ@&Jg83sZ91#iAT{mLG& zGRxf1$JYf`JLpaO`5aW!X^Hn~BV1kB0cYoryPTrRb7l701%~hX;b{*q+2jhxC#tYD zfH_U3L?z7^-dpiP3Vbi8=7(LL?CWd3q-x>PGzguS4_Us5870f^S4)nS8}h|B1)wDx z(eddD3irO^~l((9u|goMQ^Vj z2g-eT_LlM(0zT_T`=_fc_`AkTw^IM3wugDzH|_kmnRmn9C2i@SMFxQGzLfyzPNH>D zhtVuTxFgsa(pT91%615CJd7~TPBB=Slify(s#f}YF?qSgAIjz!y&kE3_YKMwU0_jT z#3oT1(CEqNm3zm>mrb2J5WQCFCi5N|3ZGs2iQR$UIXL_cpcbpN-v4Wq;h1Lho&jcG)4CeZ=W0YULSaGRv9@PU=qcp`8Y-J zWS_8z)k%efJ5l2rvmmVh>tYfe_YXx!Q}YYO_k7|$iUNjndtk!LOo+}?@?qY^n*Loa zi*)36NO|W2KE_xmi9J{5zk1EiRzfCM(_lRI*gw|!QS3-s(2Q~YqkI1zx8P!Eu1ocm zDZft0a(s7i@xMS>#Twm{)6>tsP+tlq;O2-^2?N{hX7Li>=$}Q9qNRcP+u~XM#`Z@+ z+2N?EMmO*bYcQ#*wqV~(6}p-y)EU_q9_TBM+rQWesOKwglLv>h$3s(rkCjl0F z$Xq3&K+8qqf6 z?Lh3f@bsSI+S@|d;mcXyeKg$T*{tzXGJ}7hXR%Z7o}J;ES;8z{Ozker;-!1>Fhjm_ zdw7r!Cvw*UgbvlXwt}7=r0FI|<}QAsQ>2Rk!jN4_5b*}C>r|i;h!MC3#2olj zumG|EB+e{@;<>I*2)Q{P(fQ|8gYi{Rf165}{#uZxC|KjJvo%Ix`ZL)F-ewe2Unr9+4AU{E z{|6Z)UeEbi?t)F}nE$9lauGKp<9$6lzI}Hg`7DBB5e-r-8-i0_JxVpPezA40G>kH} z7z^m4B4@@jfpg!Y#y8o=Ma-LWJ~usC&FZ&v3#w21!b-#;ui&7NB-UX~(tFOmPCLnN z)QKkLE`-=PQ@@J%E3dq>cEoyx>fM8*1qesHKB4F1f@1)@`FWj9N2lLCOB@?n`B?U3 z^1%!F4IwZc8WYIcXL@Lel}Do)7?T-9lNoM-;kc)#=Tb^tuw;Dv2x}(0i0diEiR(mN z<6Lm_VWV>Cw=3T|Xq2I7l`jBNBk&cyp+NHScWZ%~3q&I6Daj!8DmY^@rPEDW6#i9s|La6eI)U&S|^{_)V@>u&lQj8$Q?svF& zQzd6QQ$Am60~iULiSIt4`r5}MU6&^>ZNyD(r;Lkb)g2#o>u}YXJii_)rg8P7ytIis ztg$<-HU;H!B^Lg9vTf%Q8&~eXjt9;uXg&Fb9#$}ekH~(j9ZjhN+Rn(>RQE0+z7OQUQ3k=~^q;UFLV{{$v<}2X>~!!4UtP_P0o#I| zgwRCZKW~;!G1HbrLibkzgyA+`AZT&9KV;3#T-qzwN^%9$DI0|GswP+lGuyZ0%zsc+ z#;K1MqX&`?gZs)obq}TgJTlNTO*OwZP6jAoZ7A$CKW{&l!aDWumypTpJIW)^wfW`0 zlT<>4oeE#FXB09;6#2iqhY`~e4B^yBx)^Y7ydY(Dtxim3q1yxY8O!a#{ZgOp#V335 zM;u_qKe5V5Xo|0TUH>)(NnWNe)_6{BOAsoTv_j5JW1Q)|fZ9H)gD{BW-|nP;3hR;` z0LW^EVW9)P$>{Z&E;5y3HJKbi_{sDNIhFuf(L|(^pA!Gd%_gIpQ2VUd8c3Nk6>T}*-OXbSW z+Qq|hZj+T407^_p7yd#xK4FkcNE$D!(-|x4hfN-^{ODqwqF#?cXd^5vU#ZuB`AVEz zsJeEc;c`ypKLBd#*e`jWC!bzi>JXQ{sXF#^ZMKN-{7mWlKiM!d|2G?^5F{u%Q_leR zr{}lR1=H320RwQ|_^{Hd$LK(^Ckp#>dcuus@bQXzCKh*~^u_2a54l% z%Vh5_K95AE?A^mfm=ndfd-2{;N?`sIpNmhaJsdsyIa!Aot?uvF27D@wNue_zhxQo$ z)-PbB42p0a6ogDmK##xpvoSFK=H@U?i=#PPrIAic-{dlIIDTKALv$Qd;1M6*fFb%u zlfh2`-1y-ySk>M>3Xe5`!7kxEs^=<)ObWH+a&1$>2n@*7gfvIvqo@*~tWQaVDUP2PG$ljae2}Rm2jy z!Fy6@8o|w0U)h<*UH~Uh*>J7P@-T-pa?PF-yL$07 zg95+6-~R+hTMjeSD!2ol5}<8oY&)}FG`bcJ+sK3a;Oyd3Ld(Wf+>E|#+dvg^Pjqf% zv)}r~8YgdiwK$28-+f@%g~M-yROC-WjgskkgfHRC=ePPlTD|?iF~RK@MLig;|CXHF zTM%Z@H^=ir(Uu`R9}c6Fk4bXd1-E*YXxlx_GRQa)+o;tT|E3ATh^ekjjEkiG?*d?)XFHT)}=q zCh6B7Wx|RYV+|Pmos;9nJ7;Ic_!2EoK3ik1ohLD*0@-rSI+AqI!ZwiZRukDnM_K< z1~3{8?aXf&&HO2dX_X)3UjHf*y&$$6#g$9I8gHG%4#p(AQY>YSd$hS#$&va~Bg4^?s^)nf|yc!Cdci*&TA8C++8 z1tUuZ(;x1_0?c6fhE)|u^v!Hf#Q6S9CY5>NDsW*Z0MxK}cJ+V*&I@b#2Jh!s#M))bVs+tuR`I=K*0X?Pq9sQl=4@FXbDJh}mD&hbBk&iEmROmoe4YZqbVt z8#1_x>$tlKF#7#!?Bt;lW-g{cWk~n;`@Q=Px(^8Mp5VRajkG?4KEW?{d|x#6j;KOG z?fT310JEi3;vy|QY}9O7zNA|$qUUVRAh^ZbC3G81pB$tF0wX$u8~0jw`SDc$lL%u5 zt2m9XdlRf*GUmG`a}~Xiz2WVtnN(yS0q_QN;+(qIEBUIilYYy_RsiFanB6&)u^&B# zH?|5ykq`UY59w}Ey2$vrY>39Xw<3XZrm7GK^~c?eT8^-FvknC3{la}o@&!UV!z1+5 z62;5tUi1s47>ZS2Rj|tG$e`*}n}W9bVETSQ*pAoXLH4T+cQy?jN~kh_6Q8<;0IjeN zpZdVkauOzLRIV}v9%#Bb_sZR<5`-J$i%;w(EdQv&E||wgn3t(!L^|H_IpaVr+nqx& z{(yGZR!(%jH|@imZ9;hyP;WWKkQEAtYq~8W2$nl?2F*w4N*RLFdlxysz-N?RnM^E z!V0nD79?Hch__Qyah}-ZHh}XW9`=dPCqe)ZeD<6TNDz$fuj)^g#`~|1Xbnd5!jC_z;wDrCX4B&4FjaHw87#QV(XPq)##r3J z1k1gVP8`;sK?DQ<1GkSmmaS563y)iX=`mseSc?E6`AdY zj^EAOnD2vC0v5}9mAxd{V(yRgm0zzYiyr(0j@!=wO^09}d^6n|l*QXiE7kOU$v>Vl z6l?=vrYX?*bYq-P2QCwrlH@xVbUj1mMU=qvV7pHMl3N-*KHS@CMtguO(IQhLcg3M9 zYVj5LJ&#{MC-Z@g7cRlA#k>+t5YO}UiMHbw*euXLH%ndc)InC-bvSZW$iAE*jyg21 zmb1*Tdn8t0JwN=s!6%c*Ua5f}kiwS|?4OfL$YbQxLVR=kd)7A)cZCl#m;58BU2OmX zn*~34_*s($Hn8HaGCEtRe=5mAmw|_JFcMc zv6m%09Xb{lG`ez~V*LSybaY+gWj<8;KS%oC4{{Do$R*+Ni)K92>yvk#64w`P09Bah z{O!pHeE}f4N$g=?z+``oN}>D*GmxHr;AE36ogEB(gs%y0lZ|| zhd2~l0jYddMv()*_mwaMZXC2<$?!gZTtv<4Ug;pp7gzGV4vzVwal8gvrT4~g=+3R{ zY=1#QM8z+KQ6G&dsqFd2;&|LM3sc%40vg|6sKlh0r5Ksa^{{UmB}=(}zwvDI8%$=X zVJr0kl1m1MjSON6X~;1YE^IHB#rto>B^f%Kwlq$#tIrs&xB)_GK>o#<_ik=(dsEKU zH&*=8GJDhcPe8mnxtB&dAOGHa?N(a>nv=NiZ~ga|v)q1}m;Ub07txK<-jx3$SC;`U zR7IAiEGY{n)l%lIj)u3%xWvRU^tv*%`r!t2Gvjbh;5t*$kOPyNsBq`L#GHJofUEEI zkd#`{uCQfTE+)7yFsM1gy>KWG%%%WgzxQs-Aqg9Kc5+sTgp~mQl%I4b??jKnHi5jsME0O&RHL`dTv@Ay! zi82WHY}wsJ>mInBvIL!=I_zcemFYSou~PRD(_OIXfROn*xZeQGyCcRF5We~%ZUU02 zmnSsenhC%�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 Date: Tue, 21 Jul 2026 12:29:35 +0400 Subject: [PATCH 37/50] Spin when me --- .../com/hbm/blocks/network/PylonRedWire.java | 44 +- .../hbm/inventory/gui/GUIMachineOilWell.java | 3 +- .../java/com/hbm/main/CraftingManager.java | 2 +- .../java/com/hbm/main/ResourceManager.java | 2 + .../java/com/hbm/render/model/ModelPylon.java | 63 - .../tileentity/RenderBatterySocket.java | 33 + .../hbm/render/tileentity/RenderPylon.java | 60 +- .../tileentity/network/TileEntityPylon.java | 11 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../assets/hbm/models/network/pylon.obj | 1299 +++++++++++++++++ .../hbm/textures/models/network/pylon.png | Bin 0 -> 1440 bytes 11 files changed, 1424 insertions(+), 95 deletions(-) delete mode 100755 src/main/java/com/hbm/render/model/ModelPylon.java create mode 100644 src/main/resources/assets/hbm/models/network/pylon.obj create mode 100644 src/main/resources/assets/hbm/textures/models/network/pylon.png diff --git a/src/main/java/com/hbm/blocks/network/PylonRedWire.java b/src/main/java/com/hbm/blocks/network/PylonRedWire.java index 8594cbb72..7c14957c1 100644 --- a/src/main/java/com/hbm/blocks/network/PylonRedWire.java +++ b/src/main/java/com/hbm/blocks/network/PylonRedWire.java @@ -1,6 +1,10 @@ package com.hbm.blocks.network; +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.network.TileEntityPylonBase; import com.hbm.tileentity.network.TileEntityPylon; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -10,15 +14,17 @@ import net.minecraft.world.World; import java.util.List; -public class PylonRedWire extends PylonBase { +public class PylonRedWire extends BlockDummyable implements ITooltipProvider { - public PylonRedWire(Material material) { - super(material); + public PylonRedWire(Material mat) { + super(mat); } @Override public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityPylon(); + + if(meta >= 12) return new TileEntityPylon(); + return null; } @Override @@ -26,4 +32,34 @@ public class PylonRedWire extends PylonBase { list.add(EnumChatFormatting.GOLD + "Connection Type: " + EnumChatFormatting.YELLOW + "Single"); list.add(EnumChatFormatting.GOLD + "Connection Range: " + EnumChatFormatting.YELLOW + "25m"); } + + @Override + public int[] getDimensions() { + return new int[] {4, 0, 0, 0, 0, 0}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block b, int m) { + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TileEntityPylonBase) ((TileEntityPylonBase)te).disconnectAll(); + super.breakBlock(world, x, y, z, b, m); + } + + @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); + TileEntityPylonBase te = (TileEntityPylonBase) world.getTileEntity(pos[0], pos[1], pos[2]); + return te.setColor(player.getHeldItem()); + } else { + return false; + } + } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java index dfb32841c..908ce2c73 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java @@ -36,11 +36,12 @@ public class GUIMachineOilWell extends GuiInfoContainer { derrick.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 54, guiTop + 45, 6, 32); } - String[] upgradeText = new String[4]; + String[] upgradeText = new String[5]; upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade"); upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power"); upgradeText[3] = I18nUtil.resolveKey("desc.gui.upgrade.afterburner"); + upgradeText[4] = I18nUtil.resolveKey("desc.gui.upgrade.overdrive"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 160, guiTop + 21, 8, 8, mouseX, mouseY, upgradeText); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 22, 16, 34, derrick.power, derrick.getMaxPower()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 1055ef5c5..91b1de343 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -241,7 +241,7 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.red_cable_gauge), new Object[] { ModBlocks.red_wire_coated, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.red_connector_super, 2), new Object[] { "CCC", "III", " S ", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', ANY_RESISTANTALLOY.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 4), new Object[] { "CWC", "PWP", " T ", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'P', ModItems.plate_polymer, 'T', ModBlocks.red_wire_coated }); + addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 2), new Object[] { " C ", "WPW", " S ", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'P', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_wood, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addShapelessAuto(new ItemStack(ModBlocks.red_pylon_medium_wood_transformer, 1), new Object[] { ModBlocks.red_pylon_medium_wood, ModItems.plate_polymer, ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_steel, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index fc2f13c3a..23a087f3d 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -407,6 +407,7 @@ public class ResourceManager { //Network public static final IModelCustom connector = new HFRWavefrontObject("models/network/connector.obj").noSmooth().asVBO(); public static final IModelCustom connector_super = new HFRWavefrontObject("models/network/connector_super.obj").noSmooth().asVBO(); + public static final IModelCustom pylon = new HFRWavefrontObject("models/network/pylon.obj").noSmooth().asVBO(); public static final IModelCustom pylon_medium = new HFRWavefrontObject("models/network/pylon_medium.obj").noSmooth().asVBO(); public static final IModelCustom pylon_large = new HFRWavefrontObject("models/network/pylon_large.obj").noSmooth().asVBO(); public static final IModelCustom substation = new HFRWavefrontObject("models/network/substation.obj").asVBO(); @@ -859,6 +860,7 @@ public class ResourceManager { //Electricity public static final ResourceLocation connector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/connector.png"); public static final ResourceLocation connector_super_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/connector_super.png"); + public static final ResourceLocation pylon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon.png"); public static final ResourceLocation pylon_medium_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_medium.png"); public static final ResourceLocation pylon_medium_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_medium_steel.png"); public static final ResourceLocation pylon_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_large.png"); diff --git a/src/main/java/com/hbm/render/model/ModelPylon.java b/src/main/java/com/hbm/render/model/ModelPylon.java deleted file mode 100755 index 3fffe8e93..000000000 --- a/src/main/java/com/hbm/render/model/ModelPylon.java +++ /dev/null @@ -1,63 +0,0 @@ -//This File was created with the Minecraft-SMP Modelling Toolbox 2.3.0.0 -// Copyright (C) 2017 Minecraft-SMP.de -// This file is for Flan's Flying Mod Version 4.0.x+ - -// Model: Pylon -// Model Creator: -// Created on:13.06.2017 - 11:17:46 -// Last changed on: 13.06.2017 - 11:17:46 - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelPylon extends ModelBase { - - public ModelRenderer[] pylonModel; - - public ModelPylon() { - this.textureWidth = 64; - this.textureHeight = 128; - - this.pylonModel = new ModelRenderer[4]; - this.pylonModel[0] = new ModelRenderer(this, 0, 96); // Box 0 - this.pylonModel[1] = new ModelRenderer(this, 1, 1); // Box 1 - this.pylonModel[2] = new ModelRenderer(this, 24, 1); // Box 2 - this.pylonModel[3] = new ModelRenderer(this, 25, 17); // Box 3 - - this.pylonModel[0].addBox(0F, 0F, 0F, 16, 16, 16, 0F); // Box 0 - this.pylonModel[0].setRotationPoint(-8F, -6F, -8F); - - this.pylonModel[1].addBox(0F, 0F, 0F, 4, 73, 4, 0F); // Box 1 - this.pylonModel[1].setRotationPoint(-2F, -79F, -2F); - - this.pylonModel[2].addBox(0F, 0F, 0F, 6, 4, 6, 0F); // Box 2 - this.pylonModel[2].setRotationPoint(-3F, -74F, -3F); - - this.pylonModel[3].addBox(0F, 0F, 0F, 6, 2, 6, 0F); // Box 3 - this.pylonModel[3].setRotationPoint(-3F, -78F, -3F); - - - for (ModelRenderer modelRenderer : this.pylonModel) { - modelRenderer.setTextureSize(this.textureWidth, this.textureHeight); - modelRenderer.mirror = true; - } - } - - @Override - public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor) { - - for(int i = 0; i < 4; i++) { - this.pylonModel[i].render(scaleFactor); - } - } - - public void renderAll(float scaleFactor) { - - for(int i = 0; i < 4; i++) { - this.pylonModel[i].render(scaleFactor); - } - } -} diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java index d31484758..0254e0669 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -17,6 +17,9 @@ import com.hbm.render.util.BeamPronter.EnumWaveType; import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; import com.hbm.util.EnumUtil; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.item.EntityItem; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -28,6 +31,8 @@ import net.minecraftforge.client.IItemRenderer; public class RenderBatterySocket extends TileEntitySpecialRenderer implements IItemRendererProvider { private static ResourceLocation blorbo = new ResourceLocation(RefStrings.MODID, "textures/models/horse/sunburst.png"); + + public static EntityItem dummy; @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { @@ -78,6 +83,34 @@ public class RenderBatterySocket extends TileEntitySpecialRenderer implements II Random rand = new Random(tile.getWorldObj().getTotalWorldTime() / 5); rand.nextBoolean(); + for(int i = -1; i <= 1; i += 2) for(int j = -1; j <= 1; j += 2) if(rand.nextInt(4) == 0) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.75, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0.4375 * i, 1.1875, 0.4375 * j), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.0625F, 3, 0.025F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0.4375 * i, 1.1875, 0.4375 * j), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.025F); + GL11.glPopMatrix(); + } + } else { + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.5, 0); + GL11.glScaled(1.5, 1.5, 1.5); + GL11.glRotated((socket.getWorldObj().getTotalWorldTime() % 360 + interp) * 25D, 0, -1, 0); + + if(dummy == null || dummy.worldObj != tile.getWorldObj()) { + dummy = new EntityItem(tile.getWorldObj(), 0, 0, 0, render); + } + dummy.setEntityItemStack(render); + 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(); + + Random rand = new Random(tile.getWorldObj().getTotalWorldTime() / 5); + rand.nextBoolean(); + for(int i = -1; i <= 1; i += 2) for(int j = -1; j <= 1; j += 2) if(rand.nextInt(4) == 0) { GL11.glPushMatrix(); GL11.glTranslated(0, 0.75, 0); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index ef270f2f3..535c923cc 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -2,38 +2,56 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelPylon; +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.network.TileEntityPylon; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; -public class RenderPylon extends RenderPylonBase { - - private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelPylon.png"); - - private ModelPylon pylon; - - public RenderPylon() { - this.pylon = new ModelPylon(); - } +public class RenderPylon extends RenderPylonBase implements IItemRendererProvider { @Override - public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { - TileEntityPylon pyl = (TileEntityPylon)te; - - GL11.glEnable(GL11.GL_LIGHTING); - + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { GL11.glPushMatrix(); - GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F - ((1F / 16F) * 14F), (float) z + 0.5F); - GL11.glRotatef(180, 0F, 0F, 1F); - bindTexture(texture); - this.pylon.renderAll(0.0625F); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + TileEntityPylon pyl = (TileEntityPylon)tile; + + bindTexture(ResourceManager.pylon_tex); + ResourceManager.pylon.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); GL11.glPushMatrix(); this.renderLinesGeneric(pyl, x, y, z); GL11.glPopMatrix(); } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.red_pylon); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -5, 0); + GL11.glScaled(2.9, 2.9, 2.9); + } + public void renderCommon() { + GL11.glScaled(1, 1, 1); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.pylon_tex); + ResourceManager.pylon.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java index 03646593c..99f185e8b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java @@ -18,12 +18,17 @@ public class TileEntityPylon extends TileEntityPylonBase { @Override public Vec3[] getMountPos() { - return new Vec3[] {Vec3.createVectorHelper(0.5, 5.4, 0.5)}; + return new Vec3[] {Vec3.createVectorHelper(0.5, 5.5D, 0.5)}; } @Override public double getMaxWireLength() { - return 25D; + return 25; + } + + @Override + public boolean canConnect(ForgeDirection dir) { + return dir != ForgeDirection.DOWN; } @Override @@ -33,8 +38,6 @@ public class TileEntityPylon extends TileEntityPylonBase { new DirPos(xCoord, yCoord, zCoord, ForgeDirection.UNKNOWN), new DirPos(xCoord + 1, yCoord, zCoord, Library.POS_X), new DirPos(xCoord - 1, yCoord, zCoord, Library.NEG_X), - new DirPos(xCoord, yCoord + 1, zCoord, Library.POS_Y), - new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y), new DirPos(xCoord, yCoord, zCoord + 1, Library.POS_Z), new DirPos(xCoord, yCoord, zCoord - 1, Library.NEG_Z) ); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a3548454f..dd741b662 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6219,7 +6219,7 @@ tile.red_cable_paintable.name=Paintable Red Copper Cable tile.red_cable_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool tile.red_connector.name=Electricity Connector tile.red_connector_super.name=Heavy Duty Electricity Connector -tile.red_pylon.name=Electricity Pylon +tile.red_pylon.name=Industrial Electricity Pylon tile.red_pylon_large.name=Large Electricity Pylon tile.red_pylon_medium_steel.name=Medium Steel Electricity Pylon tile.red_pylon_medium_steel_transformer.name=Medium Steel Electricity Pylon with Transformer diff --git a/src/main/resources/assets/hbm/models/network/pylon.obj b/src/main/resources/assets/hbm/models/network/pylon.obj new file mode 100644 index 000000000..ebbffe872 --- /dev/null +++ b/src/main/resources/assets/hbm/models/network/pylon.obj @@ -0,0 +1,1299 @@ +# Blender 5.2.0 LTS +# www.blender.org +o Pylon +v -0.187500 0.500000 0.500000 +v -0.187500 0.500000 0.187500 +v -0.187500 0.000000 0.500000 +v -0.187500 0.000000 0.187500 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.187500 +v -0.500000 0.000000 0.500000 +v -0.500000 0.000000 0.187500 +v 0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.187500 +v 0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.187500 +v 0.187500 0.500000 0.500000 +v 0.187500 0.500000 0.187500 +v 0.187500 0.000000 0.500000 +v 0.187500 0.000000 0.187500 +v -0.187500 0.500000 -0.187500 +v -0.187500 0.500000 -0.500000 +v -0.187500 -0.000000 -0.187500 +v -0.187500 -0.000000 -0.500000 +v -0.500000 0.500000 -0.187500 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.000000 -0.187500 +v -0.500000 -0.000000 -0.500000 +v 0.500000 0.500000 -0.187500 +v 0.500000 0.500000 -0.500000 +v 0.500000 -0.000000 -0.187500 +v 0.500000 -0.000000 -0.500000 +v 0.187500 0.500000 -0.187500 +v 0.187500 0.500000 -0.500000 +v 0.187500 -0.000000 -0.187500 +v 0.187500 -0.000000 -0.500000 +v 0.500000 0.687500 -0.187500 +v 0.375000 0.687500 -0.187500 +v 0.500000 0.312500 -0.187500 +v 0.375000 0.312500 -0.187500 +v 0.500000 0.687500 0.187500 +v 0.375000 0.687500 0.187500 +v 0.500000 0.312500 0.187500 +v 0.375000 0.312500 0.187500 +v 0.375000 0.625000 -0.125000 +v 0.375000 0.375000 -0.125000 +v 0.375000 0.625000 0.125000 +v 0.375000 0.375000 0.125000 +v 0.125000 0.625000 -0.125000 +v 0.125000 0.375000 -0.125000 +v 0.125000 0.625000 0.125000 +v 0.125000 0.375000 0.125000 +v 0.125000 4.937500 -0.125000 +v 0.125000 4.937500 0.125000 +v -0.500000 0.687500 0.187500 +v -0.375000 0.687500 0.187500 +v -0.500000 0.312500 0.187500 +v -0.375000 0.312500 0.187500 +v -0.500000 0.687500 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.500000 0.312500 -0.187500 +v -0.375000 0.312500 -0.187500 +v -0.375000 0.625000 0.125000 +v -0.375000 0.375000 0.125000 +v -0.375000 0.625000 -0.125000 +v -0.375000 0.375000 -0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 0.375000 0.125000 +v -0.125000 0.625000 -0.125000 +v -0.125000 0.375000 -0.125000 +v -0.125000 4.937500 0.125000 +v -0.125000 4.937500 -0.125000 +v 0.187500 0.687500 0.500000 +v 0.187500 0.687500 0.375000 +v 0.187500 0.312500 0.500000 +v 0.187500 0.312500 0.375000 +v -0.187500 0.687500 0.500000 +v -0.187500 0.687500 0.375000 +v -0.187500 0.312500 0.500000 +v -0.187500 0.312500 0.375000 +v 0.125000 0.625000 0.375000 +v 0.125000 0.375000 0.375000 +v -0.125000 0.625000 0.375000 +v -0.125000 0.375000 0.375000 +v 0.125000 0.625000 0.125000 +v 0.125000 0.375000 0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 0.375000 0.125000 +v 0.125000 4.937500 0.125000 +v -0.125000 4.937500 0.125000 +v -0.187500 0.687500 -0.500000 +v -0.187500 0.687500 -0.375000 +v -0.187500 0.312500 -0.500000 +v -0.187500 0.312500 -0.375000 +v 0.187500 0.687500 -0.500000 +v 0.187500 0.687500 -0.375000 +v 0.187500 0.312500 -0.500000 +v 0.187500 0.312500 -0.375000 +v -0.125000 0.625000 -0.375000 +v -0.125000 0.375000 -0.375000 +v 0.125000 0.625000 -0.375000 +v 0.125000 0.375000 -0.375000 +v -0.125000 0.625000 -0.125000 +v -0.125000 0.375000 -0.125000 +v 0.125000 0.625000 -0.125000 +v 0.125000 0.375000 -0.125000 +v -0.125000 4.937500 -0.125000 +v 0.125000 4.937500 -0.125000 +v 0.250000 2.625000 0.234375 +v 0.250000 2.625000 0.171875 +v 0.250000 2.500000 0.234375 +v 0.250000 2.500000 0.171875 +v -0.250000 2.250000 0.265625 +v -0.250000 2.250000 0.203125 +v -0.250000 2.125000 0.265625 +v -0.250000 2.125000 0.203125 +v -0.250000 2.625000 0.234375 +v -0.250000 2.625000 0.296875 +v -0.250000 2.500000 0.234375 +v -0.250000 2.500000 0.296875 +v 0.250000 2.250000 0.265625 +v 0.250000 2.250000 0.328125 +v 0.250000 2.125000 0.265625 +v 0.250000 2.125000 0.328125 +v 0.250000 2.125000 0.265625 +v 0.250000 2.125000 0.203125 +v 0.250000 2.000000 0.265625 +v 0.250000 2.000000 0.203125 +v -0.250000 1.750000 0.312500 +v -0.250000 1.750000 0.250000 +v -0.250000 1.625000 0.312500 +v -0.250000 1.625000 0.250000 +v -0.250000 2.125000 0.265625 +v -0.250000 2.125000 0.328125 +v -0.250000 2.000000 0.265625 +v -0.250000 2.000000 0.328125 +v 0.250000 1.750000 0.312500 +v 0.250000 1.750000 0.375000 +v 0.250000 1.625000 0.312500 +v 0.250000 1.625000 0.375000 +v 0.250000 1.625000 0.296875 +v 0.250000 1.625000 0.234375 +v 0.250000 1.500000 0.296875 +v 0.250000 1.500000 0.234375 +v -0.250000 1.250000 0.343750 +v -0.250000 1.250000 0.281250 +v -0.250000 1.125000 0.343750 +v -0.250000 1.125000 0.281250 +v -0.250000 1.625000 0.296875 +v -0.250000 1.625000 0.359375 +v -0.250000 1.500000 0.296875 +v -0.250000 1.500000 0.359375 +v 0.250000 1.250000 0.343750 +v 0.250000 1.250000 0.406250 +v 0.250000 1.125000 0.343750 +v 0.250000 1.125000 0.406250 +v 0.250000 1.125000 0.343750 +v 0.250000 1.125000 0.281250 +v 0.250000 1.000000 0.343750 +v 0.250000 1.000000 0.281250 +v -0.250000 0.750000 0.343750 +v -0.250000 0.750000 0.281250 +v -0.250000 0.625000 0.343750 +v -0.250000 0.625000 0.281250 +v -0.250000 1.125000 0.343750 +v -0.250000 1.125000 0.406250 +v -0.250000 1.000000 0.343750 +v -0.250000 1.000000 0.406250 +v 0.250000 0.750000 0.343750 +v 0.250000 0.750000 0.406250 +v 0.250000 0.625000 0.343750 +v 0.250000 0.625000 0.406250 +v -0.187500 2.750000 0.171875 +v -0.187500 2.750000 0.296875 +v -0.187500 2.625000 0.171875 +v -0.187500 2.625000 0.296875 +v 0.187500 2.750000 0.171875 +v 0.187500 2.750000 0.296875 +v 0.187500 2.625000 0.171875 +v 0.187500 2.625000 0.296875 +v -0.250000 2.625000 -0.234375 +v -0.250000 2.625000 -0.171875 +v -0.250000 2.500000 -0.234375 +v -0.250000 2.500000 -0.171875 +v 0.250000 2.250000 -0.265625 +v 0.250000 2.250000 -0.203125 +v 0.250000 2.125000 -0.265625 +v 0.250000 2.125000 -0.203125 +v 0.250000 2.625000 -0.234375 +v 0.250000 2.625000 -0.296875 +v 0.250000 2.500000 -0.234375 +v 0.250000 2.500000 -0.296875 +v -0.250000 2.250000 -0.265625 +v -0.250000 2.250000 -0.328125 +v -0.250000 2.125000 -0.265625 +v -0.250000 2.125000 -0.328125 +v -0.250000 2.125000 -0.265625 +v -0.250000 2.125000 -0.203125 +v -0.250000 2.000000 -0.265625 +v -0.250000 2.000000 -0.203125 +v 0.250000 1.750000 -0.312500 +v 0.250000 1.750000 -0.250000 +v 0.250000 1.625000 -0.312500 +v 0.250000 1.625000 -0.250000 +v 0.250000 2.125000 -0.265625 +v 0.250000 2.125000 -0.328125 +v 0.250000 2.000000 -0.265625 +v 0.250000 2.000000 -0.328125 +v -0.250000 1.750000 -0.312500 +v -0.250000 1.750000 -0.375000 +v -0.250000 1.625000 -0.312500 +v -0.250000 1.625000 -0.375000 +v -0.250000 1.625000 -0.296875 +v -0.250000 1.625000 -0.234375 +v -0.250000 1.500000 -0.296875 +v -0.250000 1.500000 -0.234375 +v 0.250000 1.250000 -0.343750 +v 0.250000 1.250000 -0.281250 +v 0.250000 1.125000 -0.343750 +v 0.250000 1.125000 -0.281250 +v 0.250000 1.625000 -0.296875 +v 0.250000 1.625000 -0.359375 +v 0.250000 1.500000 -0.296875 +v 0.250000 1.500000 -0.359375 +v -0.250000 1.250000 -0.343750 +v -0.250000 1.250000 -0.406250 +v -0.250000 1.125000 -0.343750 +v -0.250000 1.125000 -0.406250 +v -0.250000 1.125000 -0.343750 +v -0.250000 1.125000 -0.281250 +v -0.250000 1.000000 -0.343750 +v -0.250000 1.000000 -0.281250 +v 0.250000 0.750000 -0.343750 +v 0.250000 0.750000 -0.281250 +v 0.250000 0.625000 -0.343750 +v 0.250000 0.625000 -0.281250 +v 0.250000 1.125000 -0.343750 +v 0.250000 1.125000 -0.406250 +v 0.250000 1.000000 -0.343750 +v 0.250000 1.000000 -0.406250 +v -0.250000 0.750000 -0.343750 +v -0.250000 0.750000 -0.406250 +v -0.250000 0.625000 -0.343750 +v -0.250000 0.625000 -0.406250 +v 0.187500 2.750000 -0.171875 +v 0.187500 2.750000 -0.296875 +v 0.187500 2.625000 -0.171875 +v 0.187500 2.625000 -0.296875 +v -0.187500 2.750000 -0.171875 +v -0.187500 2.750000 -0.296875 +v -0.187500 2.625000 -0.171875 +v -0.187500 2.625000 -0.296875 +v 0.234375 2.625000 -0.250000 +v 0.171875 2.625000 -0.250000 +v 0.234375 2.500000 -0.250000 +v 0.171875 2.500000 -0.250000 +v 0.265625 2.250000 0.250000 +v 0.203125 2.250000 0.250000 +v 0.265625 2.125000 0.250000 +v 0.203125 2.125000 0.250000 +v 0.234375 2.625000 0.250000 +v 0.296875 2.625000 0.250000 +v 0.234375 2.500000 0.250000 +v 0.296875 2.500000 0.250000 +v 0.265625 2.250000 -0.250000 +v 0.328125 2.250000 -0.250000 +v 0.265625 2.125000 -0.250000 +v 0.328125 2.125000 -0.250000 +v 0.265625 2.125000 -0.250000 +v 0.203125 2.125000 -0.250000 +v 0.265625 2.000000 -0.250000 +v 0.203125 2.000000 -0.250000 +v 0.312500 1.750000 0.250000 +v 0.250000 1.750000 0.250000 +v 0.312500 1.625000 0.250000 +v 0.250000 1.625000 0.250000 +v 0.265625 2.125000 0.250000 +v 0.328125 2.125000 0.250000 +v 0.265625 2.000000 0.250000 +v 0.328125 2.000000 0.250000 +v 0.312500 1.750000 -0.250000 +v 0.375000 1.750000 -0.250000 +v 0.312500 1.625000 -0.250000 +v 0.375000 1.625000 -0.250000 +v 0.296875 1.625000 -0.250000 +v 0.234375 1.625000 -0.250000 +v 0.296875 1.500000 -0.250000 +v 0.234375 1.500000 -0.250000 +v 0.343750 1.250000 0.250000 +v 0.281250 1.250000 0.250000 +v 0.343750 1.125000 0.250000 +v 0.281250 1.125000 0.250000 +v 0.296875 1.625000 0.250000 +v 0.359375 1.625000 0.250000 +v 0.296875 1.500000 0.250000 +v 0.359375 1.500000 0.250000 +v 0.343750 1.250000 -0.250000 +v 0.406250 1.250000 -0.250000 +v 0.343750 1.125000 -0.250000 +v 0.406250 1.125000 -0.250000 +v 0.343750 1.125000 -0.250000 +v 0.281250 1.125000 -0.250000 +v 0.343750 1.000000 -0.250000 +v 0.281250 1.000000 -0.250000 +v 0.343750 0.750000 0.250000 +v 0.281250 0.750000 0.250000 +v 0.343750 0.625000 0.250000 +v 0.281250 0.625000 0.250000 +v 0.343750 1.125000 0.250000 +v 0.406250 1.125000 0.250000 +v 0.343750 1.000000 0.250000 +v 0.406250 1.000000 0.250000 +v 0.343750 0.750000 -0.250000 +v 0.406250 0.750000 -0.250000 +v 0.343750 0.625000 -0.250000 +v 0.406250 0.625000 -0.250000 +v 0.171875 2.750000 0.187500 +v 0.296875 2.750000 0.187500 +v 0.171875 2.625000 0.187500 +v 0.296875 2.625000 0.187500 +v 0.171875 2.750000 -0.187500 +v 0.296875 2.750000 -0.187500 +v 0.171875 2.625000 -0.187500 +v 0.296875 2.625000 -0.187500 +v -0.234375 2.625000 0.250000 +v -0.171875 2.625000 0.250000 +v -0.234375 2.500000 0.250000 +v -0.171875 2.500000 0.250000 +v -0.265625 2.250000 -0.250000 +v -0.203125 2.250000 -0.250000 +v -0.265625 2.125000 -0.250000 +v -0.203125 2.125000 -0.250000 +v -0.234375 2.625000 -0.250000 +v -0.296875 2.625000 -0.250000 +v -0.234375 2.500000 -0.250000 +v -0.296875 2.500000 -0.250000 +v -0.265625 2.250000 0.250000 +v -0.328125 2.250000 0.250000 +v -0.265625 2.125000 0.250000 +v -0.328125 2.125000 0.250000 +v -0.265625 2.125000 0.250000 +v -0.203125 2.125000 0.250000 +v -0.265625 2.000000 0.250000 +v -0.203125 2.000000 0.250000 +v -0.312500 1.750000 -0.250000 +v -0.250000 1.750000 -0.250000 +v -0.312500 1.625000 -0.250000 +v -0.250000 1.625000 -0.250000 +v -0.265625 2.125000 -0.250000 +v -0.328125 2.125000 -0.250000 +v -0.265625 2.000000 -0.250000 +v -0.328125 2.000000 -0.250000 +v -0.312500 1.750000 0.250000 +v -0.375000 1.750000 0.250000 +v -0.312500 1.625000 0.250000 +v -0.375000 1.625000 0.250000 +v -0.296875 1.625000 0.250000 +v -0.234375 1.625000 0.250000 +v -0.296875 1.500000 0.250000 +v -0.234375 1.500000 0.250000 +v -0.343750 1.250000 -0.250000 +v -0.281250 1.250000 -0.250000 +v -0.343750 1.125000 -0.250000 +v -0.281250 1.125000 -0.250000 +v -0.296875 1.625000 -0.250000 +v -0.359375 1.625000 -0.250000 +v -0.296875 1.500000 -0.250000 +v -0.359375 1.500000 -0.250000 +v -0.343750 1.250000 0.250000 +v -0.406250 1.250000 0.250000 +v -0.343750 1.125000 0.250000 +v -0.406250 1.125000 0.250000 +v -0.343750 1.125000 0.250000 +v -0.281250 1.125000 0.250000 +v -0.343750 1.000000 0.250000 +v -0.281250 1.000000 0.250000 +v -0.343750 0.750000 -0.250000 +v -0.281250 0.750000 -0.250000 +v -0.343750 0.625000 -0.250000 +v -0.281250 0.625000 -0.250000 +v -0.343750 1.125000 -0.250000 +v -0.406250 1.125000 -0.250000 +v -0.343750 1.000000 -0.250000 +v -0.406250 1.000000 -0.250000 +v -0.343750 0.750000 0.250000 +v -0.406250 0.750000 0.250000 +v -0.343750 0.625000 0.250000 +v -0.406250 0.625000 0.250000 +v -0.171875 2.750000 -0.187500 +v -0.296875 2.750000 -0.187500 +v -0.171875 2.625000 -0.187500 +v -0.296875 2.625000 -0.187500 +v -0.171875 2.750000 0.187500 +v -0.296875 2.750000 0.187500 +v -0.171875 2.625000 0.187500 +v -0.296875 2.625000 0.187500 +v -0.250000 1.000000 0.437500 +v -0.250000 1.000000 0.250000 +v -0.250000 0.500000 0.437500 +v -0.250000 0.500000 0.250000 +v -0.437500 1.000000 0.437500 +v -0.437500 1.000000 0.250000 +v -0.437500 0.500000 0.437500 +v -0.437500 0.500000 0.250000 +v 0.000000 4.937500 0.187500 +v 0.000000 4.875000 -0.000000 +v -0.187500 4.937500 0.187500 +v -0.187500 4.937500 -0.000000 +v 0.000000 5.125000 -0.000000 +v 0.250000 1.000000 -0.437500 +v 0.250000 1.000000 -0.250000 +v 0.250000 0.500000 -0.437500 +v 0.250000 0.500000 -0.250000 +v 0.437500 1.000000 -0.437500 +v 0.437500 1.000000 -0.250000 +v 0.437500 0.500000 -0.437500 +v 0.437500 0.500000 -0.250000 +v 0.000000 4.937500 -0.187500 +v 0.000000 4.875000 -0.000000 +v 0.187500 4.937500 -0.187500 +v 0.187500 4.937500 -0.000000 +v 0.000000 5.125000 -0.000000 +v 0.437500 1.000000 0.250000 +v 0.250000 1.000000 0.250000 +v 0.437500 0.500000 0.250000 +v 0.250000 0.500000 0.250000 +v 0.437500 1.000000 0.437500 +v 0.250000 1.000000 0.437500 +v 0.437500 0.500000 0.437500 +v 0.250000 0.500000 0.437500 +v 0.187500 4.937500 -0.000000 +v 0.000000 4.875000 -0.000000 +v 0.187500 4.937500 0.187500 +v 0.000000 4.937500 0.187500 +v 0.000000 5.125000 -0.000000 +v -0.437500 1.000000 -0.250000 +v -0.250000 1.000000 -0.250000 +v -0.437500 0.500000 -0.250000 +v -0.250000 0.500000 -0.250000 +v -0.437500 1.000000 -0.437500 +v -0.250000 1.000000 -0.437500 +v -0.437500 0.500000 -0.437500 +v -0.250000 0.500000 -0.437500 +v -0.187500 4.937500 -0.000000 +v 0.000000 4.875000 -0.000000 +v -0.187500 4.937500 -0.187500 +v 0.000000 4.937500 -0.187500 +v 0.000000 5.125000 -0.000000 +v 0.125000 5.187500 -0.125000 +v 0.125000 5.250000 0.125000 +v 0.125000 5.187500 0.125000 +v -0.125000 5.187500 0.125000 +v -0.125000 5.250000 -0.125000 +v -0.125000 5.187500 -0.125000 +v -0.125000 5.062500 -0.125000 +v 0.187500 5.062500 -0.187500 +v 0.125000 5.062500 -0.125000 +v 0.125000 5.000000 -0.125000 +v 0.125000 5.062500 0.125000 +v 0.125000 5.000000 0.125000 +v -0.125000 5.000000 0.125000 +v -0.125000 5.000000 -0.125000 +v -0.125000 5.062500 0.125000 +v 0.187500 5.187500 0.187500 +v 0.187500 5.062500 0.187500 +v -0.187500 5.062500 0.187500 +v -0.187500 5.062500 -0.187500 +v 0.187500 5.250000 -0.187500 +v 0.125000 5.250000 -0.125000 +v -0.187500 5.187500 -0.187500 +v 0.187500 5.187500 -0.187500 +v -0.187500 5.187500 0.187500 +v -0.125000 5.250000 0.125000 +v 0.187500 5.375000 0.187500 +v 0.187500 5.250000 0.187500 +v -0.187500 5.250000 0.187500 +v -0.187500 5.250000 -0.187500 +v -0.187500 5.375000 -0.187500 +v 0.187500 5.375000 -0.187500 +v -0.187500 5.375000 0.187500 +v 0.125000 5.375000 -0.125000 +v 0.125000 5.437500 0.125000 +v 0.125000 5.375000 0.125000 +v -0.125000 5.375000 0.125000 +v -0.125000 5.437500 -0.125000 +v -0.125000 5.375000 -0.125000 +v 0.125000 5.437500 -0.125000 +v -0.125000 5.437500 0.125000 +v -0.062500 5.437500 -0.062500 +v 0.062500 5.437500 -0.062500 +v 0.062500 5.562500 0.062500 +v 0.062500 5.437500 0.062500 +v -0.062500 5.437500 0.062500 +v -0.062500 5.562500 0.062500 +v 0.062500 5.562500 -0.062500 +v -0.062500 5.562500 -0.062500 +v 0.250000 4.937500 0.250000 +v 0.250000 4.937500 -0.250000 +v 0.250000 4.687500 0.250000 +v 0.250000 4.687500 -0.250000 +v -0.250000 4.937500 0.250000 +v -0.250000 4.937500 -0.250000 +v -0.250000 4.687500 0.250000 +v -0.250000 4.687500 -0.250000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.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.0000 -1.0000 +vn -0.6000 0.8000 -0.0000 +vn 0.6000 -0.8000 -0.0000 +vn 0.0624 -0.0000 0.9981 +vn -0.0624 -0.0000 -0.9981 +vn 0.6000 0.8000 -0.0000 +vn -0.6000 -0.8000 -0.0000 +vn 0.0624 -0.0000 -0.9981 +vn -0.0624 -0.0000 0.9981 +vn 0.0933 -0.0000 0.9956 +vn -0.0933 -0.0000 -0.9956 +vn 0.0933 -0.0000 -0.9956 +vn -0.0933 -0.0000 0.9956 +vn -0.0000 0.8000 0.6000 +vn -0.0000 -0.8000 -0.6000 +vn 0.9981 -0.0000 -0.0624 +vn -0.9981 -0.0000 0.0624 +vn -0.0000 0.8000 -0.6000 +vn -0.0000 -0.8000 0.6000 +vn -0.9981 -0.0000 -0.0624 +vn 0.9981 -0.0000 0.0624 +vn 0.9956 -0.0000 -0.0933 +vn -0.9956 -0.0000 0.0933 +vn -0.9956 -0.0000 -0.0933 +vn 0.9956 -0.0000 0.0933 +vn -0.0000 0.0634 0.9980 +vn 0.9979 -0.0621 0.0206 +vn 0.9979 -0.0620 0.0207 +vn -0.0211 -0.0630 -0.9978 +vn -0.0210 -0.0630 -0.9978 +vn -0.9980 0.0634 -0.0000 +vn -0.0000 0.7071 0.7071 +vn -0.7071 0.7071 -0.0000 +vn -0.0000 0.0634 -0.9980 +vn -0.9979 -0.0621 -0.0206 +vn -0.9979 -0.0620 -0.0207 +vn 0.0211 -0.0630 0.9978 +vn 0.0210 -0.0630 0.9978 +vn 0.9980 0.0634 -0.0000 +vn -0.0000 0.7071 -0.7071 +vn 0.7071 0.7071 -0.0000 +vn 0.0206 -0.0621 -0.9979 +vn 0.0207 -0.0620 -0.9979 +vn -0.9978 -0.0630 0.0211 +vn -0.9978 -0.0630 0.0210 +vn -0.0206 -0.0621 0.9979 +vn -0.0207 -0.0620 0.9979 +vn 0.9978 -0.0630 -0.0211 +vn 0.9978 -0.0630 -0.0210 +vt 1.000000 0.341772 +vt 0.875000 0.341772 +vt 0.875000 0.240506 +vt 1.000000 0.240506 +vt 0.750000 0.240506 +vt 0.750000 0.341772 +vt 0.625000 0.341772 +vt 0.625000 0.240506 +vt 0.625000 0.405063 +vt 0.500000 0.405063 +vt 0.500000 0.341772 +vt 0.500000 0.240506 +vt 0.500000 0.177215 +vt 0.625000 0.177215 +vt 0.550000 0.101266 +vt 0.500000 0.101266 +vt 0.500000 0.025316 +vt 0.550000 0.025316 +vt 0.350000 0.025316 +vt 0.350000 0.101266 +vt 0.300000 0.101266 +vt 0.300000 0.025316 +vt 0.500000 0.126582 +vt 0.350000 0.126582 +vt 0.500000 0.000000 +vt 0.350000 0.000000 +vt 0.575000 0.088608 +vt 0.675000 0.088608 +vt 0.700000 0.101266 +vt 0.575000 0.037975 +vt 0.675000 0.037975 +vt 0.700000 0.025316 +vt 0.300000 0.227848 +vt 0.300000 0.177215 +vt 0.400000 0.177215 +vt 0.400000 0.227848 +vt 0.300000 0.278481 +vt 0.400000 0.278481 +vt 0.300000 0.329114 +vt 0.400000 0.329114 +vt 0.300000 0.126582 +vt 0.400000 0.126582 +vt 0.400000 1.000000 +vt 0.500000 1.000000 +vt 0.600000 0.126582 +vt 0.600000 0.177215 +vt 0.900000 0.139241 +vt 0.700000 0.139241 +vt 0.700000 0.126582 +vt 0.900000 0.126582 +vt 0.700000 0.177215 +vt 0.700000 0.164557 +vt 0.900000 0.164557 +vt 0.900000 0.177215 +vt 0.900000 0.101266 +vt 0.850000 0.050633 +vt 0.700000 0.050633 +vt 0.850000 0.025316 +vt 0.700000 0.075949 +vt 0.850000 0.075949 +vt 0.850000 0.101266 +vt 0.700000 0.000000 +vt 0.850000 0.000000 +vt 0.225000 0.101266 +vt 0.150000 0.101266 +vt 0.150000 0.000000 +vt 0.225000 0.000000 +vt 0.075000 0.000000 +vt 0.075000 0.101266 +vt 0.000000 0.101266 +vt 0.000000 0.000000 +vt 0.300000 0.000000 +vt 0.150000 0.898734 +vt 0.075000 0.898734 +vt 0.225000 0.898734 +vt 0.300000 0.898734 +vt 0.000000 0.898734 +vt 0.150000 0.949367 +vt 0.000000 0.949367 +vt 0.650000 0.569620 +vt 0.550000 0.582278 +vt 0.550000 0.569620 +vt 0.650000 0.518987 +vt 0.525000 0.531646 +vt 0.550000 0.518987 +vt 0.650000 0.506329 +vt 0.550000 0.506329 +vt 0.675000 0.531646 +vt 0.525000 0.556962 +vt 0.650000 0.582278 +vt 0.525000 0.594937 +vt 0.675000 0.594937 +vt 0.525000 0.620253 +vt 0.675000 0.556962 +vt 0.650000 0.632911 +vt 0.550000 0.645570 +vt 0.550000 0.632911 +vt 0.675000 0.620253 +vt 0.650000 0.645570 +vt 0.575000 0.658228 +vt 0.625000 0.658228 +vt 0.575000 0.683544 +vt 0.575000 0.708861 +vt 0.625000 0.683544 +vt 0.625000 0.708861 +vt 0.700000 0.607595 +vt 0.700000 0.506329 +vt 0.800000 0.506329 +vt 0.800000 0.607595 +vt 0.800000 0.810127 +vt 0.700000 0.810127 +vt 0.700000 0.708861 +vt 0.800000 0.708861 +vt 0.700000 0.405063 +vt 0.500000 0.506329 +vt 0.800000 0.405063 +s 1 +usemtl m_2d342b16-8f2e-5231-80ae-92eafddb5779 +f 2/1/1 1/2/1 3/3/1 +f 2/1/1 3/3/1 4/4/1 +f 7/5/2 5/6/2 6/7/2 +f 7/5/2 6/7/2 8/8/2 +f 5/9/3 1/10/3 2/11/3 +f 5/9/3 2/11/3 6/7/3 +f 4/12/4 3/13/4 7/14/4 +f 4/12/4 7/14/4 8/8/4 +f 3/3/5 1/2/5 5/6/5 +f 3/3/5 5/6/5 7/5/5 +f 6/7/6 2/11/6 4/12/6 +f 6/7/6 4/12/6 8/8/6 +f 10/1/1 9/2/1 11/3/1 +f 10/1/1 11/3/1 12/4/1 +f 15/5/2 13/6/2 14/7/2 +f 15/5/2 14/7/2 16/8/2 +f 13/9/3 9/10/3 10/11/3 +f 13/9/3 10/11/3 14/7/3 +f 12/12/4 11/13/4 15/14/4 +f 12/12/4 15/14/4 16/8/4 +f 11/3/5 9/2/5 13/6/5 +f 11/3/5 13/6/5 15/5/5 +f 14/7/6 10/11/6 12/12/6 +f 14/7/6 12/12/6 16/8/6 +f 18/1/1 17/2/1 19/3/1 +f 18/1/1 19/3/1 20/4/1 +f 23/5/2 21/6/2 22/7/2 +f 23/5/2 22/7/2 24/8/2 +f 21/9/3 17/10/3 18/11/3 +f 21/9/3 18/11/3 22/7/3 +f 20/12/4 19/13/4 23/14/4 +f 20/12/4 23/14/4 24/8/4 +f 19/3/5 17/2/5 21/6/5 +f 19/3/5 21/6/5 23/5/5 +f 22/7/6 18/11/6 20/12/6 +f 22/7/6 20/12/6 24/8/6 +f 26/1/1 25/2/1 27/3/1 +f 26/1/1 27/3/1 28/4/1 +f 31/5/2 29/6/2 30/7/2 +f 31/5/2 30/7/2 32/8/2 +f 29/9/3 25/10/3 26/11/3 +f 29/9/3 26/11/3 30/7/3 +f 28/12/4 27/13/4 31/14/4 +f 28/12/4 31/14/4 32/8/4 +f 27/3/5 25/2/5 29/6/5 +f 27/3/5 29/6/5 31/5/5 +f 30/7/6 26/11/6 28/12/6 +f 30/7/6 28/12/6 32/8/6 +f 34/15/6 33/16/6 35/17/6 +f 34/15/6 35/17/6 36/18/6 +f 39/19/5 37/20/5 38/21/5 +f 39/19/5 38/21/5 40/22/5 +f 37/20/3 33/16/3 34/23/3 +f 37/20/3 34/23/3 38/24/3 +f 36/25/4 35/17/4 39/19/4 +f 36/25/4 39/19/4 40/26/4 +f 35/17/1 33/16/1 37/20/1 +f 35/17/1 37/20/1 39/19/1 +f 41/27/2 43/28/2 38/29/2 +f 41/27/2 38/29/2 34/15/2 +f 42/30/2 41/27/2 34/15/2 +f 42/30/2 34/15/2 36/18/2 +f 44/31/2 42/30/2 36/18/2 +f 44/31/2 36/18/2 40/32/2 +f 43/28/2 44/31/2 40/32/2 +f 43/28/2 40/32/2 38/29/2 +f 45/33/3 47/34/3 43/35/3 +f 45/33/3 43/35/3 41/36/3 +f 46/37/6 45/33/6 41/36/6 +f 46/37/6 41/36/6 42/38/6 +f 48/39/4 46/37/4 42/38/4 +f 48/39/4 42/38/4 44/40/4 +f 47/34/5 48/41/5 44/42/5 +f 47/34/5 44/42/5 43/35/5 +f 49/43/1 50/44/1 47/23/1 +f 49/43/1 47/23/1 45/42/1 +f 52/15/5 51/16/5 53/17/5 +f 52/15/5 53/17/5 54/18/5 +f 57/19/6 55/20/6 56/21/6 +f 57/19/6 56/21/6 58/22/6 +f 55/20/3 51/16/3 52/23/3 +f 55/20/3 52/23/3 56/24/3 +f 54/25/4 53/17/4 57/19/4 +f 54/25/4 57/19/4 58/26/4 +f 53/17/2 51/16/2 55/20/2 +f 53/17/2 55/20/2 57/19/2 +f 59/27/1 61/28/1 56/29/1 +f 59/27/1 56/29/1 52/15/1 +f 60/30/1 59/27/1 52/15/1 +f 60/30/1 52/15/1 54/18/1 +f 62/31/1 60/30/1 54/18/1 +f 62/31/1 54/18/1 58/32/1 +f 61/28/1 62/31/1 58/32/1 +f 61/28/1 58/32/1 56/29/1 +f 63/33/3 65/34/3 61/35/3 +f 63/33/3 61/35/3 59/36/3 +f 64/37/5 63/33/5 59/36/5 +f 64/37/5 59/36/5 60/38/5 +f 66/39/4 64/37/4 60/38/4 +f 66/39/4 60/38/4 62/40/4 +f 65/34/6 66/41/6 62/42/6 +f 65/34/6 62/42/6 61/35/6 +f 67/43/2 68/44/2 65/23/2 +f 67/43/2 65/23/2 63/42/2 +f 70/15/1 69/16/1 71/17/1 +f 70/15/1 71/17/1 72/18/1 +f 75/19/2 73/20/2 74/21/2 +f 75/19/2 74/21/2 76/22/2 +f 73/20/3 69/16/3 70/23/3 +f 73/20/3 70/23/3 74/24/3 +f 72/25/4 71/17/4 75/19/4 +f 72/25/4 75/19/4 76/26/4 +f 71/17/5 69/16/5 73/20/5 +f 71/17/5 73/20/5 75/19/5 +f 77/27/6 79/28/6 74/29/6 +f 77/27/6 74/29/6 70/15/6 +f 78/30/6 77/27/6 70/15/6 +f 78/30/6 70/15/6 72/18/6 +f 80/31/6 78/30/6 72/18/6 +f 80/31/6 72/18/6 76/32/6 +f 79/28/6 80/31/6 76/32/6 +f 79/28/6 76/32/6 74/29/6 +f 81/33/3 83/34/3 79/35/3 +f 81/33/3 79/35/3 77/36/3 +f 82/37/1 81/33/1 77/36/1 +f 82/37/1 77/36/1 78/38/1 +f 84/39/4 82/37/4 78/38/4 +f 84/39/4 78/38/4 80/40/4 +f 83/34/2 84/41/2 80/42/2 +f 83/34/2 80/42/2 79/35/2 +f 85/43/5 86/44/5 83/23/5 +f 85/43/5 83/23/5 81/42/5 +f 88/15/2 87/16/2 89/17/2 +f 88/15/2 89/17/2 90/18/2 +f 93/19/1 91/20/1 92/21/1 +f 93/19/1 92/21/1 94/22/1 +f 91/20/3 87/16/3 88/23/3 +f 91/20/3 88/23/3 92/24/3 +f 90/25/4 89/17/4 93/19/4 +f 90/25/4 93/19/4 94/26/4 +f 89/17/6 87/16/6 91/20/6 +f 89/17/6 91/20/6 93/19/6 +f 95/27/5 97/28/5 92/29/5 +f 95/27/5 92/29/5 88/15/5 +f 96/30/5 95/27/5 88/15/5 +f 96/30/5 88/15/5 90/18/5 +f 98/31/5 96/30/5 90/18/5 +f 98/31/5 90/18/5 94/32/5 +f 97/28/5 98/31/5 94/32/5 +f 97/28/5 94/32/5 92/29/5 +f 99/33/3 101/34/3 97/35/3 +f 99/33/3 97/35/3 95/36/3 +f 100/37/2 99/33/2 95/36/2 +f 100/37/2 95/36/2 96/38/2 +f 102/39/4 100/37/4 96/38/4 +f 102/39/4 96/38/4 98/40/4 +f 101/34/1 102/41/1 98/42/1 +f 101/34/1 98/42/1 97/35/1 +f 103/43/6 104/44/6 101/23/6 +f 103/43/6 101/23/6 99/42/6 +f 48/13/4 64/23/4 66/45/4 +f 48/13/4 66/45/4 46/46/4 +f 109/47/7 105/48/7 106/49/7 +f 109/47/7 106/49/7 110/50/7 +f 108/51/8 107/52/8 111/53/8 +f 108/51/8 111/53/8 112/54/8 +f 107/52/9 105/48/9 109/47/9 +f 107/52/9 109/47/9 111/53/9 +f 110/50/10 106/49/10 108/29/10 +f 110/50/10 108/29/10 112/55/10 +f 117/47/11 113/48/11 114/49/11 +f 117/47/11 114/49/11 118/50/11 +f 116/51/12 115/52/12 119/53/12 +f 116/51/12 119/53/12 120/54/12 +f 115/52/13 113/48/13 117/47/13 +f 115/52/13 117/47/13 119/53/13 +f 118/50/14 114/49/14 116/29/14 +f 118/50/14 116/29/14 120/55/14 +f 125/47/7 121/48/7 122/49/7 +f 125/47/7 122/49/7 126/50/7 +f 124/51/8 123/52/8 127/53/8 +f 124/51/8 127/53/8 128/54/8 +f 123/52/15 121/48/15 125/47/15 +f 123/52/15 125/47/15 127/53/15 +f 126/50/16 122/49/16 124/29/16 +f 126/50/16 124/29/16 128/55/16 +f 133/47/11 129/48/11 130/49/11 +f 133/47/11 130/49/11 134/50/11 +f 132/51/12 131/52/12 135/53/12 +f 132/51/12 135/53/12 136/54/12 +f 131/52/17 129/48/17 133/47/17 +f 131/52/17 133/47/17 135/53/17 +f 134/50/18 130/49/18 132/29/18 +f 134/50/18 132/29/18 136/55/18 +f 141/47/7 137/48/7 138/49/7 +f 141/47/7 138/49/7 142/50/7 +f 140/51/8 139/52/8 143/53/8 +f 140/51/8 143/53/8 144/54/8 +f 139/52/15 137/48/15 141/47/15 +f 139/52/15 141/47/15 143/53/15 +f 142/50/16 138/49/16 140/29/16 +f 142/50/16 140/29/16 144/55/16 +f 149/47/11 145/48/11 146/49/11 +f 149/47/11 146/49/11 150/50/11 +f 148/51/12 147/52/12 151/53/12 +f 148/51/12 151/53/12 152/54/12 +f 147/52/17 145/48/17 149/47/17 +f 147/52/17 149/47/17 151/53/17 +f 150/50/18 146/49/18 148/29/18 +f 150/50/18 148/29/18 152/55/18 +f 157/47/7 153/48/7 154/49/7 +f 157/47/7 154/49/7 158/50/7 +f 156/51/8 155/52/8 159/53/8 +f 156/51/8 159/53/8 160/54/8 +f 155/52/5 153/48/5 157/47/5 +f 155/52/5 157/47/5 159/53/5 +f 158/50/6 154/49/6 156/29/6 +f 158/50/6 156/29/6 160/55/6 +f 165/47/11 161/48/11 162/49/11 +f 165/47/11 162/49/11 166/50/11 +f 164/51/12 163/52/12 167/53/12 +f 164/51/12 167/53/12 168/54/12 +f 163/52/6 161/48/6 165/47/6 +f 163/52/6 165/47/6 167/53/6 +f 166/50/5 162/49/5 164/29/5 +f 166/50/5 164/29/5 168/55/5 +f 173/56/3 169/57/3 170/32/3 +f 173/56/3 170/32/3 174/58/3 +f 172/29/4 171/59/4 175/60/4 +f 172/29/4 175/60/4 176/61/4 +f 171/59/6 169/57/6 173/56/6 +f 171/59/6 173/56/6 175/60/6 +f 174/58/5 170/32/5 172/62/5 +f 174/58/5 172/62/5 176/63/5 +f 181/47/11 177/48/11 178/49/11 +f 181/47/11 178/49/11 182/50/11 +f 180/51/12 179/52/12 183/53/12 +f 180/51/12 183/53/12 184/54/12 +f 179/52/10 177/48/10 181/47/10 +f 179/52/10 181/47/10 183/53/10 +f 182/50/9 178/49/9 180/29/9 +f 182/50/9 180/29/9 184/55/9 +f 189/47/7 185/48/7 186/49/7 +f 189/47/7 186/49/7 190/50/7 +f 188/51/8 187/52/8 191/53/8 +f 188/51/8 191/53/8 192/54/8 +f 187/52/14 185/48/14 189/47/14 +f 187/52/14 189/47/14 191/53/14 +f 190/50/13 186/49/13 188/29/13 +f 190/50/13 188/29/13 192/55/13 +f 197/47/11 193/48/11 194/49/11 +f 197/47/11 194/49/11 198/50/11 +f 196/51/12 195/52/12 199/53/12 +f 196/51/12 199/53/12 200/54/12 +f 195/52/16 193/48/16 197/47/16 +f 195/52/16 197/47/16 199/53/16 +f 198/50/15 194/49/15 196/29/15 +f 198/50/15 196/29/15 200/55/15 +f 205/47/7 201/48/7 202/49/7 +f 205/47/7 202/49/7 206/50/7 +f 204/51/8 203/52/8 207/53/8 +f 204/51/8 207/53/8 208/54/8 +f 203/52/18 201/48/18 205/47/18 +f 203/52/18 205/47/18 207/53/18 +f 206/50/17 202/49/17 204/29/17 +f 206/50/17 204/29/17 208/55/17 +f 213/47/11 209/48/11 210/49/11 +f 213/47/11 210/49/11 214/50/11 +f 212/51/12 211/52/12 215/53/12 +f 212/51/12 215/53/12 216/54/12 +f 211/52/16 209/48/16 213/47/16 +f 211/52/16 213/47/16 215/53/16 +f 214/50/15 210/49/15 212/29/15 +f 214/50/15 212/29/15 216/55/15 +f 221/47/7 217/48/7 218/49/7 +f 221/47/7 218/49/7 222/50/7 +f 220/51/8 219/52/8 223/53/8 +f 220/51/8 223/53/8 224/54/8 +f 219/52/18 217/48/18 221/47/18 +f 219/52/18 221/47/18 223/53/18 +f 222/50/17 218/49/17 220/29/17 +f 222/50/17 220/29/17 224/55/17 +f 229/47/11 225/48/11 226/49/11 +f 229/47/11 226/49/11 230/50/11 +f 228/51/12 227/52/12 231/53/12 +f 228/51/12 231/53/12 232/54/12 +f 227/52/6 225/48/6 229/47/6 +f 227/52/6 229/47/6 231/53/6 +f 230/50/5 226/49/5 228/29/5 +f 230/50/5 228/29/5 232/55/5 +f 237/47/7 233/48/7 234/49/7 +f 237/47/7 234/49/7 238/50/7 +f 236/51/8 235/52/8 239/53/8 +f 236/51/8 239/53/8 240/54/8 +f 235/52/5 233/48/5 237/47/5 +f 235/52/5 237/47/5 239/53/5 +f 238/50/6 234/49/6 236/29/6 +f 238/50/6 236/29/6 240/55/6 +f 245/56/3 241/57/3 242/32/3 +f 245/56/3 242/32/3 246/58/3 +f 244/29/4 243/59/4 247/60/4 +f 244/29/4 247/60/4 248/61/4 +f 243/59/5 241/57/5 245/56/5 +f 243/59/5 245/56/5 247/60/5 +f 246/58/6 242/32/6 244/62/6 +f 246/58/6 244/62/6 248/63/6 +f 253/47/19 249/48/19 250/49/19 +f 253/47/19 250/49/19 254/50/19 +f 252/51/20 251/52/20 255/53/20 +f 252/51/20 255/53/20 256/54/20 +f 251/52/21 249/48/21 253/47/21 +f 251/52/21 253/47/21 255/53/21 +f 254/50/22 250/49/22 252/29/22 +f 254/50/22 252/29/22 256/55/22 +f 261/47/23 257/48/23 258/49/23 +f 261/47/23 258/49/23 262/50/23 +f 260/51/24 259/52/24 263/53/24 +f 260/51/24 263/53/24 264/54/24 +f 259/52/25 257/48/25 261/47/25 +f 259/52/25 261/47/25 263/53/25 +f 262/50/26 258/49/26 260/29/26 +f 262/50/26 260/29/26 264/55/26 +f 269/47/19 265/48/19 266/49/19 +f 269/47/19 266/49/19 270/50/19 +f 268/51/20 267/52/20 271/53/20 +f 268/51/20 271/53/20 272/54/20 +f 267/52/27 265/48/27 269/47/27 +f 267/52/27 269/47/27 271/53/27 +f 270/50/28 266/49/28 268/29/28 +f 270/50/28 268/29/28 272/55/28 +f 277/47/23 273/48/23 274/49/23 +f 277/47/23 274/49/23 278/50/23 +f 276/51/24 275/52/24 279/53/24 +f 276/51/24 279/53/24 280/54/24 +f 275/52/29 273/48/29 277/47/29 +f 275/52/29 277/47/29 279/53/29 +f 278/50/30 274/49/30 276/29/30 +f 278/50/30 276/29/30 280/55/30 +f 285/47/19 281/48/19 282/49/19 +f 285/47/19 282/49/19 286/50/19 +f 284/51/20 283/52/20 287/53/20 +f 284/51/20 287/53/20 288/54/20 +f 283/52/27 281/48/27 285/47/27 +f 283/52/27 285/47/27 287/53/27 +f 286/50/28 282/49/28 284/29/28 +f 286/50/28 284/29/28 288/55/28 +f 293/47/23 289/48/23 290/49/23 +f 293/47/23 290/49/23 294/50/23 +f 292/51/24 291/52/24 295/53/24 +f 292/51/24 295/53/24 296/54/24 +f 291/52/29 289/48/29 293/47/29 +f 291/52/29 293/47/29 295/53/29 +f 294/50/30 290/49/30 292/29/30 +f 294/50/30 292/29/30 296/55/30 +f 301/47/19 297/48/19 298/49/19 +f 301/47/19 298/49/19 302/50/19 +f 300/51/20 299/52/20 303/53/20 +f 300/51/20 303/53/20 304/54/20 +f 299/52/1 297/48/1 301/47/1 +f 299/52/1 301/47/1 303/53/1 +f 302/50/2 298/49/2 300/29/2 +f 302/50/2 300/29/2 304/55/2 +f 309/47/23 305/48/23 306/49/23 +f 309/47/23 306/49/23 310/50/23 +f 308/51/24 307/52/24 311/53/24 +f 308/51/24 311/53/24 312/54/24 +f 307/52/2 305/48/2 309/47/2 +f 307/52/2 309/47/2 311/53/2 +f 310/50/1 306/49/1 308/29/1 +f 310/50/1 308/29/1 312/55/1 +f 317/56/3 313/57/3 314/32/3 +f 317/56/3 314/32/3 318/58/3 +f 316/29/4 315/59/4 319/60/4 +f 316/29/4 319/60/4 320/61/4 +f 315/59/2 313/57/2 317/56/2 +f 315/59/2 317/56/2 319/60/2 +f 318/58/1 314/32/1 316/62/1 +f 318/58/1 316/62/1 320/63/1 +f 325/47/23 321/48/23 322/49/23 +f 325/47/23 322/49/23 326/50/23 +f 324/51/24 323/52/24 327/53/24 +f 324/51/24 327/53/24 328/54/24 +f 323/52/22 321/48/22 325/47/22 +f 323/52/22 325/47/22 327/53/22 +f 326/50/21 322/49/21 324/29/21 +f 326/50/21 324/29/21 328/55/21 +f 333/47/19 329/48/19 330/49/19 +f 333/47/19 330/49/19 334/50/19 +f 332/51/20 331/52/20 335/53/20 +f 332/51/20 335/53/20 336/54/20 +f 331/52/26 329/48/26 333/47/26 +f 331/52/26 333/47/26 335/53/26 +f 334/50/25 330/49/25 332/29/25 +f 334/50/25 332/29/25 336/55/25 +f 341/47/23 337/48/23 338/49/23 +f 341/47/23 338/49/23 342/50/23 +f 340/51/24 339/52/24 343/53/24 +f 340/51/24 343/53/24 344/54/24 +f 339/52/28 337/48/28 341/47/28 +f 339/52/28 341/47/28 343/53/28 +f 342/50/27 338/49/27 340/29/27 +f 342/50/27 340/29/27 344/55/27 +f 349/47/19 345/48/19 346/49/19 +f 349/47/19 346/49/19 350/50/19 +f 348/51/20 347/52/20 351/53/20 +f 348/51/20 351/53/20 352/54/20 +f 347/52/30 345/48/30 349/47/30 +f 347/52/30 349/47/30 351/53/30 +f 350/50/29 346/49/29 348/29/29 +f 350/50/29 348/29/29 352/55/29 +f 357/47/23 353/48/23 354/49/23 +f 357/47/23 354/49/23 358/50/23 +f 356/51/24 355/52/24 359/53/24 +f 356/51/24 359/53/24 360/54/24 +f 355/52/28 353/48/28 357/47/28 +f 355/52/28 357/47/28 359/53/28 +f 358/50/27 354/49/27 356/29/27 +f 358/50/27 356/29/27 360/55/27 +f 365/47/19 361/48/19 362/49/19 +f 365/47/19 362/49/19 366/50/19 +f 364/51/20 363/52/20 367/53/20 +f 364/51/20 367/53/20 368/54/20 +f 363/52/30 361/48/30 365/47/30 +f 363/52/30 365/47/30 367/53/30 +f 366/50/29 362/49/29 364/29/29 +f 366/50/29 364/29/29 368/55/29 +f 373/47/23 369/48/23 370/49/23 +f 373/47/23 370/49/23 374/50/23 +f 372/51/24 371/52/24 375/53/24 +f 372/51/24 375/53/24 376/54/24 +f 371/52/2 369/48/2 373/47/2 +f 371/52/2 373/47/2 375/53/2 +f 374/50/1 370/49/1 372/29/1 +f 374/50/1 372/29/1 376/55/1 +f 381/47/19 377/48/19 378/49/19 +f 381/47/19 378/49/19 382/50/19 +f 380/51/20 379/52/20 383/53/20 +f 380/51/20 383/53/20 384/54/20 +f 379/52/1 377/48/1 381/47/1 +f 379/52/1 381/47/1 383/53/1 +f 382/50/2 378/49/2 380/29/2 +f 382/50/2 380/29/2 384/55/2 +f 389/56/3 385/57/3 386/32/3 +f 389/56/3 386/32/3 390/58/3 +f 388/29/4 387/59/4 391/60/4 +f 388/29/4 391/60/4 392/61/4 +f 387/59/1 385/57/1 389/56/1 +f 387/59/1 389/56/1 391/60/1 +f 390/58/2 386/32/2 388/62/2 +f 390/58/2 388/62/2 392/63/2 +f 394/64/1 393/65/1 395/66/1 +f 394/64/1 395/66/1 396/67/1 +f 399/68/2 397/69/2 398/70/2 +f 399/68/2 398/70/2 400/71/2 +f 395/66/5 393/65/5 397/69/5 +f 395/66/5 397/69/5 399/68/5 +f 398/21/6 394/64/6 396/67/6 +f 398/21/6 396/67/6 400/72/6 +f 401/73/31 403/74/31 397/69/31 +f 401/73/31 397/69/31 393/65/31 +f 402/75/32 401/73/33 393/65/33 +f 402/75/32 393/65/33 394/64/33 +f 404/76/34 402/75/35 394/64/35 +f 404/76/34 394/64/35 398/21/35 +f 403/74/36 404/77/36 398/70/36 +f 403/74/36 398/70/36 397/69/36 +f 405/78/37 403/74/37 401/73/37 +f 405/79/38 404/77/38 403/74/38 +f 407/64/2 406/65/2 408/66/2 +f 407/64/2 408/66/2 409/67/2 +f 412/68/1 410/69/1 411/70/1 +f 412/68/1 411/70/1 413/71/1 +f 408/66/6 406/65/6 410/69/6 +f 408/66/6 410/69/6 412/68/6 +f 411/21/5 407/64/5 409/67/5 +f 411/21/5 409/67/5 413/72/5 +f 414/73/39 416/74/39 410/69/39 +f 414/73/39 410/69/39 406/65/39 +f 415/75/40 414/73/41 406/65/41 +f 415/75/40 406/65/41 407/64/41 +f 417/76/42 415/75/43 407/64/43 +f 417/76/42 407/64/43 411/21/43 +f 416/74/44 417/77/44 411/70/44 +f 416/74/44 411/70/44 410/69/44 +f 418/78/45 416/74/45 414/73/45 +f 418/79/46 417/77/46 416/74/46 +f 420/64/6 419/65/6 421/66/6 +f 420/64/6 421/66/6 422/67/6 +f 425/68/5 423/69/5 424/70/5 +f 425/68/5 424/70/5 426/71/5 +f 421/66/1 419/65/1 423/69/1 +f 421/66/1 423/69/1 425/68/1 +f 424/21/2 420/64/2 422/67/2 +f 424/21/2 422/67/2 426/72/2 +f 427/73/44 429/74/44 423/69/44 +f 427/73/44 423/69/44 419/65/44 +f 428/75/47 427/73/48 419/65/48 +f 428/75/47 419/65/48 420/64/48 +f 430/76/49 428/75/50 420/64/50 +f 430/76/49 420/64/50 424/21/50 +f 429/74/31 430/77/31 424/70/31 +f 429/74/31 424/70/31 423/69/31 +f 431/78/46 429/74/46 427/73/46 +f 431/79/37 430/77/37 429/74/37 +f 433/64/5 432/65/5 434/66/5 +f 433/64/5 434/66/5 435/67/5 +f 438/68/6 436/69/6 437/70/6 +f 438/68/6 437/70/6 439/71/6 +f 434/66/2 432/65/2 436/69/2 +f 434/66/2 436/69/2 438/68/2 +f 437/21/1 433/64/1 435/67/1 +f 437/21/1 435/67/1 439/72/1 +f 440/73/36 442/74/36 436/69/36 +f 440/73/36 436/69/36 432/65/36 +f 441/75/51 440/73/52 432/65/52 +f 441/75/51 432/65/52 433/64/52 +f 443/76/53 441/75/54 433/64/54 +f 443/76/53 433/64/54 437/21/54 +f 442/74/39 443/77/39 437/70/39 +f 442/74/39 437/70/39 436/69/39 +f 444/78/38 442/74/38 440/73/38 +f 444/79/45 443/77/45 442/74/45 +f 445/80/1 446/81/1 447/82/1 +f 448/80/2 449/81/2 450/82/2 +f 451/83/4 452/84/4 453/85/4 +f 454/86/1 455/85/1 456/87/1 +f 457/86/2 451/85/2 458/87/2 +f 458/86/6 453/85/6 454/87/6 +f 456/86/5 459/85/5 457/87/5 +f 452/88/1 460/89/1 461/84/1 +f 455/83/4 462/84/4 459/85/4 +f 453/83/4 461/84/4 455/85/4 +f 459/83/4 463/84/4 451/85/4 +f 449/90/4 464/91/4 465/81/4 +f 462/88/2 466/89/2 463/84/2 +f 463/88/6 467/89/6 452/84/6 +f 461/88/5 468/89/5 462/84/5 +f 450/80/6 465/81/6 445/82/6 +f 447/80/5 469/81/5 448/82/5 +f 464/92/1 470/93/1 471/91/1 +f 446/90/4 472/91/4 469/81/4 +f 465/90/4 471/91/4 446/81/4 +f 469/90/4 473/91/4 449/81/4 +f 472/92/2 474/93/2 473/91/2 +f 473/92/6 475/93/6 464/91/6 +f 471/92/5 476/93/5 472/91/5 +f 447/80/3 468/89/3 460/94/3 +f 445/80/3 460/89/3 467/94/3 +f 450/80/3 467/89/3 466/94/3 +f 448/80/3 466/89/3 468/94/3 +f 477/95/1 478/96/1 479/97/1 +f 480/95/2 481/96/2 482/97/2 +f 482/95/6 483/96/6 477/97/6 +f 479/95/5 484/96/5 480/97/5 +f 479/95/3 476/93/3 470/98/3 +f 477/95/3 470/93/3 475/98/3 +f 482/95/3 475/93/3 474/98/3 +f 480/95/3 474/93/3 476/98/3 +f 484/99/3 485/100/3 481/96/3 +f 486/101/1 487/102/1 488/100/1 +f 481/99/3 486/100/3 483/96/3 +f 478/99/3 489/100/3 484/96/3 +f 483/99/3 488/100/3 478/96/3 +f 490/103/3 491/104/3 492/105/3 +f 489/101/2 492/102/2 485/100/2 +f 485/101/6 491/102/6 486/100/6 +f 488/101/5 490/102/5 489/100/5 +f 445/80/1 465/90/1 446/81/1 +f 448/80/2 469/90/2 449/81/2 +f 451/83/4 463/88/4 452/84/4 +f 454/86/1 453/83/1 455/85/1 +f 457/86/2 459/83/2 451/85/2 +f 458/86/6 451/83/6 453/85/6 +f 456/86/5 455/83/5 459/85/5 +f 452/88/1 467/94/1 460/89/1 +f 455/83/4 461/88/4 462/84/4 +f 453/83/4 452/88/4 461/84/4 +f 459/83/4 462/88/4 463/84/4 +f 449/90/4 473/92/4 464/91/4 +f 462/88/2 468/94/2 466/89/2 +f 463/88/6 466/94/6 467/89/6 +f 461/88/5 460/94/5 468/89/5 +f 450/80/6 449/90/6 465/81/6 +f 447/80/5 446/90/5 469/81/5 +f 464/92/1 475/98/1 470/93/1 +f 446/90/4 471/92/4 472/91/4 +f 465/90/4 464/92/4 471/91/4 +f 469/90/4 472/92/4 473/91/4 +f 472/92/2 476/98/2 474/93/2 +f 473/92/6 474/98/6 475/93/6 +f 471/92/5 470/98/5 476/93/5 +f 447/80/3 448/82/3 468/89/3 +f 445/80/3 447/82/3 460/89/3 +f 450/80/3 445/82/3 467/89/3 +f 448/80/3 450/82/3 466/89/3 +f 477/95/1 483/99/1 478/96/1 +f 480/95/2 484/99/2 481/96/2 +f 482/95/6 481/99/6 483/96/6 +f 479/95/5 478/99/5 484/96/5 +f 479/95/3 480/97/3 476/93/3 +f 477/95/3 479/97/3 470/93/3 +f 482/95/3 477/97/3 475/93/3 +f 480/95/3 482/97/3 474/93/3 +f 484/99/3 489/101/3 485/100/3 +f 486/101/1 491/104/1 487/102/1 +f 481/99/3 485/101/3 486/100/3 +f 478/99/3 488/101/3 489/100/3 +f 483/99/3 486/101/3 488/100/3 +f 490/103/3 487/102/3 491/104/3 +f 489/101/2 490/104/2 492/102/2 +f 485/101/6 492/104/6 491/102/6 +f 488/101/5 487/104/5 490/102/5 +f 494/106/1 493/107/1 495/108/1 +f 494/106/1 495/108/1 496/109/1 +f 499/110/2 497/111/2 498/112/2 +f 499/110/2 498/112/2 500/113/2 +f 497/114/3 493/107/3 494/115/3 +f 497/114/3 494/115/3 498/10/3 +f 496/107/4 495/115/4 499/10/4 +f 496/107/4 499/10/4 500/114/4 +f 495/108/5 493/107/5 497/114/5 +f 495/108/5 497/114/5 499/116/5 +f 498/112/6 494/106/6 496/109/6 +f 498/112/6 496/109/6 500/113/6 diff --git a/src/main/resources/assets/hbm/textures/models/network/pylon.png b/src/main/resources/assets/hbm/textures/models/network/pylon.png new file mode 100644 index 0000000000000000000000000000000000000000..6545feb4624cfcd1e9f850141d6e03ac1c4aea0d GIT binary patch literal 1440 zcmV;R1z-A!P)Px)T1iAfRA_|wD{-lI>=-s*^$Xm5 zKK*_lfZ=e+a5x0us`D>jzMRV0l_)q#q#!fz{3LF3u;~DG72Mg`amE-t&qGSd;o;%j zHrI-R-EJ3vBuTD~ZKaBXAONVeVy#?3V+>mB%FAgh3Q8#fu-0B1yK)7UQnk!TD+*>= zMxN)TlJl@~1%n_UNfLw*tC`|?3Z4wQuGiE2u>aw!E!|QTeE&WMx>M(pBw=lBZFN&T zPr-Zly7YSb(s#7hD5X}@sOu_N^ua3R7DDh#3LYFBxE~)q;`H>Cz1>sy?Afz24~ycs zkyU&n`ru$Na4%lG06wcV7!2I&*RKV9HVLh+B-Yw;3Z;}&Wa2o+^SnxmFGWGEH9`oS zb9kPIbMC9n>{1jILZFnw7*if6(Yhae_3D*4I5=>RE~@zCzXpO;nKx*sfxWHJwn zBDpbsaIz>SiNX!=gGG@5Q-xB*wB84cA_1-}l-B*=ydr7c4?cbR)OnuA-rgQCo^E3d zPo6w+b*6S<1ZNdYk_4?ayL+j4|!{!SBD@z*$R@q-gEY>3IC{XSJI`OCdO`pfeU@4Qt&yq*;b_ z&BkB2f}3|keBZ}di?20j@p-!hXBEtIgS81^*kkzN1KMkLiN#lOKSW7E6n#Q_9!Xk% z{aq-*Sp_?R#u|5_By<9wonHq|Nr99S!MI+e5?JF%()7ZfNsM*O#?>bH@Zm!jh9OZD zQ5+`~G~f1d&T;2XhtVj(SckI~gQVN-l**diRf?-ku-okth9Sn7Qn{(M*cyD_M@mVj z6EI3rJa4?hj7B4Zz$ZyFq@Y?{U4pZSqNu!07DW+BnvG3@@8fwMo|HJ}(7xuIZ$g}N zNI~Ve+6u;Tj8dvR&gNj?j}59+5|=xyvq&+{DQhfBDbC{a%5h7nVj%<{KSl^45JHe& zmI;%m)l zG(t&%L5`2caeh7`@cpvIREb-74xXKl^UGR?QsWvtJo>9WvvAc~oaH(F^>w1?Qzg&0 zP=eRxV4fR#-7ZNo&ZRU>S4(gfSNXv-%kZ@(NmG<;c9VPIIVc4f827rsM^yM@v`~Vx zm{ss!iYZsT|8IEdfycpMFxSEs``BMi@VXof!;s-{NF2x9zkk2(@RzV~1;a2Tj^lEh zcNUXRkt~JabvYPCQK?)MMRkX7PVn8kcLHE*Ys(e?d-FU8#ybVa$HzD4A=|3^E0ehD z;h=e_O>k>#Yi<=zeqJbCVBQa!t=$M+Uc%qMHy&ahY7?AH^djfJ6tlg(?Pkw!Zf-7@VA1EkRL$4* u!3Pf>)Y?w+U^*|Vyf09vjm#To9{vY#+DP4y{r-yp0000 Date: Wed, 22 Jul 2026 11:04:42 +0400 Subject: [PATCH 38/50] Nah --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../java/com/hbm/main/CraftingManager.java | 3 +- .../java/com/hbm/main/ResourceManager.java | 1 + .../hbm/render/tileentity/RenderPylon.java | 36 +- src/main/resources/assets/hbm/lang/en_US.lang | 5 +- .../assets/hbm/models/network/pylon.obj | 2059 ++++++++--------- .../hbm/textures/models/network/pylon.png | Bin 1440 -> 2166 bytes .../textures/models/network/pylon_steel.png | Bin 0 -> 1872 bytes 8 files changed, 938 insertions(+), 1169 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/network/pylon_steel.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5915da10a..9e923be5b 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -745,6 +745,7 @@ public class ModBlocks { public static Block red_connector; public static Block red_connector_super; public static Block red_pylon; + public static Block red_pylon_steel; public static Block red_pylon_medium_wood; public static Block red_pylon_medium_wood_transformer; public static Block red_pylon_medium_steel; @@ -1854,6 +1855,7 @@ public class ModBlocks { red_connector = new ConnectorRedWire(Material.iron).setBlockName("red_connector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_connector"); red_connector_super = new ConnectorRedWireSuper(Material.iron).setBlockName("red_connector_super").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_connector"); red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); + red_pylon_steel = new PylonRedWire(Material.iron).setBlockName("red_pylon_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); red_pylon_medium_wood = new PylonMedium(Material.wood).setBlockName("red_pylon_medium_wood").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); red_pylon_medium_wood_transformer = new PylonMedium(Material.wood).setBlockName("red_pylon_medium_wood_transformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); red_pylon_medium_steel = new PylonMedium(Material.iron).setBlockName("red_pylon_medium_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); @@ -3130,6 +3132,7 @@ public class ModBlocks { register(red_connector); register(red_connector_super); register(red_pylon); + register(red_pylon_steel); register(red_pylon_medium_wood); register(red_pylon_medium_wood_transformer); register(red_pylon_medium_steel); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 91b1de343..91207f605 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -241,7 +241,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.red_cable_gauge), new Object[] { ModBlocks.red_wire_coated, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.red_connector_super, 2), new Object[] { "CCC", "III", " S ", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', ANY_RESISTANTALLOY.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 2), new Object[] { " C ", "WPW", " S ", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'P', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); + addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 4), new Object[] { "CWC", "PWP", " S ", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'P', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); + addRecipeAuto(new ItemStack(ModBlocks.red_pylon_steel, 4), new Object[] { "CWC", "PWP", " S ", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'P', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_wood, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addShapelessAuto(new ItemStack(ModBlocks.red_pylon_medium_wood_transformer, 1), new Object[] { ModBlocks.red_pylon_medium_wood, ModItems.plate_polymer, ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_steel, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 23a087f3d..5164c34f8 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -861,6 +861,7 @@ public class ResourceManager { public static final ResourceLocation connector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/connector.png"); public static final ResourceLocation connector_super_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/connector_super.png"); public static final ResourceLocation pylon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon.png"); + public static final ResourceLocation pylon_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_steel.png"); public static final ResourceLocation pylon_medium_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_medium.png"); public static final ResourceLocation pylon_medium_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_medium_steel.png"); public static final ResourceLocation pylon_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_large.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index 535c923cc..bc50d99de 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -9,6 +9,7 @@ import com.hbm.render.item.ItemRenderBase; import com.hbm.tileentity.network.TileEntityPylon; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.IItemRenderer; @@ -21,19 +22,31 @@ public class RenderPylon extends RenderPylonBase implements IItemRendererProvide GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); - TileEntityPylon pyl = (TileEntityPylon)tile; + TileEntityPylon pylon = (TileEntityPylon)tile; + + if(tile.getBlockType() == ModBlocks.red_pylon_steel) + bindTexture(ResourceManager.pylon_steel_tex); + else + bindTexture(ResourceManager.pylon_tex); - bindTexture(ResourceManager.pylon_tex); ResourceManager.pylon.renderAll(); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); GL11.glPushMatrix(); - this.renderLinesGeneric(pyl, x, y, z); + this.renderLinesGeneric(pylon, x, y, z); GL11.glPopMatrix(); } + @Override + public Item[] getItemsForRenderer() { + return new Item[] { + Item.getItemFromBlock(ModBlocks.red_pylon), + Item.getItemFromBlock(ModBlocks.red_pylon_steel), + }; + } + @Override public Item getItemForRenderer() { return Item.getItemFromBlock(ModBlocks.red_pylon); @@ -41,17 +54,22 @@ public class RenderPylon extends RenderPylonBase implements IItemRendererProvide @Override public IItemRenderer getRenderer() { - return new ItemRenderBase() { + return new ItemRenderBase( ) { public void renderInventory() { GL11.glTranslated(0, -5, 0); GL11.glScaled(2.9, 2.9, 2.9); } - public void renderCommon() { + public void renderCommonWithStack(ItemStack stack) { GL11.glScaled(1, 1, 1); - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.pylon_tex); + + if(stack.getItem() == Item.getItemFromBlock(ModBlocks.red_pylon_steel)) + bindTexture(ResourceManager.pylon_steel_tex); + else + bindTexture(ResourceManager.pylon_tex); + ResourceManager.pylon.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - }}; + GL11.glShadeModel(GL11.GL_FLAT); + } + }; } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index dd741b662..ed68a321d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6219,8 +6219,9 @@ tile.red_cable_paintable.name=Paintable Red Copper Cable tile.red_cable_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool tile.red_connector.name=Electricity Connector tile.red_connector_super.name=Heavy Duty Electricity Connector -tile.red_pylon.name=Industrial Electricity Pylon -tile.red_pylon_large.name=Large Electricity Pylon +tile.red_pylon.name=Wooden Electricity Pylon +tile.red_pylon_steel.name=Wooden Electricity Pylon +tile.red_pylon_large.name=Steel Electricity Pylon tile.red_pylon_medium_steel.name=Medium Steel Electricity Pylon tile.red_pylon_medium_steel_transformer.name=Medium Steel Electricity Pylon with Transformer tile.red_pylon_medium_wood.name=Medium Wooden Electricity Pylon diff --git a/src/main/resources/assets/hbm/models/network/pylon.obj b/src/main/resources/assets/hbm/models/network/pylon.obj index ebbffe872..4f75c45e1 100644 --- a/src/main/resources/assets/hbm/models/network/pylon.obj +++ b/src/main/resources/assets/hbm/models/network/pylon.obj @@ -33,418 +33,14 @@ v 0.187500 0.500000 -0.187500 v 0.187500 0.500000 -0.500000 v 0.187500 -0.000000 -0.187500 v 0.187500 -0.000000 -0.500000 -v 0.500000 0.687500 -0.187500 -v 0.375000 0.687500 -0.187500 -v 0.500000 0.312500 -0.187500 -v 0.375000 0.312500 -0.187500 -v 0.500000 0.687500 0.187500 -v 0.375000 0.687500 0.187500 -v 0.500000 0.312500 0.187500 -v 0.375000 0.312500 0.187500 -v 0.375000 0.625000 -0.125000 -v 0.375000 0.375000 -0.125000 -v 0.375000 0.625000 0.125000 -v 0.375000 0.375000 0.125000 -v 0.125000 0.625000 -0.125000 -v 0.125000 0.375000 -0.125000 -v 0.125000 0.625000 0.125000 -v 0.125000 0.375000 0.125000 -v 0.125000 4.937500 -0.125000 -v 0.125000 4.937500 0.125000 -v -0.500000 0.687500 0.187500 -v -0.375000 0.687500 0.187500 -v -0.500000 0.312500 0.187500 -v -0.375000 0.312500 0.187500 -v -0.500000 0.687500 -0.187500 -v -0.375000 0.687500 -0.187500 -v -0.500000 0.312500 -0.187500 -v -0.375000 0.312500 -0.187500 -v -0.375000 0.625000 0.125000 -v -0.375000 0.375000 0.125000 -v -0.375000 0.625000 -0.125000 -v -0.375000 0.375000 -0.125000 -v -0.125000 0.625000 0.125000 -v -0.125000 0.375000 0.125000 -v -0.125000 0.625000 -0.125000 -v -0.125000 0.375000 -0.125000 -v -0.125000 4.937500 0.125000 -v -0.125000 4.937500 -0.125000 -v 0.187500 0.687500 0.500000 -v 0.187500 0.687500 0.375000 -v 0.187500 0.312500 0.500000 -v 0.187500 0.312500 0.375000 -v -0.187500 0.687500 0.500000 -v -0.187500 0.687500 0.375000 -v -0.187500 0.312500 0.500000 -v -0.187500 0.312500 0.375000 -v 0.125000 0.625000 0.375000 -v 0.125000 0.375000 0.375000 -v -0.125000 0.625000 0.375000 -v -0.125000 0.375000 0.375000 -v 0.125000 0.625000 0.125000 -v 0.125000 0.375000 0.125000 -v -0.125000 0.625000 0.125000 -v -0.125000 0.375000 0.125000 -v 0.125000 4.937500 0.125000 -v -0.125000 4.937500 0.125000 -v -0.187500 0.687500 -0.500000 -v -0.187500 0.687500 -0.375000 -v -0.187500 0.312500 -0.500000 -v -0.187500 0.312500 -0.375000 -v 0.187500 0.687500 -0.500000 -v 0.187500 0.687500 -0.375000 -v 0.187500 0.312500 -0.500000 -v 0.187500 0.312500 -0.375000 -v -0.125000 0.625000 -0.375000 -v -0.125000 0.375000 -0.375000 -v 0.125000 0.625000 -0.375000 -v 0.125000 0.375000 -0.375000 -v -0.125000 0.625000 -0.125000 -v -0.125000 0.375000 -0.125000 -v 0.125000 0.625000 -0.125000 -v 0.125000 0.375000 -0.125000 -v -0.125000 4.937500 -0.125000 -v 0.125000 4.937500 -0.125000 -v 0.250000 2.625000 0.234375 -v 0.250000 2.625000 0.171875 -v 0.250000 2.500000 0.234375 -v 0.250000 2.500000 0.171875 -v -0.250000 2.250000 0.265625 -v -0.250000 2.250000 0.203125 -v -0.250000 2.125000 0.265625 -v -0.250000 2.125000 0.203125 -v -0.250000 2.625000 0.234375 -v -0.250000 2.625000 0.296875 -v -0.250000 2.500000 0.234375 -v -0.250000 2.500000 0.296875 -v 0.250000 2.250000 0.265625 -v 0.250000 2.250000 0.328125 -v 0.250000 2.125000 0.265625 -v 0.250000 2.125000 0.328125 -v 0.250000 2.125000 0.265625 -v 0.250000 2.125000 0.203125 -v 0.250000 2.000000 0.265625 -v 0.250000 2.000000 0.203125 -v -0.250000 1.750000 0.312500 -v -0.250000 1.750000 0.250000 -v -0.250000 1.625000 0.312500 -v -0.250000 1.625000 0.250000 -v -0.250000 2.125000 0.265625 -v -0.250000 2.125000 0.328125 -v -0.250000 2.000000 0.265625 -v -0.250000 2.000000 0.328125 -v 0.250000 1.750000 0.312500 -v 0.250000 1.750000 0.375000 -v 0.250000 1.625000 0.312500 -v 0.250000 1.625000 0.375000 -v 0.250000 1.625000 0.296875 -v 0.250000 1.625000 0.234375 -v 0.250000 1.500000 0.296875 -v 0.250000 1.500000 0.234375 -v -0.250000 1.250000 0.343750 -v -0.250000 1.250000 0.281250 -v -0.250000 1.125000 0.343750 -v -0.250000 1.125000 0.281250 -v -0.250000 1.625000 0.296875 -v -0.250000 1.625000 0.359375 -v -0.250000 1.500000 0.296875 -v -0.250000 1.500000 0.359375 -v 0.250000 1.250000 0.343750 -v 0.250000 1.250000 0.406250 -v 0.250000 1.125000 0.343750 -v 0.250000 1.125000 0.406250 -v 0.250000 1.125000 0.343750 -v 0.250000 1.125000 0.281250 -v 0.250000 1.000000 0.343750 -v 0.250000 1.000000 0.281250 -v -0.250000 0.750000 0.343750 -v -0.250000 0.750000 0.281250 -v -0.250000 0.625000 0.343750 -v -0.250000 0.625000 0.281250 -v -0.250000 1.125000 0.343750 -v -0.250000 1.125000 0.406250 -v -0.250000 1.000000 0.343750 -v -0.250000 1.000000 0.406250 -v 0.250000 0.750000 0.343750 -v 0.250000 0.750000 0.406250 -v 0.250000 0.625000 0.343750 -v 0.250000 0.625000 0.406250 -v -0.187500 2.750000 0.171875 -v -0.187500 2.750000 0.296875 -v -0.187500 2.625000 0.171875 -v -0.187500 2.625000 0.296875 -v 0.187500 2.750000 0.171875 -v 0.187500 2.750000 0.296875 -v 0.187500 2.625000 0.171875 -v 0.187500 2.625000 0.296875 -v -0.250000 2.625000 -0.234375 -v -0.250000 2.625000 -0.171875 -v -0.250000 2.500000 -0.234375 -v -0.250000 2.500000 -0.171875 -v 0.250000 2.250000 -0.265625 -v 0.250000 2.250000 -0.203125 -v 0.250000 2.125000 -0.265625 -v 0.250000 2.125000 -0.203125 -v 0.250000 2.625000 -0.234375 -v 0.250000 2.625000 -0.296875 -v 0.250000 2.500000 -0.234375 -v 0.250000 2.500000 -0.296875 -v -0.250000 2.250000 -0.265625 -v -0.250000 2.250000 -0.328125 -v -0.250000 2.125000 -0.265625 -v -0.250000 2.125000 -0.328125 -v -0.250000 2.125000 -0.265625 -v -0.250000 2.125000 -0.203125 -v -0.250000 2.000000 -0.265625 -v -0.250000 2.000000 -0.203125 -v 0.250000 1.750000 -0.312500 -v 0.250000 1.750000 -0.250000 -v 0.250000 1.625000 -0.312500 -v 0.250000 1.625000 -0.250000 -v 0.250000 2.125000 -0.265625 -v 0.250000 2.125000 -0.328125 -v 0.250000 2.000000 -0.265625 -v 0.250000 2.000000 -0.328125 -v -0.250000 1.750000 -0.312500 -v -0.250000 1.750000 -0.375000 -v -0.250000 1.625000 -0.312500 -v -0.250000 1.625000 -0.375000 -v -0.250000 1.625000 -0.296875 -v -0.250000 1.625000 -0.234375 -v -0.250000 1.500000 -0.296875 -v -0.250000 1.500000 -0.234375 -v 0.250000 1.250000 -0.343750 -v 0.250000 1.250000 -0.281250 -v 0.250000 1.125000 -0.343750 -v 0.250000 1.125000 -0.281250 -v 0.250000 1.625000 -0.296875 -v 0.250000 1.625000 -0.359375 -v 0.250000 1.500000 -0.296875 -v 0.250000 1.500000 -0.359375 -v -0.250000 1.250000 -0.343750 -v -0.250000 1.250000 -0.406250 -v -0.250000 1.125000 -0.343750 -v -0.250000 1.125000 -0.406250 -v -0.250000 1.125000 -0.343750 -v -0.250000 1.125000 -0.281250 -v -0.250000 1.000000 -0.343750 -v -0.250000 1.000000 -0.281250 -v 0.250000 0.750000 -0.343750 -v 0.250000 0.750000 -0.281250 -v 0.250000 0.625000 -0.343750 -v 0.250000 0.625000 -0.281250 -v 0.250000 1.125000 -0.343750 -v 0.250000 1.125000 -0.406250 -v 0.250000 1.000000 -0.343750 -v 0.250000 1.000000 -0.406250 -v -0.250000 0.750000 -0.343750 -v -0.250000 0.750000 -0.406250 -v -0.250000 0.625000 -0.343750 -v -0.250000 0.625000 -0.406250 -v 0.187500 2.750000 -0.171875 -v 0.187500 2.750000 -0.296875 -v 0.187500 2.625000 -0.171875 -v 0.187500 2.625000 -0.296875 -v -0.187500 2.750000 -0.171875 -v -0.187500 2.750000 -0.296875 -v -0.187500 2.625000 -0.171875 -v -0.187500 2.625000 -0.296875 -v 0.234375 2.625000 -0.250000 -v 0.171875 2.625000 -0.250000 -v 0.234375 2.500000 -0.250000 -v 0.171875 2.500000 -0.250000 -v 0.265625 2.250000 0.250000 -v 0.203125 2.250000 0.250000 -v 0.265625 2.125000 0.250000 -v 0.203125 2.125000 0.250000 -v 0.234375 2.625000 0.250000 -v 0.296875 2.625000 0.250000 -v 0.234375 2.500000 0.250000 -v 0.296875 2.500000 0.250000 -v 0.265625 2.250000 -0.250000 -v 0.328125 2.250000 -0.250000 -v 0.265625 2.125000 -0.250000 -v 0.328125 2.125000 -0.250000 -v 0.265625 2.125000 -0.250000 -v 0.203125 2.125000 -0.250000 -v 0.265625 2.000000 -0.250000 -v 0.203125 2.000000 -0.250000 -v 0.312500 1.750000 0.250000 -v 0.250000 1.750000 0.250000 -v 0.312500 1.625000 0.250000 -v 0.250000 1.625000 0.250000 -v 0.265625 2.125000 0.250000 -v 0.328125 2.125000 0.250000 -v 0.265625 2.000000 0.250000 -v 0.328125 2.000000 0.250000 -v 0.312500 1.750000 -0.250000 -v 0.375000 1.750000 -0.250000 -v 0.312500 1.625000 -0.250000 -v 0.375000 1.625000 -0.250000 -v 0.296875 1.625000 -0.250000 -v 0.234375 1.625000 -0.250000 -v 0.296875 1.500000 -0.250000 -v 0.234375 1.500000 -0.250000 -v 0.343750 1.250000 0.250000 -v 0.281250 1.250000 0.250000 -v 0.343750 1.125000 0.250000 -v 0.281250 1.125000 0.250000 -v 0.296875 1.625000 0.250000 -v 0.359375 1.625000 0.250000 -v 0.296875 1.500000 0.250000 -v 0.359375 1.500000 0.250000 -v 0.343750 1.250000 -0.250000 -v 0.406250 1.250000 -0.250000 -v 0.343750 1.125000 -0.250000 -v 0.406250 1.125000 -0.250000 -v 0.343750 1.125000 -0.250000 -v 0.281250 1.125000 -0.250000 -v 0.343750 1.000000 -0.250000 -v 0.281250 1.000000 -0.250000 -v 0.343750 0.750000 0.250000 -v 0.281250 0.750000 0.250000 -v 0.343750 0.625000 0.250000 -v 0.281250 0.625000 0.250000 -v 0.343750 1.125000 0.250000 -v 0.406250 1.125000 0.250000 -v 0.343750 1.000000 0.250000 -v 0.406250 1.000000 0.250000 -v 0.343750 0.750000 -0.250000 -v 0.406250 0.750000 -0.250000 -v 0.343750 0.625000 -0.250000 -v 0.406250 0.625000 -0.250000 -v 0.171875 2.750000 0.187500 -v 0.296875 2.750000 0.187500 -v 0.171875 2.625000 0.187500 -v 0.296875 2.625000 0.187500 -v 0.171875 2.750000 -0.187500 -v 0.296875 2.750000 -0.187500 -v 0.171875 2.625000 -0.187500 -v 0.296875 2.625000 -0.187500 -v -0.234375 2.625000 0.250000 -v -0.171875 2.625000 0.250000 -v -0.234375 2.500000 0.250000 -v -0.171875 2.500000 0.250000 -v -0.265625 2.250000 -0.250000 -v -0.203125 2.250000 -0.250000 -v -0.265625 2.125000 -0.250000 -v -0.203125 2.125000 -0.250000 -v -0.234375 2.625000 -0.250000 -v -0.296875 2.625000 -0.250000 -v -0.234375 2.500000 -0.250000 -v -0.296875 2.500000 -0.250000 -v -0.265625 2.250000 0.250000 -v -0.328125 2.250000 0.250000 -v -0.265625 2.125000 0.250000 -v -0.328125 2.125000 0.250000 -v -0.265625 2.125000 0.250000 -v -0.203125 2.125000 0.250000 -v -0.265625 2.000000 0.250000 -v -0.203125 2.000000 0.250000 -v -0.312500 1.750000 -0.250000 -v -0.250000 1.750000 -0.250000 -v -0.312500 1.625000 -0.250000 -v -0.250000 1.625000 -0.250000 -v -0.265625 2.125000 -0.250000 -v -0.328125 2.125000 -0.250000 -v -0.265625 2.000000 -0.250000 -v -0.328125 2.000000 -0.250000 -v -0.312500 1.750000 0.250000 -v -0.375000 1.750000 0.250000 -v -0.312500 1.625000 0.250000 -v -0.375000 1.625000 0.250000 -v -0.296875 1.625000 0.250000 -v -0.234375 1.625000 0.250000 -v -0.296875 1.500000 0.250000 -v -0.234375 1.500000 0.250000 -v -0.343750 1.250000 -0.250000 -v -0.281250 1.250000 -0.250000 -v -0.343750 1.125000 -0.250000 -v -0.281250 1.125000 -0.250000 -v -0.296875 1.625000 -0.250000 -v -0.359375 1.625000 -0.250000 -v -0.296875 1.500000 -0.250000 -v -0.359375 1.500000 -0.250000 -v -0.343750 1.250000 0.250000 -v -0.406250 1.250000 0.250000 -v -0.343750 1.125000 0.250000 -v -0.406250 1.125000 0.250000 -v -0.343750 1.125000 0.250000 -v -0.281250 1.125000 0.250000 -v -0.343750 1.000000 0.250000 -v -0.281250 1.000000 0.250000 -v -0.343750 0.750000 -0.250000 -v -0.281250 0.750000 -0.250000 -v -0.343750 0.625000 -0.250000 -v -0.281250 0.625000 -0.250000 -v -0.343750 1.125000 -0.250000 -v -0.406250 1.125000 -0.250000 -v -0.343750 1.000000 -0.250000 -v -0.406250 1.000000 -0.250000 -v -0.343750 0.750000 0.250000 -v -0.406250 0.750000 0.250000 -v -0.343750 0.625000 0.250000 -v -0.406250 0.625000 0.250000 -v -0.171875 2.750000 -0.187500 -v -0.296875 2.750000 -0.187500 -v -0.171875 2.625000 -0.187500 -v -0.296875 2.625000 -0.187500 -v -0.171875 2.750000 0.187500 -v -0.296875 2.750000 0.187500 -v -0.171875 2.625000 0.187500 -v -0.296875 2.625000 0.187500 -v -0.250000 1.000000 0.437500 -v -0.250000 1.000000 0.250000 -v -0.250000 0.500000 0.437500 -v -0.250000 0.500000 0.250000 -v -0.437500 1.000000 0.437500 -v -0.437500 1.000000 0.250000 -v -0.437500 0.500000 0.437500 -v -0.437500 0.500000 0.250000 -v 0.000000 4.937500 0.187500 -v 0.000000 4.875000 -0.000000 -v -0.187500 4.937500 0.187500 -v -0.187500 4.937500 -0.000000 -v 0.000000 5.125000 -0.000000 -v 0.250000 1.000000 -0.437500 -v 0.250000 1.000000 -0.250000 -v 0.250000 0.500000 -0.437500 -v 0.250000 0.500000 -0.250000 -v 0.437500 1.000000 -0.437500 -v 0.437500 1.000000 -0.250000 -v 0.437500 0.500000 -0.437500 -v 0.437500 0.500000 -0.250000 -v 0.000000 4.937500 -0.187500 -v 0.000000 4.875000 -0.000000 -v 0.187500 4.937500 -0.187500 -v 0.187500 4.937500 -0.000000 -v 0.000000 5.125000 -0.000000 -v 0.437500 1.000000 0.250000 -v 0.250000 1.000000 0.250000 -v 0.437500 0.500000 0.250000 -v 0.250000 0.500000 0.250000 -v 0.437500 1.000000 0.437500 -v 0.250000 1.000000 0.437500 -v 0.437500 0.500000 0.437500 -v 0.250000 0.500000 0.437500 -v 0.187500 4.937500 -0.000000 -v 0.000000 4.875000 -0.000000 -v 0.187500 4.937500 0.187500 -v 0.000000 4.937500 0.187500 -v 0.000000 5.125000 -0.000000 -v -0.437500 1.000000 -0.250000 -v -0.250000 1.000000 -0.250000 -v -0.437500 0.500000 -0.250000 -v -0.250000 0.500000 -0.250000 -v -0.437500 1.000000 -0.437500 -v -0.250000 1.000000 -0.437500 -v -0.437500 0.500000 -0.437500 -v -0.250000 0.500000 -0.437500 -v -0.187500 4.937500 -0.000000 -v 0.000000 4.875000 -0.000000 -v -0.187500 4.937500 -0.187500 -v 0.000000 4.937500 -0.187500 -v 0.000000 5.125000 -0.000000 +v 0.250000 5.000000 0.250000 +v 0.250000 5.000000 -0.250000 +v 0.250000 4.000000 0.250000 +v 0.250000 4.000000 -0.250000 +v -0.250000 5.000000 0.250000 +v -0.250000 5.000000 -0.250000 +v -0.250000 4.000000 0.250000 +v -0.250000 4.000000 -0.250000 v 0.125000 5.187500 -0.125000 v 0.125000 5.250000 0.125000 v 0.125000 5.187500 0.125000 @@ -493,184 +89,437 @@ v -0.062500 5.437500 0.062500 v -0.062500 5.562500 0.062500 v 0.062500 5.562500 -0.062500 v -0.062500 5.562500 -0.062500 -v 0.250000 4.937500 0.250000 -v 0.250000 4.937500 -0.250000 -v 0.250000 4.687500 0.250000 -v 0.250000 4.687500 -0.250000 -v -0.250000 4.937500 0.250000 -v -0.250000 4.937500 -0.250000 -v -0.250000 4.687500 0.250000 -v -0.250000 4.687500 -0.250000 +v -0.250000 1.000000 -0.250000 +v -0.250000 1.000000 -0.437500 +v -0.250000 0.500000 -0.250000 +v -0.250000 0.500000 -0.437500 +v -0.437500 1.000000 -0.250000 +v -0.437500 1.000000 -0.437500 +v -0.437500 0.500000 -0.250000 +v -0.437500 0.500000 -0.437500 +v 0.000000 4.000000 -0.187500 +v -0.187500 4.000000 -0.187500 +v 0.437500 1.000000 -0.250000 +v 0.437500 1.000000 -0.437500 +v 0.437500 0.500000 -0.250000 +v 0.437500 0.500000 -0.437500 +v 0.250000 1.000000 -0.250000 +v 0.250000 1.000000 -0.437500 +v 0.250000 0.500000 -0.250000 +v 0.250000 0.500000 -0.437500 +v 0.187500 4.000000 -0.000000 +v 0.187500 4.000000 -0.187500 +v -0.250000 1.000000 0.437500 +v -0.250000 1.000000 0.250000 +v -0.250000 0.500000 0.437500 +v -0.250000 0.500000 0.250000 +v -0.437500 1.000000 0.437500 +v -0.437500 1.000000 0.250000 +v -0.437500 0.500000 0.437500 +v -0.437500 0.500000 0.250000 +v 0.000000 4.000000 0.187500 +v 0.000000 4.000000 -0.000000 +v -0.187500 4.000000 0.187500 +v -0.187500 4.000000 -0.000000 +v 0.437500 1.000000 0.437500 +v 0.437500 1.000000 0.250000 +v 0.437500 0.500000 0.437500 +v 0.437500 0.500000 0.250000 +v 0.250000 1.000000 0.437500 +v 0.250000 1.000000 0.250000 +v 0.250000 0.500000 0.437500 +v 0.250000 0.500000 0.250000 +v 0.187500 4.000000 0.187500 +v 0.125000 0.625000 0.125000 +v 0.125000 4.750000 0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 4.750000 0.125000 +v -0.125000 0.625000 -0.125000 +v 0.125000 0.625000 -0.125000 +v -0.125000 4.750000 -0.125000 +v 0.125000 4.750000 -0.125000 +v 0.500000 0.687500 -0.187500 +v 0.375000 0.687500 -0.187500 +v 0.500000 0.312500 -0.187500 +v 0.375000 0.312500 -0.187500 +v 0.500000 0.687500 0.187500 +v 0.375000 0.687500 0.187500 +v 0.500000 0.312500 0.187500 +v 0.375000 0.312500 0.187500 +v 0.375000 0.625000 -0.125000 +v 0.375000 0.375000 -0.125000 +v 0.375000 0.625000 0.125000 +v 0.375000 0.375000 0.125000 +v 0.125000 0.625000 0.125000 +v 0.125000 0.375000 0.125000 +v 0.187500 0.687500 0.500000 +v 0.187500 0.687500 0.375000 +v 0.187500 0.312500 0.500000 +v 0.187500 0.312500 0.375000 +v -0.187500 0.687500 0.500000 +v -0.187500 0.687500 0.375000 +v -0.187500 0.312500 0.500000 +v -0.187500 0.312500 0.375000 +v 0.125000 0.625000 0.375000 +v 0.125000 0.375000 0.375000 +v -0.125000 0.625000 0.375000 +v -0.125000 0.375000 0.375000 +v -0.500000 0.687500 0.187500 +v -0.375000 0.687500 0.187500 +v -0.500000 0.312500 0.187500 +v -0.375000 0.312500 0.187500 +v -0.500000 0.687500 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.500000 0.312500 -0.187500 +v -0.375000 0.312500 -0.187500 +v -0.375000 0.625000 0.125000 +v -0.375000 0.375000 0.125000 +v -0.375000 0.625000 -0.125000 +v -0.375000 0.375000 -0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 0.375000 0.125000 +v -0.187500 0.687500 -0.500000 +v -0.187500 0.687500 -0.375000 +v -0.187500 0.312500 -0.500000 +v -0.187500 0.312500 -0.375000 +v 0.187500 0.687500 -0.500000 +v 0.187500 0.687500 -0.375000 +v 0.187500 0.312500 -0.500000 +v 0.187500 0.312500 -0.375000 +v -0.125000 0.625000 -0.375000 +v -0.125000 0.375000 -0.375000 +v 0.125000 0.625000 -0.375000 +v 0.125000 0.375000 -0.375000 +v -0.125000 0.625000 -0.125000 +v -0.125000 0.375000 -0.125000 +v 0.125000 0.625000 -0.125000 +v 0.125000 0.375000 -0.125000 +v 0.218750 1.937500 0.250000 +v 0.281250 1.937500 0.250000 +v 0.218750 1.812500 0.250000 +v 0.281250 1.812500 0.250000 +v 0.218750 1.437500 -0.250000 +v 0.281250 1.437500 -0.250000 +v 0.218750 1.312500 -0.250000 +v 0.281250 1.312500 -0.250000 +v 0.281250 1.437500 0.250000 +v 0.343750 1.437500 0.250000 +v 0.281250 1.312500 0.250000 +v 0.343750 1.312500 0.250000 +v 0.281250 1.937500 -0.250000 +v 0.343750 1.937500 -0.250000 +v 0.281250 1.812500 -0.250000 +v 0.343750 1.812500 -0.250000 +v 0.281250 1.187500 0.250000 +v 0.343750 1.187500 0.250000 +v 0.281250 1.062500 0.250000 +v 0.343750 1.062500 0.250000 +v 0.281250 0.687500 -0.250000 +v 0.343750 0.687500 -0.250000 +v 0.281250 0.562500 -0.250000 +v 0.343750 0.562500 -0.250000 +v 0.343750 0.687500 0.250000 +v 0.406250 0.687500 0.250000 +v 0.343750 0.562500 0.250000 +v 0.406250 0.562500 0.250000 +v 0.343750 1.187500 -0.250000 +v 0.406250 1.187500 -0.250000 +v 0.343750 1.062500 -0.250000 +v 0.406250 1.062500 -0.250000 +v 0.156250 2.687500 0.250000 +v 0.218750 2.687500 0.250000 +v 0.156250 2.562500 0.250000 +v 0.218750 2.562500 0.250000 +v 0.156250 2.187500 -0.250000 +v 0.218750 2.187500 -0.250000 +v 0.156250 2.062500 -0.250000 +v 0.218750 2.062500 -0.250000 +v 0.218750 2.187500 0.250000 +v 0.281250 2.187500 0.250000 +v 0.218750 2.062500 0.250000 +v 0.281250 2.062500 0.250000 +v 0.218750 2.687500 -0.250000 +v 0.281250 2.687500 -0.250000 +v 0.218750 2.562500 -0.250000 +v 0.281250 2.562500 -0.250000 +v -0.218750 1.937500 -0.250000 +v -0.281250 1.937500 -0.250000 +v -0.218750 1.812500 -0.250000 +v -0.281250 1.812500 -0.250000 +v -0.218750 1.437500 0.250000 +v -0.281250 1.437500 0.250000 +v -0.218750 1.312500 0.250000 +v -0.281250 1.312500 0.250000 +v -0.281250 1.437500 -0.250000 +v -0.343750 1.437500 -0.250000 +v -0.281250 1.312500 -0.250000 +v -0.343750 1.312500 -0.250000 +v -0.281250 1.937500 0.250000 +v -0.343750 1.937500 0.250000 +v -0.281250 1.812500 0.250000 +v -0.343750 1.812500 0.250000 +v -0.281250 1.187500 -0.250000 +v -0.343750 1.187500 -0.250000 +v -0.281250 1.062500 -0.250000 +v -0.343750 1.062500 -0.250000 +v -0.281250 0.687500 0.250000 +v -0.343750 0.687500 0.250000 +v -0.281250 0.562500 0.250000 +v -0.343750 0.562500 0.250000 +v -0.343750 0.687500 -0.250000 +v -0.406250 0.687500 -0.250000 +v -0.343750 0.562500 -0.250000 +v -0.406250 0.562500 -0.250000 +v -0.343750 1.187500 0.250000 +v -0.406250 1.187500 0.250000 +v -0.343750 1.062500 0.250000 +v -0.406250 1.062500 0.250000 +v -0.156250 2.687500 -0.250000 +v -0.218750 2.687500 -0.250000 +v -0.156250 2.562500 -0.250000 +v -0.218750 2.562500 -0.250000 +v -0.156250 2.187500 0.250000 +v -0.218750 2.187500 0.250000 +v -0.156250 2.062500 0.250000 +v -0.218750 2.062500 0.250000 +v -0.218750 2.187500 -0.250000 +v -0.281250 2.187500 -0.250000 +v -0.218750 2.062500 -0.250000 +v -0.281250 2.062500 -0.250000 +v -0.218750 2.687500 0.250000 +v -0.281250 2.687500 0.250000 +v -0.218750 2.562500 0.250000 +v -0.281250 2.562500 0.250000 +v -0.250000 1.937500 0.218750 +v -0.250000 1.937500 0.281250 +v -0.250000 1.812500 0.218750 +v -0.250000 1.812500 0.281250 +v 0.250000 1.437500 0.218750 +v 0.250000 1.437500 0.281250 +v 0.250000 1.312500 0.218750 +v 0.250000 1.312500 0.281250 +v -0.250000 1.437500 0.281250 +v -0.250000 1.437500 0.343750 +v -0.250000 1.312500 0.281250 +v -0.250000 1.312500 0.343750 +v 0.250000 1.937500 0.281250 +v 0.250000 1.937500 0.343750 +v 0.250000 1.812500 0.281250 +v 0.250000 1.812500 0.343750 +v -0.250000 1.187500 0.281250 +v -0.250000 1.187500 0.343750 +v -0.250000 1.062500 0.281250 +v -0.250000 1.062500 0.343750 +v 0.250000 0.687500 0.281250 +v 0.250000 0.687500 0.343750 +v 0.250000 0.562500 0.281250 +v 0.250000 0.562500 0.343750 +v -0.250000 0.687500 0.343750 +v -0.250000 0.687500 0.406250 +v -0.250000 0.562500 0.343750 +v -0.250000 0.562500 0.406250 +v 0.250000 1.187500 0.343750 +v 0.250000 1.187500 0.406250 +v 0.250000 1.062500 0.343750 +v 0.250000 1.062500 0.406250 +v -0.250000 2.687500 0.156250 +v -0.250000 2.687500 0.218750 +v -0.250000 2.562500 0.156250 +v -0.250000 2.562500 0.218750 +v 0.250000 2.187500 0.156250 +v 0.250000 2.187500 0.218750 +v 0.250000 2.062500 0.156250 +v 0.250000 2.062500 0.218750 +v -0.250000 2.187500 0.218750 +v -0.250000 2.187500 0.281250 +v -0.250000 2.062500 0.218750 +v -0.250000 2.062500 0.281250 +v 0.250000 2.687500 0.218750 +v 0.250000 2.687500 0.281250 +v 0.250000 2.562500 0.218750 +v 0.250000 2.562500 0.281250 +v 0.250000 1.937500 -0.218750 +v 0.250000 1.937500 -0.281250 +v 0.250000 1.812500 -0.218750 +v 0.250000 1.812500 -0.281250 +v -0.250000 1.437500 -0.218750 +v -0.250000 1.437500 -0.281250 +v -0.250000 1.312500 -0.218750 +v -0.250000 1.312500 -0.281250 +v 0.250000 1.437500 -0.281250 +v 0.250000 1.437500 -0.343750 +v 0.250000 1.312500 -0.281250 +v 0.250000 1.312500 -0.343750 +v -0.250000 1.937500 -0.281250 +v -0.250000 1.937500 -0.343750 +v -0.250000 1.812500 -0.281250 +v -0.250000 1.812500 -0.343750 +v 0.250000 1.187500 -0.281250 +v 0.250000 1.187500 -0.343750 +v 0.250000 1.062500 -0.281250 +v 0.250000 1.062500 -0.343750 +v -0.250000 0.687500 -0.281250 +v -0.250000 0.687500 -0.343750 +v -0.250000 0.562500 -0.281250 +v -0.250000 0.562500 -0.343750 +v 0.250000 0.687500 -0.343750 +v 0.250000 0.687500 -0.406250 +v 0.250000 0.562500 -0.343750 +v 0.250000 0.562500 -0.406250 +v -0.250000 1.187500 -0.343750 +v -0.250000 1.187500 -0.406250 +v -0.250000 1.062500 -0.343750 +v -0.250000 1.062500 -0.406250 +v 0.250000 2.687500 -0.156250 +v 0.250000 2.687500 -0.218750 +v 0.250000 2.562500 -0.156250 +v 0.250000 2.562500 -0.218750 +v -0.250000 2.187500 -0.156250 +v -0.250000 2.187500 -0.218750 +v -0.250000 2.062500 -0.156250 +v -0.250000 2.062500 -0.218750 +v 0.250000 2.187500 -0.218750 +v 0.250000 2.187500 -0.281250 +v 0.250000 2.062500 -0.218750 +v 0.250000 2.062500 -0.281250 +v -0.250000 2.687500 -0.218750 +v -0.250000 2.687500 -0.281250 +v -0.250000 2.562500 -0.218750 +v -0.250000 2.562500 -0.281250 vn 1.0000 -0.0000 -0.0000 vn -1.0000 -0.0000 -0.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.0000 -1.0000 -vn -0.6000 0.8000 -0.0000 -vn 0.6000 -0.8000 -0.0000 -vn 0.0624 -0.0000 0.9981 -vn -0.0624 -0.0000 -0.9981 -vn 0.6000 0.8000 -0.0000 -vn -0.6000 -0.8000 -0.0000 -vn 0.0624 -0.0000 -0.9981 -vn -0.0624 -0.0000 0.9981 -vn 0.0933 -0.0000 0.9956 -vn -0.0933 -0.0000 -0.9956 -vn 0.0933 -0.0000 -0.9956 -vn -0.0933 -0.0000 0.9956 -vn -0.0000 0.8000 0.6000 -vn -0.0000 -0.8000 -0.6000 -vn 0.9981 -0.0000 -0.0624 -vn -0.9981 -0.0000 0.0624 -vn -0.0000 0.8000 -0.6000 -vn -0.0000 -0.8000 0.6000 -vn -0.9981 -0.0000 -0.0624 -vn 0.9981 -0.0000 0.0624 -vn 0.9956 -0.0000 -0.0933 -vn -0.9956 -0.0000 0.0933 -vn -0.9956 -0.0000 -0.0933 -vn 0.9956 -0.0000 0.0933 -vn -0.0000 0.0634 0.9980 -vn 0.9979 -0.0621 0.0206 -vn 0.9979 -0.0620 0.0207 -vn -0.0211 -0.0630 -0.9978 -vn -0.0210 -0.0630 -0.9978 -vn -0.9980 0.0634 -0.0000 -vn -0.0000 0.7071 0.7071 -vn -0.7071 0.7071 -0.0000 -vn -0.0000 0.0634 -0.9980 -vn -0.9979 -0.0621 -0.0206 -vn -0.9979 -0.0620 -0.0207 -vn 0.0211 -0.0630 0.9978 -vn 0.0210 -0.0630 0.9978 -vn 0.9980 0.0634 -0.0000 +vn -0.0000 -0.0830 0.9965 +vn 0.9965 -0.0830 -0.0000 +vn -0.0000 0.0830 -0.9965 +vn -0.9965 0.0830 -0.0000 +vn 0.9965 0.0830 -0.0000 +vn -0.9965 -0.0830 -0.0000 +vn -0.0000 0.0830 0.9965 +vn -0.0000 -0.0830 -0.9965 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.7071 -0.0000 -vn 0.0206 -0.0621 -0.9979 -vn 0.0207 -0.0620 -0.9979 -vn -0.9978 -0.0630 0.0211 -vn -0.9978 -0.0630 0.0210 -vn -0.0206 -0.0621 0.9979 -vn -0.0207 -0.0620 0.9979 -vn 0.9978 -0.0630 -0.0211 -vn 0.9978 -0.0630 -0.0210 -vt 1.000000 0.341772 -vt 0.875000 0.341772 -vt 0.875000 0.240506 -vt 1.000000 0.240506 -vt 0.750000 0.240506 -vt 0.750000 0.341772 -vt 0.625000 0.341772 -vt 0.625000 0.240506 -vt 0.625000 0.405063 -vt 0.500000 0.405063 -vt 0.500000 0.341772 -vt 0.500000 0.240506 -vt 0.500000 0.177215 -vt 0.625000 0.177215 -vt 0.550000 0.101266 -vt 0.500000 0.101266 -vt 0.500000 0.025316 -vt 0.550000 0.025316 -vt 0.350000 0.025316 -vt 0.350000 0.101266 -vt 0.300000 0.101266 -vt 0.300000 0.025316 -vt 0.500000 0.126582 -vt 0.350000 0.126582 -vt 0.500000 0.000000 -vt 0.350000 0.000000 -vt 0.575000 0.088608 -vt 0.675000 0.088608 -vt 0.700000 0.101266 -vt 0.575000 0.037975 -vt 0.675000 0.037975 -vt 0.700000 0.025316 -vt 0.300000 0.227848 -vt 0.300000 0.177215 -vt 0.400000 0.177215 -vt 0.400000 0.227848 -vt 0.300000 0.278481 -vt 0.400000 0.278481 -vt 0.300000 0.329114 -vt 0.400000 0.329114 -vt 0.300000 0.126582 -vt 0.400000 0.126582 -vt 0.400000 1.000000 -vt 0.500000 1.000000 -vt 0.600000 0.126582 -vt 0.600000 0.177215 -vt 0.900000 0.139241 -vt 0.700000 0.139241 -vt 0.700000 0.126582 -vt 0.900000 0.126582 -vt 0.700000 0.177215 -vt 0.700000 0.164557 -vt 0.900000 0.164557 -vt 0.900000 0.177215 -vt 0.900000 0.101266 -vt 0.850000 0.050633 -vt 0.700000 0.050633 -vt 0.850000 0.025316 -vt 0.700000 0.075949 -vt 0.850000 0.075949 -vt 0.850000 0.101266 -vt 0.700000 0.000000 -vt 0.850000 0.000000 -vt 0.225000 0.101266 -vt 0.150000 0.101266 -vt 0.150000 0.000000 -vt 0.225000 0.000000 -vt 0.075000 0.000000 -vt 0.075000 0.101266 -vt 0.000000 0.101266 +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vt 0.866667 0.162500 +vt 0.783333 0.162500 +vt 0.783333 0.062500 +vt 0.866667 0.062500 +vt 0.700000 0.062500 +vt 0.700000 0.162500 +vt 0.616667 0.162500 +vt 0.616667 0.062500 +vt 0.616667 0.225000 +vt 0.533333 0.225000 +vt 0.533333 0.162500 +vt 0.533333 0.062500 +vt 0.533333 0.000000 +vt 0.616667 0.000000 +vt 0.600000 0.525000 +vt 0.466667 0.525000 +vt 0.466667 0.325000 +vt 0.600000 0.325000 +vt 0.866667 0.325000 +vt 0.866667 0.525000 +vt 0.733333 0.525000 +vt 0.733333 0.325000 +vt 0.466667 0.625000 +vt 0.600000 0.625000 +vt 0.466667 0.225000 +vt 0.600000 0.225000 +vt 1.000000 0.325000 +vt 1.000000 0.525000 +vt 0.566667 0.687500 +vt 0.500000 0.700000 +vt 0.500000 0.687500 +vt 0.566667 0.637500 +vt 0.483333 0.650000 +vt 0.500000 0.637500 +vt 0.566667 0.625000 +vt 0.500000 0.625000 +vt 0.583333 0.650000 +vt 0.483333 0.675000 +vt 0.566667 0.700000 +vt 0.483333 0.712500 +vt 0.583333 0.712500 +vt 0.483333 0.737500 +vt 0.583333 0.675000 +vt 0.566667 0.750000 +vt 0.500000 0.762500 +vt 0.500000 0.750000 +vt 0.583333 0.737500 +vt 0.566667 0.762500 +vt 0.516667 0.775000 +vt 0.550000 0.775000 +vt 0.516667 0.800000 +vt 0.516667 0.825000 +vt 0.550000 0.800000 +vt 0.550000 0.825000 +vt 0.050000 0.100000 +vt 0.000000 0.100000 vt 0.000000 0.000000 -vt 0.300000 0.000000 -vt 0.150000 0.898734 -vt 0.075000 0.898734 -vt 0.225000 0.898734 -vt 0.300000 0.898734 -vt 0.000000 0.898734 -vt 0.150000 0.949367 -vt 0.000000 0.949367 -vt 0.650000 0.569620 -vt 0.550000 0.582278 -vt 0.550000 0.569620 -vt 0.650000 0.518987 -vt 0.525000 0.531646 -vt 0.550000 0.518987 -vt 0.650000 0.506329 -vt 0.550000 0.506329 -vt 0.675000 0.531646 -vt 0.525000 0.556962 -vt 0.650000 0.582278 -vt 0.525000 0.594937 -vt 0.675000 0.594937 -vt 0.525000 0.620253 -vt 0.675000 0.556962 -vt 0.650000 0.632911 -vt 0.550000 0.645570 -vt 0.550000 0.632911 -vt 0.675000 0.620253 -vt 0.650000 0.645570 -vt 0.575000 0.658228 -vt 0.625000 0.658228 -vt 0.575000 0.683544 -vt 0.575000 0.708861 -vt 0.625000 0.683544 -vt 0.625000 0.708861 -vt 0.700000 0.607595 -vt 0.700000 0.506329 -vt 0.800000 0.506329 -vt 0.800000 0.607595 -vt 0.800000 0.810127 -vt 0.700000 0.810127 -vt 0.700000 0.708861 -vt 0.800000 0.708861 -vt 0.700000 0.405063 -vt 0.500000 0.506329 -vt 0.800000 0.405063 +vt 0.050000 0.000000 +vt 0.150000 0.000000 +vt 0.150000 0.100000 +vt 0.100000 0.100000 +vt 0.100000 0.000000 +vt 0.200000 0.000000 +vt 0.200000 0.100000 +vt 0.200000 0.700000 +vt 0.150000 0.700000 +vt 0.050000 0.700000 +vt 0.000000 0.700000 +vt 0.100000 0.700000 +vt 0.466667 1.000000 +vt 0.400000 1.000000 +vt 0.400000 0.175000 +vt 0.466667 0.175000 +vt 0.266667 1.000000 +vt 0.200000 1.000000 +vt 0.200000 0.175000 +vt 0.266667 0.175000 +vt 0.333333 1.000000 +vt 0.333333 0.175000 +vt 0.366667 0.100000 +vt 0.333333 0.100000 +vt 0.333333 0.025000 +vt 0.366667 0.025000 +vt 0.233333 0.025000 +vt 0.233333 0.100000 +vt 0.200000 0.025000 +vt 0.333333 0.125000 +vt 0.233333 0.125000 +vt 0.333333 0.000000 +vt 0.233333 0.000000 +vt 0.383333 0.087500 +vt 0.450000 0.087500 +vt 0.466667 0.100000 +vt 0.383333 0.037500 +vt 0.450000 0.037500 +vt 0.466667 0.025000 +vt 0.266667 0.125000 +vt 0.400000 0.125000 +vt 0.466667 0.125000 +vt 0.200000 0.125000 +vt 0.533333 0.125000 +vt 0.533333 0.175000 +vt 0.750000 0.525000 +vt 0.750000 0.675000 +vt 0.733333 0.675000 +vt 0.766667 0.675000 +vt 0.766667 0.525000 +vt 0.733333 0.750000 +vt 0.733333 0.775000 +vt 0.600000 0.675000 +vt 0.600000 0.650000 +vt 0.733333 0.550000 s 1 usemtl m_2d342b16-8f2e-5231-80ae-92eafddb5779 f 2/1/1 1/2/1 3/3/1 @@ -721,579 +570,475 @@ f 27/3/5 25/2/5 29/6/5 f 27/3/5 29/6/5 31/5/5 f 30/7/6 26/11/6 28/12/6 f 30/7/6 28/12/6 32/8/6 -f 34/15/6 33/16/6 35/17/6 -f 34/15/6 35/17/6 36/18/6 -f 39/19/5 37/20/5 38/21/5 -f 39/19/5 38/21/5 40/22/5 -f 37/20/3 33/16/3 34/23/3 -f 37/20/3 34/23/3 38/24/3 -f 36/25/4 35/17/4 39/19/4 -f 36/25/4 39/19/4 40/26/4 -f 35/17/1 33/16/1 37/20/1 -f 35/17/1 37/20/1 39/19/1 -f 41/27/2 43/28/2 38/29/2 -f 41/27/2 38/29/2 34/15/2 -f 42/30/2 41/27/2 34/15/2 -f 42/30/2 34/15/2 36/18/2 -f 44/31/2 42/30/2 36/18/2 -f 44/31/2 36/18/2 40/32/2 -f 43/28/2 44/31/2 40/32/2 -f 43/28/2 40/32/2 38/29/2 -f 45/33/3 47/34/3 43/35/3 -f 45/33/3 43/35/3 41/36/3 -f 46/37/6 45/33/6 41/36/6 -f 46/37/6 41/36/6 42/38/6 -f 48/39/4 46/37/4 42/38/4 -f 48/39/4 42/38/4 44/40/4 -f 47/34/5 48/41/5 44/42/5 -f 47/34/5 44/42/5 43/35/5 -f 49/43/1 50/44/1 47/23/1 -f 49/43/1 47/23/1 45/42/1 -f 52/15/5 51/16/5 53/17/5 -f 52/15/5 53/17/5 54/18/5 -f 57/19/6 55/20/6 56/21/6 -f 57/19/6 56/21/6 58/22/6 -f 55/20/3 51/16/3 52/23/3 -f 55/20/3 52/23/3 56/24/3 -f 54/25/4 53/17/4 57/19/4 -f 54/25/4 57/19/4 58/26/4 -f 53/17/2 51/16/2 55/20/2 -f 53/17/2 55/20/2 57/19/2 -f 59/27/1 61/28/1 56/29/1 -f 59/27/1 56/29/1 52/15/1 -f 60/30/1 59/27/1 52/15/1 -f 60/30/1 52/15/1 54/18/1 -f 62/31/1 60/30/1 54/18/1 -f 62/31/1 54/18/1 58/32/1 -f 61/28/1 62/31/1 58/32/1 -f 61/28/1 58/32/1 56/29/1 -f 63/33/3 65/34/3 61/35/3 -f 63/33/3 61/35/3 59/36/3 -f 64/37/5 63/33/5 59/36/5 -f 64/37/5 59/36/5 60/38/5 -f 66/39/4 64/37/4 60/38/4 -f 66/39/4 60/38/4 62/40/4 -f 65/34/6 66/41/6 62/42/6 -f 65/34/6 62/42/6 61/35/6 -f 67/43/2 68/44/2 65/23/2 -f 67/43/2 65/23/2 63/42/2 -f 70/15/1 69/16/1 71/17/1 -f 70/15/1 71/17/1 72/18/1 -f 75/19/2 73/20/2 74/21/2 -f 75/19/2 74/21/2 76/22/2 -f 73/20/3 69/16/3 70/23/3 -f 73/20/3 70/23/3 74/24/3 -f 72/25/4 71/17/4 75/19/4 -f 72/25/4 75/19/4 76/26/4 -f 71/17/5 69/16/5 73/20/5 -f 71/17/5 73/20/5 75/19/5 -f 77/27/6 79/28/6 74/29/6 -f 77/27/6 74/29/6 70/15/6 -f 78/30/6 77/27/6 70/15/6 -f 78/30/6 70/15/6 72/18/6 -f 80/31/6 78/30/6 72/18/6 -f 80/31/6 72/18/6 76/32/6 -f 79/28/6 80/31/6 76/32/6 -f 79/28/6 76/32/6 74/29/6 -f 81/33/3 83/34/3 79/35/3 -f 81/33/3 79/35/3 77/36/3 -f 82/37/1 81/33/1 77/36/1 -f 82/37/1 77/36/1 78/38/1 -f 84/39/4 82/37/4 78/38/4 -f 84/39/4 78/38/4 80/40/4 -f 83/34/2 84/41/2 80/42/2 -f 83/34/2 80/42/2 79/35/2 -f 85/43/5 86/44/5 83/23/5 -f 85/43/5 83/23/5 81/42/5 -f 88/15/2 87/16/2 89/17/2 -f 88/15/2 89/17/2 90/18/2 -f 93/19/1 91/20/1 92/21/1 -f 93/19/1 92/21/1 94/22/1 -f 91/20/3 87/16/3 88/23/3 -f 91/20/3 88/23/3 92/24/3 -f 90/25/4 89/17/4 93/19/4 -f 90/25/4 93/19/4 94/26/4 -f 89/17/6 87/16/6 91/20/6 -f 89/17/6 91/20/6 93/19/6 -f 95/27/5 97/28/5 92/29/5 -f 95/27/5 92/29/5 88/15/5 -f 96/30/5 95/27/5 88/15/5 -f 96/30/5 88/15/5 90/18/5 -f 98/31/5 96/30/5 90/18/5 -f 98/31/5 90/18/5 94/32/5 -f 97/28/5 98/31/5 94/32/5 -f 97/28/5 94/32/5 92/29/5 -f 99/33/3 101/34/3 97/35/3 -f 99/33/3 97/35/3 95/36/3 -f 100/37/2 99/33/2 95/36/2 -f 100/37/2 95/36/2 96/38/2 -f 102/39/4 100/37/4 96/38/4 -f 102/39/4 96/38/4 98/40/4 -f 101/34/1 102/41/1 98/42/1 -f 101/34/1 98/42/1 97/35/1 -f 103/43/6 104/44/6 101/23/6 -f 103/43/6 101/23/6 99/42/6 -f 48/13/4 64/23/4 66/45/4 -f 48/13/4 66/45/4 46/46/4 -f 109/47/7 105/48/7 106/49/7 -f 109/47/7 106/49/7 110/50/7 -f 108/51/8 107/52/8 111/53/8 -f 108/51/8 111/53/8 112/54/8 -f 107/52/9 105/48/9 109/47/9 -f 107/52/9 109/47/9 111/53/9 -f 110/50/10 106/49/10 108/29/10 -f 110/50/10 108/29/10 112/55/10 -f 117/47/11 113/48/11 114/49/11 -f 117/47/11 114/49/11 118/50/11 -f 116/51/12 115/52/12 119/53/12 -f 116/51/12 119/53/12 120/54/12 -f 115/52/13 113/48/13 117/47/13 -f 115/52/13 117/47/13 119/53/13 -f 118/50/14 114/49/14 116/29/14 -f 118/50/14 116/29/14 120/55/14 -f 125/47/7 121/48/7 122/49/7 -f 125/47/7 122/49/7 126/50/7 -f 124/51/8 123/52/8 127/53/8 -f 124/51/8 127/53/8 128/54/8 -f 123/52/15 121/48/15 125/47/15 -f 123/52/15 125/47/15 127/53/15 -f 126/50/16 122/49/16 124/29/16 -f 126/50/16 124/29/16 128/55/16 -f 133/47/11 129/48/11 130/49/11 -f 133/47/11 130/49/11 134/50/11 -f 132/51/12 131/52/12 135/53/12 -f 132/51/12 135/53/12 136/54/12 -f 131/52/17 129/48/17 133/47/17 -f 131/52/17 133/47/17 135/53/17 -f 134/50/18 130/49/18 132/29/18 -f 134/50/18 132/29/18 136/55/18 -f 141/47/7 137/48/7 138/49/7 -f 141/47/7 138/49/7 142/50/7 -f 140/51/8 139/52/8 143/53/8 -f 140/51/8 143/53/8 144/54/8 -f 139/52/15 137/48/15 141/47/15 -f 139/52/15 141/47/15 143/53/15 -f 142/50/16 138/49/16 140/29/16 -f 142/50/16 140/29/16 144/55/16 -f 149/47/11 145/48/11 146/49/11 -f 149/47/11 146/49/11 150/50/11 -f 148/51/12 147/52/12 151/53/12 -f 148/51/12 151/53/12 152/54/12 -f 147/52/17 145/48/17 149/47/17 -f 147/52/17 149/47/17 151/53/17 -f 150/50/18 146/49/18 148/29/18 -f 150/50/18 148/29/18 152/55/18 -f 157/47/7 153/48/7 154/49/7 -f 157/47/7 154/49/7 158/50/7 -f 156/51/8 155/52/8 159/53/8 -f 156/51/8 159/53/8 160/54/8 -f 155/52/5 153/48/5 157/47/5 -f 155/52/5 157/47/5 159/53/5 -f 158/50/6 154/49/6 156/29/6 -f 158/50/6 156/29/6 160/55/6 -f 165/47/11 161/48/11 162/49/11 -f 165/47/11 162/49/11 166/50/11 -f 164/51/12 163/52/12 167/53/12 -f 164/51/12 167/53/12 168/54/12 -f 163/52/6 161/48/6 165/47/6 -f 163/52/6 165/47/6 167/53/6 -f 166/50/5 162/49/5 164/29/5 -f 166/50/5 164/29/5 168/55/5 -f 173/56/3 169/57/3 170/32/3 -f 173/56/3 170/32/3 174/58/3 -f 172/29/4 171/59/4 175/60/4 -f 172/29/4 175/60/4 176/61/4 -f 171/59/6 169/57/6 173/56/6 -f 171/59/6 173/56/6 175/60/6 -f 174/58/5 170/32/5 172/62/5 -f 174/58/5 172/62/5 176/63/5 -f 181/47/11 177/48/11 178/49/11 -f 181/47/11 178/49/11 182/50/11 -f 180/51/12 179/52/12 183/53/12 -f 180/51/12 183/53/12 184/54/12 -f 179/52/10 177/48/10 181/47/10 -f 179/52/10 181/47/10 183/53/10 -f 182/50/9 178/49/9 180/29/9 -f 182/50/9 180/29/9 184/55/9 -f 189/47/7 185/48/7 186/49/7 -f 189/47/7 186/49/7 190/50/7 -f 188/51/8 187/52/8 191/53/8 -f 188/51/8 191/53/8 192/54/8 -f 187/52/14 185/48/14 189/47/14 -f 187/52/14 189/47/14 191/53/14 -f 190/50/13 186/49/13 188/29/13 -f 190/50/13 188/29/13 192/55/13 -f 197/47/11 193/48/11 194/49/11 -f 197/47/11 194/49/11 198/50/11 -f 196/51/12 195/52/12 199/53/12 -f 196/51/12 199/53/12 200/54/12 -f 195/52/16 193/48/16 197/47/16 -f 195/52/16 197/47/16 199/53/16 -f 198/50/15 194/49/15 196/29/15 -f 198/50/15 196/29/15 200/55/15 -f 205/47/7 201/48/7 202/49/7 -f 205/47/7 202/49/7 206/50/7 -f 204/51/8 203/52/8 207/53/8 -f 204/51/8 207/53/8 208/54/8 -f 203/52/18 201/48/18 205/47/18 -f 203/52/18 205/47/18 207/53/18 -f 206/50/17 202/49/17 204/29/17 -f 206/50/17 204/29/17 208/55/17 -f 213/47/11 209/48/11 210/49/11 -f 213/47/11 210/49/11 214/50/11 -f 212/51/12 211/52/12 215/53/12 -f 212/51/12 215/53/12 216/54/12 -f 211/52/16 209/48/16 213/47/16 -f 211/52/16 213/47/16 215/53/16 -f 214/50/15 210/49/15 212/29/15 -f 214/50/15 212/29/15 216/55/15 -f 221/47/7 217/48/7 218/49/7 -f 221/47/7 218/49/7 222/50/7 -f 220/51/8 219/52/8 223/53/8 -f 220/51/8 223/53/8 224/54/8 -f 219/52/18 217/48/18 221/47/18 -f 219/52/18 221/47/18 223/53/18 -f 222/50/17 218/49/17 220/29/17 -f 222/50/17 220/29/17 224/55/17 -f 229/47/11 225/48/11 226/49/11 -f 229/47/11 226/49/11 230/50/11 -f 228/51/12 227/52/12 231/53/12 -f 228/51/12 231/53/12 232/54/12 -f 227/52/6 225/48/6 229/47/6 -f 227/52/6 229/47/6 231/53/6 -f 230/50/5 226/49/5 228/29/5 -f 230/50/5 228/29/5 232/55/5 -f 237/47/7 233/48/7 234/49/7 -f 237/47/7 234/49/7 238/50/7 -f 236/51/8 235/52/8 239/53/8 -f 236/51/8 239/53/8 240/54/8 -f 235/52/5 233/48/5 237/47/5 -f 235/52/5 237/47/5 239/53/5 -f 238/50/6 234/49/6 236/29/6 -f 238/50/6 236/29/6 240/55/6 -f 245/56/3 241/57/3 242/32/3 -f 245/56/3 242/32/3 246/58/3 -f 244/29/4 243/59/4 247/60/4 -f 244/29/4 247/60/4 248/61/4 -f 243/59/5 241/57/5 245/56/5 -f 243/59/5 245/56/5 247/60/5 -f 246/58/6 242/32/6 244/62/6 -f 246/58/6 244/62/6 248/63/6 -f 253/47/19 249/48/19 250/49/19 -f 253/47/19 250/49/19 254/50/19 -f 252/51/20 251/52/20 255/53/20 -f 252/51/20 255/53/20 256/54/20 -f 251/52/21 249/48/21 253/47/21 -f 251/52/21 253/47/21 255/53/21 -f 254/50/22 250/49/22 252/29/22 -f 254/50/22 252/29/22 256/55/22 -f 261/47/23 257/48/23 258/49/23 -f 261/47/23 258/49/23 262/50/23 -f 260/51/24 259/52/24 263/53/24 -f 260/51/24 263/53/24 264/54/24 -f 259/52/25 257/48/25 261/47/25 -f 259/52/25 261/47/25 263/53/25 -f 262/50/26 258/49/26 260/29/26 -f 262/50/26 260/29/26 264/55/26 -f 269/47/19 265/48/19 266/49/19 -f 269/47/19 266/49/19 270/50/19 -f 268/51/20 267/52/20 271/53/20 -f 268/51/20 271/53/20 272/54/20 -f 267/52/27 265/48/27 269/47/27 -f 267/52/27 269/47/27 271/53/27 -f 270/50/28 266/49/28 268/29/28 -f 270/50/28 268/29/28 272/55/28 -f 277/47/23 273/48/23 274/49/23 -f 277/47/23 274/49/23 278/50/23 -f 276/51/24 275/52/24 279/53/24 -f 276/51/24 279/53/24 280/54/24 -f 275/52/29 273/48/29 277/47/29 -f 275/52/29 277/47/29 279/53/29 -f 278/50/30 274/49/30 276/29/30 -f 278/50/30 276/29/30 280/55/30 -f 285/47/19 281/48/19 282/49/19 -f 285/47/19 282/49/19 286/50/19 -f 284/51/20 283/52/20 287/53/20 -f 284/51/20 287/53/20 288/54/20 -f 283/52/27 281/48/27 285/47/27 -f 283/52/27 285/47/27 287/53/27 -f 286/50/28 282/49/28 284/29/28 -f 286/50/28 284/29/28 288/55/28 -f 293/47/23 289/48/23 290/49/23 -f 293/47/23 290/49/23 294/50/23 -f 292/51/24 291/52/24 295/53/24 -f 292/51/24 295/53/24 296/54/24 -f 291/52/29 289/48/29 293/47/29 -f 291/52/29 293/47/29 295/53/29 -f 294/50/30 290/49/30 292/29/30 -f 294/50/30 292/29/30 296/55/30 -f 301/47/19 297/48/19 298/49/19 -f 301/47/19 298/49/19 302/50/19 -f 300/51/20 299/52/20 303/53/20 -f 300/51/20 303/53/20 304/54/20 -f 299/52/1 297/48/1 301/47/1 -f 299/52/1 301/47/1 303/53/1 -f 302/50/2 298/49/2 300/29/2 -f 302/50/2 300/29/2 304/55/2 -f 309/47/23 305/48/23 306/49/23 -f 309/47/23 306/49/23 310/50/23 -f 308/51/24 307/52/24 311/53/24 -f 308/51/24 311/53/24 312/54/24 -f 307/52/2 305/48/2 309/47/2 -f 307/52/2 309/47/2 311/53/2 -f 310/50/1 306/49/1 308/29/1 -f 310/50/1 308/29/1 312/55/1 -f 317/56/3 313/57/3 314/32/3 -f 317/56/3 314/32/3 318/58/3 -f 316/29/4 315/59/4 319/60/4 -f 316/29/4 319/60/4 320/61/4 -f 315/59/2 313/57/2 317/56/2 -f 315/59/2 317/56/2 319/60/2 -f 318/58/1 314/32/1 316/62/1 -f 318/58/1 316/62/1 320/63/1 -f 325/47/23 321/48/23 322/49/23 -f 325/47/23 322/49/23 326/50/23 -f 324/51/24 323/52/24 327/53/24 -f 324/51/24 327/53/24 328/54/24 -f 323/52/22 321/48/22 325/47/22 -f 323/52/22 325/47/22 327/53/22 -f 326/50/21 322/49/21 324/29/21 -f 326/50/21 324/29/21 328/55/21 -f 333/47/19 329/48/19 330/49/19 -f 333/47/19 330/49/19 334/50/19 -f 332/51/20 331/52/20 335/53/20 -f 332/51/20 335/53/20 336/54/20 -f 331/52/26 329/48/26 333/47/26 -f 331/52/26 333/47/26 335/53/26 -f 334/50/25 330/49/25 332/29/25 -f 334/50/25 332/29/25 336/55/25 -f 341/47/23 337/48/23 338/49/23 -f 341/47/23 338/49/23 342/50/23 -f 340/51/24 339/52/24 343/53/24 -f 340/51/24 343/53/24 344/54/24 -f 339/52/28 337/48/28 341/47/28 -f 339/52/28 341/47/28 343/53/28 -f 342/50/27 338/49/27 340/29/27 -f 342/50/27 340/29/27 344/55/27 -f 349/47/19 345/48/19 346/49/19 -f 349/47/19 346/49/19 350/50/19 -f 348/51/20 347/52/20 351/53/20 -f 348/51/20 351/53/20 352/54/20 -f 347/52/30 345/48/30 349/47/30 -f 347/52/30 349/47/30 351/53/30 -f 350/50/29 346/49/29 348/29/29 -f 350/50/29 348/29/29 352/55/29 -f 357/47/23 353/48/23 354/49/23 -f 357/47/23 354/49/23 358/50/23 -f 356/51/24 355/52/24 359/53/24 -f 356/51/24 359/53/24 360/54/24 -f 355/52/28 353/48/28 357/47/28 -f 355/52/28 357/47/28 359/53/28 -f 358/50/27 354/49/27 356/29/27 -f 358/50/27 356/29/27 360/55/27 -f 365/47/19 361/48/19 362/49/19 -f 365/47/19 362/49/19 366/50/19 -f 364/51/20 363/52/20 367/53/20 -f 364/51/20 367/53/20 368/54/20 -f 363/52/30 361/48/30 365/47/30 -f 363/52/30 365/47/30 367/53/30 -f 366/50/29 362/49/29 364/29/29 -f 366/50/29 364/29/29 368/55/29 -f 373/47/23 369/48/23 370/49/23 -f 373/47/23 370/49/23 374/50/23 -f 372/51/24 371/52/24 375/53/24 -f 372/51/24 375/53/24 376/54/24 -f 371/52/2 369/48/2 373/47/2 -f 371/52/2 373/47/2 375/53/2 -f 374/50/1 370/49/1 372/29/1 -f 374/50/1 372/29/1 376/55/1 -f 381/47/19 377/48/19 378/49/19 -f 381/47/19 378/49/19 382/50/19 -f 380/51/20 379/52/20 383/53/20 -f 380/51/20 383/53/20 384/54/20 -f 379/52/1 377/48/1 381/47/1 -f 379/52/1 381/47/1 383/53/1 -f 382/50/2 378/49/2 380/29/2 -f 382/50/2 380/29/2 384/55/2 -f 389/56/3 385/57/3 386/32/3 -f 389/56/3 386/32/3 390/58/3 -f 388/29/4 387/59/4 391/60/4 -f 388/29/4 391/60/4 392/61/4 -f 387/59/1 385/57/1 389/56/1 -f 387/59/1 389/56/1 391/60/1 -f 390/58/2 386/32/2 388/62/2 -f 390/58/2 388/62/2 392/63/2 -f 394/64/1 393/65/1 395/66/1 -f 394/64/1 395/66/1 396/67/1 -f 399/68/2 397/69/2 398/70/2 -f 399/68/2 398/70/2 400/71/2 -f 395/66/5 393/65/5 397/69/5 -f 395/66/5 397/69/5 399/68/5 -f 398/21/6 394/64/6 396/67/6 -f 398/21/6 396/67/6 400/72/6 -f 401/73/31 403/74/31 397/69/31 -f 401/73/31 397/69/31 393/65/31 -f 402/75/32 401/73/33 393/65/33 -f 402/75/32 393/65/33 394/64/33 -f 404/76/34 402/75/35 394/64/35 -f 404/76/34 394/64/35 398/21/35 -f 403/74/36 404/77/36 398/70/36 -f 403/74/36 398/70/36 397/69/36 -f 405/78/37 403/74/37 401/73/37 -f 405/79/38 404/77/38 403/74/38 -f 407/64/2 406/65/2 408/66/2 -f 407/64/2 408/66/2 409/67/2 -f 412/68/1 410/69/1 411/70/1 -f 412/68/1 411/70/1 413/71/1 -f 408/66/6 406/65/6 410/69/6 -f 408/66/6 410/69/6 412/68/6 -f 411/21/5 407/64/5 409/67/5 -f 411/21/5 409/67/5 413/72/5 -f 414/73/39 416/74/39 410/69/39 -f 414/73/39 410/69/39 406/65/39 -f 415/75/40 414/73/41 406/65/41 -f 415/75/40 406/65/41 407/64/41 -f 417/76/42 415/75/43 407/64/43 -f 417/76/42 407/64/43 411/21/43 -f 416/74/44 417/77/44 411/70/44 -f 416/74/44 411/70/44 410/69/44 -f 418/78/45 416/74/45 414/73/45 -f 418/79/46 417/77/46 416/74/46 -f 420/64/6 419/65/6 421/66/6 -f 420/64/6 421/66/6 422/67/6 -f 425/68/5 423/69/5 424/70/5 -f 425/68/5 424/70/5 426/71/5 -f 421/66/1 419/65/1 423/69/1 -f 421/66/1 423/69/1 425/68/1 -f 424/21/2 420/64/2 422/67/2 -f 424/21/2 422/67/2 426/72/2 -f 427/73/44 429/74/44 423/69/44 -f 427/73/44 423/69/44 419/65/44 -f 428/75/47 427/73/48 419/65/48 -f 428/75/47 419/65/48 420/64/48 -f 430/76/49 428/75/50 420/64/50 -f 430/76/49 420/64/50 424/21/50 -f 429/74/31 430/77/31 424/70/31 -f 429/74/31 424/70/31 423/69/31 -f 431/78/46 429/74/46 427/73/46 -f 431/79/37 430/77/37 429/74/37 -f 433/64/5 432/65/5 434/66/5 -f 433/64/5 434/66/5 435/67/5 -f 438/68/6 436/69/6 437/70/6 -f 438/68/6 437/70/6 439/71/6 -f 434/66/2 432/65/2 436/69/2 -f 434/66/2 436/69/2 438/68/2 -f 437/21/1 433/64/1 435/67/1 -f 437/21/1 435/67/1 439/72/1 -f 440/73/36 442/74/36 436/69/36 -f 440/73/36 436/69/36 432/65/36 -f 441/75/51 440/73/52 432/65/52 -f 441/75/51 432/65/52 433/64/52 -f 443/76/53 441/75/54 433/64/54 -f 443/76/53 433/64/54 437/21/54 -f 442/74/39 443/77/39 437/70/39 -f 442/74/39 437/70/39 436/69/39 -f 444/78/38 442/74/38 440/73/38 -f 444/79/45 443/77/45 442/74/45 -f 445/80/1 446/81/1 447/82/1 -f 448/80/2 449/81/2 450/82/2 -f 451/83/4 452/84/4 453/85/4 -f 454/86/1 455/85/1 456/87/1 -f 457/86/2 451/85/2 458/87/2 -f 458/86/6 453/85/6 454/87/6 -f 456/86/5 459/85/5 457/87/5 -f 452/88/1 460/89/1 461/84/1 -f 455/83/4 462/84/4 459/85/4 -f 453/83/4 461/84/4 455/85/4 -f 459/83/4 463/84/4 451/85/4 -f 449/90/4 464/91/4 465/81/4 -f 462/88/2 466/89/2 463/84/2 -f 463/88/6 467/89/6 452/84/6 -f 461/88/5 468/89/5 462/84/5 -f 450/80/6 465/81/6 445/82/6 -f 447/80/5 469/81/5 448/82/5 -f 464/92/1 470/93/1 471/91/1 -f 446/90/4 472/91/4 469/81/4 -f 465/90/4 471/91/4 446/81/4 -f 469/90/4 473/91/4 449/81/4 -f 472/92/2 474/93/2 473/91/2 -f 473/92/6 475/93/6 464/91/6 -f 471/92/5 476/93/5 472/91/5 -f 447/80/3 468/89/3 460/94/3 -f 445/80/3 460/89/3 467/94/3 -f 450/80/3 467/89/3 466/94/3 -f 448/80/3 466/89/3 468/94/3 -f 477/95/1 478/96/1 479/97/1 -f 480/95/2 481/96/2 482/97/2 -f 482/95/6 483/96/6 477/97/6 -f 479/95/5 484/96/5 480/97/5 -f 479/95/3 476/93/3 470/98/3 -f 477/95/3 470/93/3 475/98/3 -f 482/95/3 475/93/3 474/98/3 -f 480/95/3 474/93/3 476/98/3 -f 484/99/3 485/100/3 481/96/3 -f 486/101/1 487/102/1 488/100/1 -f 481/99/3 486/100/3 483/96/3 -f 478/99/3 489/100/3 484/96/3 -f 483/99/3 488/100/3 478/96/3 -f 490/103/3 491/104/3 492/105/3 -f 489/101/2 492/102/2 485/100/2 -f 485/101/6 491/102/6 486/100/6 -f 488/101/5 490/102/5 489/100/5 -f 445/80/1 465/90/1 446/81/1 -f 448/80/2 469/90/2 449/81/2 -f 451/83/4 463/88/4 452/84/4 -f 454/86/1 453/83/1 455/85/1 -f 457/86/2 459/83/2 451/85/2 -f 458/86/6 451/83/6 453/85/6 -f 456/86/5 455/83/5 459/85/5 -f 452/88/1 467/94/1 460/89/1 -f 455/83/4 461/88/4 462/84/4 -f 453/83/4 452/88/4 461/84/4 -f 459/83/4 462/88/4 463/84/4 -f 449/90/4 473/92/4 464/91/4 -f 462/88/2 468/94/2 466/89/2 -f 463/88/6 466/94/6 467/89/6 -f 461/88/5 460/94/5 468/89/5 -f 450/80/6 449/90/6 465/81/6 -f 447/80/5 446/90/5 469/81/5 -f 464/92/1 475/98/1 470/93/1 -f 446/90/4 471/92/4 472/91/4 -f 465/90/4 464/92/4 471/91/4 -f 469/90/4 472/92/4 473/91/4 -f 472/92/2 476/98/2 474/93/2 -f 473/92/6 474/98/6 475/93/6 -f 471/92/5 470/98/5 476/93/5 -f 447/80/3 448/82/3 468/89/3 -f 445/80/3 447/82/3 460/89/3 -f 450/80/3 445/82/3 467/89/3 -f 448/80/3 450/82/3 466/89/3 -f 477/95/1 483/99/1 478/96/1 -f 480/95/2 484/99/2 481/96/2 -f 482/95/6 481/99/6 483/96/6 -f 479/95/5 478/99/5 484/96/5 -f 479/95/3 480/97/3 476/93/3 -f 477/95/3 479/97/3 470/93/3 -f 482/95/3 477/97/3 475/93/3 -f 480/95/3 482/97/3 474/93/3 -f 484/99/3 489/101/3 485/100/3 -f 486/101/1 491/104/1 487/102/1 -f 481/99/3 485/101/3 486/100/3 -f 478/99/3 488/101/3 489/100/3 -f 483/99/3 486/101/3 488/100/3 -f 490/103/3 487/102/3 491/104/3 -f 489/101/2 490/104/2 492/102/2 -f 485/101/6 492/104/6 491/102/6 -f 488/101/5 487/104/5 490/102/5 -f 494/106/1 493/107/1 495/108/1 -f 494/106/1 495/108/1 496/109/1 -f 499/110/2 497/111/2 498/112/2 -f 499/110/2 498/112/2 500/113/2 -f 497/114/3 493/107/3 494/115/3 -f 497/114/3 494/115/3 498/10/3 -f 496/107/4 495/115/4 499/10/4 -f 496/107/4 499/10/4 500/114/4 -f 495/108/5 493/107/5 497/114/5 -f 495/108/5 497/114/5 499/116/5 -f 498/112/6 494/106/6 496/109/6 -f 498/112/6 496/109/6 500/113/6 +f 34/15/1 33/16/1 35/17/1 +f 34/15/1 35/17/1 36/18/1 +f 39/19/2 37/20/2 38/21/2 +f 39/19/2 38/21/2 40/22/2 +f 37/23/3 33/16/3 34/15/3 +f 37/23/3 34/15/3 38/24/3 +f 36/18/4 35/17/4 39/25/4 +f 36/18/4 39/25/4 40/26/4 +f 35/27/5 33/28/5 37/20/5 +f 35/27/5 37/20/5 39/19/5 +f 38/21/6 34/15/6 36/18/6 +f 38/21/6 36/18/6 40/22/6 +f 41/29/1 42/30/1 43/31/1 +f 44/29/2 45/30/2 46/31/2 +f 47/32/4 48/33/4 49/34/4 +f 50/35/1 51/34/1 52/36/1 +f 53/35/2 47/34/2 54/36/2 +f 54/35/6 49/34/6 50/36/6 +f 52/35/5 55/34/5 53/36/5 +f 48/37/1 56/38/1 57/33/1 +f 51/32/4 58/33/4 55/34/4 +f 49/32/4 57/33/4 51/34/4 +f 55/32/4 59/33/4 47/34/4 +f 45/39/4 60/40/4 61/30/4 +f 58/37/2 62/38/2 59/33/2 +f 59/37/6 63/38/6 48/33/6 +f 57/37/5 64/38/5 58/33/5 +f 46/29/6 61/30/6 41/31/6 +f 43/29/5 65/30/5 44/31/5 +f 60/41/1 66/42/1 67/40/1 +f 42/39/4 68/40/4 65/30/4 +f 61/39/4 67/40/4 42/30/4 +f 65/39/4 69/40/4 45/30/4 +f 68/41/2 70/42/2 69/40/2 +f 69/41/6 71/42/6 60/40/6 +f 67/41/5 72/42/5 68/40/5 +f 43/29/3 64/38/3 56/43/3 +f 41/29/3 56/38/3 63/43/3 +f 46/29/3 63/38/3 62/43/3 +f 44/29/3 62/38/3 64/43/3 +f 73/44/1 74/45/1 75/46/1 +f 76/44/2 77/45/2 78/46/2 +f 78/44/6 79/45/6 73/46/6 +f 75/44/5 80/45/5 76/46/5 +f 75/44/3 72/42/3 66/47/3 +f 73/44/3 66/42/3 71/47/3 +f 78/44/3 71/42/3 70/47/3 +f 76/44/3 70/42/3 72/47/3 +f 80/48/3 81/49/3 77/45/3 +f 82/50/1 83/51/1 84/49/1 +f 77/48/3 82/49/3 79/45/3 +f 74/48/3 85/49/3 80/45/3 +f 79/48/3 84/49/3 74/45/3 +f 86/52/3 87/53/3 88/54/3 +f 85/50/2 88/51/2 81/49/2 +f 81/50/6 87/51/6 82/49/6 +f 84/50/5 86/51/5 85/49/5 +f 41/29/1 61/39/1 42/30/1 +f 44/29/2 65/39/2 45/30/2 +f 47/32/4 59/37/4 48/33/4 +f 50/35/1 49/32/1 51/34/1 +f 53/35/2 55/32/2 47/34/2 +f 54/35/6 47/32/6 49/34/6 +f 52/35/5 51/32/5 55/34/5 +f 48/37/1 63/43/1 56/38/1 +f 51/32/4 57/37/4 58/33/4 +f 49/32/4 48/37/4 57/33/4 +f 55/32/4 58/37/4 59/33/4 +f 45/39/4 69/41/4 60/40/4 +f 58/37/2 64/43/2 62/38/2 +f 59/37/6 62/43/6 63/38/6 +f 57/37/5 56/43/5 64/38/5 +f 46/29/6 45/39/6 61/30/6 +f 43/29/5 42/39/5 65/30/5 +f 60/41/1 71/47/1 66/42/1 +f 42/39/4 67/41/4 68/40/4 +f 61/39/4 60/41/4 67/40/4 +f 65/39/4 68/41/4 69/40/4 +f 68/41/2 72/47/2 70/42/2 +f 69/41/6 70/47/6 71/42/6 +f 67/41/5 66/47/5 72/42/5 +f 43/29/3 44/31/3 64/38/3 +f 41/29/3 43/31/3 56/38/3 +f 46/29/3 41/31/3 63/38/3 +f 44/29/3 46/31/3 62/38/3 +f 73/44/1 79/48/1 74/45/1 +f 76/44/2 80/48/2 77/45/2 +f 78/44/6 77/48/6 79/45/6 +f 75/44/5 74/48/5 80/45/5 +f 75/44/3 76/46/3 72/42/3 +f 73/44/3 75/46/3 66/42/3 +f 78/44/3 73/46/3 71/42/3 +f 76/44/3 78/46/3 70/42/3 +f 80/48/3 85/50/3 81/49/3 +f 82/50/1 87/53/1 83/51/1 +f 77/48/3 81/50/3 82/49/3 +f 74/48/3 84/50/3 85/49/3 +f 79/48/3 82/50/3 84/49/3 +f 86/52/3 83/51/3 87/53/3 +f 85/50/2 86/53/2 88/51/2 +f 81/50/6 88/53/6 87/51/6 +f 84/50/5 83/53/5 86/51/5 +f 90/55/1 89/56/1 91/57/1 +f 90/55/1 91/57/1 92/58/1 +f 95/59/2 93/60/2 94/61/2 +f 95/59/2 94/61/2 96/62/2 +f 91/63/5 89/64/5 93/60/5 +f 91/63/5 93/60/5 95/59/5 +f 94/61/6 90/55/6 92/58/6 +f 94/61/6 92/58/6 96/62/6 +f 118/65/7 120/66/7 93/60/7 +f 118/65/7 93/60/7 89/64/7 +f 97/67/8 118/68/8 89/56/8 +f 97/67/8 89/56/8 90/55/8 +f 98/69/9 97/67/9 90/55/9 +f 98/69/9 90/55/9 94/61/9 +f 120/66/10 98/69/10 94/61/10 +f 120/66/10 94/61/10 93/60/10 +f 100/55/1 99/56/1 101/57/1 +f 100/55/1 101/57/1 102/58/1 +f 105/59/2 103/60/2 104/61/2 +f 105/59/2 104/61/2 106/62/2 +f 101/63/5 99/64/5 103/60/5 +f 101/63/5 103/60/5 105/59/5 +f 104/61/6 100/55/6 102/58/6 +f 104/61/6 102/58/6 106/62/6 +f 107/65/7 118/66/7 103/60/7 +f 107/65/7 103/60/7 99/64/7 +f 108/67/11 107/68/11 99/56/11 +f 108/67/11 99/56/11 100/55/11 +f 97/69/9 108/67/9 100/55/9 +f 97/69/9 100/55/9 104/61/9 +f 118/66/12 97/69/12 104/61/12 +f 118/66/12 104/61/12 103/60/12 +f 110/55/1 109/56/1 111/57/1 +f 110/55/1 111/57/1 112/58/1 +f 115/59/2 113/60/2 114/61/2 +f 115/59/2 114/61/2 116/62/2 +f 111/63/5 109/64/5 113/60/5 +f 111/63/5 113/60/5 115/59/5 +f 114/61/6 110/55/6 112/58/6 +f 114/61/6 112/58/6 116/62/6 +f 117/65/13 119/66/13 113/60/13 +f 117/65/13 113/60/13 109/64/13 +f 118/67/8 117/68/8 109/56/8 +f 118/67/8 109/56/8 110/55/8 +f 120/69/14 118/67/14 110/55/14 +f 120/69/14 110/55/14 114/61/14 +f 119/66/10 120/69/10 114/61/10 +f 119/66/10 114/61/10 113/60/10 +f 122/55/1 121/56/1 123/57/1 +f 122/55/1 123/57/1 124/58/1 +f 127/59/2 125/60/2 126/61/2 +f 127/59/2 126/61/2 128/62/2 +f 123/63/5 121/64/5 125/60/5 +f 123/63/5 125/60/5 127/59/5 +f 126/61/6 122/55/6 124/58/6 +f 126/61/6 124/58/6 128/62/6 +f 129/65/13 117/66/13 125/60/13 +f 129/65/13 125/60/13 121/64/13 +f 107/67/11 129/68/11 121/56/11 +f 107/67/11 121/56/11 122/55/11 +f 118/69/14 107/67/14 122/55/14 +f 118/69/14 122/55/14 126/61/14 +f 117/66/12 118/69/12 126/61/12 +f 117/66/12 126/61/12 125/60/12 +f 131/70/5 133/71/5 132/72/5 +f 131/70/5 132/72/5 130/73/5 +f 137/74/1 131/75/1 130/76/1 +f 137/74/1 130/76/1 135/77/1 +f 133/71/2 136/78/2 134/79/2 +f 133/71/2 134/79/2 132/72/2 +f 136/78/6 137/74/6 135/77/6 +f 136/78/6 135/77/6 134/79/6 +f 139/80/6 138/81/6 140/82/6 +f 139/80/6 140/82/6 141/83/6 +f 144/84/5 142/85/5 143/64/5 +f 144/84/5 143/64/5 145/86/5 +f 142/85/3 138/81/3 139/87/3 +f 142/85/3 139/87/3 143/88/3 +f 141/89/4 140/82/4 144/84/4 +f 141/89/4 144/84/4 145/90/4 +f 140/82/1 138/81/1 142/85/1 +f 140/82/1 142/85/1 144/84/1 +f 146/91/2 148/92/2 143/93/2 +f 146/91/2 143/93/2 139/80/2 +f 147/94/2 146/91/2 139/80/2 +f 147/94/2 139/80/2 141/83/2 +f 149/95/2 147/94/2 141/83/2 +f 149/95/2 141/83/2 145/96/2 +f 148/92/2 149/95/2 145/96/2 +f 148/92/2 145/96/2 143/93/2 +f 192/79/3 150/77/3 148/97/3 +f 192/79/3 148/97/3 146/87/3 +f 193/72/6 192/79/6 146/87/6 +f 193/72/6 146/87/6 147/98/6 +f 151/73/4 193/72/4 147/98/4 +f 151/73/4 147/98/4 149/99/4 +f 150/77/5 151/76/5 149/100/5 +f 150/77/5 149/100/5 148/97/5 +f 153/80/1 152/81/1 154/82/1 +f 153/80/1 154/82/1 155/83/1 +f 158/84/2 156/85/2 157/64/2 +f 158/84/2 157/64/2 159/86/2 +f 156/85/3 152/81/3 153/87/3 +f 156/85/3 153/87/3 157/88/3 +f 155/89/4 154/82/4 158/84/4 +f 155/89/4 158/84/4 159/90/4 +f 154/82/5 152/81/5 156/85/5 +f 154/82/5 156/85/5 158/84/5 +f 160/91/6 162/92/6 157/93/6 +f 160/91/6 157/93/6 153/80/6 +f 161/94/6 160/91/6 153/80/6 +f 161/94/6 153/80/6 155/83/6 +f 163/95/6 161/94/6 155/83/6 +f 163/95/6 155/83/6 159/96/6 +f 162/92/6 163/95/6 159/96/6 +f 162/92/6 159/96/6 157/93/6 +f 150/79/3 176/77/3 162/97/3 +f 150/79/3 162/97/3 160/87/3 +f 151/72/1 150/79/1 160/87/1 +f 151/72/1 160/87/1 161/98/1 +f 177/73/4 151/72/4 161/98/4 +f 177/73/4 161/98/4 163/99/4 +f 176/77/2 177/76/2 163/100/2 +f 176/77/2 163/100/2 162/97/2 +f 165/80/5 164/81/5 166/82/5 +f 165/80/5 166/82/5 167/83/5 +f 170/84/6 168/85/6 169/64/6 +f 170/84/6 169/64/6 171/86/6 +f 168/85/3 164/81/3 165/87/3 +f 168/85/3 165/87/3 169/88/3 +f 167/89/4 166/82/4 170/84/4 +f 167/89/4 170/84/4 171/90/4 +f 166/82/2 164/81/2 168/85/2 +f 166/82/2 168/85/2 170/84/2 +f 172/91/1 174/92/1 169/93/1 +f 172/91/1 169/93/1 165/80/1 +f 173/94/1 172/91/1 165/80/1 +f 173/94/1 165/80/1 167/83/1 +f 175/95/1 173/94/1 167/83/1 +f 175/95/1 167/83/1 171/96/1 +f 174/92/1 175/95/1 171/96/1 +f 174/92/1 171/96/1 169/93/1 +f 176/79/3 190/77/3 174/97/3 +f 176/79/3 174/97/3 172/87/3 +f 177/72/5 176/79/5 172/87/5 +f 177/72/5 172/87/5 173/98/5 +f 191/73/4 177/72/4 173/98/4 +f 191/73/4 173/98/4 175/99/4 +f 190/77/6 191/76/6 175/100/6 +f 190/77/6 175/100/6 174/97/6 +f 179/80/2 178/81/2 180/82/2 +f 179/80/2 180/82/2 181/83/2 +f 184/84/1 182/85/1 183/64/1 +f 184/84/1 183/64/1 185/86/1 +f 182/85/3 178/81/3 179/87/3 +f 182/85/3 179/87/3 183/88/3 +f 181/89/4 180/82/4 184/84/4 +f 181/89/4 184/84/4 185/90/4 +f 180/82/6 178/81/6 182/85/6 +f 180/82/6 182/85/6 184/84/6 +f 186/91/5 188/92/5 183/93/5 +f 186/91/5 183/93/5 179/80/5 +f 187/94/5 186/91/5 179/80/5 +f 187/94/5 179/80/5 181/83/5 +f 189/95/5 187/94/5 181/83/5 +f 189/95/5 181/83/5 185/96/5 +f 188/92/5 189/95/5 185/96/5 +f 188/92/5 185/96/5 183/93/5 +f 190/79/3 192/77/3 188/97/3 +f 190/79/3 188/97/3 186/87/3 +f 191/72/2 190/79/2 186/87/2 +f 191/72/2 186/87/2 187/98/2 +f 193/73/4 191/72/4 187/98/4 +f 193/73/4 187/98/4 189/99/4 +f 192/77/1 193/76/1 189/100/1 +f 192/77/1 189/100/1 188/97/1 +f 177/73/4 191/99/4 193/101/4 +f 177/73/4 193/101/4 151/102/4 +f 198/103/15 194/104/15 195/105/15 +f 198/103/15 195/105/15 199/21/15 +f 197/106/16 196/104/16 200/103/16 +f 197/106/16 200/103/16 201/107/16 +f 196/108/2 194/109/2 198/110/2 +f 196/108/2 198/110/2 200/111/2 +f 199/112/1 195/111/1 197/24/1 +f 199/112/1 197/24/1 201/21/1 +f 206/105/17 202/21/17 203/103/17 +f 206/105/17 203/103/17 207/104/17 +f 205/103/18 204/107/18 208/106/18 +f 205/103/18 208/106/18 209/104/18 +f 204/21/2 202/112/2 206/111/2 +f 204/21/2 206/111/2 208/24/2 +f 207/109/1 203/110/1 205/111/1 +f 207/109/1 205/111/1 209/108/1 +f 214/103/15 210/104/15 211/105/15 +f 214/103/15 211/105/15 215/21/15 +f 213/106/16 212/104/16 216/103/16 +f 213/106/16 216/103/16 217/107/16 +f 212/108/2 210/109/2 214/110/2 +f 212/108/2 214/110/2 216/111/2 +f 215/112/1 211/111/1 213/24/1 +f 215/112/1 213/24/1 217/21/1 +f 222/105/17 218/21/17 219/103/17 +f 222/105/17 219/103/17 223/104/17 +f 221/103/18 220/107/18 224/106/18 +f 221/103/18 224/106/18 225/104/18 +f 220/21/2 218/112/2 222/111/2 +f 220/21/2 222/111/2 224/24/2 +f 223/109/1 219/110/1 221/111/1 +f 223/109/1 221/111/1 225/108/1 +f 230/103/15 226/104/15 227/105/15 +f 230/103/15 227/105/15 231/21/15 +f 229/106/16 228/104/16 232/103/16 +f 229/106/16 232/103/16 233/107/16 +f 228/108/2 226/109/2 230/110/2 +f 228/108/2 230/110/2 232/111/2 +f 231/112/1 227/111/1 229/24/1 +f 231/112/1 229/24/1 233/21/1 +f 238/105/17 234/21/17 235/103/17 +f 238/105/17 235/103/17 239/104/17 +f 237/103/18 236/107/18 240/106/18 +f 237/103/18 240/106/18 241/104/18 +f 236/21/2 234/112/2 238/111/2 +f 236/21/2 238/111/2 240/24/2 +f 239/109/1 235/110/1 237/111/1 +f 239/109/1 237/111/1 241/108/1 +f 246/103/17 242/104/17 243/105/17 +f 246/103/17 243/105/17 247/21/17 +f 245/106/18 244/104/18 248/103/18 +f 245/106/18 248/103/18 249/107/18 +f 244/108/1 242/109/1 246/110/1 +f 244/108/1 246/110/1 248/111/1 +f 247/112/2 243/111/2 245/24/2 +f 247/112/2 245/24/2 249/21/2 +f 254/105/15 250/21/15 251/103/15 +f 254/105/15 251/103/15 255/104/15 +f 253/103/16 252/107/16 256/106/16 +f 253/103/16 256/106/16 257/104/16 +f 252/21/1 250/112/1 254/111/1 +f 252/21/1 254/111/1 256/24/1 +f 255/109/2 251/110/2 253/111/2 +f 255/109/2 253/111/2 257/108/2 +f 262/103/17 258/104/17 259/105/17 +f 262/103/17 259/105/17 263/21/17 +f 261/106/18 260/104/18 264/103/18 +f 261/106/18 264/103/18 265/107/18 +f 260/108/1 258/109/1 262/110/1 +f 260/108/1 262/110/1 264/111/1 +f 263/112/2 259/111/2 261/24/2 +f 263/112/2 261/24/2 265/21/2 +f 270/105/15 266/21/15 267/103/15 +f 270/105/15 267/103/15 271/104/15 +f 269/103/16 268/107/16 272/106/16 +f 269/103/16 272/106/16 273/104/16 +f 268/21/1 266/112/1 270/111/1 +f 268/21/1 270/111/1 272/24/1 +f 271/109/2 267/110/2 269/111/2 +f 271/109/2 269/111/2 273/108/2 +f 278/103/17 274/104/17 275/105/17 +f 278/103/17 275/105/17 279/21/17 +f 277/106/18 276/104/18 280/103/18 +f 277/106/18 280/103/18 281/107/18 +f 276/108/1 274/109/1 278/110/1 +f 276/108/1 278/110/1 280/111/1 +f 279/112/2 275/111/2 277/24/2 +f 279/112/2 277/24/2 281/21/2 +f 286/105/15 282/21/15 283/103/15 +f 286/105/15 283/103/15 287/104/15 +f 285/103/16 284/107/16 288/106/16 +f 285/103/16 288/106/16 289/104/16 +f 284/21/1 282/112/1 286/111/1 +f 284/21/1 286/111/1 288/24/1 +f 287/109/2 283/110/2 285/111/2 +f 287/109/2 285/111/2 289/108/2 +f 294/103/19 290/104/19 291/105/19 +f 294/103/19 291/105/19 295/21/19 +f 293/106/20 292/104/20 296/103/20 +f 293/106/20 296/103/20 297/107/20 +f 292/108/6 290/109/6 294/110/6 +f 292/108/6 294/110/6 296/111/6 +f 295/112/5 291/111/5 293/24/5 +f 295/112/5 293/24/5 297/21/5 +f 302/105/21 298/21/21 299/103/21 +f 302/105/21 299/103/21 303/104/21 +f 301/103/22 300/107/22 304/106/22 +f 301/103/22 304/106/22 305/104/22 +f 300/21/6 298/112/6 302/111/6 +f 300/21/6 302/111/6 304/24/6 +f 303/109/5 299/110/5 301/111/5 +f 303/109/5 301/111/5 305/108/5 +f 310/103/19 306/104/19 307/105/19 +f 310/103/19 307/105/19 311/21/19 +f 309/106/20 308/104/20 312/103/20 +f 309/106/20 312/103/20 313/107/20 +f 308/108/6 306/109/6 310/110/6 +f 308/108/6 310/110/6 312/111/6 +f 311/112/5 307/111/5 309/24/5 +f 311/112/5 309/24/5 313/21/5 +f 318/105/21 314/21/21 315/103/21 +f 318/105/21 315/103/21 319/104/21 +f 317/103/22 316/107/22 320/106/22 +f 317/103/22 320/106/22 321/104/22 +f 316/21/6 314/112/6 318/111/6 +f 316/21/6 318/111/6 320/24/6 +f 319/109/5 315/110/5 317/111/5 +f 319/109/5 317/111/5 321/108/5 +f 326/103/19 322/104/19 323/105/19 +f 326/103/19 323/105/19 327/21/19 +f 325/106/20 324/104/20 328/103/20 +f 325/106/20 328/103/20 329/107/20 +f 324/108/6 322/109/6 326/110/6 +f 324/108/6 326/110/6 328/111/6 +f 327/112/5 323/111/5 325/24/5 +f 327/112/5 325/24/5 329/21/5 +f 334/105/21 330/21/21 331/103/21 +f 334/105/21 331/103/21 335/104/21 +f 333/103/22 332/107/22 336/106/22 +f 333/103/22 336/106/22 337/104/22 +f 332/21/6 330/112/6 334/111/6 +f 332/21/6 334/111/6 336/24/6 +f 335/109/5 331/110/5 333/111/5 +f 335/109/5 333/111/5 337/108/5 +f 342/103/21 338/104/21 339/105/21 +f 342/103/21 339/105/21 343/21/21 +f 341/106/22 340/104/22 344/103/22 +f 341/106/22 344/103/22 345/107/22 +f 340/108/5 338/109/5 342/110/5 +f 340/108/5 342/110/5 344/111/5 +f 343/112/6 339/111/6 341/24/6 +f 343/112/6 341/24/6 345/21/6 +f 350/105/19 346/21/19 347/103/19 +f 350/105/19 347/103/19 351/104/19 +f 349/103/20 348/107/20 352/106/20 +f 349/103/20 352/106/20 353/104/20 +f 348/21/5 346/112/5 350/111/5 +f 348/21/5 350/111/5 352/24/5 +f 351/109/6 347/110/6 349/111/6 +f 351/109/6 349/111/6 353/108/6 +f 358/103/21 354/104/21 355/105/21 +f 358/103/21 355/105/21 359/21/21 +f 357/106/22 356/104/22 360/103/22 +f 357/106/22 360/103/22 361/107/22 +f 356/108/5 354/109/5 358/110/5 +f 356/108/5 358/110/5 360/111/5 +f 359/112/6 355/111/6 357/24/6 +f 359/112/6 357/24/6 361/21/6 +f 366/105/19 362/21/19 363/103/19 +f 366/105/19 363/103/19 367/104/19 +f 365/103/20 364/107/20 368/106/20 +f 365/103/20 368/106/20 369/104/20 +f 364/21/5 362/112/5 366/111/5 +f 364/21/5 366/111/5 368/24/5 +f 367/109/6 363/110/6 365/111/6 +f 367/109/6 365/111/6 369/108/6 +f 374/103/21 370/104/21 371/105/21 +f 374/103/21 371/105/21 375/21/21 +f 373/106/22 372/104/22 376/103/22 +f 373/106/22 376/103/22 377/107/22 +f 372/108/5 370/109/5 374/110/5 +f 372/108/5 374/110/5 376/111/5 +f 375/112/6 371/111/6 373/24/6 +f 375/112/6 373/24/6 377/21/6 +f 382/105/19 378/21/19 379/103/19 +f 382/105/19 379/103/19 383/104/19 +f 381/103/20 380/107/20 384/106/20 +f 381/103/20 384/106/20 385/104/20 +f 380/21/5 378/112/5 382/111/5 +f 380/21/5 382/111/5 384/24/5 +f 383/109/6 379/110/6 381/111/6 +f 383/109/6 381/111/6 385/108/6 diff --git a/src/main/resources/assets/hbm/textures/models/network/pylon.png b/src/main/resources/assets/hbm/textures/models/network/pylon.png index 6545feb4624cfcd1e9f850141d6e03ac1c4aea0d..a0b3d5728dbe6440b3e8205d84decc6f2843dfea 100644 GIT binary patch literal 2166 zcmV-+2#NQJP)Px-FiAu~RCt{2T1{`;$`w5`%0QZB8#GF7Tq~1(BQSGi@=Som=YzD!%w(i z0Dxs#=3bubMIv{=p64NsV*uw2=Dl7dmJDZM$uO1-FBx7kyg)1&&cc#mEE!%hykz(c z2irB(XfS;9@%ygZr#GG zSFiBPpT1J}?%m6r$NP_V)DM6Dn?m#b|0YZCKiW~py}{Jq*H{R{+uPgf!Gi|?04b%p z_w3oTOWD)GMgx(zyBDx9hNYCClmY-Kr6%xkq=UV?`=s#lwGf6GV<3b;DFxfMp_ICG zxbHvOQEv|4p~jq2f&~`DFd+n%Wg(7Z^LHGx2o?aym%rLkZmouY{_8DTZ5LVgFMj>^ zTy^O2Yh9P#+uKvO&a(8u!2#~yzi)yndl;u-7#@frT5vP%G8ooLD?N{O(wb$k0ALdd z1jB@hN$j%L;dGKp2c8w|{-YiB_Q;$1Vc5(Ddc!1nOk$V8uufV4MiLi*nK5eu?hO_C zUJnd5Cb7$4SSKy*ODC?4HFs9ACIR=oUeXCFF^OFU!%v?+B_B#!$Gt%*TgVRv3;=bv zfurMN)R>cL7iGB9=_mkr`0$~*Z&?;PosQz1BN_-CV|GE)jWrkTW*tB>oU&}!bCyuRfbM$_-)J{6iS2nF zy4^0i-7Y-O%YCiE7z5`Vl}ZJSF;Ge|7$o9A2mR*oUFktnZJeH-FBw#zw0jI_NTox6LXXfQROa zi%IM-WGjdtbI*}EH4FK=DeRCtrF3K>a6hROmiXs5#L;EUC44gBK#&m&d*q-kr z6hpM?HB4lC|1Pu+U%PhA1e#ulrIg^Dn{_(cn1LJbUJF>&p98NE|>Wi zqLw)4W+~E;QbH+(AP8paw*lbB^|q-OW!Xh{TGy{%H|uSBDe`?EoO9Dj#@L9z-|vs8 zs%iamXIM%J&-38>J{-p}9SXw`^?Kb5$ta3OI-H*WMf`Ku!+H+4+ifVN;5ZKAI9cB{ z^O_+cgz?wwbsQZX74|Po4>y}lGvB0?I5{~njC0Q6I1Yj!Fgvj@3{5aa{BzgCtE;O3 zfWyN>tgWq?ot6*+jIj~Tthb)&omf%-LiDhd63u2JN|aI;c3L{4&cZ);J=|`$O-J-* zgAiiMKDyj9?ypoT2*a?re`C!BuhejKe2hu#GIm-3aB^~j8#itsiXw2%0gPr=Q{y`G z3n5DJ+dy7D{BQt5(#E(sO&e{_1-vaFf_<;xKoKmSojDJc;ILojCJCqM3}FMt2l z?2bIlTMv&z#S*cMQLj}IMiJzUm*TnW;c>(=PAZF1!eI=3zxey3t1x#xJPsjZNEyI& z8|c1&50=uhvp{Y=Toku&-&Xnoc%BDpS+FR9=k>sB8$lRl{6aD0*2A9nk3vIwb8{2j zZr9iq&LCrT#xzjj4mv;BRu(-gvm(h~)FP0vLJ)>$$DSx+sW9H|$^IX&OnAB950`P| z!S{W0{xTL4Qc6^-mE>9~C@B$3l~fv|C=v4$w##G~$ft+PIGDD%xoLijw_G@m14=0> z6^>yL!nTvr%y2ja=MI7}0wtKJU1q>}^{_q-yS25Y*4NiZevC1O7cXAqT0^(L|2@Sy z2X`DqLcop$q>^9`LxppAUJsN2L70?Vv)X0B2-1NVB99Fud*bwG8gPdpj$=@ZLP0?) z2}+VVDdV#WMi@=pE(^K!@YdGWl@lfHPuH!0vOx3d;S2cg&yvrSAcVkS48!3N79}8*!aAFbgTXK<4%l?!c3H@+ zhk@zl>W9!D43Z%$6)Y?1@E^YV)5mjO`U3v^yFwk{4nrganyahuyxzu{x-?2;VD5QO1GiKhs1pO;R9 sb3XE!ssm?_r|%DvcTHAy;wggv0pGJgggo$nn*aa+07*qoM6N<$f}++7YXATM literal 1440 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 Date: Wed, 22 Jul 2026 11:21:32 +0400 Subject: [PATCH 39/50] =?UTF-8?q?=D0=9A=D0=B0=D0=BA=D0=BE=D0=B3=D0=BE...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 ed68a321d..2708dfdf5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6221,7 +6221,7 @@ tile.red_connector.name=Electricity Connector tile.red_connector_super.name=Heavy Duty Electricity Connector tile.red_pylon.name=Wooden Electricity Pylon tile.red_pylon_steel.name=Wooden Electricity Pylon -tile.red_pylon_large.name=Steel Electricity Pylon +tile.red_pylon_large.name=Large Electricity Pylon tile.red_pylon_medium_steel.name=Medium Steel Electricity Pylon tile.red_pylon_medium_steel_transformer.name=Medium Steel Electricity Pylon with Transformer tile.red_pylon_medium_wood.name=Medium Wooden Electricity Pylon From fa2b0a2ca405d0042c1b0d04d85eea0d406edbf9 Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Thu, 23 Jul 2026 16:49:55 +0400 Subject: [PATCH 40/50] Hello my friend --- .../hbm/render/tileentity/RenderPylon.java | 24 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../assets/hbm/models/network/pylon.obj | 1623 +++++++++++------ .../hbm/textures/models/network/pylon.png | Bin 2166 -> 2507 bytes 4 files changed, 1118 insertions(+), 531 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index bc50d99de..b33b7a002 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -24,12 +24,16 @@ public class RenderPylon extends RenderPylonBase implements IItemRendererProvide TileEntityPylon pylon = (TileEntityPylon)tile; - if(tile.getBlockType() == ModBlocks.red_pylon_steel) - bindTexture(ResourceManager.pylon_steel_tex); - else + if(tile.getBlockType() == ModBlocks.red_pylon) bindTexture(ResourceManager.pylon_tex); + else + bindTexture(ResourceManager.pylon_steel_tex); + + if(tile.getBlockType() == ModBlocks.red_pylon ) + ResourceManager.pylon.renderPart("Pylon"); + else + ResourceManager.pylon.renderPart("Pylon_steel"); - ResourceManager.pylon.renderAll(); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); @@ -62,13 +66,15 @@ public class RenderPylon extends RenderPylonBase implements IItemRendererProvide public void renderCommonWithStack(ItemStack stack) { GL11.glScaled(1, 1, 1); - if(stack.getItem() == Item.getItemFromBlock(ModBlocks.red_pylon_steel)) - bindTexture(ResourceManager.pylon_steel_tex); - else + if(stack.getItem() == Item.getItemFromBlock(ModBlocks.red_pylon)) bindTexture(ResourceManager.pylon_tex); + else + bindTexture(ResourceManager.pylon_steel_tex); - ResourceManager.pylon.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); + if(stack.getItem() == Item.getItemFromBlock(ModBlocks.red_pylon) ) + ResourceManager.pylon.renderPart("Pylon"); + else + ResourceManager.pylon.renderPart("Pylon_steel"); } }; } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 2708dfdf5..ae818935f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6220,7 +6220,7 @@ tile.red_cable_paintable.desc=Right-click with a solid block to set a paint$Pain tile.red_connector.name=Electricity Connector tile.red_connector_super.name=Heavy Duty Electricity Connector tile.red_pylon.name=Wooden Electricity Pylon -tile.red_pylon_steel.name=Wooden Electricity Pylon +tile.red_pylon_steel.name=Steel Electricity Pylon tile.red_pylon_large.name=Large Electricity Pylon tile.red_pylon_medium_steel.name=Medium Steel Electricity Pylon tile.red_pylon_medium_steel_transformer.name=Medium Steel Electricity Pylon with Transformer diff --git a/src/main/resources/assets/hbm/models/network/pylon.obj b/src/main/resources/assets/hbm/models/network/pylon.obj index 4f75c45e1..db258f3fd 100644 --- a/src/main/resources/assets/hbm/models/network/pylon.obj +++ b/src/main/resources/assets/hbm/models/network/pylon.obj @@ -33,6 +33,587 @@ v 0.187500 0.500000 -0.187500 v 0.187500 0.500000 -0.500000 v 0.187500 -0.000000 -0.187500 v 0.187500 -0.000000 -0.500000 +v 0.500000 0.687500 -0.187500 +v 0.375000 0.687500 -0.187500 +v 0.500000 0.312500 -0.187500 +v 0.375000 0.312500 -0.187500 +v 0.500000 0.687500 0.187500 +v 0.375000 0.687500 0.187500 +v 0.500000 0.312500 0.187500 +v 0.375000 0.312500 0.187500 +v 0.375000 0.625000 -0.125000 +v 0.375000 0.375000 -0.125000 +v 0.375000 0.625000 0.125000 +v 0.375000 0.375000 0.125000 +v 0.125000 0.625000 0.125000 +v 0.125000 0.375000 0.125000 +v 0.187500 0.687500 0.500000 +v 0.187500 0.687500 0.375000 +v 0.187500 0.312500 0.500000 +v 0.187500 0.312500 0.375000 +v -0.187500 0.687500 0.500000 +v -0.187500 0.687500 0.375000 +v -0.187500 0.312500 0.500000 +v -0.187500 0.312500 0.375000 +v 0.125000 0.625000 0.375000 +v 0.125000 0.375000 0.375000 +v -0.125000 0.625000 0.375000 +v -0.125000 0.375000 0.375000 +v -0.500000 0.687500 0.187500 +v -0.375000 0.687500 0.187500 +v -0.500000 0.312500 0.187500 +v -0.375000 0.312500 0.187500 +v -0.500000 0.687500 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.500000 0.312500 -0.187500 +v -0.375000 0.312500 -0.187500 +v -0.375000 0.625000 0.125000 +v -0.375000 0.375000 0.125000 +v -0.375000 0.625000 -0.125000 +v -0.375000 0.375000 -0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 0.375000 0.125000 +v -0.187500 0.687500 -0.500000 +v -0.187500 0.687500 -0.375000 +v -0.187500 0.312500 -0.500000 +v -0.187500 0.312500 -0.375000 +v 0.187500 0.687500 -0.500000 +v 0.187500 0.687500 -0.375000 +v 0.187500 0.312500 -0.500000 +v 0.187500 0.312500 -0.375000 +v -0.125000 0.625000 -0.375000 +v -0.125000 0.375000 -0.375000 +v 0.125000 0.625000 -0.375000 +v 0.125000 0.375000 -0.375000 +v -0.125000 0.625000 -0.125000 +v -0.125000 0.375000 -0.125000 +v 0.125000 0.625000 -0.125000 +v 0.125000 0.375000 -0.125000 +v 0.187500 4.000000 0.062500 +v 0.187500 4.000000 -0.062500 +v 0.187500 0.625000 0.062500 +v 0.187500 0.625000 -0.062500 +v 0.125000 4.000000 0.062500 +v 0.125000 4.000000 -0.062500 +v 0.125000 0.625000 0.062500 +v 0.125000 0.625000 -0.062500 +v 0.125000 4.000000 0.125000 +v 0.125000 4.000000 -0.125000 +v 0.125000 0.625000 0.125000 +v 0.125000 0.625000 -0.125000 +v -0.125000 4.000000 0.125000 +v -0.125000 4.000000 -0.125000 +v -0.125000 0.625000 0.125000 +v -0.125000 0.625000 -0.125000 +v 0.250000 5.000000 0.250000 +v 0.250000 5.000000 -0.250000 +v 0.250000 4.000000 0.250000 +v 0.250000 4.000000 -0.250000 +v -0.250000 5.000000 0.250000 +v -0.250000 5.000000 -0.250000 +v -0.250000 4.000000 0.250000 +v -0.250000 4.000000 -0.250000 +v 0.125000 5.187500 -0.125000 +v 0.125000 5.250000 0.125000 +v 0.125000 5.187500 0.125000 +v -0.125000 5.187500 0.125000 +v -0.125000 5.250000 -0.125000 +v -0.125000 5.187500 -0.125000 +v -0.125000 5.062500 -0.125000 +v 0.187500 5.062500 -0.187500 +v 0.125000 5.062500 -0.125000 +v 0.125000 5.000000 -0.125000 +v 0.125000 5.062500 0.125000 +v 0.125000 5.000000 0.125000 +v -0.125000 5.000000 0.125000 +v -0.125000 5.000000 -0.125000 +v -0.125000 5.062500 0.125000 +v 0.187500 5.187500 0.187500 +v 0.187500 5.062500 0.187500 +v -0.187500 5.062500 0.187500 +v -0.187500 5.062500 -0.187500 +v 0.187500 5.250000 -0.187500 +v 0.125000 5.250000 -0.125000 +v -0.187500 5.187500 -0.187500 +v 0.187500 5.187500 -0.187500 +v -0.187500 5.187500 0.187500 +v -0.125000 5.250000 0.125000 +v 0.187500 5.375000 0.187500 +v 0.187500 5.250000 0.187500 +v -0.187500 5.250000 0.187500 +v -0.187500 5.250000 -0.187500 +v -0.187500 5.375000 -0.187500 +v 0.187500 5.375000 -0.187500 +v -0.187500 5.375000 0.187500 +v 0.125000 5.375000 -0.125000 +v 0.125000 5.437500 0.125000 +v 0.125000 5.375000 0.125000 +v -0.125000 5.375000 0.125000 +v -0.125000 5.437500 -0.125000 +v -0.125000 5.375000 -0.125000 +v 0.125000 5.437500 -0.125000 +v -0.125000 5.437500 0.125000 +v -0.062500 5.437500 -0.062500 +v 0.062500 5.437500 -0.062500 +v 0.062500 5.562500 0.062500 +v 0.062500 5.437500 0.062500 +v -0.062500 5.437500 0.062500 +v -0.062500 5.562500 0.062500 +v 0.062500 5.562500 -0.062500 +v -0.062500 5.562500 -0.062500 +v 0.437500 0.875000 0.437500 +v 0.437500 0.875000 -0.437500 +v 0.437500 0.500000 0.437500 +v 0.437500 0.500000 -0.437500 +v -0.437500 0.875000 0.437500 +v -0.437500 0.875000 -0.437500 +v -0.437500 0.500000 0.437500 +v -0.437500 0.500000 -0.437500 +v 0.312500 1.000000 0.312500 +v 0.312500 1.000000 -0.312500 +v -0.312500 1.000000 0.312500 +v -0.312500 1.000000 -0.312500 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.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.0000 -1.0000 +vn -0.0000 0.7071 0.7071 +vn 0.7071 0.7071 -0.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.7071 0.7071 -0.0000 +vt 0.740741 0.162500 +vt 0.648148 0.162500 +vt 0.648148 0.062500 +vt 0.740741 0.062500 +vt 0.555556 0.062500 +vt 0.555556 0.162500 +vt 0.462963 0.162500 +vt 0.462963 0.062500 +vt 0.462963 0.225000 +vt 0.370370 0.225000 +vt 0.370370 0.162500 +vt 0.370370 0.062500 +vt 0.370370 0.000000 +vt 0.462963 0.000000 +vt 0.555556 0.325000 +vt 0.518519 0.325000 +vt 0.518519 0.250000 +vt 0.555556 0.250000 +vt 0.407407 0.250000 +vt 0.407407 0.325000 +vt 0.370370 0.325000 +vt 0.370370 0.250000 +vt 0.518519 0.350000 +vt 0.407407 0.350000 +vt 0.518519 0.225000 +vt 0.407407 0.225000 +vt 0.574074 0.312500 +vt 0.648148 0.312500 +vt 0.666667 0.325000 +vt 0.574074 0.262500 +vt 0.648148 0.262500 +vt 0.666667 0.250000 +vt 0.518519 0.400000 +vt 0.444444 0.400000 +vt 0.444444 0.350000 +vt 0.592593 0.400000 +vt 0.592593 0.350000 +vt 0.666667 0.400000 +vt 0.666667 0.350000 +vt 0.370370 0.400000 +vt 0.370370 0.350000 +vt 0.740741 0.350000 +vt 0.740741 0.400000 +vt 0.351852 0.675000 +vt 0.314815 0.675000 +vt 0.314815 0.000000 +vt 0.351852 0.000000 +vt 0.296296 0.675000 +vt 0.296296 0.000000 +vt 0.370370 0.675000 +vt 0.074074 0.675000 +vt 0.000000 0.675000 +vt 0.000000 0.000000 +vt 0.074074 0.000000 +vt 0.222222 0.000000 +vt 0.222222 0.675000 +vt 0.148148 0.675000 +vt 0.148148 0.000000 +vt 0.518519 0.700000 +vt 0.370370 0.700000 +vt 0.370370 0.500000 +vt 0.518519 0.500000 +vt 0.814815 0.500000 +vt 0.814815 0.700000 +vt 0.666667 0.700000 +vt 0.666667 0.500000 +vt 0.370370 0.800000 +vt 0.518519 0.800000 +vt 0.962963 0.500000 +vt 0.962963 0.700000 +vt 0.481481 0.862500 +vt 0.407407 0.875000 +vt 0.407407 0.862500 +vt 0.481481 0.812500 +vt 0.388889 0.825000 +vt 0.407407 0.812500 +vt 0.481481 0.800000 +vt 0.407407 0.800000 +vt 0.500000 0.825000 +vt 0.388889 0.850000 +vt 0.481481 0.875000 +vt 0.388889 0.887500 +vt 0.500000 0.887500 +vt 0.388889 0.912500 +vt 0.500000 0.850000 +vt 0.481481 0.925000 +vt 0.407407 0.937500 +vt 0.407407 0.925000 +vt 0.500000 0.912500 +vt 0.481481 0.937500 +vt 0.425926 0.950000 +vt 0.462963 0.950000 +vt 0.425926 0.975000 +vt 0.425926 1.000000 +vt 0.462963 0.975000 +vt 0.462963 1.000000 +vt 1.000000 0.250000 +vt 0.740741 0.250000 +vt 0.740741 0.175000 +vt 1.000000 0.175000 +vt 0.777778 0.275000 +vt 0.962963 0.275000 +vt 0.962963 0.400000 +vt 0.777778 0.400000 +vt 1.000000 0.000000 +vt 0.740741 0.000000 +s 1 +usemtl m_2d342b16-8f2e-5231-80ae-92eafddb5779 +f 2/1/1 1/2/1 3/3/1 +f 2/1/1 3/3/1 4/4/1 +f 7/5/2 5/6/2 6/7/2 +f 7/5/2 6/7/2 8/8/2 +f 5/9/3 1/10/3 2/11/3 +f 5/9/3 2/11/3 6/7/3 +f 4/12/4 3/13/4 7/14/4 +f 4/12/4 7/14/4 8/8/4 +f 3/3/5 1/2/5 5/6/5 +f 3/3/5 5/6/5 7/5/5 +f 6/7/6 2/11/6 4/12/6 +f 6/7/6 4/12/6 8/8/6 +f 10/1/1 9/2/1 11/3/1 +f 10/1/1 11/3/1 12/4/1 +f 15/5/2 13/6/2 14/7/2 +f 15/5/2 14/7/2 16/8/2 +f 13/9/3 9/10/3 10/11/3 +f 13/9/3 10/11/3 14/7/3 +f 12/12/4 11/13/4 15/14/4 +f 12/12/4 15/14/4 16/8/4 +f 11/3/5 9/2/5 13/6/5 +f 11/3/5 13/6/5 15/5/5 +f 14/7/6 10/11/6 12/12/6 +f 14/7/6 12/12/6 16/8/6 +f 18/1/1 17/2/1 19/3/1 +f 18/1/1 19/3/1 20/4/1 +f 23/5/2 21/6/2 22/7/2 +f 23/5/2 22/7/2 24/8/2 +f 21/9/3 17/10/3 18/11/3 +f 21/9/3 18/11/3 22/7/3 +f 20/12/4 19/13/4 23/14/4 +f 20/12/4 23/14/4 24/8/4 +f 19/3/5 17/2/5 21/6/5 +f 19/3/5 21/6/5 23/5/5 +f 22/7/6 18/11/6 20/12/6 +f 22/7/6 20/12/6 24/8/6 +f 26/1/1 25/2/1 27/3/1 +f 26/1/1 27/3/1 28/4/1 +f 31/5/2 29/6/2 30/7/2 +f 31/5/2 30/7/2 32/8/2 +f 29/9/3 25/10/3 26/11/3 +f 29/9/3 26/11/3 30/7/3 +f 28/12/4 27/13/4 31/14/4 +f 28/12/4 31/14/4 32/8/4 +f 27/3/5 25/2/5 29/6/5 +f 27/3/5 29/6/5 31/5/5 +f 30/7/6 26/11/6 28/12/6 +f 30/7/6 28/12/6 32/8/6 +f 34/15/6 33/16/6 35/17/6 +f 34/15/6 35/17/6 36/18/6 +f 39/19/5 37/20/5 38/21/5 +f 39/19/5 38/21/5 40/22/5 +f 37/20/3 33/16/3 34/23/3 +f 37/20/3 34/23/3 38/24/3 +f 36/25/4 35/17/4 39/19/4 +f 36/25/4 39/19/4 40/26/4 +f 35/17/1 33/16/1 37/20/1 +f 35/17/1 37/20/1 39/19/1 +f 41/27/2 43/28/2 38/29/2 +f 41/27/2 38/29/2 34/15/2 +f 42/30/2 41/27/2 34/15/2 +f 42/30/2 34/15/2 36/18/2 +f 44/31/2 42/30/2 36/18/2 +f 44/31/2 36/18/2 40/32/2 +f 43/28/2 44/31/2 40/32/2 +f 43/28/2 40/32/2 38/29/2 +f 87/33/3 45/34/3 43/35/3 +f 87/33/3 43/35/3 41/23/3 +f 88/36/6 87/33/6 41/23/6 +f 88/36/6 41/23/6 42/37/6 +f 46/38/4 88/36/4 42/37/4 +f 46/38/4 42/37/4 44/39/4 +f 45/34/5 46/40/5 44/41/5 +f 45/34/5 44/41/5 43/35/5 +f 48/15/1 47/16/1 49/17/1 +f 48/15/1 49/17/1 50/18/1 +f 53/19/2 51/20/2 52/21/2 +f 53/19/2 52/21/2 54/22/2 +f 51/20/3 47/16/3 48/23/3 +f 51/20/3 48/23/3 52/24/3 +f 50/25/4 49/17/4 53/19/4 +f 50/25/4 53/19/4 54/26/4 +f 49/17/5 47/16/5 51/20/5 +f 49/17/5 51/20/5 53/19/5 +f 55/27/6 57/28/6 52/29/6 +f 55/27/6 52/29/6 48/15/6 +f 56/30/6 55/27/6 48/15/6 +f 56/30/6 48/15/6 50/18/6 +f 58/31/6 56/30/6 50/18/6 +f 58/31/6 50/18/6 54/32/6 +f 57/28/6 58/31/6 54/32/6 +f 57/28/6 54/32/6 52/29/6 +f 45/33/3 71/34/3 57/35/3 +f 45/33/3 57/35/3 55/23/3 +f 46/36/1 45/33/1 55/23/1 +f 46/36/1 55/23/1 56/37/1 +f 72/38/4 46/36/4 56/37/4 +f 72/38/4 56/37/4 58/39/4 +f 71/34/2 72/40/2 58/41/2 +f 71/34/2 58/41/2 57/35/2 +f 60/15/5 59/16/5 61/17/5 +f 60/15/5 61/17/5 62/18/5 +f 65/19/6 63/20/6 64/21/6 +f 65/19/6 64/21/6 66/22/6 +f 63/20/3 59/16/3 60/23/3 +f 63/20/3 60/23/3 64/24/3 +f 62/25/4 61/17/4 65/19/4 +f 62/25/4 65/19/4 66/26/4 +f 61/17/2 59/16/2 63/20/2 +f 61/17/2 63/20/2 65/19/2 +f 67/27/1 69/28/1 64/29/1 +f 67/27/1 64/29/1 60/15/1 +f 68/30/1 67/27/1 60/15/1 +f 68/30/1 60/15/1 62/18/1 +f 70/31/1 68/30/1 62/18/1 +f 70/31/1 62/18/1 66/32/1 +f 69/28/1 70/31/1 66/32/1 +f 69/28/1 66/32/1 64/29/1 +f 71/33/3 85/34/3 69/35/3 +f 71/33/3 69/35/3 67/23/3 +f 72/36/5 71/33/5 67/23/5 +f 72/36/5 67/23/5 68/37/5 +f 86/38/4 72/36/4 68/37/4 +f 86/38/4 68/37/4 70/39/4 +f 85/34/6 86/40/6 70/41/6 +f 85/34/6 70/41/6 69/35/6 +f 74/15/2 73/16/2 75/17/2 +f 74/15/2 75/17/2 76/18/2 +f 79/19/1 77/20/1 78/21/1 +f 79/19/1 78/21/1 80/22/1 +f 77/20/3 73/16/3 74/23/3 +f 77/20/3 74/23/3 78/24/3 +f 76/25/4 75/17/4 79/19/4 +f 76/25/4 79/19/4 80/26/4 +f 75/17/6 73/16/6 77/20/6 +f 75/17/6 77/20/6 79/19/6 +f 81/27/5 83/28/5 78/29/5 +f 81/27/5 78/29/5 74/15/5 +f 82/30/5 81/27/5 74/15/5 +f 82/30/5 74/15/5 76/18/5 +f 84/31/5 82/30/5 76/18/5 +f 84/31/5 76/18/5 80/32/5 +f 83/28/5 84/31/5 80/32/5 +f 83/28/5 80/32/5 78/29/5 +f 85/33/3 87/34/3 83/35/3 +f 85/33/3 83/35/3 81/23/3 +f 86/36/2 85/33/2 81/23/2 +f 86/36/2 81/23/2 82/37/2 +f 88/38/4 86/36/4 82/37/4 +f 88/38/4 82/37/4 84/39/4 +f 87/34/1 88/40/1 84/41/1 +f 87/34/1 84/41/1 83/35/1 +f 72/38/4 86/39/4 88/42/4 +f 72/38/4 88/42/4 46/43/4 +f 90/44/1 89/45/1 91/46/1 +f 90/44/1 91/46/1 92/47/1 +f 91/46/5 89/45/5 93/48/5 +f 91/46/5 93/48/5 95/49/5 +f 94/50/6 90/44/6 92/47/6 +f 94/50/6 92/47/6 96/13/6 +f 98/51/1 97/52/1 99/53/1 +f 98/51/1 99/53/1 100/54/1 +f 103/55/2 101/56/2 102/57/2 +f 103/55/2 102/57/2 104/58/2 +f 99/49/5 97/48/5 101/56/5 +f 99/49/5 101/56/5 103/55/5 +f 102/57/6 98/51/6 100/54/6 +f 102/57/6 100/54/6 104/58/6 +f 106/59/1 105/60/1 107/61/1 +f 106/59/1 107/61/1 108/62/1 +f 111/63/2 109/64/2 110/65/2 +f 111/63/2 110/65/2 112/66/2 +f 109/67/3 105/60/3 106/59/3 +f 109/67/3 106/59/3 110/68/3 +f 108/62/4 107/61/4 111/40/4 +f 108/62/4 111/40/4 112/33/4 +f 107/69/5 105/70/5 109/64/5 +f 107/69/5 109/64/5 111/63/5 +f 110/65/6 106/59/6 108/62/6 +f 110/65/6 108/62/6 112/66/6 +f 113/71/1 114/72/1 115/73/1 +f 116/71/2 117/72/2 118/73/2 +f 119/74/4 120/75/4 121/76/4 +f 122/77/1 123/76/1 124/78/1 +f 125/77/2 119/76/2 126/78/2 +f 126/77/6 121/76/6 122/78/6 +f 124/77/5 127/76/5 125/78/5 +f 120/79/1 128/80/1 129/75/1 +f 123/74/4 130/75/4 127/76/4 +f 121/74/4 129/75/4 123/76/4 +f 127/74/4 131/75/4 119/76/4 +f 117/81/4 132/82/4 133/72/4 +f 130/79/2 134/80/2 131/75/2 +f 131/79/6 135/80/6 120/75/6 +f 129/79/5 136/80/5 130/75/5 +f 118/71/6 133/72/6 113/73/6 +f 115/71/5 137/72/5 116/73/5 +f 132/83/1 138/84/1 139/82/1 +f 114/81/4 140/82/4 137/72/4 +f 133/81/4 139/82/4 114/72/4 +f 137/81/4 141/82/4 117/72/4 +f 140/83/2 142/84/2 141/82/2 +f 141/83/6 143/84/6 132/82/6 +f 139/83/5 144/84/5 140/82/5 +f 115/71/3 136/80/3 128/85/3 +f 113/71/3 128/80/3 135/85/3 +f 118/71/3 135/80/3 134/85/3 +f 116/71/3 134/80/3 136/85/3 +f 145/86/1 146/87/1 147/88/1 +f 148/86/2 149/87/2 150/88/2 +f 150/86/6 151/87/6 145/88/6 +f 147/86/5 152/87/5 148/88/5 +f 147/86/3 144/84/3 138/89/3 +f 145/86/3 138/84/3 143/89/3 +f 150/86/3 143/84/3 142/89/3 +f 148/86/3 142/84/3 144/89/3 +f 152/90/3 153/91/3 149/87/3 +f 154/92/1 155/93/1 156/91/1 +f 149/90/3 154/91/3 151/87/3 +f 146/90/3 157/91/3 152/87/3 +f 151/90/3 156/91/3 146/87/3 +f 158/94/3 159/95/3 160/96/3 +f 157/92/2 160/93/2 153/91/2 +f 153/92/6 159/93/6 154/91/6 +f 156/92/5 158/93/5 157/91/5 +f 113/71/1 133/81/1 114/72/1 +f 116/71/2 137/81/2 117/72/2 +f 119/74/4 131/79/4 120/75/4 +f 122/77/1 121/74/1 123/76/1 +f 125/77/2 127/74/2 119/76/2 +f 126/77/6 119/74/6 121/76/6 +f 124/77/5 123/74/5 127/76/5 +f 120/79/1 135/85/1 128/80/1 +f 123/74/4 129/79/4 130/75/4 +f 121/74/4 120/79/4 129/75/4 +f 127/74/4 130/79/4 131/75/4 +f 117/81/4 141/83/4 132/82/4 +f 130/79/2 136/85/2 134/80/2 +f 131/79/6 134/85/6 135/80/6 +f 129/79/5 128/85/5 136/80/5 +f 118/71/6 117/81/6 133/72/6 +f 115/71/5 114/81/5 137/72/5 +f 132/83/1 143/89/1 138/84/1 +f 114/81/4 139/83/4 140/82/4 +f 133/81/4 132/83/4 139/82/4 +f 137/81/4 140/83/4 141/82/4 +f 140/83/2 144/89/2 142/84/2 +f 141/83/6 142/89/6 143/84/6 +f 139/83/5 138/89/5 144/84/5 +f 115/71/3 116/73/3 136/80/3 +f 113/71/3 115/73/3 128/80/3 +f 118/71/3 113/73/3 135/80/3 +f 116/71/3 118/73/3 134/80/3 +f 145/86/1 151/90/1 146/87/1 +f 148/86/2 152/90/2 149/87/2 +f 150/86/6 149/90/6 151/87/6 +f 147/86/5 146/90/5 152/87/5 +f 147/86/3 148/88/3 144/84/3 +f 145/86/3 147/88/3 138/84/3 +f 150/86/3 145/88/3 143/84/3 +f 148/86/3 150/88/3 142/84/3 +f 152/90/3 157/92/3 153/91/3 +f 154/92/1 159/95/1 155/93/1 +f 149/90/3 153/92/3 154/91/3 +f 146/90/3 156/92/3 157/91/3 +f 151/90/3 154/92/3 156/91/3 +f 158/94/3 155/93/3 159/95/3 +f 157/92/2 158/95/2 160/93/2 +f 153/92/6 160/95/6 159/93/6 +f 156/92/5 155/95/5 158/93/5 +f 162/97/1 161/98/1 163/99/1 +f 162/97/1 163/99/1 164/100/1 +f 167/100/2 165/97/2 166/98/2 +f 167/100/2 166/98/2 168/99/2 +f 171/101/3 169/102/3 170/103/3 +f 171/101/3 170/103/3 172/104/3 +f 164/105/4 163/100/4 167/99/4 +f 164/105/4 167/99/4 168/106/4 +f 163/100/5 161/97/5 165/98/5 +f 163/100/5 165/98/5 167/99/5 +f 166/97/6 162/98/6 164/99/6 +f 166/97/6 164/99/6 168/100/6 +f 169/102/7 171/101/7 165/98/7 +f 169/102/7 165/98/7 161/97/7 +f 170/102/8 169/101/8 161/98/8 +f 170/102/8 161/98/8 162/97/8 +f 172/102/9 170/101/9 162/98/9 +f 172/102/9 162/98/9 166/97/9 +f 171/102/10 172/101/10 166/98/10 +f 171/102/10 166/98/10 165/97/10 +o Pylon_steel +v -0.187500 0.500000 0.500000 +v -0.187500 0.500000 0.187500 +v -0.187500 0.000000 0.500000 +v -0.187500 0.000000 0.187500 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.187500 +v -0.500000 0.000000 0.500000 +v -0.500000 0.000000 0.187500 +v 0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.187500 +v 0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.187500 +v 0.187500 0.500000 0.500000 +v 0.187500 0.500000 0.187500 +v 0.187500 0.000000 0.500000 +v 0.187500 0.000000 0.187500 +v -0.187500 0.500000 -0.187500 +v -0.187500 0.500000 -0.500000 +v -0.187500 -0.000000 -0.187500 +v -0.187500 -0.000000 -0.500000 +v -0.500000 0.500000 -0.187500 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.000000 -0.187500 +v -0.500000 -0.000000 -0.500000 +v 0.500000 0.500000 -0.187500 +v 0.500000 0.500000 -0.500000 +v 0.500000 -0.000000 -0.187500 +v 0.500000 -0.000000 -0.500000 +v 0.187500 0.500000 -0.187500 +v 0.187500 0.500000 -0.500000 +v 0.187500 -0.000000 -0.187500 +v 0.187500 -0.000000 -0.500000 v 0.250000 5.000000 0.250000 v 0.250000 5.000000 -0.250000 v 0.250000 4.000000 0.250000 @@ -521,524 +1102,524 @@ vt 0.600000 0.675000 vt 0.600000 0.650000 vt 0.733333 0.550000 s 1 -usemtl m_2d342b16-8f2e-5231-80ae-92eafddb5779 -f 2/1/1 1/2/1 3/3/1 -f 2/1/1 3/3/1 4/4/1 -f 7/5/2 5/6/2 6/7/2 -f 7/5/2 6/7/2 8/8/2 -f 5/9/3 1/10/3 2/11/3 -f 5/9/3 2/11/3 6/7/3 -f 4/12/4 3/13/4 7/14/4 -f 4/12/4 7/14/4 8/8/4 -f 3/3/5 1/2/5 5/6/5 -f 3/3/5 5/6/5 7/5/5 -f 6/7/6 2/11/6 4/12/6 -f 6/7/6 4/12/6 8/8/6 -f 10/1/1 9/2/1 11/3/1 -f 10/1/1 11/3/1 12/4/1 -f 15/5/2 13/6/2 14/7/2 -f 15/5/2 14/7/2 16/8/2 -f 13/9/3 9/10/3 10/11/3 -f 13/9/3 10/11/3 14/7/3 -f 12/12/4 11/13/4 15/14/4 -f 12/12/4 15/14/4 16/8/4 -f 11/3/5 9/2/5 13/6/5 -f 11/3/5 13/6/5 15/5/5 -f 14/7/6 10/11/6 12/12/6 -f 14/7/6 12/12/6 16/8/6 -f 18/1/1 17/2/1 19/3/1 -f 18/1/1 19/3/1 20/4/1 -f 23/5/2 21/6/2 22/7/2 -f 23/5/2 22/7/2 24/8/2 -f 21/9/3 17/10/3 18/11/3 -f 21/9/3 18/11/3 22/7/3 -f 20/12/4 19/13/4 23/14/4 -f 20/12/4 23/14/4 24/8/4 -f 19/3/5 17/2/5 21/6/5 -f 19/3/5 21/6/5 23/5/5 -f 22/7/6 18/11/6 20/12/6 -f 22/7/6 20/12/6 24/8/6 -f 26/1/1 25/2/1 27/3/1 -f 26/1/1 27/3/1 28/4/1 -f 31/5/2 29/6/2 30/7/2 -f 31/5/2 30/7/2 32/8/2 -f 29/9/3 25/10/3 26/11/3 -f 29/9/3 26/11/3 30/7/3 -f 28/12/4 27/13/4 31/14/4 -f 28/12/4 31/14/4 32/8/4 -f 27/3/5 25/2/5 29/6/5 -f 27/3/5 29/6/5 31/5/5 -f 30/7/6 26/11/6 28/12/6 -f 30/7/6 28/12/6 32/8/6 -f 34/15/1 33/16/1 35/17/1 -f 34/15/1 35/17/1 36/18/1 -f 39/19/2 37/20/2 38/21/2 -f 39/19/2 38/21/2 40/22/2 -f 37/23/3 33/16/3 34/15/3 -f 37/23/3 34/15/3 38/24/3 -f 36/18/4 35/17/4 39/25/4 -f 36/18/4 39/25/4 40/26/4 -f 35/27/5 33/28/5 37/20/5 -f 35/27/5 37/20/5 39/19/5 -f 38/21/6 34/15/6 36/18/6 -f 38/21/6 36/18/6 40/22/6 -f 41/29/1 42/30/1 43/31/1 -f 44/29/2 45/30/2 46/31/2 -f 47/32/4 48/33/4 49/34/4 -f 50/35/1 51/34/1 52/36/1 -f 53/35/2 47/34/2 54/36/2 -f 54/35/6 49/34/6 50/36/6 -f 52/35/5 55/34/5 53/36/5 -f 48/37/1 56/38/1 57/33/1 -f 51/32/4 58/33/4 55/34/4 -f 49/32/4 57/33/4 51/34/4 -f 55/32/4 59/33/4 47/34/4 -f 45/39/4 60/40/4 61/30/4 -f 58/37/2 62/38/2 59/33/2 -f 59/37/6 63/38/6 48/33/6 -f 57/37/5 64/38/5 58/33/5 -f 46/29/6 61/30/6 41/31/6 -f 43/29/5 65/30/5 44/31/5 -f 60/41/1 66/42/1 67/40/1 -f 42/39/4 68/40/4 65/30/4 -f 61/39/4 67/40/4 42/30/4 -f 65/39/4 69/40/4 45/30/4 -f 68/41/2 70/42/2 69/40/2 -f 69/41/6 71/42/6 60/40/6 -f 67/41/5 72/42/5 68/40/5 -f 43/29/3 64/38/3 56/43/3 -f 41/29/3 56/38/3 63/43/3 -f 46/29/3 63/38/3 62/43/3 -f 44/29/3 62/38/3 64/43/3 -f 73/44/1 74/45/1 75/46/1 -f 76/44/2 77/45/2 78/46/2 -f 78/44/6 79/45/6 73/46/6 -f 75/44/5 80/45/5 76/46/5 -f 75/44/3 72/42/3 66/47/3 -f 73/44/3 66/42/3 71/47/3 -f 78/44/3 71/42/3 70/47/3 -f 76/44/3 70/42/3 72/47/3 -f 80/48/3 81/49/3 77/45/3 -f 82/50/1 83/51/1 84/49/1 -f 77/48/3 82/49/3 79/45/3 -f 74/48/3 85/49/3 80/45/3 -f 79/48/3 84/49/3 74/45/3 -f 86/52/3 87/53/3 88/54/3 -f 85/50/2 88/51/2 81/49/2 -f 81/50/6 87/51/6 82/49/6 -f 84/50/5 86/51/5 85/49/5 -f 41/29/1 61/39/1 42/30/1 -f 44/29/2 65/39/2 45/30/2 -f 47/32/4 59/37/4 48/33/4 -f 50/35/1 49/32/1 51/34/1 -f 53/35/2 55/32/2 47/34/2 -f 54/35/6 47/32/6 49/34/6 -f 52/35/5 51/32/5 55/34/5 -f 48/37/1 63/43/1 56/38/1 -f 51/32/4 57/37/4 58/33/4 -f 49/32/4 48/37/4 57/33/4 -f 55/32/4 58/37/4 59/33/4 -f 45/39/4 69/41/4 60/40/4 -f 58/37/2 64/43/2 62/38/2 -f 59/37/6 62/43/6 63/38/6 -f 57/37/5 56/43/5 64/38/5 -f 46/29/6 45/39/6 61/30/6 -f 43/29/5 42/39/5 65/30/5 -f 60/41/1 71/47/1 66/42/1 -f 42/39/4 67/41/4 68/40/4 -f 61/39/4 60/41/4 67/40/4 -f 65/39/4 68/41/4 69/40/4 -f 68/41/2 72/47/2 70/42/2 -f 69/41/6 70/47/6 71/42/6 -f 67/41/5 66/47/5 72/42/5 -f 43/29/3 44/31/3 64/38/3 -f 41/29/3 43/31/3 56/38/3 -f 46/29/3 41/31/3 63/38/3 -f 44/29/3 46/31/3 62/38/3 -f 73/44/1 79/48/1 74/45/1 -f 76/44/2 80/48/2 77/45/2 -f 78/44/6 77/48/6 79/45/6 -f 75/44/5 74/48/5 80/45/5 -f 75/44/3 76/46/3 72/42/3 -f 73/44/3 75/46/3 66/42/3 -f 78/44/3 73/46/3 71/42/3 -f 76/44/3 78/46/3 70/42/3 -f 80/48/3 85/50/3 81/49/3 -f 82/50/1 87/53/1 83/51/1 -f 77/48/3 81/50/3 82/49/3 -f 74/48/3 84/50/3 85/49/3 -f 79/48/3 82/50/3 84/49/3 -f 86/52/3 83/51/3 87/53/3 -f 85/50/2 86/53/2 88/51/2 -f 81/50/6 88/53/6 87/51/6 -f 84/50/5 83/53/5 86/51/5 -f 90/55/1 89/56/1 91/57/1 -f 90/55/1 91/57/1 92/58/1 -f 95/59/2 93/60/2 94/61/2 -f 95/59/2 94/61/2 96/62/2 -f 91/63/5 89/64/5 93/60/5 -f 91/63/5 93/60/5 95/59/5 -f 94/61/6 90/55/6 92/58/6 -f 94/61/6 92/58/6 96/62/6 -f 118/65/7 120/66/7 93/60/7 -f 118/65/7 93/60/7 89/64/7 -f 97/67/8 118/68/8 89/56/8 -f 97/67/8 89/56/8 90/55/8 -f 98/69/9 97/67/9 90/55/9 -f 98/69/9 90/55/9 94/61/9 -f 120/66/10 98/69/10 94/61/10 -f 120/66/10 94/61/10 93/60/10 -f 100/55/1 99/56/1 101/57/1 -f 100/55/1 101/57/1 102/58/1 -f 105/59/2 103/60/2 104/61/2 -f 105/59/2 104/61/2 106/62/2 -f 101/63/5 99/64/5 103/60/5 -f 101/63/5 103/60/5 105/59/5 -f 104/61/6 100/55/6 102/58/6 -f 104/61/6 102/58/6 106/62/6 -f 107/65/7 118/66/7 103/60/7 -f 107/65/7 103/60/7 99/64/7 -f 108/67/11 107/68/11 99/56/11 -f 108/67/11 99/56/11 100/55/11 -f 97/69/9 108/67/9 100/55/9 -f 97/69/9 100/55/9 104/61/9 -f 118/66/12 97/69/12 104/61/12 -f 118/66/12 104/61/12 103/60/12 -f 110/55/1 109/56/1 111/57/1 -f 110/55/1 111/57/1 112/58/1 -f 115/59/2 113/60/2 114/61/2 -f 115/59/2 114/61/2 116/62/2 -f 111/63/5 109/64/5 113/60/5 -f 111/63/5 113/60/5 115/59/5 -f 114/61/6 110/55/6 112/58/6 -f 114/61/6 112/58/6 116/62/6 -f 117/65/13 119/66/13 113/60/13 -f 117/65/13 113/60/13 109/64/13 -f 118/67/8 117/68/8 109/56/8 -f 118/67/8 109/56/8 110/55/8 -f 120/69/14 118/67/14 110/55/14 -f 120/69/14 110/55/14 114/61/14 -f 119/66/10 120/69/10 114/61/10 -f 119/66/10 114/61/10 113/60/10 -f 122/55/1 121/56/1 123/57/1 -f 122/55/1 123/57/1 124/58/1 -f 127/59/2 125/60/2 126/61/2 -f 127/59/2 126/61/2 128/62/2 -f 123/63/5 121/64/5 125/60/5 -f 123/63/5 125/60/5 127/59/5 -f 126/61/6 122/55/6 124/58/6 -f 126/61/6 124/58/6 128/62/6 -f 129/65/13 117/66/13 125/60/13 -f 129/65/13 125/60/13 121/64/13 -f 107/67/11 129/68/11 121/56/11 -f 107/67/11 121/56/11 122/55/11 -f 118/69/14 107/67/14 122/55/14 -f 118/69/14 122/55/14 126/61/14 -f 117/66/12 118/69/12 126/61/12 -f 117/66/12 126/61/12 125/60/12 -f 131/70/5 133/71/5 132/72/5 -f 131/70/5 132/72/5 130/73/5 -f 137/74/1 131/75/1 130/76/1 -f 137/74/1 130/76/1 135/77/1 -f 133/71/2 136/78/2 134/79/2 -f 133/71/2 134/79/2 132/72/2 -f 136/78/6 137/74/6 135/77/6 -f 136/78/6 135/77/6 134/79/6 -f 139/80/6 138/81/6 140/82/6 -f 139/80/6 140/82/6 141/83/6 -f 144/84/5 142/85/5 143/64/5 -f 144/84/5 143/64/5 145/86/5 -f 142/85/3 138/81/3 139/87/3 -f 142/85/3 139/87/3 143/88/3 -f 141/89/4 140/82/4 144/84/4 -f 141/89/4 144/84/4 145/90/4 -f 140/82/1 138/81/1 142/85/1 -f 140/82/1 142/85/1 144/84/1 -f 146/91/2 148/92/2 143/93/2 -f 146/91/2 143/93/2 139/80/2 -f 147/94/2 146/91/2 139/80/2 -f 147/94/2 139/80/2 141/83/2 -f 149/95/2 147/94/2 141/83/2 -f 149/95/2 141/83/2 145/96/2 -f 148/92/2 149/95/2 145/96/2 -f 148/92/2 145/96/2 143/93/2 -f 192/79/3 150/77/3 148/97/3 -f 192/79/3 148/97/3 146/87/3 -f 193/72/6 192/79/6 146/87/6 -f 193/72/6 146/87/6 147/98/6 -f 151/73/4 193/72/4 147/98/4 -f 151/73/4 147/98/4 149/99/4 -f 150/77/5 151/76/5 149/100/5 -f 150/77/5 149/100/5 148/97/5 -f 153/80/1 152/81/1 154/82/1 -f 153/80/1 154/82/1 155/83/1 -f 158/84/2 156/85/2 157/64/2 -f 158/84/2 157/64/2 159/86/2 -f 156/85/3 152/81/3 153/87/3 -f 156/85/3 153/87/3 157/88/3 -f 155/89/4 154/82/4 158/84/4 -f 155/89/4 158/84/4 159/90/4 -f 154/82/5 152/81/5 156/85/5 -f 154/82/5 156/85/5 158/84/5 -f 160/91/6 162/92/6 157/93/6 -f 160/91/6 157/93/6 153/80/6 -f 161/94/6 160/91/6 153/80/6 -f 161/94/6 153/80/6 155/83/6 -f 163/95/6 161/94/6 155/83/6 -f 163/95/6 155/83/6 159/96/6 -f 162/92/6 163/95/6 159/96/6 -f 162/92/6 159/96/6 157/93/6 -f 150/79/3 176/77/3 162/97/3 -f 150/79/3 162/97/3 160/87/3 -f 151/72/1 150/79/1 160/87/1 -f 151/72/1 160/87/1 161/98/1 -f 177/73/4 151/72/4 161/98/4 -f 177/73/4 161/98/4 163/99/4 -f 176/77/2 177/76/2 163/100/2 -f 176/77/2 163/100/2 162/97/2 -f 165/80/5 164/81/5 166/82/5 -f 165/80/5 166/82/5 167/83/5 -f 170/84/6 168/85/6 169/64/6 -f 170/84/6 169/64/6 171/86/6 -f 168/85/3 164/81/3 165/87/3 -f 168/85/3 165/87/3 169/88/3 -f 167/89/4 166/82/4 170/84/4 -f 167/89/4 170/84/4 171/90/4 -f 166/82/2 164/81/2 168/85/2 -f 166/82/2 168/85/2 170/84/2 -f 172/91/1 174/92/1 169/93/1 -f 172/91/1 169/93/1 165/80/1 -f 173/94/1 172/91/1 165/80/1 -f 173/94/1 165/80/1 167/83/1 -f 175/95/1 173/94/1 167/83/1 -f 175/95/1 167/83/1 171/96/1 -f 174/92/1 175/95/1 171/96/1 -f 174/92/1 171/96/1 169/93/1 -f 176/79/3 190/77/3 174/97/3 -f 176/79/3 174/97/3 172/87/3 -f 177/72/5 176/79/5 172/87/5 -f 177/72/5 172/87/5 173/98/5 -f 191/73/4 177/72/4 173/98/4 -f 191/73/4 173/98/4 175/99/4 -f 190/77/6 191/76/6 175/100/6 -f 190/77/6 175/100/6 174/97/6 -f 179/80/2 178/81/2 180/82/2 -f 179/80/2 180/82/2 181/83/2 -f 184/84/1 182/85/1 183/64/1 -f 184/84/1 183/64/1 185/86/1 -f 182/85/3 178/81/3 179/87/3 -f 182/85/3 179/87/3 183/88/3 -f 181/89/4 180/82/4 184/84/4 -f 181/89/4 184/84/4 185/90/4 -f 180/82/6 178/81/6 182/85/6 -f 180/82/6 182/85/6 184/84/6 -f 186/91/5 188/92/5 183/93/5 -f 186/91/5 183/93/5 179/80/5 -f 187/94/5 186/91/5 179/80/5 -f 187/94/5 179/80/5 181/83/5 -f 189/95/5 187/94/5 181/83/5 -f 189/95/5 181/83/5 185/96/5 -f 188/92/5 189/95/5 185/96/5 -f 188/92/5 185/96/5 183/93/5 -f 190/79/3 192/77/3 188/97/3 -f 190/79/3 188/97/3 186/87/3 -f 191/72/2 190/79/2 186/87/2 -f 191/72/2 186/87/2 187/98/2 -f 193/73/4 191/72/4 187/98/4 -f 193/73/4 187/98/4 189/99/4 -f 192/77/1 193/76/1 189/100/1 -f 192/77/1 189/100/1 188/97/1 -f 177/73/4 191/99/4 193/101/4 -f 177/73/4 193/101/4 151/102/4 -f 198/103/15 194/104/15 195/105/15 -f 198/103/15 195/105/15 199/21/15 -f 197/106/16 196/104/16 200/103/16 -f 197/106/16 200/103/16 201/107/16 -f 196/108/2 194/109/2 198/110/2 -f 196/108/2 198/110/2 200/111/2 -f 199/112/1 195/111/1 197/24/1 -f 199/112/1 197/24/1 201/21/1 -f 206/105/17 202/21/17 203/103/17 -f 206/105/17 203/103/17 207/104/17 -f 205/103/18 204/107/18 208/106/18 -f 205/103/18 208/106/18 209/104/18 -f 204/21/2 202/112/2 206/111/2 -f 204/21/2 206/111/2 208/24/2 -f 207/109/1 203/110/1 205/111/1 -f 207/109/1 205/111/1 209/108/1 -f 214/103/15 210/104/15 211/105/15 -f 214/103/15 211/105/15 215/21/15 -f 213/106/16 212/104/16 216/103/16 -f 213/106/16 216/103/16 217/107/16 -f 212/108/2 210/109/2 214/110/2 -f 212/108/2 214/110/2 216/111/2 -f 215/112/1 211/111/1 213/24/1 -f 215/112/1 213/24/1 217/21/1 -f 222/105/17 218/21/17 219/103/17 -f 222/105/17 219/103/17 223/104/17 -f 221/103/18 220/107/18 224/106/18 -f 221/103/18 224/106/18 225/104/18 -f 220/21/2 218/112/2 222/111/2 -f 220/21/2 222/111/2 224/24/2 -f 223/109/1 219/110/1 221/111/1 -f 223/109/1 221/111/1 225/108/1 -f 230/103/15 226/104/15 227/105/15 -f 230/103/15 227/105/15 231/21/15 -f 229/106/16 228/104/16 232/103/16 -f 229/106/16 232/103/16 233/107/16 -f 228/108/2 226/109/2 230/110/2 -f 228/108/2 230/110/2 232/111/2 -f 231/112/1 227/111/1 229/24/1 -f 231/112/1 229/24/1 233/21/1 -f 238/105/17 234/21/17 235/103/17 -f 238/105/17 235/103/17 239/104/17 -f 237/103/18 236/107/18 240/106/18 -f 237/103/18 240/106/18 241/104/18 -f 236/21/2 234/112/2 238/111/2 -f 236/21/2 238/111/2 240/24/2 -f 239/109/1 235/110/1 237/111/1 -f 239/109/1 237/111/1 241/108/1 -f 246/103/17 242/104/17 243/105/17 -f 246/103/17 243/105/17 247/21/17 -f 245/106/18 244/104/18 248/103/18 -f 245/106/18 248/103/18 249/107/18 -f 244/108/1 242/109/1 246/110/1 -f 244/108/1 246/110/1 248/111/1 -f 247/112/2 243/111/2 245/24/2 -f 247/112/2 245/24/2 249/21/2 -f 254/105/15 250/21/15 251/103/15 -f 254/105/15 251/103/15 255/104/15 -f 253/103/16 252/107/16 256/106/16 -f 253/103/16 256/106/16 257/104/16 -f 252/21/1 250/112/1 254/111/1 -f 252/21/1 254/111/1 256/24/1 -f 255/109/2 251/110/2 253/111/2 -f 255/109/2 253/111/2 257/108/2 -f 262/103/17 258/104/17 259/105/17 -f 262/103/17 259/105/17 263/21/17 -f 261/106/18 260/104/18 264/103/18 -f 261/106/18 264/103/18 265/107/18 -f 260/108/1 258/109/1 262/110/1 -f 260/108/1 262/110/1 264/111/1 -f 263/112/2 259/111/2 261/24/2 -f 263/112/2 261/24/2 265/21/2 -f 270/105/15 266/21/15 267/103/15 -f 270/105/15 267/103/15 271/104/15 -f 269/103/16 268/107/16 272/106/16 -f 269/103/16 272/106/16 273/104/16 -f 268/21/1 266/112/1 270/111/1 -f 268/21/1 270/111/1 272/24/1 -f 271/109/2 267/110/2 269/111/2 -f 271/109/2 269/111/2 273/108/2 -f 278/103/17 274/104/17 275/105/17 -f 278/103/17 275/105/17 279/21/17 -f 277/106/18 276/104/18 280/103/18 -f 277/106/18 280/103/18 281/107/18 -f 276/108/1 274/109/1 278/110/1 -f 276/108/1 278/110/1 280/111/1 -f 279/112/2 275/111/2 277/24/2 -f 279/112/2 277/24/2 281/21/2 -f 286/105/15 282/21/15 283/103/15 -f 286/105/15 283/103/15 287/104/15 -f 285/103/16 284/107/16 288/106/16 -f 285/103/16 288/106/16 289/104/16 -f 284/21/1 282/112/1 286/111/1 -f 284/21/1 286/111/1 288/24/1 -f 287/109/2 283/110/2 285/111/2 -f 287/109/2 285/111/2 289/108/2 -f 294/103/19 290/104/19 291/105/19 -f 294/103/19 291/105/19 295/21/19 -f 293/106/20 292/104/20 296/103/20 -f 293/106/20 296/103/20 297/107/20 -f 292/108/6 290/109/6 294/110/6 -f 292/108/6 294/110/6 296/111/6 -f 295/112/5 291/111/5 293/24/5 -f 295/112/5 293/24/5 297/21/5 -f 302/105/21 298/21/21 299/103/21 -f 302/105/21 299/103/21 303/104/21 -f 301/103/22 300/107/22 304/106/22 -f 301/103/22 304/106/22 305/104/22 -f 300/21/6 298/112/6 302/111/6 -f 300/21/6 302/111/6 304/24/6 -f 303/109/5 299/110/5 301/111/5 -f 303/109/5 301/111/5 305/108/5 -f 310/103/19 306/104/19 307/105/19 -f 310/103/19 307/105/19 311/21/19 -f 309/106/20 308/104/20 312/103/20 -f 309/106/20 312/103/20 313/107/20 -f 308/108/6 306/109/6 310/110/6 -f 308/108/6 310/110/6 312/111/6 -f 311/112/5 307/111/5 309/24/5 -f 311/112/5 309/24/5 313/21/5 -f 318/105/21 314/21/21 315/103/21 -f 318/105/21 315/103/21 319/104/21 -f 317/103/22 316/107/22 320/106/22 -f 317/103/22 320/106/22 321/104/22 -f 316/21/6 314/112/6 318/111/6 -f 316/21/6 318/111/6 320/24/6 -f 319/109/5 315/110/5 317/111/5 -f 319/109/5 317/111/5 321/108/5 -f 326/103/19 322/104/19 323/105/19 -f 326/103/19 323/105/19 327/21/19 -f 325/106/20 324/104/20 328/103/20 -f 325/106/20 328/103/20 329/107/20 -f 324/108/6 322/109/6 326/110/6 -f 324/108/6 326/110/6 328/111/6 -f 327/112/5 323/111/5 325/24/5 -f 327/112/5 325/24/5 329/21/5 -f 334/105/21 330/21/21 331/103/21 -f 334/105/21 331/103/21 335/104/21 -f 333/103/22 332/107/22 336/106/22 -f 333/103/22 336/106/22 337/104/22 -f 332/21/6 330/112/6 334/111/6 -f 332/21/6 334/111/6 336/24/6 -f 335/109/5 331/110/5 333/111/5 -f 335/109/5 333/111/5 337/108/5 -f 342/103/21 338/104/21 339/105/21 -f 342/103/21 339/105/21 343/21/21 -f 341/106/22 340/104/22 344/103/22 -f 341/106/22 344/103/22 345/107/22 -f 340/108/5 338/109/5 342/110/5 -f 340/108/5 342/110/5 344/111/5 -f 343/112/6 339/111/6 341/24/6 -f 343/112/6 341/24/6 345/21/6 -f 350/105/19 346/21/19 347/103/19 -f 350/105/19 347/103/19 351/104/19 -f 349/103/20 348/107/20 352/106/20 -f 349/103/20 352/106/20 353/104/20 -f 348/21/5 346/112/5 350/111/5 -f 348/21/5 350/111/5 352/24/5 -f 351/109/6 347/110/6 349/111/6 -f 351/109/6 349/111/6 353/108/6 -f 358/103/21 354/104/21 355/105/21 -f 358/103/21 355/105/21 359/21/21 -f 357/106/22 356/104/22 360/103/22 -f 357/106/22 360/103/22 361/107/22 -f 356/108/5 354/109/5 358/110/5 -f 356/108/5 358/110/5 360/111/5 -f 359/112/6 355/111/6 357/24/6 -f 359/112/6 357/24/6 361/21/6 -f 366/105/19 362/21/19 363/103/19 -f 366/105/19 363/103/19 367/104/19 -f 365/103/20 364/107/20 368/106/20 -f 365/103/20 368/106/20 369/104/20 -f 364/21/5 362/112/5 366/111/5 -f 364/21/5 366/111/5 368/24/5 -f 367/109/6 363/110/6 365/111/6 -f 367/109/6 365/111/6 369/108/6 -f 374/103/21 370/104/21 371/105/21 -f 374/103/21 371/105/21 375/21/21 -f 373/106/22 372/104/22 376/103/22 -f 373/106/22 376/103/22 377/107/22 -f 372/108/5 370/109/5 374/110/5 -f 372/108/5 374/110/5 376/111/5 -f 375/112/6 371/111/6 373/24/6 -f 375/112/6 373/24/6 377/21/6 -f 382/105/19 378/21/19 379/103/19 -f 382/105/19 379/103/19 383/104/19 -f 381/103/20 380/107/20 384/106/20 -f 381/103/20 384/106/20 385/104/20 -f 380/21/5 378/112/5 382/111/5 -f 380/21/5 382/111/5 384/24/5 -f 383/109/6 379/110/6 381/111/6 -f 383/109/6 381/111/6 385/108/6 +usemtl m_bf2d8415-1140-6651-2d4b-44fa28d981c3 +f 174/107/11 173/108/11 175/109/11 +f 174/107/11 175/109/11 176/110/11 +f 179/111/12 177/112/12 178/113/12 +f 179/111/12 178/113/12 180/114/12 +f 177/115/13 173/116/13 174/117/13 +f 177/115/13 174/117/13 178/113/13 +f 176/118/14 175/119/14 179/120/14 +f 176/118/14 179/120/14 180/114/14 +f 175/109/15 173/108/15 177/112/15 +f 175/109/15 177/112/15 179/111/15 +f 178/113/16 174/117/16 176/118/16 +f 178/113/16 176/118/16 180/114/16 +f 182/107/11 181/108/11 183/109/11 +f 182/107/11 183/109/11 184/110/11 +f 187/111/12 185/112/12 186/113/12 +f 187/111/12 186/113/12 188/114/12 +f 185/115/13 181/116/13 182/117/13 +f 185/115/13 182/117/13 186/113/13 +f 184/118/14 183/119/14 187/120/14 +f 184/118/14 187/120/14 188/114/14 +f 183/109/15 181/108/15 185/112/15 +f 183/109/15 185/112/15 187/111/15 +f 186/113/16 182/117/16 184/118/16 +f 186/113/16 184/118/16 188/114/16 +f 190/107/11 189/108/11 191/109/11 +f 190/107/11 191/109/11 192/110/11 +f 195/111/12 193/112/12 194/113/12 +f 195/111/12 194/113/12 196/114/12 +f 193/115/13 189/116/13 190/117/13 +f 193/115/13 190/117/13 194/113/13 +f 192/118/14 191/119/14 195/120/14 +f 192/118/14 195/120/14 196/114/14 +f 191/109/15 189/108/15 193/112/15 +f 191/109/15 193/112/15 195/111/15 +f 194/113/16 190/117/16 192/118/16 +f 194/113/16 192/118/16 196/114/16 +f 198/107/11 197/108/11 199/109/11 +f 198/107/11 199/109/11 200/110/11 +f 203/111/12 201/112/12 202/113/12 +f 203/111/12 202/113/12 204/114/12 +f 201/115/13 197/116/13 198/117/13 +f 201/115/13 198/117/13 202/113/13 +f 200/118/14 199/119/14 203/120/14 +f 200/118/14 203/120/14 204/114/14 +f 199/109/15 197/108/15 201/112/15 +f 199/109/15 201/112/15 203/111/15 +f 202/113/16 198/117/16 200/118/16 +f 202/113/16 200/118/16 204/114/16 +f 206/121/11 205/122/11 207/123/11 +f 206/121/11 207/123/11 208/124/11 +f 211/125/12 209/126/12 210/127/12 +f 211/125/12 210/127/12 212/128/12 +f 209/129/13 205/122/13 206/121/13 +f 209/129/13 206/121/13 210/130/13 +f 208/124/14 207/123/14 211/131/14 +f 208/124/14 211/131/14 212/132/14 +f 207/133/15 205/134/15 209/126/15 +f 207/133/15 209/126/15 211/125/15 +f 210/127/16 206/121/16 208/124/16 +f 210/127/16 208/124/16 212/128/16 +f 213/135/11 214/136/11 215/137/11 +f 216/135/12 217/136/12 218/137/12 +f 219/138/14 220/139/14 221/140/14 +f 222/141/11 223/140/11 224/142/11 +f 225/141/12 219/140/12 226/142/12 +f 226/141/16 221/140/16 222/142/16 +f 224/141/15 227/140/15 225/142/15 +f 220/143/11 228/144/11 229/139/11 +f 223/138/14 230/139/14 227/140/14 +f 221/138/14 229/139/14 223/140/14 +f 227/138/14 231/139/14 219/140/14 +f 217/145/14 232/146/14 233/136/14 +f 230/143/12 234/144/12 231/139/12 +f 231/143/16 235/144/16 220/139/16 +f 229/143/15 236/144/15 230/139/15 +f 218/135/16 233/136/16 213/137/16 +f 215/135/15 237/136/15 216/137/15 +f 232/147/11 238/148/11 239/146/11 +f 214/145/14 240/146/14 237/136/14 +f 233/145/14 239/146/14 214/136/14 +f 237/145/14 241/146/14 217/136/14 +f 240/147/12 242/148/12 241/146/12 +f 241/147/16 243/148/16 232/146/16 +f 239/147/15 244/148/15 240/146/15 +f 215/135/13 236/144/13 228/149/13 +f 213/135/13 228/144/13 235/149/13 +f 218/135/13 235/144/13 234/149/13 +f 216/135/13 234/144/13 236/149/13 +f 245/150/11 246/151/11 247/152/11 +f 248/150/12 249/151/12 250/152/12 +f 250/150/16 251/151/16 245/152/16 +f 247/150/15 252/151/15 248/152/15 +f 247/150/13 244/148/13 238/153/13 +f 245/150/13 238/148/13 243/153/13 +f 250/150/13 243/148/13 242/153/13 +f 248/150/13 242/148/13 244/153/13 +f 252/154/13 253/155/13 249/151/13 +f 254/156/11 255/157/11 256/155/11 +f 249/154/13 254/155/13 251/151/13 +f 246/154/13 257/155/13 252/151/13 +f 251/154/13 256/155/13 246/151/13 +f 258/158/13 259/159/13 260/160/13 +f 257/156/12 260/157/12 253/155/12 +f 253/156/16 259/157/16 254/155/16 +f 256/156/15 258/157/15 257/155/15 +f 213/135/11 233/145/11 214/136/11 +f 216/135/12 237/145/12 217/136/12 +f 219/138/14 231/143/14 220/139/14 +f 222/141/11 221/138/11 223/140/11 +f 225/141/12 227/138/12 219/140/12 +f 226/141/16 219/138/16 221/140/16 +f 224/141/15 223/138/15 227/140/15 +f 220/143/11 235/149/11 228/144/11 +f 223/138/14 229/143/14 230/139/14 +f 221/138/14 220/143/14 229/139/14 +f 227/138/14 230/143/14 231/139/14 +f 217/145/14 241/147/14 232/146/14 +f 230/143/12 236/149/12 234/144/12 +f 231/143/16 234/149/16 235/144/16 +f 229/143/15 228/149/15 236/144/15 +f 218/135/16 217/145/16 233/136/16 +f 215/135/15 214/145/15 237/136/15 +f 232/147/11 243/153/11 238/148/11 +f 214/145/14 239/147/14 240/146/14 +f 233/145/14 232/147/14 239/146/14 +f 237/145/14 240/147/14 241/146/14 +f 240/147/12 244/153/12 242/148/12 +f 241/147/16 242/153/16 243/148/16 +f 239/147/15 238/153/15 244/148/15 +f 215/135/13 216/137/13 236/144/13 +f 213/135/13 215/137/13 228/144/13 +f 218/135/13 213/137/13 235/144/13 +f 216/135/13 218/137/13 234/144/13 +f 245/150/11 251/154/11 246/151/11 +f 248/150/12 252/154/12 249/151/12 +f 250/150/16 249/154/16 251/151/16 +f 247/150/15 246/154/15 252/151/15 +f 247/150/13 248/152/13 244/148/13 +f 245/150/13 247/152/13 238/148/13 +f 250/150/13 245/152/13 243/148/13 +f 248/150/13 250/152/13 242/148/13 +f 252/154/13 257/156/13 253/155/13 +f 254/156/11 259/159/11 255/157/11 +f 249/154/13 253/156/13 254/155/13 +f 246/154/13 256/156/13 257/155/13 +f 251/154/13 254/156/13 256/155/13 +f 258/158/13 255/157/13 259/159/13 +f 257/156/12 258/159/12 260/157/12 +f 253/156/16 260/159/16 259/157/16 +f 256/156/15 255/159/15 258/157/15 +f 262/161/11 261/162/11 263/163/11 +f 262/161/11 263/163/11 264/164/11 +f 267/165/12 265/166/12 266/167/12 +f 267/165/12 266/167/12 268/168/12 +f 263/169/15 261/170/15 265/166/15 +f 263/169/15 265/166/15 267/165/15 +f 266/167/16 262/161/16 264/164/16 +f 266/167/16 264/164/16 268/168/16 +f 290/171/17 292/172/17 265/166/17 +f 290/171/17 265/166/17 261/170/17 +f 269/173/18 290/174/18 261/162/18 +f 269/173/18 261/162/18 262/161/18 +f 270/175/19 269/173/19 262/161/19 +f 270/175/19 262/161/19 266/167/19 +f 292/172/20 270/175/20 266/167/20 +f 292/172/20 266/167/20 265/166/20 +f 272/161/11 271/162/11 273/163/11 +f 272/161/11 273/163/11 274/164/11 +f 277/165/12 275/166/12 276/167/12 +f 277/165/12 276/167/12 278/168/12 +f 273/169/15 271/170/15 275/166/15 +f 273/169/15 275/166/15 277/165/15 +f 276/167/16 272/161/16 274/164/16 +f 276/167/16 274/164/16 278/168/16 +f 279/171/17 290/172/17 275/166/17 +f 279/171/17 275/166/17 271/170/17 +f 280/173/21 279/174/21 271/162/21 +f 280/173/21 271/162/21 272/161/21 +f 269/175/19 280/173/19 272/161/19 +f 269/175/19 272/161/19 276/167/19 +f 290/172/22 269/175/22 276/167/22 +f 290/172/22 276/167/22 275/166/22 +f 282/161/11 281/162/11 283/163/11 +f 282/161/11 283/163/11 284/164/11 +f 287/165/12 285/166/12 286/167/12 +f 287/165/12 286/167/12 288/168/12 +f 283/169/15 281/170/15 285/166/15 +f 283/169/15 285/166/15 287/165/15 +f 286/167/16 282/161/16 284/164/16 +f 286/167/16 284/164/16 288/168/16 +f 289/171/23 291/172/23 285/166/23 +f 289/171/23 285/166/23 281/170/23 +f 290/173/18 289/174/18 281/162/18 +f 290/173/18 281/162/18 282/161/18 +f 292/175/24 290/173/24 282/161/24 +f 292/175/24 282/161/24 286/167/24 +f 291/172/20 292/175/20 286/167/20 +f 291/172/20 286/167/20 285/166/20 +f 294/161/11 293/162/11 295/163/11 +f 294/161/11 295/163/11 296/164/11 +f 299/165/12 297/166/12 298/167/12 +f 299/165/12 298/167/12 300/168/12 +f 295/169/15 293/170/15 297/166/15 +f 295/169/15 297/166/15 299/165/15 +f 298/167/16 294/161/16 296/164/16 +f 298/167/16 296/164/16 300/168/16 +f 301/171/23 289/172/23 297/166/23 +f 301/171/23 297/166/23 293/170/23 +f 279/173/21 301/174/21 293/162/21 +f 279/173/21 293/162/21 294/161/21 +f 290/175/24 279/173/24 294/161/24 +f 290/175/24 294/161/24 298/167/24 +f 289/172/22 290/175/22 298/167/22 +f 289/172/22 298/167/22 297/166/22 +f 303/176/15 305/177/15 304/178/15 +f 303/176/15 304/178/15 302/179/15 +f 309/180/11 303/181/11 302/182/11 +f 309/180/11 302/182/11 307/183/11 +f 305/177/12 308/184/12 306/185/12 +f 305/177/12 306/185/12 304/178/12 +f 308/184/16 309/180/16 307/183/16 +f 308/184/16 307/183/16 306/185/16 +f 311/186/16 310/187/16 312/188/16 +f 311/186/16 312/188/16 313/189/16 +f 316/190/15 314/191/15 315/170/15 +f 316/190/15 315/170/15 317/192/15 +f 314/191/13 310/187/13 311/193/13 +f 314/191/13 311/193/13 315/194/13 +f 313/195/14 312/188/14 316/190/14 +f 313/195/14 316/190/14 317/196/14 +f 312/188/11 310/187/11 314/191/11 +f 312/188/11 314/191/11 316/190/11 +f 318/197/12 320/198/12 315/199/12 +f 318/197/12 315/199/12 311/186/12 +f 319/200/12 318/197/12 311/186/12 +f 319/200/12 311/186/12 313/189/12 +f 321/201/12 319/200/12 313/189/12 +f 321/201/12 313/189/12 317/202/12 +f 320/198/12 321/201/12 317/202/12 +f 320/198/12 317/202/12 315/199/12 +f 364/185/13 322/183/13 320/203/13 +f 364/185/13 320/203/13 318/193/13 +f 365/178/16 364/185/16 318/193/16 +f 365/178/16 318/193/16 319/204/16 +f 323/179/14 365/178/14 319/204/14 +f 323/179/14 319/204/14 321/205/14 +f 322/183/15 323/182/15 321/206/15 +f 322/183/15 321/206/15 320/203/15 +f 325/186/11 324/187/11 326/188/11 +f 325/186/11 326/188/11 327/189/11 +f 330/190/12 328/191/12 329/170/12 +f 330/190/12 329/170/12 331/192/12 +f 328/191/13 324/187/13 325/193/13 +f 328/191/13 325/193/13 329/194/13 +f 327/195/14 326/188/14 330/190/14 +f 327/195/14 330/190/14 331/196/14 +f 326/188/15 324/187/15 328/191/15 +f 326/188/15 328/191/15 330/190/15 +f 332/197/16 334/198/16 329/199/16 +f 332/197/16 329/199/16 325/186/16 +f 333/200/16 332/197/16 325/186/16 +f 333/200/16 325/186/16 327/189/16 +f 335/201/16 333/200/16 327/189/16 +f 335/201/16 327/189/16 331/202/16 +f 334/198/16 335/201/16 331/202/16 +f 334/198/16 331/202/16 329/199/16 +f 322/185/13 348/183/13 334/203/13 +f 322/185/13 334/203/13 332/193/13 +f 323/178/11 322/185/11 332/193/11 +f 323/178/11 332/193/11 333/204/11 +f 349/179/14 323/178/14 333/204/14 +f 349/179/14 333/204/14 335/205/14 +f 348/183/12 349/182/12 335/206/12 +f 348/183/12 335/206/12 334/203/12 +f 337/186/15 336/187/15 338/188/15 +f 337/186/15 338/188/15 339/189/15 +f 342/190/16 340/191/16 341/170/16 +f 342/190/16 341/170/16 343/192/16 +f 340/191/13 336/187/13 337/193/13 +f 340/191/13 337/193/13 341/194/13 +f 339/195/14 338/188/14 342/190/14 +f 339/195/14 342/190/14 343/196/14 +f 338/188/12 336/187/12 340/191/12 +f 338/188/12 340/191/12 342/190/12 +f 344/197/11 346/198/11 341/199/11 +f 344/197/11 341/199/11 337/186/11 +f 345/200/11 344/197/11 337/186/11 +f 345/200/11 337/186/11 339/189/11 +f 347/201/11 345/200/11 339/189/11 +f 347/201/11 339/189/11 343/202/11 +f 346/198/11 347/201/11 343/202/11 +f 346/198/11 343/202/11 341/199/11 +f 348/185/13 362/183/13 346/203/13 +f 348/185/13 346/203/13 344/193/13 +f 349/178/15 348/185/15 344/193/15 +f 349/178/15 344/193/15 345/204/15 +f 363/179/14 349/178/14 345/204/14 +f 363/179/14 345/204/14 347/205/14 +f 362/183/16 363/182/16 347/206/16 +f 362/183/16 347/206/16 346/203/16 +f 351/186/12 350/187/12 352/188/12 +f 351/186/12 352/188/12 353/189/12 +f 356/190/11 354/191/11 355/170/11 +f 356/190/11 355/170/11 357/192/11 +f 354/191/13 350/187/13 351/193/13 +f 354/191/13 351/193/13 355/194/13 +f 353/195/14 352/188/14 356/190/14 +f 353/195/14 356/190/14 357/196/14 +f 352/188/16 350/187/16 354/191/16 +f 352/188/16 354/191/16 356/190/16 +f 358/197/15 360/198/15 355/199/15 +f 358/197/15 355/199/15 351/186/15 +f 359/200/15 358/197/15 351/186/15 +f 359/200/15 351/186/15 353/189/15 +f 361/201/15 359/200/15 353/189/15 +f 361/201/15 353/189/15 357/202/15 +f 360/198/15 361/201/15 357/202/15 +f 360/198/15 357/202/15 355/199/15 +f 362/185/13 364/183/13 360/203/13 +f 362/185/13 360/203/13 358/193/13 +f 363/178/12 362/185/12 358/193/12 +f 363/178/12 358/193/12 359/204/12 +f 365/179/14 363/178/14 359/204/14 +f 365/179/14 359/204/14 361/205/14 +f 364/183/11 365/182/11 361/206/11 +f 364/183/11 361/206/11 360/203/11 +f 349/179/14 363/205/14 365/207/14 +f 349/179/14 365/207/14 323/208/14 +f 370/209/25 366/210/25 367/211/25 +f 370/209/25 367/211/25 371/127/25 +f 369/212/26 368/210/26 372/209/26 +f 369/212/26 372/209/26 373/213/26 +f 368/214/12 366/215/12 370/216/12 +f 368/214/12 370/216/12 372/217/12 +f 371/218/11 367/217/11 369/130/11 +f 371/218/11 369/130/11 373/127/11 +f 378/211/27 374/127/27 375/209/27 +f 378/211/27 375/209/27 379/210/27 +f 377/209/28 376/213/28 380/212/28 +f 377/209/28 380/212/28 381/210/28 +f 376/127/12 374/218/12 378/217/12 +f 376/127/12 378/217/12 380/130/12 +f 379/215/11 375/216/11 377/217/11 +f 379/215/11 377/217/11 381/214/11 +f 386/209/25 382/210/25 383/211/25 +f 386/209/25 383/211/25 387/127/25 +f 385/212/26 384/210/26 388/209/26 +f 385/212/26 388/209/26 389/213/26 +f 384/214/12 382/215/12 386/216/12 +f 384/214/12 386/216/12 388/217/12 +f 387/218/11 383/217/11 385/130/11 +f 387/218/11 385/130/11 389/127/11 +f 394/211/27 390/127/27 391/209/27 +f 394/211/27 391/209/27 395/210/27 +f 393/209/28 392/213/28 396/212/28 +f 393/209/28 396/212/28 397/210/28 +f 392/127/12 390/218/12 394/217/12 +f 392/127/12 394/217/12 396/130/12 +f 395/215/11 391/216/11 393/217/11 +f 395/215/11 393/217/11 397/214/11 +f 402/209/25 398/210/25 399/211/25 +f 402/209/25 399/211/25 403/127/25 +f 401/212/26 400/210/26 404/209/26 +f 401/212/26 404/209/26 405/213/26 +f 400/214/12 398/215/12 402/216/12 +f 400/214/12 402/216/12 404/217/12 +f 403/218/11 399/217/11 401/130/11 +f 403/218/11 401/130/11 405/127/11 +f 410/211/27 406/127/27 407/209/27 +f 410/211/27 407/209/27 411/210/27 +f 409/209/28 408/213/28 412/212/28 +f 409/209/28 412/212/28 413/210/28 +f 408/127/12 406/218/12 410/217/12 +f 408/127/12 410/217/12 412/130/12 +f 411/215/11 407/216/11 409/217/11 +f 411/215/11 409/217/11 413/214/11 +f 418/209/27 414/210/27 415/211/27 +f 418/209/27 415/211/27 419/127/27 +f 417/212/28 416/210/28 420/209/28 +f 417/212/28 420/209/28 421/213/28 +f 416/214/11 414/215/11 418/216/11 +f 416/214/11 418/216/11 420/217/11 +f 419/218/12 415/217/12 417/130/12 +f 419/218/12 417/130/12 421/127/12 +f 426/211/25 422/127/25 423/209/25 +f 426/211/25 423/209/25 427/210/25 +f 425/209/26 424/213/26 428/212/26 +f 425/209/26 428/212/26 429/210/26 +f 424/127/11 422/218/11 426/217/11 +f 424/127/11 426/217/11 428/130/11 +f 427/215/12 423/216/12 425/217/12 +f 427/215/12 425/217/12 429/214/12 +f 434/209/27 430/210/27 431/211/27 +f 434/209/27 431/211/27 435/127/27 +f 433/212/28 432/210/28 436/209/28 +f 433/212/28 436/209/28 437/213/28 +f 432/214/11 430/215/11 434/216/11 +f 432/214/11 434/216/11 436/217/11 +f 435/218/12 431/217/12 433/130/12 +f 435/218/12 433/130/12 437/127/12 +f 442/211/25 438/127/25 439/209/25 +f 442/211/25 439/209/25 443/210/25 +f 441/209/26 440/213/26 444/212/26 +f 441/209/26 444/212/26 445/210/26 +f 440/127/11 438/218/11 442/217/11 +f 440/127/11 442/217/11 444/130/11 +f 443/215/12 439/216/12 441/217/12 +f 443/215/12 441/217/12 445/214/12 +f 450/209/27 446/210/27 447/211/27 +f 450/209/27 447/211/27 451/127/27 +f 449/212/28 448/210/28 452/209/28 +f 449/212/28 452/209/28 453/213/28 +f 448/214/11 446/215/11 450/216/11 +f 448/214/11 450/216/11 452/217/11 +f 451/218/12 447/217/12 449/130/12 +f 451/218/12 449/130/12 453/127/12 +f 458/211/25 454/127/25 455/209/25 +f 458/211/25 455/209/25 459/210/25 +f 457/209/26 456/213/26 460/212/26 +f 457/209/26 460/212/26 461/210/26 +f 456/127/11 454/218/11 458/217/11 +f 456/127/11 458/217/11 460/130/11 +f 459/215/12 455/216/12 457/217/12 +f 459/215/12 457/217/12 461/214/12 +f 466/209/29 462/210/29 463/211/29 +f 466/209/29 463/211/29 467/127/29 +f 465/212/30 464/210/30 468/209/30 +f 465/212/30 468/209/30 469/213/30 +f 464/214/16 462/215/16 466/216/16 +f 464/214/16 466/216/16 468/217/16 +f 467/218/15 463/217/15 465/130/15 +f 467/218/15 465/130/15 469/127/15 +f 474/211/31 470/127/31 471/209/31 +f 474/211/31 471/209/31 475/210/31 +f 473/209/32 472/213/32 476/212/32 +f 473/209/32 476/212/32 477/210/32 +f 472/127/16 470/218/16 474/217/16 +f 472/127/16 474/217/16 476/130/16 +f 475/215/15 471/216/15 473/217/15 +f 475/215/15 473/217/15 477/214/15 +f 482/209/29 478/210/29 479/211/29 +f 482/209/29 479/211/29 483/127/29 +f 481/212/30 480/210/30 484/209/30 +f 481/212/30 484/209/30 485/213/30 +f 480/214/16 478/215/16 482/216/16 +f 480/214/16 482/216/16 484/217/16 +f 483/218/15 479/217/15 481/130/15 +f 483/218/15 481/130/15 485/127/15 +f 490/211/31 486/127/31 487/209/31 +f 490/211/31 487/209/31 491/210/31 +f 489/209/32 488/213/32 492/212/32 +f 489/209/32 492/212/32 493/210/32 +f 488/127/16 486/218/16 490/217/16 +f 488/127/16 490/217/16 492/130/16 +f 491/215/15 487/216/15 489/217/15 +f 491/215/15 489/217/15 493/214/15 +f 498/209/29 494/210/29 495/211/29 +f 498/209/29 495/211/29 499/127/29 +f 497/212/30 496/210/30 500/209/30 +f 497/212/30 500/209/30 501/213/30 +f 496/214/16 494/215/16 498/216/16 +f 496/214/16 498/216/16 500/217/16 +f 499/218/15 495/217/15 497/130/15 +f 499/218/15 497/130/15 501/127/15 +f 506/211/31 502/127/31 503/209/31 +f 506/211/31 503/209/31 507/210/31 +f 505/209/32 504/213/32 508/212/32 +f 505/209/32 508/212/32 509/210/32 +f 504/127/16 502/218/16 506/217/16 +f 504/127/16 506/217/16 508/130/16 +f 507/215/15 503/216/15 505/217/15 +f 507/215/15 505/217/15 509/214/15 +f 514/209/31 510/210/31 511/211/31 +f 514/209/31 511/211/31 515/127/31 +f 513/212/32 512/210/32 516/209/32 +f 513/212/32 516/209/32 517/213/32 +f 512/214/15 510/215/15 514/216/15 +f 512/214/15 514/216/15 516/217/15 +f 515/218/16 511/217/16 513/130/16 +f 515/218/16 513/130/16 517/127/16 +f 522/211/29 518/127/29 519/209/29 +f 522/211/29 519/209/29 523/210/29 +f 521/209/30 520/213/30 524/212/30 +f 521/209/30 524/212/30 525/210/30 +f 520/127/15 518/218/15 522/217/15 +f 520/127/15 522/217/15 524/130/15 +f 523/215/16 519/216/16 521/217/16 +f 523/215/16 521/217/16 525/214/16 +f 530/209/31 526/210/31 527/211/31 +f 530/209/31 527/211/31 531/127/31 +f 529/212/32 528/210/32 532/209/32 +f 529/212/32 532/209/32 533/213/32 +f 528/214/15 526/215/15 530/216/15 +f 528/214/15 530/216/15 532/217/15 +f 531/218/16 527/217/16 529/130/16 +f 531/218/16 529/130/16 533/127/16 +f 538/211/29 534/127/29 535/209/29 +f 538/211/29 535/209/29 539/210/29 +f 537/209/30 536/213/30 540/212/30 +f 537/209/30 540/212/30 541/210/30 +f 536/127/15 534/218/15 538/217/15 +f 536/127/15 538/217/15 540/130/15 +f 539/215/16 535/216/16 537/217/16 +f 539/215/16 537/217/16 541/214/16 +f 546/209/31 542/210/31 543/211/31 +f 546/209/31 543/211/31 547/127/31 +f 545/212/32 544/210/32 548/209/32 +f 545/212/32 548/209/32 549/213/32 +f 544/214/15 542/215/15 546/216/15 +f 544/214/15 546/216/15 548/217/15 +f 547/218/16 543/217/16 545/130/16 +f 547/218/16 545/130/16 549/127/16 +f 554/211/29 550/127/29 551/209/29 +f 554/211/29 551/209/29 555/210/29 +f 553/209/30 552/213/30 556/212/30 +f 553/209/30 556/212/30 557/210/30 +f 552/127/15 550/218/15 554/217/15 +f 552/127/15 554/217/15 556/130/15 +f 555/215/16 551/216/16 553/217/16 +f 555/215/16 553/217/16 557/214/16 diff --git a/src/main/resources/assets/hbm/textures/models/network/pylon.png b/src/main/resources/assets/hbm/textures/models/network/pylon.png index a0b3d5728dbe6440b3e8205d84decc6f2843dfea..541ce0da0cf25dc04219b59161ef0009b3a979d0 100644 GIT binary patch literal 2507 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 From 26982be0f212997929d99562156cca0b50cbaa91 Mon Sep 17 00:00:00 2001 From: TheVitya2127 Date: Fri, 24 Jul 2026 10:00:06 +0400 Subject: [PATCH 41/50] Is that all? --- .../hbm/render/tileentity/RenderPylon.java | 2 - .../assets/hbm/models/network/pylon.obj | 1213 +++++++++-------- .../textures/models/network/pylon_steel.png | Bin 1872 -> 1537 bytes 3 files changed, 656 insertions(+), 559 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index b33b7a002..7d295cec7 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -34,8 +34,6 @@ public class RenderPylon extends RenderPylonBase implements IItemRendererProvide else ResourceManager.pylon.renderPart("Pylon_steel"); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glPopMatrix(); GL11.glPushMatrix(); diff --git a/src/main/resources/assets/hbm/models/network/pylon.obj b/src/main/resources/assets/hbm/models/network/pylon.obj index db258f3fd..b3f0eedef 100644 --- a/src/main/resources/assets/hbm/models/network/pylon.obj +++ b/src/main/resources/assets/hbm/models/network/pylon.obj @@ -614,14 +614,14 @@ v 0.187500 0.500000 -0.187500 v 0.187500 0.500000 -0.500000 v 0.187500 -0.000000 -0.187500 v 0.187500 -0.000000 -0.500000 -v 0.250000 5.000000 0.250000 -v 0.250000 5.000000 -0.250000 -v 0.250000 4.000000 0.250000 -v 0.250000 4.000000 -0.250000 -v -0.250000 5.000000 0.250000 -v -0.250000 5.000000 -0.250000 -v -0.250000 4.000000 0.250000 -v -0.250000 4.000000 -0.250000 +v 0.250000 4.937500 0.250000 +v 0.250000 4.937500 -0.250000 +v 0.250000 4.687500 0.250000 +v 0.250000 4.687500 -0.250000 +v -0.250000 4.937500 0.250000 +v -0.250000 4.937500 -0.250000 +v -0.250000 4.687500 0.250000 +v -0.250000 4.687500 -0.250000 v 0.125000 5.187500 -0.125000 v 0.125000 5.250000 0.125000 v 0.125000 5.187500 0.125000 @@ -631,11 +631,7 @@ v -0.125000 5.187500 -0.125000 v -0.125000 5.062500 -0.125000 v 0.187500 5.062500 -0.187500 v 0.125000 5.062500 -0.125000 -v 0.125000 5.000000 -0.125000 v 0.125000 5.062500 0.125000 -v 0.125000 5.000000 0.125000 -v -0.125000 5.000000 0.125000 -v -0.125000 5.000000 -0.125000 v -0.125000 5.062500 0.125000 v 0.187500 5.187500 0.187500 v 0.187500 5.062500 0.187500 @@ -678,8 +674,8 @@ v -0.437500 1.000000 -0.250000 v -0.437500 1.000000 -0.437500 v -0.437500 0.500000 -0.250000 v -0.437500 0.500000 -0.437500 -v 0.000000 4.000000 -0.187500 -v -0.187500 4.000000 -0.187500 +v 0.000000 4.687500 -0.187500 +v -0.187500 4.687500 -0.187500 v 0.437500 1.000000 -0.250000 v 0.437500 1.000000 -0.437500 v 0.437500 0.500000 -0.250000 @@ -688,8 +684,8 @@ v 0.250000 1.000000 -0.250000 v 0.250000 1.000000 -0.437500 v 0.250000 0.500000 -0.250000 v 0.250000 0.500000 -0.437500 -v 0.187500 4.000000 -0.000000 -v 0.187500 4.000000 -0.187500 +v 0.187500 4.687500 -0.000000 +v 0.187500 4.687500 -0.187500 v -0.250000 1.000000 0.437500 v -0.250000 1.000000 0.250000 v -0.250000 0.500000 0.437500 @@ -698,10 +694,10 @@ v -0.437500 1.000000 0.437500 v -0.437500 1.000000 0.250000 v -0.437500 0.500000 0.437500 v -0.437500 0.500000 0.250000 -v 0.000000 4.000000 0.187500 -v 0.000000 4.000000 -0.000000 -v -0.187500 4.000000 0.187500 -v -0.187500 4.000000 -0.000000 +v 0.000000 4.687500 0.187500 +v 0.000000 4.687500 -0.000000 +v -0.187500 4.687500 0.187500 +v -0.187500 4.687500 -0.000000 v 0.437500 1.000000 0.437500 v 0.437500 1.000000 0.250000 v 0.437500 0.500000 0.437500 @@ -710,7 +706,7 @@ v 0.250000 1.000000 0.437500 v 0.250000 1.000000 0.250000 v 0.250000 0.500000 0.437500 v 0.250000 0.500000 0.250000 -v 0.187500 4.000000 0.187500 +v 0.187500 4.687500 0.187500 v 0.125000 0.625000 0.125000 v 0.125000 4.750000 0.125000 v -0.125000 0.625000 0.125000 @@ -903,22 +899,6 @@ v 0.250000 1.187500 0.343750 v 0.250000 1.187500 0.406250 v 0.250000 1.062500 0.343750 v 0.250000 1.062500 0.406250 -v -0.250000 2.687500 0.156250 -v -0.250000 2.687500 0.218750 -v -0.250000 2.562500 0.156250 -v -0.250000 2.562500 0.218750 -v 0.250000 2.187500 0.156250 -v 0.250000 2.187500 0.218750 -v 0.250000 2.062500 0.156250 -v 0.250000 2.062500 0.218750 -v -0.250000 2.187500 0.218750 -v -0.250000 2.187500 0.281250 -v -0.250000 2.062500 0.218750 -v -0.250000 2.062500 0.281250 -v 0.250000 2.687500 0.218750 -v 0.250000 2.687500 0.281250 -v 0.250000 2.562500 0.218750 -v 0.250000 2.562500 0.281250 v 0.250000 1.937500 -0.218750 v 0.250000 1.937500 -0.281250 v 0.250000 1.812500 -0.218750 @@ -967,20 +947,76 @@ v -0.250000 2.687500 -0.218750 v -0.250000 2.687500 -0.281250 v -0.250000 2.562500 -0.218750 v -0.250000 2.562500 -0.281250 +v -0.187500 4.937500 0.187500 +v 0.187500 4.937500 0.187500 +v 0.187500 4.937500 -0.187500 +v -0.187500 4.937500 -0.187500 +v -0.125000 5.000000 0.125000 +v 0.125000 5.000000 0.125000 +v 0.125000 5.000000 -0.125000 +v -0.125000 5.000000 -0.125000 +v -0.250000 2.687500 0.156250 +v -0.250000 2.687500 0.218750 +v -0.250000 2.562500 0.156250 +v -0.250000 2.562500 0.218750 +v 0.250000 2.187500 0.156250 +v 0.250000 2.187500 0.218750 +v 0.250000 2.062500 0.156250 +v 0.250000 2.062500 0.218750 +v -0.250000 2.187500 0.218750 +v -0.250000 2.187500 0.281250 +v -0.250000 2.062500 0.218750 +v -0.250000 2.062500 0.281250 +v 0.250000 2.687500 0.218750 +v 0.250000 2.687500 0.281250 +v 0.250000 2.562500 0.218750 +v 0.250000 2.562500 0.281250 +v -0.281250 2.937500 0.125000 +v -0.156250 2.937500 0.125000 +v -0.281250 2.812500 0.125000 +v -0.156250 2.812500 0.125000 +v -0.281250 2.937500 -0.125000 +v -0.156250 2.937500 -0.125000 +v -0.281250 2.812500 -0.125000 +v -0.156250 2.812500 -0.125000 +v 0.281250 2.937500 -0.125000 +v 0.156250 2.937500 -0.125000 +v 0.281250 2.812500 -0.125000 +v 0.156250 2.812500 -0.125000 +v 0.281250 2.937500 0.125000 +v 0.156250 2.937500 0.125000 +v 0.281250 2.812500 0.125000 +v 0.156250 2.812500 0.125000 +v -0.125000 2.937500 -0.281250 +v -0.125000 2.937500 -0.156250 +v -0.125000 2.812500 -0.281250 +v -0.125000 2.812500 -0.156250 +v 0.125000 2.937500 -0.281250 +v 0.125000 2.937500 -0.156250 +v 0.125000 2.812500 -0.281250 +v 0.125000 2.812500 -0.156250 +v 0.125000 2.937500 0.281250 +v 0.125000 2.937500 0.156250 +v 0.125000 2.812500 0.281250 +v 0.125000 2.812500 0.156250 +v -0.125000 2.937500 0.281250 +v -0.125000 2.937500 0.156250 +v -0.125000 2.812500 0.281250 +v -0.125000 2.812500 0.156250 vn 1.0000 -0.0000 -0.0000 vn -1.0000 -0.0000 -0.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.0000 -1.0000 -vn -0.0000 -0.0830 0.9965 -vn 0.9965 -0.0830 -0.0000 -vn -0.0000 0.0830 -0.9965 -vn -0.9965 0.0830 -0.0000 -vn 0.9965 0.0830 -0.0000 -vn -0.9965 -0.0830 -0.0000 -vn -0.0000 0.0830 0.9965 -vn -0.0000 -0.0830 -0.9965 +vn -0.0000 -0.0676 0.9977 +vn 0.9977 -0.0676 -0.0000 +vn -0.0000 0.0676 -0.9977 +vn -0.9977 0.0676 -0.0000 +vn 0.9977 0.0676 -0.0000 +vn -0.9977 -0.0676 -0.0000 +vn -0.0000 0.0676 0.9977 +vn -0.0000 -0.0676 -0.9977 vn -0.0000 0.7071 -0.7071 vn -0.0000 -0.7071 0.7071 vn -0.0000 0.7071 0.7071 @@ -1003,46 +1039,44 @@ vt 0.533333 0.162500 vt 0.533333 0.062500 vt 0.533333 0.000000 vt 0.616667 0.000000 -vt 0.600000 0.525000 -vt 0.466667 0.525000 +vt 0.600000 0.375000 +vt 0.466667 0.375000 vt 0.466667 0.325000 vt 0.600000 0.325000 vt 0.866667 0.325000 -vt 0.866667 0.525000 -vt 0.733333 0.525000 +vt 0.866667 0.375000 +vt 0.733333 0.375000 vt 0.733333 0.325000 -vt 0.466667 0.625000 -vt 0.600000 0.625000 vt 0.466667 0.225000 vt 0.600000 0.225000 vt 1.000000 0.325000 -vt 1.000000 0.525000 -vt 0.566667 0.687500 -vt 0.500000 0.700000 -vt 0.500000 0.687500 -vt 0.566667 0.637500 -vt 0.483333 0.650000 -vt 0.500000 0.637500 -vt 0.566667 0.625000 -vt 0.500000 0.625000 -vt 0.583333 0.650000 -vt 0.483333 0.675000 -vt 0.566667 0.700000 -vt 0.483333 0.712500 -vt 0.583333 0.712500 -vt 0.483333 0.737500 -vt 0.583333 0.675000 -vt 0.566667 0.750000 -vt 0.500000 0.762500 -vt 0.500000 0.750000 -vt 0.583333 0.737500 -vt 0.566667 0.762500 -vt 0.516667 0.775000 -vt 0.550000 0.775000 -vt 0.516667 0.800000 -vt 0.516667 0.825000 -vt 0.550000 0.800000 -vt 0.550000 0.825000 +vt 1.000000 0.375000 +vt 0.566667 0.537500 +vt 0.500000 0.550000 +vt 0.500000 0.537500 +vt 0.566667 0.487500 +vt 0.483333 0.500000 +vt 0.500000 0.487500 +vt 0.566667 0.475000 +vt 0.500000 0.475000 +vt 0.583333 0.500000 +vt 0.483333 0.525000 +vt 0.566667 0.550000 +vt 0.483333 0.562500 +vt 0.583333 0.562500 +vt 0.483333 0.587500 +vt 0.583333 0.525000 +vt 0.566667 0.600000 +vt 0.500000 0.612500 +vt 0.500000 0.600000 +vt 0.583333 0.587500 +vt 0.566667 0.612500 +vt 0.516667 0.625000 +vt 0.550000 0.625000 +vt 0.516667 0.650000 +vt 0.516667 0.675000 +vt 0.550000 0.650000 +vt 0.550000 0.675000 vt 0.050000 0.100000 vt 0.000000 0.100000 vt 0.000000 0.000000 @@ -1053,11 +1087,11 @@ vt 0.100000 0.100000 vt 0.100000 0.000000 vt 0.200000 0.000000 vt 0.200000 0.100000 -vt 0.200000 0.700000 -vt 0.150000 0.700000 -vt 0.050000 0.700000 -vt 0.000000 0.700000 -vt 0.100000 0.700000 +vt 0.200000 0.837500 +vt 0.150000 0.837500 +vt 0.050000 0.837500 +vt 0.000000 0.837500 +vt 0.100000 0.837500 vt 0.466667 1.000000 vt 0.400000 1.000000 vt 0.400000 0.175000 @@ -1091,16 +1125,35 @@ vt 0.466667 0.125000 vt 0.200000 0.125000 vt 0.533333 0.125000 vt 0.533333 0.175000 +vt 0.750000 0.375000 vt 0.750000 0.525000 -vt 0.750000 0.675000 -vt 0.733333 0.675000 -vt 0.766667 0.675000 +vt 0.733333 0.525000 vt 0.766667 0.525000 -vt 0.733333 0.750000 -vt 0.733333 0.775000 -vt 0.600000 0.675000 -vt 0.600000 0.650000 -vt 0.733333 0.550000 +vt 0.766667 0.375000 +vt 0.733333 0.600000 +vt 0.733333 0.625000 +vt 0.600000 0.525000 +vt 0.600000 0.500000 +vt 0.733333 0.400000 +vt 0.600000 0.475000 +vt 0.483333 0.387500 +vt 0.483333 0.462500 +vt 0.466667 0.475000 +vt 0.583333 0.387500 +vt 0.583333 0.462500 +vt 0.500000 0.400000 +vt 0.500000 0.450000 +vt 0.566667 0.400000 +vt 0.566667 0.450000 +vt 0.766667 0.450000 +vt 0.833333 0.450000 +vt 0.833333 0.475000 +vt 0.766667 0.475000 +vt 0.833333 0.400000 +vt 0.833333 0.425000 +vt 0.766667 0.425000 +vt 0.766667 0.400000 +vt 0.833333 0.375000 s 1 usemtl m_bf2d8415-1140-6651-2d4b-44fa28d981c3 f 174/107/11 173/108/11 175/109/11 @@ -1155,471 +1208,517 @@ f 206/121/11 205/122/11 207/123/11 f 206/121/11 207/123/11 208/124/11 f 211/125/12 209/126/12 210/127/12 f 211/125/12 210/127/12 212/128/12 -f 209/129/13 205/122/13 206/121/13 -f 209/129/13 206/121/13 210/130/13 -f 208/124/14 207/123/14 211/131/14 -f 208/124/14 211/131/14 212/132/14 -f 207/133/15 205/134/15 209/126/15 -f 207/133/15 209/126/15 211/125/15 +f 208/124/14 207/123/14 211/129/14 +f 208/124/14 211/129/14 212/130/14 +f 207/131/15 205/132/15 209/126/15 +f 207/131/15 209/126/15 211/125/15 f 210/127/16 206/121/16 208/124/16 f 210/127/16 208/124/16 212/128/16 -f 213/135/11 214/136/11 215/137/11 -f 216/135/12 217/136/12 218/137/12 -f 219/138/14 220/139/14 221/140/14 -f 222/141/11 223/140/11 224/142/11 -f 225/141/12 219/140/12 226/142/12 -f 226/141/16 221/140/16 222/142/16 -f 224/141/15 227/140/15 225/142/15 -f 220/143/11 228/144/11 229/139/11 -f 223/138/14 230/139/14 227/140/14 -f 221/138/14 229/139/14 223/140/14 -f 227/138/14 231/139/14 219/140/14 -f 217/145/14 232/146/14 233/136/14 -f 230/143/12 234/144/12 231/139/12 -f 231/143/16 235/144/16 220/139/16 -f 229/143/15 236/144/15 230/139/15 -f 218/135/16 233/136/16 213/137/16 -f 215/135/15 237/136/15 216/137/15 -f 232/147/11 238/148/11 239/146/11 -f 214/145/14 240/146/14 237/136/14 -f 233/145/14 239/146/14 214/136/14 -f 237/145/14 241/146/14 217/136/14 -f 240/147/12 242/148/12 241/146/12 -f 241/147/16 243/148/16 232/146/16 -f 239/147/15 244/148/15 240/146/15 -f 215/135/13 236/144/13 228/149/13 -f 213/135/13 228/144/13 235/149/13 -f 218/135/13 235/144/13 234/149/13 -f 216/135/13 234/144/13 236/149/13 -f 245/150/11 246/151/11 247/152/11 -f 248/150/12 249/151/12 250/152/12 -f 250/150/16 251/151/16 245/152/16 -f 247/150/15 252/151/15 248/152/15 -f 247/150/13 244/148/13 238/153/13 -f 245/150/13 238/148/13 243/153/13 -f 250/150/13 243/148/13 242/153/13 -f 248/150/13 242/148/13 244/153/13 -f 252/154/13 253/155/13 249/151/13 -f 254/156/11 255/157/11 256/155/11 -f 249/154/13 254/155/13 251/151/13 -f 246/154/13 257/155/13 252/151/13 -f 251/154/13 256/155/13 246/151/13 -f 258/158/13 259/159/13 260/160/13 -f 257/156/12 260/157/12 253/155/12 -f 253/156/16 259/157/16 254/155/16 -f 256/156/15 258/157/15 257/155/15 -f 213/135/11 233/145/11 214/136/11 -f 216/135/12 237/145/12 217/136/12 -f 219/138/14 231/143/14 220/139/14 -f 222/141/11 221/138/11 223/140/11 -f 225/141/12 227/138/12 219/140/12 -f 226/141/16 219/138/16 221/140/16 -f 224/141/15 223/138/15 227/140/15 -f 220/143/11 235/149/11 228/144/11 -f 223/138/14 229/143/14 230/139/14 -f 221/138/14 220/143/14 229/139/14 -f 227/138/14 230/143/14 231/139/14 -f 217/145/14 241/147/14 232/146/14 -f 230/143/12 236/149/12 234/144/12 -f 231/143/16 234/149/16 235/144/16 -f 229/143/15 228/149/15 236/144/15 -f 218/135/16 217/145/16 233/136/16 -f 215/135/15 214/145/15 237/136/15 -f 232/147/11 243/153/11 238/148/11 -f 214/145/14 239/147/14 240/146/14 -f 233/145/14 232/147/14 239/146/14 -f 237/145/14 240/147/14 241/146/14 -f 240/147/12 244/153/12 242/148/12 -f 241/147/16 242/153/16 243/148/16 -f 239/147/15 238/153/15 244/148/15 -f 215/135/13 216/137/13 236/144/13 -f 213/135/13 215/137/13 228/144/13 -f 218/135/13 213/137/13 235/144/13 -f 216/135/13 218/137/13 234/144/13 -f 245/150/11 251/154/11 246/151/11 -f 248/150/12 252/154/12 249/151/12 -f 250/150/16 249/154/16 251/151/16 -f 247/150/15 246/154/15 252/151/15 -f 247/150/13 248/152/13 244/148/13 -f 245/150/13 247/152/13 238/148/13 -f 250/150/13 245/152/13 243/148/13 -f 248/150/13 250/152/13 242/148/13 -f 252/154/13 257/156/13 253/155/13 -f 254/156/11 259/159/11 255/157/11 -f 249/154/13 253/156/13 254/155/13 -f 246/154/13 256/156/13 257/155/13 -f 251/154/13 254/156/13 256/155/13 -f 258/158/13 255/157/13 259/159/13 -f 257/156/12 258/159/12 260/157/12 -f 253/156/16 260/159/16 259/157/16 -f 256/156/15 255/159/15 258/157/15 -f 262/161/11 261/162/11 263/163/11 -f 262/161/11 263/163/11 264/164/11 -f 267/165/12 265/166/12 266/167/12 -f 267/165/12 266/167/12 268/168/12 -f 263/169/15 261/170/15 265/166/15 -f 263/169/15 265/166/15 267/165/15 -f 266/167/16 262/161/16 264/164/16 -f 266/167/16 264/164/16 268/168/16 -f 290/171/17 292/172/17 265/166/17 -f 290/171/17 265/166/17 261/170/17 -f 269/173/18 290/174/18 261/162/18 -f 269/173/18 261/162/18 262/161/18 -f 270/175/19 269/173/19 262/161/19 -f 270/175/19 262/161/19 266/167/19 -f 292/172/20 270/175/20 266/167/20 -f 292/172/20 266/167/20 265/166/20 -f 272/161/11 271/162/11 273/163/11 -f 272/161/11 273/163/11 274/164/11 -f 277/165/12 275/166/12 276/167/12 -f 277/165/12 276/167/12 278/168/12 -f 273/169/15 271/170/15 275/166/15 -f 273/169/15 275/166/15 277/165/15 -f 276/167/16 272/161/16 274/164/16 -f 276/167/16 274/164/16 278/168/16 -f 279/171/17 290/172/17 275/166/17 -f 279/171/17 275/166/17 271/170/17 -f 280/173/21 279/174/21 271/162/21 -f 280/173/21 271/162/21 272/161/21 -f 269/175/19 280/173/19 272/161/19 -f 269/175/19 272/161/19 276/167/19 -f 290/172/22 269/175/22 276/167/22 -f 290/172/22 276/167/22 275/166/22 -f 282/161/11 281/162/11 283/163/11 -f 282/161/11 283/163/11 284/164/11 -f 287/165/12 285/166/12 286/167/12 -f 287/165/12 286/167/12 288/168/12 -f 283/169/15 281/170/15 285/166/15 -f 283/169/15 285/166/15 287/165/15 -f 286/167/16 282/161/16 284/164/16 -f 286/167/16 284/164/16 288/168/16 -f 289/171/23 291/172/23 285/166/23 -f 289/171/23 285/166/23 281/170/23 -f 290/173/18 289/174/18 281/162/18 -f 290/173/18 281/162/18 282/161/18 -f 292/175/24 290/173/24 282/161/24 -f 292/175/24 282/161/24 286/167/24 -f 291/172/20 292/175/20 286/167/20 -f 291/172/20 286/167/20 285/166/20 -f 294/161/11 293/162/11 295/163/11 -f 294/161/11 295/163/11 296/164/11 -f 299/165/12 297/166/12 298/167/12 -f 299/165/12 298/167/12 300/168/12 -f 295/169/15 293/170/15 297/166/15 -f 295/169/15 297/166/15 299/165/15 -f 298/167/16 294/161/16 296/164/16 -f 298/167/16 296/164/16 300/168/16 -f 301/171/23 289/172/23 297/166/23 -f 301/171/23 297/166/23 293/170/23 -f 279/173/21 301/174/21 293/162/21 -f 279/173/21 293/162/21 294/161/21 -f 290/175/24 279/173/24 294/161/24 -f 290/175/24 294/161/24 298/167/24 -f 289/172/22 290/175/22 298/167/22 -f 289/172/22 298/167/22 297/166/22 -f 303/176/15 305/177/15 304/178/15 -f 303/176/15 304/178/15 302/179/15 -f 309/180/11 303/181/11 302/182/11 -f 309/180/11 302/182/11 307/183/11 -f 305/177/12 308/184/12 306/185/12 -f 305/177/12 306/185/12 304/178/12 -f 308/184/16 309/180/16 307/183/16 -f 308/184/16 307/183/16 306/185/16 -f 311/186/16 310/187/16 312/188/16 -f 311/186/16 312/188/16 313/189/16 -f 316/190/15 314/191/15 315/170/15 -f 316/190/15 315/170/15 317/192/15 -f 314/191/13 310/187/13 311/193/13 -f 314/191/13 311/193/13 315/194/13 -f 313/195/14 312/188/14 316/190/14 -f 313/195/14 316/190/14 317/196/14 -f 312/188/11 310/187/11 314/191/11 -f 312/188/11 314/191/11 316/190/11 -f 318/197/12 320/198/12 315/199/12 -f 318/197/12 315/199/12 311/186/12 -f 319/200/12 318/197/12 311/186/12 -f 319/200/12 311/186/12 313/189/12 -f 321/201/12 319/200/12 313/189/12 -f 321/201/12 313/189/12 317/202/12 -f 320/198/12 321/201/12 317/202/12 -f 320/198/12 317/202/12 315/199/12 -f 364/185/13 322/183/13 320/203/13 -f 364/185/13 320/203/13 318/193/13 -f 365/178/16 364/185/16 318/193/16 -f 365/178/16 318/193/16 319/204/16 -f 323/179/14 365/178/14 319/204/14 -f 323/179/14 319/204/14 321/205/14 -f 322/183/15 323/182/15 321/206/15 -f 322/183/15 321/206/15 320/203/15 -f 325/186/11 324/187/11 326/188/11 -f 325/186/11 326/188/11 327/189/11 -f 330/190/12 328/191/12 329/170/12 -f 330/190/12 329/170/12 331/192/12 -f 328/191/13 324/187/13 325/193/13 -f 328/191/13 325/193/13 329/194/13 -f 327/195/14 326/188/14 330/190/14 -f 327/195/14 330/190/14 331/196/14 -f 326/188/15 324/187/15 328/191/15 -f 326/188/15 328/191/15 330/190/15 -f 332/197/16 334/198/16 329/199/16 -f 332/197/16 329/199/16 325/186/16 -f 333/200/16 332/197/16 325/186/16 -f 333/200/16 325/186/16 327/189/16 -f 335/201/16 333/200/16 327/189/16 -f 335/201/16 327/189/16 331/202/16 -f 334/198/16 335/201/16 331/202/16 -f 334/198/16 331/202/16 329/199/16 -f 322/185/13 348/183/13 334/203/13 -f 322/185/13 334/203/13 332/193/13 -f 323/178/11 322/185/11 332/193/11 -f 323/178/11 332/193/11 333/204/11 -f 349/179/14 323/178/14 333/204/14 -f 349/179/14 333/204/14 335/205/14 -f 348/183/12 349/182/12 335/206/12 -f 348/183/12 335/206/12 334/203/12 -f 337/186/15 336/187/15 338/188/15 -f 337/186/15 338/188/15 339/189/15 -f 342/190/16 340/191/16 341/170/16 -f 342/190/16 341/170/16 343/192/16 -f 340/191/13 336/187/13 337/193/13 -f 340/191/13 337/193/13 341/194/13 -f 339/195/14 338/188/14 342/190/14 -f 339/195/14 342/190/14 343/196/14 -f 338/188/12 336/187/12 340/191/12 -f 338/188/12 340/191/12 342/190/12 -f 344/197/11 346/198/11 341/199/11 -f 344/197/11 341/199/11 337/186/11 -f 345/200/11 344/197/11 337/186/11 -f 345/200/11 337/186/11 339/189/11 -f 347/201/11 345/200/11 339/189/11 -f 347/201/11 339/189/11 343/202/11 -f 346/198/11 347/201/11 343/202/11 -f 346/198/11 343/202/11 341/199/11 -f 348/185/13 362/183/13 346/203/13 -f 348/185/13 346/203/13 344/193/13 -f 349/178/15 348/185/15 344/193/15 -f 349/178/15 344/193/15 345/204/15 -f 363/179/14 349/178/14 345/204/14 -f 363/179/14 345/204/14 347/205/14 -f 362/183/16 363/182/16 347/206/16 -f 362/183/16 347/206/16 346/203/16 -f 351/186/12 350/187/12 352/188/12 -f 351/186/12 352/188/12 353/189/12 -f 356/190/11 354/191/11 355/170/11 -f 356/190/11 355/170/11 357/192/11 -f 354/191/13 350/187/13 351/193/13 -f 354/191/13 351/193/13 355/194/13 -f 353/195/14 352/188/14 356/190/14 -f 353/195/14 356/190/14 357/196/14 -f 352/188/16 350/187/16 354/191/16 -f 352/188/16 354/191/16 356/190/16 -f 358/197/15 360/198/15 355/199/15 -f 358/197/15 355/199/15 351/186/15 -f 359/200/15 358/197/15 351/186/15 -f 359/200/15 351/186/15 353/189/15 -f 361/201/15 359/200/15 353/189/15 -f 361/201/15 353/189/15 357/202/15 -f 360/198/15 361/201/15 357/202/15 -f 360/198/15 357/202/15 355/199/15 -f 362/185/13 364/183/13 360/203/13 -f 362/185/13 360/203/13 358/193/13 -f 363/178/12 362/185/12 358/193/12 -f 363/178/12 358/193/12 359/204/12 -f 365/179/14 363/178/14 359/204/14 -f 365/179/14 359/204/14 361/205/14 -f 364/183/11 365/182/11 361/206/11 -f 364/183/11 361/206/11 360/203/11 -f 349/179/14 363/205/14 365/207/14 -f 349/179/14 365/207/14 323/208/14 -f 370/209/25 366/210/25 367/211/25 -f 370/209/25 367/211/25 371/127/25 -f 369/212/26 368/210/26 372/209/26 -f 369/212/26 372/209/26 373/213/26 -f 368/214/12 366/215/12 370/216/12 -f 368/214/12 370/216/12 372/217/12 -f 371/218/11 367/217/11 369/130/11 -f 371/218/11 369/130/11 373/127/11 -f 378/211/27 374/127/27 375/209/27 -f 378/211/27 375/209/27 379/210/27 -f 377/209/28 376/213/28 380/212/28 -f 377/209/28 380/212/28 381/210/28 -f 376/127/12 374/218/12 378/217/12 -f 376/127/12 378/217/12 380/130/12 -f 379/215/11 375/216/11 377/217/11 -f 379/215/11 377/217/11 381/214/11 -f 386/209/25 382/210/25 383/211/25 -f 386/209/25 383/211/25 387/127/25 -f 385/212/26 384/210/26 388/209/26 -f 385/212/26 388/209/26 389/213/26 -f 384/214/12 382/215/12 386/216/12 -f 384/214/12 386/216/12 388/217/12 -f 387/218/11 383/217/11 385/130/11 -f 387/218/11 385/130/11 389/127/11 -f 394/211/27 390/127/27 391/209/27 -f 394/211/27 391/209/27 395/210/27 -f 393/209/28 392/213/28 396/212/28 -f 393/209/28 396/212/28 397/210/28 -f 392/127/12 390/218/12 394/217/12 -f 392/127/12 394/217/12 396/130/12 -f 395/215/11 391/216/11 393/217/11 -f 395/215/11 393/217/11 397/214/11 -f 402/209/25 398/210/25 399/211/25 -f 402/209/25 399/211/25 403/127/25 -f 401/212/26 400/210/26 404/209/26 -f 401/212/26 404/209/26 405/213/26 -f 400/214/12 398/215/12 402/216/12 -f 400/214/12 402/216/12 404/217/12 -f 403/218/11 399/217/11 401/130/11 -f 403/218/11 401/130/11 405/127/11 -f 410/211/27 406/127/27 407/209/27 -f 410/211/27 407/209/27 411/210/27 -f 409/209/28 408/213/28 412/212/28 -f 409/209/28 412/212/28 413/210/28 -f 408/127/12 406/218/12 410/217/12 -f 408/127/12 410/217/12 412/130/12 -f 411/215/11 407/216/11 409/217/11 -f 411/215/11 409/217/11 413/214/11 -f 418/209/27 414/210/27 415/211/27 -f 418/209/27 415/211/27 419/127/27 -f 417/212/28 416/210/28 420/209/28 -f 417/212/28 420/209/28 421/213/28 -f 416/214/11 414/215/11 418/216/11 -f 416/214/11 418/216/11 420/217/11 -f 419/218/12 415/217/12 417/130/12 -f 419/218/12 417/130/12 421/127/12 -f 426/211/25 422/127/25 423/209/25 -f 426/211/25 423/209/25 427/210/25 -f 425/209/26 424/213/26 428/212/26 -f 425/209/26 428/212/26 429/210/26 -f 424/127/11 422/218/11 426/217/11 -f 424/127/11 426/217/11 428/130/11 -f 427/215/12 423/216/12 425/217/12 -f 427/215/12 425/217/12 429/214/12 -f 434/209/27 430/210/27 431/211/27 -f 434/209/27 431/211/27 435/127/27 -f 433/212/28 432/210/28 436/209/28 -f 433/212/28 436/209/28 437/213/28 -f 432/214/11 430/215/11 434/216/11 -f 432/214/11 434/216/11 436/217/11 -f 435/218/12 431/217/12 433/130/12 -f 435/218/12 433/130/12 437/127/12 -f 442/211/25 438/127/25 439/209/25 -f 442/211/25 439/209/25 443/210/25 -f 441/209/26 440/213/26 444/212/26 -f 441/209/26 444/212/26 445/210/26 -f 440/127/11 438/218/11 442/217/11 -f 440/127/11 442/217/11 444/130/11 -f 443/215/12 439/216/12 441/217/12 -f 443/215/12 441/217/12 445/214/12 -f 450/209/27 446/210/27 447/211/27 -f 450/209/27 447/211/27 451/127/27 -f 449/212/28 448/210/28 452/209/28 -f 449/212/28 452/209/28 453/213/28 -f 448/214/11 446/215/11 450/216/11 -f 448/214/11 450/216/11 452/217/11 -f 451/218/12 447/217/12 449/130/12 -f 451/218/12 449/130/12 453/127/12 -f 458/211/25 454/127/25 455/209/25 -f 458/211/25 455/209/25 459/210/25 -f 457/209/26 456/213/26 460/212/26 -f 457/209/26 460/212/26 461/210/26 -f 456/127/11 454/218/11 458/217/11 -f 456/127/11 458/217/11 460/130/11 -f 459/215/12 455/216/12 457/217/12 -f 459/215/12 457/217/12 461/214/12 -f 466/209/29 462/210/29 463/211/29 -f 466/209/29 463/211/29 467/127/29 -f 465/212/30 464/210/30 468/209/30 -f 465/212/30 468/209/30 469/213/30 -f 464/214/16 462/215/16 466/216/16 -f 464/214/16 466/216/16 468/217/16 -f 467/218/15 463/217/15 465/130/15 -f 467/218/15 465/130/15 469/127/15 -f 474/211/31 470/127/31 471/209/31 -f 474/211/31 471/209/31 475/210/31 -f 473/209/32 472/213/32 476/212/32 -f 473/209/32 476/212/32 477/210/32 -f 472/127/16 470/218/16 474/217/16 -f 472/127/16 474/217/16 476/130/16 -f 475/215/15 471/216/15 473/217/15 -f 475/215/15 473/217/15 477/214/15 -f 482/209/29 478/210/29 479/211/29 -f 482/209/29 479/211/29 483/127/29 -f 481/212/30 480/210/30 484/209/30 -f 481/212/30 484/209/30 485/213/30 -f 480/214/16 478/215/16 482/216/16 -f 480/214/16 482/216/16 484/217/16 -f 483/218/15 479/217/15 481/130/15 -f 483/218/15 481/130/15 485/127/15 -f 490/211/31 486/127/31 487/209/31 -f 490/211/31 487/209/31 491/210/31 -f 489/209/32 488/213/32 492/212/32 -f 489/209/32 492/212/32 493/210/32 -f 488/127/16 486/218/16 490/217/16 -f 488/127/16 490/217/16 492/130/16 -f 491/215/15 487/216/15 489/217/15 -f 491/215/15 489/217/15 493/214/15 -f 498/209/29 494/210/29 495/211/29 -f 498/209/29 495/211/29 499/127/29 -f 497/212/30 496/210/30 500/209/30 -f 497/212/30 500/209/30 501/213/30 -f 496/214/16 494/215/16 498/216/16 -f 496/214/16 498/216/16 500/217/16 -f 499/218/15 495/217/15 497/130/15 -f 499/218/15 497/130/15 501/127/15 -f 506/211/31 502/127/31 503/209/31 -f 506/211/31 503/209/31 507/210/31 -f 505/209/32 504/213/32 508/212/32 -f 505/209/32 508/212/32 509/210/32 -f 504/127/16 502/218/16 506/217/16 -f 504/127/16 506/217/16 508/130/16 -f 507/215/15 503/216/15 505/217/15 -f 507/215/15 505/217/15 509/214/15 -f 514/209/31 510/210/31 511/211/31 -f 514/209/31 511/211/31 515/127/31 -f 513/212/32 512/210/32 516/209/32 -f 513/212/32 516/209/32 517/213/32 -f 512/214/15 510/215/15 514/216/15 -f 512/214/15 514/216/15 516/217/15 -f 515/218/16 511/217/16 513/130/16 -f 515/218/16 513/130/16 517/127/16 -f 522/211/29 518/127/29 519/209/29 -f 522/211/29 519/209/29 523/210/29 -f 521/209/30 520/213/30 524/212/30 -f 521/209/30 524/212/30 525/210/30 -f 520/127/15 518/218/15 522/217/15 -f 520/127/15 522/217/15 524/130/15 -f 523/215/16 519/216/16 521/217/16 -f 523/215/16 521/217/16 525/214/16 -f 530/209/31 526/210/31 527/211/31 -f 530/209/31 527/211/31 531/127/31 -f 529/212/32 528/210/32 532/209/32 -f 529/212/32 532/209/32 533/213/32 -f 528/214/15 526/215/15 530/216/15 -f 528/214/15 530/216/15 532/217/15 -f 531/218/16 527/217/16 529/130/16 -f 531/218/16 529/130/16 533/127/16 -f 538/211/29 534/127/29 535/209/29 -f 538/211/29 535/209/29 539/210/29 -f 537/209/30 536/213/30 540/212/30 -f 537/209/30 540/212/30 541/210/30 -f 536/127/15 534/218/15 538/217/15 -f 536/127/15 538/217/15 540/130/15 -f 539/215/16 535/216/16 537/217/16 -f 539/215/16 537/217/16 541/214/16 -f 546/209/31 542/210/31 543/211/31 -f 546/209/31 543/211/31 547/127/31 -f 545/212/32 544/210/32 548/209/32 -f 545/212/32 548/209/32 549/213/32 -f 544/214/15 542/215/15 546/216/15 -f 544/214/15 546/216/15 548/217/15 -f 547/218/16 543/217/16 545/130/16 -f 547/218/16 545/130/16 549/127/16 -f 554/211/29 550/127/29 551/209/29 -f 554/211/29 551/209/29 555/210/29 -f 553/209/30 552/213/30 556/212/30 -f 553/209/30 556/212/30 557/210/30 -f 552/127/15 550/218/15 554/217/15 -f 552/127/15 554/217/15 556/130/15 -f 555/215/16 551/216/16 553/217/16 -f 555/215/16 553/217/16 557/214/16 +f 213/133/11 214/134/11 215/135/11 +f 216/133/12 217/134/12 218/135/12 +f 219/136/14 220/137/14 221/138/14 +f 544/139/11 222/138/11 543/140/11 +f 542/139/12 219/138/12 545/140/12 +f 545/139/16 221/138/16 544/140/16 +f 543/139/15 223/138/15 542/140/15 +f 220/141/11 224/142/11 225/137/11 +f 222/136/14 226/137/14 223/138/14 +f 221/136/14 225/137/14 222/138/14 +f 223/136/14 227/137/14 219/138/14 +f 217/143/14 228/144/14 229/134/14 +f 226/141/12 230/142/12 227/137/12 +f 227/141/16 231/142/16 220/137/16 +f 225/141/15 232/142/15 226/137/15 +f 218/133/16 229/134/16 213/135/16 +f 215/133/15 233/134/15 216/135/15 +f 228/145/11 234/146/11 235/144/11 +f 214/143/14 236/144/14 233/134/14 +f 229/143/14 235/144/14 214/134/14 +f 233/143/14 237/144/14 217/134/14 +f 236/145/12 238/146/12 237/144/12 +f 237/145/16 239/146/16 228/144/16 +f 235/145/15 240/146/15 236/144/15 +f 215/133/13 232/142/13 224/147/13 +f 213/133/13 224/142/13 231/147/13 +f 218/133/13 231/142/13 230/147/13 +f 216/133/13 230/142/13 232/147/13 +f 241/148/11 242/149/11 243/150/11 +f 244/148/12 245/149/12 246/150/12 +f 246/148/16 247/149/16 241/150/16 +f 243/148/15 248/149/15 244/150/15 +f 243/148/13 240/146/13 234/151/13 +f 241/148/13 234/146/13 239/151/13 +f 246/148/13 239/146/13 238/151/13 +f 244/148/13 238/146/13 240/151/13 +f 248/152/13 249/153/13 245/149/13 +f 250/154/11 251/155/11 252/153/11 +f 245/152/13 250/153/13 247/149/13 +f 242/152/13 253/153/13 248/149/13 +f 247/152/13 252/153/13 242/149/13 +f 254/156/13 255/157/13 256/158/13 +f 253/154/12 256/155/12 249/153/12 +f 249/154/16 255/155/16 250/153/16 +f 252/154/15 254/155/15 253/153/15 +f 213/133/11 229/143/11 214/134/11 +f 216/133/12 233/143/12 217/134/12 +f 219/136/14 227/141/14 220/137/14 +f 544/139/11 221/136/11 222/138/11 +f 542/139/12 223/136/12 219/138/12 +f 545/139/16 219/136/16 221/138/16 +f 543/139/15 222/136/15 223/138/15 +f 220/141/11 231/147/11 224/142/11 +f 222/136/14 225/141/14 226/137/14 +f 221/136/14 220/141/14 225/137/14 +f 223/136/14 226/141/14 227/137/14 +f 217/143/14 237/145/14 228/144/14 +f 226/141/12 232/147/12 230/142/12 +f 227/141/16 230/147/16 231/142/16 +f 225/141/15 224/147/15 232/142/15 +f 218/133/16 217/143/16 229/134/16 +f 215/133/15 214/143/15 233/134/15 +f 228/145/11 239/151/11 234/146/11 +f 214/143/14 235/145/14 236/144/14 +f 229/143/14 228/145/14 235/144/14 +f 233/143/14 236/145/14 237/144/14 +f 236/145/12 240/151/12 238/146/12 +f 237/145/16 238/151/16 239/146/16 +f 235/145/15 234/151/15 240/146/15 +f 215/133/13 216/135/13 232/142/13 +f 213/133/13 215/135/13 224/142/13 +f 218/133/13 213/135/13 231/142/13 +f 216/133/13 218/135/13 230/142/13 +f 241/148/11 247/152/11 242/149/11 +f 244/148/12 248/152/12 245/149/12 +f 246/148/16 245/152/16 247/149/16 +f 243/148/15 242/152/15 248/149/15 +f 243/148/13 244/150/13 240/146/13 +f 241/148/13 243/150/13 234/146/13 +f 246/148/13 241/150/13 239/146/13 +f 244/148/13 246/150/13 238/146/13 +f 248/152/13 253/154/13 249/153/13 +f 250/154/11 255/157/11 251/155/11 +f 245/152/13 249/154/13 250/153/13 +f 242/152/13 252/154/13 253/153/13 +f 247/152/13 250/154/13 252/153/13 +f 254/156/13 251/155/13 255/157/13 +f 253/154/12 254/157/12 256/155/12 +f 249/154/16 256/157/16 255/155/16 +f 252/154/15 251/157/15 254/155/15 +f 258/159/11 257/160/11 259/161/11 +f 258/159/11 259/161/11 260/162/11 +f 263/163/12 261/164/12 262/165/12 +f 263/163/12 262/165/12 264/166/12 +f 259/167/15 257/168/15 261/164/15 +f 259/167/15 261/164/15 263/163/15 +f 262/165/16 258/159/16 260/162/16 +f 262/165/16 260/162/16 264/166/16 +f 286/169/17 288/170/17 261/164/17 +f 286/169/17 261/164/17 257/168/17 +f 265/171/18 286/172/18 257/160/18 +f 265/171/18 257/160/18 258/159/18 +f 266/173/19 265/171/19 258/159/19 +f 266/173/19 258/159/19 262/165/19 +f 288/170/20 266/173/20 262/165/20 +f 288/170/20 262/165/20 261/164/20 +f 268/159/11 267/160/11 269/161/11 +f 268/159/11 269/161/11 270/162/11 +f 273/163/12 271/164/12 272/165/12 +f 273/163/12 272/165/12 274/166/12 +f 269/167/15 267/168/15 271/164/15 +f 269/167/15 271/164/15 273/163/15 +f 272/165/16 268/159/16 270/162/16 +f 272/165/16 270/162/16 274/166/16 +f 275/169/17 286/170/17 271/164/17 +f 275/169/17 271/164/17 267/168/17 +f 276/171/21 275/172/21 267/160/21 +f 276/171/21 267/160/21 268/159/21 +f 265/173/19 276/171/19 268/159/19 +f 265/173/19 268/159/19 272/165/19 +f 286/170/22 265/173/22 272/165/22 +f 286/170/22 272/165/22 271/164/22 +f 278/159/11 277/160/11 279/161/11 +f 278/159/11 279/161/11 280/162/11 +f 283/163/12 281/164/12 282/165/12 +f 283/163/12 282/165/12 284/166/12 +f 279/167/15 277/168/15 281/164/15 +f 279/167/15 281/164/15 283/163/15 +f 282/165/16 278/159/16 280/162/16 +f 282/165/16 280/162/16 284/166/16 +f 285/169/23 287/170/23 281/164/23 +f 285/169/23 281/164/23 277/168/23 +f 286/171/18 285/172/18 277/160/18 +f 286/171/18 277/160/18 278/159/18 +f 288/173/24 286/171/24 278/159/24 +f 288/173/24 278/159/24 282/165/24 +f 287/170/20 288/173/20 282/165/20 +f 287/170/20 282/165/20 281/164/20 +f 290/159/11 289/160/11 291/161/11 +f 290/159/11 291/161/11 292/162/11 +f 295/163/12 293/164/12 294/165/12 +f 295/163/12 294/165/12 296/166/12 +f 291/167/15 289/168/15 293/164/15 +f 291/167/15 293/164/15 295/163/15 +f 294/165/16 290/159/16 292/162/16 +f 294/165/16 292/162/16 296/166/16 +f 297/169/23 285/170/23 293/164/23 +f 297/169/23 293/164/23 289/168/23 +f 275/171/21 297/172/21 289/160/21 +f 275/171/21 289/160/21 290/159/21 +f 286/173/24 275/171/24 290/159/24 +f 286/173/24 290/159/24 294/165/24 +f 285/170/22 286/173/22 294/165/22 +f 285/170/22 294/165/22 293/164/22 +f 299/174/15 301/175/15 300/176/15 +f 299/174/15 300/176/15 298/177/15 +f 305/178/11 299/179/11 298/180/11 +f 305/178/11 298/180/11 303/181/11 +f 301/175/12 304/182/12 302/183/12 +f 301/175/12 302/183/12 300/176/12 +f 304/182/16 305/178/16 303/181/16 +f 304/182/16 303/181/16 302/183/16 +f 307/184/16 306/185/16 308/186/16 +f 307/184/16 308/186/16 309/187/16 +f 312/188/15 310/189/15 311/168/15 +f 312/188/15 311/168/15 313/190/15 +f 310/189/13 306/185/13 307/191/13 +f 310/189/13 307/191/13 311/192/13 +f 309/193/14 308/186/14 312/188/14 +f 309/193/14 312/188/14 313/194/14 +f 308/186/11 306/185/11 310/189/11 +f 308/186/11 310/189/11 312/188/11 +f 314/195/12 316/196/12 311/197/12 +f 314/195/12 311/197/12 307/184/12 +f 315/198/12 314/195/12 307/184/12 +f 315/198/12 307/184/12 309/187/12 +f 317/199/12 315/198/12 309/187/12 +f 317/199/12 309/187/12 313/200/12 +f 316/196/12 317/199/12 313/200/12 +f 316/196/12 313/200/12 311/197/12 +f 360/183/13 318/181/13 316/201/13 +f 360/183/13 316/201/13 314/191/13 +f 361/176/16 360/183/16 314/191/16 +f 361/176/16 314/191/16 315/202/16 +f 319/177/14 361/176/14 315/202/14 +f 319/177/14 315/202/14 317/203/14 +f 318/181/15 319/180/15 317/204/15 +f 318/181/15 317/204/15 316/201/15 +f 321/184/11 320/185/11 322/186/11 +f 321/184/11 322/186/11 323/187/11 +f 326/188/12 324/189/12 325/168/12 +f 326/188/12 325/168/12 327/190/12 +f 324/189/13 320/185/13 321/191/13 +f 324/189/13 321/191/13 325/192/13 +f 323/193/14 322/186/14 326/188/14 +f 323/193/14 326/188/14 327/194/14 +f 322/186/15 320/185/15 324/189/15 +f 322/186/15 324/189/15 326/188/15 +f 328/195/16 330/196/16 325/197/16 +f 328/195/16 325/197/16 321/184/16 +f 329/198/16 328/195/16 321/184/16 +f 329/198/16 321/184/16 323/187/16 +f 331/199/16 329/198/16 323/187/16 +f 331/199/16 323/187/16 327/200/16 +f 330/196/16 331/199/16 327/200/16 +f 330/196/16 327/200/16 325/197/16 +f 318/183/13 344/181/13 330/201/13 +f 318/183/13 330/201/13 328/191/13 +f 319/176/11 318/183/11 328/191/11 +f 319/176/11 328/191/11 329/202/11 +f 345/177/14 319/176/14 329/202/14 +f 345/177/14 329/202/14 331/203/14 +f 344/181/12 345/180/12 331/204/12 +f 344/181/12 331/204/12 330/201/12 +f 333/184/15 332/185/15 334/186/15 +f 333/184/15 334/186/15 335/187/15 +f 338/188/16 336/189/16 337/168/16 +f 338/188/16 337/168/16 339/190/16 +f 336/189/13 332/185/13 333/191/13 +f 336/189/13 333/191/13 337/192/13 +f 335/193/14 334/186/14 338/188/14 +f 335/193/14 338/188/14 339/194/14 +f 334/186/12 332/185/12 336/189/12 +f 334/186/12 336/189/12 338/188/12 +f 340/195/11 342/196/11 337/197/11 +f 340/195/11 337/197/11 333/184/11 +f 341/198/11 340/195/11 333/184/11 +f 341/198/11 333/184/11 335/187/11 +f 343/199/11 341/198/11 335/187/11 +f 343/199/11 335/187/11 339/200/11 +f 342/196/11 343/199/11 339/200/11 +f 342/196/11 339/200/11 337/197/11 +f 344/183/13 358/181/13 342/201/13 +f 344/183/13 342/201/13 340/191/13 +f 345/176/15 344/183/15 340/191/15 +f 345/176/15 340/191/15 341/202/15 +f 359/177/14 345/176/14 341/202/14 +f 359/177/14 341/202/14 343/203/14 +f 358/181/16 359/180/16 343/204/16 +f 358/181/16 343/204/16 342/201/16 +f 347/184/12 346/185/12 348/186/12 +f 347/184/12 348/186/12 349/187/12 +f 352/188/11 350/189/11 351/168/11 +f 352/188/11 351/168/11 353/190/11 +f 350/189/13 346/185/13 347/191/13 +f 350/189/13 347/191/13 351/192/13 +f 349/193/14 348/186/14 352/188/14 +f 349/193/14 352/188/14 353/194/14 +f 348/186/16 346/185/16 350/189/16 +f 348/186/16 350/189/16 352/188/16 +f 354/195/15 356/196/15 351/197/15 +f 354/195/15 351/197/15 347/184/15 +f 355/198/15 354/195/15 347/184/15 +f 355/198/15 347/184/15 349/187/15 +f 357/199/15 355/198/15 349/187/15 +f 357/199/15 349/187/15 353/200/15 +f 356/196/15 357/199/15 353/200/15 +f 356/196/15 353/200/15 351/197/15 +f 358/183/13 360/181/13 356/201/13 +f 358/183/13 356/201/13 354/191/13 +f 359/176/12 358/183/12 354/191/12 +f 359/176/12 354/191/12 355/202/12 +f 361/177/14 359/176/14 355/202/14 +f 361/177/14 355/202/14 357/203/14 +f 360/181/11 361/180/11 357/204/11 +f 360/181/11 357/204/11 356/201/11 +f 345/177/14 359/203/14 361/205/14 +f 345/177/14 361/205/14 319/206/14 +f 366/207/25 362/208/25 363/209/25 +f 366/207/25 363/209/25 367/127/25 +f 365/210/26 364/208/26 368/207/26 +f 365/210/26 368/207/26 369/211/26 +f 364/212/12 362/213/12 366/214/12 +f 364/212/12 366/214/12 368/215/12 +f 367/216/11 363/215/11 365/217/11 +f 367/216/11 365/217/11 369/127/11 +f 374/209/27 370/127/27 371/207/27 +f 374/209/27 371/207/27 375/208/27 +f 373/207/28 372/211/28 376/210/28 +f 373/207/28 376/210/28 377/208/28 +f 372/127/12 370/216/12 374/215/12 +f 372/127/12 374/215/12 376/217/12 +f 375/213/11 371/214/11 373/215/11 +f 375/213/11 373/215/11 377/212/11 +f 382/207/25 378/208/25 379/209/25 +f 382/207/25 379/209/25 383/127/25 +f 381/210/26 380/208/26 384/207/26 +f 381/210/26 384/207/26 385/211/26 +f 380/212/12 378/213/12 382/214/12 +f 380/212/12 382/214/12 384/215/12 +f 383/216/11 379/215/11 381/217/11 +f 383/216/11 381/217/11 385/127/11 +f 390/209/27 386/127/27 387/207/27 +f 390/209/27 387/207/27 391/208/27 +f 389/207/28 388/211/28 392/210/28 +f 389/207/28 392/210/28 393/208/28 +f 388/127/12 386/216/12 390/215/12 +f 388/127/12 390/215/12 392/217/12 +f 391/213/11 387/214/11 389/215/11 +f 391/213/11 389/215/11 393/212/11 +f 398/207/25 394/208/25 395/209/25 +f 398/207/25 395/209/25 399/127/25 +f 397/210/26 396/208/26 400/207/26 +f 397/210/26 400/207/26 401/211/26 +f 396/212/12 394/213/12 398/214/12 +f 396/212/12 398/214/12 400/215/12 +f 399/216/11 395/215/11 397/217/11 +f 399/216/11 397/217/11 401/127/11 +f 406/209/27 402/127/27 403/207/27 +f 406/209/27 403/207/27 407/208/27 +f 405/207/28 404/211/28 408/210/28 +f 405/207/28 408/210/28 409/208/28 +f 404/127/12 402/216/12 406/215/12 +f 404/127/12 406/215/12 408/217/12 +f 407/213/11 403/214/11 405/215/11 +f 407/213/11 405/215/11 409/212/11 +f 414/207/27 410/208/27 411/209/27 +f 414/207/27 411/209/27 415/127/27 +f 413/210/28 412/208/28 416/207/28 +f 413/210/28 416/207/28 417/211/28 +f 412/212/11 410/213/11 414/214/11 +f 412/212/11 414/214/11 416/215/11 +f 415/216/12 411/215/12 413/217/12 +f 415/216/12 413/217/12 417/127/12 +f 422/209/25 418/127/25 419/207/25 +f 422/209/25 419/207/25 423/208/25 +f 421/207/26 420/211/26 424/210/26 +f 421/207/26 424/210/26 425/208/26 +f 420/127/11 418/216/11 422/215/11 +f 420/127/11 422/215/11 424/217/11 +f 423/213/12 419/214/12 421/215/12 +f 423/213/12 421/215/12 425/212/12 +f 430/207/27 426/208/27 427/209/27 +f 430/207/27 427/209/27 431/127/27 +f 429/210/28 428/208/28 432/207/28 +f 429/210/28 432/207/28 433/211/28 +f 428/212/11 426/213/11 430/214/11 +f 428/212/11 430/214/11 432/215/11 +f 431/216/12 427/215/12 429/217/12 +f 431/216/12 429/217/12 433/127/12 +f 438/209/25 434/127/25 435/207/25 +f 438/209/25 435/207/25 439/208/25 +f 437/207/26 436/211/26 440/210/26 +f 437/207/26 440/210/26 441/208/26 +f 436/127/11 434/216/11 438/215/11 +f 436/127/11 438/215/11 440/217/11 +f 439/213/12 435/214/12 437/215/12 +f 439/213/12 437/215/12 441/212/12 +f 446/207/27 442/208/27 443/209/27 +f 446/207/27 443/209/27 447/127/27 +f 445/210/28 444/208/28 448/207/28 +f 445/210/28 448/207/28 449/211/28 +f 444/212/11 442/213/11 446/214/11 +f 444/212/11 446/214/11 448/215/11 +f 447/216/12 443/215/12 445/217/12 +f 447/216/12 445/217/12 449/127/12 +f 454/209/25 450/127/25 451/207/25 +f 454/209/25 451/207/25 455/208/25 +f 453/207/26 452/211/26 456/210/26 +f 453/207/26 456/210/26 457/208/26 +f 452/127/11 450/216/11 454/215/11 +f 452/127/11 454/215/11 456/217/11 +f 455/213/12 451/214/12 453/215/12 +f 455/213/12 453/215/12 457/212/12 +f 462/207/29 458/208/29 459/209/29 +f 462/207/29 459/209/29 463/127/29 +f 461/210/30 460/208/30 464/207/30 +f 461/210/30 464/207/30 465/211/30 +f 460/212/16 458/213/16 462/214/16 +f 460/212/16 462/214/16 464/215/16 +f 463/216/15 459/215/15 461/217/15 +f 463/216/15 461/217/15 465/127/15 +f 470/209/31 466/127/31 467/207/31 +f 470/209/31 467/207/31 471/208/31 +f 469/207/32 468/211/32 472/210/32 +f 469/207/32 472/210/32 473/208/32 +f 468/127/16 466/216/16 470/215/16 +f 468/127/16 470/215/16 472/217/16 +f 471/213/15 467/214/15 469/215/15 +f 471/213/15 469/215/15 473/212/15 +f 478/207/29 474/208/29 475/209/29 +f 478/207/29 475/209/29 479/127/29 +f 477/210/30 476/208/30 480/207/30 +f 477/210/30 480/207/30 481/211/30 +f 476/212/16 474/213/16 478/214/16 +f 476/212/16 478/214/16 480/215/16 +f 479/216/15 475/215/15 477/217/15 +f 479/216/15 477/217/15 481/127/15 +f 486/209/31 482/127/31 483/207/31 +f 486/209/31 483/207/31 487/208/31 +f 485/207/32 484/211/32 488/210/32 +f 485/207/32 488/210/32 489/208/32 +f 484/127/16 482/216/16 486/215/16 +f 484/127/16 486/215/16 488/217/16 +f 487/213/15 483/214/15 485/215/15 +f 487/213/15 485/215/15 489/212/15 +f 494/207/31 490/208/31 491/209/31 +f 494/207/31 491/209/31 495/127/31 +f 493/210/32 492/208/32 496/207/32 +f 493/210/32 496/207/32 497/211/32 +f 492/212/15 490/213/15 494/214/15 +f 492/212/15 494/214/15 496/215/15 +f 495/216/16 491/215/16 493/217/16 +f 495/216/16 493/217/16 497/127/16 +f 502/209/29 498/127/29 499/207/29 +f 502/209/29 499/207/29 503/208/29 +f 501/207/30 500/211/30 504/210/30 +f 501/207/30 504/210/30 505/208/30 +f 500/127/15 498/216/15 502/215/15 +f 500/127/15 502/215/15 504/217/15 +f 503/213/16 499/214/16 501/215/16 +f 503/213/16 501/215/16 505/212/16 +f 510/207/31 506/208/31 507/209/31 +f 510/207/31 507/209/31 511/127/31 +f 509/210/32 508/208/32 512/207/32 +f 509/210/32 512/207/32 513/211/32 +f 508/212/15 506/213/15 510/214/15 +f 508/212/15 510/214/15 512/215/15 +f 511/216/16 507/215/16 509/217/16 +f 511/216/16 509/217/16 513/127/16 +f 518/209/29 514/127/29 515/207/29 +f 518/209/29 515/207/29 519/208/29 +f 517/207/30 516/211/30 520/210/30 +f 517/207/30 520/210/30 521/208/30 +f 516/127/15 514/216/15 518/215/15 +f 516/127/15 518/215/15 520/217/15 +f 519/213/16 515/214/16 517/215/16 +f 519/213/16 517/215/16 521/212/16 +f 526/207/31 522/208/31 523/209/31 +f 526/207/31 523/209/31 527/127/31 +f 525/210/32 524/208/32 528/207/32 +f 525/210/32 528/207/32 529/211/32 +f 524/212/15 522/213/15 526/214/15 +f 524/212/15 526/214/15 528/215/15 +f 527/216/16 523/215/16 525/217/16 +f 527/216/16 525/217/16 529/127/16 +f 534/209/29 530/127/29 531/207/29 +f 534/209/29 531/207/29 535/208/29 +f 533/207/30 532/211/30 536/210/30 +f 533/207/30 536/210/30 537/208/30 +f 532/127/15 530/216/15 534/215/15 +f 532/127/15 534/215/15 536/217/15 +f 535/213/16 531/214/16 533/215/16 +f 535/213/16 533/215/16 537/212/16 +f 539/218/13 538/219/13 209/220/13 +f 539/218/13 209/220/13 205/122/13 +f 540/221/13 539/218/13 205/122/13 +f 540/221/13 205/122/13 206/121/13 +f 541/222/13 540/221/13 206/121/13 +f 541/222/13 206/121/13 210/217/13 +f 538/219/13 541/222/13 210/217/13 +f 538/219/13 210/217/13 209/220/13 +f 543/223/27 542/224/27 538/219/27 +f 543/223/27 538/219/27 539/218/27 +f 544/225/29 543/223/29 539/218/29 +f 544/225/29 539/218/29 540/221/29 +f 545/226/25 544/225/25 540/221/25 +f 545/226/25 540/221/25 541/222/25 +f 542/224/31 545/226/31 541/222/31 +f 542/224/31 541/222/31 538/219/31 +f 550/207/29 546/208/29 547/209/29 +f 550/207/29 547/209/29 551/127/29 +f 549/210/30 548/208/30 552/207/30 +f 549/210/30 552/207/30 553/211/30 +f 548/212/16 546/213/16 550/214/16 +f 548/212/16 550/214/16 552/215/16 +f 551/216/15 547/215/15 549/217/15 +f 551/216/15 549/217/15 553/127/15 +f 558/209/31 554/127/31 555/207/31 +f 558/209/31 555/207/31 559/208/31 +f 557/207/32 556/211/32 560/210/32 +f 557/207/32 560/210/32 561/208/32 +f 556/127/16 554/216/16 558/215/16 +f 556/127/16 558/215/16 560/217/16 +f 559/213/15 555/214/15 557/215/15 +f 559/213/15 557/215/15 561/212/15 +f 566/227/13 562/228/13 563/229/13 +f 566/227/13 563/229/13 567/230/13 +f 565/231/14 564/232/14 568/233/14 +f 565/231/14 568/233/14 569/234/14 +f 564/232/12 562/228/12 566/227/12 +f 564/232/12 566/227/12 568/233/12 +f 567/211/11 563/235/11 565/231/11 +f 567/211/11 565/231/11 569/234/11 +f 574/227/13 570/228/13 571/229/13 +f 574/227/13 571/229/13 575/230/13 +f 573/231/14 572/232/14 576/233/14 +f 573/231/14 576/233/14 577/234/14 +f 572/232/11 570/228/11 574/227/11 +f 572/232/11 574/227/11 576/233/11 +f 575/211/12 571/235/12 573/231/12 +f 575/211/12 573/231/12 577/234/12 +f 582/227/13 578/228/13 579/229/13 +f 582/227/13 579/229/13 583/230/13 +f 581/231/14 580/232/14 584/233/14 +f 581/231/14 584/233/14 585/234/14 +f 580/232/16 578/228/16 582/227/16 +f 580/232/16 582/227/16 584/233/16 +f 583/211/15 579/235/15 581/231/15 +f 583/211/15 581/231/15 585/234/15 +f 590/227/13 586/228/13 587/229/13 +f 590/227/13 587/229/13 591/230/13 +f 589/231/14 588/232/14 592/233/14 +f 589/231/14 592/233/14 593/234/14 +f 588/232/15 586/228/15 590/227/15 +f 588/232/15 590/227/15 592/233/15 +f 591/211/16 587/235/16 589/231/16 +f 591/211/16 589/231/16 593/234/16 diff --git a/src/main/resources/assets/hbm/textures/models/network/pylon_steel.png b/src/main/resources/assets/hbm/textures/models/network/pylon_steel.png index dce3337ad67078f19e31e80066a1d77666544a4c..5670d952ebc7de671d1de20db23729e20d765402 100644 GIT binary patch delta 1507 zcmV<91swX&4uK4iFn^>YfFT6zoP5nqvDWJyNi)-fELpo=TdVyyYtRGZ zm1ZQ*)6?($elug1pd=nVcwp-FIsl;G?*jnJ9Dn%mft3B5^M8a>_JU@!iDt720AP$| z=gJ)0L}|i75I`vf;8MY|$2L(ZT!cztR0>xLR|;E1rEn2$y~59)Ju|-V!}on`Zf>IJ z^SgKNDur*A!euY0Vi=XemBN+67Evi&gi2vl3RenO3R^^_a1knnF}=b^+jY}uaD1`* zX=%F=Ru%sEv40PsKE<%7hgF5|->;+5;M0tIYE%jrVO|RF?d_Q_A3ntK@iBHf$Hw!# z!Z`Lk&+P2%%oOjp#-%;aGrsRneSHcm3U6<3o9EA;0|2zv*}47w{jut$WUUaMm%>_W zP)Y#+l+uj&DDq^x-R{ik%ZkFBa}YvcjDh1gFvg61-G4pLGlz$VXti2%Aq!Yim=FTS z7?e`k?@=s*EMQ6DSFc`?y}dp2@WQ2!j*js3>C=o<`WnxhEMQ6D)U@((oSN3WV|EnQ z@^Idy^2CeCdY)%aPEMwN7*-TcO$)$~aRFGEvMH=6oSIhJmN%}=&CRKZObROs-(*_8 z@6V-#ynhZ$SGe778vuCm;zf3zF@|=#ZG;e6HC05q)9IL2s|BE37+6tQ2m#J{W>i38 zT*er5yIs=hbPRAa=~k5=F zF&%Qt-?!>;k$S50!U&ue_ttOR*Z}yPkI`o%46vYQ%WJFL=;5; zE=$at=ET4y>6GxTb7`&hP#)G=LkN-O>HKx+gNx%B@87@A#&UXknzg5SJRdHj*9#$5 zFMkh9DHqyqEr#=h0e~oqpta88cv0;u7sHIPg|@F;4DaslE_9!1n0ZS zgta^jAWI!UQbk=?OV1N4mxmXPr7QgQ?SI=L8GrhrZH(5CasbX9{QP6v{PxG|)mf&U z_x`X^8cHjCR$oIHMbHaQ#n%5%OKAnyb)mF|%Q?>a=Vgaf3f2{lV+E}xn#~6MPoKb@ z(nBhR#om1k9zA+w(gzR(0Vrc&lpqLt;En?sMg@164NHHeH#Rol`+oMhCOEV*7k^3v zHQ}QD{kCD0B!vksrhAM)D+3vZ7h5$HN*j#!`~9!KZ!|nBuXMlP&%PHx#mS^$ZLNmE zKtgE)qcs#L>h)Ttyo$|4{fc14v^F+2vU`con{Zthlv31c0s|SsaTpk57z_pw!i5YY zP=bm2&7E-iEe%^+Tjt)qdqZuUbAKEh9F)qT+uwa_gb)y}iztraL@~6{;4Vi^2n0b7 zlmIe}FiF26%w$^EtuL2>a5pYisMq(jebH zx}_qeyz&NUlk69to(3R25yx@1C?H%ualayzCY)ai{qL)Tp|-D&wtt3*zIpRz zh}`4HkFPu|&KRT&(QGyl^v+WnjQW{fba}Z|MrY`6c<85`+-A zoMSK;fKdWMDcD6Yo}Ukr#Q}#-+^+~rFFZzZcAmti)&`6v1OD^%KdUo&xPpIwo#}Gn zazt^A*7`bvpttZTVrjy8XIxHW_PRc!F+0xH<5;0luS3ct7Q-+sJET%5O*nPg>)g6* z9s|o-B002ov JPDHLkV1kPA)iMA8 delta 1845 zcmV-52g>+?4A2gcFn5jp8h)xurBb)uu{Mr9#O#7k$=rjNfelN; z(udt)Acy@S%0I|G5b{Iz(6HI{Zf0P72w|BJ@Fn2nlv7~H!JUyUx1{>mgRF|W?YLVl zspUXFVBG4rTCPV=y&v^~d^Gz4)>wJ-UFN~GKvrw19`}_Om4|nh4 z?c29_`rxezf`4G99|u8To<4nA$=|=4C>;cW8I48@e?CX)r&UK!tKaV%N+|$9Yi;j+ zaBy(xd~&j*(Fnug@at4qYmJ;VrF4RL5p|LUTJmAeIS3&z#=vnL7-KG7?m-Zk!^1=P zzF!Mjpe2O~Az+L_DP@08qY1JAKps7MWS7kD?k;A%et-G$WhtMXzRvs7`}_Om?s=3x zIy%C`hYu~Ox|eYgtti~@_s!$Sk0<=N-|w4)g9FkeS)j!{Tnti0;XXaSfATmTwVHb*N8=RqsC6$97q?(RZF=0z(CKY#w5d?{#+Mx$Cv$S+~(3J(SY z0{~B+Jb$t8GsZ9&42%#0dHL8B=~fgLLV$B_0~L@3E@KRa!y$R_;DG^}Ax&ownM4?d zHj;*6So%5#=Nv)^c%Em;pPiin0EWXM8I49bJUm1Y1g1W^3lQ%0dhmT8zVBPL%UlDQ z!j9vBQVK!{D5V!l%i(ZHeBZB~^wJg1{Wj0Tgntl7DUl=zIG^l(mb8vwvyFfh}0A;g5cTxP#^ zd4D*L<3{aESNPVgTQ=VoQ&AK}5JK2Va?U60r>CbAyQ)R)OIKKHjW7%mMG;)rwf9Yu z1Z!(+c1fmbIx*p*|5vfM=EIwtn=r<}bzLZ>5Qd>u9>^4uQd;}k+8RE7{8-uE+J4yg zed}*pYaAaRTg8PCa9tO19NS7PNfJAUDu4E+E4;C>0RZ^$;RCj|wrr&(r3B}EV$YnH zp2bS6s=XD3wbr(PFveV{wDO4BguS&&%NS#e4MK=*`{eDOX}jlnNRp(wy)5B6DlGsw zK0e0n+qaRXDTELJCL?REN^X}@)?#lhN^fm#0r*^6=D+i?X_~@uoD1()wJ%*^A%6s- zC_)rPa2yBY@fdL&+Z2^A>l{icBuN6TbuIR#E4;nE4JjqUFa%@Fri(O9tq&$if=;Ic z#+dDB#&KMay)5CX3QH+*F-v;KN|Nim%9C@hwtff&JN-L~&J4n(Ly5UsZ`hWjCD6O*2 zqSkOZ$7ytSVN9K9U12E|w2sm1tz-1*6Sz})N~O^3-7mqtd-qKK0KzZ?WekiGgy9Le z;~-Ab8F#3Lr7!87ogIuuBm3GD99o%kr2$X482qJg7(H*Zo}X~0j6f@cI7!ZrJy9ra zFg@;H|NZI8fY-{Bj-tq(zkgIR+cb1K9>(JsN*frhp+M2?dRBQQ&0OPVp_QPuv$JFG zC4Sd~>$;$n!t(^iaRSH5S~KJE7(%#+lN6L-u5q;!&QHVc?d_TE?d=I0=NzwIy(*PM z`+xqE5kf$?E>bDsq!QX_aF@dq0%3RpN`N@Y+O4z3%|fN1Rji2@g@154lv1FK!bk&c zG$_e@Qmd?kaT=Y?J#H3C6W-g~yRtMW+KYWFAbUX5D?pp{Fk zo`6gx7-e9Y@9U*96I;7Sy+1E zF^$u+%s;g@U@V*Pe}4S=`fMI9;D7(9^l{;Gq*B7)*gzPbG`>YFO}H4DbD#avm}#HA zEUHVXu-@$=jx%2@ev{t>N)yhb?3bc-**xrZJS1rfmvh8PGA>u(se(#N`m(fB7L))A j$a1Z4L1^_jdKLZ;t#T|wM7pgW00000NkvXXu0mjfi0_qm From 77f044ebdd13172de94646f7793cf89bcf31de0a Mon Sep 17 00:00:00 2001 From: HbmMods Date: Fri, 24 Jul 2026 15:35:59 +0200 Subject: [PATCH 42/50] emergency push --- changelog | 10 ++- src/main/java/com/hbm/blocks/ModBlocks.java | 4 +- .../blocks/generic/BlockForgottenBrick.java | 36 ++++++-- .../blocks/generic/BlockForgottenLock.java | 83 ++++++++++++++++-- .../java/com/hbm/handler/FuelHandler.java | 1 + .../inventory/recipes/anvil/AnvilRecipes.java | 12 +-- src/main/java/com/hbm/items/ModItems.java | 5 ++ .../java/com/hbm/main/CraftingManager.java | 1 - .../java/com/hbm/particle/ParticleAshes.java | 9 +- .../tileentity/RenderBatterySocket.java | 2 +- .../hbm/render/tileentity/RenderPylon.java | 1 - .../machine/pile/TileEntityPileControl.java | 17 ++++ .../machine/pile/TileEntityPileLoader.java | 30 +++++++ .../machine/pile/TileEntityPileVent.java | 13 +++ src/main/java/com/hbm/util/ShadyUtil.java | 17 +--- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../assets/hbm/manual/material/etcoal.json | 11 +++ .../playground/nullstone_demo_2_wip.png | Bin 0 -> 373 bytes 19 files changed, 213 insertions(+), 41 deletions(-) create mode 100644 src/main/resources/assets/hbm/manual/material/etcoal.json create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_2_wip.png diff --git a/changelog b/changelog index 158b030c1..da40438bd 100644 --- a/changelog +++ b/changelog @@ -25,9 +25,17 @@ * This preview is green if it can be placed and red if it can not * On some machines, this preview might not be perfect, but the check on whether it can be placed should always be accurate * This makes it easier to anticipate how much space a machine takes up, as well as lining up large parts like fusion reactor components which were notoriously hard to place down right +* Updated the small pylon model + * The small pylon now has a steel variant +* Items in the battery socket which previously didn't show up in the socket's model are now rendered +* Reduced the cost for the heavy stirling engine ## Fixed * Fixed held block being placed when not sneaking when opening the cable diode's GUI * Fixed an issue where the diesel generator's fuel capacity is the original 4,000mB instead of the intended new 16,000mB * This means that explosive barrels and universal barrels can now be loaded into the diesel generator -* Fixed RoR terminal's `set` command not working \ No newline at end of file +* Fixed RoR terminal's `set` command not working +* Fixed a longstanding issue where the transparent part of beams from tile entity models would often have incorrect render order, sometimes rendering things behind them invisible + * This also fixes the same phenomenon for other types of beams, such as those from hitscan laser and tesla weapons +* Fixed some issues regarding the new crane structure +* Fixed skeletonizer ashes floating over the floor after landing \ 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 9e923be5b..d143d9bd8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1512,7 +1512,7 @@ public class ModBlocks { lightstone = new BlockLightstone(Material.rock, LightstoneType.class, true, true).setBlockName("lightstone").setCreativeTab(MainRegistry.blockTab).setHardness(2F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":lightstone"); brick_forgotten = new BlockForgottenBrick().setBlockName("brick_forgotten").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten"); - brick_forgotten_lock = new BlockForgottenLock(Material.rock, RefStrings.MODID + ":brick_forgotten_top").setBlockName("brick_forgotten_lock").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten_lock"); + brick_forgotten_lock = new BlockForgottenLock().setBlockName("brick_forgotten_lock").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten_lock"); concrete_slab = new BlockMultiSlab(null, Material.rock, concrete_smooth, concrete, concrete_asbestos, ducrete_smooth, ducrete, asphalt).setBlockName("concrete_slab").setCreativeTab(MainRegistry.blockTab); concrete_double_slab = new BlockMultiSlab(concrete_slab, Material.rock, concrete_smooth, concrete, concrete_asbestos, ducrete_smooth, ducrete, asphalt).setBlockName("concrete_double_slab").setCreativeTab(MainRegistry.blockTab); @@ -1902,7 +1902,7 @@ public class ModBlocks { crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_side"); crane_partitioner = new CranePartitioner().setBlockName("crane_partitioner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_partitioner_side"); fan = new MachineFan().setBlockName("fan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - piston_inserter = new PistonInserter().setBlockName("piston_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + piston_inserter = new PistonInserter().setBlockName("piston_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); drone_waypoint = new DroneWaypoint().setBlockName("drone_waypoint").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_waypoint"); drone_crate = new DroneCrate().setBlockName("drone_crate").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); diff --git a/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java index 6ab602ed0..cd06db25b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java +++ b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java @@ -3,6 +3,7 @@ package com.hbm.blocks.generic; import java.util.List; import com.hbm.blocks.BlockMulti; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import cpw.mods.fml.relauncher.Side; @@ -10,9 +11,11 @@ import cpw.mods.fml.relauncher.SideOnly; 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.ItemStack; import net.minecraft.util.IIcon; +import net.minecraft.world.World; public class BlockForgottenBrick extends BlockMulti { @@ -24,6 +27,13 @@ public class BlockForgottenBrick extends BlockMulti { private IIcon iconEmpty; private IIcon iconPlanks; + public static final int META_DEFAULT = 0; + public static final int META_BW = 1; + public static final int META_NULLSTONE = 2; + public static final int META_HOLE = 3; + public static final int META_HOLE_EMPTY = 4; + public static final int META_NULLROOM_WOOD = 5; + public BlockForgottenBrick() { super(Material.rock); } @@ -45,22 +55,22 @@ public class BlockForgottenBrick extends BlockMulti { @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { - if(meta == 1) { + if(meta == META_BW) { if(side == 0 || side == 1) return this.iconAltTop; return this.iconAlt; } - if(meta == 2) { + if(meta == META_NULLSTONE) { return this.iconStone; } - if(meta == 3) { + if(meta == META_HOLE) { if(side == 0 || side == 1) return this.iconTop; return this.iconHole; } - if(meta == 4) { + if(meta == META_HOLE_EMPTY) { if(side == 0 || side == 1) return this.iconTop; return this.iconEmpty; } - if(meta == 5) { + if(meta == META_NULLROOM_WOOD) { return this.iconPlanks; } @@ -68,6 +78,22 @@ public class BlockForgottenBrick extends BlockMulti { return this.blockIcon; } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + int meta = world.getBlockMetadata(x, y, z); + + if(meta == META_HOLE) { + if(player.getHeldItem() == null) { + player.inventory.mainInventory[player.inventory.currentItem] = new ItemStack(ModItems.coal_eternal); + world.setBlockMetadataWithNotify(x, y, z, META_HOLE_EMPTY, 3); + return true; + } + return false; + } + + return false; + } + @Override public int getSubCount() { return 6; } @Override diff --git a/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java b/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java index b1af065e0..cca103db8 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java +++ b/src/main/java/com/hbm/blocks/generic/BlockForgottenLock.java @@ -1,21 +1,82 @@ package com.hbm.blocks.generic; -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.machine.BlockPillar; -import com.hbm.items.ModItems; +import java.util.List; +import com.hbm.blocks.BlockMulti; +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; + +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.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockForgottenLock extends BlockPillar { +public class BlockForgottenLock extends BlockMulti { + + private IIcon iconTop; + private IIcon iconAlt; + private IIcon iconAltTop; + private IIcon iconStone; + private IIcon iconStoneTop; + + public static final int META_DEFAULT = 0; + public static final int META_BW = 1; + public static final int META_NULLSTONE = 2; + public static final int META_THE_BLOCK_THAT_FUCKING_KILLS_YOU = 3; - public BlockForgottenLock(Material mat, String top) { - super(mat, top); + public BlockForgottenLock() { + super(Material.rock); } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_top"); + this.iconAlt = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_bw_lock"); + this.iconStone = reg.registerIcon(RefStrings.MODID + ":playground/nullstone_demo_2_wip"); + this.iconStoneTop = reg.registerIcon(RefStrings.MODID + ":playground/nullstone_demo_1_wip"); + this.iconAltTop = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_bw_top"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + + if(meta == META_BW) { + if(side == 0 || side == 1) return this.iconAltTop; + return this.iconAlt; + } + + if(meta == META_NULLSTONE) { + if(side == 0 || side == 1) return this.iconStoneTop; + return this.iconStone; + } + + if(side == 0 || side == 1) return this.iconTop; + return this.blockIcon; + } + + /* + * A red herring is something that misleads or distracts from a relevant or important question.[1] + * It may be either a logical fallacy or a literary device that leads readers or audiences toward a + * false conclusion. A red herring may be used intentionally, as in mystery fiction or as part of + * rhetorical strategies (e.g., in politics), or may be used in argumentation inadvertently.[2] + * + * The expression was popularized in 1807 by the English polemicist William Cobbett, who told a + * story of having used a strong-smelling smoked herring to divert and distract hounds from + * chasing a rabbit.[3] + */ @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { @@ -49,4 +110,14 @@ public class BlockForgottenLock extends BlockPillar { world.setBlock(x - dir.offsetX * d + rot.offsetX * w, y + h, z - dir.offsetZ * d + rot.offsetZ * w, b); } } + + @Override public int getSubCount() { return 3; } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < getSubCount(); ++i) { + list.add(new ItemStack(item, 1, i)); + } + } } diff --git a/src/main/java/com/hbm/handler/FuelHandler.java b/src/main/java/com/hbm/handler/FuelHandler.java index b89b86d58..f188eef34 100644 --- a/src/main/java/com/hbm/handler/FuelHandler.java +++ b/src/main/java/com/hbm/handler/FuelHandler.java @@ -39,6 +39,7 @@ public class FuelHandler implements IFuelHandler { if(fuel.getItem() == Item.getItemFromBlock(ModBlocks.block_coke)) return single * 160; if(fuel.getItem() == ModItems.book_guide) return single; if(fuel.getItem() == ModItems.coal_infernal) return 4800; + if(fuel.getItem() == ModItems.coal_eternal) return single * 16; if(fuel.getItem() == ModItems.crystal_coal) return 6400; if(fuel.getItem() == ModItems.powder_sawdust) return single / 2; 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 5f0e52e54..0c98d5dc7 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -333,8 +333,8 @@ public class AnvilRecipes extends SerializableRecipe { new AStack[] { new OreDictStack(STEEL.plate(), 16), new OreDictStack(BE.ingot(), 6), - new OreDictStack(CU.ingot(), 8), - new ComparableStack(ModItems.coil_gold, 16), + new OreDictStack(CU.ingot(), 4), + new ComparableStack(ModItems.coil_gold, 8), new ComparableStack(ModItems.gear_large, 1, 1) }, new AnvilOutput(new ItemStack(ModBlocks.machine_stirling_steel))).setTier(2)); @@ -698,8 +698,8 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput[] { new AnvilOutput(new ItemStack(ModItems.plate_steel, 16)), new AnvilOutput(new ItemStack(ModItems.ingot_beryllium, 6)), - new AnvilOutput(new ItemStack(ModItems.ingot_copper, 8)), - new AnvilOutput(new ItemStack(ModItems.coil_gold, 16)), + new AnvilOutput(new ItemStack(ModItems.ingot_copper, 4)), + new AnvilOutput(new ItemStack(ModItems.coil_gold, 8)), new AnvilOutput(new ItemStack(ModItems.gear_large,1, 1)), } @@ -725,8 +725,8 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput[] { new AnvilOutput(new ItemStack(ModItems.plate_steel, 16)), new AnvilOutput(new ItemStack(ModItems.ingot_beryllium, 6)), - new AnvilOutput(new ItemStack(ModItems.ingot_copper, 8)), - new AnvilOutput(new ItemStack(ModItems.coil_gold, 16)), + new AnvilOutput(new ItemStack(ModItems.ingot_copper, 4)), + new AnvilOutput(new ItemStack(ModItems.coil_gold, 8)), } ).setTier(2)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index aeae45ce9..6fe99b259 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -105,6 +105,7 @@ public class ModItems { public static Item powder_lignite; public static Item briquette; public static Item coal_infernal; + public static Item coal_eternal; public static Item cinnebar; public static Item powder_ash; public static Item powder_limestone; @@ -2338,6 +2339,7 @@ public class ModItems { 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"); + coal_eternal = new Item().setUnlocalizedName("coal_eternal").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":coal_eternal"); 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"); @@ -4406,6 +4408,8 @@ public class ModItems { 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); + + coal_eternal.setContainerItem(coal_eternal); } private static void registerItem() { @@ -4605,6 +4609,7 @@ public class ModItems { GameRegistry.registerItem(coke, coke.getUnlocalizedName()); GameRegistry.registerItem(lignite, lignite.getUnlocalizedName()); GameRegistry.registerItem(coal_infernal, coal_infernal.getUnlocalizedName()); + GameRegistry.registerItem(coal_eternal, coal_eternal.getUnlocalizedName()); GameRegistry.registerItem(briquette, briquette.getUnlocalizedName()); GameRegistry.registerItem(sulfur, sulfur.getUnlocalizedName()); GameRegistry.registerItem(niter, niter.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 91207f605..de2992170 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -299,7 +299,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.furnace_iron), new Object[] { "III", "IFI", "BBB", 'I', IRON.ingot(), 'F', Blocks.furnace, 'B', Blocks.stonebrick }); addRecipeAuto(new ItemStack(ModBlocks.machine_mixer), new Object[] { "PIP", "GCG", "PMP", 'P', STEEL.plate(), 'I', DURA.ingot(), 'G', KEY_ANYPANE, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.fan), new Object[] { "BPB", "PRP", "BPB", 'B', STEEL.bolt(), 'P', IRON.plate(), 'R', REDSTONE.dust() }); - addRecipeAuto(new ItemStack(ModBlocks.piston_inserter), new Object[] { "ITI", "TPT", "ITI", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', IRON.plate(), 'T', STEEL.bolt() }); addRecipeAuto(new ItemStack(ModItems.upgrade_muffler, 16), new Object[] { "III", "IWI", "III", 'I', ANY_RUBBER.ingot(), 'W', Blocks.wool }); addRecipeAuto(new ItemStack(ModItems.upgrade_template, 1), new Object[] { "WIW", "PCP", "WIW", 'W', CU.wireFine(), 'I', IRON.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'P', ModItems.plate_polymer }); diff --git a/src/main/java/com/hbm/particle/ParticleAshes.java b/src/main/java/com/hbm/particle/ParticleAshes.java index 4b76c52ac..f845f7185 100644 --- a/src/main/java/com/hbm/particle/ParticleAshes.java +++ b/src/main/java/com/hbm/particle/ParticleAshes.java @@ -72,14 +72,15 @@ public class ParticleAshes extends EntityFXRotating { float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ); Vec3NT vec = new Vec3NT(particleScale, 0, particleScale).rotateAroundYDeg(this.rotationPitch); + double yOff = 0.09; - tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMaxV()); + tess.addVertexWithUV(pX + vec.xCoord, pY - yOff, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMaxV()); vec.rotateAroundYDeg(90); - tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMinV()); + tess.addVertexWithUV(pX + vec.xCoord, pY - yOff, pZ + vec.zCoord, particleIcon.getMaxU(), particleIcon.getMinV()); vec.rotateAroundYDeg(90); - tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMinV()); + tess.addVertexWithUV(pX + vec.xCoord, pY - yOff, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMinV()); vec.rotateAroundYDeg(90); - tess.addVertexWithUV(pX + vec.xCoord, pY + 0.05, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMaxV()); + tess.addVertexWithUV(pX + vec.xCoord, pY - yOff, pZ + vec.zCoord, particleIcon.getMinU(), particleIcon.getMaxV()); } else { renderParticleRotated(tess, interp, sX, sY, sZ, dX, dZ, this.particleScale); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java index 0254e0669..42e35965a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -94,7 +94,7 @@ public class RenderBatterySocket extends TileEntitySpecialRenderer implements II GL11.glPushMatrix(); GL11.glTranslated(0, 0.5, 0); GL11.glScaled(1.5, 1.5, 1.5); - GL11.glRotated((socket.getWorldObj().getTotalWorldTime() % 360 + interp) * 25D, 0, -1, 0); + GL11.glRotated((socket.getWorldObj().getTotalWorldTime() % 360 + interp) * 2.5D, 0, -1, 0); if(dummy == null || dummy.worldObj != tile.getWorldObj()) { dummy = new EntityItem(tile.getWorldObj(), 0, 0, 0, render); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index 7d295cec7..b0285d1de 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -2,7 +2,6 @@ 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; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java index e01a7ad67..5566ff999 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java @@ -7,6 +7,7 @@ import com.hbm.util.Compat; import api.hbm.redstoneoverradio.IRORInteractive; import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; @@ -98,6 +99,22 @@ public class TileEntityPileControl extends TileEntityPileDeviceBase implements I if(this.syncLevel != lastSync) this.turnProgress = 2; } + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.level = nbt.getDouble("level"); + this.targetLevel = nbt.getDouble("targetLevel"); + this.wasRedstone = nbt.getBoolean("redstone"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setDouble("level", level); + nbt.setDouble("targetLevel", targetLevel); + nbt.setBoolean("wasRedstone", wasRedstone); + } + @Override public String[] getFunctionInfo() { return new String[] { diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java index 91ea334da..29520c70f 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java @@ -16,6 +16,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; @@ -166,6 +167,35 @@ public class TileEntityPileLoader extends TileEntityPileDeviceBase implements IS if(this.syncLevel != lastSync) this.turnProgress = 2; } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.loading = nbt.getBoolean("loading"); + this.level = nbt.getDouble("level"); + this.delay = nbt.getInteger("delay"); + this.wasRedstone = nbt.getBoolean("redstone"); + + if(nbt.hasKey("stack")) { + this.stack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("stack")); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setBoolean("loading", loading); + nbt.setDouble("level", level); + nbt.setInteger("delay", delay); + nbt.setBoolean("wasRedstone", wasRedstone); + + if(this.stack != null) { + NBTTagCompound stackTag = new NBTTagCompound(); + this.stack.writeToNBT(stackTag); + nbt.setTag("stack", stackTag); + } + } public static boolean isItemLoadable(ItemStack stack) { return stack.getItem() == ModItems.pile_rod; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java index 02b2b702b..70a19b795 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java @@ -11,6 +11,7 @@ import com.hbm.util.Compat; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; @@ -99,4 +100,16 @@ public class TileEntityPileVent extends TileEntityPileDeviceBase implements IFlu super.deserialize(buf); this.isActive = buf.readBoolean(); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + compair.readFromNBT(nbt, "t"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + compair.writeToNBT(nbt, "t"); + } } diff --git a/src/main/java/com/hbm/util/ShadyUtil.java b/src/main/java/com/hbm/util/ShadyUtil.java index b40c9a783..7f991f696 100644 --- a/src/main/java/com/hbm/util/ShadyUtil.java +++ b/src/main/java/com/hbm/util/ShadyUtil.java @@ -4,7 +4,6 @@ import com.google.common.collect.Sets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Base64; import java.util.HashSet; import java.util.Random; import java.util.Set; @@ -62,10 +61,6 @@ public class ShadyUtil { "ccd9aa1c-26b9-4dde-8f37-b96f8d99de22", //kakseao }); - // simple cryptographic utils - @Deprecated public static String encode(String msg) { return Base64.getEncoder().encodeToString(msg.getBytes()); } - @Deprecated public static String decode(String msg) { return new String(Base64.getDecoder().decode(msg)); } - /** complete fucking shit */ public static String smoosh(String s1, String s2, String s3, String s4) { @@ -81,18 +76,12 @@ public class ShadyUtil { s += s1; rand.setSeed(b1[0]); - s += rand.nextInt(0xffffff); - s += s2; + s += rand.nextInt(0xffffff) + s2; rand.setSeed(rand.nextInt(0xffffff) + b2[0]); - rand.setSeed(b2[0]); - s += rand.nextInt(0xffffff); - s += s3; + s += rand.nextInt(0xffffff) + s3; rand.setSeed(rand.nextInt(0xffffff) + b3[0]); - rand.setSeed(b3[0]); - s += rand.nextInt(0xffffff); - s += s4; + s += rand.nextInt(0xffffff) + s4; rand.setSeed(rand.nextInt(0xffffff) + b4[0]); - rand.setSeed(b4[0]); s += rand.nextInt(0xffffff); return getHash(s); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 336065b4e..f558e61a4 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1733,6 +1733,7 @@ item.cmb_pickaxe.name=CMB-Stahlspitzhacke item.cmb_plate.name=CMB-Stahlbrustpanzer item.cmb_shovel.name=CMB-Stahlschaufel item.cmb_sword.name=CMB-Stahlschwert +item.coal_eternal.name=Ewige Kohle item.coal_infernal.name=Höllische Kohle item.cobalt_axe.name=Kobaltaxt item.cobalt_boots.name=Kobaltstiefel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ae818935f..e38e9fc4a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2526,6 +2526,7 @@ item.cmb_pickaxe.name=CMB Steel Pickaxe item.cmb_plate.name=CMB Steel Chestplate item.cmb_shovel.name=CMB Steel Shovel item.cmb_sword.name=CMB Steel Sword +item.coal_eternal.name=Eternal Coal item.coal_infernal.name=Infernal Coal item.cobalt_axe.name=Cobalt Axe item.cobalt_boots.name=Cobalt Boots diff --git a/src/main/resources/assets/hbm/manual/material/etcoal.json b/src/main/resources/assets/hbm/manual/material/etcoal.json new file mode 100644 index 000000000..3bcdda69c --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/etcoal.json @@ -0,0 +1,11 @@ +{ + "name": "Eternal Coal", + "icon": ["hbm:item.nothing"], + "trigger": [["hbm:item.coal_eternal"]], + "title": { + "en_US": "█ █ █ █ █ █" + }, + "content": { + "en_US": "████████████ ███ ███ ██ ████████ ████████ ██ ████ ████ ████████ ████ ██████████ █ ████ █████ ██████ ████████ ████ █████ ██ ██ ███ ██████" + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_2_wip.png b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_2_wip.png new file mode 100644 index 0000000000000000000000000000000000000000..ef10257b0423c839c4a2f030d10d3e213b98e42a GIT binary patch literal 373 zcmV-*0gC>KP)Pm#hKWQeSgCZ&59 zh5(I_R|F&|#gB~y{vGeg!}WUo0OXuWDUowVL{N({S}cT6X6Q%VJz4+4hhr}0xAj>qH2BZ`Ox0YV4`rJ8Q5&XiKo`F6Xpt}Cb0iFI9h zKA#4lO#mA2RMX;Vn&|tUZQHn9E{5v0YHHB{D^|PT@AelF6BPJTs72eeZQFi)B0}SN zFUw-VVHoT`&of=u{oF*1k;Wg6zOUDduIma)kH_N&y|@Fffzt8gdvtGYo$PfO#}R<@ z`ON$MwpA-gaY%j}9?4Vm>g!6I|B6*4 Date: Fri, 24 Jul 2026 17:50:32 +0200 Subject: [PATCH 43/50] and some other stuff --- .../blocks/generic/BlockForgottenBrick.java | 8 +++- .../recipes/AssemblyMachineRecipes.java | 16 +++++++ .../hbm/inventory/recipes/PUREXRecipes.java | 27 ++++++----- .../inventory/recipes/anvil/AnvilRecipes.java | 45 ++++++------------ src/main/java/com/hbm/main/NEIConfig.java | 3 ++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/textures/blocks/nr_stone.png | Bin 0 -> 789 bytes 8 files changed, 60 insertions(+), 43 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/nr_stone.png diff --git a/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java index cd06db25b..42bb95b16 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java +++ b/src/main/java/com/hbm/blocks/generic/BlockForgottenBrick.java @@ -26,6 +26,7 @@ public class BlockForgottenBrick extends BlockMulti { private IIcon iconHole; private IIcon iconEmpty; private IIcon iconPlanks; + private IIcon iconBricks; public static final int META_DEFAULT = 0; public static final int META_BW = 1; @@ -33,6 +34,7 @@ public class BlockForgottenBrick extends BlockMulti { public static final int META_HOLE = 3; public static final int META_HOLE_EMPTY = 4; public static final int META_NULLROOM_WOOD = 5; + public static final int META_NULLROOM_STONE = 6; public BlockForgottenBrick() { super(Material.rock); @@ -49,6 +51,7 @@ public class BlockForgottenBrick extends BlockMulti { this.iconHole = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_hole"); this.iconEmpty = reg.registerIcon(RefStrings.MODID + ":brick_forgotten_hole_empty"); this.iconPlanks = reg.registerIcon(RefStrings.MODID + ":nr_planks"); + this.iconBricks = reg.registerIcon(RefStrings.MODID + ":nr_stone"); } @Override @@ -73,6 +76,9 @@ public class BlockForgottenBrick extends BlockMulti { if(meta == META_NULLROOM_WOOD) { return this.iconPlanks; } + if(meta == META_NULLROOM_STONE) { + return this.iconBricks; + } if(side == 0 || side == 1) return this.iconTop; return this.blockIcon; @@ -94,7 +100,7 @@ public class BlockForgottenBrick extends BlockMulti { return false; } - @Override public int getSubCount() { return 6; } + @Override public int getSubCount() { return 7; } @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 4b34d1d84..a8d060ca2 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -30,6 +30,7 @@ import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; 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.ItemPileRodMK2.EnumPileRod; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.grenade.ItemGrenadeFuze.EnumGrenadeFuze; @@ -160,6 +161,21 @@ 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))); + // pile rods + String autoPileRod = "autoswitch.pilerod"; + this.register(new GenericRecipe("ass.pilepabe").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RA226BE.ordinal())) + .inputItems(new ComparableStack(ModItems.billet_ra226be, 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilepobe").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PO210BE.ordinal())) + .inputItems(new ComparableStack(ModItems.billet_po210be, 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilezr").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.ZR.ordinal())) + .inputItems(new OreDictStack(ZR.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilenu").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal())) + .inputItems(new OreDictStack(U.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilepu239").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal())) + .inputItems(new OreDictStack(PU239.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilergp").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RGP.ordinal())) + .inputItems(new OreDictStack(PURG.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + // powders String autoCyclotron = "autoswitch.cyclotron"; this.register(new GenericRecipe("ass.partlith").setup(40, 100).outputItems(new ItemStack(ModItems.part_lithium, 8)) diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 68f03ae6b..0aef690b3 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import net.minecraft.item.ItemStack; @@ -60,23 +61,25 @@ public class PUREXRecipes extends GenericRecipes { //CP-1 String autoPile = "autoswitch.pile"; - this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) - .inputItems(new ComparableStack(ModItems.pile_rod_plutonium)) + this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu239").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) + .inputItems(new ComparableStack(ModItems.pile_rod, 1, EnumPileRod.PU239)) + .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) + .outputItems(new ItemStack(ModItems.billet_pu239, 2), + new ItemStack(ModItems.billet_uranium, 1)) + .setIconToFirstIngredient()); + this.register((PUREXRecipe) new PUREXRecipe("purex.pilergp").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) + .inputItems(new ComparableStack(ModItems.pile_rod, 1, EnumPileRod.RGP)) .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) .outputItems(new ItemStack(ModItems.billet_pu_mix, 2), - new ItemStack(ModItems.billet_uranium, 1), - new ItemStack(ModItems.plate_iron, 2)) + new ItemStack(ModItems.billet_uranium, 1)) .setIconToFirstIngredient()); - - this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu239").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) - .inputItems(new ComparableStack(ModItems.pile_rod_pu239)) + this.register((PUREXRecipe) new PUREXRecipe("purex.pilewaste").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) + .inputItems(new ComparableStack(ModItems.pile_rod, 1, EnumPileRod.WASTE)) .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) - .outputItems(new ItemStack(ModItems.billet_pu239, 1), - new ItemStack(ModItems.billet_pu_mix, 1), - new ItemStack(ModItems.billet_uranium, 1), - new ItemStack(ModItems.plate_iron, 2)) + .outputItems(new ItemStack(ModItems.billet_nuclear_waste, 2), + new ItemStack(ModItems.billet_polonium, 1)) .setIconToFirstIngredient()); - + // ZIRNOX String autoZirnox = "autoswitch.zirnox"; this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) 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 0c98d5dc7..c5c3bd1da 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -25,6 +25,7 @@ import com.hbm.items.ModItems; import com.hbm.items.food.ItemFlask.EnumInfusion; import com.hbm.items.machine.ItemBatterySC.EnumBatterySC; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; +import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.util.Tuple.Pair; import net.minecraft.block.Block; @@ -846,30 +847,28 @@ public class AnvilRecipes extends SerializableRecipe { ).setTier(1)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_uranium), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_uranium, 3)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 2)) + new ComparableStack(ModItems.billet_ra226be, 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RA226BE.ordinal())), }).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_source), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_ra226be, 3)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 2)) + new ComparableStack(ModItems.billet_po210be, 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PO210BE.ordinal())), }).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_boron), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.ingot_boron, 2)), - new AnvilOutput(new ItemStack(Items.stick, 2)) + new OreDictStack(ZR.billet(), 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.ZR.ordinal())), }).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_detector), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.ingot_boron, 2)), - new AnvilOutput(new ItemStack(ModItems.motor, 1)), - new AnvilOutput(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE)) + new OreDictStack(U.billet(), 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal())), }).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_lithium), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.lithium, 1)), - new AnvilOutput(new ItemStack(ModItems.cell_empty, 1)) + new OreDictStack(PU239.billet(), 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal())), + }).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new OreDictStack(PURG.billet(), 3), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RGP.ordinal())), }).setTier(2)); //RBMK @@ -968,20 +967,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.circuit, 1, EnumCircuitType.BASIC.ordinal()), 0.5F), }).setTier(4)); - } else { - constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_plutonium), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_pu_mix, 2)), - new AnvilOutput(new ItemStack(ModItems.billet_nuclear_waste, 1)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 1)) - }).setTier(2)); - constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_pu239), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_pu239, 1)), - new AnvilOutput(new ItemStack(ModItems.billet_pu_mix, 1)), - new AnvilOutput(new ItemStack(ModItems.billet_nuclear_waste, 1)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 2)) - }).setTier(2)); } constructionRecipes.add(new AnvilConstructionRecipe( diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 68a296fd0..25f58dc2f 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -92,6 +92,9 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.conveyor_double)); API.hideItem(new ItemStack(ModBlocks.conveyor_triple)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten_lock)); + API.registerHighlightIdentifier(ModBlocks.plushie, new IHighlightHandler() { @Override public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { int x = mop.blockX; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index f558e61a4..501693dbc 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -137,6 +137,7 @@ ass.nitra=Nitra zu Munition autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item autoswitch.cyclotron=Zyklotron-Pulverkisten autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff +autoswitch.pilerod=Chicago-Pile-Brennstoff autoswitch.plate=Wiederaufbereitung Plattenbrennstoff autoswitch.plates=Metallplatten autoswitch.pwr=Wiederaufbereitung PWR-Brennstoff @@ -3981,6 +3982,7 @@ tile.brick_dungeon_flat.name=Berzelianitblock tile.brick_dungeon_tile.name=Berzelianitfliese tile.brick_fire.name=Schamottsteinziegel tile.brick_fire_stairs.name=Schamottsteintreppe +tile.brick_forgotten.name=Block tile.brick_jungle.name=Enargitziegel tile.brick_jungle_circle.name=Mechanistenzirkel tile.brick_jungle_cracked.name=Rissige Enargitziegel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e38e9fc4a..6491f3b64 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -192,6 +192,7 @@ ass.nitra=Nitra to Ammunition autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient autoswitch.cyclotron=Cyclotron Powder Boxes autoswitch.pile=Reprocessing Chicago Pile Rods +autoswitch.pilerod=Chicago Pile Rods autoswitch.plate=Reprocessing Plate Fuel autoswitch.plates=Metal Plates autoswitch.pwr=Reprocessing PWR Fuel @@ -5196,6 +5197,7 @@ tile.brick_dungeon_flat.name=Berzelianite Block tile.brick_dungeon_tile.name=Berzelianite Tile tile.brick_fire.name=Firebricks tile.brick_fire_stairs.name=Firebrick Stairs +tile.brick_forgotten.name=Block tile.brick_jungle.name=Enargite Bricks tile.brick_jungle_circle.name=Mechanist's Circle tile.brick_jungle_cracked.name=Cracked Enargite Bricks diff --git a/src/main/resources/assets/hbm/textures/blocks/nr_stone.png b/src/main/resources/assets/hbm/textures/blocks/nr_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..609c9a76650f411aac722ff5a4cf399e6690f1bd GIT binary patch literal 789 zcmV+w1M2*VP)rJ*q$V$6VgE1g3?^7N}z5kb;$>?iX=?Io{RPRogTT{eB-~3|W>D$1y9t!Wzq--D5Nw z0U(56u~=ZOWjGvieSJ;GIY(KRBuPRL1SCm9_idMU(1H&?|NF_TngO7-rq}DSuGZvv zj_><)zCC>7cm5lI$EQc+Tgjt&43J#hB zk|d!Q_Yg*qrYYZ(?=*fx$6AY0ic*xgXGi^1vo%|yEMgb$5JqsTZkdD=ek4CQ3Xkab z`$Pv3JV58>=H^A9dc+Go+`uvQr#w^-c$G&>i-(6oF&>OjN|B~1byzbS&FGw;pOZi3 zAYe9{u?&{D#_?XgC;2Dg;^Kn4><-U(Y_l!BevdwVq?8CD=qwfswALIR9&&eg$Hsrj zGYAG0ML|_nq*;p8l0p^eT*E%B*J}WLAq4GlOPZ!Ar5NfVGL*z|%wRA;DTPuBYb{;V zWf$*o&i#?zS*aB$Xl2VZm}0FZ&vUA(`g7h?Ou4dvXF~)!Z8B20M=iTrft!pvH z-~z{&voAzZgfWKG(J25Q4?p5pKEct^(cin>j;zQKzQE=d&+~ZQf6cO4vM=}f`tMf) z6QH#w%QBpE%;$5qc8hm;dD#M3Ybk9B1^_IUHfU*O%S2CJI3>ncS2| T&W(I)00000NkvXXu0mjf6`gTv literal 0 HcmV?d00001 From a2c57089afefbdb844b834f1b198869a8de93506 Mon Sep 17 00:00:00 2001 From: absolute idiot <174307533+churginator@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:28:08 -0400 Subject: [PATCH 44/50] pee dubya arr --- .../com/hbm/tileentity/machine/TileEntityPWRController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 4ecf97689..391df724b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -655,6 +655,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG PREFIX_VALUE + "rods", PREFIX_VALUE + "coreheat", PREFIX_VALUE + "hullheat", + PREFIX_VALUE + "coldbuf", + PREFIX_VALUE + "hotbuf", PREFIX_VALUE + "flux", PREFIX_VALUE + "depletion", PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent", @@ -671,6 +673,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG if((PREFIX_VALUE + "rods").equals(name)) return "" + (int) (100 - this.rodLevel); // why the fuck did i invert this again? if((PREFIX_VALUE + "coreheat").equals(name)) return "" + this.coreHeat; if((PREFIX_VALUE + "hullheat").equals(name)) return "" + this.hullHeat; + if((PREFIX_VALUE + "coldbuf").equals(name)) return "" + this.tanks[0].getFill(); + if((PREFIX_VALUE + "hotbuf").equals(name)) return "" + this.tanks[1].getFill(); if((PREFIX_VALUE + "flux").equals(name)) return "" + (int) this.flux; if((PREFIX_VALUE + "depletion").equals(name)) return "" + (int) (this.progress * 100 / this.processTime); return null; From 6d289ccfd890b5a8486d601c842eb17260e04c52 Mon Sep 17 00:00:00 2001 From: polyvus Date: Sat, 25 Jul 2026 12:20:57 +0200 Subject: [PATCH 45/50] Delete src/main/resources/assets/hbm/structures/tower_base.nbt Need a slight tweak --- .../assets/hbm/structures/tower_base.nbt | Bin 6846 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt deleted file mode 100644 index f2af67a08ce17afa06ce01502a783bb568ce5ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6846 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 sA1eE}mg Date: Sat, 25 Jul 2026 12:21:53 +0200 Subject: [PATCH 46/50] slight tweak --- .../assets/hbm/structures/tower_base.nbt | Bin 0 -> 6855 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7f5f27a5ec247aeca2b24ce77d052120439a26d8 GIT binary patch literal 6855 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 literal 0 HcmV?d00001 From 05b57df2213ed5a659392e375360aa5eedf7bb20 Mon Sep 17 00:00:00 2001 From: polyvus Date: Sat, 25 Jul 2026 12:25:34 +0200 Subject: [PATCH 47/50] Delete src/main/resources/assets/hbm/structures/tower_base.nbt didn't use the right fucking file --- .../assets/hbm/structures/tower_base.nbt | Bin 6855 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt deleted file mode 100644 index 7f5f27a5ec247aeca2b24ce77d052120439a26d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6855 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 From 23ed29e64b04d6320f9a50b18efc63323f8de90c Mon Sep 17 00:00:00 2001 From: polyvus Date: Sat, 25 Jul 2026 12:26:43 +0200 Subject: [PATCH 48/50] finally --- .../assets/hbm/structures/tower_base.nbt | Bin 0 -> 6857 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt new file mode 100644 index 0000000000000000000000000000000000000000..79cb1d87869c34ed4bfdda5ac489b8d881d04545 GIT binary patch literal 6857 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 Date: Sat, 25 Jul 2026 14:43:38 +0200 Subject: [PATCH 49/50] can someone test this crap i think we're done here --- .../recipes/AssemblyMachineRecipes.java | 4 ++-- src/main/java/com/hbm/main/NEIConfig.java | 6 ++++-- src/main/java/com/hbm/qmaw/QMAWLoader.java | 4 ++++ .../java/com/hbm/qmaw/QuickManualAndWiki.java | 10 +++++++++- .../machine/pile/TileEntityPileCore.java | 15 +++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../assets/hbm/manual/material/etcoal.json | 3 ++- .../resources/assets/hbm/manual/pile/pile.json | 12 ++++++++++++ .../assets/hbm/manual/pile/pilecontrol.json | 12 ++++++++++++ .../assets/hbm/manual/pile/pileloader.json | 12 ++++++++++++ .../assets/hbm/manual/pile/pileop.json | 12 ++++++++++++ .../assets/hbm/manual/pile/pilevent.json | 12 ++++++++++++ .../assets/hbm/textures/items/clay_tablet.png | Bin 227 -> 286 bytes 13 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/hbm/manual/pile/pile.json create mode 100644 src/main/resources/assets/hbm/manual/pile/pilecontrol.json create mode 100644 src/main/resources/assets/hbm/manual/pile/pileloader.json create mode 100644 src/main/resources/assets/hbm/manual/pile/pileop.json create mode 100644 src/main/resources/assets/hbm/manual/pile/pilevent.json diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index a8d060ca2..ad06c04d4 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -167,8 +167,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.billet_ra226be, 3)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilepobe").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PO210BE.ordinal())) .inputItems(new ComparableStack(ModItems.billet_po210be, 3)).setGroup(autoPileRod, INSTANCE)); - this.register(new GenericRecipe("ass.pilezr").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.ZR.ordinal())) - .inputItems(new OreDictStack(ZR.billet(), 3)).setGroup(autoPileRod, INSTANCE)); + this.register(new GenericRecipe("ass.pilezr").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 3, EnumPileRod.ZR.ordinal())) + .inputItems(new OreDictStack(ZR.billet(), 1)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilenu").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal())) .inputItems(new OreDictStack(U.billet(), 3)).setGroup(autoPileRod, INSTANCE)); this.register(new GenericRecipe("ass.pilepu239").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal())) diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 25f58dc2f..7cc44b3fc 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -25,6 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; import java.util.List; @@ -92,8 +93,9 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.conveyor_double)); API.hideItem(new ItemStack(ModBlocks.conveyor_triple)); - API.hideItem(new ItemStack(ModBlocks.brick_forgotten)); - API.hideItem(new ItemStack(ModBlocks.brick_forgotten_lock)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten, 1, OreDictionary.WILDCARD_VALUE)); + API.hideItem(new ItemStack(ModBlocks.brick_forgotten_lock, 1, OreDictionary.WILDCARD_VALUE)); + API.hideItem(new ItemStack(ModItems.coal_eternal)); API.registerHighlightIdentifier(ModBlocks.plushie, new IHighlightHandler() { @Override public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index 6e4aeec31..fbcea7522 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -217,6 +217,10 @@ public class QMAWLoader implements IResourceManagerReloadListener { QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); } } + + if(json.has("noindex") && json.get("noindex").getAsBoolean()) { + qmaw.noIndex(); + } 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 f961cd2fe..ed7b20a9e 100644 --- a/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java +++ b/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java @@ -5,10 +5,13 @@ import java.util.HashMap; import net.minecraft.item.ItemStack; public class QuickManualAndWiki { - + public String name; public ItemStack icon; + /** Removes this manual from the calculator search feature */ + public boolean noIndex = false; + public HashMap title = new HashMap(); public HashMap contents = new HashMap(); @@ -30,4 +33,9 @@ public class QuickManualAndWiki { this.contents.put(lang, contents); return this; } + + public QuickManualAndWiki noIndex() { + this.noIndex = true; + return this; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index cc4c137fb..7b368780b 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -182,6 +182,7 @@ public class TileEntityPileCore extends TileEntityTickingBase { for(int i = 0; i < list.size(); i++) { PileChannel chan = list.get(i); if(chan.entry.compare(x, y, z) && chan.entry.getDir() == dir) { + if(chan.type == chan.type.FUEL) chan.ejectAll(); list.remove(i); for(int j = 0; j < size; j++) { int iX = x + dir.offsetX * j; @@ -250,6 +251,12 @@ public class TileEntityPileCore extends TileEntityTickingBase { this.networkPackNT(25); } } + + @Override + public void invalidate() { + super.invalidate(); + for(PileChannel chan : this.fuelChannels) chan.ejectAll(); + } @Override public void serialize(ByteBuf buf) { @@ -535,7 +542,15 @@ public class TileEntityPileCore extends TileEntityTickingBase { if(stack != null) dropItem(stack, length); } + public void ejectAll() { + for(int i = 0; i < this.rods.length; i++) { + this.dropItem(rods[i], length); + this.rods[i] = null; + } + } + public void dropItem(ItemStack stack, int depth) { + if(stack == null) return; int x = entry.getX() + entry.getDir().offsetX * depth; int y = entry.getY(); int z = entry.getZ() + entry.getDir().offsetZ * depth; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6491f3b64..06542768a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3838,7 +3838,7 @@ item.pile_rod.rgp.desc=Reactor-grade plutonium rod, mainly plutonium-239 with pl item.pile_rod.waste.name=Chicago Pile Nuclear Waste Rod item.pile_rod.waste.desc=Highly reactive end product from leaving a Chicago Pile fuel rod in the reactor for too long. item.pile_rod.zr.name=Chicago Pile Zirconium Rod -item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for safely pushing other rods safely out of the reactor. +item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for pushing other rods safely out of the reactor. item.pile_rod_boron.name=Chicago Pile Control Rod item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle item.pile_rod_detector.name=Chicago Pile Control & Detector Rod diff --git a/src/main/resources/assets/hbm/manual/material/etcoal.json b/src/main/resources/assets/hbm/manual/material/etcoal.json index 3bcdda69c..b247f658c 100644 --- a/src/main/resources/assets/hbm/manual/material/etcoal.json +++ b/src/main/resources/assets/hbm/manual/material/etcoal.json @@ -2,10 +2,11 @@ "name": "Eternal Coal", "icon": ["hbm:item.nothing"], "trigger": [["hbm:item.coal_eternal"]], + "noindex": true, "title": { "en_US": "█ █ █ █ █ █" }, "content": { - "en_US": "████████████ ███ ███ ██ ████████ ████████ ██ ████ ████ ████████ ████ ██████████ █ ████ █████ ██████ ████████ ████ █████ ██ ██ ███ ██████" + "en_US": "████████████ ███ ███ ██ ████████ ████████ ██ ████ ████ ████████ ████ ███ ███████ █ ████ █████ ██████ ███████ █ ████ █████ ██ ██ ███ ██████" } } diff --git a/src/main/resources/assets/hbm/manual/pile/pile.json b/src/main/resources/assets/hbm/manual/pile/pile.json new file mode 100644 index 000000000..a5ddf27f9 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pile.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile", + "icon": ["hbm:tile.pile_brick", 1, 0], + "trigger": [["hbm:tile.pile_brick"]], + "title": { + "en_US": "Chicago Pile" + }, + "content": { + "en_US": "The Chcago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].

The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.

To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.

Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.

Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.

Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, since the window for extracting pure plutonium-239 is quite small.
<>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.

See also:
* [[Chicago Pile Operation]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pilecontrol.json b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json new file mode 100644 index 000000000..ee4b473da --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Control Rod", + "icon": ["hbm:tile.pile_device", 1, 2], + "trigger": [["hbm:tile.pile_device", 1, 2]], + "title": { + "en_US": "Chicago Pile Control Rod" + }, + "content": { + "en_US": "Control rods can be placed on top of the vertically drilled channels of the [[Chicago Pile]]. Control rods, when inserted, will reduce the reactivity between fuel channels. The control rods can be controlled with a redstone signal, causing it to fully withdraw when a signal is supplied, or via [[RoR controller|Redstone-over-Radio Controller]], which allows more precise settings.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Vent]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pileloader.json b/src/main/resources/assets/hbm/manual/pile/pileloader.json new file mode 100644 index 000000000..854f9ebf4 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pileloader.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Fuel Loader", + "icon": ["hbm:tile.pile_device", 1, 0], + "trigger": [["hbm:tile.pile_device", 1, 0]], + "title": { + "en_US": "Chicago Pile Fuel Loader" + }, + "content": { + "en_US": "The fuel loader is required to load [[Chicago Pile]] fuel rods into the Pile's fuel channels. Right-clicking with a fuel rod will insert that rod into the loader, and right-clicking again will load it into the Pile manually. Fuel can also be supplied using hoppers or conveyors, and the loading action can be triggered by supplying a redstone signal to the loader's back side (where the light grey circle is).

Additionally, the loader can relay information about the connected channel to the [[RoR reader|Redstone-over-Radio Reader]], like the type (metadata) and depletion of the backmost loaded fuel rod or the channel's current temperature.

See also:
* [[Chicago Pile Vent]]
* [[Chicago Pile Control Rod]]" + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pileop.json b/src/main/resources/assets/hbm/manual/pile/pileop.json new file mode 100644 index 000000000..ed9937519 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pileop.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Operation", + "icon": ["hbm:tile.pile_brick", 1, 0], + "trigger": [], + "title": { + "en_US": "Chicago Pile Operation" + }, + "content": { + "en_US": "The [[Chicago Pile]] requires at least one fuel channel with some sort of neutron source, being radium-226-beryllium or polonium-210-beryllium rods. It's safest and easiest to simply have one fuel channel dedicated to the neutron sources, although mixing neutron sources in with the regular fuel is also an option. [[Ventilation|Chicago Pile Vent]] is also required before actually using fuel, the amount of compressed air used over time is static no matter how hot the reactor is, so doing a dry-run to see if the [[compressor|Compressor]] setup is sufficient is recommended.

Once ventilation and neutron sources are in place, fuel can be added, usually in the form of natural uranium which is bred into plutonium-239. The [[fuel loader|Chicago Pile Fuel Loader]] will only load one rod at a time, simply load as many rods as the channel can hold. Any extra rod loaded will cause the last rod in the channel to be pushed out the other end, where it can be collected with a hopper.

The supplied fuel will be bred as long as its in the reactor. Pu-239 can also be bred into RGP, which can be further bred into nuclear waste. Therefore, leaving fuel in the reactor for too long is undesirable. For this, the fuel loader can be read with an [[RoR reader|Redstone-over-Radio Reader]], which will report the fuel's lifetime and current type in the form of the numeric metadata of the item. For example, Plutonium-239 rods have a meta of 4. Using an [[RoR logic receiver|Redstone-over-Radio Logic Receiver]], this meta can be detected, causing a redstone signal to be sent to the fuel loader, pushing that fuel rod out.

It is not only desirable to eject the fuel in time due to the purity, but also because nuclear waste has a high heat output, which might destroy Piles not prepared for it. If no new fuel is available and the existing loaded fuel is intended to be ejected, rods made from zirconium are ideal, since they are cheap, inert, and transparent to neutrons, not adding any heat while not interfering with the Pile's reaction either.

In an emergency, should the Pile overheat, it will catch fire, explode, and eject many flaming graphite bricks which also explode into fire, setting the surroundings ablaze. It is recommended to keep the Pile in a small room, away from flammable material, and to keep a fire extinguisher nearby.

For people who want to make the most out of their fuel, using [[RoR controllers|Redstone-over-Radio Controller]] to adjust the control rod settings automatically may be desirable. Especially in larger setups, control rods are important to prevent the Pile from quickly overheating, and having an adaptive system controlled either by RoR logic receivers or an [[AUTOCAL]] unit can allow the Pile to run reasonably hot without exploding." + } +} + diff --git a/src/main/resources/assets/hbm/manual/pile/pilevent.json b/src/main/resources/assets/hbm/manual/pile/pilevent.json new file mode 100644 index 000000000..8b6b619b1 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/pile/pilevent.json @@ -0,0 +1,12 @@ +{ + "name": "Chicago Pile Vent", + "icon": ["hbm:tile.pile_device", 1, 1], + "trigger": [["hbm:tile.pile_device", 1, 1]], + "title": { + "en_US": "Chicago Pile Vent" + }, + "content": { + "en_US": "The vent is needed to insert compressed air at 1 PU into the [[Chicago Pile's|Chicago Pile]] ventilation channels. Due to the pressure requirement, each Pile therefore needs at least one [[compressor|Compressor]]. Hot air will harmlessly exit the Pile at the output side of the ventilation channel.

The vent's cooling effect only applies to fuel channels that touch the ventilation channel, or rather, fuel channels exactly one block above and below that ventilation channel. Without sufficient cooling, the channel will surpass 800°C, causing the highly-flammable graphite bricks to ignite, forcefully disassembling the Pile.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Control Rod]]" + } +} + diff --git a/src/main/resources/assets/hbm/textures/items/clay_tablet.png b/src/main/resources/assets/hbm/textures/items/clay_tablet.png index 640d51e220841cd9c74beef64abc1ba2a0ca2c20..d3ce9e6a980aa7efab4bcf17e21b35828a97e9d3 100644 GIT binary patch delta 242 zcmVaFB#>_(t6lQ)Ie_?@-5GZ0^MIcpqYI)iXw}_uJtUv^;Dh6Okgo@}yMqA$ z^ZtXTu14=uGwTyF7Lc((Q&*6&Ae?F015sTe3WIjau`F^dmTN15_s8>i1sMx4?rV1d z1T*dh?D7zmU_ sjXDGi9Y{ez6`*A67XfQ!~g&Q07*qoM6N<$f^!#bD*ylh delta 183 zcmV;o07(Cy0^pF%8nE15C8yOiG z7#LX472Lgj1BI=ussR^MR@J~T6vF^zRSgU_vKTsGLU%sQw!61)z%eo(-IX|9fNm=; zS1_U5j>{%wv7IMw!UG@01^8@r^A5xsEATK-R?|e)jK;rv>o7WlvYIA}?FY%l--002ovPDHLkV1ii@Ohf Date: Sat, 25 Jul 2026 19:21:26 +0200 Subject: [PATCH 50/50] the boys! the boys! the boys! the boys! the boys! the boys! the boys! --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../hbm/blocks/machine/MachineSatLink.java | 84 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/render/tileentity/RenderSatLink.java | 77 + .../com/hbm/saveddata/SatelliteSavedData.java | 58 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineSatLink.java | 120 ++ .../assets/hbm/models/machines/satlink.obj | 1520 +++++++++++++++++ .../hbm/textures/models/machines/satlink.png | Bin 0 -> 3335 bytes 10 files changed, 1838 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineSatLink.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderSatLink.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLink.java create mode 100644 src/main/resources/assets/hbm/models/machines/satlink.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/satlink.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d143d9bd8..d8d83ad42 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1021,6 +1021,8 @@ public class ModBlocks { public static Block machine_radgen; public static Block machine_satlinker; + public static Block machine_satlink; + public static Block machine_keyforge; public static Block machine_armor_table; @@ -1938,6 +1940,7 @@ public class ModBlocks { machine_transformer = new MachineTransformer(Material.iron).setBlockName("machine_transformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer_iron"); 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_satlink = new MachineSatLink().setBlockName("machine_satlink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_keyforge = new MachineKeyForge(Material.iron).setBlockName("machine_keyforge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":machine_keyforge_side"); machine_armor_table = new BlockArmorTable(Material.iron).setBlockName("machine_armor_table").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab); machine_weapon_table = new BlockWeaponTable().setBlockName("machine_weapon_table").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab); @@ -3292,6 +3295,7 @@ public class ModBlocks { GameRegistry.registerBlock(teleanchor, teleanchor.getUnlocalizedName()); GameRegistry.registerBlock(field_disturber, field_disturber.getUnlocalizedName()); GameRegistry.registerBlock(machine_satlinker, machine_satlinker.getUnlocalizedName()); + register(machine_satlink); GameRegistry.registerBlock(machine_keyforge, machine_keyforge.getUnlocalizedName()); GameRegistry.registerBlock(machine_armor_table, machine_armor_table.getUnlocalizedName()); GameRegistry.registerBlock(machine_weapon_table, machine_weapon_table.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/MachineSatLink.java b/src/main/java/com/hbm/blocks/machine/MachineSatLink.java new file mode 100644 index 000000000..443778855 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineSatLink.java @@ -0,0 +1,84 @@ +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.items.ISatChip; +import com.hbm.main.NTMSounds; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachineSatLink; +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.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +public class MachineSatLink extends BlockDummyable implements ILookOverlay { + + public MachineSatLink() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineSatLink(); + if(meta >= 6) return new TileEntityProxyCombo(); + return null; + } + + @Override public int[] getDimensions() { return new int[] {6, 0, 1, 0, 1, 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) { + + if(!world.isRemote && !player.isSneaking()) { + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ISatChip) { + + 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 TileEntityMachineSatLink)) return false; + + TileEntityMachineSatLink link = (TileEntityMachineSatLink) te; + + link.freq = ISatChip.getFreqS(player.getHeldItem()); + player.addChatComponentMessage(new ChatComponentText("Set frequency to " + link.freq).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + world.playSoundAtEntity(player, NTMSounds.TECH_BLEEP, 1F, 1F); + + return true; + } + return false; + + } else { + 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 TileEntityMachineSatLink)) return; + + TileEntityMachineSatLink link = (TileEntityMachineSatLink) te; + + List text = new ArrayList(); + text.add("Freq: " + link.freq); + text.add("Connected: " + (link.connected ? (EnumChatFormatting.GREEN + "Yes") : (EnumChatFormatting.RED + "No"))); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 71d29a399..e20c75122 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -301,6 +301,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadarNT.class, new RenderRadar()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadarLarge.class, new RenderRadarLarge()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadarScreen.class, new RenderRadarScreen()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineSatLink.class, new RenderSatLink()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityReactorResearch.class, new RenderSmallReactor()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTesla.class, new RenderTesla()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBarrel.class, new RenderFluidBarrel()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 5164c34f8..5fc7aa957 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -272,6 +272,7 @@ public class ResourceManager { public static final IModelCustom radar = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/radar.obj")).noSmooth().asVBO(); public static final IModelCustom radar_large = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/radar_large.obj")).noSmooth().asVBO(); public static final IModelCustom radar_screen = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/radar_screen.obj")).noSmooth().asVBO(); + public static final IModelCustom satlink = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/satlink.obj")).noSmooth().asVBO(); //Forcefield public static final IModelCustom forcefield_top = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/forcefield_top.obj")); @@ -747,6 +748,7 @@ public class ResourceManager { public static final ResourceLocation radar_dish_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/radar_dish.png"); public static final ResourceLocation radar_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/radar_large.png"); public static final ResourceLocation radar_screen_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/radar_screen.png"); + public static final ResourceLocation satlink_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/satlink.png"); //Forcefield public static final ResourceLocation forcefield_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/forcefield_base.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderSatLink.java b/src/main/java/com/hbm/render/tileentity/RenderSatLink.java new file mode 100644 index 000000000..5698a1736 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderSatLink.java @@ -0,0 +1,77 @@ +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.TileEntityMachineSatLink; + +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; +import net.minecraftforge.common.util.ForgeDirection; + +public class RenderSatLink 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_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glRotatef(180, 0F, 1F, 0F); + + TileEntityMachineSatLink link = (TileEntityMachineSatLink) tile; + + ForgeDirection dir = ForgeDirection.getOrientation(tile.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + GL11.glTranslated((dir.offsetX + rot.offsetX) * 0.5, 0, (dir.offsetZ + rot.offsetZ) * 0.5); + + float r = link.prevRot + (link.rot - link.prevRot) * interp; + float l = link.prevLift + (link.lift - link.prevLift) * interp; + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.satlink_tex); + ResourceManager.satlink.renderPart("Base"); + GL11.glRotated(r, 0, 1, 0); + ResourceManager.satlink.renderPart("Rotor"); + GL11.glTranslated(0, 7.375, 0); + GL11.glRotated(l, 0, 0, 1); + GL11.glTranslated(0, -7.375, 0); + ResourceManager.satlink.renderPart("Dish"); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_satlink); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -5, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.satlink_tex); + ResourceManager.satlink.renderPart("Base"); + GL11.glRotated(15, 0, 1, 0); + ResourceManager.satlink.renderPart("Rotor"); + GL11.glTranslated(0, 7.375, 0); + GL11.glRotated(-45, 0, 0, 1); + GL11.glTranslated(0, -7.375, 0); + ResourceManager.satlink.renderPart("Dish"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java index a0dd2a624..2ced0842d 100644 --- a/src/main/java/com/hbm/saveddata/SatelliteSavedData.java +++ b/src/main/java/com/hbm/saveddata/SatelliteSavedData.java @@ -23,18 +23,18 @@ public class SatelliteSavedData extends WorldSavedData { /** * Default constructor for satellites map data. */ - public SatelliteSavedData() { - super("satellites"); - this.markDirty(); - } - - public boolean isFreqTaken(int freq) { - return getSatFromFreq(freq) != null; - } - - public Satellite getSatFromFreq(int freq) { - return sats.get(freq); - } + public SatelliteSavedData() { + super("satellites"); + this.markDirty(); + } + + public boolean isFreqTaken(int freq) { + return getSatFromFreq(freq) != null; + } + + public Satellite getSatFromFreq(int freq) { + return sats.get(freq); + } @Override public void readFromNBT(NBTTagCompound nbt) { @@ -53,28 +53,28 @@ public class SatelliteSavedData extends WorldSavedData { @Override public void writeToNBT(NBTTagCompound nbt) { nbt.setInteger("satCount", sats.size()); - + int i = 0; - for(Entry struct : sats.entrySet()) { - NBTTagCompound data = new NBTTagCompound(); - struct.getValue().writeToNBT(data); - - nbt.setInteger("sat_id_" + i, struct.getValue().getID()); - nbt.setTag("sat_data_" + i, data); - nbt.setInteger("sat_freq_" + i, struct.getKey()); + for(Entry struct : sats.entrySet()) { + NBTTagCompound data = new NBTTagCompound(); + struct.getValue().writeToNBT(data); + + nbt.setInteger("sat_id_" + i, struct.getValue().getID()); + nbt.setTag("sat_data_" + i, data); + nbt.setInteger("sat_freq_" + i, struct.getKey()); i++; - } + } } public static SatelliteSavedData getData(World worldObj) { - SatelliteSavedData data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); - if(data == null) { - worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData()); - - data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); - } - - return data; + SatelliteSavedData data = (SatelliteSavedData) worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); + if(data == null) { + worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData()); + + data = (SatelliteSavedData) worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites"); + } + + return data; } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index ad13bb825..560761911 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -133,6 +133,7 @@ public class TileMappings { put(TileEntityMachineRadarScreen.class, "tileentity_radar_screen"); put(TileEntityBroadcaster.class, "tileentity_pink_cloud_broadcaster"); put(TileEntityMachineSatLinker.class, "tileentity_satlinker"); + put(TileEntityMachineSatLink.class, "tileentity_satlink"); put(TileEntityReactorResearch.class, "tileentity_small_reactor"); put(TileEntityVaultDoorMigration.class, "tileentity_vault_door"); put(TileEntityRadiobox.class, "tileentity_radio_broadcaster"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLink.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLink.java new file mode 100644 index 000000000..e327f1dac --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLink.java @@ -0,0 +1,120 @@ +package com.hbm.tileentity.machine; + +import com.hbm.saveddata.SatelliteSavedData; +import com.hbm.tileentity.TileEntityTickingBase; + +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityMachineSatLink extends TileEntityTickingBase implements IRORValueProvider, IRORInteractive { + + public boolean connected; + public int freq; + + public float rot = INACTIVE_ROT; + public float prevRot = INACTIVE_ROT; + public float lift = INACTIVE_LIFT; + public float prevLift = INACTIVE_LIFT; + + public static final float SPEED = 0.25F; + public static final float ACTIVE_ROT = -15F; + public static final float ACTIVE_LIFT = -45F; + public static final float INACTIVE_ROT = 0F; + public static final float INACTIVE_LIFT = -85F; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + this.connected = false; + + if(worldObj.getHeightValue(xCoord, zCoord) <= yCoord) { + + SatelliteSavedData dat = SatelliteSavedData.getData(worldObj); + this.connected = dat.isFreqTaken(freq); + } + + this.networkPackNT(150); + + } else { + + this.prevRot = this.rot; + this.prevLift = this.lift; + + float targetR = this.connected ? ACTIVE_ROT : INACTIVE_ROT; + float targetL = this.connected ? ACTIVE_LIFT : INACTIVE_LIFT; + + if(Math.abs(rot - targetR) <= SPEED) rot = targetR; + else if(rot < targetR) rot += SPEED; + else if(rot > targetR) rot -= SPEED; + + if(Math.abs(lift - targetL) <= SPEED) lift = targetL; + else if(lift < targetL) lift += SPEED; + else if(lift > targetL) lift -= SPEED; + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(connected); + buf.writeInt(freq); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.connected = buf.readBoolean(); + this.freq = buf.readInt(); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 2, + yCoord, + zCoord - 2, + xCoord + 3, + yCoord + 10, + zCoord + 3 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "connected", + PREFIX_VALUE + "freq", + PREFIX_VALUE + "rx", + PREFIX_FUNCTION + "setfreq" + NAME_SEPARATOR + "freq", + PREFIX_FUNCTION + "tx" + NAME_SEPARATOR + "payload" + }; + } + + @Override + public String provideRORValue(String name) { + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + return null; + } +} diff --git a/src/main/resources/assets/hbm/models/machines/satlink.obj b/src/main/resources/assets/hbm/models/machines/satlink.obj new file mode 100644 index 000000000..3da21b552 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/satlink.obj @@ -0,0 +1,1520 @@ +# Blender v2.79 (sub 0) OBJ File: 'satlink.blend' +# www.blender.org +o Rotor +v -0.125000 7.000000 0.250000 +v -0.250000 7.000000 0.125000 +v 0.250000 7.000000 0.125000 +v 0.125000 7.000000 0.250000 +v -0.250000 7.000000 -0.125000 +v -0.125000 7.000000 -0.250000 +v 0.125000 7.000000 -0.250000 +v 0.250000 7.000000 -0.125000 +v -0.125000 7.125000 -0.250000 +v -0.250000 7.125000 -0.125000 +v -0.250000 7.125000 0.125000 +v -0.125000 7.125000 0.250000 +v 0.125000 7.125000 0.250000 +v 0.250000 7.125000 0.125000 +v 0.250000 7.125000 -0.125000 +v 0.125000 7.125000 -0.250000 +v 0.125000 7.125000 0.250000 +v -0.125000 7.125000 0.250000 +v -0.125000 7.125000 0.125000 +v 0.125000 7.125000 0.125000 +v 0.125000 7.500000 0.125000 +v -0.125000 7.500000 0.125000 +v 0.125000 7.500000 0.250000 +v -0.125000 7.500000 0.250000 +v 0.125000 7.125000 -0.125000 +v -0.125000 7.125000 -0.125000 +v -0.125000 7.125000 -0.250000 +v 0.125000 7.125000 -0.250000 +v 0.125000 7.500000 -0.250000 +v -0.125000 7.500000 -0.250000 +v 0.125000 7.500000 -0.125000 +v -0.125000 7.500000 -0.125000 +vt 0.538462 0.022222 +vt 0.576923 0.044444 +vt 0.564103 0.111111 +vt 0.564103 0.000000 +vt 0.538462 0.000000 +vt 0.589744 0.088889 +vt 0.589744 0.044444 +vt 0.512821 0.044444 +vt 0.525641 0.088889 +vt 0.512821 0.088889 +vt 0.576923 0.133333 +vt 0.564103 0.133333 +vt 0.576923 0.022222 +vt 0.564103 0.022222 +vt 0.525641 0.000000 +vt 0.538462 0.133333 +vt 0.525641 0.111111 +vt 0.538462 0.111111 +vt 0.602564 -0.000000 +vt 0.589744 0.066667 +vt 0.589744 -0.000000 +vt 0.666667 -0.000000 +vt 0.641026 0.066667 +vt 0.641026 -0.000000 +vt 0.602564 -0.000000 +vt 0.589744 0.066667 +vt 0.589744 -0.000000 +vt 0.628205 -0.000000 +vt 0.602564 0.066667 +vt 0.628205 0.066667 +vt 0.602564 0.088889 +vt 0.602564 0.066667 +vt 0.628205 0.066667 +vt 0.641026 -0.000000 +vt 0.628205 -0.000000 +vt 0.602564 0.088889 +vt 0.666667 -0.000000 +vt 0.641026 0.066667 +vt 0.525641 0.044444 +vt 0.576923 0.088889 +vt 0.576923 0.111111 +vt 0.576923 0.000000 +vt 0.525641 0.022222 +vt 0.525641 0.133333 +vt 0.666667 0.066667 +vt 0.628205 0.088889 +vt 0.628205 0.088889 +vt 0.666667 0.066667 +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.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 -1.0000 0.0000 0.0000 +s off +f 14/1/1 16/2/1 10/3/1 +f 8/4/2 14/1/2 3/5/2 +f 6/6/3 16/2/3 7/7/3 +f 4/8/4 12/9/4 1/10/4 +f 10/3/5 6/11/5 5/12/5 +f 8/4/6 16/13/6 15/14/6 +f 14/1/7 4/15/7 3/5/7 +f 2/16/8 12/17/8 11/18/8 +f 2/16/9 10/3/9 5/12/9 +f 26/19/9 30/20/9 27/21/9 +f 19/22/3 21/23/3 20/24/3 +f 18/25/9 22/26/9 19/27/9 +f 17/28/4 24/29/4 18/25/4 +f 31/30/1 30/31/1 32/32/1 +f 20/24/2 23/33/2 17/28/2 +f 28/34/2 31/30/2 25/35/2 +f 23/33/1 22/36/1 24/29/1 +f 27/37/3 29/38/3 28/34/3 +f 25/35/4 32/32/4 26/19/4 +f 10/3/1 11/18/1 12/9/1 +f 12/9/1 13/39/1 14/1/1 +f 14/1/1 15/14/1 16/2/1 +f 16/2/1 9/40/1 10/3/1 +f 10/3/1 12/9/1 14/1/1 +f 8/4/2 15/14/2 14/1/2 +f 6/6/3 9/40/3 16/2/3 +f 4/8/4 13/39/4 12/9/4 +f 10/3/5 9/41/5 6/11/5 +f 8/4/6 7/42/6 16/13/6 +f 14/1/7 13/43/7 4/15/7 +f 2/16/8 1/44/8 12/17/8 +f 2/16/9 11/18/9 10/3/9 +f 26/19/9 32/32/9 30/20/9 +f 19/22/3 22/45/3 21/23/3 +f 18/25/9 24/29/9 22/26/9 +f 17/28/4 23/33/4 24/29/4 +f 31/30/1 29/46/1 30/31/1 +f 20/24/2 21/23/2 23/33/2 +f 28/34/2 29/38/2 31/30/2 +f 23/33/1 21/47/1 22/36/1 +f 27/37/3 30/48/3 29/38/3 +f 25/35/4 31/30/4 32/32/4 +o Dish +v 0.000000 7.625000 -0.125000 +v 0.000000 7.625000 0.125000 +v 0.176777 7.551777 -0.125000 +v 0.176777 7.551777 0.125000 +v 0.250000 7.375000 -0.125000 +v 0.250000 7.375000 0.125000 +v 0.176777 7.198223 -0.125000 +v 0.176777 7.198223 0.125000 +v -0.000000 7.125000 -0.125000 +v -0.000000 7.125000 0.125000 +v -0.176777 7.198223 -0.125000 +v -0.176777 7.198223 0.125000 +v -0.250000 7.375000 -0.125000 +v -0.250000 7.375000 0.125000 +v -0.176777 7.551777 -0.125000 +v -0.176777 7.551777 0.125000 +v -0.125000 7.750000 0.093750 +v 0.125000 7.750000 0.093750 +v -0.125000 7.750000 -0.093750 +v 0.125000 7.750000 -0.093750 +v -0.125000 7.500000 -0.093750 +v -0.125000 7.500000 0.093750 +v 0.125000 7.500000 0.093750 +v 0.125000 7.500000 -0.093750 +v 0.000000 8.125000 -1.500000 +v -0.750000 8.125000 -1.299038 +v -1.299038 8.125000 -0.750000 +v -1.500000 8.125000 0.000000 +v -1.299038 8.125000 0.750000 +v -0.750000 8.125000 1.299038 +v -0.000000 8.125000 1.500000 +v 0.750000 8.125000 1.299038 +v 1.299038 8.125000 0.750000 +v 1.500000 8.125000 0.000001 +v 1.299039 8.125000 -0.749999 +v 0.750001 8.125000 -1.299038 +v 0.000000 7.750000 -0.750000 +v -0.375000 7.750000 -0.649519 +v -0.649519 7.750000 -0.375000 +v -0.750000 7.750000 0.000000 +v -0.649519 7.750000 0.375000 +v -0.375000 7.750000 0.649519 +v -0.000000 7.750000 0.750000 +v 0.375000 7.750000 0.649519 +v 0.649519 7.750000 0.375000 +v 0.750000 7.750000 0.000000 +v 0.649519 7.750000 -0.375000 +v 0.375000 7.750000 -0.649519 +v 0.000000 7.625000 0.000000 +v 0.000000 7.750000 -0.500000 +v -0.250000 7.750000 -0.433012 +v -0.433013 7.750000 -0.250000 +v -0.500000 7.750000 0.000000 +v -0.433013 7.750000 0.250000 +v -0.250000 7.750000 0.433013 +v -0.000000 7.750000 0.500000 +v 0.250000 7.750000 0.433013 +v 0.433013 7.750000 0.250000 +v 0.500000 7.750000 0.000000 +v 0.433013 7.750000 -0.250000 +v 0.250000 7.750000 -0.433012 +v -0.125000 8.625000 0.125000 +v -0.125000 8.875000 0.125000 +v -0.125000 8.625000 -0.125000 +v -0.125000 8.875000 -0.125000 +v 0.125000 8.625000 0.125000 +v 0.125000 8.875000 0.125000 +v 0.125000 8.625000 -0.125000 +v 0.125000 8.875000 -0.125000 +v -0.062500 7.750000 0.437500 +v 0.062500 7.750000 0.437500 +v -0.062500 7.750000 0.312500 +v 0.062500 7.750000 0.312500 +v -0.062500 8.625000 0.125000 +v 0.062500 8.625000 0.125000 +v -0.062500 8.625000 0.000000 +v 0.062500 8.625000 0.000000 +v -0.062500 7.750000 -0.312500 +v 0.062500 7.750000 -0.312500 +v -0.062500 7.750000 -0.437500 +v 0.062500 7.750000 -0.437500 +v -0.062500 8.625000 0.000000 +v 0.062500 8.625000 0.000000 +v -0.062500 8.625000 -0.125000 +v 0.062500 8.625000 -0.125000 +vt 0.487179 0.177778 +vt 0.506410 0.133333 +vt 0.506410 0.177778 +vt 0.551282 0.177778 +vt 0.576923 0.133333 +vt 0.576923 0.177778 +vt 0.743615 0.044444 +vt 0.769231 0.000044 +vt 0.794846 0.044444 +vt 0.532051 0.177778 +vt 0.551282 0.133333 +vt 0.794846 0.044445 +vt 0.787344 0.075841 +vt 0.751117 0.013048 +vt 0.532051 0.133333 +vt 0.512821 0.733333 +vt 0.487179 0.688889 +vt 0.512821 0.688889 +vt 0.487179 0.733333 +vt 0.461538 0.688889 +vt 0.461538 0.733333 +vt 0.435897 0.688889 +vt 0.435897 0.733333 +vt 0.410256 0.688889 +vt 0.435897 0.644444 +vt 0.461538 0.644444 +vt 0.461538 0.777778 +vt 0.500000 0.533333 +vt 0.487179 0.688889 +vt 0.487179 0.533333 +vt 0.474359 0.688889 +vt 0.461538 0.533333 +vt 0.474359 0.533333 +vt 0.512821 0.688889 +vt 0.512821 0.533333 +vt 0.500000 0.688889 +vt 0.487179 0.533333 +vt 0.500000 0.533333 +vt 0.474359 0.533333 +vt 0.461538 0.688889 +vt 0.461538 0.533333 +vt 0.512821 0.688889 +vt 0.512821 0.533333 +vt 0.487179 0.688889 +vt 0.487179 0.133333 +vt 0.787344 0.075841 +vt 0.769231 0.088845 +vt 0.751118 0.075841 +vt 0.751117 0.013048 +vt 0.787344 0.013048 +vt 0.769231 0.088845 +vt 0.751117 0.075841 +vt 0.743615 0.044445 +vt 0.769231 0.000044 +vt 0.787344 0.013048 +vt 0.410256 0.733333 +vt 0.435897 0.777778 +vt 0.500000 0.688889 +vt 0.461538 0.688889 +vt 0.474359 0.688889 +vt 0.794872 0.133333 +vt 0.820513 0.100000 +vt 0.820513 0.133333 +vt 0.794872 0.100000 +vt 0.820513 0.066667 +vt 0.794872 0.066667 +vt 0.820513 0.033333 +vt 0.794872 0.033333 +vt 0.820513 0.000000 +vt 0.794872 0.266667 +vt 0.820513 0.233333 +vt 0.820513 0.266667 +vt 0.794872 0.233333 +vt 0.820513 0.200000 +vt 0.794872 0.200000 +vt 0.820513 0.166667 +vt 0.794872 0.166667 +vt 0.980769 0.333333 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.980769 0.333333 +vt 0.961538 0.466667 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.980769 0.333333 +vt 0.942308 0.333333 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.923077 0.177778 +vt 1.000000 0.177778 +vt 0.974359 0.000000 +vt 0.974359 -0.000000 +vt 0.974359 0.000000 +vt 0.948718 -0.000000 +vt 0.974359 -0.000000 +vt 0.948718 0.000000 +vt 0.974359 0.000000 +vt 0.948718 -0.000000 +vt 0.974359 -0.000000 +vt 0.948718 0.000000 +vt 0.974359 0.000000 +vt 0.948718 -0.000000 +vt 0.974359 -0.000000 +vt 0.948718 0.000000 +vt 0.974359 0.000000 +vt 0.948718 -0.000000 +vt 0.974359 -0.000000 +vt 0.974359 0.000000 +vt 0.974359 -0.000000 +vt 0.717972 0.254688 +vt 0.717972 0.100868 +vt 0.794825 0.177778 +vt 0.794872 0.000000 +vt 0.948718 0.000000 +vt 0.948718 -0.000000 +vt 0.948718 0.000000 +vt 0.948718 0.000000 +vt 0.948718 -0.000000 +vt 0.787961 0.222182 +vt 0.769207 0.254688 +vt 0.743590 0.266586 +vt 0.699219 0.222182 +vt 0.692355 0.177778 +vt 0.699219 0.133374 +vt 0.743590 0.088970 +vt 0.769207 0.100868 +vt 0.787961 0.133374 +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 +vn 0.0000 -0.3363 -0.9417 +vn 0.0000 0.3363 0.9417 +vn 0.0000 0.3363 -0.9417 +vn 0.0000 -0.3363 0.9417 +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.2869 -0.9435 -0.1656 +vn 0.2236 -0.8944 -0.3873 +vn 0.3873 -0.8944 -0.2236 +vn -0.1656 -0.9435 -0.2869 +vn -0.2869 -0.9435 -0.1656 +vn -0.3313 -0.9435 -0.0000 +vn -0.2869 -0.9435 0.1656 +vn -0.1656 -0.9435 0.2869 +vn -0.0000 -0.9435 0.3313 +vn 0.1656 -0.9435 0.2869 +vn 0.2869 -0.9435 0.1656 +vn 0.3313 -0.9435 0.0000 +vn 0.1656 -0.9435 -0.2869 +vn -0.0000 -0.9435 -0.3313 +vn -0.0000 -0.8944 -0.4472 +vn -0.2236 -0.8944 -0.3873 +vn -0.3873 -0.8944 -0.2236 +vn -0.4472 -0.8944 -0.0000 +vn -0.3873 -0.8944 0.2236 +vn -0.2236 -0.8944 0.3873 +vn -0.0000 -0.8944 0.4472 +vn 0.2236 -0.8944 0.3873 +vn 0.3873 -0.8944 0.2236 +vn 0.4472 -0.8944 0.0000 +vn 0.1756 0.9363 -0.3041 +vn 0.1792 0.9784 -0.1034 +vn 0.3041 0.9363 -0.1756 +vn 0.2069 0.9784 -0.0000 +vn 0.3511 0.9363 -0.0000 +vn 0.1792 0.9784 0.1034 +vn 0.3041 0.9363 0.1756 +vn 0.1756 0.9363 0.3041 +vn 0.1034 0.9784 0.1792 +vn 0.0000 0.9363 0.3511 +vn -0.0000 0.9784 0.2069 +vn -0.1756 0.9363 0.3041 +vn -0.1034 0.9784 0.1792 +vn -0.3041 0.9363 0.1756 +vn -0.1792 0.9784 0.1034 +vn -0.3511 0.9363 -0.0000 +vn -0.2069 0.9784 0.0000 +vn -0.3041 0.9363 -0.1756 +vn -0.1792 0.9784 -0.1034 +vn -0.1756 0.9363 -0.3041 +vn -0.1034 0.9784 -0.1792 +vn 0.0000 0.9784 -0.2069 +vn 0.0000 0.9363 -0.3511 +vn 0.1034 0.9784 -0.1792 +s off +f 51/49/10 54/50/10 49/51/10 +f 52/52/11 53/53/11 51/54/11 +f 46/55/12 42/56/12 38/57/12 +f 50/58/13 56/59/13 52/52/13 +f 45/60/11 47/61/11 39/62/11 +f 49/51/12 55/63/12 50/58/12 +f 95/64/10 96/65/10 94/66/10 +f 97/67/11 100/68/11 96/65/11 +f 101/69/13 98/70/13 100/68/13 +f 99/71/12 94/72/12 98/70/12 +f 100/68/14 94/73/14 96/74/14 +f 97/75/15 99/71/15 101/69/15 +f 105/76/13 107/77/13 103/78/13 +f 106/79/10 104/80/10 102/81/10 +f 108/82/16 105/76/16 104/83/16 +f 107/77/17 102/81/17 103/78/17 +f 117/84/13 111/85/13 113/86/13 +f 110/87/10 116/88/10 112/89/10 +f 116/90/18 113/86/18 112/91/18 +f 115/92/19 110/87/19 111/85/19 +f 51/49/10 53/93/10 54/50/10 +f 52/52/11 56/59/11 53/53/11 +f 38/57/12 36/94/12 34/95/12 +f 34/95/12 48/96/12 46/55/12 +f 46/55/12 44/97/12 42/56/12 +f 42/56/12 40/98/12 38/57/12 +f 38/57/12 34/95/12 46/55/12 +f 50/58/13 55/63/13 56/59/13 +f 47/61/11 33/99/11 35/100/11 +f 35/100/11 37/101/11 47/61/11 +f 37/101/11 39/62/11 47/61/11 +f 39/62/11 41/102/11 43/103/11 +f 43/103/11 45/60/11 39/62/11 +f 49/51/12 54/50/12 55/63/12 +f 95/64/10 97/67/10 96/65/10 +f 97/67/11 101/69/11 100/68/11 +f 101/69/13 99/71/13 98/70/13 +f 99/71/12 95/104/12 94/72/12 +f 100/68/14 98/70/14 94/73/14 +f 97/75/15 95/105/15 99/71/15 +f 105/76/13 109/106/13 107/77/13 +f 106/79/10 108/107/10 104/80/10 +f 108/82/16 109/106/16 105/76/16 +f 107/77/17 106/79/17 102/81/17 +f 117/84/13 115/92/13 111/85/13 +f 110/87/10 114/108/10 116/88/10 +f 116/90/18 117/84/18 113/86/18 +f 115/92/19 114/108/19 110/87/19 +s 1 +f 34/109/15 35/110/20 33/111/15 +f 36/112/20 37/113/13 35/110/20 +f 38/114/13 39/115/21 37/113/13 +f 40/116/21 41/117/14 39/115/21 +f 42/118/14 43/119/22 41/120/14 +f 44/121/22 45/122/10 43/119/22 +f 46/123/10 47/124/23 45/122/10 +f 48/125/23 33/111/15 47/124/23 +f 79/126/24 68/127/25 67/128/26 +f 70/129/27 81/130/14 71/131/28 +f 71/132/28 81/130/14 72/133/29 +f 72/134/29 81/130/14 73/135/30 +f 73/136/30 81/130/14 74/137/31 +f 74/138/31 81/130/14 75/139/32 +f 75/140/32 81/130/14 76/141/33 +f 76/142/33 81/130/14 77/143/34 +f 77/144/34 81/130/14 78/145/35 +f 78/146/35 81/130/14 79/147/24 +f 79/126/24 81/130/14 80/148/36 +f 80/149/36 81/130/14 69/150/37 +f 69/151/37 81/130/14 70/152/27 +f 80/149/36 57/153/38 68/154/25 +f 69/151/37 58/155/39 57/156/38 +f 58/157/39 71/131/28 59/158/40 +f 71/132/28 60/159/41 59/160/40 +f 72/134/29 61/161/42 60/162/41 +f 61/163/42 74/137/31 62/164/43 +f 74/138/31 63/165/44 62/166/43 +f 63/167/44 76/141/33 64/168/45 +f 76/142/33 65/169/46 64/170/45 +f 77/144/34 66/171/47 65/172/46 +f 78/146/35 67/173/26 66/174/47 +f 62/164/48 86/175/49 61/163/50 +f 61/161/50 85/176/51 60/162/52 +f 60/159/52 84/177/53 59/160/54 +f 58/157/55 84/178/53 83/179/56 +f 57/156/57 83/180/56 82/181/58 +f 68/154/59 82/182/58 93/183/60 +f 67/128/61 93/184/60 92/185/62 +f 66/174/63 92/186/62 91/187/64 +f 65/172/65 91/188/64 90/189/66 +f 64/170/67 90/190/66 89/191/68 +f 64/168/67 88/192/69 63/167/70 +f 63/165/70 87/193/71 62/166/48 +f 86/194/49 90/195/66 82/196/58 +f 34/109/15 36/112/20 35/110/20 +f 36/112/20 38/114/13 37/113/13 +f 38/114/13 40/116/21 39/115/21 +f 40/116/21 42/197/14 41/117/14 +f 42/118/14 44/121/22 43/119/22 +f 44/121/22 46/123/10 45/122/10 +f 46/123/10 48/125/23 47/124/23 +f 48/125/23 34/109/15 33/111/15 +f 79/126/24 80/148/36 68/127/25 +f 80/149/36 69/150/37 57/153/38 +f 69/151/37 70/152/27 58/155/39 +f 58/157/39 70/129/27 71/131/28 +f 71/132/28 72/133/29 60/159/41 +f 72/134/29 73/135/30 61/161/42 +f 61/163/42 73/136/30 74/137/31 +f 74/138/31 75/139/32 63/165/44 +f 63/167/44 75/140/32 76/141/33 +f 76/142/33 77/143/34 65/169/46 +f 77/144/34 78/145/35 66/171/47 +f 78/146/35 79/147/24 67/173/26 +f 62/164/48 87/198/71 86/175/49 +f 61/161/50 86/199/49 85/176/51 +f 60/159/52 85/200/51 84/177/53 +f 58/157/55 59/158/54 84/178/53 +f 57/156/57 58/155/55 83/180/56 +f 68/154/59 57/153/57 82/182/58 +f 67/128/61 68/127/59 93/184/60 +f 66/174/63 67/173/61 92/186/62 +f 65/172/65 66/171/63 91/188/64 +f 64/170/67 65/169/65 90/190/66 +f 64/168/67 89/201/68 88/192/69 +f 63/165/70 88/202/69 87/193/71 +f 82/196/58 83/203/56 84/204/53 +f 84/204/53 85/205/51 82/196/58 +f 85/205/51 86/194/49 82/196/58 +f 86/194/49 87/206/71 88/207/69 +f 88/207/69 89/208/68 86/194/49 +f 89/208/68 90/195/66 86/194/49 +f 90/195/66 91/209/64 92/210/62 +f 92/210/62 93/211/60 90/195/66 +f 93/211/60 82/196/58 90/195/66 +o Base +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +v -1.000000 0.750000 1.000000 +v 1.000000 0.750000 1.000000 +v -1.000000 0.750000 -1.000000 +v 1.000000 0.750000 -1.000000 +v -0.750000 1.000000 0.750000 +v 0.750000 1.000000 0.750000 +v -0.750000 1.000000 -0.750000 +v 0.750000 1.000000 -0.750000 +v 0.500000 1.000000 -0.500000 +v 0.750000 1.000000 -0.500000 +v 0.500000 1.000000 -0.750000 +v 0.750000 1.000000 -0.750000 +v 0.000000 6.000000 0.000000 +v 0.250000 6.000000 0.000000 +v 0.000000 6.000000 -0.250000 +v 0.250000 6.000000 -0.250000 +v 0.500000 1.000000 0.750000 +v 0.750000 1.000000 0.750000 +v 0.500000 1.000000 0.500000 +v 0.750000 1.000000 0.500000 +v 0.000000 6.000000 0.250000 +v 0.250000 6.000000 0.250000 +v 0.000000 6.000000 0.000000 +v 0.250000 6.000000 0.000000 +v -0.750000 1.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.750000 1.000000 -0.750000 +v -0.500000 1.000000 -0.750000 +v -0.250000 6.000000 0.000000 +v 0.000000 6.000000 0.000000 +v -0.250000 6.000000 -0.250000 +v 0.000000 6.000000 -0.250000 +v -0.750000 1.000000 0.750000 +v -0.500000 1.000000 0.750000 +v -0.750000 1.000000 0.500000 +v -0.500000 1.000000 0.500000 +v -0.250000 6.000000 0.250000 +v 0.000000 6.000000 0.250000 +v -0.250000 6.000000 0.000000 +v 0.000000 6.000000 0.000000 +v -0.375000 6.000000 0.375000 +v 0.375000 6.000000 0.375000 +v -0.375000 6.000000 -0.375000 +v 0.375000 6.000000 -0.375000 +v -0.312500 6.125000 -0.312500 +v -0.312500 6.125000 0.312500 +v 0.312500 6.125000 0.312500 +v 0.312500 6.125000 -0.312500 +v -0.375000 6.125000 -0.375000 +v -0.375000 6.125000 0.375000 +v 0.375000 6.125000 0.375000 +v 0.375000 6.125000 -0.375000 +v -0.312500 6.250000 -0.312500 +v -0.312500 6.250000 0.312500 +v 0.312500 6.250000 0.312500 +v 0.312500 6.250000 -0.312500 +v -0.375000 6.250000 -0.375000 +v -0.375000 6.250000 0.375000 +v 0.375000 6.250000 0.375000 +v 0.375000 6.250000 -0.375000 +v -0.375000 7.000000 -0.375000 +v -0.375000 7.000000 0.375000 +v 0.375000 7.000000 0.375000 +v 0.375000 7.000000 -0.375000 +v 0.562500 2.125000 -0.500000 +v 0.687500 1.125000 0.500000 +v 0.437500 2.125000 -0.500000 +v 0.562500 1.125000 0.500000 +v 0.687500 1.000000 0.500000 +v 0.562500 1.000000 0.500000 +v 0.562500 2.000000 -0.500000 +v 0.437500 2.000000 -0.500000 +v 0.687500 1.125000 -0.500000 +v 0.562500 2.125000 0.500000 +v 0.562500 1.125000 -0.500000 +v 0.437500 2.125000 0.500000 +v 0.562500 2.000000 0.500000 +v 0.437500 2.000000 0.500000 +v 0.687500 1.000000 -0.500000 +v 0.562500 1.000000 -0.500000 +v 0.437500 3.125000 -0.375000 +v 0.562500 2.375000 0.375000 +v 0.312500 3.125000 -0.375000 +v 0.437500 2.375000 0.375000 +v 0.562500 2.250000 0.375000 +v 0.437500 2.250000 0.375000 +v 0.437500 3.000000 -0.375000 +v 0.312500 3.000000 -0.375000 +v 0.562500 2.375000 -0.375000 +v 0.437500 3.125000 0.375000 +v 0.437500 2.375000 -0.375000 +v 0.312500 3.125000 0.375000 +v 0.437500 3.000000 0.375000 +v 0.312500 3.000000 0.375000 +v 0.562500 2.250000 -0.375000 +v 0.437500 2.250000 -0.375000 +v 0.375000 4.000000 -0.312500 +v 0.437500 3.375000 0.312500 +v 0.250000 4.000000 -0.312500 +v 0.312500 3.375000 0.312500 +v 0.437500 3.250000 0.312500 +v 0.312500 3.250000 0.312500 +v 0.375000 3.875000 -0.312500 +v 0.250000 3.875000 -0.312500 +v 0.437500 3.375000 -0.312500 +v 0.375000 4.000000 0.312500 +v 0.312500 3.375000 -0.312500 +v 0.250000 4.000000 0.312500 +v 0.375000 3.875000 0.312500 +v 0.250000 3.875000 0.312500 +v 0.437500 3.250000 -0.312500 +v 0.312500 3.250000 -0.312500 +v -0.562500 2.125000 0.500000 +v -0.687500 1.125000 -0.500000 +v -0.437500 2.125000 0.500000 +v -0.562500 1.125000 -0.500000 +v -0.687500 1.000000 -0.500000 +v -0.562500 1.000000 -0.500000 +v -0.562500 2.000000 0.500000 +v -0.437500 2.000000 0.500000 +v -0.687500 1.125000 0.500000 +v -0.562500 2.125000 -0.500000 +v -0.562500 1.125000 0.500000 +v -0.437500 2.125000 -0.500000 +v -0.562500 2.000000 -0.500000 +v -0.437500 2.000000 -0.500000 +v -0.687500 1.000000 0.500000 +v -0.562500 1.000000 0.500000 +v -0.437500 3.125000 0.375000 +v -0.562500 2.375000 -0.375000 +v -0.312500 3.125000 0.375000 +v -0.437500 2.375000 -0.375000 +v -0.562500 2.250000 -0.375000 +v -0.437500 2.250000 -0.375000 +v -0.437500 3.000000 0.375000 +v -0.312500 3.000000 0.375000 +v -0.562500 2.375000 0.375000 +v -0.437500 3.125000 -0.375000 +v -0.437500 2.375000 0.375000 +v -0.312500 3.125000 -0.375000 +v -0.437500 3.000000 -0.375000 +v -0.312500 3.000000 -0.375000 +v -0.562500 2.250000 0.375000 +v -0.437500 2.250000 0.375000 +v -0.375000 4.000000 0.312500 +v -0.437500 3.375000 -0.312500 +v -0.250000 4.000000 0.312500 +v -0.312500 3.375000 -0.312500 +v -0.437500 3.250000 -0.312500 +v -0.312500 3.250000 -0.312500 +v -0.375000 3.875000 0.312500 +v -0.250000 3.875000 0.312500 +v -0.437500 3.375000 0.312500 +v -0.375000 4.000000 -0.312500 +v -0.312500 3.375000 0.312500 +v -0.250000 4.000000 -0.312500 +v -0.375000 3.875000 -0.312500 +v -0.250000 3.875000 -0.312500 +v -0.437500 3.250000 0.312500 +v -0.312500 3.250000 0.312500 +v -0.500000 2.125000 -0.562500 +v 0.500000 1.125000 -0.687500 +v -0.500000 2.125000 -0.437500 +v 0.500000 1.125000 -0.562500 +v 0.500000 1.000000 -0.687500 +v 0.500000 1.000000 -0.562500 +v -0.500000 2.000000 -0.562500 +v -0.500000 2.000000 -0.437500 +v -0.500000 1.125000 -0.687500 +v 0.500000 2.125000 -0.562500 +v -0.500000 1.125000 -0.562500 +v 0.500000 2.125000 -0.437500 +v 0.500000 2.000000 -0.562500 +v 0.500000 2.000000 -0.437500 +v -0.500000 1.000000 -0.687500 +v -0.500000 1.000000 -0.562500 +v -0.375000 3.125000 -0.437500 +v 0.375000 2.375000 -0.562500 +v -0.375000 3.125000 -0.312500 +v 0.375000 2.375000 -0.437500 +v 0.375000 2.250000 -0.562500 +v 0.375000 2.250000 -0.437500 +v -0.375000 3.000000 -0.437500 +v -0.375000 3.000000 -0.312500 +v -0.375000 2.375000 -0.562500 +v 0.375000 3.125000 -0.437500 +v -0.375000 2.375000 -0.437500 +v 0.375000 3.125000 -0.312500 +v 0.375000 3.000000 -0.437500 +v 0.375000 3.000000 -0.312500 +v -0.375000 2.250000 -0.562500 +v -0.375000 2.250000 -0.437500 +v -0.312500 4.000000 -0.375000 +v 0.312500 3.375000 -0.437500 +v -0.312500 4.000000 -0.250000 +v 0.312500 3.375000 -0.312500 +v 0.312500 3.250000 -0.437500 +v 0.312500 3.250000 -0.312500 +v -0.312500 3.875000 -0.375000 +v -0.312500 3.875000 -0.250000 +v -0.312500 3.375000 -0.437500 +v 0.312500 4.000000 -0.375000 +v -0.312500 3.375000 -0.312500 +v 0.312500 4.000000 -0.250000 +v 0.312500 3.875000 -0.375000 +v 0.312500 3.875000 -0.250000 +v -0.312500 3.250000 -0.437500 +v -0.312500 3.250000 -0.312500 +v 0.500000 2.125000 0.562500 +v -0.500000 1.125000 0.687500 +v 0.500000 2.125000 0.437500 +v -0.500000 1.125000 0.562500 +v -0.500000 1.000000 0.687500 +v -0.500000 1.000000 0.562500 +v 0.500000 2.000000 0.562500 +v 0.500000 2.000000 0.437500 +v 0.500000 1.125000 0.687500 +v -0.500000 2.125000 0.562500 +v 0.500000 1.125000 0.562500 +v -0.500000 2.125000 0.437500 +v -0.500000 2.000000 0.562500 +v -0.500000 2.000000 0.437500 +v 0.500000 1.000000 0.687500 +v 0.500000 1.000000 0.562500 +v 0.375000 3.125000 0.437500 +v -0.375000 2.375000 0.562500 +v 0.375000 3.125000 0.312500 +v -0.375000 2.375000 0.437500 +v -0.375000 2.250000 0.562500 +v -0.375000 2.250000 0.437500 +v 0.375000 3.000000 0.437500 +v 0.375000 3.000000 0.312500 +v 0.375000 2.375000 0.562500 +v -0.375000 3.125000 0.437500 +v 0.375000 2.375000 0.437500 +v -0.375000 3.125000 0.312500 +v -0.375000 3.000000 0.437500 +v -0.375000 3.000000 0.312500 +v 0.375000 2.250000 0.562500 +v 0.375000 2.250000 0.437500 +v 0.312500 4.000000 0.375000 +v -0.312500 3.375000 0.437500 +v 0.312500 4.000000 0.250000 +v -0.312500 3.375000 0.312500 +v -0.312500 3.250000 0.437500 +v -0.312500 3.250000 0.312500 +v 0.312500 3.875000 0.375000 +v 0.312500 3.875000 0.250000 +v 0.312500 3.375000 0.437500 +v -0.312500 4.000000 0.375000 +v 0.312500 3.375000 0.312500 +v -0.312500 4.000000 0.250000 +v -0.312500 3.875000 0.375000 +v -0.312500 3.875000 0.250000 +v 0.312500 3.250000 0.437500 +v 0.312500 3.250000 0.312500 +vt 0.410256 -0.000000 +vt 0.205128 0.355556 +vt 0.205128 -0.000000 +vt 0.410256 0.488889 +vt 0.230769 0.533333 +vt 0.205128 0.488889 +vt 0.410256 0.355556 +vt 0.820513 0.355556 +vt 0.615385 0.488889 +vt 0.615385 0.355556 +vt 0.000000 0.488889 +vt 0.000000 0.355556 +vt 0.384615 0.800000 +vt 0.230769 0.800000 +vt 0.820513 0.488889 +vt 0.641026 0.533333 +vt 0.435897 0.533333 +vt 0.025641 0.533333 +vt 0.846154 0.888889 +vt 0.820513 0.000000 +vt 0.846154 0.000000 +vt 0.871795 0.888889 +vt 0.871795 0.000000 +vt 0.923077 0.000000 +vt 0.897436 0.888889 +vt 0.897436 0.000000 +vt 0.871795 0.888889 +vt 0.846154 0.000000 +vt 0.871795 0.000000 +vt 0.897436 0.000000 +vt 0.846154 0.888889 +vt 0.820513 0.000000 +vt 0.923077 0.000000 +vt 0.897436 0.888889 +vt 0.923077 0.000000 +vt 0.897436 0.888889 +vt 0.897436 0.000000 +vt 0.846154 0.888889 +vt 0.820513 0.000000 +vt 0.846154 0.000000 +vt 0.871795 0.888889 +vt 0.871795 0.000000 +vt 0.897436 0.000000 +vt 0.871795 0.888889 +vt 0.871795 0.000000 +vt 0.923077 0.000000 +vt 0.897436 0.888889 +vt 0.846154 0.000000 +vt 0.846154 0.888889 +vt 0.820513 0.000000 +vt 0.666667 0.533333 +vt 0.589744 0.666667 +vt 0.589744 0.533333 +vt 0.660256 0.700000 +vt 0.596154 0.722222 +vt 0.596154 0.700000 +vt 0.666667 0.666667 +vt 0.589744 0.688889 +vt 0.820513 0.666667 +vt 0.743590 0.688889 +vt 0.743590 0.666667 +vt 0.666667 0.688889 +vt 0.512821 0.688889 +vt 0.512821 0.666667 +vt 0.750000 0.700000 +vt 0.820513 0.688889 +vt 0.814103 0.700000 +vt 0.519231 0.700000 +vt 0.583333 0.700000 +vt 0.673077 0.700000 +vt 0.737179 0.700000 +vt 0.820513 0.733333 +vt 0.750000 0.722222 +vt 0.814103 0.722222 +vt 0.673077 0.722222 +vt 0.519231 0.722222 +vt 0.589744 0.733333 +vt 0.583333 0.722222 +vt 0.666667 0.733333 +vt 0.660256 0.722222 +vt 0.743590 0.733333 +vt 0.737179 0.722222 +vt 0.589744 0.866667 +vt 0.743590 0.866667 +vt 0.666667 0.866667 +vt 0.512821 0.866667 +vt 0.512821 0.733333 +vt 0.589744 1.000000 +vt 0.666667 1.000000 +vt 0.512821 0.022222 +vt 0.410256 0.044444 +vt 0.410256 0.022222 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.066667 +vt 0.512821 0.044444 +vt 0.410256 0.000000 +vt 0.410256 0.022222 +vt 0.512821 0.044444 +vt 0.410256 0.044444 +vt 0.410256 0.088889 +vt 0.512821 0.066667 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.000000 +vt 0.410256 0.000000 +vt 0.487179 0.111111 +vt 0.410256 0.133333 +vt 0.410256 0.111111 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.155556 +vt 0.487179 0.133333 +vt 0.410256 0.088889 +vt 0.410256 0.111111 +vt 0.487179 0.133333 +vt 0.410256 0.133333 +vt 0.410256 0.177778 +vt 0.487179 0.155556 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.088889 +vt 0.410256 0.088889 +vt 0.474359 0.200000 +vt 0.410256 0.222222 +vt 0.410256 0.200000 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.244444 +vt 0.474359 0.222222 +vt 0.410256 0.177778 +vt 0.410256 0.200000 +vt 0.474359 0.222222 +vt 0.410256 0.222222 +vt 0.410256 0.266667 +vt 0.474359 0.244444 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.177778 +vt 0.410256 0.177778 +vt 0.512821 0.022222 +vt 0.410256 0.044444 +vt 0.410256 0.022222 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.066667 +vt 0.512821 0.044444 +vt 0.410256 0.000000 +vt 0.410256 0.022222 +vt 0.512821 0.044444 +vt 0.410256 0.044444 +vt 0.410256 0.088889 +vt 0.512821 0.066667 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.000000 +vt 0.410256 0.000000 +vt 0.487179 0.111111 +vt 0.410256 0.133333 +vt 0.410256 0.111111 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.155556 +vt 0.487179 0.133333 +vt 0.410256 0.088889 +vt 0.410256 0.111111 +vt 0.487179 0.133333 +vt 0.410256 0.133333 +vt 0.410256 0.177778 +vt 0.487179 0.155556 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.088889 +vt 0.410256 0.088889 +vt 0.474359 0.200000 +vt 0.410256 0.222222 +vt 0.410256 0.200000 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.244444 +vt 0.474359 0.222222 +vt 0.410256 0.177778 +vt 0.410256 0.200000 +vt 0.474359 0.222222 +vt 0.410256 0.222222 +vt 0.410256 0.266667 +vt 0.474359 0.244444 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.177778 +vt 0.410256 0.177778 +vt 0.512821 0.022222 +vt 0.410256 0.044444 +vt 0.410256 0.022222 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.066667 +vt 0.512821 0.044444 +vt 0.410256 0.000000 +vt 0.410256 0.022222 +vt 0.512821 0.044444 +vt 0.410256 0.044444 +vt 0.410256 0.088889 +vt 0.512821 0.066667 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.000000 +vt 0.410256 0.000000 +vt 0.487179 0.111111 +vt 0.410256 0.133333 +vt 0.410256 0.111111 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.155556 +vt 0.487179 0.133333 +vt 0.410256 0.088889 +vt 0.410256 0.111111 +vt 0.487179 0.133333 +vt 0.410256 0.133333 +vt 0.410256 0.177778 +vt 0.487179 0.155556 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.088889 +vt 0.410256 0.088889 +vt 0.474359 0.200000 +vt 0.410256 0.222222 +vt 0.410256 0.200000 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.244444 +vt 0.474359 0.222222 +vt 0.410256 0.177778 +vt 0.410256 0.200000 +vt 0.474359 0.222222 +vt 0.410256 0.222222 +vt 0.410256 0.266667 +vt 0.474359 0.244444 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.177778 +vt 0.410256 0.177778 +vt 0.512821 0.022222 +vt 0.410256 0.044444 +vt 0.410256 0.022222 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.066667 +vt 0.512821 0.044444 +vt 0.410256 0.000000 +vt 0.410256 0.022222 +vt 0.512821 0.044444 +vt 0.410256 0.044444 +vt 0.410256 0.088889 +vt 0.512821 0.066667 +vt 0.512821 0.088889 +vt 0.410256 0.066667 +vt 0.512821 0.000000 +vt 0.410256 0.000000 +vt 0.487179 0.111111 +vt 0.410256 0.133333 +vt 0.410256 0.111111 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.155556 +vt 0.487179 0.133333 +vt 0.410256 0.088889 +vt 0.410256 0.111111 +vt 0.487179 0.133333 +vt 0.410256 0.133333 +vt 0.410256 0.177778 +vt 0.487179 0.155556 +vt 0.487179 0.177778 +vt 0.410256 0.155556 +vt 0.487179 0.088889 +vt 0.410256 0.088889 +vt 0.474359 0.200000 +vt 0.410256 0.222222 +vt 0.410256 0.200000 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.244444 +vt 0.474359 0.222222 +vt 0.410256 0.177778 +vt 0.410256 0.200000 +vt 0.474359 0.222222 +vt 0.410256 0.222222 +vt 0.410256 0.266667 +vt 0.474359 0.244444 +vt 0.474359 0.266667 +vt 0.410256 0.244444 +vt 0.474359 0.177778 +vt 0.410256 0.177778 +vt 0.384615 0.533333 +vt 0.794872 0.533333 +vt 0.589744 0.533333 +vt 0.179487 0.533333 +vt 0.820513 0.888889 +vt 0.923077 0.888889 +vt 0.820513 0.888889 +vt 0.923077 0.888889 +vt 0.923077 0.888889 +vt 0.820513 0.888889 +vt 0.923077 0.888889 +vt 0.820513 0.888889 +vt 0.820513 0.866667 +vt 0.410256 0.088889 +vt 0.512821 0.000000 +vt 0.512821 0.022222 +vt 0.410256 0.177778 +vt 0.487179 0.088889 +vt 0.487179 0.111111 +vt 0.410256 0.266667 +vt 0.474359 0.177778 +vt 0.474359 0.200000 +vt 0.410256 0.088889 +vt 0.512821 0.000000 +vt 0.512821 0.022222 +vt 0.410256 0.177778 +vt 0.487179 0.088889 +vt 0.487179 0.111111 +vt 0.410256 0.266667 +vt 0.474359 0.177778 +vt 0.474359 0.200000 +vt 0.410256 0.088889 +vt 0.512821 0.000000 +vt 0.512821 0.022222 +vt 0.410256 0.177778 +vt 0.487179 0.088889 +vt 0.487179 0.111111 +vt 0.410256 0.266667 +vt 0.474359 0.177778 +vt 0.474359 0.200000 +vt 0.410256 0.088889 +vt 0.512821 0.000000 +vt 0.512821 0.022222 +vt 0.410256 0.177778 +vt 0.487179 0.088889 +vt 0.487179 0.111111 +vt 0.410256 0.266667 +vt 0.474359 0.177778 +vt 0.474359 0.200000 +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.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.0000 0.7071 0.7071 +vn 0.0000 -0.0995 0.9950 +vn 0.9950 0.0995 0.0000 +vn -0.9950 -0.0995 0.0000 +vn 0.0000 0.0995 -0.9950 +vn 0.0000 0.0995 0.9950 +vn 0.0000 -0.0995 -0.9950 +vn 0.9950 -0.0995 0.0000 +vn -0.9950 0.0995 0.0000 +vn 0.9923 0.0000 -0.1240 +vn -0.9923 0.0000 0.1240 +vn 0.0000 -0.7071 -0.7071 +vn 0.9923 0.0000 0.1240 +vn -0.9923 0.0000 -0.1240 +vn 0.0000 -0.7071 0.7071 +vn 0.9864 0.0000 -0.1644 +vn -0.9864 0.0000 0.1644 +vn 0.9864 0.0000 0.1644 +vn -0.9864 0.0000 -0.1644 +vn 0.9950 0.0000 -0.0995 +vn -0.9950 0.0000 0.0995 +vn 0.9950 0.0000 0.0995 +vn -0.9950 0.0000 -0.0995 +vn -0.1240 0.0000 -0.9923 +vn 0.1240 0.0000 0.9923 +vn -0.7071 -0.7071 0.0000 +vn 0.1240 0.0000 -0.9923 +vn -0.1240 0.0000 0.9923 +vn 0.7071 -0.7071 0.0000 +vn -0.1644 0.0000 -0.9864 +vn 0.1644 0.0000 0.9864 +vn 0.1644 0.0000 -0.9864 +vn -0.1644 0.0000 0.9864 +vn -0.0995 0.0000 -0.9950 +vn 0.0995 0.0000 0.9950 +vn 0.0995 0.0000 -0.9950 +vn -0.0995 0.0000 0.9950 +s off +f 120/212/72 119/213/72 118/214/72 +f 125/215/73 127/216/73 123/217/73 +f 121/218/74 123/217/74 119/213/74 +f 118/219/75 124/220/75 120/221/75 +f 120/221/76 125/215/76 121/218/76 +f 119/213/77 122/222/77 118/223/77 +f 127/216/78 128/224/78 126/225/78 +f 122/226/79 128/227/79 124/220/79 +f 124/220/80 129/228/80 125/215/80 +f 123/217/81 126/229/81 122/222/81 +f 135/230/82 130/231/82 131/232/82 +f 137/233/83 131/232/83 133/234/83 +f 130/235/84 136/236/84 132/237/84 +f 132/237/85 137/233/85 133/234/85 +f 143/238/86 138/239/86 139/240/86 +f 141/241/83 143/238/83 139/240/83 +f 142/242/84 140/243/84 138/239/84 +f 140/244/87 145/245/87 141/241/87 +f 147/246/82 150/247/82 146/248/82 +f 153/249/88 147/250/88 149/251/88 +f 146/248/89 152/252/89 148/253/89 +f 152/252/85 149/251/85 148/253/85 +f 155/254/86 158/255/86 154/256/86 +f 157/257/88 159/258/88 155/254/88 +f 158/255/89 156/259/89 154/256/89 +f 160/260/87 157/261/87 156/259/87 +f 164/262/72 163/263/72 162/264/72 +f 169/265/74 176/266/74 168/267/74 +f 165/268/74 172/269/74 163/263/74 +f 162/270/75 170/271/75 164/272/75 +f 164/272/76 173/273/76 165/268/76 +f 163/263/77 171/274/77 162/275/77 +f 166/276/78 171/277/78 167/278/78 +f 167/279/78 172/269/78 168/280/78 +f 168/267/78 173/273/78 169/265/78 +f 169/281/78 170/271/78 166/282/78 +f 179/283/72 174/284/72 175/285/72 +f 167/278/75 174/284/75 166/276/75 +f 166/282/76 177/286/76 169/281/76 +f 168/280/77 175/287/77 167/279/77 +f 180/288/72 175/287/72 176/289/72 +f 181/290/72 176/266/72 177/291/72 +f 178/292/72 177/286/72 174/293/72 +f 181/290/74 184/294/74 180/288/74 +f 179/283/75 182/295/75 178/292/75 +f 178/292/76 185/296/76 181/290/76 +f 180/288/77 183/297/77 179/298/77 +f 183/299/78 185/296/78 182/300/78 +f 192/301/90 187/302/90 190/303/90 +f 193/304/91 189/305/91 188/306/91 +f 189/305/81 186/307/81 188/306/81 +f 191/308/92 192/301/92 190/303/92 +f 198/309/93 194/310/93 195/311/93 +f 199/312/94 196/313/94 201/314/94 +f 195/311/80 196/313/80 197/315/80 +f 201/316/95 198/309/95 199/317/95 +f 208/318/96 203/319/96 206/320/96 +f 209/321/97 205/322/97 204/323/97 +f 205/322/81 202/324/81 204/323/81 +f 207/325/92 208/318/92 206/320/92 +f 214/326/98 210/327/98 211/328/98 +f 215/329/99 212/330/99 217/331/99 +f 211/328/80 212/330/80 213/332/80 +f 217/333/95 214/326/95 215/334/95 +f 224/335/100 219/336/100 222/337/100 +f 225/338/101 221/339/101 220/340/101 +f 221/339/81 218/341/81 220/340/81 +f 223/342/92 224/335/92 222/337/92 +f 230/343/102 226/344/102 227/345/102 +f 231/346/103 228/347/103 233/348/103 +f 227/345/80 228/347/80 229/349/80 +f 233/350/95 230/343/95 231/351/95 +f 240/352/91 235/353/91 238/354/91 +f 241/355/90 237/356/90 236/357/90 +f 237/356/80 234/358/80 236/357/80 +f 239/359/95 240/352/95 238/354/95 +f 246/360/94 242/361/94 243/362/94 +f 247/363/93 244/364/93 249/365/93 +f 243/362/81 244/364/81 245/366/81 +f 249/367/92 246/360/92 247/368/92 +f 256/369/97 251/370/97 254/371/97 +f 257/372/96 253/373/96 252/374/96 +f 253/373/80 250/375/80 252/374/80 +f 255/376/95 256/369/95 254/371/95 +f 262/377/99 258/378/99 259/379/99 +f 263/380/98 260/381/98 265/382/98 +f 259/379/81 260/381/81 261/383/81 +f 265/384/92 262/377/92 263/385/92 +f 272/386/101 267/387/101 270/388/101 +f 273/389/100 269/390/100 268/391/100 +f 269/390/80 266/392/80 268/391/80 +f 271/393/95 272/386/95 270/388/95 +f 278/394/103 274/395/103 275/396/103 +f 279/397/102 276/398/102 281/399/102 +f 275/396/81 276/398/81 277/400/81 +f 281/401/92 278/394/92 279/402/92 +f 288/403/104 283/404/104 286/405/104 +f 289/406/105 285/407/105 284/408/105 +f 285/407/73 282/409/73 284/408/73 +f 287/410/106 288/403/106 286/405/106 +f 294/411/107 290/412/107 291/413/107 +f 295/414/108 292/415/108 297/416/108 +f 291/413/79 292/415/79 293/417/79 +f 297/418/109 294/411/109 295/419/109 +f 304/420/110 299/421/110 302/422/110 +f 305/423/111 301/424/111 300/425/111 +f 301/424/73 298/426/73 300/425/73 +f 303/427/106 304/420/106 302/422/106 +f 310/428/112 306/429/112 307/430/112 +f 311/431/113 308/432/113 313/433/113 +f 307/430/79 308/432/79 309/434/79 +f 313/435/109 310/428/109 311/436/109 +f 320/437/114 315/438/114 318/439/114 +f 321/440/115 317/441/115 316/442/115 +f 317/441/73 314/443/73 316/442/73 +f 319/444/106 320/437/106 318/439/106 +f 326/445/116 322/446/116 323/447/116 +f 327/448/117 324/449/117 329/450/117 +f 323/447/79 324/449/79 325/451/79 +f 329/452/109 326/445/109 327/453/109 +f 336/454/105 331/455/105 334/456/105 +f 337/457/104 333/458/104 332/459/104 +f 333/458/79 330/460/79 332/459/79 +f 335/461/109 336/454/109 334/456/109 +f 342/462/108 338/463/108 339/464/108 +f 343/465/107 340/466/107 345/467/107 +f 339/464/73 340/466/73 341/468/73 +f 345/469/106 342/462/106 343/470/106 +f 352/471/111 347/472/111 350/473/111 +f 353/474/110 349/475/110 348/476/110 +f 349/475/79 346/477/79 348/476/79 +f 351/478/109 352/471/109 350/473/109 +f 358/479/113 354/480/113 355/481/113 +f 359/482/112 356/483/112 361/484/112 +f 355/481/73 356/483/73 357/485/73 +f 361/486/106 358/479/106 359/487/106 +f 368/488/115 363/489/115 366/490/115 +f 369/491/114 365/492/114 364/493/114 +f 365/492/79 362/494/79 364/493/79 +f 367/495/109 368/488/109 366/490/109 +f 374/496/117 370/497/117 371/498/117 +f 375/499/116 372/500/116 377/501/116 +f 371/498/73 372/500/73 373/502/73 +f 377/503/106 374/496/106 375/504/106 +f 120/212/72 121/218/72 119/213/72 +f 125/215/73 129/505/73 127/216/73 +f 121/218/74 125/215/74 123/217/74 +f 118/219/75 122/226/75 124/220/75 +f 120/221/76 124/220/76 125/215/76 +f 119/213/77 123/217/77 122/222/77 +f 127/216/78 129/505/78 128/224/78 +f 122/226/79 126/506/79 128/227/79 +f 124/220/80 128/507/80 129/228/80 +f 123/217/81 127/508/81 126/229/81 +f 135/230/82 134/509/82 130/231/82 +f 137/233/83 135/230/83 131/232/83 +f 130/235/84 134/510/84 136/236/84 +f 132/237/85 136/236/85 137/233/85 +f 143/238/86 142/242/86 138/239/86 +f 141/241/83 145/245/83 143/238/83 +f 142/242/84 144/511/84 140/243/84 +f 140/244/87 144/512/87 145/245/87 +f 147/246/82 151/513/82 150/247/82 +f 153/249/88 151/514/88 147/250/88 +f 146/248/89 150/247/89 152/252/89 +f 152/252/85 153/249/85 149/251/85 +f 155/254/86 159/258/86 158/255/86 +f 157/257/88 161/515/88 159/258/88 +f 158/255/89 160/260/89 156/259/89 +f 160/260/87 161/516/87 157/261/87 +f 164/262/72 165/268/72 163/263/72 +f 169/265/74 177/291/74 176/266/74 +f 165/268/74 173/273/74 172/269/74 +f 162/270/75 171/277/75 170/271/75 +f 164/272/76 170/271/76 173/273/76 +f 163/263/77 172/269/77 171/274/77 +f 166/276/78 170/271/78 171/277/78 +f 167/279/78 171/274/78 172/269/78 +f 168/267/78 172/269/78 173/273/78 +f 169/281/78 173/273/78 170/271/78 +f 179/283/72 178/292/72 174/284/72 +f 167/278/75 175/285/75 174/284/75 +f 166/282/76 174/293/76 177/286/76 +f 168/280/77 176/289/77 175/287/77 +f 180/288/72 179/298/72 175/287/72 +f 181/290/72 180/288/72 176/266/72 +f 178/292/72 181/290/72 177/286/72 +f 181/290/74 185/296/74 184/294/74 +f 179/283/75 183/517/75 182/295/75 +f 178/292/76 182/295/76 185/296/76 +f 180/288/77 184/294/77 183/297/77 +f 183/299/78 184/294/78 185/296/78 +f 192/301/90 186/307/90 187/302/90 +f 193/304/91 191/518/91 189/305/91 +f 189/305/81 187/302/81 186/307/81 +f 191/308/92 193/519/92 192/301/92 +f 198/309/93 200/520/93 194/310/93 +f 199/312/94 197/315/94 196/313/94 +f 195/311/80 194/310/80 196/313/80 +f 201/316/95 200/520/95 198/309/95 +f 208/318/96 202/324/96 203/319/96 +f 209/321/97 207/521/97 205/322/97 +f 205/322/81 203/319/81 202/324/81 +f 207/325/92 209/522/92 208/318/92 +f 214/326/98 216/523/98 210/327/98 +f 215/329/99 213/332/99 212/330/99 +f 211/328/80 210/327/80 212/330/80 +f 217/333/95 216/523/95 214/326/95 +f 224/335/100 218/341/100 219/336/100 +f 225/338/101 223/524/101 221/339/101 +f 221/339/81 219/336/81 218/341/81 +f 223/342/92 225/525/92 224/335/92 +f 230/343/102 232/526/102 226/344/102 +f 231/346/103 229/349/103 228/347/103 +f 227/345/80 226/344/80 228/347/80 +f 233/350/95 232/526/95 230/343/95 +f 240/352/91 234/358/91 235/353/91 +f 241/355/90 239/527/90 237/356/90 +f 237/356/80 235/353/80 234/358/80 +f 239/359/95 241/528/95 240/352/95 +f 246/360/94 248/529/94 242/361/94 +f 247/363/93 245/366/93 244/364/93 +f 243/362/81 242/361/81 244/364/81 +f 249/367/92 248/529/92 246/360/92 +f 256/369/97 250/375/97 251/370/97 +f 257/372/96 255/530/96 253/373/96 +f 253/373/80 251/370/80 250/375/80 +f 255/376/95 257/531/95 256/369/95 +f 262/377/99 264/532/99 258/378/99 +f 263/380/98 261/383/98 260/381/98 +f 259/379/81 258/378/81 260/381/81 +f 265/384/92 264/532/92 262/377/92 +f 272/386/101 266/392/101 267/387/101 +f 273/389/100 271/533/100 269/390/100 +f 269/390/80 267/387/80 266/392/80 +f 271/393/95 273/534/95 272/386/95 +f 278/394/103 280/535/103 274/395/103 +f 279/397/102 277/400/102 276/398/102 +f 275/396/81 274/395/81 276/398/81 +f 281/401/92 280/535/92 278/394/92 +f 288/403/104 282/409/104 283/404/104 +f 289/406/105 287/536/105 285/407/105 +f 285/407/73 283/404/73 282/409/73 +f 287/410/106 289/537/106 288/403/106 +f 294/411/107 296/538/107 290/412/107 +f 295/414/108 293/417/108 292/415/108 +f 291/413/79 290/412/79 292/415/79 +f 297/418/109 296/538/109 294/411/109 +f 304/420/110 298/426/110 299/421/110 +f 305/423/111 303/539/111 301/424/111 +f 301/424/73 299/421/73 298/426/73 +f 303/427/106 305/540/106 304/420/106 +f 310/428/112 312/541/112 306/429/112 +f 311/431/113 309/434/113 308/432/113 +f 307/430/79 306/429/79 308/432/79 +f 313/435/109 312/541/109 310/428/109 +f 320/437/114 314/443/114 315/438/114 +f 321/440/115 319/542/115 317/441/115 +f 317/441/73 315/438/73 314/443/73 +f 319/444/106 321/543/106 320/437/106 +f 326/445/116 328/544/116 322/446/116 +f 327/448/117 325/451/117 324/449/117 +f 323/447/79 322/446/79 324/449/79 +f 329/452/109 328/544/109 326/445/109 +f 336/454/105 330/460/105 331/455/105 +f 337/457/104 335/545/104 333/458/104 +f 333/458/79 331/455/79 330/460/79 +f 335/461/109 337/546/109 336/454/109 +f 342/462/108 344/547/108 338/463/108 +f 343/465/107 341/468/107 340/466/107 +f 339/464/73 338/463/73 340/466/73 +f 345/469/106 344/547/106 342/462/106 +f 352/471/111 346/477/111 347/472/111 +f 353/474/110 351/548/110 349/475/110 +f 349/475/79 347/472/79 346/477/79 +f 351/478/109 353/549/109 352/471/109 +f 358/479/113 360/550/113 354/480/113 +f 359/482/112 357/485/112 356/483/112 +f 355/481/73 354/480/73 356/483/73 +f 361/486/106 360/550/106 358/479/106 +f 368/488/115 362/494/115 363/489/115 +f 369/491/114 367/551/114 365/492/114 +f 365/492/79 363/489/79 362/494/79 +f 367/495/109 369/552/109 368/488/109 +f 374/496/117 376/553/117 370/497/117 +f 375/499/116 373/502/116 372/500/116 +f 371/498/73 370/497/73 372/500/73 +f 377/503/106 376/553/106 374/496/106 diff --git a/src/main/resources/assets/hbm/textures/models/machines/satlink.png b/src/main/resources/assets/hbm/textures/models/machines/satlink.png new file mode 100644 index 0000000000000000000000000000000000000000..15402364950e7379224119eba7f3623b9b91e641 GIT binary patch literal 3335 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 literal 0 HcmV?d00001