From 3033d6e08eb01ec0852569103bd76d5243636ed7 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:25:33 -0500 Subject: [PATCH 01/17] holy shiiiiiiiiiitttt RBMK optimization update --- .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 339 +++++++++++++++++ .../java/com/hbm/main/ModEventHandler.java | 6 + .../hbm/render/tileentity/RenderRBMKLid.java | 2 +- .../machine/rbmk/IRBMKFluxReceiver.java | 4 +- .../tileentity/machine/rbmk/RBMKDials.java | 12 + .../machine/rbmk/TileEntityCraneConsole.java | 1 + .../machine/rbmk/TileEntityRBMKAbsorber.java | 8 +- .../machine/rbmk/TileEntityRBMKBase.java | 50 ++- .../machine/rbmk/TileEntityRBMKBlank.java | 6 + .../machine/rbmk/TileEntityRBMKBoiler.java | 21 + .../machine/rbmk/TileEntityRBMKConsole.java | 6 +- .../machine/rbmk/TileEntityRBMKControl.java | 21 + .../rbmk/TileEntityRBMKControlAuto.java | 19 + .../rbmk/TileEntityRBMKControlManual.java | 21 +- .../machine/rbmk/TileEntityRBMKCooler.java | 22 ++ .../machine/rbmk/TileEntityRBMKHeater.java | 27 +- .../machine/rbmk/TileEntityRBMKInlet.java | 12 +- .../machine/rbmk/TileEntityRBMKModerator.java | 8 +- .../machine/rbmk/TileEntityRBMKOutgasser.java | 32 +- .../machine/rbmk/TileEntityRBMKOutlet.java | 14 +- .../machine/rbmk/TileEntityRBMKReflector.java | 6 + .../machine/rbmk/TileEntityRBMKRod.java | 358 +++++++----------- .../machine/rbmk/TileEntityRBMKRodReaSim.java | 41 +- .../machine/rbmk/TileEntityRBMKStorage.java | 6 + 24 files changed, 772 insertions(+), 270 deletions(-) create mode 100644 src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java new file mode 100644 index 000000000..03d369ae6 --- /dev/null +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -0,0 +1,339 @@ +package com.hbm.handler.rbmkmk2; + +import com.hbm.blocks.machine.rbmk.RBMKBase; +import com.hbm.handler.radiation.ChunkRadiationManager; +import com.hbm.tileentity.machine.rbmk.*; +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.block.Block; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +import java.util.*; + +public class RBMKHandler { + + static double moderatorEfficiency; + static double reflectorEfficiency; + static double absorberEfficiency; + static int columnHeight; + static int fluxRange; + + public enum RBMKType { + ROD, + MODERATOR, + CONTROL_ROD, + REFLECTOR, + ABSORBER, + OUTGASSER, + OTHER // why do neutron calculations on them if they won't change anything? + } + + public static class RBMKNode { + + protected RBMKType type; + protected TileEntityRBMKBase tile; + protected boolean hasLid; + + public RBMKNode(TileEntityRBMKBase tile, RBMKType type) { + this.type = type; + this.tile = tile; + this.hasLid = tile.hasLid(); + addNode(this); + } + } + + private static TileEntity blockPosToTE(World worldObj, BlockPos pos) { + return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); + } + + public static RBMKNode makeNode(TileEntityRBMKBase tile) { + return new RBMKNode(tile, tile.getRBMKType()); + } + + public static class NeutronStream { + + public RBMKNode origin; + + // doubles!! + public double fluxQuantity; + // Hey, new implementation! Basically a ratio for slow flux to fast flux + // 0 = all slow flux + // 1 = all fast flux + public double fluxRatio; + + // Vector for direction of neutron flow. + public Vec3 vector; + + public NeutronStream(RBMKNode origin, Vec3 vector, double flux, double ratio) { + this.origin = origin; + this.vector = vector; + this.fluxQuantity = flux; + this.fluxRatio = ratio; + streams.put(this, origin.tile.getWorldObj()); + } + + public List getBlocks() { + List positions = new ArrayList<>(); + + for (int i = 1; i <= fluxRange; i++) { + int x = (int) Math.floor(0.5 + vector.xCoord * i); + int z = (int) Math.floor(0.5 + vector.zCoord * i); + + BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); + positions.add(pos); + } + return positions; + } + + // This, however, is used for actual RBMK flux calculations. + // Does NOT include the origin node + // USES THE CACHE!!! + public List getNodes() { + List positions = new ArrayList<>(); + + for (int i = 1; i <= fluxRange; i++) { + int x = (int) Math.floor(0.5 + vector.xCoord * i); + int z = (int) Math.floor(0.5 + vector.zCoord * i); + + BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); + + if (nodeCache.containsKey(pos)) { + positions.add(nodeCache.get(pos)); + continue; + } + + // If it isn't an RBMK block then don't do anything with it + if(!(origin.tile.getBlockType() instanceof RBMKBase)) + continue; + + TileEntity te = blockPosToTE(origin.tile.getWorldObj(), pos); + + if (te instanceof TileEntityRBMKBase) { + TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase) te; + RBMKType type = rbmkBase.getRBMKType(); + // they should ALL be RBMKBase TEs + RBMKNode node = new RBMKNode(rbmkBase, type); + positions.add(node); + addNode(node); + } + } + return positions; + } + + // The... small one? whatever it's still pretty big, runs the interaction for the stream. + public void runStreamInteraction(World worldObj) { + + // do nothing if there's nothing to do lmao + if(fluxQuantity == 0D) + return; + + BlockPos pos = new BlockPos(origin.tile); + + TileEntityRBMKBase originTE; + + if (nodeCache.containsKey(pos)) + originTE = nodeCache.get(pos).tile; + else { + originTE = (TileEntityRBMKBase) blockPosToTE(worldObj, pos); + if(originTE == null) + return; // Doesn't exist anymore! + addNode(new RBMKNode(originTE, originTE.getRBMKType())); + } + + int moderatedCount = 0; + + for(BlockPos nodePos : getBlocks()) { + + if(fluxQuantity == 0D) // Whoops, used it all up! + return; + + RBMKNode node = nodeCache.get(nodePos); + + if(node == null) { + TileEntity te = blockPosToTE(worldObj, nodePos); // ok, maybe it didn't get added to the list somehow? + if (te instanceof TileEntityRBMKBase) { + node = makeNode((TileEntityRBMKBase) te); + addNode(node); // whoops! + } else + return; // TE no longer exists, die!! + } + + if(node.type == RBMKType.OTHER) // pass right on by! + continue; + + Block block = node.tile.getBlockType(); + + if (!(block instanceof RBMKBase)) { + int hits = getHits(nodePos); // Get the amount of hits on blocks. + if (hits == columnHeight) // If stream is fully blocked. + return; + else if (hits > 0) { // If stream is partially blocked. + irradiateFromFlux(pos, hits); + fluxQuantity *= 1 - ((double) hits / columnHeight); // Inverse to get partial blocking by blocks. + continue; + } else { // Nothing hit! + irradiateFromFlux(pos, 0); + continue; + } + } + + // we established earlier during `getNodes()` that they should all be RBMKBase TEs + // no issue with casting here! + TileEntityRBMKBase nodeTE = node.tile; + + if(!node.hasLid) + ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); + + if(node.type == RBMKType.MODERATOR) { + moderatedCount += 1; + moderateStream(); + } + + if(node.tile instanceof IRBMKFluxReceiver) { + IRBMKFluxReceiver column = ((IRBMKFluxReceiver) nodeTE); + if(node.type == RBMKType.ROD) { + TileEntityRBMKRod rod = ((TileEntityRBMKRod) column); + if(rod.hasRod) { + if(rod.isModerated()) + moderateStream(); + rod.receiveFlux(this); + return; + } + } else if(node.type == RBMKType.OUTGASSER) { + TileEntityRBMKOutgasser outgasser = ((TileEntityRBMKOutgasser) column); + if(outgasser.canProcess()) { + column.receiveFlux(this); + return; + } + } + } + + else if(node.type == RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = ((TileEntityRBMKControl) nodeTE); + if (rod.level > 0D) + fluxQuantity *= ((TileEntityRBMKControl) nodeTE).getMult(); + else + return; + } + + else if(node.type == RBMKType.REFLECTOR) { + if((origin.tile).isModerated()) + moderatedCount += 1; + if (fluxRatio > 0D && moderatedCount > 0) { + for (int i = 0; i < moderatedCount; i++) { + moderateStream(); // Moderate streams on the way back! + } + } + if(reflectorEfficiency != 1) { + fluxQuantity *= reflectorEfficiency; + } else { + ((TileEntityRBMKRod) originTE).receiveFlux(this); + // this one missing return line was baffling me for half an hour + // "why is this rod jumping to double the flux randomly????" + // because you aren't fucking returning from the function, and it's hitting the reflector after it, you idiot + return; + } + } + + else if(node.type == RBMKType.ABSORBER) { + if (absorberEfficiency == 1) + return; // Instantly stop stream processing. + else + fluxQuantity *= absorberEfficiency; + } + } + + // Called *after* most streams have returned. + List nodes = getNodes(); + + if(nodes.isEmpty()) // how tf did we get here if its empty + return; + + // Get the last node in the stream. + RBMKNode lastNode = nodes.get(nodes.size() - 1); + + // Block hits don't have to be considered here, since if it's fully blocked it'll return the function before getting here. + if(lastNode.type != RBMKType.REFLECTOR && lastNode.type != RBMKType.ABSORBER && lastNode.type != RBMKType.CONTROL_ROD) { + // Neutrons must not have been caught then! + irradiateFromFlux(new BlockPos(lastNode.tile).add(vector.xCoord, 0, vector.zCoord)); + } + + // but oh wait, control rods exist + if(lastNode.type == RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = ((TileEntityRBMKControl) lastNode.tile); + // just get level and irradiate based on that + if(rod.getMult() > 0D) { + fluxQuantity = fluxQuantity * rod.getMult(); + irradiateFromFlux(new BlockPos(lastNode.tile).add(vector.xCoord, 0, vector.zCoord)); + } + + } + } + + public int getHits(BlockPos pos) { + int hits = 0; + + for(int h = 0; h < columnHeight; h++) { + // holy fucking shit + // I have had this one line cause me like tens of problems + // I FUCKING HATE THIS + // total count of bugs fixed attributed to this function: 6 + if (!origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()).isOpaqueCube()) + hits += 1; + } + + return hits; + } + + public void irradiateFromFlux(BlockPos pos) { + ChunkRadiationManager.proxy.incrementRad(origin.tile.getWorldObj(), pos.getX(), pos.getY(), pos.getZ(), (float) (fluxQuantity * 0.05F * (1 - (double) getHits(pos) / columnHeight))); + } + + public void irradiateFromFlux(BlockPos pos, int hits) { + ChunkRadiationManager.proxy.incrementRad(origin.tile.getWorldObj(), pos.getX(), pos.getY(), pos.getZ(), (float) (fluxQuantity * 0.05F * (1 - (double) hits / columnHeight))); + } + + public void moderateStream() { + fluxRatio = fluxRatio * (1 - moderatorEfficiency); + } + } + + // HashMap of all RBMK nodes and their positions. + protected static HashMap nodeCache = new HashMap<>(); + + // List of all active neutron streams. + public static HashMap streams = new HashMap<>(); + + public static void addNode(RBMKNode node) { + nodeCache.put(new BlockPos(node.tile), node); + } + + public static void removeNode(BlockPos position) { + nodeCache.remove(position); + } + + // The big one!! Runs all interactions for neutrons. + public static void runAllInteractions() { + + for (World worldObj : MinecraftServer.getServer().worldServers) { + // Gamerule caching because this apparently is kinda slow? + // meh, good enough + reflectorEfficiency = 1; //RBMKDials.getReflectorEfficiency(); + absorberEfficiency = 1; //RBMKDials.getAbsorberEfficiency(); + moderatorEfficiency = RBMKDials.getModeratorEfficiency(worldObj); + // I hate this. + // this broke everything because it was ONE OFF + // IT'S NOT THE TOTAL HEIGHT IT'S THE AMOUNT OF BLOCKS ABOVE AAAAAAAAAAAAA + columnHeight = RBMKDials.getColumnHeight(worldObj) + 1; + fluxRange = RBMKDials.getFluxRange(worldObj); + streams.forEach((stream, world) -> { + if (world == worldObj) + // WOO!! + stream.runStreamInteraction(world); + }); + } + streams.clear(); + } +} diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 4f0d2f55b..bf1e44abb 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -9,6 +9,8 @@ import java.util.Map; import java.util.Random; import java.util.UUID; +import com.hbm.handler.rbmkmk2.RBMKHandler; +import net.minecraft.server.MinecraftServer; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; @@ -1143,6 +1145,10 @@ public class ModEventHandler { RequestNetwork.updateEntries(); TileEntityMachineRadarNT.updateSystem(); Nodespace.updateNodespace(); + // RBMK!!!! + MinecraftServer.getServer().theProfiler.startSection("rbmkHandler_flux_interaction"); + RBMKHandler.runAllInteractions(); + MinecraftServer.getServer().theProfiler.endSection(); } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java index 2783e8508..47fd69ef9 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java @@ -35,7 +35,7 @@ public class RenderRBMKLid extends TileEntitySpecialRenderer { if(rod.hasRod) hasRod = true; - if(rod.fluxFast + rod.fluxSlow > 5) + if(rod.fluxQuantity > 5) cherenkov = true; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java index 91824df0a..655c234ae 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java @@ -1,5 +1,7 @@ package com.hbm.tileentity.machine.rbmk; +import com.hbm.handler.rbmkmk2.RBMKHandler; + public interface IRBMKFluxReceiver { public enum NType { @@ -14,5 +16,5 @@ public interface IRBMKFluxReceiver { } } - public void receiveFlux(NType type, double flux); + public void receiveFlux(RBMKHandler.NeutronStream stream); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java index a93498b6f..e8f2867bb 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java @@ -30,6 +30,8 @@ public class RBMKDials { public static final String KEY_REASIM_BOILER_SPEED = "dialReasimBoilerSpeed"; public static final String KEY_DISABLE_MELTDOWNS = "dialDisableMeltdowns"; public static final String KEY_ENABLE_MELTDOWN_OVERPRESSURE = "dialEnableMeltdownOverpressure"; + + public static final String KEY_MODERATOR_EFFICIENCY = "dialModeratorEfficiency"; public static void createDials(World world) { GameRules rules = world.getGameRules(); @@ -55,6 +57,7 @@ public class RBMKDials { rules.setOrCreateGameRule(KEY_REASIM_BOILER_SPEED, "0.05"); rules.setOrCreateGameRule(KEY_DISABLE_MELTDOWNS, "false"); rules.setOrCreateGameRule(KEY_ENABLE_MELTDOWN_OVERPRESSURE, "false"); + rules.setOrCreateGameRule(KEY_MODERATOR_EFFICIENCY, "1"); } } @@ -229,4 +232,13 @@ public class RBMKDials { public static boolean getOverpressure(World world) { return world.getGameRules().getGameRuleBooleanValue(KEY_ENABLE_MELTDOWN_OVERPRESSURE); } + + /** + * The percentage of neutron to moderate from fast to slow when they pass through a moderator. + * @param world + * @return + */ + public static double getModeratorEfficiency(World world) { + return MathHelper.clamp_double(GameRuleHelper.parseDouble(world.getGameRules().getGameRuleStringValue(KEY_MODERATOR_EFFICIENCY), 1D), 0.0D, 1.0D); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index 57bc990bc..befccb90d 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -8,6 +8,7 @@ import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.machine.ItemRBMKRod; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.INBTPacketReceiver; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java index 20512c206..abbb5ceb1 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java @@ -1,10 +1,11 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { - + @Override public void onMelt(int reduce) { @@ -17,6 +18,11 @@ public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.ABSORBER; + } + @Override public ColumnType getConsoleType() { return ColumnType.ABSORBER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 44703c013..79cefa3b7 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -8,20 +8,26 @@ import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.entity.effect.EntitySpear; import com.hbm.entity.projectile.EntityRBMKDebris; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; +import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.BufPacket; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.IOverpressurable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.Compat; import com.hbm.util.I18nUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; @@ -45,7 +51,7 @@ import java.util.*; * @author hbm * */ -public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements INBTPacketReceiver { +public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements INBTPacketReceiver, IBufPacketReceiver { public double heat; @@ -111,7 +117,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements NBTTagCompound data = new NBTTagCompound(); this.writeToNBT(data); - this.networkPack(data, trackingRange()); + this.networkPackNT(trackingRange()); } } @@ -211,6 +217,13 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements this.markDirty(); } } + + @Override + public void invalidate() { + super.invalidate(); + + RBMKHandler.removeNode(new BlockPos(this)); // woo-fucking-hoo!!! + } @Override public void markDirty() { @@ -234,6 +247,8 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements if(heat < 20) heat = 20D; } + + public abstract RBMKType getRBMKType(); protected static boolean diag = false; @@ -260,25 +275,46 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements nbt.setInteger("water", this.water); nbt.setInteger("steam", this.steam); } - - public void networkPack(NBTTagCompound nbt, int range) { + @Deprecated + public void networkPack(NBTTagCompound nbt, int range) { diag = true; if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); diag = false; } - + + @Deprecated public void networkUnpack(NBTTagCompound nbt) { - + diag = true; this.readFromNBT(nbt); diag = false; } + + public void networkPackNT(int range) { + if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.muffled); + buf.writeDouble(this.heat); + buf.writeInt(this.water); + buf.writeInt(this.steam); + } + + @Override + public void deserialize(ByteBuf buf) { + this.muffled = buf.readBoolean(); + this.heat = buf.readDouble(); + this.water = buf.readInt(); + this.steam = buf.readInt(); + } public void getDiagData(NBTTagCompound nbt) { diag = true; - this.writeToNBT(nbt); + this.readFromNBT(nbt); diag = false; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java index 82a7137a9..08611e1b1 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKBlank extends TileEntityRBMKBase { @@ -17,6 +18,11 @@ public class TileEntityRBMKBlank extends TileEntityRBMKBase { super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OTHER; + } + @Override public ColumnType getConsoleType() { return ColumnType.BLANK; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 7a1a6ec0b..2a1ea6801 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -8,6 +8,7 @@ import api.hbm.tile.IInfoProviderEC; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerRBMKGeneric; import com.hbm.inventory.fluid.FluidType; @@ -21,6 +22,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -163,6 +165,20 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I steam.writeToNBT(nbt, "steam"); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + steam.serialize(buf); + feed.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.steam.deserialize(buf); + this.feed.deserialize(buf); + } + @Override public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; @@ -208,6 +224,11 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OTHER; + } + @Override public ColumnType getConsoleType() { return ColumnType.BOILER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index ffbaea36f..02b224c7a 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -103,7 +103,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(te instanceof TileEntityRBMKRod) { TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; - flux += fuel.fluxFast + fuel.fluxSlow; + flux += fuel.fluxQuantity; } } else { @@ -556,8 +556,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(te instanceof TileEntityRBMKRod){ TileEntityRBMKRod fuelChannel = (TileEntityRBMKRod)te; - data_table.put("fluxSlow", fuelChannel.fluxSlow); - data_table.put("fluxFast", fuelChannel.fluxFast); + data_table.put("fluxQuantity", fuelChannel.fluxQuantity); + data_table.put("fluxRatio", fuelChannel.fluxRatio); } if(te instanceof TileEntityRBMKBoiler){ diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java index 4b3f79c15..edb73195c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java @@ -2,9 +2,11 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -87,6 +89,20 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im nbt.setDouble("level", this.level); nbt.setDouble("targetLevel", this.targetLevel); } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.level); + buf.writeDouble(this.targetLevel); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.level = buf.readDouble(); + this.targetLevel = buf.readDouble(); + } @Override @SideOnly(Side.CLIENT) @@ -115,6 +131,11 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im this.standardMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.CONTROL_ROD; + } + @Override public NBTTagCompound getNBTForConsole() { NBTTagCompound data = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java index dc4159964..158c85083 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java @@ -8,6 +8,7 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -105,6 +106,24 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements nbt.setInteger("function", function.ordinal()); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.levelLower); + buf.writeDouble(this.levelUpper); + buf.writeDouble(this.heatLower); + buf.writeDouble(this.heatUpper); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.levelLower = buf.readDouble(); + this.levelUpper = buf.readDouble(); + this.heatLower = buf.readDouble(); + this.heatUpper = buf.readDouble(); + } + @Override public void receiveControl(NBTTagCompound data) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index 92ec4377e..d01438c7e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -9,6 +9,7 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -91,7 +92,7 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement if(nbt.hasKey("startingLevel")) this.startingLevel = nbt.getDouble("startingLevel"); - + if(nbt.hasKey("color")) this.color = RBMKColor.values()[nbt.getInteger("color")]; else @@ -108,6 +109,24 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement if(color != null) nbt.setInteger("color", color.ordinal()); } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.startingLevel); + if(this.color != null) + buf.writeInt(this.color.ordinal()); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.startingLevel = buf.readDouble(); + if(buf.isReadable(1)) { + int color = buf.readInt(); + this.color = RBMKColor.values()[MathHelper.clamp_int(color, 0, RBMKColor.values().length)]; + } + } public static enum RBMKColor { RED, diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java index bd7250cf7..e4134ab0c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java @@ -2,11 +2,13 @@ package com.hbm.tileentity.machine.rbmk; import api.hbm.fluid.IFluidStandardReceiver; import com.hbm.handler.CompatHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import cpw.mods.fml.common.Optional; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -15,6 +17,7 @@ import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; import java.util.List; @@ -101,6 +104,25 @@ public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidSt nbt.setInteger("cooled", this.lastCooled); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + this.tank.serialize(buf); + buf.writeInt(this.lastCooled); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.tank.deserialize(buf); + this.lastCooled = buf.readInt(); + } + + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OTHER; + } + @Override public ColumnType getConsoleType() { return ColumnType.COOLER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index 941fb9637..e54a5acbd 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -4,6 +4,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.container.ContainerRBMKHeater; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -17,6 +18,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -50,7 +52,7 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I if(!worldObj.isRemote) { feed.setType(0, slots); - + if(feed.getTankType().hasTrait(FT_Heatable.class)) { FT_Heatable trait = feed.getTankType().getTrait(FT_Heatable.class); HeatingStep step = trait.getFirstStep(); @@ -82,7 +84,7 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I super.updateEntity(); } - + protected DirPos[] getOutputPos() { if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.rbmk_loader) { @@ -125,7 +127,21 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I feed.writeToNBT(nbt, "feed"); steam.writeToNBT(nbt, "steam"); } - + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + this.feed.serialize(buf); + this.steam.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.feed.deserialize(buf); + this.steam.deserialize(buf); + } + @Override public void onMelt(int reduce) { @@ -138,6 +154,11 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OTHER; + } + @Override public ColumnType getConsoleType() { return ColumnType.HEATEX; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKInlet.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKInlet.java index be66e767d..301f5bb1c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKInlet.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKInlet.java @@ -4,14 +4,16 @@ import api.hbm.fluid.IFluidStandardReceiver; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityRBMKInlet extends TileEntityLoadedBase implements IFluidStandardReceiver { +public class TileEntityRBMKInlet extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver { public FluidTank water; @@ -61,6 +63,14 @@ public class TileEntityRBMKInlet extends TileEntityLoadedBase implements IFluidS this.water.writeToNBT(nbt, "tank"); } + public void serialize(ByteBuf buf) { + this.water.serialize(buf); + } + + public void deserialize(ByteBuf buf) { + this.water.deserialize(buf); + } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {water}; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java index 7abb95b12..7ce7c1e67 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java @@ -1,10 +1,11 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKModerator extends TileEntityRBMKBase { - + @Override public void onMelt(int reduce) { @@ -17,6 +18,11 @@ public class TileEntityRBMKModerator extends TileEntityRBMKBase { super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.MODERATOR; + } + @Override public ColumnType getConsoleType() { return ColumnType.MODERATOR; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 81c74e75d..95a851736 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -4,6 +4,7 @@ import api.hbm.fluid.IFluidStandardSender; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.FluidStack; import com.hbm.inventory.container.ContainerRBMKOutgasser; import com.hbm.inventory.fluid.Fluids; @@ -17,6 +18,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -90,14 +92,13 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement } @Override - public void receiveFlux(NType type, double flux) { + public void receiveFlux(RBMKHandler.NeutronStream stream) { if(canProcess()) { - - if(type == NType.FAST) - flux *= 0.2D; - - progress += flux * RBMKDials.getOutgasserMod(worldObj); + + double efficiency = Math.min((1 - stream.fluxRatio) * 0.8, 1); + + progress += stream.fluxQuantity * efficiency * RBMKDials.getOutgasserMod(worldObj); if(progress > duration) { process(); @@ -165,6 +166,11 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OUTGASSER; + } + @Override public ColumnType getConsoleType() { return ColumnType.OUTGASSER; @@ -196,6 +202,20 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement this.gas.writeToNBT(nbt, "gas"); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + this.gas.serialize(buf); + buf.writeDouble(this.progress); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.gas.deserialize(buf); + this.progress = buf.readDouble(); + } + @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { return OutgasserRecipes.getOutput(itemStack) != null && i == 0; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java index 259ac0b4c..0dc4cd89b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java @@ -4,14 +4,16 @@ import api.hbm.fluid.IFluidStandardSender; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityRBMKOutlet extends TileEntityLoadedBase implements IFluidStandardSender { +public class TileEntityRBMKOutlet extends TileEntityLoadedBase implements IFluidStandardSender, IBufPacketReceiver { public FluidTank steam; @@ -61,6 +63,16 @@ public class TileEntityRBMKOutlet extends TileEntityLoadedBase implements IFluid this.steam.writeToNBT(nbt, "tank"); } + @Override + public void serialize(ByteBuf buf) { + this.steam.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + this.steam.deserialize(buf); + } + public void fillFluidInit() { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.sendFluid(steam, worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java index ed5b1afc0..79e40867b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKReflector extends TileEntityRBMKBase { @@ -17,6 +18,11 @@ public class TileEntityRBMKReflector extends TileEntityRBMKBase { super.onMelt(reduce); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.REFLECTOR; + } + @Override public ColumnType getConsoleType() { return ColumnType.REFLECTOR; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index f67843023..ad88de20b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -6,12 +6,13 @@ import com.hbm.blocks.machine.rbmk.RBMKRod; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; import com.hbm.handler.radiation.ChunkRadiationManager; +import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler.NeutronStream; import com.hbm.inventory.container.ContainerRBMKRod; import com.hbm.inventory.gui.GUIRBMKRod; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRBMKRod; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; -import com.hbm.util.Compat; import com.hbm.util.CompatEnergyControl; import com.hbm.util.ParticleUtil; @@ -19,6 +20,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -28,17 +30,22 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import java.util.ArrayList; +import java.util.List; + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { - - //amount of "neutron energy" buffered for the next tick to use for the reaction - public double fluxFast; - public double fluxSlow; + + // New system!! + // Used for receiving flux (calculating outbound flux/burning rods) + public double fluxRatio; + public double fluxQuantity; + public boolean hasRod; public TileEntityRBMKRod() { @@ -49,243 +56,167 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public String getName() { return "container.rbmkRod"; } - + @Override public boolean isModerated() { return ((RBMKRod)this.getBlockType()).moderated; } - + @Override public int trackingRange() { return 25; } - @SuppressWarnings("incomplete-switch") //shut the fuck up @Override - public void receiveFlux(NType type, double flux) { - - switch(type) { - case FAST: this.fluxFast += flux; break; - case SLOW: this.fluxSlow += flux; break; - } + public void receiveFlux(NeutronStream stream) { + double fastFlux = this.fluxQuantity * this.fluxRatio; + double fastFluxIn = stream.fluxQuantity * stream.fluxRatio; + + this.fluxQuantity += stream.fluxQuantity; + fluxRatio = (fastFlux + fastFluxIn) / fluxQuantity; } - + @Override public void updateEntity() { if(!worldObj.isRemote) { - + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { - + ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); - + double fluxIn = fluxFromType(rod.nType); - double fluxOut = rod.burn(worldObj, slots[0], fluxIn); + double fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); + double fluxRatioOut; NType rType = rod.rType; - + if(rType == NType.SLOW) + fluxRatioOut = 0; + else + fluxRatioOut = 1; + rod.updateHeat(worldObj, slots[0], 1.0D); this.heat += rod.provideHeat(worldObj, slots[0], heat, 1.0D); - + if(!this.hasLid()) { - ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, (float) ((this.fluxFast + this.fluxSlow) * 0.05F)); + ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, (float) (this.fluxQuantity * 0.05F)); } - + super.updateEntity(); - + if(this.heat > this.maxHeat()) { - + if(RBMKDials.getMeltdownsDisabled(worldObj)) { ParticleUtil.spawnGasFlame(worldObj, xCoord + 0.5, yCoord + RBMKDials.getColumnHeight(worldObj) + 0.5, zCoord + 0.5, 0, 0.2, 0); } else { this.meltdown(); } - this.fluxFast = 0; - this.fluxSlow = 0; + this.fluxQuantity = 0; return; } - - if(this.heat > 10_000) this.heat = 10_000; - - //for spreading, we want the buffered flux to be 0 because we want to know exactly how much gets reflected back - this.fluxFast = 0; - this.fluxSlow = 0; - this.worldObj.theProfiler.startSection("rbmkRod_flux_spread"); - spreadFlux(rType, fluxOut); - this.worldObj.theProfiler.endSection(); - + if(this.heat > 10_000) this.heat = 10_000; + + //for spreading, we want the buffered flux to be 0 because we want to know exactly how much gets reflected back + this.fluxQuantity = 0; + spreadFlux(fluxQuantityOut, fluxRatioOut); + hasRod = true; - + } else { - this.fluxFast = 0; - this.fluxSlow = 0; - + this.fluxQuantity = 0; + this.fluxRatio = 0; + hasRod = false; - + super.updateEntity(); } } } - - /** - * SLOW: full efficiency for slow neutrons, fast neutrons have half efficiency - * FAST: fast neutrons have 100% efficiency, slow only 30% - * ANY: just add together whatever we have because who cares - * @param type - * @return - */ - + private double fluxFromType(NType type) { - + + switch(type) { - case SLOW: return this.fluxFast * 0.5D + this.fluxSlow; - case FAST: return this.fluxFast + this.fluxSlow * 0.3D; - case ANY: return this.fluxFast + this.fluxSlow; + case SLOW: return (this.fluxQuantity * (1 - this.fluxRatio) + Math.min(this.fluxRatio * 0.5, 1)); + case FAST: return (this.fluxQuantity * this.fluxRatio + Math.min((1 - this.fluxRatio) * 0.3, 1)); + case ANY: return this.fluxQuantity; } - + return 0.0D; } - + public static final ForgeDirection[] fluxDirs = new ForgeDirection[] { ForgeDirection.NORTH, ForgeDirection.EAST, ForgeDirection.SOUTH, ForgeDirection.WEST }; - - protected static NType stream; - - protected void spreadFlux(NType type, double fluxOut) { - - int range = RBMKDials.getFluxRange(worldObj); - - for(ForgeDirection dir : fluxDirs) { - - stream = type; - double flux = fluxOut; - - for(int i = 1; i <= range; i++) { - - flux = runInteraction(xCoord + dir.offsetX * i, yCoord, zCoord + dir.offsetZ * i, flux); - - if(flux <= 0) - break; - } - } - } - - protected double runInteraction(int x, int y, int z, double flux) { - - TileEntity te = Compat.getTileStandard(worldObj, x, y, z); - - if(te instanceof TileEntityRBMKBase) { - TileEntityRBMKBase base = (TileEntityRBMKBase) te; - - if(!base.hasLid()) - ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, (float) (flux * 0.05F)); - - if(base.isModerated()) { - this.stream = NType.SLOW; - } - } - //burn baby burn - if(te instanceof TileEntityRBMKRod) { - TileEntityRBMKRod rod = (TileEntityRBMKRod)te; - - if(rod.getStackInSlot(0) != null && rod.getStackInSlot(0).getItem() instanceof ItemRBMKRod) { - rod.receiveFlux(stream, flux); - return 0; - } else { - return flux; - } + protected static NType stream; + + public void spreadFlux(double flux, double ratio) { + + for(ForgeDirection dir : fluxDirs) { + + Vec3 neutronVector = Vec3.createVectorHelper(dir.offsetX, dir.offsetY, dir.offsetZ); + + new NeutronStream(RBMKHandler.makeNode(this), neutronVector, flux, ratio); + // Create new neutron streams } - - if(te instanceof TileEntityRBMKOutgasser) { - TileEntityRBMKOutgasser rod = (TileEntityRBMKOutgasser)te; - - if(!rod.canProcess()) { - return flux; - } - } - - if(te instanceof IRBMKFluxReceiver) { - IRBMKFluxReceiver rod = (IRBMKFluxReceiver)te; - rod.receiveFlux(stream, flux); - return 0; - } - - //multiply neutron count with rod setting - if(te instanceof TileEntityRBMKControl) { - TileEntityRBMKControl control = (TileEntityRBMKControl)te; - - if(control.getMult() == 0.0D) - return 0; - - flux *= control.getMult(); - - return flux; - } - - //set neutrons to slow - if(te instanceof TileEntityRBMKModerator) { - stream = NType.SLOW; - return flux; - } - - //return the neutrons back to this with no further action required - if(te instanceof TileEntityRBMKReflector) { - this.receiveFlux(this.isModerated() ? NType.SLOW : stream, flux); - return 0; - } - - //break the neutron flow and nothign else - if(te instanceof TileEntityRBMKAbsorber) { - return 0; - } - - if(te instanceof TileEntityRBMKBase) { - return flux; - } - - int limit = RBMKDials.getColumnHeight(worldObj); - int hits = 0; - for(int h = 0; h <= limit; h++) { - - if(!worldObj.getBlock(x, y + h, z).isOpaqueCube()) - hits++; - } - - if(hits > 0) - ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, (float) (flux * 0.05F * hits / (float)limit)); - - return 0; } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - this.fluxFast = nbt.getDouble("fluxFast"); - this.fluxSlow = nbt.getDouble("fluxSlow"); + if(nbt.hasKey("fluxFast") || nbt.hasKey("fluxSlow")) { + // recalculate new values to keep stable operations + this.fluxQuantity = nbt.getDouble("fluxFast") + nbt.getDouble("fluxSlow"); + if(this.fluxQuantity > 0) + this.fluxRatio = nbt.getDouble("fluxFast") / fluxQuantity; + else + this.fluxRatio = 0; + nbt.removeTag("fluxSlow"); + nbt.removeTag("fluxFast"); + writeToNBT(nbt); + } else { + this.fluxQuantity = nbt.getDouble("fluxQuantity"); + this.fluxRatio = nbt.getDouble("fluxRatio"); + } this.hasRod = nbt.getBoolean("hasRod"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setDouble("fluxFast", this.fluxFast); - nbt.setDouble("fluxSlow", this.fluxSlow); + nbt.setDouble("fluxQuantity", this.fluxQuantity); + nbt.setDouble("fluxRatio", this.fluxRatio); nbt.setBoolean("hasRod", this.hasRod); } - + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.fluxQuantity); + buf.writeDouble(this.fluxRatio); + buf.writeBoolean(this.hasRod); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.fluxQuantity = buf.readDouble(); + this.fluxRatio = buf.readDouble(); + this.hasRod = buf.readBoolean(); + } + public void getDiagData(NBTTagCompound nbt) { this.writeToNBT(nbt); - + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { - + ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); nbt.setString("f_yield", rod.getYield(slots[0]) + " / " + rod.yield + " (" + (rod.getEnrichment(slots[0]) * 100) + "%)"); @@ -293,55 +224,60 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM nbt.setString("f_heat", rod.getCoreHeat(slots[0]) + " / " + rod.getHullHeat(slots[0]) + " / " + rod.meltingPoint); } } - + @Override public void onMelt(int reduce) { boolean moderated = this.isModerated(); int h = RBMKDials.getColumnHeight(worldObj); reduce = MathHelper.clamp_int(reduce, 1, h); - + if(worldObj.rand.nextInt(3) == 0) reduce++; - + boolean corium = slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod; - - if(corium && slots[0].getItem() == ModItems.rbmk_fuel_drx) + + if(corium && slots[0].getItem() == ModItems.rbmk_fuel_drx) RBMKBase.digamma = true; - + slots[0] = null; if(corium) { - + for(int i = h; i >= 0; i--) { worldObj.setBlock(xCoord, yCoord + i, zCoord, ModBlocks.corium_block, 5, 3); worldObj.markBlockForUpdate(xCoord, yCoord + i, zCoord); } - + int count = 1 + worldObj.rand.nextInt(RBMKDials.getColumnHeight(worldObj)); - + for(int i = 0; i < count; i++) { spawnDebris(DebrisType.FUEL); } } else { this.standardMelt(reduce); } - + if(moderated) { - + int count = 2 + worldObj.rand.nextInt(2); - + for(int i = 0; i < count; i++) { spawnDebris(DebrisType.GRAPHITE); } } - + spawnDebris(DebrisType.ELEMENT); - + if(this.getBlockMetadata() == RBMKBase.DIR_NORMAL_LID.ordinal() + RBMKBase.offset) spawnDebris(DebrisType.LID); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.ROD; + } + @Override public ColumnType getConsoleType() { return ColumnType.FUEL; @@ -350,9 +286,9 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM @Override public NBTTagCompound getNBTForConsole() { NBTTagCompound data = new NBTTagCompound(); - + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { - + ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); data.setDouble("enrichment", rod.getEnrichment(slots[0])); data.setDouble("xenon", rod.getPoison(slots[0])); @@ -360,7 +296,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM data.setDouble("c_coreHeat", rod.getCoreHeat(slots[0])); data.setDouble("c_maxHeat", rod.meltingPoint); } - + return data; } @@ -390,7 +326,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM slots[0] = null; this.markDirty(); } - + // do some opencomputer stuff @Override @Optional.Method(modid = "OpenComputers") @@ -406,16 +342,16 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM @Callback(direct = true) @Optional.Method(modid = "OpenComputers") - public Object[] getFluxSlow(Context context, Arguments args) { - return new Object[] {fluxSlow}; + public Object[] getFluxQuantity(Context context, Arguments args) { + return new Object[] {fluxQuantity}; } @Callback(direct = true) @Optional.Method(modid = "OpenComputers") - public Object[] getFluxFast(Context context, Arguments args) { - return new Object[] {fluxFast}; + public Object[] getFluxRatio(Context context, Arguments args) { + return new Object[] {fluxRatio}; } - + @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getDepletion(Context context, Arguments args) { @@ -464,25 +400,21 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - Object OC_enrich_buf; - Object OC_poison_buf; - Object OC_hull_buf; - Object OC_core_buf; - String OC_type; + List returnValues = new ArrayList<>(); if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { - OC_enrich_buf = ItemRBMKRod.getEnrichment(slots[0]); - OC_poison_buf = ItemRBMKRod.getPoison(slots[0]); - OC_hull_buf = ItemRBMKRod.getHullHeat(slots[0]); - OC_core_buf = ItemRBMKRod.getCoreHeat(slots[0]); - OC_type = slots[0].getItem().getUnlocalizedName(); - } else { - OC_enrich_buf = "N/A"; - OC_poison_buf = "N/A"; - OC_hull_buf = "N/A"; - OC_core_buf = "N/A"; - OC_type = "N/A"; - } - return new Object[] {heat, OC_hull_buf, OC_core_buf, fluxSlow, fluxFast, OC_enrich_buf, OC_poison_buf, OC_type, ((RBMKRod)this.getBlockType()).moderated, xCoord, yCoord, zCoord}; + returnValues.add(ItemRBMKRod.getHullHeat(slots[0])); + returnValues.add(ItemRBMKRod.getCoreHeat(slots[0])); + returnValues.add(ItemRBMKRod.getEnrichment(slots[0])); + returnValues.add(ItemRBMKRod.getPoison(slots[0])); + returnValues.add(slots[0].getItem().getUnlocalizedName()); + } else + for (int i = 0; i < 5; i++) + returnValues.add("N/A"); + + return new Object[] { + heat, returnValues.get(0), returnValues.get(1), + fluxQuantity, fluxRatio, returnValues.get(2), returnValues.get(3), returnValues.get(4), + ((RBMKRod)this.getBlockType()).moderated, xCoord, yCoord, zCoord}; } @Callback(direct = true) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java index e8e284a07..7114db0c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java @@ -1,7 +1,9 @@ package com.hbm.tileentity.machine.rbmk; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; +import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.util.Vec3; public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { @@ -16,40 +18,17 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { } @Override - protected void spreadFlux(NType type, double fluxOut) { + public void spreadFlux(double flux, double ratio) { - int range = RBMKDials.getReaSimRange(worldObj); int count = RBMKDials.getReaSimCount(worldObj); - - Vec3 dir = Vec3.createVectorHelper(1, 0, 0); - - for(int i = 0; i < count; i++) { - - stream = type; - double flux = fluxOut * RBMKDials.getReaSimOutputMod(worldObj); - - dir.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); - - for(int j = 1; j <= range; j++) { - int x = (int)Math.floor(0.5 + dir.xCoord * j); - int z = (int)Math.floor(0.5 + dir.zCoord * j); - int lastX = (int)Math.floor(0.5 + dir.xCoord * (j - 1)); - int lastZ = (int)Math.floor(0.5 + dir.zCoord * (j - 1)); - - //skip if the position is on the rod itself - if(x == 0 && z == 0) - continue; - - //skip if the current position is equal to the last position - if(x == lastX && z == lastZ) - continue; - - flux = runInteraction(xCoord + x, yCoord, zCoord + z, flux); - - if(flux <= 0) - break; - } + for (int i = 0; i < count; i++) { + Vec3 neutronVector = Vec3.createVectorHelper(1, 0, 0); + + neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + + new RBMKHandler.NeutronStream(RBMKHandler.makeNode(this), neutronVector, flux, ratio); + // Create new neutron streams } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java index a670b6c09..ac8621882 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine.rbmk; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.container.ContainerRBMKStorage; import com.hbm.inventory.gui.GUIRBMKStorage; import com.hbm.items.machine.ItemRBMKRod; @@ -40,6 +41,11 @@ public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements super.updateEntity(); } + @Override + public RBMKHandler.RBMKType getRBMKType() { + return RBMKHandler.RBMKType.OTHER; + } + @Override public ColumnType getConsoleType() { return ColumnType.STORAGE; From 18bb7f63c45931a1c23f6583e9596e85555fc32f Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:30:34 -0500 Subject: [PATCH 02/17] fuck! --- src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java | 2 +- .../com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java index e8f2867bb..7f4874c50 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java @@ -57,7 +57,7 @@ public class RBMKDials { rules.setOrCreateGameRule(KEY_REASIM_BOILER_SPEED, "0.05"); rules.setOrCreateGameRule(KEY_DISABLE_MELTDOWNS, "false"); rules.setOrCreateGameRule(KEY_ENABLE_MELTDOWN_OVERPRESSURE, "false"); - rules.setOrCreateGameRule(KEY_MODERATOR_EFFICIENCY, "1"); + rules.setOrCreateGameRule(KEY_MODERATOR_EFFICIENCY, "1.0"); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 79cefa3b7..f83fa95c2 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -314,7 +314,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements public void getDiagData(NBTTagCompound nbt) { diag = true; - this.readFromNBT(nbt); + this.writeToNBT(nbt); diag = false; } From fce0b080565dad81950142018ac6ac01bf0dcf12 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:11:54 -0500 Subject: [PATCH 03/17] this is fucking insane dude RBMK optimization update soon!!!!!!! --- .../java/api/hbm/energymk2/Nodespace.java | 1 + .../com/hbm/blocks/machine/rbmk/RBMKBase.java | 8 + .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 316 +++++++++++------- .../com/hbm/items/machine/ItemRBMKLid.java | 10 +- .../java/com/hbm/main/ModEventHandler.java | 8 +- .../machine/rbmk/TileEntityRBMKBase.java | 19 +- .../machine/rbmk/TileEntityRBMKOutgasser.java | 2 +- .../machine/rbmk/TileEntityRBMKRod.java | 22 +- .../rbmk/TileEntityRBMKSlottedBase.java | 4 - 9 files changed, 239 insertions(+), 151 deletions(-) diff --git a/src/main/java/api/hbm/energymk2/Nodespace.java b/src/main/java/api/hbm/energymk2/Nodespace.java index cdc618f51..07a5b94b2 100644 --- a/src/main/java/api/hbm/energymk2/Nodespace.java +++ b/src/main/java/api/hbm/energymk2/Nodespace.java @@ -8,6 +8,7 @@ import java.util.Set; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import cpw.mods.fml.common.gameevent.TickEvent; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java index 1293874a8..55975c521 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java @@ -3,6 +3,7 @@ package com.hbm.blocks.machine.rbmk; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRBMKLid; import com.hbm.lib.RefStrings; @@ -11,6 +12,7 @@ import com.hbm.tileentity.machine.rbmk.RBMKDials; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBase; import api.hbm.block.IToolable; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; @@ -27,6 +29,8 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; +import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; + public abstract class RBMKBase extends BlockDummyable implements IToolable, ILookOverlay { public static boolean dropLids = true; @@ -170,6 +174,10 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo int i = rbmk.getBlockMetadata(); if(rbmk.hasLid() && rbmk.isLidRemovable()) { + + RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + if (node != null) + node.removeLid(); if(!world.isRemote) { if(i == DIR_NORMAL_LID.ordinal() + offset) { diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index 03d369ae6..1b92d92a6 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -4,13 +4,16 @@ import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.tileentity.machine.rbmk.*; import com.hbm.util.fauxpointtwelve.BlockPos; -import net.minecraft.block.Block; -import net.minecraft.server.MinecraftServer; + +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; - -import java.util.*; +import net.minecraftforge.common.util.ForgeDirection; public class RBMKHandler { @@ -30,6 +33,10 @@ public class RBMKHandler { OTHER // why do neutron calculations on them if they won't change anything? } + private static TileEntity blockPosToTE(World worldObj, BlockPos pos) { + return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); + } + public static class RBMKNode { protected RBMKType type; @@ -40,16 +47,66 @@ public class RBMKHandler { this.type = type; this.tile = tile; this.hasLid = tile.hasLid(); - addNode(this); + } + + public void addLid() { + this.hasLid = true; + } + + public void removeLid() { + this.hasLid = false; + } + + public void checkNode(BlockPos pos) { + + if (tile == null) + removeNode(pos); // what the fuck??? + + if (tile.isInvalid()) + removeNode(pos); + + if (tile instanceof TileEntityRBMKRod && !(tile instanceof TileEntityRBMKRodReaSim)) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; + if (!rod.hasRod) { + + // Simulate streams coming out of the RBMK rod find nodes to uncache. + + for (ForgeDirection dir : TileEntityRBMKRod.fluxDirs) { + NeutronStream stream = new NeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ)); + + List nodes = stream.getNodes(false); + for (RBMKNode nodeToRemove : nodes) + removeNode(new BlockPos(nodeToRemove.tile)); + } + } + } + + // TODO: Implement `hasRodInRange` for non-rod tile uncaching. } } - private static TileEntity blockPosToTE(World worldObj, BlockPos pos) { - return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); + public static RBMKNode makeNode(TileEntityRBMKBase tile) { + BlockPos pos = new BlockPos(tile); + if (nodeCache.containsKey(pos)) + return getNode(pos); + return new RBMKNode(tile, tile.getRBMKType()); } - public static RBMKNode makeNode(TileEntityRBMKBase tile) { - return new RBMKNode(tile, tile.getRBMKType()); + public static class StreamWorld { + + List streams; + + public StreamWorld() { + streams = new ArrayList<>(); + } + + public void addStream(NeutronStream stream) { + this.streams.add(stream); + } + + public void removeAllStreams() { + this.streams.clear(); + } } public static class NeutronStream { @@ -66,12 +123,25 @@ public class RBMKHandler { // Vector for direction of neutron flow. public Vec3 vector; + // Primarily used as a "dummy stream", not to be added to the streams list. + public NeutronStream(RBMKNode origin, Vec3 vector) { + this.origin = origin; + this.vector = vector; + } + public NeutronStream(RBMKNode origin, Vec3 vector, double flux, double ratio) { this.origin = origin; this.vector = vector; this.fluxQuantity = flux; this.fluxRatio = ratio; - streams.put(this, origin.tile.getWorldObj()); + World worldObj = origin.tile.getWorldObj(); + if (streamWorlds.get(worldObj) != null) + streamWorlds.get(worldObj).addStream(this); + else { + StreamWorld world = new StreamWorld(); + world.addStream(this); + streamWorlds.put(worldObj, world); + } } public List getBlocks() { @@ -90,7 +160,7 @@ public class RBMKHandler { // This, however, is used for actual RBMK flux calculations. // Does NOT include the origin node // USES THE CACHE!!! - public List getNodes() { + public List getNodes(boolean cache) { List positions = new ArrayList<>(); for (int i = 1; i <= fluxRange; i++) { @@ -99,24 +169,18 @@ public class RBMKHandler { BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - if (nodeCache.containsKey(pos)) { - positions.add(nodeCache.get(pos)); - continue; - } + if (nodeCache.containsKey(pos) && cache) + positions.add(getNode(pos)); - // If it isn't an RBMK block then don't do anything with it - if(!(origin.tile.getBlockType() instanceof RBMKBase)) - continue; - - TileEntity te = blockPosToTE(origin.tile.getWorldObj(), pos); - - if (te instanceof TileEntityRBMKBase) { - TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase) te; - RBMKType type = rbmkBase.getRBMKType(); - // they should ALL be RBMKBase TEs - RBMKNode node = new RBMKNode(rbmkBase, type); - positions.add(node); - addNode(node); + else if (this.origin.tile.getBlockType() instanceof RBMKBase) { + TileEntity te = blockPosToTE(this.origin.tile.getWorldObj(), pos); + if (te instanceof TileEntityRBMKBase) { + TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase)te; + RBMKNode node = makeNode(rbmkBase); + positions.add(node); + if (cache) + addNode(node); + } } } return positions; @@ -143,6 +207,7 @@ public class RBMKHandler { } int moderatedCount = 0; + double totalFluxMod = 1; for(BlockPos nodePos : getBlocks()) { @@ -152,33 +217,28 @@ public class RBMKHandler { RBMKNode node = nodeCache.get(nodePos); if(node == null) { - TileEntity te = blockPosToTE(worldObj, nodePos); // ok, maybe it didn't get added to the list somehow? + TileEntity te = blockPosToTE(worldObj, nodePos); // ok, maybe it didn't get added to the list somehow?? if (te instanceof TileEntityRBMKBase) { node = makeNode((TileEntityRBMKBase) te); addNode(node); // whoops! - } else - return; // TE no longer exists, die!! + } else { + int hits = getHits(nodePos); // Get the amount of hits on blocks. + if (hits == columnHeight) // If stream is fully blocked. + return; + else if (hits > 0) { // If stream is partially blocked. + irradiateFromFlux(pos, hits); + fluxQuantity *= 1 - ((double) hits / columnHeight); // Inverse to get partial blocking by blocks. + continue; + } else { // Nothing hit! + irradiateFromFlux(pos, 0); + continue; + } + } } if(node.type == RBMKType.OTHER) // pass right on by! continue; - Block block = node.tile.getBlockType(); - - if (!(block instanceof RBMKBase)) { - int hits = getHits(nodePos); // Get the amount of hits on blocks. - if (hits == columnHeight) // If stream is fully blocked. - return; - else if (hits > 0) { // If stream is partially blocked. - irradiateFromFlux(pos, hits); - fluxQuantity *= 1 - ((double) hits / columnHeight); // Inverse to get partial blocking by blocks. - continue; - } else { // Nothing hit! - irradiateFromFlux(pos, 0); - continue; - } - } - // we established earlier during `getNodes()` that they should all be RBMKBase TEs // no issue with casting here! TileEntityRBMKBase nodeTE = node.tile; @@ -186,17 +246,17 @@ public class RBMKHandler { if(!node.hasLid) ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); - if(node.type == RBMKType.MODERATOR) { - moderatedCount += 1; + if (node.type == RBMKHandler.RBMKType.MODERATOR) { + moderatedCount++; moderateStream(); } - if(node.tile instanceof IRBMKFluxReceiver) { - IRBMKFluxReceiver column = ((IRBMKFluxReceiver) nodeTE); - if(node.type == RBMKType.ROD) { - TileEntityRBMKRod rod = ((TileEntityRBMKRod) column); - if(rod.hasRod) { - if(rod.isModerated()) + if (nodeTE instanceof IRBMKFluxReceiver) { + IRBMKFluxReceiver column = (IRBMKFluxReceiver)nodeTE; + if (node.type == RBMKHandler.RBMKType.ROD) { + TileEntityRBMKRod rod = (TileEntityRBMKRod)column; + if (rod.hasRod) { + if (rod.isModerated()) moderateStream(); rod.receiveFlux(this); return; @@ -208,67 +268,54 @@ public class RBMKHandler { return; } } - } - else if(node.type == RBMKType.CONTROL_ROD) { - TileEntityRBMKControl rod = ((TileEntityRBMKControl) nodeTE); - if (rod.level > 0D) - fluxQuantity *= ((TileEntityRBMKControl) nodeTE).getMult(); - else - return; - } - - else if(node.type == RBMKType.REFLECTOR) { - if((origin.tile).isModerated()) - moderatedCount += 1; - if (fluxRatio > 0D && moderatedCount > 0) { - for (int i = 0; i < moderatedCount; i++) { - moderateStream(); // Moderate streams on the way back! - } - } - if(reflectorEfficiency != 1) { - fluxQuantity *= reflectorEfficiency; - } else { - ((TileEntityRBMKRod) originTE).receiveFlux(this); - // this one missing return line was baffling me for half an hour - // "why is this rod jumping to double the flux randomly????" - // because you aren't fucking returning from the function, and it's hitting the reflector after it, you idiot - return; + } else if (node.type == RBMKHandler.RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = (TileEntityRBMKControl)nodeTE; + if (rod.level > 0.0D) { + this.fluxQuantity *= rod.getMult(); + totalFluxMod *= rod.getMult(); + continue; } + return; } - else if(node.type == RBMKType.ABSORBER) { - if (absorberEfficiency == 1) - return; // Instantly stop stream processing. - else - fluxQuantity *= absorberEfficiency; + if (node.type == RBMKHandler.RBMKType.REFLECTOR) { + if (this.origin.tile.isModerated()) + moderatedCount++; + if (this.fluxRatio > 0 && moderatedCount > 0) + for (int i = 0; i < moderatedCount; i++) + moderateStream(); + if (totalFluxMod < 1) + this.fluxQuantity *= totalFluxMod; + if (RBMKHandler.reflectorEfficiency != 1.0D) { + this.fluxQuantity *= RBMKHandler.reflectorEfficiency; + continue; + } + ((TileEntityRBMKRod)originTE).receiveFlux(this); + return; + } + if (node.type == RBMKHandler.RBMKType.ABSORBER) { + if (RBMKHandler.absorberEfficiency == 1) + return; + this.fluxQuantity *= RBMKHandler.absorberEfficiency; } } - // Called *after* most streams have returned. - List nodes = getNodes(); - - if(nodes.isEmpty()) // how tf did we get here if its empty + List nodes = getNodes(true); + if (nodes.isEmpty()) return; - // Get the last node in the stream. - RBMKNode lastNode = nodes.get(nodes.size() - 1); + RBMKHandler.RBMKNode lastNode = nodes.get(nodes.size() - 1); - // Block hits don't have to be considered here, since if it's fully blocked it'll return the function before getting here. - if(lastNode.type != RBMKType.REFLECTOR && lastNode.type != RBMKType.ABSORBER && lastNode.type != RBMKType.CONTROL_ROD) { - // Neutrons must not have been caught then! - irradiateFromFlux(new BlockPos(lastNode.tile).add(vector.xCoord, 0, vector.zCoord)); - } + if (lastNode.type != RBMKHandler.RBMKType.REFLECTOR && lastNode.type != RBMKHandler.RBMKType.ABSORBER && lastNode.type != RBMKHandler.RBMKType.CONTROL_ROD) + irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); - // but oh wait, control rods exist - if(lastNode.type == RBMKType.CONTROL_ROD) { - TileEntityRBMKControl rod = ((TileEntityRBMKControl) lastNode.tile); - // just get level and irradiate based on that - if(rod.getMult() > 0D) { - fluxQuantity = fluxQuantity * rod.getMult(); - irradiateFromFlux(new BlockPos(lastNode.tile).add(vector.xCoord, 0, vector.zCoord)); + if (lastNode.type == RBMKHandler.RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = (TileEntityRBMKControl)lastNode.tile; + if (rod.getMult() > 0.0D) { + this.fluxQuantity *= rod.getMult(); + irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); } - } } @@ -279,8 +326,8 @@ public class RBMKHandler { // holy fucking shit // I have had this one line cause me like tens of problems // I FUCKING HATE THIS - // total count of bugs fixed attributed to this function: 6 - if (!origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()).isOpaqueCube()) + // total count of bugs fixed attributed to this function: 10 + if (origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()).isOpaqueCube()) hits += 1; } @@ -296,16 +343,20 @@ public class RBMKHandler { } public void moderateStream() { - fluxRatio = fluxRatio * (1 - moderatorEfficiency); + fluxRatio *= (1 - moderatorEfficiency); } } + // List of all stream worlds. + public static HashMap streamWorlds = new HashMap<>(); + + public static void removeAllWorlds() { + streamWorlds.clear(); + } + // HashMap of all RBMK nodes and their positions. protected static HashMap nodeCache = new HashMap<>(); - // List of all active neutron streams. - public static HashMap streams = new HashMap<>(); - public static void addNode(RBMKNode node) { nodeCache.put(new BlockPos(node.tile), node); } @@ -314,26 +365,47 @@ public class RBMKHandler { nodeCache.remove(position); } + public static RBMKNode getNode(BlockPos position) { + return nodeCache.get(position); + } + + public static void removeAllNodes() { + nodeCache.clear(); + } + + static int cacheTime = 40; + static int ticks = 0; + // The big one!! Runs all interactions for neutrons. public static void runAllInteractions() { - for (World worldObj : MinecraftServer.getServer().worldServers) { + for (Entry world : streamWorlds.entrySet()) { + // Gamerule caching because this apparently is kinda slow? // meh, good enough - reflectorEfficiency = 1; //RBMKDials.getReflectorEfficiency(); - absorberEfficiency = 1; //RBMKDials.getAbsorberEfficiency(); - moderatorEfficiency = RBMKDials.getModeratorEfficiency(worldObj); + reflectorEfficiency = 1; //RBMKDials.getReflectorEfficiency(world.worldObj); + absorberEfficiency = 1; //RBMKDials.getAbsorberEfficiency(world.worldObj); + moderatorEfficiency = RBMKDials.getModeratorEfficiency(world.getKey()); + // I hate this. // this broke everything because it was ONE OFF // IT'S NOT THE TOTAL HEIGHT IT'S THE AMOUNT OF BLOCKS ABOVE AAAAAAAAAAAAA - columnHeight = RBMKDials.getColumnHeight(worldObj) + 1; - fluxRange = RBMKDials.getFluxRange(worldObj); - streams.forEach((stream, world) -> { - if (world == worldObj) - // WOO!! - stream.runStreamInteraction(world); - }); + columnHeight = RBMKDials.getColumnHeight(world.getKey()) + 1; + fluxRange = RBMKDials.getFluxRange(world.getKey()); + + for (NeutronStream stream : world.getValue().streams) { + stream.runStreamInteraction(world.getKey()); + } + world.getValue().removeAllStreams(); } - streams.clear(); + + // Freshen the node cache every `cacheTime` ticks to prevent huge RAM usage. + if (ticks >= cacheTime) { + ticks = 0; + for(Entry cachedNode : nodeCache.entrySet()) { + cachedNode.getValue().checkNode(cachedNode.getKey()); + } + } + ticks++; } } diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java index 1c1490798..c2e215307 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java @@ -2,9 +2,11 @@ package com.hbm.items.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; +import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBase; +import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -13,6 +15,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; + public class ItemRBMKLid extends Item { @Override @@ -37,7 +41,11 @@ public class ItemRBMKLid extends Item { if(tile.hasLid()) return false; - + + RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + if (node != null) + node.addLid(); + int meta = RBMKBase.DIR_NORMAL_LID.ordinal(); if(this == ModItems.rbmk_lid_glass) { diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index bf1e44abb..f6b34c1b8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -535,6 +535,12 @@ public class ModEventHandler { public void onLoad(WorldEvent.Load event) { BobmazonOfferFactory.init(); } + + @SubscribeEvent + public void onUnload(WorldEvent.Unload event) { + RBMKHandler.removeAllWorlds(); // Remove world from worlds when unloaded to avoid world issues. + RBMKHandler.removeAllNodes(); // Remove all nodes. + } public static boolean didSit = false; public static Field reference = null; @@ -1146,9 +1152,7 @@ public class ModEventHandler { TileEntityMachineRadarNT.updateSystem(); Nodespace.updateNodespace(); // RBMK!!!! - MinecraftServer.getServer().theProfiler.startSection("rbmkHandler_flux_interaction"); RBMKHandler.runAllInteractions(); - MinecraftServer.getServer().theProfiler.endSection(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index f83fa95c2..d53979773 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -22,6 +22,7 @@ import com.hbm.tileentity.IOverpressurable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.Compat; +import com.hbm.util.GameRuleHelper; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -51,7 +52,7 @@ import java.util.*; * @author hbm * */ -public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements INBTPacketReceiver, IBufPacketReceiver { +public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements IBufPacketReceiver { public double heat; @@ -276,22 +277,6 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements nbt.setInteger("steam", this.steam); } - @Deprecated - public void networkPack(NBTTagCompound nbt, int range) { - diag = true; - if(!worldObj.isRemote) - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - diag = false; - } - - @Deprecated - public void networkUnpack(NBTTagCompound nbt) { - - diag = true; - this.readFromNBT(nbt); - diag = false; - } - public void networkPackNT(int range) { if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 95a851736..3b701fc0e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -96,7 +96,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement if(canProcess()) { - double efficiency = Math.min((1 - stream.fluxRatio) * 0.8, 1); + double efficiency = Math.min(1 - stream.fluxRatio * 0.8, 1); progress += stream.fluxQuantity * efficiency * RBMKDials.getOutgasserMod(worldObj); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index ad88de20b..05045ca37 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -17,6 +17,7 @@ import com.hbm.util.CompatEnergyControl; import com.hbm.util.ParticleUtil; import api.hbm.tile.IInfoProviderEC; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -38,6 +39,9 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; +import static com.hbm.handler.rbmkmk2.RBMKHandler.addNode; +import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { @@ -116,6 +120,8 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM if(this.heat > 10_000) this.heat = 10_000; + this.markDirty(); + //for spreading, we want the buffered flux to be 0 because we want to know exactly how much gets reflected back this.fluxQuantity = 0; spreadFlux(fluxQuantityOut, fluxRatioOut); @@ -139,7 +145,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM switch(type) { case SLOW: return (this.fluxQuantity * (1 - this.fluxRatio) + Math.min(this.fluxRatio * 0.5, 1)); - case FAST: return (this.fluxQuantity * this.fluxRatio + Math.min((1 - this.fluxRatio) * 0.3, 1)); + case FAST: return (this.fluxQuantity * this.fluxRatio + Math.min(1 - this.fluxRatio * 0.3, 1)); case ANY: return this.fluxQuantity; } @@ -153,16 +159,24 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM ForgeDirection.WEST }; - protected static NType stream; - public void spreadFlux(double flux, double ratio) { + BlockPos pos = new BlockPos(this); + + RBMKHandler.RBMKNode node; + + if(getNode(pos) == null) { + node = RBMKHandler.makeNode(this); + addNode(node); + } else + node = getNode(pos); + for(ForgeDirection dir : fluxDirs) { Vec3 neutronVector = Vec3.createVectorHelper(dir.offsetX, dir.offsetY, dir.offsetZ); - new NeutronStream(RBMKHandler.makeNode(this), neutronVector, flux, ratio); // Create new neutron streams + new NeutronStream(node, neutronVector, flux, ratio); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 7c6278c84..8fa2d7317 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -134,10 +134,6 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - } - public void handleButtonPacket(int value, int meta) { } From 05cc217bfe11df56261342efacc9dd708b219635 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sat, 24 Aug 2024 00:10:20 -0500 Subject: [PATCH 04/17] hooolyyyy shiiiiiiiit i finally fixed the bug!!!!!!!!!! --- .../handler/rbmkmk2/ItemRBMKRodFluxCurve.java | 55 +++++++++++++++++ .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 43 ++++++++++---- .../java/com/hbm/hazard/HazardRegistry.java | 1 + src/main/java/com/hbm/items/ModItems.java | 14 +++++ .../machine/rbmk/TileEntityRBMKRod.java | 59 +++++++++++++------ 5 files changed, 142 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java diff --git a/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java b/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java new file mode 100644 index 000000000..457638a76 --- /dev/null +++ b/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java @@ -0,0 +1,55 @@ +package com.hbm.handler.rbmkmk2; + +import com.hbm.items.machine.ItemRBMKPellet; +import com.hbm.items.machine.ItemRBMKRod; +import net.minecraft.util.MathHelper; + +import java.util.function.BiFunction; +import java.util.function.Function; + + +public class ItemRBMKRodFluxCurve extends ItemRBMKRod { + + /** Double 1: Flux ratio in. + * Double 2: Depletion value. + * Return double: Output flux ratio. + **/ + BiFunction ratioCurve; + + /** Double 1: Flux quantity in.
+ * Double 2: Flux ratio in.
+ * Return double: Output flux quantity. + **/ + BiFunction fluxCurve; + + public ItemRBMKRodFluxCurve(ItemRBMKPellet pellet) { + super(pellet); + } + + public ItemRBMKRodFluxCurve(String fullName) { + super(fullName); + } + + public ItemRBMKRodFluxCurve setOutputRatioCurve(Function func) { + this.ratioCurve = (fluxRatioIn, depletion) -> func.apply(fluxRatioIn) * 1.0D; + return this; + } + + public ItemRBMKRodFluxCurve setDepletionOutputRatioCurve(BiFunction func) { + this.ratioCurve = func; + return this; + } + + public ItemRBMKRodFluxCurve setOutputFluxCurve(BiFunction func) { + this.fluxCurve = func; + return this; + } + + public double fluxRatioOut(double fluxRatioIn, double depletion) { + return MathHelper.clamp_double(ratioCurve.apply(fluxRatioIn, depletion), 0, 1); + } + + public double fluxFromRatio(double quantity, double ratio) { + return fluxCurve.apply(quantity, ratio); + } +} diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index 1b92d92a6..1661cb216 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -49,6 +49,12 @@ public class RBMKHandler { this.hasLid = tile.hasLid(); } + public RBMKNode(TileEntityRBMKBase tile, RBMKType type, boolean hasLid) { + this.type = type; + this.tile = tile; + this.hasLid = hasLid; + } + public void addLid() { this.hasLid = true; } @@ -57,13 +63,19 @@ public class RBMKHandler { this.hasLid = false; } - public void checkNode(BlockPos pos) { + public List checkNode(BlockPos pos) { - if (tile == null) - removeNode(pos); // what the fuck??? + List list = new ArrayList<>(); - if (tile.isInvalid()) - removeNode(pos); + if (tile == null) { + list.add(pos); // what the fuck??? + return list; + } + + if (tile.isInvalid()) { + list.add(pos); + return list; + } if (tile instanceof TileEntityRBMKRod && !(tile instanceof TileEntityRBMKRodReaSim)) { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; @@ -76,11 +88,13 @@ public class RBMKHandler { List nodes = stream.getNodes(false); for (RBMKNode nodeToRemove : nodes) - removeNode(new BlockPos(nodeToRemove.tile)); + list.add(new BlockPos(nodeToRemove.tile)); } + return list; } } + return list; // TODO: Implement `hasRodInRange` for non-rod tile uncaching. } } @@ -89,6 +103,8 @@ public class RBMKHandler { BlockPos pos = new BlockPos(tile); if (nodeCache.containsKey(pos)) return getNode(pos); + if (!tile.hasWorldObj()) + return new RBMKNode(tile, tile.getRBMKType(), true); return new RBMKNode(tile, tile.getRBMKType()); } @@ -326,7 +342,7 @@ public class RBMKHandler { // holy fucking shit // I have had this one line cause me like tens of problems // I FUCKING HATE THIS - // total count of bugs fixed attributed to this function: 10 + // total count of bugs fixed attributed to this function: 11 if (origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()).isOpaqueCube()) hits += 1; } @@ -373,8 +389,7 @@ public class RBMKHandler { nodeCache.clear(); } - static int cacheTime = 40; - static int ticks = 0; + private static int ticks = 0; // The big one!! Runs all interactions for neutrons. public static void runAllInteractions() { @@ -400,11 +415,15 @@ public class RBMKHandler { } // Freshen the node cache every `cacheTime` ticks to prevent huge RAM usage. + int cacheTime = 40; if (ticks >= cacheTime) { ticks = 0; - for(Entry cachedNode : nodeCache.entrySet()) { - cachedNode.getValue().checkNode(cachedNode.getKey()); - } + List toRemove = new ArrayList<>(); + for(Entry cachedNode : nodeCache.entrySet()) + toRemove.addAll(cachedNode.getValue().checkNode(cachedNode.getKey())); + + for(BlockPos pos : toRemove) + removeNode(pos); } ticks++; } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 0653efe8c..b8de08aa3 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -394,6 +394,7 @@ public class HazardRegistry { registerRBMKRod(rbmk_fuel_zfb_pu241, pu239 * rod_rbmk * 0.1F, wst * rod_rbmk * 7.5F); registerRBMKRod(rbmk_fuel_zfb_am_mix, pu241 * rod_rbmk * 0.1F, wst * rod_rbmk * 10F); registerRBMK(rbmk_fuel_drx, bf * rod_rbmk, bf * rod_rbmk * 100F, true, true, 0, 1F/3F); + registerRBMKRod(rbmk_fuel_curve, saf * rod_rbmk * np237 * rod_rbmk, wst * rod_rbmk * 35F); registerRBMKPellet(rbmk_pellet_ueu, u * billet, wst * billet * 20F); registerRBMKPellet(rbmk_pellet_meu, uf * billet, wst * billet * 21.5F); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index f3309fb32..8494c6bd0 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -7,6 +7,7 @@ import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.LuckAbility; import com.hbm.handler.WeaponAbility; import com.hbm.handler.guncfg.*; +import com.hbm.handler.rbmkmk2.ItemRBMKRodFluxCurve; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -64,6 +65,8 @@ import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; +import java.util.function.BiFunction; + public class ModItems { public static void mainRegistry() @@ -1129,6 +1132,7 @@ public class ModItems { public static ItemRBMKRod rbmk_fuel_zfb_am_mix; public static ItemRBMKRod rbmk_fuel_drx; public static ItemRBMKRod rbmk_fuel_test; + public static ItemRBMKRodFluxCurve rbmk_fuel_curve; public static ItemRBMKPellet rbmk_pellet_ueu; public static ItemRBMKPellet rbmk_pellet_meu; public static ItemRBMKPellet rbmk_pellet_heu233; @@ -3753,6 +3757,15 @@ public class ModItems { .setHeat(1.0D) .setMeltingPoint(100000) .setUnlocalizedName("rbmk_fuel_test").setTextureName(RefStrings.MODID + ":rbmk_fuel_test"); + rbmk_fuel_curve = (ItemRBMKRodFluxCurve) new ItemRBMKRodFluxCurve("3D curve test") + .setOutputFluxCurve((fluxQuantity, fluxRatio) -> fluxQuantity * (1 - Math.pow(fluxRatio, 2))) + .setDepletionOutputRatioCurve((ratioIn, depletion) -> Math.pow(ratioIn, 2) * depletion) + .setYield(1000000D) + .setStats(100) + .setFunction(EnumBurnFunc.EXPERIMENTAL) + .setHeat(1.0D) + .setMeltingPoint(100000) + .setUnlocalizedName("rbmk_fuel_curve").setTextureName(RefStrings.MODID + ":rbmk_fuel_curve"); watz_pellet = new ItemWatzPellet().setUnlocalizedName("watz_pellet").setTextureName(RefStrings.MODID + ":watz_pellet"); watz_pellet_depleted = new ItemWatzPellet().setUnlocalizedName("watz_pellet_depleted").setTextureName(RefStrings.MODID + ":watz_pellet"); @@ -6594,6 +6607,7 @@ public class ModItems { GameRegistry.registerItem(rbmk_fuel_zfb_am_mix, rbmk_fuel_zfb_am_mix.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_drx, rbmk_fuel_drx.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_test, rbmk_fuel_test.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_ueu, rbmk_pellet_ueu.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_meu, rbmk_pellet_meu.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 05045ca37..901d0fa70 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -8,6 +8,7 @@ import com.hbm.handler.CompatHandler; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.handler.rbmkmk2.RBMKHandler.NeutronStream; +import com.hbm.handler.rbmkmk2.ItemRBMKRodFluxCurve; import com.hbm.inventory.container.ContainerRBMKRod; import com.hbm.inventory.gui.GUIRBMKRod; import com.hbm.items.ModItems; @@ -39,8 +40,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; -import static com.hbm.handler.rbmkmk2.RBMKHandler.addNode; -import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; +import static com.hbm.handler.rbmkmk2.RBMKHandler.*; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { @@ -49,6 +49,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM // Used for receiving flux (calculating outbound flux/burning rods) public double fluxRatio; public double fluxQuantity; + public double lastFluxQuantity; public boolean hasRod; @@ -89,14 +90,29 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); - double fluxIn = fluxFromType(rod.nType); - double fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); double fluxRatioOut; - NType rType = rod.rType; - if(rType == NType.SLOW) - fluxRatioOut = 0; - else - fluxRatioOut = 1; + double fluxQuantityOut; + + if (rod instanceof ItemRBMKRodFluxCurve) { // Experimental flux ratio curve rods! + ItemRBMKRodFluxCurve rodCurve = (ItemRBMKRodFluxCurve) rod; + + fluxRatioOut = rodCurve.fluxRatioOut(this.fluxRatio, ItemRBMKRod.getEnrichment(slots[0])); + + double fluxIn; + + fluxIn = rodCurve.fluxFromRatio(this.fluxQuantity, this.fluxRatio); + + fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); + } else { + NType rType = rod.rType; + if (rType == NType.SLOW) + fluxRatioOut = 0; + else + fluxRatioOut = 1; + + double fluxIn = fluxFromType(rod.nType); + fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); + } rod.updateHeat(worldObj, slots[0], 1.0D); this.heat += rod.provideHeat(worldObj, slots[0], heat, 1.0D); @@ -114,15 +130,14 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM } else { this.meltdown(); } + this.lastFluxQuantity = 0; this.fluxQuantity = 0; return; } if(this.heat > 10_000) this.heat = 10_000; - this.markDirty(); - - //for spreading, we want the buffered flux to be 0 because we want to know exactly how much gets reflected back + this.lastFluxQuantity = this.fluxQuantity; this.fluxQuantity = 0; spreadFlux(fluxQuantityOut, fluxRatioOut); @@ -130,6 +145,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM } else { + this.lastFluxQuantity = 0; this.fluxQuantity = 0; this.fluxRatio = 0; @@ -142,10 +158,9 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM private double fluxFromType(NType type) { - switch(type) { case SLOW: return (this.fluxQuantity * (1 - this.fluxRatio) + Math.min(this.fluxRatio * 0.5, 1)); - case FAST: return (this.fluxQuantity * this.fluxRatio + Math.min(1 - this.fluxRatio * 0.3, 1)); + case FAST: return (this.fluxQuantity * (1 - this.fluxRatio) + Math.min(this.fluxRatio * 0.3, 1)); case ANY: return this.fluxQuantity; } @@ -184,10 +199,10 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - if(nbt.hasKey("fluxFast") || nbt.hasKey("fluxSlow")) { + if (nbt.hasKey("fluxFast") || nbt.hasKey("fluxSlow")) { // recalculate new values to keep stable operations this.fluxQuantity = nbt.getDouble("fluxFast") + nbt.getDouble("fluxSlow"); - if(this.fluxQuantity > 0) + if (this.fluxQuantity > 0) this.fluxRatio = nbt.getDouble("fluxFast") / fluxQuantity; else this.fluxRatio = 0; @@ -201,10 +216,18 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM this.hasRod = nbt.getBoolean("hasRod"); } - @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); + nbt.setDouble("fluxQuantity", this.lastFluxQuantity); + nbt.setDouble("fluxRatio", this.fluxRatio); + nbt.setBoolean("hasRod", this.hasRod); + } + + // aaaaaaa + public void writeToNBTDiag(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setDouble("fluxQuantity", this.fluxQuantity); nbt.setDouble("fluxRatio", this.fluxRatio); nbt.setBoolean("hasRod", this.hasRod); @@ -227,7 +250,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM } public void getDiagData(NBTTagCompound nbt) { - this.writeToNBT(nbt); + this.writeToNBTDiag(nbt); if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { From 2e4bdf943f32e1ed9c0a3692ad53bbce71cc2435 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 25 Aug 2024 22:19:04 -0500 Subject: [PATCH 05/17] 99.999% there just some more optimization! (node culling) --- .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 104 ++++++++++++------ .../tileentity/machine/rbmk/RBMKDials.java | 24 +++- .../machine/rbmk/TileEntityRBMKRod.java | 15 ++- .../machine/rbmk/TileEntityRBMKRodReaSim.java | 21 +++- 4 files changed, 123 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index 1661cb216..a2bd18e5f 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.Map.Entry; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; @@ -63,39 +64,72 @@ public class RBMKHandler { this.hasLid = false; } + public List getReaSimNodes(TileEntityRBMKRodReaSim rod) { + List list = new ArrayList<>(); + for (int x = rod.xCoord - fluxRange; x <= rod.xCoord + fluxRange; x++) + for (int z = rod.zCoord - fluxRange; z <= rod.zCoord + fluxRange; z++) + if ((x - rod.xCoord) * (x - rod.xCoord) + (z - rod.zCoord) * (z - rod.zCoord) <= fluxRange * fluxRange) + list.add(new BlockPos(rod)); + return list; + } + public List checkNode(BlockPos pos) { List list = new ArrayList<>(); - if (tile == null) { - list.add(pos); // what the fuck??? - return list; - } - - if (tile.isInvalid()) { + // Check if the tile no longer exists/is invalid. + if (tile == null || tile.isInvalid()) { list.add(pos); return list; } + List streams = new ArrayList<>(); + + // Simulate streams coming out of the RBMK rod. + for (ForgeDirection dir : TileEntityRBMKRod.fluxDirs) { + streams.add(new NeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ))); + } + + // Check if the rod should uncache nodes. if (tile instanceof TileEntityRBMKRod && !(tile instanceof TileEntityRBMKRodReaSim)) { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; - if (!rod.hasRod) { + if (!rod.hasRod || rod.fluxQuantity == 0) { - // Simulate streams coming out of the RBMK rod find nodes to uncache. - - for (ForgeDirection dir : TileEntityRBMKRod.fluxDirs) { - NeutronStream stream = new NeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ)); - - List nodes = stream.getNodes(false); - for (RBMKNode nodeToRemove : nodes) - list.add(new BlockPos(nodeToRemove.tile)); + for (NeutronStream stream : streams) { + stream.getNodes(false).forEach(node -> list.add(new BlockPos(node.tile))); } + return list; } } + if (tile instanceof TileEntityRBMKRodReaSim) { // fuckkkkkkk + TileEntityRBMKRodReaSim rod = (TileEntityRBMKRodReaSim) tile; + if (!rod.hasRod || rod.fluxQuantity == 0) { + list.addAll(getReaSimNodes(rod)); + } + } + + // TODO: implement ReaSim node culling on the non-rod side. + + // Check if non-rod nodes should be uncached due to no rod in range. + for (NeutronStream stream : streams) { + + List nodes = stream.getNodes(false); + + for (RBMKNode node : nodes) { + if (node.tile instanceof TileEntityRBMKRod) + return list; + } + + // If we get here, then no rods were found along this stream's path! + // This, most of the time, means we can just uncache all off the nodes inside the stream's path. + // That other part of the time, streams will be crossing paths. + // This is fine though, we can just uncache them anyway and the streams later on (next tick) will recache them. + nodes.forEach(node -> list.add(new BlockPos(node.tile))); + } + return list; - // TODO: Implement `hasRodInRange` for non-rod tile uncaching. } } @@ -160,6 +194,7 @@ public class RBMKHandler { } } + // USES THE CACHE!!! public List getBlocks() { List positions = new ArrayList<>(); @@ -173,10 +208,9 @@ public class RBMKHandler { return positions; } - // This, however, is used for actual RBMK flux calculations. // Does NOT include the origin node // USES THE CACHE!!! - public List getNodes(boolean cache) { + public List getNodes(boolean addNode) { List positions = new ArrayList<>(); for (int i = 1; i <= fluxRange; i++) { @@ -185,7 +219,7 @@ public class RBMKHandler { BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - if (nodeCache.containsKey(pos) && cache) + if (nodeCache.containsKey(pos)) positions.add(getNode(pos)); else if (this.origin.tile.getBlockType() instanceof RBMKBase) { @@ -194,7 +228,7 @@ public class RBMKHandler { TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase)te; RBMKNode node = makeNode(rbmkBase); positions.add(node); - if (cache) + if (addNode) addNode(node); } } @@ -223,7 +257,6 @@ public class RBMKHandler { } int moderatedCount = 0; - double totalFluxMod = 1; for(BlockPos nodePos : getBlocks()) { @@ -262,23 +295,25 @@ public class RBMKHandler { if(!node.hasLid) ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); - if (node.type == RBMKHandler.RBMKType.MODERATOR) { + if (node.type == RBMKHandler.RBMKType.MODERATOR || nodeTE.isModerated()) { moderatedCount++; moderateStream(); } if (nodeTE instanceof IRBMKFluxReceiver) { IRBMKFluxReceiver column = (IRBMKFluxReceiver)nodeTE; + if (node.type == RBMKHandler.RBMKType.ROD) { TileEntityRBMKRod rod = (TileEntityRBMKRod)column; + if (rod.hasRod) { - if (rod.isModerated()) - moderateStream(); rod.receiveFlux(this); return; } + } else if(node.type == RBMKType.OUTGASSER) { TileEntityRBMKOutgasser outgasser = ((TileEntityRBMKOutgasser) column); + if(outgasser.canProcess()) { column.receiveFlux(this); return; @@ -286,33 +321,34 @@ public class RBMKHandler { } } else if (node.type == RBMKHandler.RBMKType.CONTROL_ROD) { - TileEntityRBMKControl rod = (TileEntityRBMKControl)nodeTE; + TileEntityRBMKControl rod = (TileEntityRBMKControl) nodeTE; + if (rod.level > 0.0D) { + this.fluxQuantity *= rod.getMult(); - totalFluxMod *= rod.getMult(); continue; } return; - } + } else if (node.type == RBMKHandler.RBMKType.REFLECTOR) { - if (node.type == RBMKHandler.RBMKType.REFLECTOR) { if (this.origin.tile.isModerated()) moderatedCount++; + if (this.fluxRatio > 0 && moderatedCount > 0) for (int i = 0; i < moderatedCount; i++) moderateStream(); - if (totalFluxMod < 1) - this.fluxQuantity *= totalFluxMod; + if (RBMKHandler.reflectorEfficiency != 1.0D) { this.fluxQuantity *= RBMKHandler.reflectorEfficiency; continue; } + ((TileEntityRBMKRod)originTE).receiveFlux(this); return; - } - if (node.type == RBMKHandler.RBMKType.ABSORBER) { + } else if (node.type == RBMKHandler.RBMKType.ABSORBER) { if (RBMKHandler.absorberEfficiency == 1) return; + this.fluxQuantity *= RBMKHandler.absorberEfficiency; } } @@ -398,8 +434,8 @@ public class RBMKHandler { // Gamerule caching because this apparently is kinda slow? // meh, good enough - reflectorEfficiency = 1; //RBMKDials.getReflectorEfficiency(world.worldObj); - absorberEfficiency = 1; //RBMKDials.getAbsorberEfficiency(world.worldObj); + reflectorEfficiency = RBMKDials.getReflectorEfficiency(world.getKey()); + absorberEfficiency = RBMKDials.getAbsorberEfficiency(world.getKey()); moderatorEfficiency = RBMKDials.getModeratorEfficiency(world.getKey()); // I hate this. diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java index 7f4874c50..c52555c23 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java @@ -32,6 +32,8 @@ public class RBMKDials { public static final String KEY_ENABLE_MELTDOWN_OVERPRESSURE = "dialEnableMeltdownOverpressure"; public static final String KEY_MODERATOR_EFFICIENCY = "dialModeratorEfficiency"; + public static final String KEY_ABSORBER_EFFICIENCY = "dialAbsorberEfficiency"; + public static final String KEY_REFLECTOR_EFFICIENCY = "dialReflectorEfficiency"; public static void createDials(World world) { GameRules rules = world.getGameRules(); @@ -58,6 +60,8 @@ public class RBMKDials { rules.setOrCreateGameRule(KEY_DISABLE_MELTDOWNS, "false"); rules.setOrCreateGameRule(KEY_ENABLE_MELTDOWN_OVERPRESSURE, "false"); rules.setOrCreateGameRule(KEY_MODERATOR_EFFICIENCY, "1.0"); + rules.setOrCreateGameRule(KEY_ABSORBER_EFFICIENCY, "1.0"); + rules.setOrCreateGameRule(KEY_REFLECTOR_EFFICIENCY, "1.0"); } } @@ -234,11 +238,29 @@ public class RBMKDials { } /** - * The percentage of neutron to moderate from fast to slow when they pass through a moderator. + * The percentage of neutrons to moderate from fast to slow when they pass through a moderator. * @param world * @return */ public static double getModeratorEfficiency(World world) { return MathHelper.clamp_double(GameRuleHelper.parseDouble(world.getGameRules().getGameRuleStringValue(KEY_MODERATOR_EFFICIENCY), 1D), 0.0D, 1.0D); } + + /** + * The percentage of neutrons to be absorbed when a stream hits an absorber column. + * @param world + * @return + */ + public static double getAbsorberEfficiency(World world) { + return MathHelper.clamp_double(GameRuleHelper.parseDouble(world.getGameRules().getGameRuleStringValue(KEY_MODERATOR_EFFICIENCY), 1D), 0.0D, 1.0D); + } + + /** + * The percentage of neutron to reflect when a stream hits a reflector column. + * @param world + * @return + */ + public static double getReflectorEfficiency(World world) { + return MathHelper.clamp_double(GameRuleHelper.parseDouble(world.getGameRules().getGameRuleStringValue(KEY_MODERATOR_EFFICIENCY), 1D), 0.0D, 1.0D); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 901d0fa70..75b663f01 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -138,7 +138,9 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM if(this.heat > 10_000) this.heat = 10_000; this.lastFluxQuantity = this.fluxQuantity; + this.fluxQuantity = 0; + spreadFlux(fluxQuantityOut, fluxRatioOut); hasRod = true; @@ -178,13 +180,18 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM BlockPos pos = new BlockPos(this); - RBMKHandler.RBMKNode node; + if (flux == 0) { + // simple way to remove the node from the cache when no flux is going into it! + removeNode(pos); + return; + } - if(getNode(pos) == null) { + RBMKHandler.RBMKNode node = getNode(pos); + + if(node == null) { node = RBMKHandler.makeNode(this); addNode(node); - } else - node = getNode(pos); + } for(ForgeDirection dir : fluxDirs) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java index 7114db0c7..74da00c39 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java @@ -1,11 +1,13 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKNode; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.util.Vec3; +import static com.hbm.handler.rbmkmk2.RBMKHandler.*; + public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { public TileEntityRBMKRodReaSim() { @@ -20,6 +22,21 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { @Override public void spreadFlux(double flux, double ratio) { + BlockPos pos = new BlockPos(this); + + if (flux == 0) { + // simple way to remove the node from the cache when no flux is going into it! + removeNode(pos); + return; + } + + RBMKNode node = getNode(pos); + + if(node == null) { + node = makeNode(this); + addNode(node); + } + int count = RBMKDials.getReaSimCount(worldObj); for (int i = 0; i < count; i++) { @@ -27,7 +44,7 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); - new RBMKHandler.NeutronStream(RBMKHandler.makeNode(this), neutronVector, flux, ratio); + new NeutronStream(makeNode(this), neutronVector, flux, ratio); // Create new neutron streams } } From db8df184cde7028c9485ed62f14e59e299307e47 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 25 Aug 2024 22:19:49 -0500 Subject: [PATCH 06/17] oops --- src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index a2bd18e5f..0a1692a7e 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -107,6 +107,7 @@ public class RBMKHandler { TileEntityRBMKRodReaSim rod = (TileEntityRBMKRodReaSim) tile; if (!rod.hasRod || rod.fluxQuantity == 0) { list.addAll(getReaSimNodes(rod)); + return list; } } From 07a63017742445dbe4f849032947d837dea4824e Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Wed, 28 Aug 2024 22:37:13 -0500 Subject: [PATCH 07/17] i am going to kms --- .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 50 +++++++++++++++---- .../machine/rbmk/TileEntityRBMKConsole.java | 2 +- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index 0a1692a7e..9c17a3635 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -5,11 +5,8 @@ import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.tileentity.machine.rbmk.*; import com.hbm.util.fauxpointtwelve.BlockPos; -import java.util.HashMap; +import java.util.*; import java.util.Map.Entry; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; @@ -64,12 +61,12 @@ public class RBMKHandler { this.hasLid = false; } - public List getReaSimNodes(TileEntityRBMKRodReaSim rod) { + public List getReaSimNodes() { List list = new ArrayList<>(); - for (int x = rod.xCoord - fluxRange; x <= rod.xCoord + fluxRange; x++) - for (int z = rod.zCoord - fluxRange; z <= rod.zCoord + fluxRange; z++) - if ((x - rod.xCoord) * (x - rod.xCoord) + (z - rod.zCoord) * (z - rod.zCoord) <= fluxRange * fluxRange) - list.add(new BlockPos(rod)); + for (int x = this.tile.xCoord - fluxRange; x <= this.tile.xCoord + fluxRange; x++) + for (int z = this.tile.zCoord - fluxRange; z <= this.tile.zCoord + fluxRange; z++) + if ((x - this.tile.xCoord) * (x - this.tile.xCoord) + (z - this.tile.zCoord) * (z - this.tile.zCoord) <= fluxRange * fluxRange) + list.add(new BlockPos(this.tile).add(x, 0, z)); return list; } @@ -103,15 +100,46 @@ public class RBMKHandler { } } + List points = getReaSimNodes(); + + // Check if the ReaSim rod should be culled from the cache due to no rod or no flux. if (tile instanceof TileEntityRBMKRodReaSim) { // fuckkkkkkk TileEntityRBMKRodReaSim rod = (TileEntityRBMKRodReaSim) tile; if (!rod.hasRod || rod.fluxQuantity == 0) { - list.addAll(getReaSimNodes(rod)); + list.addAll(points); return list; } } - // TODO: implement ReaSim node culling on the non-rod side. + // Check if non-rod nodes should be uncached... but now with ReaSim! + { // Yeah, I don't want to contaminate the surrounding scope. + List nodes = new ArrayList<>(); + points.forEach(nodePos -> { + RBMKNode node = getNode(nodePos); + if (node != null) + nodes.add(node); + }); + + boolean hasRod = false; + + for (RBMKNode node : nodes) { + + if (node.tile instanceof TileEntityRBMKRod) { + + TileEntityRBMKRod rod = (TileEntityRBMKRod) node.tile; + + if (rod.hasRod && rod.fluxQuantity > 0) { + hasRod = true; + break; + } + } + } + + if (nodes.isEmpty() || !hasRod) { + list.add(pos); + return list; + } + } // Check if non-rod nodes should be uncached due to no rod in range. for (NeutronStream stream : streams) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 02b224c7a..523ea09c6 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -556,7 +556,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(te instanceof TileEntityRBMKRod){ TileEntityRBMKRod fuelChannel = (TileEntityRBMKRod)te; - data_table.put("fluxQuantity", fuelChannel.fluxQuantity); + data_table.put("fluxQuantity", fuelChannel.lastFluxQuantity); data_table.put("fluxRatio", fuelChannel.fluxRatio); } From a8051b8bd9a08b1a44c625ac808900296d744d4a Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:44:26 -0500 Subject: [PATCH 08/17] i fixed it i fixed it i fixed it i fixed it i fixed it i fixed it fucking FINALLY --- .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 63 +++++++++++-------- .../machine/rbmk/TileEntityRBMKConsole.java | 2 +- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index 9c17a3635..d69e1f692 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -5,7 +5,9 @@ import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.tileentity.machine.rbmk.*; import com.hbm.util.fauxpointtwelve.BlockPos; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.HashMap; import java.util.Map.Entry; import net.minecraft.tileentity.TileEntity; @@ -63,22 +65,18 @@ public class RBMKHandler { public List getReaSimNodes() { List list = new ArrayList<>(); - for (int x = this.tile.xCoord - fluxRange; x <= this.tile.xCoord + fluxRange; x++) - for (int z = this.tile.zCoord - fluxRange; z <= this.tile.zCoord + fluxRange; z++) - if ((x - this.tile.xCoord) * (x - this.tile.xCoord) + (z - this.tile.zCoord) * (z - this.tile.zCoord) <= fluxRange * fluxRange) - list.add(new BlockPos(this.tile).add(x, 0, z)); + for (int x = -fluxRange; x <= fluxRange; x++) + for (int z = -fluxRange; z <= fluxRange; z++) + if (Math.pow(x, 2) + Math.pow(z, 2) <= fluxRange * fluxRange) + list.add(new BlockPos(tile).add(x, 0, z)); return list; } - public List checkNode(BlockPos pos) { + public List checkNode() { List list = new ArrayList<>(); - // Check if the tile no longer exists/is invalid. - if (tile == null || tile.isInvalid()) { - list.add(pos); - return list; - } + BlockPos pos = new BlockPos(this.tile); List streams = new ArrayList<>(); @@ -90,7 +88,7 @@ public class RBMKHandler { // Check if the rod should uncache nodes. if (tile instanceof TileEntityRBMKRod && !(tile instanceof TileEntityRBMKRodReaSim)) { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; - if (!rod.hasRod || rod.fluxQuantity == 0) { + if (!rod.hasRod || rod.lastFluxQuantity == 0) { for (NeutronStream stream : streams) { stream.getNodes(false).forEach(node -> list.add(new BlockPos(node.tile))); @@ -105,7 +103,7 @@ public class RBMKHandler { // Check if the ReaSim rod should be culled from the cache due to no rod or no flux. if (tile instanceof TileEntityRBMKRodReaSim) { // fuckkkkkkk TileEntityRBMKRodReaSim rod = (TileEntityRBMKRodReaSim) tile; - if (!rod.hasRod || rod.fluxQuantity == 0) { + if (!rod.hasRod || rod.lastFluxQuantity == 0) { list.addAll(points); return list; } @@ -128,7 +126,7 @@ public class RBMKHandler { TileEntityRBMKRod rod = (TileEntityRBMKRod) node.tile; - if (rod.hasRod && rod.fluxQuantity > 0) { + if (rod.hasRod && rod.lastFluxQuantity > 0) { hasRod = true; break; } @@ -150,14 +148,15 @@ public class RBMKHandler { if (node.tile instanceof TileEntityRBMKRod) return list; } - - // If we get here, then no rods were found along this stream's path! - // This, most of the time, means we can just uncache all off the nodes inside the stream's path. - // That other part of the time, streams will be crossing paths. - // This is fine though, we can just uncache them anyway and the streams later on (next tick) will recache them. - nodes.forEach(node -> list.add(new BlockPos(node.tile))); } + // If we get here, then no rods were found along this stream's path! + // This, most of the time, means we can just uncache all the nodes inside the stream's path. + // That other part of the time, streams will be crossing paths. + // This is fine though, we can just uncache them anyway and the streams later on (next tick) will recache them. + // /\ idk what this guy was on about but this is just plain wrong. /\ + list.add(pos); + return list; } } @@ -214,13 +213,12 @@ public class RBMKHandler { this.fluxQuantity = flux; this.fluxRatio = ratio; World worldObj = origin.tile.getWorldObj(); - if (streamWorlds.get(worldObj) != null) - streamWorlds.get(worldObj).addStream(this); - else { + if (streamWorlds.get(worldObj) == null) { StreamWorld world = new StreamWorld(); world.addStream(this); streamWorlds.put(worldObj, world); - } + } else + streamWorlds.get(worldObj).addStream(this); } // USES THE CACHE!!! @@ -459,6 +457,19 @@ public class RBMKHandler { // The big one!! Runs all interactions for neutrons. public static void runAllInteractions() { + // Remove `StreamWorld` objects if they have no streams. + { // aflghdkljghlkbhfjkghgilurbhlkfjghkffdjgn + List toRemove = new ArrayList<>(); + streamWorlds.forEach((world, streamWorld) -> { + if (streamWorld.streams.isEmpty()) + toRemove.add(world); + }); + + for (World world : toRemove) { + streamWorlds.remove(world); + } + } + for (Entry world : streamWorlds.entrySet()) { // Gamerule caching because this apparently is kinda slow? @@ -484,8 +495,8 @@ public class RBMKHandler { if (ticks >= cacheTime) { ticks = 0; List toRemove = new ArrayList<>(); - for(Entry cachedNode : nodeCache.entrySet()) - toRemove.addAll(cachedNode.getValue().checkNode(cachedNode.getKey())); + for(RBMKNode cachedNode : nodeCache.values()) + toRemove.addAll(cachedNode.checkNode()); for(BlockPos pos : toRemove) removeNode(pos); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 523ea09c6..78ea7a558 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -103,7 +103,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(te instanceof TileEntityRBMKRod) { TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; - flux += fuel.fluxQuantity; + flux += fuel.lastFluxQuantity; } } else { From 9226af071966abbc3c81829ffe2cc2c11bd70169 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:52:10 -0500 Subject: [PATCH 09/17] fix up some imports! --- src/main/java/com/hbm/main/ModEventHandler.java | 1 - .../com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java | 3 --- 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index f6b34c1b8..ea4c568d9 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -10,7 +10,6 @@ import java.util.Random; import java.util.UUID; import com.hbm.handler.rbmkmk2.RBMKHandler; -import net.minecraft.server.MinecraftServer; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index d53979773..e84bd5328 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -13,16 +13,13 @@ import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.BufPacket; -import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.saveddata.TomSaveData; import com.hbm.tileentity.IBufPacketReceiver; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.IOverpressurable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.Compat; -import com.hbm.util.GameRuleHelper; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; From e7419ef76b51140444abb933fc7ef82c887ac05f Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 1 Sep 2024 19:55:49 -0500 Subject: [PATCH 10/17] more shit --- .../com/hbm/handler/rbmkmk2/RBMKHandler.java | 24 ++++++++++--------- .../machine/rbmk/TileEntityRBMKBase.java | 1 + .../machine/rbmk/TileEntityRBMKRod.java | 20 ++++------------ 3 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java index d69e1f692..fa0d93f46 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.HashMap; import java.util.Map.Entry; +import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -322,7 +323,7 @@ public class RBMKHandler { if(!node.hasLid) ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); - if (node.type == RBMKHandler.RBMKType.MODERATOR || nodeTE.isModerated()) { + if (node.type == RBMKType.MODERATOR || nodeTE.isModerated()) { moderatedCount++; moderateStream(); } @@ -330,7 +331,7 @@ public class RBMKHandler { if (nodeTE instanceof IRBMKFluxReceiver) { IRBMKFluxReceiver column = (IRBMKFluxReceiver)nodeTE; - if (node.type == RBMKHandler.RBMKType.ROD) { + if (node.type == RBMKType.ROD) { TileEntityRBMKRod rod = (TileEntityRBMKRod)column; if (rod.hasRod) { @@ -347,7 +348,7 @@ public class RBMKHandler { } } - } else if (node.type == RBMKHandler.RBMKType.CONTROL_ROD) { + } else if (node.type == RBMKType.CONTROL_ROD) { TileEntityRBMKControl rod = (TileEntityRBMKControl) nodeTE; if (rod.level > 0.0D) { @@ -356,7 +357,7 @@ public class RBMKHandler { continue; } return; - } else if (node.type == RBMKHandler.RBMKType.REFLECTOR) { + } else if (node.type == RBMKType.REFLECTOR) { if (this.origin.tile.isModerated()) moderatedCount++; @@ -372,7 +373,7 @@ public class RBMKHandler { ((TileEntityRBMKRod)originTE).receiveFlux(this); return; - } else if (node.type == RBMKHandler.RBMKType.ABSORBER) { + } else if (node.type == RBMKType.ABSORBER) { if (RBMKHandler.absorberEfficiency == 1) return; @@ -380,16 +381,16 @@ public class RBMKHandler { } } - List nodes = getNodes(true); + List nodes = getNodes(true); if (nodes.isEmpty()) return; - RBMKHandler.RBMKNode lastNode = nodes.get(nodes.size() - 1); + RBMKNode lastNode = nodes.get(nodes.size() - 1); - if (lastNode.type != RBMKHandler.RBMKType.REFLECTOR && lastNode.type != RBMKHandler.RBMKType.ABSORBER && lastNode.type != RBMKHandler.RBMKType.CONTROL_ROD) + if (lastNode.type != RBMKType.REFLECTOR && lastNode.type != RBMKType.ABSORBER && lastNode.type != RBMKType.CONTROL_ROD) irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); - if (lastNode.type == RBMKHandler.RBMKType.CONTROL_ROD) { + if (lastNode.type == RBMKType.CONTROL_ROD) { TileEntityRBMKControl rod = (TileEntityRBMKControl)lastNode.tile; if (rod.getMult() > 0.0D) { this.fluxQuantity *= rod.getMult(); @@ -405,8 +406,9 @@ public class RBMKHandler { // holy fucking shit // I have had this one line cause me like tens of problems // I FUCKING HATE THIS - // total count of bugs fixed attributed to this function: 11 - if (origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()).isOpaqueCube()) + // total count of bugs fixed attributed to this function: 13 + Block block = origin.tile.getWorldObj().getBlock(pos.getX(), pos.getY() + h, pos.getZ()); + if (block.isOpaqueCube()) hits += 1; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index e84bd5328..a211e990e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -328,6 +328,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements exceptions.add("z"); exceptions.add("items"); exceptions.add("id"); + exceptions.add("muffled"); String title = "Dump of Ordered Data Diagnostic (DODD)"; mc.fontRenderer.drawString(title, pX + 1, pZ - 19, 0x006000); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 75b663f01..838d418cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -213,9 +213,6 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM this.fluxRatio = nbt.getDouble("fluxFast") / fluxQuantity; else this.fluxRatio = 0; - nbt.removeTag("fluxSlow"); - nbt.removeTag("fluxFast"); - writeToNBT(nbt); } else { this.fluxQuantity = nbt.getDouble("fluxQuantity"); this.fluxRatio = nbt.getDouble("fluxRatio"); @@ -226,17 +223,8 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setDouble("fluxQuantity", this.lastFluxQuantity); - nbt.setDouble("fluxRatio", this.fluxRatio); - nbt.setBoolean("hasRod", this.hasRod); - } - - // aaaaaaa - public void writeToNBTDiag(NBTTagCompound nbt) { - super.writeToNBT(nbt); - - nbt.setDouble("fluxQuantity", this.fluxQuantity); - nbt.setDouble("fluxRatio", this.fluxRatio); + nbt.setDouble("fluxSlow", this.lastFluxQuantity * (1 - fluxRatio)); + nbt.setDouble("fluxFast", this.lastFluxQuantity * fluxRatio); nbt.setBoolean("hasRod", this.hasRod); } @@ -257,7 +245,9 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM } public void getDiagData(NBTTagCompound nbt) { - this.writeToNBTDiag(nbt); + diag = true; + this.writeToNBT(nbt); + diag = false; if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { From 5902ff5189e4f2334573436c867ca5d75ab9b2d4 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:17:07 -0500 Subject: [PATCH 11/17] i want to kill myself :heart: --- .../com/hbm/blocks/machine/rbmk/RBMKBase.java | 7 +- .../com/hbm/handler/neutron/NeutronNode.java | 20 ++ .../hbm/handler/neutron/NeutronNodeWorld.java | 62 +++++ .../hbm/handler/neutron/NeutronStream.java | 69 +++++ .../handler/neutron/PileNeutronHandler.java | 44 +++ .../RBMKNeutronHandler.java} | 254 ++++++------------ .../handler/rbmkmk2/ItemRBMKRodFluxCurve.java | 55 ---- .../java/com/hbm/hazard/HazardRegistry.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 16 +- .../com/hbm/items/machine/ItemRBMKLid.java | 7 +- .../com/hbm/items/machine/ItemRBMKRod.java | 55 +++- .../java/com/hbm/main/ModEventHandler.java | 12 +- .../machine/rbmk/IRBMKFluxReceiver.java | 4 +- .../machine/rbmk/TileEntityRBMKAbsorber.java | 6 +- .../machine/rbmk/TileEntityRBMKBase.java | 20 +- .../machine/rbmk/TileEntityRBMKBlank.java | 6 - .../machine/rbmk/TileEntityRBMKBoiler.java | 6 - .../machine/rbmk/TileEntityRBMKControl.java | 6 +- .../machine/rbmk/TileEntityRBMKCooler.java | 7 - .../machine/rbmk/TileEntityRBMKHeater.java | 6 - .../machine/rbmk/TileEntityRBMKModerator.java | 6 +- .../machine/rbmk/TileEntityRBMKOutgasser.java | 9 +- .../machine/rbmk/TileEntityRBMKReflector.java | 6 +- .../machine/rbmk/TileEntityRBMKRod.java | 49 ++-- .../machine/rbmk/TileEntityRBMKRodReaSim.java | 13 +- .../machine/rbmk/TileEntityRBMKStorage.java | 6 +- 26 files changed, 428 insertions(+), 325 deletions(-) create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronNode.java create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java create mode 100644 src/main/java/com/hbm/handler/neutron/NeutronStream.java create mode 100644 src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java rename src/main/java/com/hbm/handler/{rbmkmk2/RBMKHandler.java => neutron/RBMKNeutronHandler.java} (60%) delete mode 100644 src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java index 55975c521..234a2a4b9 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java @@ -3,7 +3,8 @@ package com.hbm.blocks.machine.rbmk; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.handler.MultiblockHandlerXR; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRBMKLid; import com.hbm.lib.RefStrings; @@ -29,8 +30,6 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; - public abstract class RBMKBase extends BlockDummyable implements IToolable, ILookOverlay { public static boolean dropLids = true; @@ -175,7 +174,7 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo if(rbmk.hasLid() && rbmk.isLidRemovable()) { - RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(new BlockPos(te)); if (node != null) node.removeLid(); diff --git a/src/main/java/com/hbm/handler/neutron/NeutronNode.java b/src/main/java/com/hbm/handler/neutron/NeutronNode.java new file mode 100644 index 000000000..43d250949 --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronNode.java @@ -0,0 +1,20 @@ +package com.hbm.handler.neutron; + +import com.hbm.handler.neutron.NeutronStream.NeutronType; +import net.minecraft.tileentity.TileEntity; + +import java.util.HashMap; +import java.util.Map; + +public abstract class NeutronNode { + + protected NeutronType type; + protected TileEntity tile; + // like NBT but less fucking CANCER + protected Map data = new HashMap<>(); + + public NeutronNode(TileEntity tile, NeutronType type) { + this.type = type; + this.tile = tile; + } +} diff --git a/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java b/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java new file mode 100644 index 000000000..cf1da973e --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronNodeWorld.java @@ -0,0 +1,62 @@ +package com.hbm.handler.neutron; + +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class NeutronNodeWorld { + // HashMap of all RBMK nodes and their positions. + protected static HashMap nodeCache = new HashMap<>(); + + public static void addNode(NeutronNode node) { + nodeCache.put(new BlockPos(node.tile), node); + } + + public static void removeNode(BlockPos position) { + nodeCache.remove(position); + } + + public static NeutronNode getNode(BlockPos position) { + return nodeCache.get(position); + } + + public static void removeAllNodes() { + nodeCache.clear(); + } + + // List of all stream worlds. + public static HashMap streamWorlds = new HashMap<>(); + + public static class StreamWorld { + + List streams; + + public StreamWorld() { + streams = new ArrayList<>(); + } + + public void addStream(NeutronStream stream) { + this.streams.add(stream); + } + + public void removeAllStreams() { + this.streams.clear(); + } + + public void removeAllStreamsOfType(NeutronStream.NeutronType type) { + List toRemove = new ArrayList<>(); + for (NeutronStream stream : streams) { + if (stream.type == type) + toRemove.add(stream); + } + toRemove.forEach((stream) -> streams.remove(stream)); + } + + public static void removeAllWorlds() { + streamWorlds.clear(); + } + } +} diff --git a/src/main/java/com/hbm/handler/neutron/NeutronStream.java b/src/main/java/com/hbm/handler/neutron/NeutronStream.java new file mode 100644 index 000000000..69b1d8eeb --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/NeutronStream.java @@ -0,0 +1,69 @@ +package com.hbm.handler.neutron; + +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import com.hbm.handler.neutron.NeutronNodeWorld.StreamWorld; + +import java.util.ArrayList; +import java.util.List; + +public abstract class NeutronStream { + + public enum NeutronType { + DUMMY, // Dummy streams for testing + RBMK, // RBMK neutron streams + PILE // Chicago pile streams + } + + public NeutronNode origin; + + // doubles!! + public double fluxQuantity; + // Hey, new implementation! Basically a ratio for slow flux to fast flux + // 0 = all slow flux + // 1 = all fast flux + public double fluxRatio; + + public NeutronType type = NeutronType.DUMMY; + + // Vector for direction of neutron flow. + public Vec3 vector; + + // Primarily used as a "dummy stream", not to be added to the streams list. + public NeutronStream(NeutronNode origin, Vec3 vector) { + this.origin = origin; + this.vector = vector; + } + + public NeutronStream(NeutronNode origin, Vec3 vector, double flux, double ratio, NeutronType type) { + this.origin = origin; + this.vector = vector; + this.fluxQuantity = flux; + this.fluxRatio = ratio; + this.type = type; + World worldObj = origin.tile.getWorldObj(); + if (NeutronNodeWorld.streamWorlds.get(worldObj) == null) { + StreamWorld world = new StreamWorld(); + world.addStream(this); + NeutronNodeWorld.streamWorlds.put(worldObj, world); + } else + NeutronNodeWorld.streamWorlds.get(worldObj).addStream(this); + } + + // USES THE CACHE!!! + public List getBlocks(int range) { + List positions = new ArrayList<>(); + + for (int i = 1; i <= range; i++) { + int x = (int) Math.floor(0.5 + vector.xCoord * i); + int z = (int) Math.floor(0.5 + vector.zCoord * i); + + BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); + positions.add(pos); + } + return positions; + } + + public abstract void runStreamInteraction(World worldObj); +} \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java new file mode 100644 index 000000000..9d9d88558 --- /dev/null +++ b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java @@ -0,0 +1,44 @@ +package com.hbm.handler.neutron; + +import com.hbm.tileentity.machine.pile.TileEntityPileBase; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class PileNeutronHandler { + + public static class PileNeutronNode extends NeutronNode { + + public PileNeutronNode(TileEntityPileBase tile) { + super(tile, NeutronStream.NeutronType.RBMK); + } + + } + + // The big one!! Runs all interactions for neutrons. + public static void runAllInteractions() { + + // Remove `StreamWorld` objects if they have no streams. + { // aflghdkljghlkbhfjkghgilurbhlkfjghkffdjgn + List toRemove = new ArrayList<>(); + NeutronNodeWorld.streamWorlds.forEach((world, streamWorld) -> { + if (streamWorld.streams.isEmpty()) + toRemove.add(world); + }); + + for (World world : toRemove) { + NeutronNodeWorld.streamWorlds.remove(world); + } + } + + for (Map.Entry world : NeutronNodeWorld.streamWorlds.entrySet()) { + + for (NeutronStream stream : world.getValue().streams) { + stream.runStreamInteraction(world.getKey()); + } + world.getValue().removeAllStreams(); + } + } +} diff --git a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java similarity index 60% rename from src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java rename to src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java index fa0d93f46..88fab103a 100644 --- a/src/main/java/com/hbm/handler/rbmkmk2/RBMKHandler.java +++ b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java @@ -1,4 +1,4 @@ -package com.hbm.handler.rbmkmk2; +package com.hbm.handler.neutron; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.handler.radiation.ChunkRadiationManager; @@ -7,7 +7,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import java.util.ArrayList; import java.util.List; -import java.util.HashMap; import java.util.Map.Entry; import net.minecraft.block.Block; @@ -16,7 +15,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class RBMKHandler { +public class RBMKNeutronHandler { static double moderatorEfficiency; static double reflectorEfficiency; @@ -38,30 +37,27 @@ public class RBMKHandler { return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); } - public static class RBMKNode { + public static RBMKNeutronNode makeNode(TileEntityRBMKBase tile) { + BlockPos pos = new BlockPos(tile); + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + return (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); + return new RBMKNeutronNode(tile, tile.getRBMKType(), tile.hasLid()); + } - protected RBMKType type; - protected TileEntityRBMKBase tile; - protected boolean hasLid; + public static class RBMKNeutronNode extends NeutronNode { - public RBMKNode(TileEntityRBMKBase tile, RBMKType type) { - this.type = type; - this.tile = tile; - this.hasLid = tile.hasLid(); - } - - public RBMKNode(TileEntityRBMKBase tile, RBMKType type, boolean hasLid) { - this.type = type; - this.tile = tile; - this.hasLid = hasLid; + public RBMKNeutronNode(TileEntityRBMKBase tile, RBMKType type, boolean hasLid) { + super(tile, NeutronStream.NeutronType.RBMK); + this.data.put("hasLid", hasLid); + this.data.put("type", type); } public void addLid() { - this.hasLid = true; + this.data.replace("hasLid", true); } public void removeLid() { - this.hasLid = false; + this.data.replace("hasLid", false); } public List getReaSimNodes() { @@ -74,16 +70,15 @@ public class RBMKHandler { } public List checkNode() { - List list = new ArrayList<>(); BlockPos pos = new BlockPos(this.tile); - List streams = new ArrayList<>(); + List streams = new ArrayList<>(); // Simulate streams coming out of the RBMK rod. for (ForgeDirection dir : TileEntityRBMKRod.fluxDirs) { - streams.add(new NeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ))); + streams.add(new RBMKNeutronStream(this, Vec3.createVectorHelper(dir.offsetX, 0, dir.offsetZ))); } // Check if the rod should uncache nodes. @@ -91,7 +86,7 @@ public class RBMKHandler { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; if (!rod.hasRod || rod.lastFluxQuantity == 0) { - for (NeutronStream stream : streams) { + for (RBMKNeutronStream stream : streams) { stream.getNodes(false).forEach(node -> list.add(new BlockPos(node.tile))); } @@ -112,16 +107,16 @@ public class RBMKHandler { // Check if non-rod nodes should be uncached... but now with ReaSim! { // Yeah, I don't want to contaminate the surrounding scope. - List nodes = new ArrayList<>(); + List nodes = new ArrayList<>(); points.forEach(nodePos -> { - RBMKNode node = getNode(nodePos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(nodePos); if (node != null) nodes.add(node); }); boolean hasRod = false; - for (RBMKNode node : nodes) { + for (RBMKNeutronNode node : nodes) { if (node.tile instanceof TileEntityRBMKRod) { @@ -141,11 +136,11 @@ public class RBMKHandler { } // Check if non-rod nodes should be uncached due to no rod in range. - for (NeutronStream stream : streams) { + for (RBMKNeutronStream stream : streams) { - List nodes = stream.getNodes(false); + List nodes = stream.getNodes(false); - for (RBMKNode node : nodes) { + for (RBMKNeutronNode node : nodes) { if (node.tile instanceof TileEntityRBMKRod) return list; } @@ -162,84 +157,21 @@ public class RBMKHandler { } } - public static RBMKNode makeNode(TileEntityRBMKBase tile) { - BlockPos pos = new BlockPos(tile); - if (nodeCache.containsKey(pos)) - return getNode(pos); - if (!tile.hasWorldObj()) - return new RBMKNode(tile, tile.getRBMKType(), true); - return new RBMKNode(tile, tile.getRBMKType()); - } - public static class StreamWorld { + public static class RBMKNeutronStream extends NeutronStream { - List streams; - - public StreamWorld() { - streams = new ArrayList<>(); + public RBMKNeutronStream(NeutronNode origin, Vec3 vector) { + super(origin, vector); } - public void addStream(NeutronStream stream) { - this.streams.add(stream); - } - - public void removeAllStreams() { - this.streams.clear(); - } - } - - public static class NeutronStream { - - public RBMKNode origin; - - // doubles!! - public double fluxQuantity; - // Hey, new implementation! Basically a ratio for slow flux to fast flux - // 0 = all slow flux - // 1 = all fast flux - public double fluxRatio; - - // Vector for direction of neutron flow. - public Vec3 vector; - - // Primarily used as a "dummy stream", not to be added to the streams list. - public NeutronStream(RBMKNode origin, Vec3 vector) { - this.origin = origin; - this.vector = vector; - } - - public NeutronStream(RBMKNode origin, Vec3 vector, double flux, double ratio) { - this.origin = origin; - this.vector = vector; - this.fluxQuantity = flux; - this.fluxRatio = ratio; - World worldObj = origin.tile.getWorldObj(); - if (streamWorlds.get(worldObj) == null) { - StreamWorld world = new StreamWorld(); - world.addStream(this); - streamWorlds.put(worldObj, world); - } else - streamWorlds.get(worldObj).addStream(this); - } - - // USES THE CACHE!!! - public List getBlocks() { - List positions = new ArrayList<>(); - - for (int i = 1; i <= fluxRange; i++) { - int x = (int) Math.floor(0.5 + vector.xCoord * i); - int z = (int) Math.floor(0.5 + vector.zCoord * i); - - BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - positions.add(pos); - } - return positions; + public RBMKNeutronStream(NeutronNode origin, Vec3 vector, double flux, double ratio) { + super(origin, vector, flux, ratio, NeutronType.RBMK); } // Does NOT include the origin node // USES THE CACHE!!! - public List getNodes(boolean addNode) { - List positions = new ArrayList<>(); + public List getNodes(boolean addNode) { + List positions = new ArrayList<>(); for (int i = 1; i <= fluxRange; i++) { int x = (int) Math.floor(0.5 + vector.xCoord * i); @@ -247,17 +179,17 @@ public class RBMKHandler { BlockPos pos = new BlockPos(origin.tile).add(x, 0, z); - if (nodeCache.containsKey(pos)) - positions.add(getNode(pos)); + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + positions.add((RBMKNeutronNode) NeutronNodeWorld.getNode(pos)); else if (this.origin.tile.getBlockType() instanceof RBMKBase) { TileEntity te = blockPosToTE(this.origin.tile.getWorldObj(), pos); if (te instanceof TileEntityRBMKBase) { - TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase)te; - RBMKNode node = makeNode(rbmkBase); + TileEntityRBMKBase rbmkBase = (TileEntityRBMKBase) te; + RBMKNeutronNode node = makeNode(rbmkBase); positions.add(node); if (addNode) - addNode(node); + NeutronNodeWorld.addNode(node); } } } @@ -268,36 +200,36 @@ public class RBMKHandler { public void runStreamInteraction(World worldObj) { // do nothing if there's nothing to do lmao - if(fluxQuantity == 0D) + if (fluxQuantity == 0D) return; BlockPos pos = new BlockPos(origin.tile); TileEntityRBMKBase originTE; - if (nodeCache.containsKey(pos)) - originTE = nodeCache.get(pos).tile; + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + originTE = (TileEntityRBMKBase) NeutronNodeWorld.nodeCache.get(pos).tile; else { originTE = (TileEntityRBMKBase) blockPosToTE(worldObj, pos); - if(originTE == null) + if (originTE == null) return; // Doesn't exist anymore! - addNode(new RBMKNode(originTE, originTE.getRBMKType())); + NeutronNodeWorld.addNode(new RBMKNeutronNode(originTE, originTE.getRBMKType(), originTE.hasLid())); } int moderatedCount = 0; - for(BlockPos nodePos : getBlocks()) { + for (BlockPos nodePos : getBlocks(fluxRange)) { - if(fluxQuantity == 0D) // Whoops, used it all up! + if (fluxQuantity == 0D) // Whoops, used it all up! return; - RBMKNode node = nodeCache.get(nodePos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.nodeCache.get(nodePos); - if(node == null) { + if (node == null) { TileEntity te = blockPosToTE(worldObj, nodePos); // ok, maybe it didn't get added to the list somehow?? if (te instanceof TileEntityRBMKBase) { node = makeNode((TileEntityRBMKBase) te); - addNode(node); // whoops! + NeutronNodeWorld.addNode(node); // whoops! } else { int hits = getHits(nodePos); // Get the amount of hits on blocks. if (hits == columnHeight) // If stream is fully blocked. @@ -313,42 +245,44 @@ public class RBMKHandler { } } - if(node.type == RBMKType.OTHER) // pass right on by! + RBMKType type = (RBMKType) node.data.get("type"); + + if (type == RBMKType.OTHER) // pass right on by! continue; // we established earlier during `getNodes()` that they should all be RBMKBase TEs // no issue with casting here! - TileEntityRBMKBase nodeTE = node.tile; + TileEntityRBMKBase nodeTE = (TileEntityRBMKBase) node.tile; - if(!node.hasLid) + if (!(boolean) node.data.get("hasLid")) ChunkRadiationManager.proxy.incrementRad(worldObj, nodePos.getX(), nodePos.getY(), nodePos.getZ(), (float) (this.fluxQuantity * 0.05F)); - if (node.type == RBMKType.MODERATOR || nodeTE.isModerated()) { + if (type == RBMKType.MODERATOR || nodeTE.isModerated()) { moderatedCount++; moderateStream(); } if (nodeTE instanceof IRBMKFluxReceiver) { - IRBMKFluxReceiver column = (IRBMKFluxReceiver)nodeTE; + IRBMKFluxReceiver column = (IRBMKFluxReceiver) nodeTE; - if (node.type == RBMKType.ROD) { - TileEntityRBMKRod rod = (TileEntityRBMKRod)column; + if (type == RBMKType.ROD) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) column; if (rod.hasRod) { rod.receiveFlux(this); return; } - } else if(node.type == RBMKType.OUTGASSER) { + } else if (type == RBMKType.OUTGASSER) { TileEntityRBMKOutgasser outgasser = ((TileEntityRBMKOutgasser) column); - if(outgasser.canProcess()) { + if (outgasser.canProcess()) { column.receiveFlux(this); return; } } - } else if (node.type == RBMKType.CONTROL_ROD) { + } else if (type == RBMKType.CONTROL_ROD) { TileEntityRBMKControl rod = (TileEntityRBMKControl) nodeTE; if (rod.level > 0.0D) { @@ -357,41 +291,43 @@ public class RBMKHandler { continue; } return; - } else if (node.type == RBMKType.REFLECTOR) { + } else if (type == RBMKType.REFLECTOR) { - if (this.origin.tile.isModerated()) + if (((TileEntityRBMKBase) this.origin.tile).isModerated()) moderatedCount++; if (this.fluxRatio > 0 && moderatedCount > 0) for (int i = 0; i < moderatedCount; i++) moderateStream(); - if (RBMKHandler.reflectorEfficiency != 1.0D) { - this.fluxQuantity *= RBMKHandler.reflectorEfficiency; + if (reflectorEfficiency != 1.0D) { + this.fluxQuantity *= reflectorEfficiency; continue; } - ((TileEntityRBMKRod)originTE).receiveFlux(this); + ((TileEntityRBMKRod) originTE).receiveFlux(this); return; - } else if (node.type == RBMKType.ABSORBER) { - if (RBMKHandler.absorberEfficiency == 1) + } else if (type == RBMKType.ABSORBER) { + if (absorberEfficiency == 1) return; - this.fluxQuantity *= RBMKHandler.absorberEfficiency; + this.fluxQuantity *= absorberEfficiency; } } - List nodes = getNodes(true); + List nodes = getNodes(true); if (nodes.isEmpty()) return; - RBMKNode lastNode = nodes.get(nodes.size() - 1); + RBMKNeutronNode lastNode = nodes.get(nodes.size() - 1); - if (lastNode.type != RBMKType.REFLECTOR && lastNode.type != RBMKType.ABSORBER && lastNode.type != RBMKType.CONTROL_ROD) + RBMKType lastNodeType = (RBMKType) lastNode.data.get("type"); + + if (lastNodeType != RBMKType.REFLECTOR && lastNodeType != RBMKType.ABSORBER && lastNodeType != RBMKType.CONTROL_ROD) irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); - if (lastNode.type == RBMKType.CONTROL_ROD) { - TileEntityRBMKControl rod = (TileEntityRBMKControl)lastNode.tile; + if (lastNodeType == RBMKType.CONTROL_ROD) { + TileEntityRBMKControl rod = (TileEntityRBMKControl) lastNode.tile; if (rod.getMult() > 0.0D) { this.fluxQuantity *= rod.getMult(); irradiateFromFlux((new BlockPos(lastNode.tile)).add(this.vector.xCoord, 0.0D, this.vector.zCoord)); @@ -426,32 +362,7 @@ public class RBMKHandler { public void moderateStream() { fluxRatio *= (1 - moderatorEfficiency); } - } - // List of all stream worlds. - public static HashMap streamWorlds = new HashMap<>(); - - public static void removeAllWorlds() { - streamWorlds.clear(); - } - - // HashMap of all RBMK nodes and their positions. - protected static HashMap nodeCache = new HashMap<>(); - - public static void addNode(RBMKNode node) { - nodeCache.put(new BlockPos(node.tile), node); - } - - public static void removeNode(BlockPos position) { - nodeCache.remove(position); - } - - public static RBMKNode getNode(BlockPos position) { - return nodeCache.get(position); - } - - public static void removeAllNodes() { - nodeCache.clear(); } private static int ticks = 0; @@ -462,17 +373,17 @@ public class RBMKHandler { // Remove `StreamWorld` objects if they have no streams. { // aflghdkljghlkbhfjkghgilurbhlkfjghkffdjgn List toRemove = new ArrayList<>(); - streamWorlds.forEach((world, streamWorld) -> { + NeutronNodeWorld.streamWorlds.forEach((world, streamWorld) -> { if (streamWorld.streams.isEmpty()) toRemove.add(world); }); for (World world : toRemove) { - streamWorlds.remove(world); + NeutronNodeWorld.streamWorlds.remove(world); } } - for (Entry world : streamWorlds.entrySet()) { + for (Entry world : NeutronNodeWorld.streamWorlds.entrySet()) { // Gamerule caching because this apparently is kinda slow? // meh, good enough @@ -487,9 +398,10 @@ public class RBMKHandler { fluxRange = RBMKDials.getFluxRange(world.getKey()); for (NeutronStream stream : world.getValue().streams) { - stream.runStreamInteraction(world.getKey()); + if (stream.type == NeutronStream.NeutronType.RBMK) + stream.runStreamInteraction(world.getKey()); } - world.getValue().removeAllStreams(); + world.getValue().removeAllStreamsOfType(NeutronStream.NeutronType.RBMK); } // Freshen the node cache every `cacheTime` ticks to prevent huge RAM usage. @@ -497,11 +409,13 @@ public class RBMKHandler { if (ticks >= cacheTime) { ticks = 0; List toRemove = new ArrayList<>(); - for(RBMKNode cachedNode : nodeCache.values()) - toRemove.addAll(cachedNode.checkNode()); + for(NeutronNode cachedNode : NeutronNodeWorld.nodeCache.values()) { + RBMKNeutronNode node = (RBMKNeutronNode) cachedNode; + toRemove.addAll(node.checkNode()); + } for(BlockPos pos : toRemove) - removeNode(pos); + NeutronNodeWorld.removeNode(pos); } ticks++; } diff --git a/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java b/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java deleted file mode 100644 index 457638a76..000000000 --- a/src/main/java/com/hbm/handler/rbmkmk2/ItemRBMKRodFluxCurve.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.hbm.handler.rbmkmk2; - -import com.hbm.items.machine.ItemRBMKPellet; -import com.hbm.items.machine.ItemRBMKRod; -import net.minecraft.util.MathHelper; - -import java.util.function.BiFunction; -import java.util.function.Function; - - -public class ItemRBMKRodFluxCurve extends ItemRBMKRod { - - /** Double 1: Flux ratio in. - * Double 2: Depletion value. - * Return double: Output flux ratio. - **/ - BiFunction ratioCurve; - - /** Double 1: Flux quantity in.
- * Double 2: Flux ratio in.
- * Return double: Output flux quantity. - **/ - BiFunction fluxCurve; - - public ItemRBMKRodFluxCurve(ItemRBMKPellet pellet) { - super(pellet); - } - - public ItemRBMKRodFluxCurve(String fullName) { - super(fullName); - } - - public ItemRBMKRodFluxCurve setOutputRatioCurve(Function func) { - this.ratioCurve = (fluxRatioIn, depletion) -> func.apply(fluxRatioIn) * 1.0D; - return this; - } - - public ItemRBMKRodFluxCurve setDepletionOutputRatioCurve(BiFunction func) { - this.ratioCurve = func; - return this; - } - - public ItemRBMKRodFluxCurve setOutputFluxCurve(BiFunction func) { - this.fluxCurve = func; - return this; - } - - public double fluxRatioOut(double fluxRatioIn, double depletion) { - return MathHelper.clamp_double(ratioCurve.apply(fluxRatioIn, depletion), 0, 1); - } - - public double fluxFromRatio(double quantity, double ratio) { - return fluxCurve.apply(quantity, ratio); - } -} diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index b8de08aa3..d9021d10d 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -394,7 +394,7 @@ public class HazardRegistry { registerRBMKRod(rbmk_fuel_zfb_pu241, pu239 * rod_rbmk * 0.1F, wst * rod_rbmk * 7.5F); registerRBMKRod(rbmk_fuel_zfb_am_mix, pu241 * rod_rbmk * 0.1F, wst * rod_rbmk * 10F); registerRBMK(rbmk_fuel_drx, bf * rod_rbmk, bf * rod_rbmk * 100F, true, true, 0, 1F/3F); - registerRBMKRod(rbmk_fuel_curve, saf * rod_rbmk * np237 * rod_rbmk, wst * rod_rbmk * 35F); + //registerRBMKRod(rbmk_fuel_curve, saf * rod_rbmk * np237 * rod_rbmk, wst * rod_rbmk * 35F); registerRBMKPellet(rbmk_pellet_ueu, u * billet, wst * billet * 20F); registerRBMKPellet(rbmk_pellet_meu, uf * billet, wst * billet * 21.5F); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 84d22bd43..1685902ee 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -7,7 +7,6 @@ import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.LuckAbility; import com.hbm.handler.WeaponAbility; import com.hbm.handler.guncfg.*; -import com.hbm.handler.rbmkmk2.ItemRBMKRodFluxCurve; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -1132,7 +1131,7 @@ public class ModItems { public static ItemRBMKRod rbmk_fuel_zfb_am_mix; public static ItemRBMKRod rbmk_fuel_drx; public static ItemRBMKRod rbmk_fuel_test; - public static ItemRBMKRodFluxCurve rbmk_fuel_curve; + //public static ItemRBMKRod rbmk_fuel_curve; public static ItemRBMKPellet rbmk_pellet_ueu; public static ItemRBMKPellet rbmk_pellet_meu; public static ItemRBMKPellet rbmk_pellet_heu233; @@ -3763,15 +3762,18 @@ public class ModItems { .setHeat(1.0D) .setMeltingPoint(100000) .setUnlocalizedName("rbmk_fuel_test").setTextureName(RefStrings.MODID + ":rbmk_fuel_test"); - rbmk_fuel_curve = (ItemRBMKRodFluxCurve) new ItemRBMKRodFluxCurve("3D curve test") + /* Experimental flux curve shit + rbmk_fuel_curve = (ItemRBMKRod) new ItemRBMKRod("3D Flux Curve Test") + .setFluxCurve(true) .setOutputFluxCurve((fluxQuantity, fluxRatio) -> fluxQuantity * (1 - Math.pow(fluxRatio, 2))) .setDepletionOutputRatioCurve((ratioIn, depletion) -> Math.pow(ratioIn, 2) * depletion) .setYield(1000000D) - .setStats(100) - .setFunction(EnumBurnFunc.EXPERIMENTAL) - .setHeat(1.0D) + .setStats(75) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.5D) .setMeltingPoint(100000) .setUnlocalizedName("rbmk_fuel_curve").setTextureName(RefStrings.MODID + ":rbmk_fuel_curve"); + */ watz_pellet = new ItemWatzPellet().setUnlocalizedName("watz_pellet").setTextureName(RefStrings.MODID + ":watz_pellet"); watz_pellet_depleted = new ItemWatzPellet().setUnlocalizedName("watz_pellet_depleted").setTextureName(RefStrings.MODID + ":watz_pellet"); @@ -6613,7 +6615,7 @@ public class ModItems { GameRegistry.registerItem(rbmk_fuel_zfb_am_mix, rbmk_fuel_zfb_am_mix.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_drx, rbmk_fuel_drx.getUnlocalizedName()); GameRegistry.registerItem(rbmk_fuel_test, rbmk_fuel_test.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); + //GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_ueu, rbmk_pellet_ueu.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_meu, rbmk_pellet_meu.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java index c2e215307..853fe918f 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKLid.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKLid.java @@ -2,7 +2,8 @@ package com.hbm.items.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBase; @@ -15,8 +16,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import static com.hbm.handler.rbmkmk2.RBMKHandler.getNode; - public class ItemRBMKLid extends Item { @Override @@ -42,7 +41,7 @@ public class ItemRBMKLid extends Item { if(tile.hasLid()) return false; - RBMKHandler.RBMKNode node = getNode(new BlockPos(te)); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(new BlockPos(te)); if (node != null) node.addLid(); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 93e30f4ac..d02a393d2 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -2,6 +2,8 @@ package com.hbm.items.machine; import java.util.List; import java.util.Locale; +import java.util.function.BiFunction; +import java.util.function.Function; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; @@ -14,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class ItemRBMKRod extends Item { @@ -241,7 +244,7 @@ public class ItemRBMKRod extends Item { } /** - * @param reactivity [0;100] ...or at least those are sane levels + * @param enrichment [0;100] ...or at least those are sane levels * @return the amount of reactivity yielded, unmodified by xenon */ public double reactivityFunc(double in, double enrichment) { @@ -355,7 +358,55 @@ public class ItemRBMKRod extends Item { public static double getPoisonLevel(ItemStack stack) { return getPoison(stack) / 100D; } - + + // START Special flux curve handling! + // Nothing really uses this yet, though it's a really fun feature to play around with. + + // For the RBMK handler to see if the rod is special. + public boolean specialFluxCurve = false; + + public ItemRBMKRod setFluxCurve(boolean bool) { + specialFluxCurve = bool; + return this; + } + + /** Double 1: Flux ratio in. + * Double 2: Depletion value. + * Return double: Output flux ratio. + **/ + BiFunction ratioCurve; + + /** Double 1: Flux quantity in.
+ * Double 2: Flux ratio in.
+ * Return double: Output flux quantity. + **/ + BiFunction fluxCurve; + + public ItemRBMKRod setOutputRatioCurve(Function func) { + this.ratioCurve = (fluxRatioIn, depletion) -> func.apply(fluxRatioIn) * 1.0D; + return this; + } + + public ItemRBMKRod setDepletionOutputRatioCurve(BiFunction func) { + this.ratioCurve = func; + return this; + } + + public ItemRBMKRod setOutputFluxCurve(BiFunction func) { + this.fluxCurve = func; + return this; + } + + public double fluxRatioOut(double fluxRatioIn, double depletion) { + return MathHelper.clamp_double(ratioCurve.apply(fluxRatioIn, depletion), 0, 1); + } + + public double fluxFromRatio(double quantity, double ratio) { + return fluxCurve.apply(quantity, ratio); + } + + // END Special flux curve handling. + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index ea4c568d9..725bad598 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -9,7 +9,9 @@ import java.util.Map; import java.util.Random; import java.util.UUID; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.PileNeutronHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; @@ -537,8 +539,8 @@ public class ModEventHandler { @SubscribeEvent public void onUnload(WorldEvent.Unload event) { - RBMKHandler.removeAllWorlds(); // Remove world from worlds when unloaded to avoid world issues. - RBMKHandler.removeAllNodes(); // Remove all nodes. + NeutronNodeWorld.StreamWorld.removeAllWorlds(); // Remove world from worlds when unloaded to avoid world issues. + NeutronNodeWorld.removeAllNodes(); // Remove all nodes. } public static boolean didSit = false; @@ -1151,7 +1153,9 @@ public class ModEventHandler { TileEntityMachineRadarNT.updateSystem(); Nodespace.updateNodespace(); // RBMK!!!! - RBMKHandler.runAllInteractions(); + RBMKNeutronHandler.runAllInteractions(); + // Chicago Pile!!!! + PileNeutronHandler.runAllInteractions(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java index 655c234ae..2b8464354 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronStream; public interface IRBMKFluxReceiver { @@ -16,5 +16,5 @@ public interface IRBMKFluxReceiver { } } - public void receiveFlux(RBMKHandler.NeutronStream stream); + public void receiveFlux(NeutronStream stream); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java index abbb5ceb1..d1c585539 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAbsorber.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKAbsorber extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.ABSORBER; + public RBMKType getRBMKType() { + return RBMKType.ABSORBER; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index a211e990e..2d3b5b616 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -8,8 +8,9 @@ import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.entity.effect.EntitySpear; import com.hbm.entity.projectile.EntityRBMKDebris; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKType; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.BufPacket; @@ -42,7 +43,12 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; -import java.util.*; +import java.util.List; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Set; +import java.util.HashSet; +import java.util.Iterator; /** * Base class for all RBMK components, active or passive. Handles heat and the explosion sequence @@ -220,7 +226,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements public void invalidate() { super.invalidate(); - RBMKHandler.removeNode(new BlockPos(this)); // woo-fucking-hoo!!! + NeutronNodeWorld.removeNode(new BlockPos(this)); // woo-fucking-hoo!!! } @Override @@ -246,13 +252,15 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements heat = 20D; } - public abstract RBMKType getRBMKType(); + public RBMKType getRBMKType() { + return RBMKType.OTHER; + } protected static boolean diag = false; @Override public void readFromNBT(NBTTagCompound nbt) { - + if(!diag) { super.readFromNBT(nbt); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java index 08611e1b1..82a7137a9 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBlank.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKBlank extends TileEntityRBMKBase { @@ -18,11 +17,6 @@ public class TileEntityRBMKBlank extends TileEntityRBMKBase { super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.BLANK; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 2a1ea6801..1c1d4c29b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -8,7 +8,6 @@ import api.hbm.tile.IInfoProviderEC; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerRBMKGeneric; import com.hbm.inventory.fluid.FluidType; @@ -224,11 +223,6 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.BOILER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java index edb73195c..9e6d43868 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControl.java @@ -2,7 +2,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -132,8 +132,8 @@ public abstract class TileEntityRBMKControl extends TileEntityRBMKSlottedBase im } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.CONTROL_ROD; + public RBMKType getRBMKType() { + return RBMKType.CONTROL_ROD; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java index e4134ab0c..fe3ddc71d 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKCooler.java @@ -2,7 +2,6 @@ package com.hbm.tileentity.machine.rbmk; import api.hbm.fluid.IFluidStandardReceiver; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; @@ -17,7 +16,6 @@ import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; import java.util.List; @@ -118,11 +116,6 @@ public class TileEntityRBMKCooler extends TileEntityRBMKBase implements IFluidSt this.lastCooled = buf.readInt(); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.COOLER; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index e54a5acbd..42aecf827 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -4,7 +4,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; import com.hbm.inventory.container.ContainerRBMKHeater; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -154,11 +153,6 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I super.onMelt(reduce); } - @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; - } - @Override public ColumnType getConsoleType() { return ColumnType.HEATEX; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java index 7ce7c1e67..989b0af42 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKModerator.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKModerator extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKModerator extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.MODERATOR; + public RBMKType getRBMKType() { + return RBMKType.MODERATOR; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 3b701fc0e..7b39fa47b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -4,7 +4,8 @@ import api.hbm.fluid.IFluidStandardSender; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.NeutronStream; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.inventory.FluidStack; import com.hbm.inventory.container.ContainerRBMKOutgasser; import com.hbm.inventory.fluid.Fluids; @@ -92,7 +93,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement } @Override - public void receiveFlux(RBMKHandler.NeutronStream stream) { + public void receiveFlux(NeutronStream stream) { if(canProcess()) { @@ -167,8 +168,8 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OUTGASSER; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.OUTGASSER; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java index 79e40867b..f2157f849 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKReflector.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; public class TileEntityRBMKReflector extends TileEntityRBMKBase { @@ -19,8 +19,8 @@ public class TileEntityRBMKReflector extends TileEntityRBMKBase { } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.REFLECTOR; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.REFLECTOR; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 838d418cd..28f90d118 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -5,10 +5,11 @@ import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.blocks.machine.rbmk.RBMKRod; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.NeutronStream; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.handler.radiation.ChunkRadiationManager; -import com.hbm.handler.rbmkmk2.RBMKHandler; -import com.hbm.handler.rbmkmk2.RBMKHandler.NeutronStream; -import com.hbm.handler.rbmkmk2.ItemRBMKRodFluxCurve; +import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKNeutronNode; import com.hbm.inventory.container.ContainerRBMKRod; import com.hbm.inventory.gui.GUIRBMKRod; import com.hbm.items.ModItems; @@ -40,8 +41,6 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; -import static com.hbm.handler.rbmkmk2.RBMKHandler.*; - @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { @@ -93,14 +92,15 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM double fluxRatioOut; double fluxQuantityOut; - if (rod instanceof ItemRBMKRodFluxCurve) { // Experimental flux ratio curve rods! - ItemRBMKRodFluxCurve rodCurve = (ItemRBMKRodFluxCurve) rod; + // Experimental flux ratio curve rods! + // Again, nothing really uses this so its just idle code at the moment. + if (rod.specialFluxCurve) { - fluxRatioOut = rodCurve.fluxRatioOut(this.fluxRatio, ItemRBMKRod.getEnrichment(slots[0])); + fluxRatioOut = rod.fluxRatioOut(this.fluxRatio, ItemRBMKRod.getEnrichment(slots[0])); double fluxIn; - fluxIn = rodCurve.fluxFromRatio(this.fluxQuantity, this.fluxRatio); + fluxIn = rod.fluxFromRatio(this.fluxQuantity, this.fluxRatio); fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); } else { @@ -182,15 +182,15 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM if (flux == 0) { // simple way to remove the node from the cache when no flux is going into it! - removeNode(pos); + NeutronNodeWorld.removeNode(pos); return; } - RBMKHandler.RBMKNode node = getNode(pos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); if(node == null) { - node = RBMKHandler.makeNode(this); - addNode(node); + node = RBMKNeutronHandler.makeNode(this); + NeutronNodeWorld.addNode(node); } for(ForgeDirection dir : fluxDirs) { @@ -198,7 +198,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM Vec3 neutronVector = Vec3.createVectorHelper(dir.offsetX, dir.offsetY, dir.offsetZ); // Create new neutron streams - new NeutronStream(node, neutronVector, flux, ratio); + new RBMKNeutronHandler.RBMKNeutronStream(node, neutronVector, flux, ratio); } } @@ -215,7 +215,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM this.fluxRatio = 0; } else { this.fluxQuantity = nbt.getDouble("fluxQuantity"); - this.fluxRatio = nbt.getDouble("fluxRatio"); + this.fluxRatio = nbt.getDouble("fluxMod"); } this.hasRod = nbt.getBoolean("hasRod"); } @@ -223,8 +223,17 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setDouble("fluxSlow", this.lastFluxQuantity * (1 - fluxRatio)); - nbt.setDouble("fluxFast", this.lastFluxQuantity * fluxRatio); + nbt.setDouble("fluxQuantity", this.fluxQuantity); + nbt.setDouble("fluxMod", this.fluxRatio); + nbt.setBoolean("hasRod", this.hasRod); + } + + // aaaaaaaa + public void writeToNBTDiag(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setDouble("fluxSlow", this.fluxQuantity * (1 - fluxRatio)); + nbt.setDouble("fluxFast", this.fluxQuantity * fluxRatio); nbt.setBoolean("hasRod", this.hasRod); } @@ -246,7 +255,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM public void getDiagData(NBTTagCompound nbt) { diag = true; - this.writeToNBT(nbt); + this.writeToNBTDiag(nbt); diag = false; if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { @@ -308,8 +317,8 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.ROD; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.ROD; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java index 74da00c39..d638e4795 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java @@ -1,12 +1,13 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler.RBMKNode; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.util.Vec3; -import static com.hbm.handler.rbmkmk2.RBMKHandler.*; +import static com.hbm.handler.neutron.RBMKNeutronHandler.*; public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { @@ -26,15 +27,15 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { if (flux == 0) { // simple way to remove the node from the cache when no flux is going into it! - removeNode(pos); + NeutronNodeWorld.removeNode(pos); return; } - RBMKNode node = getNode(pos); + RBMKNeutronNode node = (RBMKNeutronNode) NeutronNodeWorld.getNode(pos); if(node == null) { node = makeNode(this); - addNode(node); + NeutronNodeWorld.addNode(node); } int count = RBMKDials.getReaSimCount(worldObj); @@ -44,7 +45,7 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); - new NeutronStream(makeNode(this), neutronVector, flux, ratio); + new RBMKNeutronHandler.RBMKNeutronStream(makeNode(this), neutronVector, flux, ratio); // Create new neutron streams } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java index ac8621882..66809e58e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.handler.rbmkmk2.RBMKHandler; +import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.inventory.container.ContainerRBMKStorage; import com.hbm.inventory.gui.GUIRBMKStorage; import com.hbm.items.machine.ItemRBMKRod; @@ -42,8 +42,8 @@ public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements } @Override - public RBMKHandler.RBMKType getRBMKType() { - return RBMKHandler.RBMKType.OTHER; + public RBMKNeutronHandler.RBMKType getRBMKType() { + return RBMKNeutronHandler.RBMKType.OTHER; } @Override From bd25da4c1a5009bd51fbc8ed16cc7a808b9971b1 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:21:12 -0500 Subject: [PATCH 12/17] oh my fucking god --- .../handler/neutron/PileNeutronHandler.java | 118 +++++++++++++++++- .../handler/neutron/RBMKNeutronHandler.java | 6 +- .../machine/pile/TileEntityPileBase.java | 115 +++++------------ .../pile/TileEntityPileBreedingFuel.java | 2 +- .../machine/pile/TileEntityPileFuel.java | 2 +- .../machine/pile/TileEntityPileSource.java | 2 +- 6 files changed, 158 insertions(+), 87 deletions(-) diff --git a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java index 9d9d88558..48377590e 100644 --- a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java +++ b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java @@ -1,6 +1,16 @@ package com.hbm.handler.neutron; +import api.hbm.block.IPileNeutronReceiver; +import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.machine.pile.TileEntityPileBase; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBase; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import java.util.ArrayList; @@ -9,14 +19,110 @@ import java.util.Map; public class PileNeutronHandler { + public static int range = 5; + public static class PileNeutronNode extends NeutronNode { public PileNeutronNode(TileEntityPileBase tile) { - super(tile, NeutronStream.NeutronType.RBMK); + super(tile, NeutronStream.NeutronType.PILE); } } + public static PileNeutronNode makeNode(TileEntityPileBase tile) { + BlockPos pos = new BlockPos(tile); + if (NeutronNodeWorld.nodeCache.containsKey(pos)) + return (PileNeutronNode) NeutronNodeWorld.getNode(pos); + return new PileNeutronNode(tile); + } + + private static TileEntity blockPosToTE(World worldObj, BlockPos pos) { + return worldObj.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); + } + + public static class PileNeutronStream extends NeutronStream { + + public PileNeutronStream(NeutronNode origin, Vec3 vector) { + super(origin, vector); + } + + public PileNeutronStream(NeutronNode origin, Vec3 vector, double flux) { + super(origin, vector, flux, 0D, NeutronType.PILE); + } + + @Override + public void runStreamInteraction(World worldObj) { + + //Random rand = origin.tile.getWorldObj().rand; + //Vec3 vec = Vec3.createVectorHelper(1, 0, 0); + //vec.rotateAroundZ((float)(rand.nextDouble() * Math.PI * 2D)); + //vec.rotateAroundY((float)(rand.nextDouble() * Math.PI * 2D)); + //vec.rotateAroundX((float)(rand.nextDouble() * Math.PI * 2D)); + + TileEntityPileBase originTE = (TileEntityPileBase) origin.tile; + BlockPos pos = new BlockPos(originTE); + + for(float i = 1; i <= range; i += 0.5F) { + + BlockPos node = new BlockPos( + (int)Math.floor(pos.getX() + 0.5 + vector.xCoord * i), + (int)Math.floor(pos.getY() + 0.5 + vector.yCoord * i), + (int)Math.floor(pos.getZ() + 0.5 + vector.zCoord * i) + ); + + TileEntity tile; + + if (NeutronNodeWorld.nodeCache.containsKey(node)) + tile = NeutronNodeWorld.nodeCache.get(node).tile; + else { + tile = blockPosToTE(worldObj, node); + if (tile == null) + return; // Doesn't exist anymore! + if (tile instanceof TileEntityPileBase) + NeutronNodeWorld.addNode(new PileNeutronNode((TileEntityPileBase) tile)); + } + + TileEntityPileBase te = (TileEntityPileBase) tile; + Block block = te.getBlockType(); + + + // Return when a boron block is hit + if(block == ModBlocks.block_boron) + return; + + else if(block == ModBlocks.concrete || + block == ModBlocks.concrete_smooth || + block == ModBlocks.concrete_asbestos || + block == ModBlocks.concrete_colored || + block == ModBlocks.brick_concrete) + fluxQuantity *= 0.25; + + int meta = te.getBlockMetadata(); + + if(block == ModBlocks.block_graphite_rod && (meta & 8) == 0) + return; + + if(te instanceof IPileNeutronReceiver) { + + IPileNeutronReceiver rec = (IPileNeutronReceiver) te; + rec.receiveNeutrons((int) fluxQuantity); + + if(block != ModBlocks.block_graphite_detector || (meta & 8) == 0) + return; + } + + int x = (int) (node.getX() + 0.5); + int y = (int) (node.getY() + 0.5); + int z = (int) (node.getZ() + 0.5); + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x, y, z, x, y, z)); + + if(entities != null) + for(EntityLivingBase e : entities) + ContaminationUtil.contaminate(e, ContaminationUtil.HazardType.RADIATION, ContaminationUtil.ContaminationType.CREATIVE, (float) (fluxQuantity / 4D)); + } + } + } + // The big one!! Runs all interactions for neutrons. public static void runAllInteractions() { @@ -40,5 +146,15 @@ public class PileNeutronHandler { } world.getValue().removeAllStreams(); } + + for (Map.Entry world : NeutronNodeWorld.streamWorlds.entrySet()) { + + for (NeutronStream stream : world.getValue().streams) { + if (stream.type == NeutronStream.NeutronType.PILE) + stream.runStreamInteraction(world.getKey()); + } + world.getValue().removeAllStreamsOfType(NeutronStream.NeutronType.PILE); + } + } } diff --git a/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java index 88fab103a..d02c17629 100644 --- a/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java +++ b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java @@ -410,8 +410,10 @@ public class RBMKNeutronHandler { ticks = 0; List toRemove = new ArrayList<>(); for(NeutronNode cachedNode : NeutronNodeWorld.nodeCache.values()) { - RBMKNeutronNode node = (RBMKNeutronNode) cachedNode; - toRemove.addAll(node.checkNode()); + if (cachedNode.type == NeutronStream.NeutronType.RBMK) { + RBMKNeutronNode node = (RBMKNeutronNode) cachedNode; + toRemove.addAll(node.checkNode()); + } } for(BlockPos pos : toRemove) diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java index 8c06fd658..b4745b170 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java @@ -1,96 +1,49 @@ package com.hbm.tileentity.machine.pile; -import java.util.List; -import java.util.Random; +import com.hbm.handler.neutron.NeutronNodeWorld; +import com.hbm.handler.neutron.PileNeutronHandler; +import com.hbm.handler.neutron.PileNeutronHandler.PileNeutronStream; +import com.hbm.handler.neutron.PileNeutronHandler.PileNeutronNode; -import com.hbm.blocks.ModBlocks; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; - -import api.hbm.block.IPileNeutronReceiver; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; +import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; public abstract class TileEntityPileBase extends TileEntity { @Override public abstract void updateEntity(); - - protected void castRay(int flux, int range) { - Random rand = worldObj.rand; - Vec3 vec = Vec3.createVectorHelper(1, 0, 0); - vec.rotateAroundZ((float)(rand.nextDouble() * Math.PI * 2D)); - vec.rotateAroundY((float)(rand.nextDouble() * Math.PI * 2D)); - vec.rotateAroundX((float)(rand.nextDouble() * Math.PI * 2D)); - - int prevX = xCoord; - int prevY = yCoord; - int prevZ = zCoord; - - for(float i = 1; i <= range; i += 0.5F) { - int x = (int)Math.floor(xCoord + 0.5 + vec.xCoord * i); - int y = (int)Math.floor(yCoord + 0.5 + vec.yCoord * i); - int z = (int)Math.floor(zCoord + 0.5 + vec.zCoord * i); - - if(x == prevX && y == prevY && z == prevZ) - continue; + @Override + public void invalidate() { + super.invalidate(); - prevX = x; - prevY = y; - prevZ = z; - - /*if(i == range || i == 1) { - NBTTagCompound data2 = new NBTTagCompound(); - data2.setString("type", "vanillaExt"); - data2.setString("mode", i == range ? "greendust" : - i == 1 ? "reddust" : "bluedust"); - data2.setDouble("posX", xCoord + 0.5 + vec.xCoord * i); - data2.setDouble("posY", yCoord + 0.5 + vec.yCoord * i); - data2.setDouble("posZ", zCoord + 0.5 + vec.zCoord * i); - MainRegistry.proxy.effectNT(data2); - }*/ - - Block b = worldObj.getBlock(x, y, z); - - if(b == ModBlocks.concrete || b == ModBlocks.concrete_smooth || b == ModBlocks.concrete_asbestos || b == ModBlocks.concrete_colored || b == ModBlocks.brick_concrete) - flux *= 0.25; - - if(b == ModBlocks.block_boron) - return; - - int meta = worldObj.getBlockMetadata(x, y, z); - - if(b == ModBlocks.block_graphite_rod && (meta & 8) == 0) - return; - - TileEntity te = worldObj.getTileEntity(x, y, z); - - if(te instanceof IPileNeutronReceiver) { - - //this part throttles neutron efficiency for reactions that are way too close, efficiency reaches 100% after 1.5 meters - //This entire time, this multiplier has been using the max distance, not the actual one, meaning efficency has always been 100% - //float mult = Math.min((float)i / 1.5F, 1F); - //int n = (int)(flux * mult); - - IPileNeutronReceiver rec = (IPileNeutronReceiver) te; - rec.receiveNeutrons(flux); - - if(b != ModBlocks.block_graphite_detector || (meta & 8) == 0) - return; - } - - List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x + 0.5, y + 0.5, z + 0.5, x + 0.5, y + 0.5, z + 0.5)); - - if(entities != null) - for(EntityLivingBase e : entities) { - - ContaminationUtil.contaminate(e, HazardType.RADIATION, ContaminationType.CREATIVE, flux / 4F); - } + NeutronNodeWorld.removeNode(new BlockPos(this)); + } + + protected void castRay(int flux) { + + BlockPos pos = new BlockPos(this); + + if (flux == 0) { + // simple way to remove the node from the cache when no flux is going into it! + NeutronNodeWorld.removeNode(pos); + return; } + + PileNeutronNode node = (PileNeutronNode) NeutronNodeWorld.getNode(pos); + + if(node == null) { + node = PileNeutronHandler.makeNode(this); + NeutronNodeWorld.addNode(node); + } + + Vec3 neutronVector = Vec3.createVectorHelper(1, 0, 0); + + neutronVector.rotateAroundX((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + neutronVector.rotateAroundZ((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + + new PileNeutronStream(node, neutronVector, flux); } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java index 1bbe94acb..c1f775e0e 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java @@ -35,7 +35,7 @@ public class TileEntityPileBreedingFuel extends TileEntityPileBase implements IP return; for(int i = 0; i < 2; i++) - this.castRay(1, 5); + this.castRay(1); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java index 15233ad0c..0318a99b7 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java @@ -71,7 +71,7 @@ public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutr this.heat += reaction; for(int i = 0; i < 12; i++) - this.castRay((int) Math.max(reaction * 0.25, 1), 5); + this.castRay((int) Math.max(reaction * 0.25, 1)); return lastProgress; } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java index c297f9dfb..6b38b7875 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java @@ -12,7 +12,7 @@ public class TileEntityPileSource extends TileEntityPileBase { int n = this.getBlockType() == ModBlocks.block_graphite_source ? 1 : 2; for(int i = 0; i < 12; i++) { - this.castRay(n, 5); + this.castRay(n); } } } From 05ca9203e95729bb78a5970f8880f230c8def127 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Mon, 2 Sep 2024 21:39:28 -0500 Subject: [PATCH 13/17] the ByteBuf shenanigans begin!! --- .../bomb/TileEntityNukeBalefire.java | 34 ++++--- .../tileentity/machine/TileEntityAshpit.java | 25 +++-- .../machine/TileEntityConveyorPress.java | 47 +++++----- .../tileentity/machine/TileEntityCore.java | 42 +++++---- .../machine/TileEntityCoreEmitter.java | 41 ++++---- .../machine/TileEntityCoreInjector.java | 28 ++++-- .../machine/TileEntityCoreReceiver.java | 26 ++++-- .../machine/TileEntityCoreStabilizer.java | 29 +++--- .../machine/TileEntityCustomMachine.java | 68 +++++++------- .../oil/TileEntityMachinePumpjack.java | 22 ++--- .../machine/oil/TileEntityOilDrillBase.java | 93 ++++++++++--------- .../machine/rbmk/TileEntityRBMKBase.java | 4 +- src/main/java/com/hbm/util/BufferUtil.java | 69 +++++++++++++- 13 files changed, 323 insertions(+), 205 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index db18d4bfb..748bbfd3f 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -11,6 +11,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -54,22 +55,29 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU if(timer <= 0) { explode(); } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("timer", timer); - data.setBoolean("loaded", this.isLoaded()); - data.setBoolean("started", started); - networkPack(data, 250); + + networkPackNT(250); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - timer = data.getInteger("timer"); - started = data.getBoolean("started"); - loaded = data.getBoolean("loaded"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeInt(this.timer); + buf.writeBoolean(this.started); + buf.writeBoolean(this.loaded); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.timer = buf.readInt(); + this.started = buf.readBoolean(); + this.loaded = buf.readBoolean(); + } + public void handleButtonPacket(int value, int meta) { if(meta == 0 && this.isLoaded()) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java index acefaf0f2..dfb63df66 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java @@ -15,6 +15,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -103,11 +104,8 @@ public class TileEntityAshpit extends TileEntityMachineBase implements IGUIProvi for(int i = 0; i < 5; i++) { if(slots[i] != null) isFull = true; } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("playersUsing", this.playersUsing); - data.setBoolean("isFull", this.isFull); - this.networkPack(data, 50); + + this.networkPackNT(50); } else { this.prevDoorAngle = this.doorAngle; @@ -142,10 +140,19 @@ public class TileEntityAshpit extends TileEntityMachineBase implements IGUIProvi } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.playersUsing = nbt.getInteger("playersUsing"); - this.isFull = nbt.getBoolean("isFull"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeInt(this.playersUsing); + buf.writeBoolean(this.isFull); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.playersUsing = buf.readInt(); + this.isFull = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityConveyorPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityConveyorPress.java index 418c9932c..0cb68f8ec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityConveyorPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityConveyorPress.java @@ -7,13 +7,16 @@ import com.hbm.inventory.recipes.PressRecipes; import com.hbm.items.machine.ItemStamp; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @@ -84,16 +87,7 @@ public class TileEntityConveyorPress extends TileEntityMachineBase implements IE delay--; } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setDouble("press", press); - if(slots[0] != null) { - NBTTagCompound stack = new NBTTagCompound(); - slots[0].writeToNBT(stack); - data.setTag("stack", stack); - } - - this.networkPack(data, 50); + this.networkPackNT(50); } else { // approach-based interpolation, GO! @@ -174,23 +168,26 @@ public class TileEntityConveyorPress extends TileEntityMachineBase implements IE } public boolean canRetract() { - if(this.power < usage) return false; - return true; + return this.power >= usage; } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.power = nbt.getLong("power"); - this.syncPress = nbt.getInteger("press"); - - if(nbt.hasKey("stack")) { - NBTTagCompound stack = nbt.getCompoundTag("stack"); - this.syncStack = ItemStack.loadItemStackFromNBT(stack); - } else { - this.syncStack = null; - } - + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(this.power); + buf.writeDouble(this.syncPress); + BufferUtil.writeItemStack(buf, syncStack); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.power = buf.readLong(); + this.syncPress = buf.readDouble(); + this.syncStack = BufferUtil.readItemStack(buf); + this.turnProgress = 2; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java index 4fd9621ee..66c1f0e51 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java @@ -21,11 +21,13 @@ import com.hbm.lib.ModDamageSource; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.ArmorUtil; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; 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.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -138,15 +140,8 @@ public class TileEntityCore extends TileEntityMachineBase implements IGUIProvide if(heat > 0) radiation(); - - NBTTagCompound data = new NBTTagCompound(); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - data.setInteger("field", field); - data.setInteger("heat", heat); - data.setInteger("color", color); - data.setBoolean("melt", meltdownTick); - networkPack(data, 250); + + networkPackNT(250); heat = 0; @@ -162,15 +157,28 @@ public class TileEntityCore extends TileEntityMachineBase implements IGUIProvide } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); - field = data.getInteger("field"); - heat = data.getInteger("heat"); - color = data.getInteger("color"); - meltdownTick = data.getBoolean("melt"); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + buf.writeInt(field); + buf.writeInt(heat); + buf.writeInt(color); + buf.writeBoolean(meltdownTick); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + this.field = buf.readInt(); + this.heat = buf.readInt(); + this.color = buf.readInt(); + this.meltdownTick = buf.readBoolean(); } private void radiation() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 507035d8d..f0d9d3080 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -18,6 +18,7 @@ import com.hbm.util.CompatEnergyControl; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -169,26 +170,32 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne this.markDirty(); - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("watts", watts); - data.setLong("prev", prev); - data.setInteger("beam", beam); - data.setBoolean("isOn", isOn); - tank.writeToNBT(data, "tank"); - this.networkPack(data, 250); + this.networkPackNT(250); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - power = data.getLong("power"); - watts = data.getInteger("watts"); - prev = data.getLong("prev"); - beam = data.getInteger("beam"); - isOn = data.getBoolean("isOn"); - tank.readFromNBT(data, "tank"); + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(power); + buf.writeInt(watts); + buf.writeLong(prev); + buf.writeInt(beam); + buf.writeBoolean(isOn); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.power = buf.readLong(); + this.watts = buf.readInt(); + this.prev = buf.readLong(); + this.beam = buf.readInt(); + this.isOn = buf.readBoolean(); + tank.deserialize(buf); } public long getPowerScaled(long i) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java index ee599910d..af15165d2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java @@ -12,6 +12,7 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -101,19 +102,26 @@ public class TileEntityCoreInjector extends TileEntityMachineBase implements IFl this.markDirty(); - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("beam", beam); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - this.networkPack(data, 250); + this.networkPackNT(250); } } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - beam = data.getInteger("beam"); - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeInt(beam); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.beam = buf.readInt(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java index 16f9fe511..077c94b8a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java @@ -16,6 +16,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -69,19 +70,26 @@ public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEn } } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("joules", joules); - tank.writeToNBT(data, "t"); - this.networkPack(data, 50); + this.networkPackNT(50); joules = 0; } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - joules = data.getLong("joules"); - tank.readFromNBT(data, "t"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(joules); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + joules = buf.readLong(); + tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java index bb7e05bbb..bb80dea66 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java @@ -14,6 +14,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -93,11 +94,7 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I } } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("watts", watts); - data.setInteger("beam", beam); - this.networkPack(data, 250); + this.networkPackNT(250); } } @@ -106,13 +103,23 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - power = data.getLong("power"); - watts = data.getInteger("watts"); - beam = data.getInteger("beam"); + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(power); + buf.writeInt(watts); + buf.writeInt(beam); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.power = buf.readLong(); + this.watts = buf.readInt(); + this.beam = buf.readInt(); } public long getPowerScaled(long i) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java index afc3b4d8e..f31e1060c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java @@ -22,6 +22,7 @@ import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.tileentity.TileEntityProxyBase; +import com.hbm.util.BufferUtil; import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -31,6 +32,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; @@ -221,23 +223,44 @@ public class TileEntityCustomMachine extends TileEntityMachinePolluting implemen } else { this.progress = 0; } - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", this.machineType); - data.setLong("power", power); - data.setBoolean("structureOK", structureOK); - data.setInteger("flux", flux); - data.setInteger("heat", heat); - data.setInteger("progress", progress); - data.setInteger("maxProgress", maxProgress); - for (int i = 0; i < inputTanks.length; i++) inputTanks[i].writeToNBT(data, "i" + i); - for (int i = 0; i < outputTanks.length; i++) outputTanks[i].writeToNBT(data, "o" + i); - this.matcher.writeToNBT(data); - this.networkPack(data, 50); + this.networkPackNT(50); } } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(power); + buf.writeInt(progress); + buf.writeInt(flux); + buf.writeInt(heat); + buf.writeBoolean(structureOK); + buf.writeInt(maxProgress); + for (FluidTank inputTank : inputTanks) inputTank.serialize(buf); + for (FluidTank outputTank : outputTanks) outputTank.serialize(buf); + this.matcher.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.machineType = BufferUtil.readString(buf); + if(this.config == null) this.init(); + + this.power = buf.readLong(); + this.progress = buf.readInt(); + this.flux = buf.readInt(); + this.heat = buf.readInt(); + this.structureOK = buf.readBoolean(); + this.maxProgress = buf.readInt(); + for (FluidTank inputTank : inputTanks) inputTank.deserialize(buf); + for (FluidTank outputTank : outputTanks) outputTank.deserialize(buf); + this.matcher.deserialize(buf); + } + /** Only accepts inputs in a fixed order, saves a ton of performance because there's no permutations to check for */ public CustomMachineRecipe getMatchingRecipe() { List recipes = CustomMachineRecipes.recipes.get(this.config.recipeKey); @@ -459,25 +482,6 @@ public class TileEntityCustomMachine extends TileEntityMachinePolluting implemen return matcher.isValidForFilter(slots[filterSlot], index, stack); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.machineType = nbt.getString("type"); - if(this.config == null) this.init(); - - this.power = nbt.getLong("power"); - this.progress = nbt.getInteger("progress"); - this.flux = nbt.getInteger("flux"); - this.heat = nbt.getInteger("heat"); - this.structureOK = nbt.getBoolean("structureOK"); - this.maxProgress = nbt.getInteger("maxProgress"); - for(int i = 0; i < inputTanks.length; i++) inputTanks[i].readFromNBT(nbt, "i" + i); - for(int i = 0; i < outputTanks.length; i++) outputTanks[i].readFromNBT(nbt, "o" + i); - - this.matcher.readFromNBT(nbt); - } - @Override public void readFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java index 7d836a45f..7308e13e7 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java @@ -18,6 +18,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; @@ -110,19 +111,18 @@ public class TileEntityMachinePumpjack extends TileEntityOilDrillBase { } } } - - @Override - public void networkPack(NBTTagCompound nbt, int range) { - nbt.setFloat("speed", this.indicator == 0 ? (5F + (2F * this.speedLevel)) + (this.overLevel - 1F) * 10: 0F); - super.networkPack(nbt, range); - } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.speed = nbt.getFloat("speed"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeFloat(this.indicator == 0 ? (5F + (2F * this.speedLevel)) + (this.overLevel - 1F) * 10: 0F); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.speed = buf.readFloat(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index a8b2e4555..e0b84079a 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -23,6 +23,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -90,83 +91,87 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple @Override public void updateEntity() { - - if(!worldObj.isRemote) { - + + if (!worldObj.isRemote) { + this.updateConnections(); - + this.tanks[0].unloadTank(1, 2, slots); this.tanks[1].unloadTank(3, 4, slots); - + UpgradeManager.eval(slots, 5, 7); this.speedLevel = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); this.energyLevel = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); this.overLevel = Math.min(UpgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) + 1; int abLevel = Math.min(UpgradeManager.getLevel(UpgradeType.AFTERBURN), 3); - + int toBurn = Math.min(tanks[1].getFill(), abLevel * 10); - - if(toBurn > 0) { + + if (toBurn > 0) { tanks[1].setFill(tanks[1].getFill() - toBurn); this.power += toBurn * 5; - - if(this.power > this.getMaxPower()) + + if (this.power > this.getMaxPower()) this.power = this.getMaxPower(); } - + power = Library.chargeTEFromItems(slots, 0, power, this.getMaxPower()); - for(DirPos pos : getConPos()) { - if(tanks[0].getFill() > 0) this.sendFluid(tanks[0], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - if(tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + for (DirPos pos : getConPos()) { + if (tanks[0].getFill() > 0) + this.sendFluid(tanks[0], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if (tanks[1].getFill() > 0) + this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } - - if(this.power >= this.getPowerReqEff() && this.tanks[0].getFill() < this.tanks[0].getMaxFill() && this.tanks[1].getFill() < this.tanks[1].getMaxFill()) { - + + if (this.power >= this.getPowerReqEff() && this.tanks[0].getFill() < this.tanks[0].getMaxFill() && this.tanks[1].getFill() < this.tanks[1].getMaxFill()) { + this.power -= this.getPowerReqEff(); - - if(worldObj.getTotalWorldTime() % getDelayEff() == 0) { + + if (worldObj.getTotalWorldTime() % getDelayEff() == 0) { this.indicator = 0; - - for(int y = yCoord - 1; y >= getDrillDepth(); y--) { - - if(worldObj.getBlock(xCoord, y, zCoord) != ModBlocks.oil_pipe) { - - if(trySuck(y)) { + + for (int y = yCoord - 1; y >= getDrillDepth(); y--) { + + if (worldObj.getBlock(xCoord, y, zCoord) != ModBlocks.oil_pipe) { + + if (trySuck(y)) { break; } else { tryDrill(y); break; } } - - if(y == getDrillDepth()) + + if (y == getDrillDepth()) this.indicator = 1; } } - + } else { this.indicator = 2; } - - this.sendUpdate(); + + this.networkPackNT(25); } } - - public void sendUpdate() { - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("indicator", this.indicator); - for(int i = 0; i < tanks.length; i++) tanks[i].writeToNBT(data, "t" + i); - this.networkPack(data, 25); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeLong(this.power); + buf.writeInt(this.indicator); + for (FluidTank tank : tanks) tank.serialize(buf); } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.indicator = nbt.getInteger("indicator"); - for(int i = 0; i < tanks.length; i++) tanks[i].readFromNBT(nbt, "t" + i); + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + this.power = buf.readLong(); + this.indicator = buf.readInt(); + for (FluidTank tank : tanks) tank.deserialize(buf); } public boolean canPump() { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 2d3b5b616..1dd976ed4 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -118,9 +118,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements this.worldObj.theProfiler.endStartSection("rbmkBase_rpassive_cooling"); coolPassively(); this.worldObj.theProfiler.endSection(); - - NBTTagCompound data = new NBTTagCompound(); - this.writeToNBT(data); + this.networkPackNT(trackingRange()); } } diff --git a/src/main/java/com/hbm/util/BufferUtil.java b/src/main/java/com/hbm/util/BufferUtil.java index 3f50e7e54..8a8c7c8ad 100644 --- a/src/main/java/com/hbm/util/BufferUtil.java +++ b/src/main/java/com/hbm/util/BufferUtil.java @@ -1,15 +1,22 @@ package com.hbm.util; +import java.io.IOException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.nbt.NBTTagCompound; public class BufferUtil { - private static final Charset CHARSET = Charset.forName("UTF-8"); + private static final Charset CHARSET = StandardCharsets.UTF_8; // Writes a string to a byte buffer by encoding the length and raw bytes - public static final void writeString(ByteBuf buf, String value) { + public static void writeString(ByteBuf buf, String value) { if(value == null) { buf.writeInt(-1); return; @@ -20,7 +27,7 @@ public class BufferUtil { } // Reads a string from a byte buffer via the written length and raw bytes - public static final String readString(ByteBuf buf) { + public static String readString(ByteBuf buf) { final int count = buf.readInt(); if(count < 0) return null; @@ -30,4 +37,58 @@ public class BufferUtil { return new String(bytes, CHARSET); } -} + /** + * Writes the ItemStack to the buffer. + */ + public static void writeItemStack(ByteBuf buf, ItemStack item) { + if (item == null) + buf.writeShort(-1); + else { + buf.writeShort(Item.getIdFromItem(item.getItem())); + buf.writeByte(item.stackSize); + buf.writeShort(item.getItemDamage()); + NBTTagCompound nbtTagCompound = null; + + if (item.getItem().isDamageable() || item.getItem().getShareTag()) + nbtTagCompound = item.stackTagCompound; + + if(nbtTagCompound != null) { + byte[] nbtData = new byte[0]; + try { + nbtData = CompressedStreamTools.compress(nbtTagCompound); + } catch(IOException e) { + e.printStackTrace(); + } + buf.writeShort((short) nbtData.length); + buf.writeBytes(nbtData); + } else { + buf.writeShort(-1); + } + } + } + + /** + * Reads an ItemStack from a buffer + */ + public static ItemStack readItemStack(ByteBuf buf) { + ItemStack item = null; + short id = buf.readShort(); + + if (id >= 0) { + byte quantity = buf.readByte(); + short meta = buf.readShort(); + item = new ItemStack(Item.getItemById(id), quantity, meta); + + short nbtLength = buf.readByte(); + + byte[] tags = new byte[nbtLength]; + buf.readBytes(tags); + try { + item.stackTagCompound = CompressedStreamTools.func_152457_a(tags, new NBTSizeTracker(2097152L)); + } catch(IOException e) { + e.printStackTrace(); + } + } + return item; + } +} \ No newline at end of file From 4b490d56a1ea366e31e884aae05334b6d32d70e5 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:37:37 -0500 Subject: [PATCH 14/17] holy shit what the fuck am i smoking --- .../hbm/tileentity/TileEntityMachineBase.java | 7 +- .../machine/TileEntityDeuteriumExtractor.java | 24 +++- .../machine/TileEntityDiFurnaceRTG.java | 35 +++--- .../machine/TileEntityElectrolyser.java | 74 +++++++----- .../machine/TileEntityFurnaceIron.java | 38 +++--- .../machine/TileEntityFurnaceSteel.java | 34 +++--- .../tileentity/machine/TileEntityHadron.java | 48 ++++++-- .../tileentity/machine/TileEntityITER.java | 65 +++++----- .../TileEntityMachineCombustionEngine.java | 35 +++--- .../machine/TileEntityMachineCompressor.java | 47 ++++---- .../machine/TileEntityMachineDiesel.java | 29 +++-- .../machine/TileEntityMachineEPress.java | 47 ++++---- .../TileEntityMachineLargeTurbine.java | 42 ++++--- .../machine/TileEntityMachineMiningLaser.java | 65 +++++----- .../TileEntityMachinePlasmaHeater.java | 34 +++--- .../machine/TileEntityMachinePress.java | 38 ++++-- .../machine/TileEntityMachineRadGen.java | 39 +++--- .../machine/TileEntityMachineRadiolysis.java | 41 ++++--- .../TileEntityMachineReactorBreeding.java | 27 +++-- ...eEntityMachineSchrabidiumTransmutator.java | 30 +++-- .../TileEntityMachineSolderingStation.java | 62 +++++----- .../machine/TileEntityMachineTurbineGas.java | 102 ++++++++-------- .../machine/TileEntityMachineTurbofan.java | 43 ++++--- .../machine/TileEntityMicrowave.java | 31 +++-- .../machine/TileEntityPWRController.java | 71 ++++++----- .../machine/TileEntityReactorControl.java | 55 +++++---- .../machine/TileEntityReactorResearch.java | 44 ++++--- .../machine/TileEntityReactorZirnox.java | 45 +++---- .../machine/TileEntitySoyuzLauncher.java | 45 +++---- .../tileentity/machine/TileEntityTesla.java | 44 +++---- .../tileentity/machine/TileEntityWatz.java | 41 ++++--- .../TileEntityMachineCatalyticReformer.java | 22 +++- .../machine/oil/TileEntityMachineCoker.java | 41 ++++--- .../oil/TileEntityMachineGasFlare.java | 34 +++--- .../oil/TileEntityMachineLiquefactor.java | 36 +++--- .../oil/TileEntityMachineRefinery.java | 39 +++--- .../oil/TileEntityMachineSolidifier.java | 36 +++--- .../oil/TileEntityMachineVacuumDistill.java | 31 +++-- .../machine/rbmk/TileEntityRBMKConsole.java | 113 +++++++++--------- .../network/TileEntityCraneBoxer.java | 23 ++-- .../network/TileEntityCraneGrabber.java | 29 +++-- .../network/TileEntityCraneRouter.java | 36 +++--- .../network/TileEntityRadioTorchCounter.java | 37 +++--- .../turret/TileEntityTurretArty.java | 25 ++-- .../turret/TileEntityTurretBaseNT.java | 61 ++++++---- .../turret/TileEntityTurretFritz.java | 16 +-- .../turret/TileEntityTurretHIMARS.java | 31 +++-- .../turret/TileEntityTurretMaxwell.java | 22 ++-- .../turret/TileEntityTurretRichard.java | 22 ++-- .../turret/TileEntityTurretSentry.java | 18 +-- .../turret/TileEntityTurretTauon.java | 22 ++-- src/main/java/com/hbm/util/BufferUtil.java | 90 ++++++++++---- 52 files changed, 1229 insertions(+), 937 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index d9a17469d..3440ea517 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -154,12 +154,7 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, val, id), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } @Deprecated public void processGauge(int val, int id) { } - - @Deprecated public void networkPack(NBTTagCompound nbt, int range) { - nbt.setBoolean("muffled", muffled); - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - + @Deprecated public void networkUnpack(NBTTagCompound nbt) { this.muffled = nbt.getBoolean("muffled"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index 12cc135b4..a1f55015b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -6,6 +6,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; @@ -44,13 +45,8 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen this.subscribeToAllAround(tanks[0].getTankType(), this); this.sendFluidToAll(tanks[1], this); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - tanks[0].writeToNBT(data, "water"); - tanks[1].writeToNBT(data, "heavyWater"); - this.networkPack(data, 50); + this.networkPackNT(50); } } @@ -68,6 +64,22 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen tanks[1].readFromNBT(data, "heavyWater"); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + } + public boolean hasPower() { return power >= this.getMaxPower() / 20; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index db4d16a27..3934be49c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -13,6 +13,7 @@ import com.hbm.util.RTGUtil; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -72,24 +73,28 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU MachineDiFurnaceRTG.updateBlockState(isProcessing() || (canProcess() && hasPower()), getWorldObj(), xCoord, yCoord, zCoord); - NBTTagCompound data = new NBTTagCompound(); - data.setShort("progress", progress); - data.setShort("speed", processSpeed); - data.setByteArray("modes", new byte[] {(byte) sideUpper, (byte) sideLower}); - networkPack(data, 10); + networkPackNT(10); } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - progress = nbt.getShort("progress"); - processSpeed = nbt.getShort("speed"); - byte[] modes = nbt.getByteArray("modes"); - this.sideUpper = modes[0]; - this.sideLower = modes[1]; + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeShort(progress); + buf.writeShort(processSpeed); + buf.writeBytes(new byte[] {sideUpper, sideLower}); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + progress = buf.readShort(); + processSpeed = buf.readShort(); + byte[] bytes = new byte[2]; + buf.readBytes(bytes); + this.sideUpper = bytes[0]; + this.sideLower = bytes[1]; + } + private void processItem() { if(canProcess()) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 18cf9f14a..8ab35d24b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -39,6 +39,7 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -208,24 +209,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn } } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - data.setInteger("progressFluid", this.progressFluid); - data.setInteger("progressOre", this.progressOre); - data.setInteger("usageOre", this.usageOre); - data.setInteger("usageFluid", this.usageFluid); - data.setInteger("processFluidTime", this.getDurationFluid()); - data.setInteger("processOreTime", this.getDurationMetal()); - if(this.leftStack != null) { - data.setInteger("leftType", leftStack.material.id); - data.setInteger("leftAmount", leftStack.amount); - } - if(this.rightStack != null) { - data.setInteger("rightType", rightStack.material.id); - data.setInteger("rightAmount", rightStack.amount); - } - for(int i = 0; i < 4; i++) tanks[i].writeToNBT(data, "t" + i); - this.networkPack(data, 50); + this.networkPackNT(50); } } @@ -244,21 +228,47 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeInt(this.progressFluid); + buf.writeInt(this.progressOre); + buf.writeInt(this.usageOre); + buf.writeInt(this.usageFluid); + buf.writeInt(this.getDurationFluid()); + buf.writeInt(this.getDurationMetal()); + for(int i = 0; i < 4; i++) tanks[i].serialize(buf); + buf.writeBoolean(this.leftStack != null); + buf.writeBoolean(this.rightStack != null); + if(this.leftStack != null) { + buf.writeInt(leftStack.material.id); + buf.writeInt(leftStack.amount); + } + if(this.rightStack != null) { + buf.writeInt(rightStack.material.id); + buf.writeInt(rightStack.amount); + } + } - this.power = nbt.getLong("power"); - this.progressFluid = nbt.getInteger("progressFluid"); - this.progressOre = nbt.getInteger("progressOre"); - this.usageOre = nbt.getInteger("usageOre"); - this.usageFluid = nbt.getInteger("usageFluid"); - this.processFluidTime = nbt.getInteger("processFluidTime"); - this.processOreTime = nbt.getInteger("processOreTime"); - if(nbt.hasKey("leftType")) this.leftStack = new MaterialStack(Mats.matById.get(nbt.getInteger("leftType")), nbt.getInteger("leftAmount")); - else this.leftStack = null; - if(nbt.hasKey("rightType")) this.rightStack = new MaterialStack(Mats.matById.get(nbt.getInteger("rightType")), nbt.getInteger("rightAmount")); - else this.rightStack = null; - for(int i = 0; i < 4; i++) tanks[i].readFromNBT(nbt, "t" + i); + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progressFluid = buf.readInt(); + this.progressOre = buf.readInt(); + this.usageOre = buf.readInt(); + this.usageFluid = buf.readInt(); + this.processFluidTime = buf.readInt(); + this.processOreTime = buf.readInt(); + for(int i = 0; i < 4; i++) tanks[i].deserialize(buf); + boolean left = buf.readBoolean(); + boolean right = buf.readBoolean(); + if(left) { + this.leftStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); + } + if(right) { + this.rightStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); + } } public boolean canProcessFluid() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index c85bb845d..42d67d723 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -17,6 +17,7 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -115,14 +116,8 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI } else { this.progress = 0; } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("maxBurnTime", this.maxBurnTime); - data.setInteger("burnTime", this.burnTime); - data.setInteger("progress", this.progress); - data.setInteger("processingTime", this.processingTime); - data.setBoolean("wasOn", this.wasOn); - this.networkPack(data, 50); + + this.networkPackNT(50); } else { if(this.progress > 0) { @@ -141,16 +136,25 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.maxBurnTime = nbt.getInteger("maxBurnTime"); - this.burnTime = nbt.getInteger("burnTime"); - this.progress = nbt.getInteger("progress"); - this.processingTime = nbt.getInteger("processingTime"); - this.wasOn = nbt.getBoolean("wasOn"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.maxBurnTime); + buf.writeInt(this.burnTime); + buf.writeInt(this.progress); + buf.writeInt(this.processingTime); + buf.writeBoolean(this.wasOn); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.maxBurnTime = buf.readInt(); + this.burnTime = buf.readInt(); + this.progress = buf.readInt(); + this.processingTime = buf.readInt(); + this.wasOn = buf.readBoolean(); + } + public boolean canSmelt() { if(this.burnTime <= 0) return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java index 4d6d7cbab..c67275db0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java @@ -8,11 +8,13 @@ import com.hbm.inventory.container.ContainerFurnaceSteel; import com.hbm.inventory.gui.GUIFurnaceSteel; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.ItemStackUtil; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -96,13 +98,9 @@ public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGU } } - - NBTTagCompound data = new NBTTagCompound(); - data.setIntArray("progress", progress); - data.setIntArray("bonus", bonus); - data.setInteger("heat", heat); - data.setBoolean("wasOn", wasOn); - this.networkPack(data, 50); + + this.networkPackNT(50); + } else { if(this.wasOn) { @@ -122,13 +120,21 @@ public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGU } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.progress = nbt.getIntArray("progress"); - this.bonus = nbt.getIntArray("bonus"); - this.heat = nbt.getInteger("heat"); - this.wasOn = nbt.getBoolean("wasOn"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + BufferUtil.writeIntArray(buf, this.progress); + BufferUtil.writeIntArray(buf, this.bonus); + buf.writeInt(this.heat); + buf.writeBoolean(this.wasOn); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.progress = BufferUtil.readIntArray(buf); + this.bonus = BufferUtil.readIntArray(buf); + this.heat = buf.readInt(); + this.wasOn = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 167f550c8..d091830b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -25,6 +25,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.gui.GuiScreen; @@ -170,7 +171,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe data.setInteger("stat_x", stat_x); data.setInteger("stat_y", stat_y); data.setInteger("stat_z", stat_z); - this.networkPack(data, 50); + this.networkPackNT(50); } } @@ -212,22 +213,45 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe this.setStats(this.state, p.momentum, true); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.isOn); + buf.writeLong(this.power); + buf.writeBoolean(this.analysisOnly); + buf.writeInt(this.ioMode); + buf.writeByte((byte) this.state.ordinal()); + + buf.writeBoolean(this.stat_success); + buf.writeByte((byte) this.stat_state.ordinal()); + buf.writeInt(this.stat_charge); + buf.writeInt(this.stat_x); + buf.writeInt(this.stat_y); + buf.writeInt(this.stat_z); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.isOn = buf.readBoolean(); + this.power = buf.readLong(); + this.analysisOnly = buf.readBoolean(); + this.ioMode = buf.readInt(); + this.state = EnumHadronState.values()[buf.readByte()]; + + this.stat_success = buf.readBoolean(); + this.stat_state = EnumHadronState.values()[buf.readByte()]; + this.stat_charge = buf.readInt(); + this.stat_x = buf.readInt(); + this.stat_y = buf.readInt(); + this.stat_z = buf.readInt(); + } + @Override public void networkUnpack(NBTTagCompound data) { super.networkUnpack(data); - this.isOn = data.getBoolean("isOn"); - this.power = data.getLong("power"); - this.analysisOnly = data.getBoolean("analysis"); - this.ioMode = data.getInteger("ioMode"); - this.state = EnumHadronState.values()[data.getByte("state")]; - this.stat_success = data.getBoolean("stat_success"); - this.stat_state = EnumHadronState.values()[data.getByte("stat_state")]; - this.stat_charge = data.getInteger("stat_charge"); - this.stat_x = data.getInteger("stat_x"); - this.stat_y = data.getInteger("stat_y"); - this.stat_z = data.getInteger("stat_z"); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 9b0a0ed60..39f8678ec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -26,6 +26,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import com.hbm.util.fauxpointtwelve.DirPos; @@ -36,6 +37,7 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -158,27 +160,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } } - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("isOn", isOn); - data.setLong("power", power); - data.setInteger("progress", progress); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - plasma.writeToNBT(data, "t2"); - - if(slots[3] == null) { - data.setInteger("blanket", 0); - } else if(slots[3].getItem() == ModItems.fusion_shield_tungsten) { - data.setInteger("blanket", 1); - } else if(slots[3].getItem() == ModItems.fusion_shield_desh) { - data.setInteger("blanket", 2); - } else if(slots[3].getItem() == ModItems.fusion_shield_chlorophyte) { - data.setInteger("blanket", 3); - } else if(slots[3].getItem() == ModItems.fusion_shield_vaporwave) { - data.setInteger("blanket", 4); - } - - this.networkPack(data, 250); + this.networkPackNT(250); /// END Notif packets /// } else { @@ -378,16 +360,37 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } @Override - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.isOn = data.getBoolean("isOn"); - this.power = data.getLong("power"); - this.blanket = data.getInteger("blanket"); - this.progress = data.getInteger("progress"); // - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); - plasma.readFromNBT(data, "t2"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.isOn); + buf.writeLong(this.power); + buf.writeInt(this.progress); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + plasma.serialize(buf); + if(slots[3] == null) { + buf.writeInt(0); + } else if(slots[3].getItem() == ModItems.fusion_shield_tungsten) { + buf.writeInt(1); + } else if(slots[3].getItem() == ModItems.fusion_shield_desh) { + buf.writeInt(2); + } else if(slots[3].getItem() == ModItems.fusion_shield_chlorophyte) { + buf.writeInt(3); + } else if(slots[3].getItem() == ModItems.fusion_shield_vaporwave) { + buf.writeInt(4); + } + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.isOn = buf.readBoolean(); + this.power = buf.readLong(); + this.progress = buf.readInt(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + plasma.deserialize(buf); + this.blanket = buf.readInt(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index 78292b220..da52bb30f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -23,6 +23,7 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -111,13 +112,8 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin if(power > maxPower) power = maxPower; - - data.setInteger("playersUsing", playersUsing); - data.setInteger("setting", setting); - data.setBoolean("isOn", isOn); - data.setBoolean("wasOn", wasOn); - tank.writeToNBT(data, "tank"); - this.networkPack(data, 50); + + this.networkPackNT(50); } else { this.prevDoorAngle = this.doorAngle; @@ -200,14 +196,23 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.playersUsing = nbt.getInteger("playersUsing"); - this.setting = nbt.getInteger("setting"); - this.power = nbt.getLong("power"); - this.isOn = nbt.getBoolean("isOn"); - this.wasOn = nbt.getBoolean("wasOn"); - this.tank.readFromNBT(nbt, "tank"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.playersUsing); + buf.writeInt(this.setting); + buf.writeBoolean(this.isOn); + buf.writeBoolean(this.wasOn); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.playersUsing = buf.readInt(); + this.setting = buf.readInt(); + this.isOn = buf.readBoolean(); + this.wasOn = buf.readBoolean(); + tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index c3e94a705..a62846ea1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -27,6 +27,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -119,16 +120,8 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement for(DirPos pos : getConPos()) { this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("progress", progress); - data.setInteger("processTime", processTime); - data.setInteger("powerRequirement", powerRequirement); - data.setLong("power", power); - tanks[0].writeToNBT(data, "0"); - tanks[1].writeToNBT(data, "1"); - data.setBoolean("isOn", isOn); - this.networkPack(data, 100); + + this.networkPackNT(100); } else { @@ -163,17 +156,29 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement } private float randSpeed = 0.1F; - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.progress = nbt.getInteger("progress"); - this.processTime = nbt.getInteger("processTime"); - this.powerRequirement = nbt.getInteger("powerRequirement"); - this.power = nbt.getLong("power"); - tanks[0].readFromNBT(nbt, "0"); - tanks[1].readFromNBT(nbt, "1"); - this.isOn = nbt.getBoolean("isOn"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.progress); + buf.writeInt(this.processTime); + buf.writeInt(this.powerRequirement); + buf.writeLong(this.power); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + buf.writeBoolean(this.isOn); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.progress = buf.readInt(); + this.processTime = buf.readInt(); + this.powerRequirement = buf.readInt(); + this.power = buf.readLong(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + this.isOn = buf.readBoolean(); } private void updateConnections() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index d36cb4336..3b0ea20a6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -28,6 +28,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -151,22 +152,26 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen generate(); - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("power", (int) power); - data.setInteger("powerCap", (int) powerCap); - tank.writeToNBT(data, "t"); - this.networkPack(data, 50); + this.networkPackNT(50); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - power = data.getInteger("power"); - powerCap = data.getInteger("powerCap"); - tank.readFromNBT(data, "t"); + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt((int) power); + buf.writeInt((int) powerCap); + tank.serialize(buf); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readInt(); + this.powerCap = buf.readInt(); + tank.deserialize(buf); + } + public boolean hasAcceptableFuel() { return getHEFromFuel() > 0; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 081aab10a..6ed33d35c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -13,6 +13,7 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import com.hbm.util.I18nUtil; @@ -20,6 +21,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -117,16 +119,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE } } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("press", press); - if(slots[2] != null) { - NBTTagCompound stack = new NBTTagCompound(); - slots[2].writeToNBT(stack); - data.setTag("stack", stack); - } - - this.networkPack(data, 50); + this.networkPackNT(50); } else { @@ -141,21 +134,27 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE } } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.syncPress = nbt.getInteger("press"); - - if(nbt.hasKey("stack")) { - NBTTagCompound stack = nbt.getCompoundTag("stack"); - this.syncStack = ItemStack.loadItemStackFromNBT(stack); - } else { - this.syncStack = null; - } - + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeInt(press); + if (slots[2] == null) + buf.writeShort(-1); // indicate that the NBT doesn't actually exist to avoid null pointer errors. + else + BufferUtil.writeNBT(buf, slots[2].stackTagCompound); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.syncPress = buf.readInt(); + + NBTTagCompound stack = BufferUtil.readNBT(buf); + this.syncStack = ItemStack.loadItemStackFromNBT(stack); + this.turnProgress = 2; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index ba32528da..ce494df35 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -29,6 +29,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -102,6 +103,8 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme return "container.machineLargeTurbine"; } + private boolean operational; + @Override public void updateEntity() { @@ -117,9 +120,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme tanks[0].setType(0, 1, slots); tanks[0].loadTank(2, 3, slots); power = Library.chargeItemsFromTE(slots, 4, power, maxPower); - - boolean operational = false; - + FluidType in = tanks[0].getTankType(); boolean valid = false; if(in.hasTrait(FT_Coolable.class)) { @@ -145,13 +146,9 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme if(power > maxPower) power = maxPower; tanks[1].unloadTank(5, 6, slots); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setBoolean("operational", operational); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - this.networkPack(data, 50); + + this.networkPackNT(50); + } else { this.lastRotor = this.rotor; this.rotor += this.fanAcceleration; @@ -199,14 +196,23 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme new DirPos(xCoord + dir.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2, dir) }; } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.power = data.getLong("power"); - this.shouldTurn = data.getBoolean("operational"); - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeBoolean(operational); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.shouldTurn = buf.readBoolean(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); } public long getPowerScaled(int i) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index e5ad38a1b..2747502cb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -31,6 +31,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; @@ -83,6 +84,8 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen return "container.miningLaser"; } + private double clientBreakProgress; + @Override public void updateEntity() { @@ -108,8 +111,6 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen lastTargetY = targetY; lastTargetZ = targetZ; - double clientBreakProgress = 0; - if(isOn) { UpgradeManager.eval(slots, 1, 8); @@ -167,43 +168,45 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen this.tryFillContainer(xCoord, yCoord, zCoord + 2); this.tryFillContainer(xCoord, yCoord, zCoord - 2); - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("lastX", lastTargetX); - data.setInteger("lastY", lastTargetY); - data.setInteger("lastZ", lastTargetZ); - data.setInteger("x", targetX); - data.setInteger("y", targetY); - data.setInteger("z", targetZ); - data.setBoolean("beam", beam); - data.setBoolean("isOn", isOn); - data.setDouble("progress", clientBreakProgress); - tank.writeToNBT(data, "t"); - - this.networkPack(data, 250); + this.networkPackNT(250); } } private void updateConnections() { this.trySubscribe(worldObj, xCoord, yCoord + 2, zCoord, ForgeDirection.UP); } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - this.power = data.getLong("power"); - this.lastTargetX = data.getInteger("lastX"); - this.lastTargetY = data.getInteger("lastY"); - this.lastTargetZ = data.getInteger("lastZ"); - this.targetX = data.getInteger("x"); - this.targetY = data.getInteger("y"); - this.targetZ = data.getInteger("z"); - this.beam = data.getBoolean("beam"); - this.isOn = data.getBoolean("isOn"); - this.breakProgress = data.getDouble("progress"); - tank.readFromNBT(data, "t"); + @Override + public void serialize(ByteBuf buf) { + buf.writeLong(this.power); + buf.writeInt(this.lastTargetX); + buf.writeInt(this.lastTargetY); + buf.writeInt(this.lastTargetZ); + buf.writeInt(this.targetX); + buf.writeInt(this.targetY); + buf.writeInt(this.targetZ); + buf.writeBoolean(this.beam); + buf.writeBoolean(this.isOn); + buf.writeDouble(this.clientBreakProgress); + tank.serialize(buf); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.lastTargetX = buf.readInt(); + this.lastTargetY = buf.readInt(); + this.lastTargetZ = buf.readInt(); + this.targetX = buf.readInt(); + this.targetY = buf.readInt(); + this.targetZ = buf.readInt(); + this.beam = buf.readBoolean(); + this.isOn = buf.readBoolean(); + this.breakProgress = buf.readDouble(); + tank.deserialize(buf); + } + private void buildDam() { if(worldObj.getBlock(targetX + 1, targetY, targetZ).getMaterial().isLiquid()) worldObj.setBlock(targetX + 1, targetY, targetZ, ModBlocks.barricade); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java index 8224d6f41..0d8621759 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java @@ -19,6 +19,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -122,13 +123,7 @@ public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase impleme /// END Loading plasma into the ITER /// /// START Notif packets /// - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - plasma.writeToNBT(data, "t2"); - this.networkPack(data, 50); + this.networkPackNT(50); /// END Notif packets /// } } @@ -148,14 +143,23 @@ public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase impleme } } } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - tanks[0].readFromNBT(nbt, "t0"); - tanks[1].readFromNBT(nbt, "t1"); - plasma.readFromNBT(nbt, "t2"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + plasma.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + plasma.deserialize(buf); } private void updateType() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index 58a31e5bd..655ce48be 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -8,8 +8,10 @@ import com.hbm.items.machine.ItemStamp; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -133,17 +135,7 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU this.markChanged(); } - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("speed", speed); - data.setInteger("burnTime", burnTime); - data.setInteger("press", press); - if(slots[2] != null) { - NBTTagCompound stack = new NBTTagCompound(); - slots[2].writeToNBT(stack); - data.setTag("stack", stack); - } - - this.networkPack(data, 50); + this.networkPackNT(50); } else { @@ -158,6 +150,30 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU } } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.speed); + buf.writeInt(this.burnTime); + buf.writeInt(this.press); + if (slots[2] == null) + buf.writeShort(-1); // indicate that the NBT doesn't actually exist to avoid null pointer errors. + else + BufferUtil.writeNBT(buf, slots[2].stackTagCompound); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.speed = buf.readInt(); + this.burnTime = buf.readInt(); + this.press = buf.readInt(); + NBTTagCompound stack = BufferUtil.readNBT(buf); + this.syncStack = ItemStack.loadItemStackFromNBT(stack); + + this.turnProgress = 2; + } @Override public void networkUnpack(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java index 825937515..a4d1bcbec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java @@ -11,6 +11,7 @@ import com.hbm.items.special.ItemWasteLong; import com.hbm.items.special.ItemWasteShort; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import com.hbm.util.Tuple.Triplet; @@ -18,6 +19,7 @@ import api.hbm.energymk2.IEnergyProviderMK2; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; @@ -111,26 +113,29 @@ public class TileEntityMachineRadGen extends TileEntityMachineBase implements IE if(this.power > maxPower) this.power = maxPower; - - NBTTagCompound data = new NBTTagCompound(); - data.setIntArray("progress", this.progress); - data.setIntArray("maxProgress", this.maxProgress); - data.setIntArray("production", this.production); - data.setLong("power", this.power); - data.setBoolean("isOn", this.isOn); - this.networkPack(data, 50); + + this.networkPackNT(50); } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.progress = nbt.getIntArray("progress"); - this.maxProgress = nbt.getIntArray("maxProgress"); - this.production = nbt.getIntArray("production"); - this.power = nbt.getLong("power"); - this.isOn = nbt.getBoolean("isOn"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + BufferUtil.writeIntArray(buf, this.progress); + BufferUtil.writeIntArray(buf, this.maxProgress); + BufferUtil.writeIntArray(buf, this.production); + buf.writeLong(this.power); + buf.writeBoolean(this.isOn); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.progress = BufferUtil.readIntArray(buf); + this.maxProgress = BufferUtil.readIntArray(buf); + this.production = BufferUtil.readIntArray(buf); + this.power = buf.readLong(); + this.isOn = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index c468441a0..107d37ba1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -23,6 +23,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -98,16 +99,6 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement tanks[2].writeToNBT(nbt, "output2"); } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.power = data.getLong("power"); - this.heat = data.getInteger("heat"); - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); - tanks[2].readFromNBT(data, "t2"); - } - @Override public void updateEntity() { @@ -139,16 +130,30 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement if(tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(),pos.getZ(), pos.getDir()); if(tanks[2].getFill() > 0) this.sendFluid(tanks[2], worldObj, pos.getX(), pos.getY(),pos.getZ(), pos.getDir()); } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("heat", heat); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - tanks[2].writeToNBT(data, "t2"); - this.networkPack(data, 50); + + this.networkPackNT(50); } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeInt(this.heat); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + tanks[2].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.heat = buf.readInt(); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + tanks[2].serialize(buf); + } protected DirPos[] getConPos() { return new DirPos[] { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java index ceb1bef2c..b0f71f6c1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java @@ -15,6 +15,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -66,19 +67,23 @@ public class TileEntityMachineReactorBreeding extends TileEntityMachineBase impl } else { progress = 0.0F; } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("flux", flux); - data.setFloat("progress", progress); - this.networkPack(data, 20); + + this.networkPackNT(20); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - flux = data.getInteger("flux"); - progress = data.getFloat("progress"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(flux); + buf.writeFloat(progress); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.flux = buf.readInt(); + this.progress = buf.readFloat(); } public void getInteractions() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java index 7f9241d46..7e7784c6d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java @@ -16,6 +16,7 @@ import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -167,11 +168,8 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB } else { process = 0; } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("progress", process); - this.networkPack(data, 50); + + this.networkPackNT(50); } else { @@ -193,6 +191,20 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB } } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeInt(this.process); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.process = buf.readInt(); + } @Override public AudioWrapper createAudioLoop() { @@ -224,14 +236,6 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB audio = null; } } - - @Override - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.power = data.getLong("power"); - this.process = data.getInteger("progress"); - } @Override public void setPower(long i) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 3ccf6ef70..0b2fb6dc7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -27,6 +27,7 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -69,6 +70,8 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp } } + private SolderingRecipe recipe; + @Override public void updateEntity() { @@ -84,7 +87,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp } } - SolderingRecipe recipe = SolderingRecipes.getRecipe(new ItemStack[] {slots[0], slots[1], slots[2], slots[3], slots[4], slots[5]}); + recipe = SolderingRecipes.getRecipe(new ItemStack[] {slots[0], slots[1], slots[2], slots[3], slots[4], slots[5]}); long intendedMaxPower; UpgradeManager.eval(slots, 9, 10); @@ -133,19 +136,8 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp } this.maxPower = Math.max(intendedMaxPower, power); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setLong("maxPower", maxPower); - data.setLong("consumption", consumption); - data.setInteger("progress", progress); - data.setInteger("processTime", processTime); - if(recipe != null) { - data.setInteger("display", Item.getIdFromItem(recipe.output.getItem())); - data.setInteger("displayMeta", recipe.output.getItemDamage()); - } - this.tank.writeToNBT(data, "t"); - this.networkPack(data, 25); + + this.networkPackNT(25); } } @@ -240,22 +232,38 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.maxPower = nbt.getLong("maxPower"); - this.consumption = nbt.getLong("consumption"); - this.progress = nbt.getInteger("progress"); - this.processTime = nbt.getInteger("processTime"); - - if(nbt.hasKey("display")) { - this.display = new ItemStack(Item.getItemById(nbt.getInteger("display")), 1, nbt.getInteger("displayMeta")); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeLong(this.maxPower); + buf.writeLong(this.consumption); + buf.writeInt(this.progress); + buf.writeInt(this.processTime); + buf.writeBoolean(recipe != null); + if(recipe != null) { + buf.writeInt(Item.getIdFromItem(recipe.output.getItem())); + buf.writeInt(recipe.output.getItemDamage()); + } + this.tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.consumption = buf.readLong(); + this.progress = buf.readInt(); + this.processTime = buf.readInt(); + + if(buf.readBoolean()) { + int id = buf.readInt(); + this.display = new ItemStack(Item.getItemById(id), 1, buf.readInt()); } else { this.display = null; } - - this.tank.readFromNBT(nbt, "t"); + + this.tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index f7e3349f5..7c19022ab 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -28,6 +28,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -85,7 +86,9 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement tanks[2] = new FluidTank(Fluids.WATER, 16000); tanks[3] = new FluidTank(Fluids.HOTSTEAM, 160000); } - + + private long powerBeforeNet; + @Override public void updateEntity() { @@ -131,10 +134,9 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", Math.min(this.power, this.maxPower)); //set first to get an unmodified view of how much power was generated before deductions from the net - + + powerBeforeNet = Math.min(this.power, maxPower); + //do net/battery deductions first... power = Library.chargeItemsFromTE(slots, 0, power, maxPower); this.tryProvide(worldObj, xCoord - dir.offsetZ * 5, yCoord + 1, zCoord + dir.offsetX * 5, rot); //sends out power @@ -152,26 +154,8 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement this.trySubscribe(tanks[2].getTankType(), worldObj, xCoord + dir.offsetX * 2 + rot.offsetX * -4, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * -4, dir); //steam this.sendFluid(tanks[3], worldObj, xCoord + dir.offsetZ * 6, yCoord + 1, zCoord - dir.offsetX * 6, rot.getOpposite()); - - data.setInteger("rpm", this.rpm); - data.setInteger("temp", this.temp); - data.setInteger("state", this.state); - data.setBoolean("automode", this.autoMode); - data.setInteger("throttle", this.throttle); - data.setInteger("slidpos", this.powerSliderPos); - - if(state != 1) { - data.setInteger("counter", this.counter); //sent during startup and shutdown - } else { - data.setInteger("instantPow", this.instantPowerOutput); //sent while running - } - - tanks[0].writeToNBT(data, "fuel"); - tanks[1].writeToNBT(data, "lube"); - tanks[2].writeToNBT(data, "water"); - tanks[3].writeToNBT(data, "steam"); - this.networkPack(data, 150); + this.networkPackNT(150); } else { //client side, for sounds n shit @@ -200,6 +184,51 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.powerBeforeNet); + buf.writeInt(this.rpm); + buf.writeInt(this.temp); + buf.writeInt(this.state); + buf.writeBoolean(this.autoMode); + buf.writeInt(this.throttle); + buf.writeInt(this.powerSliderPos); + + if(state != 1) { + buf.writeInt(this.counter); //sent during startup and shutdown + } else { + buf.writeInt(this.instantPowerOutput); //sent while running + } + + tanks[0].serialize(buf); + tanks[1].serialize(buf); + tanks[2].serialize(buf); + tanks[3].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.rpm = buf.readInt(); + this.temp = buf.readInt(); + this.state = buf.readInt(); + this.autoMode = buf.readBoolean(); + this.powerSliderPos = buf.readInt(); + this.throttle = buf.readInt(); + + if(state != 1) + this.counter = buf.readInt(); + else + this.instantPowerOutput = buf.readInt(); //state 1 + + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.tanks[2].deserialize(buf); + this.tanks[3].deserialize(buf); + } private void stopIfNotReady() { @@ -378,30 +407,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.rpm = nbt.getInteger("rpm"); - this.temp = nbt.getInteger("temp"); - this.state = nbt.getInteger("state"); - this.autoMode = nbt.getBoolean("automode"); - this.powerSliderPos = nbt.getInteger("slidpos"); - this.throttle = nbt.getInteger("throttle"); - - if(nbt.hasKey("counter")) - this.counter = nbt.getInteger("counter"); //state 0 and -1 - else - this.instantPowerOutput = nbt.getInteger("instantPow"); //state 1 - - this.tanks[0].readFromNBT(nbt, "fuel"); - this.tanks[1].readFromNBT(nbt, "lube"); - this.tanks[2].readFromNBT(nbt, "water"); - this.tanks[3].readFromNBT(nbt, "steam"); - } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index d0e1306bc..b6cc7780d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -34,6 +34,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -284,15 +285,8 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem if(this.power > this.maxPower) { this.power = this.maxPower; } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setByte("after", (byte) afterburner); - data.setBoolean("wasOn", wasOn); - data.setBoolean("showBlood", showBlood); - tank.writeToNBT(data, "tank"); - blood.writeToNBT(data, "blood"); - this.networkPack(data, 150); + + this.networkPackNT(150); } else { @@ -385,16 +379,27 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem } } } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.afterburner = nbt.getByte("after"); - this.wasOn = nbt.getBoolean("wasOn"); - this.showBlood = nbt.getBoolean("showBlood"); - tank.readFromNBT(nbt, "tank"); - blood.readFromNBT(nbt, "blood"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeByte((byte) afterburner); + buf.writeBoolean(wasOn); + buf.writeBoolean(showBlood); + tank.serialize(buf); + blood.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.afterburner = buf.readByte(); + this.wasOn = buf.readBoolean(); + this.showBlood = buf.readBoolean(); + tank.deserialize(buf); + blood.deserialize(buf); } public AudioWrapper createAudioLoop() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java index b6e4e9d55..48c671e50 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java @@ -11,6 +11,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -75,21 +76,25 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg time += speed * 2; } } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("time", time); - data.setInteger("speed", speed); - networkPack(data, 50); + + networkPackNT(50); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - power = data.getLong("power"); - time = data.getInteger("time"); - speed = data.getInteger("speed"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeInt(time); + buf.writeInt(speed); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + power = buf.readLong(); + time = buf.readInt(); + speed = buf.readInt(); } public void handleButtonPacket(int value, int meta) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 15fe1d786..d33ff0118 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -29,6 +29,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -270,22 +271,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG this.coreHeat = 0; } } - - NBTTagCompound data = new NBTTagCompound(); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - data.setInteger("rodCount", rodCount); - data.setInteger("coreHeat", coreHeat); - data.setInteger("hullHeat", hullHeat); - data.setDouble("flux", flux); - data.setDouble("processTime", processTime); - data.setDouble("progress", progress); - data.setInteger("typeLoaded", typeLoaded); - data.setInteger("amountLoaded", amountLoaded); - data.setDouble("rodLevel", rodLevel); - data.setDouble("rodTarget", rodTarget); - data.setInteger("coreHeatCapacity", coreHeatCapacity); - this.networkPack(data, 150); + + this.networkPackNT(150); } else { if(amountLoaded > 0) { @@ -383,23 +370,41 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG protected int getRodCountForCoolant() { return this.rodCount + (int) Math.ceil(this.heatsinkCount / 4D); } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - tanks[0].readFromNBT(nbt, "t0"); - tanks[1].readFromNBT(nbt, "t1"); - rodCount = nbt.getInteger("rodCount"); - coreHeat = nbt.getInteger("coreHeat"); - hullHeat = nbt.getInteger("hullHeat"); - flux = nbt.getDouble("flux"); - processTime = nbt.getDouble("processTime"); - progress = nbt.getDouble("progress"); - typeLoaded = nbt.getInteger("typeLoaded"); - amountLoaded = nbt.getInteger("amountLoaded"); - rodLevel = nbt.getDouble("rodLevel"); - rodTarget = nbt.getInteger("rodTarget"); - coreHeatCapacity = nbt.getInteger("coreHeatCapacity"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.rodCount); + buf.writeInt(this.coreHeat); + buf.writeInt(this.hullHeat); + buf.writeDouble(this.flux); + buf.writeDouble(this.processTime); + buf.writeDouble(this.progress); + buf.writeInt(this.typeLoaded); + buf.writeInt(this.amountLoaded); + buf.writeDouble(this.rodLevel); + buf.writeDouble(this.rodTarget); + buf.writeInt(this.coreHeatCapacity); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.rodCount = buf.readInt(); + this.coreHeat = buf.readInt(); + this.hullHeat = buf.readInt(); + this.flux = buf.readDouble(); + this.processTime = buf.readDouble(); + this.progress = buf.readDouble(); + this.typeLoaded = buf.readInt(); + this.amountLoaded = buf.readInt(); + this.rodLevel = buf.readDouble(); + this.rodTarget = buf.readInt(); + this.coreHeatCapacity = buf.readInt(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); } protected void setupTanks() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java index 0a5fad22a..a8b1be570 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java @@ -13,6 +13,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -136,33 +137,37 @@ public class TileEntityReactorControl extends TileEntityMachineBase implements I reactor.setTarget(level); } } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("heat", heat); - data.setDouble("level", level); - data.setInteger("flux", flux); - data.setBoolean("isLinked", isLinked); - data.setDouble("levelLower", levelLower); - data.setDouble("levelUpper", levelUpper); - data.setDouble("heatLower", heatLower); - data.setDouble("heatUpper", heatUpper); - data.setInteger("function", function.ordinal()); - this.networkPack(data, 150); + + this.networkPackNT(150); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.heat = data.getInteger("heat"); - this.level = data.getDouble("level"); - this.flux = data.getInteger("flux"); - isLinked = data.getBoolean("isLinked"); - levelLower = data.getDouble("levelLower"); - levelUpper = data.getDouble("levelUpper"); - heatLower = data.getDouble("heatLower"); - heatUpper = data.getDouble("heatUpper"); - function = RodFunction.values()[data.getInteger("function")]; + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(heat); + buf.writeDouble(level); + buf.writeInt(flux); + buf.writeBoolean(isLinked); + buf.writeDouble(levelLower); + buf.writeDouble(levelUpper); + buf.writeDouble(heatLower); + buf.writeDouble(heatUpper); + buf.writeByte(function.ordinal()); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.heat = buf.readInt(); + this.level = buf.readDouble(); + this.flux = buf.readInt(); + isLinked = buf.readBoolean(); + levelLower = buf.readDouble(); + levelUpper = buf.readDouble(); + heatLower = buf.readDouble(); + heatUpper = buf.readDouble(); + function = RodFunction.values()[buf.readByte()]; } private boolean establishLink() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java index e242b5ee2..2f35685ce 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java @@ -15,12 +15,14 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPlateFuel; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -151,27 +153,31 @@ public class TileEntityReactorResearch extends TileEntityMachineBase implements float rad = (float) heat / (float) maxHeat * 50F; ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, rad); } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("heat", heat); - data.setByte("water", water); - data.setDouble("level", level); - data.setDouble("targetLevel", targetLevel); - data.setIntArray("slotFlux", slotFlux); - data.setInteger("totalFlux", totalFlux); - this.networkPack(data, 150); + + this.networkPackNT(150); } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.heat = data.getInteger("heat"); - this.water = data.getByte("water"); - this.level = data.getDouble("level"); - this.targetLevel = data.getDouble("targetLevel"); - this.slotFlux = data.getIntArray("slotFlux"); - this.totalFlux = data.getInteger("totalFlux"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.heat); + buf.writeByte(this.water); + buf.writeDouble(this.level); + buf.writeDouble(this.targetLevel); + BufferUtil.writeIntArray(buf, this.slotFlux); + buf.writeInt(this.totalFlux); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.heat = buf.readInt(); + this.water = buf.readByte(); + this.level = buf.readDouble(); + this.targetLevel = buf.readDouble(); + this.slotFlux = BufferUtil.readIntArray(buf); + this.totalFlux = buf.readInt(); } public byte getWater() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index d1a46f430..ec4902930 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -33,6 +33,7 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -128,17 +129,6 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.heat = data.getInteger("heat"); - this.pressure = data.getInteger("pressure"); - this.isOn = data.getBoolean("isOn"); - steam.readFromNBT(data, "t0"); - carbonDioxide.readFromNBT(data, "t1"); - water.readFromNBT(data, "t2"); - } - public int getGaugeScaled(int i, int type) { switch (type) { case 0: return (steam.getFill() * i) / steam.getMaxFill(); @@ -227,18 +217,33 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC } checkIfMeltdown(); - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("heat", heat); - data.setInteger("pressure", pressure); - data.setBoolean("isOn", isOn); - steam.writeToNBT(data, "t0"); - carbonDioxide.writeToNBT(data, "t1"); - water.writeToNBT(data, "t2"); - this.networkPack(data, 150); + + this.networkPackNT(150); } } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.heat); + buf.writeInt(this.pressure); + buf.writeBoolean(this.isOn); + steam.serialize(buf); + carbonDioxide.serialize(buf); + water.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.heat = buf.readInt(); + this.pressure = buf.readInt(); + this.isOn = buf.readBoolean(); + steam.deserialize(buf); + carbonDioxide.deserialize(buf); + water.deserialize(buf); + } + private void generateSteam() { // function of SHS produced per tick diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 346d171f5..5bcf63e9b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -23,6 +23,7 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -94,15 +95,8 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS } else { liftOff(); } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setByte("mode", mode); - data.setBoolean("starting", starting); - data.setByte("type", this.getType()); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - networkPack(data, 250); + + networkPackNT(250); } if(worldObj.isRemote) { @@ -189,18 +183,29 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS audio = null; } } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - power = data.getLong("power"); - mode = data.getByte("mode"); - starting = data.getBoolean("starting"); - rocketType = data.getByte("type"); - tanks[0].readFromNBT(data, "t0"); - tanks[1].readFromNBT(data, "t1"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeByte(mode); + buf.writeBoolean(starting); + buf.writeByte(this.getType()); + tanks[0].serialize(buf); + tanks[1].serialize(buf); } - + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + power = buf.readLong(); + mode = buf.readByte(); + starting = buf.readBoolean(); + rocketType = buf.readByte(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + } + public void startCountdown() { if(canLaunch()) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java index ecdb619a0..ee498d053 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java @@ -15,6 +15,7 @@ import com.hbm.util.ArmorUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityCreeper; @@ -69,17 +70,7 @@ public class TileEntityTesla extends TileEntityMachineBase implements IEnergyRec this.targets = zap(worldObj, dx, dy, dz, range, null); } - NBTTagCompound data = new NBTTagCompound(); - data.setShort("length", (short)targets.size()); - int i = 0; - for(double[] d : this.targets) { - data.setDouble("x" + i, d[0]); - data.setDouble("y" + i, d[1]); - data.setDouble("z" + i, d[2]); - i++; - } - - this.networkPack(data, 100); + this.networkPackNT(100); } } @@ -145,19 +136,30 @@ public class TileEntityTesla extends TileEntityMachineBase implements IEnergyRec return ret; } - - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - int s = data.getShort("length"); - + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeShort((short)targets.size()); + for(double[] d : this.targets) { + buf.writeDouble(d[0]); + buf.writeDouble(d[1]); + buf.writeDouble(d[2]); + } + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + int s = buf.readShort(); + this.targets.clear(); - + for(int i = 0; i < s; i++) this.targets.add(new double[] { - data.getDouble("x" + i), - data.getDouble("y" + i), - data.getDouble("z" + i) + buf.readDouble(), // X + buf.readDouble(), // Y + buf.readDouble() // Z }); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 9168d4387..81957e0cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -31,6 +31,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; @@ -120,7 +121,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand /* send sync packets (order doesn't matter) */ for(TileEntityWatz segment : segments) { segment.isOn = turnedOn; - segment.sendPacket(sharedTanks); + this.networkPackNT(25); segment.heat *= 0.99; //cool 1% per tick } @@ -277,30 +278,28 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } } } - - public void sendPacket(FluidTank[] tanks) { - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("heat", this.heat); - data.setBoolean("isOn", isOn); - data.setBoolean("lock", isLocked); - data.setDouble("flux", this.fluxLastReaction + this.fluxLastBase); - for(int i = 0; i < tanks.length; i++) { - tanks[i].writeToNBT(data, "t" + i); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.heat); + buf.writeBoolean(isOn); + buf.writeBoolean(isLocked); + buf.writeDouble(this.fluxLastReaction + this.fluxLastBase); + for (FluidTank tank : tanks) { + tank.serialize(buf); } - this.networkPack(data, 25); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.heat = nbt.getInteger("heat"); - this.isOn = nbt.getBoolean("isOn"); - this.isLocked = nbt.getBoolean("lock"); - this.fluxDisplay = nbt.getDouble("flux"); - for(int i = 0; i < tanks.length; i++) { - tanks[i].readFromNBT(nbt, "t" + i); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.heat = buf.readInt(); + this.isOn = buf.readBoolean(); + this.isLocked = buf.readBoolean(); + this.fluxDisplay = buf.readDouble(); + for (FluidTank tank : tanks) { + tank.deserialize(buf); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 3ef9daf56..a95a94b68 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -20,6 +20,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -73,13 +74,24 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase im } } } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - for(int i = 0; i < 4; i++) tanks[i].writeToNBT(data, "" + i); - this.networkPack(data, 150); + + this.networkPackNT(150); } } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + for(int i = 0; i < 4; i++) tanks[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + for(int i = 0; i < 4; i++) tanks[i].deserialize(buf); + } @Override public void networkUnpack(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index cf90645d5..dcee0bbc2 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -12,6 +12,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.Tuple.Triplet; import com.hbm.util.fauxpointtwelve.DirPos; @@ -19,6 +20,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -107,14 +109,8 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl for(DirPos pos : getConPos()) { if(this.tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("wasOn", this.wasOn); - data.setInteger("heat", this.heat); - data.setInteger("progress", this.progress); - tanks[0].writeToNBT(data, "t0"); - tanks[1].writeToNBT(data, "t1"); - this.networkPack(data, 25); + + this.networkPackNT(25); } else { if(this.wasOn) { @@ -135,6 +131,8 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl } } } + + public DirPos[] getConPos() { @@ -172,16 +170,25 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl return true; } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.wasOn = nbt.getBoolean("wasOn"); - this.heat = nbt.getInteger("heat"); - this.progress = nbt.getInteger("progress"); - tanks[0].readFromNBT(nbt, "t0"); - tanks[1].readFromNBT(nbt, "t1"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.wasOn); + buf.writeInt(this.heat); + buf.writeInt(this.progress); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.wasOn = buf.readBoolean(); + this.heat = buf.readInt(); + this.progress = buf.readInt(); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); } protected void tryPullHeat() { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 1bfbfe835..ed34c417a 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -30,6 +30,7 @@ import api.hbm.fluid.IFluidStandardReceiver; 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.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -178,13 +179,8 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements } power = Library.chargeItemsFromTE(slots, 0, power, maxPower); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - data.setBoolean("isOn", isOn); - data.setBoolean("doesBurn", doesBurn); - tank.writeToNBT(data, "t"); - this.networkPack(data, 50); + + this.networkPackNT(50); } else { @@ -240,15 +236,23 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements new DirPos(xCoord, yCoord, zCoord - 2, Library.NEG_Z) }; } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.isOn = nbt.getBoolean("isOn"); - this.doesBurn = nbt.getBoolean("doesBurn"); - tank.readFromNBT(nbt, "t"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeBoolean(this.isOn); + buf.writeBoolean(this.doesBurn); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.isOn = buf.readBoolean(); + this.doesBurn = buf.readBoolean(); + tank.serialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index a97f9574d..201d7a409 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -24,6 +24,7 @@ import api.hbm.fluid.IFluidStandardSender; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -76,14 +77,8 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen this.progress = 0; this.sendFluid(); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - data.setInteger("progress", this.progress); - data.setInteger("usage", this.usage); - data.setInteger("processTime", this.processTime); - tank.writeToNBT(data, "t"); - this.networkPack(data, 50); + + this.networkPackNT(50); } } @@ -154,14 +149,23 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.progress = nbt.getInteger("progress"); - this.usage = nbt.getInteger("usage"); - this.processTime = nbt.getInteger("processTime"); - tank.readFromNBT(nbt, "t"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeInt(this.progress); + buf.writeInt(this.usage); + buf.writeInt(this.processTime); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progress = buf.readInt(); + this.usage = buf.readInt(); + this.processTime = buf.readInt(); + tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index 65bf61681..29e46ab1f 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -37,6 +37,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -193,14 +194,9 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements } } } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - for(int i = 0; i < 5; i++) tanks[i].writeToNBT(data, "" + i); - data.setBoolean("exploded", hasExploded); - data.setBoolean("onFire", onFire); - data.setBoolean("isOn", this.isOn); - this.networkPack(data, 150); + + this.networkPackNT(150); + } else { if(this.isOn) audioTime = 20; @@ -253,16 +249,25 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements audio = null; } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - for(int i = 0; i < 5; i++) tanks[i].readFromNBT(nbt, "" + i); - this.hasExploded = nbt.getBoolean("exploded"); - this.onFire = nbt.getBoolean("onFire"); - this.isOn = nbt.getBoolean("isOn"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + for(int i = 0; i < 5; i++) tanks[i].serialize(buf); + buf.writeBoolean(this.hasExploded); + buf.writeBoolean(this.onFire); + buf.writeBoolean(this.isOn); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + for(int i = 0; i < 5; i++) tanks[i].deserialize(buf); + this.hasExploded = buf.readBoolean(); + this.onFire = buf.readBoolean(); + this.isOn = buf.readBoolean(); } private void refine() { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index 5f0545326..cb8daee0c 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -24,6 +24,7 @@ import api.hbm.fluid.IFluidStandardReceiver; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -75,14 +76,8 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement this.process(); else this.progress = 0; - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - data.setInteger("progress", this.progress); - data.setInteger("usage", this.usage); - data.setInteger("processTime", this.processTime); - tank.writeToNBT(data, "t"); - this.networkPack(data, 50); + + this.networkPackNT(50); } } @@ -171,14 +166,23 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.progress = nbt.getInteger("progress"); - this.usage = nbt.getInteger("usage"); - this.processTime = nbt.getInteger("processTime"); - tank.readFromNBT(nbt, "t"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeInt(this.progress); + buf.writeInt(this.usage); + buf.writeInt(this.processTime); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progress = buf.readInt(); + this.usage = buf.readInt(); + this.processTime = buf.readInt(); + tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 037982ffd..c40b6dae4 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -20,6 +20,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -81,12 +82,9 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem } } } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); - data.setBoolean("isOn", this.isOn); - for(int i = 0; i < 5; i++) tanks[i].writeToNBT(data, "" + i); - this.networkPack(data, 150); + + this.networkPackNT(150); + } else { if(this.isOn) audioTime = 20; @@ -139,14 +137,21 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem audio = null; } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.isOn = nbt.getBoolean("isOn"); - for(int i = 0; i < 5; i++) tanks[i].readFromNBT(nbt, "" + i); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + buf.writeBoolean(this.isOn); + for(int i = 0; i < 5; i++) tanks[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.isOn = buf.readBoolean(); + for(int i = 0; i < 5; i++) tanks[i].deserialize(buf); } private void refine() { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 78ea7a558..4d53c8c5d 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIRBMKConsole; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; +import com.hbm.util.BufferUtil; import com.hbm.util.Compat; import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; @@ -21,6 +22,7 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -77,8 +79,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.worldObj.theProfiler.endSection(); prepareScreenInfo(); } - - prepareNetworkPack(); + + this.networkPackNT(50); } } @@ -185,66 +187,65 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon screen.display = text; } } - - private void prepareNetworkPack() { - - NBTTagCompound data = new NBTTagCompound(); - - if(this.worldObj.getTotalWorldTime() % 10 == 0) { - - data.setBoolean("full", true); - - for(int i = 0; i < columns.length; i++) { - - if(this.columns[i] != null) { - data.setTag("column_" + i, this.columns[i].data); - data.setShort("type_" + i, (short)this.columns[i].type.ordinal()); - } - } - - data.setIntArray("flux", this.fluxBuffer); - - for(int i = 0; i < this.screens.length; i++) { - RBMKScreen screen = screens[i]; - if(screen.display != null) { - data.setString("t" + i, screen.display); - } - } - } - - for(int i = 0; i < this.screens.length; i++) { - RBMKScreen screen = screens[i]; - data.setByte("s" + i, (byte) screen.type.ordinal()); - } - - this.networkPack(data, 50); - } - @Override - public void networkUnpack(NBTTagCompound data) { - - if(data.getBoolean("full")) { - this.columns = new RBMKColumn[15 * 15]; - - for(int i = 0; i < columns.length; i++) { - - if(data.hasKey("type_" + i)) { - this.columns[i] = new RBMKColumn(ColumnType.values()[data.getShort("type_" + i)], (NBTTagCompound)data.getTag("column_" + i)); + public void serialize(ByteBuf buf) { + super.serialize(buf); + + if (this.worldObj.getTotalWorldTime() % 10 == 0) { + buf.writeBoolean(true); + + for (RBMKColumn column : this.columns) { + if (column == null || column.type == null) + buf.writeByte(-1); + else { + buf.writeByte((byte) column.type.ordinal()); + BufferUtil.writeNBT(buf, column.data); } } - - this.fluxBuffer = data.getIntArray("flux"); - - for(int i = 0; i < this.screens.length; i++) { - RBMKScreen screen = screens[i]; - screen.display = data.getString("t" + i); + + BufferUtil.writeIntArray(buf, fluxBuffer); + + for (RBMKScreen screen : this.screens) { + BufferUtil.writeString(buf, screen.display); + } + + } else { + + buf.writeBoolean(false); + + for (RBMKScreen screen : screens) { + buf.writeByte((byte) screen.type.ordinal()); } } - - for(int i = 0; i < this.screens.length; i++) { - RBMKScreen screen = screens[i]; - screen.type = ScreenType.values()[data.getByte("s" + i)]; + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + if (buf.readBoolean()) { // check if it should be a full packet + + for(int i = 0; i < this.columns.length; i++) { + byte ordinal = buf.readByte(); + if (ordinal == -1) + this.columns[i] = null; + else + this.columns[i] = new RBMKColumn(ColumnType.values()[ordinal], BufferUtil.readNBT(buf)); + } + + this.fluxBuffer = BufferUtil.readIntArray(buf); + + for (RBMKScreen screen : this.screens) { + screen.display = BufferUtil.readString(buf); + } + + } else { + + for (RBMKScreen screen : this.screens) { + screen.type = ScreenType.values()[buf.readByte()]; + } + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java index a634dcc79..a50aa77b8 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java @@ -8,6 +8,7 @@ import com.hbm.inventory.gui.GUICraneBoxer; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; @@ -143,17 +144,21 @@ public class TileEntityCraneBoxer extends TileEntityCraneBase implements IGUIPro worldObj.spawnEntityInWorld(moving); } } - - NBTTagCompound data = new NBTTagCompound(); - data.setByte("mode", mode); - this.networkPack(data, 15); + + this.networkPackNT(15); } } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.mode = nbt.getByte("mode"); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeByte(this.mode); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.mode = buf.readByte(); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index 26ed150ea..ddfa5db9c 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -13,6 +13,7 @@ import com.hbm.util.InventoryUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; @@ -130,21 +131,23 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP } } } - - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("isWhitelist", isWhitelist); - this.matcher.writeToNBT(data); - this.networkPack(data, 15); + + this.networkPackNT(15); } } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.isWhitelist = nbt.getBoolean("isWhitelist"); - this.matcher.modes = new String[this.matcher.modes.length]; - this.matcher.readFromNBT(nbt); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.isWhitelist); + this.matcher.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.isWhitelist = buf.readBoolean(); + this.matcher.deserialize(buf); } public boolean matchesFilter(ItemStack stack) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index 6568f113b..50593e9d4 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -7,8 +7,10 @@ import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -44,26 +46,28 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI if(!worldObj.isRemote) { - NBTTagCompound data = new NBTTagCompound(); - for(int i = 0; i < patterns.length; i++) { - NBTTagCompound compound = new NBTTagCompound(); - patterns[i].writeToNBT(compound); - data.setTag("pattern" + i, compound); - } - data.setIntArray("modes", this.modes); - this.networkPack(data, 15); + this.networkPackNT(15); } } - + @Override - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - for(int i = 0; i < patterns.length; i++) { - NBTTagCompound compound = data.getCompoundTag("pattern" + i); - patterns[i].readFromNBT(compound); + public void serialize(ByteBuf buf) { + super.serialize(buf); + for (ModulePatternMatcher pattern : patterns) { + pattern.serialize(buf); } - this.modes = data.getIntArray("modes"); + + BufferUtil.writeIntArray(buf, this.modes); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for (ModulePatternMatcher pattern : patterns) { + pattern.deserialize(buf); + } + + this.modes = BufferUtil.readIntArray(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java index 4b4e18803..e2013512c 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java @@ -3,8 +3,10 @@ package com.hbm.tileentity.network; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.Compat; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -68,24 +70,27 @@ public class TileEntityRadioTorchCounter extends TileEntityMachineBase implement this.lastCount[i] = count; } } - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("polling", polling); - data.setIntArray("last", lastCount); - this.matcher.writeToNBT(data); - for(int i = 0; i < 3; i++) if(channel[i] != null) data.setString("c" + i, channel[i]); - this.networkPack(data, 15); + + this.networkPackNT(15); } } - - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.polling = nbt.getBoolean("polling"); - this.lastCount = nbt.getIntArray("last"); - this.matcher.modes = new String[this.matcher.modes.length]; - this.matcher.readFromNBT(nbt); - for(int i = 0; i < 3; i++) this.channel[i] = nbt.getString("c" + i); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.polling); + BufferUtil.writeIntArray(buf, this.lastCount); + this.matcher.serialize(buf); + for(int i = 0; i < 3; i++) BufferUtil.writeString(buf, this.channel[i]); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.polling = buf.readBoolean(); + this.lastCount = BufferUtil.readIntArray(buf); + this.matcher.deserialize(buf); + for(int i = 0; i < 3; i++) this.channel[i] = BufferUtil.readString(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java index 156472346..f741d7e4f 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java @@ -19,6 +19,7 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -317,9 +318,8 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen } this.power = Library.chargeTEFromItems(slots, 10, this.power, this.getMaxPower()); - - NBTTagCompound data = this.writePacket(); - this.networkPack(data, 250); + + this.networkPackNT(250); this.didJustShoot = false; @@ -409,20 +409,17 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen } @Override - protected NBTTagCompound writePacket() { - NBTTagCompound data = super.writePacket(); - data.setShort("mode", mode); - if(didJustShoot) - data.setBoolean("didJustShoot", didJustShoot); - return data; + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeShort(this.mode); + buf.writeBoolean(this.didJustShoot); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.mode = nbt.getShort("mode"); - if(nbt.getBoolean("didJustShoot")) - this.retracting = true; + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.mode = buf.readShort(); + this.retracting = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 2ec8a6b26..848356340 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -34,6 +34,7 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -228,9 +229,8 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple } this.power = Library.chargeTEFromItems(slots, 10, this.power, this.getMaxPower()); - - NBTTagCompound data = this.writePacket(); - this.networkPack(data, 250); + + this.networkPackNT(250); if(usesCasings() && this.casingDelay() > 0) { if(casingDelay > 0) { @@ -252,26 +252,45 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple } } } - - protected NBTTagCompound writePacket() { - - NBTTagCompound data = new NBTTagCompound(); + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.tPos != null); if(this.tPos != null) { - data.setDouble("tX", this.tPos.xCoord); - data.setDouble("tY", this.tPos.yCoord); - data.setDouble("tZ", this.tPos.zCoord); + buf.writeDouble(this.tPos.xCoord); + buf.writeDouble(this.tPos.yCoord); + buf.writeDouble(this.tPos.zCoord); } - data.setDouble("pitch", this.rotationPitch); - data.setDouble("yaw", this.rotationYaw); - data.setLong("power", this.power); - data.setBoolean("isOn", this.isOn); - data.setBoolean("targetPlayers", this.targetPlayers); - data.setBoolean("targetAnimals", this.targetAnimals); - data.setBoolean("targetMobs", this.targetMobs); - data.setBoolean("targetMachines", this.targetMachines); - data.setInteger("stattrak", this.stattrak); - - return data; + buf.writeDouble(this.rotationPitch); + buf.writeDouble(this.rotationYaw); + buf.writeLong(this.power); + buf.writeBoolean(this.isOn); + buf.writeBoolean(this.targetPlayers); + buf.writeBoolean(this.targetAnimals); + buf.writeBoolean(this.targetMobs); + buf.writeBoolean(this.targetMachines); + buf.writeInt(this.stattrak); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + boolean hasTPos = buf.readBoolean(); + if(hasTPos) { + this.tPos.xCoord = buf.readDouble(); + this.tPos.yCoord = buf.readDouble(); + this.tPos.zCoord = buf.readDouble(); + } + this.rotationPitch = buf.readDouble(); + this.rotationYaw = buf.readDouble(); + this.power = buf.readLong(); + this.isOn = buf.readBoolean(); + this.targetPlayers = buf.readBoolean(); + this.targetAnimals = buf.readBoolean(); + this.targetMobs = buf.readBoolean(); + this.targetMachines = buf.readBoolean(); + this.stattrak = buf.readInt(); } protected void updateConnections() { diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 924ec352c..19996d6af 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -22,6 +22,7 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -153,18 +154,17 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl } } } - + @Override - protected NBTTagCompound writePacket() { - NBTTagCompound data = super.writePacket(); - tank.writeToNBT(data, "t"); - return data; + public void serialize(ByteBuf buf) { + super.serialize(buf); + tank.serialize(buf); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - tank.readFromNBT(nbt, "t"); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + tank.deserialize(buf); } @Override //TODO: clean this shit up diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java index 149dc136c..714ee338f 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java @@ -17,6 +17,7 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -249,9 +250,8 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem } this.power = Library.chargeTEFromItems(slots, 10, this.power, this.getMaxPower()); - - NBTTagCompound data = this.writePacket(); - this.networkPack(data, 250); + + this.networkPackNT(250); } else { @@ -267,22 +267,21 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem } @Override - protected NBTTagCompound writePacket() { - NBTTagCompound data = super.writePacket(); - data.setShort("mode", this.mode); - data.setInteger("type", this.typeLoaded); - data.setInteger("ammo", this.ammo); - data.setFloat("crane", crane); - return data; + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeShort(this.mode); + buf.writeShort(this.typeLoaded); + buf.writeInt(this.ammo); + buf.writeFloat(this.crane); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.mode = nbt.getShort("mode"); - this.typeLoaded = nbt.getShort("type"); - this.ammo = nbt.getInteger("ammo"); - this.crane = nbt.getFloat("crane"); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.mode = buf.readShort(); + this.typeLoaded = buf.readShort(); + this.ammo = buf.readInt(); + this.crane = buf.readFloat(); } public boolean hasAmmo() { diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index 91dc3e9ab..f9f4e82c5 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -19,6 +19,7 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -261,20 +262,21 @@ public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT implements I } this.power -= demand; - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("shot", true); - this.networkPack(data, 250); + + this.networkPackNT(250); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - - if(nbt.hasKey("shot")) - beam = 5; - else - super.networkUnpack(nbt); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(true); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.beam = buf.readBoolean() ? 5 : 0; } @Override diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java index f6c95d847..2dbe1e5bc 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java @@ -15,6 +15,7 @@ import cpw.mods.fml.relauncher.SideOnly; import com.hbm.items.ModItems; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -104,20 +105,21 @@ public class TileEntityTurretRichard extends TileEntityTurretBaseNT { if(this.getFirstConfigLoaded() == null) { this.loaded = 0; } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("loaded", this.loaded); - this.networkPack(data, 250); + + this.networkPackNT(250); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - - if(nbt.hasKey("loaded")) - this.loaded = nbt.getInteger("loaded"); - else - super.networkUnpack(nbt); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.loaded); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.loaded = buf.readInt(); } @Override diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java index 09b8d22ee..aca28eb62 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java @@ -15,6 +15,7 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -229,20 +230,19 @@ public class TileEntityTurretSentry extends TileEntityTurretBaseNT implements IG } @Override - protected NBTTagCompound writePacket() { - NBTTagCompound data = super.writePacket(); - if(didJustShootLeft) data.setBoolean("justShotLeft", didJustShootLeft); - if(didJustShootRight) data.setBoolean("justShotRight", didJustShootRight); + public void serialize(ByteBuf buf) { + super.serialize(buf); + if(didJustShootLeft) buf.writeBoolean(didJustShootLeft); + if(didJustShootRight) buf.writeBoolean(didJustShootRight); didJustShootLeft = false; didJustShootRight = false; - return data; } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - if(nbt.getBoolean("justShotLeft")) this.retractingLeft = true; - if(nbt.getBoolean("justShotRight")) this.retractingRight = true; + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + if(buf.readBoolean()) this.retractingLeft = true; + if(buf.readBoolean()) this.retractingRight = true; } protected void updateConnections() { diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java index d25acbc74..0510a86ac 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java @@ -13,6 +13,7 @@ import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -130,10 +131,8 @@ public class TileEntityTurretTauon extends TileEntityTurretBaseNT { this.target.attackEntityFrom(ModDamageSource.electricity, 30F + worldObj.rand.nextInt(11)); this.conusmeAmmo(conf.ammo); this.worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:weapon.tauShoot", 4.0F, 0.9F + worldObj.rand.nextFloat() * 0.3F); - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("shot", true); - this.networkPack(data, 250); + + this.networkPackNT(250); Vec3 pos = this.getTurretPos(); Vec3 vec = Vec3.createVectorHelper(this.getBarrelLength(), 0, 0); @@ -149,12 +148,15 @@ public class TileEntityTurretTauon extends TileEntityTurretBaseNT { } @Override - public void networkUnpack(NBTTagCompound nbt) { - - if(nbt.hasKey("shot")) - beam = 3; - else - super.networkUnpack(nbt); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(true); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.beam = buf.readBoolean() ? 3 : 0; } @Override diff --git a/src/main/java/com/hbm/util/BufferUtil.java b/src/main/java/com/hbm/util/BufferUtil.java index 8a8c7c8ad..e81d259ec 100644 --- a/src/main/java/com/hbm/util/BufferUtil.java +++ b/src/main/java/com/hbm/util/BufferUtil.java @@ -14,7 +14,7 @@ import net.minecraft.nbt.NBTTagCompound; public class BufferUtil { private static final Charset CHARSET = StandardCharsets.UTF_8; - + // Writes a string to a byte buffer by encoding the length and raw bytes public static void writeString(ByteBuf buf, String value) { if(value == null) { @@ -22,7 +22,7 @@ public class BufferUtil { return; } - buf.writeInt(value.length()); + buf.writeInt(value.getBytes(CHARSET).length); buf.writeBytes(value.getBytes(CHARSET)); } @@ -37,6 +37,66 @@ public class BufferUtil { return new String(bytes, CHARSET); } + /** + * Writes an integer array to a buffer. + */ + public static void writeIntArray(ByteBuf buf, int[] array) { + buf.writeInt(array.length); + for (int value : array) { + buf.writeInt(value); + } + } + + /** + * Reads an integer array from a buffer. + */ + public static int[] readIntArray(ByteBuf buf) { + int length = buf.readInt(); + + int[] array = new int[length]; + + for (int i = 0; i < length; i++) { + array[i] = buf.readInt(); + } + + return array; + } + + /** + * Writes a NBTTagCompound to a buffer. + */ + public static void writeNBT(ByteBuf buf, NBTTagCompound compound) { + if(compound != null) { + byte[] nbtData = new byte[0]; + try { + nbtData = CompressedStreamTools.compress(compound); + } catch(IOException e) { + e.printStackTrace(); + } + buf.writeShort((short) nbtData.length); + buf.writeBytes(nbtData); + } else + buf.writeShort(-1); + } + + /** + * Reads a NBTTagCompound from a buffer. + */ + public static NBTTagCompound readNBT(ByteBuf buf) { + short nbtLength = buf.readShort(); + + if (nbtLength == -1) // check if no compound was even given. + return new NBTTagCompound(); + byte[] tags = new byte[nbtLength]; + buf.readBytes(tags); + try { + return CompressedStreamTools.func_152457_a(tags, new NBTSizeTracker(2097152L)); + } catch(IOException e) { + e.printStackTrace(); + } + return new NBTTagCompound(); + } + /** * Writes the ItemStack to the buffer. */ @@ -52,23 +112,12 @@ public class BufferUtil { if (item.getItem().isDamageable() || item.getItem().getShareTag()) nbtTagCompound = item.stackTagCompound; - if(nbtTagCompound != null) { - byte[] nbtData = new byte[0]; - try { - nbtData = CompressedStreamTools.compress(nbtTagCompound); - } catch(IOException e) { - e.printStackTrace(); - } - buf.writeShort((short) nbtData.length); - buf.writeBytes(nbtData); - } else { - buf.writeShort(-1); - } + writeNBT(buf, nbtTagCompound); } } /** - * Reads an ItemStack from a buffer + * Reads an ItemStack from a buffer. */ public static ItemStack readItemStack(ByteBuf buf) { ItemStack item = null; @@ -78,16 +127,7 @@ public class BufferUtil { byte quantity = buf.readByte(); short meta = buf.readShort(); item = new ItemStack(Item.getItemById(id), quantity, meta); - - short nbtLength = buf.readByte(); - - byte[] tags = new byte[nbtLength]; - buf.readBytes(tags); - try { - item.stackTagCompound = CompressedStreamTools.func_152457_a(tags, new NBTSizeTracker(2097152L)); - } catch(IOException e) { - e.printStackTrace(); - } + item.stackTagCompound = readNBT(buf); } return item; } From f0148a12e944c744ba4f8bbd184efa4cd4c7ef13 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:55:11 -0500 Subject: [PATCH 15/17] part 1 --- .../java/com/hbm/handler/neutron/PileNeutronHandler.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java index 48377590e..03af1a103 100644 --- a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java +++ b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java @@ -62,7 +62,7 @@ public class PileNeutronHandler { TileEntityPileBase originTE = (TileEntityPileBase) origin.tile; BlockPos pos = new BlockPos(originTE); - for(float i = 1; i <= range; i += 0.5F) { + for(float i = 1; i <= range; i += 1F) { BlockPos node = new BlockPos( (int)Math.floor(pos.getX() + 0.5 + vector.xCoord * i), @@ -70,6 +70,9 @@ public class PileNeutronHandler { (int)Math.floor(pos.getZ() + 0.5 + vector.zCoord * i) ); + if(node.equals(pos)) + continue; // don't interact with itself! + TileEntity tile; if (NeutronNodeWorld.nodeCache.containsKey(node)) @@ -77,7 +80,7 @@ public class PileNeutronHandler { else { tile = blockPosToTE(worldObj, node); if (tile == null) - return; // Doesn't exist anymore! + return; // Doesn't exist! if (tile instanceof TileEntityPileBase) NeutronNodeWorld.addNode(new PileNeutronNode((TileEntityPileBase) tile)); } From ec15e85e4ec757038f0471f970ab90d9c0a4e93c Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Fri, 6 Sep 2024 19:43:18 -0500 Subject: [PATCH 16/17] holy shit im done (part 2) --- .../com/hbm/blocks/generic/BlockEmitter.java | 39 ++++---- .../hbm/blocks/machine/MachineCapacitor.java | 4 +- .../hbm/blocks/machine/PistonInserter.java | 47 +++++---- .../hbm/blocks/network/BlockCableGauge.java | 27 ++++-- .../hbm/blocks/network/FluidDuctGauge.java | 28 +++--- .../handler/neutron/PileNeutronHandler.java | 6 +- src/main/java/com/hbm/packet/NBTPacket.java | 97 ------------------- .../java/com/hbm/packet/PacketDispatcher.java | 3 +- .../hbm/tileentity/INBTPacketReceiver.java | 17 ---- .../hbm/tileentity/TileEntityMachineBase.java | 8 +- .../hbm/tileentity/TileEntityTickingBase.java | 18 +--- .../hbm/tileentity/bomb/TileEntityCharge.java | 29 +++--- .../bomb/TileEntityCompactLauncher.java | 6 +- .../bomb/TileEntityLaunchTable.java | 6 +- .../deco/TileEntityLanternBehemoth.java | 20 ++-- .../tileentity/machine/TileEntityCharger.java | 26 ++--- .../machine/TileEntityChimneyBase.java | 22 +++-- .../tileentity/machine/TileEntityChungus.java | 33 +++---- .../machine/TileEntityCondenser.java | 28 +++--- .../machine/TileEntityCondenserPowered.java | 21 +++- .../machine/TileEntityDeuteriumExtractor.java | 8 -- .../machine/TileEntityDiFurnace.java | 27 ++++-- .../tileentity/machine/TileEntityHadron.java | 7 -- .../machine/TileEntityHadronDiode.java | 26 ++--- .../machine/TileEntityHadronPower.java | 4 +- .../machine/TileEntityHeatBoiler.java | 47 +++++---- .../TileEntityHeatBoilerIndustrial.java | 47 +++++---- .../machine/TileEntityHeaterElectric.java | 30 +++--- .../machine/TileEntityHeaterHeatex.java | 36 +++---- .../machine/TileEntityMachineAssemfac.java | 13 --- .../machine/TileEntityMachineAutosaw.java | 30 +++--- .../machine/TileEntityMachineDrain.java | 6 +- .../machine/TileEntityMachineHephaestus.java | 38 +++++--- .../machine/TileEntityMachineIGenerator.java | 5 +- .../machine/TileEntityMachineMixer.java | 17 +--- .../machine/TileEntityMachinePress.java | 18 ---- .../machine/TileEntityMachinePumpBase.java | 35 +++---- .../TileEntityMachinePumpElectric.java | 17 ++-- .../machine/TileEntityMachinePumpSteam.java | 21 ++-- .../machine/TileEntityMachineRadarNT.java | 2 +- .../machine/TileEntityMachineRadarScreen.java | 13 +-- .../TileEntityMachineStrandCaster.java | 29 ++---- .../machine/TileEntityMachineTeleporter.java | 23 +++-- .../machine/TileEntityRadioRec.java | 23 +++-- .../tileentity/machine/TileEntitySawmill.java | 58 +++++------ .../machine/TileEntitySolarBoiler.java | 9 +- .../machine/TileEntitySolarMirror.java | 29 +++--- .../machine/TileEntitySteamEngine.java | 42 +++++--- .../machine/TileEntityStirling.java | 26 ++--- .../TileEntityMachineCatalyticCracker.java | 22 +++-- .../TileEntityMachineCatalyticReformer.java | 8 -- .../oil/TileEntityMachineFractionTower.java | 2 +- .../machine/pile/TileEntityPileBase.java | 4 +- .../machine/rbmk/TileEntityCraneConsole.java | 87 +++++++++-------- .../machine/rbmk/TileEntityRBMKBase.java | 10 +- .../rbmk/TileEntityRBMKSlottedBase.java | 17 ---- .../storage/TileEntityFileCabinet.java | 2 +- .../storage/TileEntityMassStorage.java | 35 ++++--- .../network/TileEntityDroneCrate.java | 36 ++++--- .../network/TileEntityDroneRequester.java | 20 ++-- .../network/TileEntityDroneWaypoint.java | 2 +- .../network/TileEntityRadioTelex.java | 42 ++++---- .../network/TileEntityRadioTorchBase.java | 31 +++--- .../network/TileEntityRadioTorchLogic.java | 36 ++++--- .../TileEntityRequestNetworkContainer.java | 8 -- .../turret/TileEntityTurretBaseNT.java | 22 ----- 66 files changed, 705 insertions(+), 850 deletions(-) delete mode 100644 src/main/java/com/hbm/packet/NBTPacket.java delete mode 100644 src/main/java/com/hbm/tileentity/INBTPacketReceiver.java diff --git a/src/main/java/com/hbm/blocks/generic/BlockEmitter.java b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java index 4d6b10199..9c59c282e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockEmitter.java +++ b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java @@ -5,14 +5,15 @@ import java.util.List; import com.hbm.blocks.ITooltipProvider; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import api.hbm.block.IToolable; +import com.hbm.tileentity.TileEntityLoadedBase; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockPistonBase; @@ -103,7 +104,7 @@ public class BlockEmitter extends BlockContainer implements IToolable, ITooltipP return false; } - public static class TileEntityEmitter extends TileEntity implements INBTPacketReceiver { + public static class TileEntityEmitter extends TileEntityLoadedBase implements IBufPacketReceiver { public static final int range = 100; public int color; @@ -146,7 +147,7 @@ public class BlockEmitter extends BlockContainer implements IToolable, ITooltipP if(color == 0) { color = Color.HSBtoRGB(worldObj.getTotalWorldTime() / 50.0F, 0.5F, 0.25F) & 16777215; } - + NBTTagCompound data = new NBTTagCompound(); data.setString("type", "plasmablast"); data.setFloat("r", ((float)((color & 0xff0000) >> 16)) / 256F); @@ -168,20 +169,16 @@ public class BlockEmitter extends BlockContainer implements IToolable, ITooltipP data.setFloat("pitch", -90); data.setFloat("yaw", 90); } - + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(worldObj.provider.dimensionId, x, y, z, 100)); color = prevColor; } } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("beam", this.beam); - data.setInteger("color", this.color); - data.setFloat("girth", this.girth); - data.setInteger("effect", this.effect); - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(data, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); + + sendStandard(150); + } } @@ -225,11 +222,19 @@ public class BlockEmitter extends BlockContainer implements IToolable, ITooltipP } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.beam = nbt.getInteger("beam"); - this.color = nbt.getInteger("color"); - this.girth = nbt.getFloat("girth"); - this.effect = nbt.getInteger("effect"); + public void serialize(ByteBuf buf) { + buf.writeInt(this.beam); + buf.writeInt(this.color); + buf.writeFloat(this.girth); + buf.writeInt(this.effect); + } + + @Override + public void deserialize(ByteBuf buf) { + this.beam = buf.readInt(); + this.color = buf.readInt(); + this.girth = buf.readFloat(); + this.effect = buf.readInt(); } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java index f7a0fcfb8..e4221efec 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java @@ -199,8 +199,8 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP this.trySubscribe(worldObj, xCoord + opp.offsetX, yCoord + opp.offsetY, zCoord + opp.offsetZ, opp); - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 15)); - + sendStandard(15); + this.powerSent = 0; this.powerReceived = 0; } diff --git a/src/main/java/com/hbm/blocks/machine/PistonInserter.java b/src/main/java/com/hbm/blocks/machine/PistonInserter.java index 8b95fed92..7539e685e 100644 --- a/src/main/java/com/hbm/blocks/machine/PistonInserter.java +++ b/src/main/java/com/hbm/blocks/machine/PistonInserter.java @@ -4,11 +4,14 @@ import java.util.List; import com.hbm.blocks.BlockContainerBase; import com.hbm.blocks.ITooltipProvider; -import com.hbm.tileentity.INBTPacketReceiver; import api.hbm.block.IInsertable; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.material.Material; @@ -206,7 +209,7 @@ public class PistonInserter extends BlockContainerBase implements ITooltipProvid // |___..---' _|____`-----..-----'\ // |_____________________| @ | ) // average coding session involving tile entities - public static class TileEntityPistonInserter extends TileEntity implements IInventory, INBTPacketReceiver { + public static class TileEntityPistonInserter extends TileEntityLoadedBase implements IInventory, IBufPacketReceiver { public ItemStack slot; @@ -257,15 +260,7 @@ public class PistonInserter extends BlockContainerBase implements ITooltipProvid delay--; } - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("extend", extend); - if(this.slot != null) { - NBTTagCompound stack = new NBTTagCompound(); - slot.writeToNBT(stack); - data.setTag("stack", stack); - } - - INBTPacketReceiver.networkPack(this, data, 25); + sendStandard(25); } else { this.lastExtend = this.renderExtend; @@ -279,22 +274,32 @@ public class PistonInserter extends BlockContainerBase implements ITooltipProvid } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - this.syncExtend = nbt.getInteger("extend"); - - if(nbt.hasKey("stack")) { - NBTTagCompound stack = nbt.getCompoundTag("stack"); + public void serialize(ByteBuf buf) { + buf.writeInt(extend); + + buf.writeBoolean(this.slot != null); + if(this.slot != null) { + BufferUtil.writeNBT(buf, slot.stackTagCompound); + } + + this.turnProgress = 2; + } + + @Override + public void deserialize(ByteBuf buf) { + this.syncExtend = buf.readInt(); + + if(buf.readBoolean()) { + NBTTagCompound stack = BufferUtil.readNBT(buf); this.slot = ItemStack.loadItemStackFromNBT(stack); } else this.slot = null; - + this.turnProgress = 2; } - - /* :3 NBT stuff */ - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java index bc31744fd..3c6cc0425 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java +++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java @@ -8,16 +8,20 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.handler.CompatHandler; import com.hbm.lib.RefStrings; +import com.hbm.packet.BufPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.render.block.RenderBlockMultipass; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.network.TileEntityCableBaseNT; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import api.hbm.energymk2.PowerNetMK2; import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -105,7 +109,7 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, } @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) - public static class TileEntityCableGauge extends TileEntityCableBaseNT implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent { + public static class TileEntityCableGauge extends TileEntityCableBaseNT implements IBufPacketReceiver, SimpleComponent, CompatHandler.OCComponent { private long deltaTick = 0; private long deltaSecond = 0; @@ -128,18 +132,21 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, } this.deltaSecond += deltaTick; } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("deltaT", deltaTick); - data.setLong("deltaS", deltaLastSecond); - INBTPacketReceiver.networkPack(this, data, 25); + + sendStandard(25); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.deltaTick = Math.max(nbt.getLong("deltaT"), 0); - this.deltaLastSecond = Math.max(nbt.getLong("deltaS"), 0); + public void serialize(ByteBuf buf) { + buf.writeLong(deltaTick); + buf.writeLong(deltaLastSecond); + } + + @Override + public void deserialize(ByteBuf buf) { + this.deltaTick = Math.max(buf.readLong(), 0); + this.deltaLastSecond = Math.max(buf.readLong(), 0); } @Override diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java index 2c60fbc59..153268f9f 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java @@ -11,15 +11,19 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.handler.CompatHandler; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; +import com.hbm.packet.BufPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.render.block.RenderBlockMultipass; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import com.hbm.util.I18nUtil; import api.hbm.fluid.IPipeNet; import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -30,7 +34,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -109,7 +112,7 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL } @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) - public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent { + public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements IBufPacketReceiver, SimpleComponent, CompatHandler.OCComponent { private BigInteger lastMeasurement = BigInteger.valueOf(10); private long deltaTick = 0; @@ -139,18 +142,21 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL } catch(Exception ex) { } } - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("deltaT", deltaTick); - data.setLong("deltaS", deltaLastSecond); - INBTPacketReceiver.networkPack(this, data, 25); + + sendStandard(25); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.deltaTick = Math.max(nbt.getLong("deltaT"), 0); - this.deltaLastSecond = Math.max(nbt.getLong("deltaS"), 0); + public void serialize(ByteBuf buf) { + buf.writeLong(deltaTick); + buf.writeLong(deltaLastSecond); + } + + @Override + public void deserialize(ByteBuf buf) { + this.deltaTick = Math.max(buf.readLong(), 0); + this.deltaLastSecond = Math.max(buf.readLong(), 0); } @Optional.Method(modid = "OpenComputers") diff --git a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java index 03af1a103..1285b6ad2 100644 --- a/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java +++ b/src/main/java/com/hbm/handler/neutron/PileNeutronHandler.java @@ -62,7 +62,7 @@ public class PileNeutronHandler { TileEntityPileBase originTE = (TileEntityPileBase) origin.tile; BlockPos pos = new BlockPos(originTE); - for(float i = 1; i <= range; i += 1F) { + for(float i = 1; i <= range; i += 0.5F) { BlockPos node = new BlockPos( (int)Math.floor(pos.getX() + 0.5 + vector.xCoord * i), @@ -73,6 +73,8 @@ public class PileNeutronHandler { if(node.equals(pos)) continue; // don't interact with itself! + pos.mutate(node.getX(), node.getY(), node.getZ()); + TileEntity tile; if (NeutronNodeWorld.nodeCache.containsKey(node)) @@ -108,7 +110,7 @@ public class PileNeutronHandler { if(te instanceof IPileNeutronReceiver) { IPileNeutronReceiver rec = (IPileNeutronReceiver) te; - rec.receiveNeutrons((int) fluxQuantity); + rec.receiveNeutrons((int) Math.floor(fluxQuantity)); if(block != ModBlocks.block_graphite_detector || (meta & 8) == 0) return; diff --git a/src/main/java/com/hbm/packet/NBTPacket.java b/src/main/java/com/hbm/packet/NBTPacket.java deleted file mode 100644 index 3bd5afbcb..000000000 --- a/src/main/java/com/hbm/packet/NBTPacket.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.hbm.packet; - -import java.io.IOException; - -import com.hbm.tileentity.INBTPacketReceiver; - -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; - - -@Deprecated // rest in peace sweet little prince -public class NBTPacket implements IMessage { - - PacketBuffer buffer; - int x; - int y; - int z; - - public NBTPacket() { } - - public NBTPacket(NBTTagCompound nbt, int x, int y, int z) { - - this.buffer = new PacketBuffer(Unpooled.buffer()); - this.x = x; - this.y = y; - this.z = z; - - try { - buffer.writeNBTTagCompoundToBuffer(nbt); - - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void fromBytes(ByteBuf buf) { - - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - - if (buffer == null) { - buffer = new PacketBuffer(Unpooled.buffer()); - } - buffer.writeBytes(buf); - } - - @Override - public void toBytes(ByteBuf buf) { - - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - - if (buffer == null) { - buffer = new PacketBuffer(Unpooled.buffer()); - } - buf.writeBytes(buffer); - } - - public static class Handler implements IMessageHandler { - - @Override - public IMessage onMessage(NBTPacket m, MessageContext ctx) { - - if(Minecraft.getMinecraft().theWorld == null) - return null; - - TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z); - - try { - - NBTTagCompound nbt = m.buffer.readNBTTagCompoundFromBuffer(); - - if(nbt != null) { - - if(te instanceof INBTPacketReceiver) - ((INBTPacketReceiver) te).networkUnpack(nbt); - } - - } catch (IOException e) { - e.printStackTrace(); - } - - return null; - } - } - -} diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index e2dea4a51..73126336b 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -80,7 +80,8 @@ public class PacketDispatcher { //Tile sync wrapper.registerMessage(AuxGaugePacket.Handler.class, AuxGaugePacket.class, i++, Side.CLIENT); //The horrid one - wrapper.registerMessage(NBTPacket.Handler.class, NBTPacket.class, i++, Side.CLIENT); //The convenient but laggy one + // fucking DIE + //wrapper.registerMessage(NBTPacket.Handler.class, NBTPacket.class, i++, Side.CLIENT); //The convenient but laggy one wrapper.registerMessage(BufPacket.Handler.class, BufPacket.class, i++, Side.CLIENT); //The not-so-convenient but not laggy one } diff --git a/src/main/java/com/hbm/tileentity/INBTPacketReceiver.java b/src/main/java/com/hbm/tileentity/INBTPacketReceiver.java deleted file mode 100644 index fa230a3ba..000000000 --- a/src/main/java/com/hbm/tileentity/INBTPacketReceiver.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hbm.tileentity; - -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; - -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; - -public interface INBTPacketReceiver { - - public void networkUnpack(NBTTagCompound nbt); - - public static void networkPack(TileEntity that, NBTTagCompound data, int range) { - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(data, that.xCoord, that.yCoord, that.zCoord), new TargetPoint(that.getWorldObj().provider.dimensionId, that.xCoord, that.yCoord, that.zCoord, range)); - } -} diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index 3440ea517..a8e1ee651 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -2,7 +2,6 @@ package com.hbm.tileentity; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.BufPacket; -import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.util.fauxpointtwelve.DirPos; @@ -17,7 +16,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidTank; -public abstract class TileEntityMachineBase extends TileEntityLoadedBase implements ISidedInventory, INBTPacketReceiver, IBufPacketReceiver { +public abstract class TileEntityMachineBase extends TileEntityLoadedBase implements ISidedInventory, IBufPacketReceiver { public ItemStack slots[]; @@ -154,11 +153,6 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, val, id), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } @Deprecated public void processGauge(int val, int id) { } - - @Deprecated - public void networkUnpack(NBTTagCompound nbt) { - this.muffled = nbt.getBoolean("muffled"); - } /** Sends a sync packet that uses ByteBuf for efficient information-cramming */ public void networkPackNT(int range) { diff --git a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java index 1d1871c2e..279b12d4b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java @@ -1,15 +1,9 @@ package com.hbm.tileentity; -import com.hbm.packet.BufPacket; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; - -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.buffer.ByteBuf; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidTank; -public abstract class TileEntityTickingBase extends TileEntityLoadedBase implements INBTPacketReceiver, IBufPacketReceiver { +public abstract class TileEntityTickingBase extends TileEntityLoadedBase implements IBufPacketReceiver { public TileEntityTickingBase() { } @@ -26,19 +20,11 @@ public abstract class TileEntityTickingBase extends TileEntityLoadedBase impleme @Override public abstract void updateEntity(); - @Deprecated public void networkPack(NBTTagCompound nbt, int range) { - - if(!worldObj.isRemote) - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - - @Deprecated public void networkUnpack(NBTTagCompound nbt) { } - @Deprecated public void handleButtonPacket(int value, int meta) { } public void networkPackNT(int range) { - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + if(!worldObj.isRemote) sendStandard(range); } @Override public void serialize(ByteBuf buf) { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java index 6467ac91e..aee39ce6d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java @@ -1,15 +1,15 @@ package com.hbm.tileentity.bomb; import com.hbm.blocks.bomb.BlockChargeBase; -import com.hbm.packet.NBTPacket; +import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import net.minecraft.nbt.NBTTagCompound; +import cpw.mods.fml.common.network.NetworkRegistry; +import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; -public class TileEntityCharge extends TileEntity implements INBTPacketReceiver { +public class TileEntityCharge extends TileEntity implements IBufPacketReceiver { public boolean started; public int timer; @@ -29,18 +29,21 @@ public class TileEntityCharge extends TileEntity implements INBTPacketReceiver { ((BlockChargeBase)this.getBlockType()).explode(worldObj, xCoord, yCoord, zCoord); } } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("timer", timer); - data.setBoolean("started", started); - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(data, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100)); + + sendStandard(100); } } @Override - public void networkUnpack(NBTTagCompound data) { - timer = data.getInteger("timer"); - started = data.getBoolean("started"); + public void serialize(ByteBuf buf) { + buf.writeLong(this.timer); + buf.writeBoolean(this.started); + } + + @Override + public void deserialize(ByteBuf buf) { + this.timer = buf.readInt(); + this.started = buf.readBoolean(); } public String getMinutes() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index 25ad4ef2a..dc0775e96 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -188,9 +188,9 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I if(worldObj.getTotalWorldTime() % 20 == 0) this.updateConnections(); - - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50)); - + + sendStandard(50); + MissileStruct multipart = getStruct(slots[0]); if(multipart != null) diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 67db230ec..b8ab5fab8 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -197,9 +197,9 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide this.decrStackSize(4, 1); solid += 250; } - - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50)); - + + sendStandard(50); + MissileStruct multipart = getStruct(slots[0]); if(multipart != null) diff --git a/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java b/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java index 758f1727d..30fc9e132 100644 --- a/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java +++ b/src/main/java/com/hbm/tileentity/deco/TileEntityLanternBehemoth.java @@ -13,11 +13,12 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.special.ItemKitCustom; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IRepairable; 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.init.Blocks; import net.minecraft.init.Items; @@ -27,7 +28,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityLanternBehemoth extends TileEntity implements INBTPacketReceiver, IRepairable { +public class TileEntityLanternBehemoth extends TileEntity implements IBufPacketReceiver, IRepairable { public boolean isBroken = false; public int comTimer = -1; @@ -63,10 +64,8 @@ public class TileEntityLanternBehemoth extends TileEntity implements INBTPacketR if(comTimer >= 0) { comTimer--; } - - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("isBroken", isBroken); - INBTPacketReceiver.networkPack(this, data, 250); + + sendStandard(250); } } @@ -81,8 +80,13 @@ public class TileEntityLanternBehemoth extends TileEntity implements INBTPacketR } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.isBroken = nbt.getBoolean("isBroken"); + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.isBroken); + } + + @Override + public void deserialize(ByteBuf buf) { + this.isBroken = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java index 6df1f8bf9..966c25326 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -4,18 +4,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -import com.hbm.tileentity.INBTPacketReceiver; -import com.hbm.tileentity.TileEntityLoadedBase; - import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyReceiverMK2, INBTPacketReceiver { +public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyReceiverMK2, IBufPacketReceiver { private List players = new ArrayList(); private long charge = 0; @@ -62,10 +61,7 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.fizz", 0.2F, 0.5F); } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("c", charge); - data.setBoolean("p", particles); - INBTPacketReceiver.networkPack(this, data, 50); + sendStandard(50); } lastUsingTicks = usingTicks; @@ -94,9 +90,15 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.charge = nbt.getLong("c"); - this.particles = nbt.getBoolean("p"); + public void serialize(ByteBuf buf) { + buf.writeLong(this.charge); + buf.writeBoolean(this.particles); + } + + @Override + public void deserialize(ByteBuf buf) { + this.charge = buf.readLong(); + this.particles = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChimneyBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChimneyBase.java index 08964ccc8..dd6627066 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChimneyBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChimneyBase.java @@ -6,15 +6,15 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidUser; -import net.minecraft.nbt.NBTTagCompound; +import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityChimneyBase extends TileEntityLoadedBase implements IFluidUser, INBTPacketReceiver { +public abstract class TileEntityChimneyBase extends TileEntityLoadedBase implements IFluidUser, IBufPacketReceiver { public long ashTick = 0; public long sootTick = 0; @@ -49,9 +49,7 @@ public abstract class TileEntityChimneyBase extends TileEntityLoadedBase impleme this.sootTick = 0; } - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("onTicks", onTicks); - INBTPacketReceiver.networkPack(this, data, 150); + sendStandard(150); if(onTicks > 0) onTicks--; @@ -72,9 +70,15 @@ public abstract class TileEntityChimneyBase extends TileEntityLoadedBase impleme } public void spawnParticles() { } - - public void networkUnpack(NBTTagCompound nbt) { - this.onTicks = nbt.getInteger("onTicks"); + + @Override + public void serialize(ByteBuf buf) { + buf.writeInt(this.onTicks); + } + + @Override + public void deserialize(ByteBuf buf) { + this.onTicks = buf.readInt(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 0ab6d68b2..e4daad9e7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -13,11 +13,9 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.main.MainRegistry; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -27,9 +25,9 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -40,7 +38,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine { +public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IBufPacketReceiver { public long power; private int turnTimer; @@ -139,12 +137,8 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr turnTimer--; if(operational) turnTimer = 25; - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("type", tanks[0].getTankType().getID()); - data.setInteger("operational", turnTimer); - this.networkPack(data, 150); + + sendStandard(150); } else { @@ -213,16 +207,19 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr new DirPos(xCoord - rot.offsetX * 3, yCoord, zCoord - rot.offsetZ * 3, rot.getOpposite()) }; } - - public void networkPack(NBTTagCompound nbt, int range) { - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + + @Override + public void serialize(ByteBuf buf) { + buf.writeLong(this.power); + buf.writeInt(this.turnTimer); + this.tanks[0].serialize(buf); } @Override - public void networkUnpack(NBTTagCompound data) { - this.power = data.getLong("power"); - this.turnTimer = data.getInteger("operational"); - this.tanks[0].setTankType(Fluids.fromID(data.getInteger("type"))); + public void deserialize(ByteBuf buf) { + this.power = buf.readLong(); + this.turnTimer = buf.readInt(); + this.tanks[0].deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index 8d2730f8b..48a322a3b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -7,17 +7,16 @@ import com.google.gson.stream.JsonWriter; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.saveddata.TomSaveData; -import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; -import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.*; import com.hbm.util.CompatEnergyControl; import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; -public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IInfoProviderEC, IConfigurableMachine { +public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, IInfoProviderEC, IConfigurableMachine, IBufPacketReceiver { public int age = 0; public FluidTank[] tanks; @@ -52,8 +51,6 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS writer.name("I:outputTankSize").value(outputTankSize); } - - @Override public void updateEntity() { @@ -95,9 +92,7 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS this.subscribeToAllAround(tanks[0].getTankType(), this); this.sendFluidToAll(tanks[1], this); - data.setByte("timer", (byte) this.waterTimer); - packExtra(data); - INBTPacketReceiver.networkPack(this, data, 150); + sendStandard(150); } } @@ -106,10 +101,17 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS public void postConvert(int convert) { } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.tanks[0].readFromNBT(nbt, "0"); - this.tanks[1].readFromNBT(nbt, "1"); - this.waterTimer = nbt.getByte("timer"); + public void serialize(ByteBuf buf) { + this.tanks[0].serialize(buf); + this.tanks[1].serialize(buf); + buf.writeByte(this.waterTimer); + } + + @Override + public void deserialize(ByteBuf buf) { + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.waterTimer = buf.readByte(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenserPowered.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenserPowered.java index 9aabea820..2240477cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenserPowered.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenserPowered.java @@ -13,6 +13,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -98,11 +99,21 @@ public class TileEntityCondenserPowered extends TileEntityCondenser implements I } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.power = nbt.getLong("power"); - this.tanks[0].readFromNBT(nbt, "0"); - this.tanks[1].readFromNBT(nbt, "1"); - this.waterTimer = nbt.getByte("timer"); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); + this.tanks[0].serialize(buf); + this.tanks[1].serialize(buf); + buf.writeByte(this.waterTimer); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.waterTimer = buf.readByte(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index a1f55015b..26a075bda 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -56,14 +56,6 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.power = data.getLong("power"); - tanks[0].readFromNBT(data, "water"); - tanks[1].readFromNBT(data, "heavyWater"); - } - @Override public void serialize(ByteBuf buf) { super.serialize(buf); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java index c1d3bb893..9eacd6ed7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java @@ -10,7 +10,6 @@ import com.hbm.inventory.gui.GUIDiFurnace; import com.hbm.inventory.recipes.BlastFurnaceRecipes; import com.hbm.items.ModItems; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.CompatEnergyControl; @@ -18,6 +17,7 @@ import api.hbm.fluid.IFluidStandardSender; 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -230,11 +230,7 @@ public class TileEntityDiFurnace extends TileEntityMachinePolluting implements I MachineDiFurnace.updateBlockState(this.progress > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); } - NBTTagCompound data = new NBTTagCompound(); - data.setShort("time", (short) this.progress); - data.setShort("fuel", (short) this.fuel); - data.setByteArray("modes", new byte[] { (byte) sideFuel, (byte) sideUpper, (byte) sideLower }); - INBTPacketReceiver.networkPack(this, data, 15); + networkPackNT(15); if(markDirty) { this.markDirty(); @@ -243,10 +239,21 @@ public class TileEntityDiFurnace extends TileEntityMachinePolluting implements I } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.progress = nbt.getShort("time"); - this.fuel = nbt.getShort("fuel"); - byte[] modes = nbt.getByteArray("modes"); + public void serialize(ByteBuf buf) { + buf.writeShort(this.progress); + buf.writeShort(this.fuel); + buf.writeBytes(new byte[] { + this.sideFuel, + this.sideUpper, + this.sideLower}); + } + + @Override + public void deserialize(ByteBuf buf) { + this.progress = buf.readShort(); + this.fuel = buf.readShort(); + byte[] modes = new byte[3]; + buf.readBytes(modes); this.sideFuel = modes[0]; this.sideUpper = modes[1]; this.sideLower = modes[2]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index d091830b4..17798d41c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -247,13 +247,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe this.stat_z = buf.readInt(); } - @Override - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - - } - @Override public void handleButtonPacket(int value, int meta) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronDiode.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronDiode.java index d77c5339a..f9c89de10 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronDiode.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronDiode.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.tileentity.TileEntityTickingBase; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; @@ -25,7 +26,7 @@ public class TileEntityHadronDiode extends TileEntityTickingBase { if(age >= 20) { age = 0; - sendSides(); + this.networkPackNT(250); } } else { @@ -35,27 +36,18 @@ public class TileEntityHadronDiode extends TileEntityTickingBase { } } } - - public void sendSides() { - - NBTTagCompound data = new NBTTagCompound(); - + + @Override public void serialize(ByteBuf buf) { for(int i = 0; i < 6; i++) { - - if(sides[i] != null) - data.setInteger("" + i, sides[i].ordinal()); + buf.writeByte(sides[i].ordinal()); } - - this.networkPack(data, 250); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - + @Override public void deserialize(ByteBuf buf) { for(int i = 0; i < 6; i++) { - sides[i] = DiodeConfig.values()[nbt.getInteger("" + i)]; + sides[i] = DiodeConfig.values()[buf.readByte()]; } - + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } @@ -75,7 +67,7 @@ public class TileEntityHadronDiode extends TileEntityTickingBase { public void setConfig(int side, int config) { sides[side] = DiodeConfig.values()[config]; this.markDirty(); - sendSides(); + this.networkPackNT(250); } public static enum DiodeConfig { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java index f044f3fad..3fce746dc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java @@ -29,8 +29,8 @@ public class TileEntityHadronPower extends TileEntityLoadedBase implements IEner for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } - - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 15)); + + sendStandard(15); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index c1c830cf5..be1fb7fd6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -18,8 +18,8 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -27,13 +27,16 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { public int heat; public FluidTank[] tanks; @@ -54,14 +57,14 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPa this.tanks[0] = new FluidTank(Fluids.WATER, 16_000); this.tanks[1] = new FluidTank(Fluids.STEAM, 16_000 * 100); } + + ByteBuf buf = new PacketBuffer(Unpooled.buffer()); @Override public void updateEntity() { if(!worldObj.isRemote) { - NBTTagCompound data = new NBTTagCompound(); - if(!this.hasExploded) { this.setupTanks(); this.updateConnections(); @@ -72,23 +75,23 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPa if(light > 7 && TomSaveData.forWorld(worldObj).fire > 1e-5) { this.heat += ((maxHeat - heat) * 0.000005D); //constantly heat up 0.0005% of the remaining heat buffer for rampant but diminishing heating } - - data.setInteger("heat", lastHeat); - tanks[0].writeToNBT(data, "0"); + buf.writeInt(lastHeat); + + tanks[0].serialize(buf); this.isOn = false; this.tryConvert(); - tanks[1].writeToNBT(data, "1"); + tanks[1].serialize(buf); if(this.tanks[1].getFill() > 0) { this.sendFluid(); } } - data.setBoolean("exploded", this.hasExploded); - data.setBoolean("isOn", this.isOn); - data.setBoolean("muffled", this.muffled); - INBTPacketReceiver.networkPack(this, data, 25); + buf.writeBoolean(this.hasExploded); + buf.writeBoolean(this.muffled); + buf.writeBoolean(this.isOn); + sendStandard(25); } else { if(this.isOn) audioTime = 20; @@ -143,13 +146,19 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPa } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.hasExploded = nbt.getBoolean("exploded"); - this.muffled = nbt.getBoolean("muffled"); - this.heat = nbt.getInteger("heat"); - this.tanks[0].readFromNBT(nbt, "0"); - this.tanks[1].readFromNBT(nbt, "1"); - this.isOn = nbt.getBoolean("isOn"); + public void serialize(ByteBuf buf) { + buf.writeBytes(this.buf); + this.buf = new PacketBuffer(Unpooled.buffer()); + } + + @Override + public void deserialize(ByteBuf buf) { + this.heat = buf.readInt(); + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.hasExploded = buf.readBoolean(); + this.muffled = buf.readBoolean(); + this.isOn = buf.readBoolean(); } protected void tryPullHeat() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index 04d66dda3..65c2765df 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -13,8 +13,8 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -22,12 +22,15 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; -public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { public int heat; public FluidTank[] tanks; @@ -46,13 +49,14 @@ public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase impleme this.tanks[0] = new FluidTank(Fluids.WATER, 64_000); this.tanks[1] = new FluidTank(Fluids.STEAM, 64_000 * 100); } - + + ByteBuf buf = new PacketBuffer(Unpooled.buffer()); + @Override public void updateEntity() { if(!worldObj.isRemote) { - - NBTTagCompound data = new NBTTagCompound(); + this.setupTanks(); this.updateConnections(); this.tryPullHeat(); @@ -62,21 +66,22 @@ public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase impleme if(light > 7 && TomSaveData.forWorld(worldObj).fire > 1e-5) { this.heat += ((maxHeat - heat) * 0.000005D); //constantly heat up 0.0005% of the remaining heat buffer for rampant but diminishing heating } - - data.setInteger("heat", lastHeat); - tanks[0].writeToNBT(data, "0"); + buf.writeInt(lastHeat); + + tanks[0].serialize(buf); this.isOn = false; this.tryConvert(); - tanks[1].writeToNBT(data, "1"); + tanks[1].serialize(buf); if(this.tanks[1].getFill() > 0) { this.sendFluid(); } - data.setBoolean("isOn", this.isOn); - data.setBoolean("muffled", this.muffled); - INBTPacketReceiver.networkPack(this, data, 25); + buf.writeBoolean(this.isOn); + buf.writeBoolean(this.muffled); + sendStandard(25); + } else { if(this.isOn) audioTime = 20; @@ -131,12 +136,18 @@ public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase impleme } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.heat = nbt.getInteger("heat"); - this.tanks[0].readFromNBT(nbt, "0"); - this.tanks[1].readFromNBT(nbt, "1"); - this.isOn = nbt.getBoolean("isOn"); - this.muffled = nbt.getBoolean("muffled"); + public void serialize(ByteBuf buf) { + buf.writeBytes(this.buf); + this.buf = new PacketBuffer(Unpooled.buffer()); + } + + @Override + public void deserialize(ByteBuf buf) { + this.heat = buf.readInt(); + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.isOn = buf.readBoolean(); + this.muffled = buf.readBoolean(); } protected void tryPullHeat() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java index 7c8a19797..72e216162 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java @@ -3,7 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -12,12 +12,13 @@ import api.hbm.tile.IHeatSource; 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.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IHeatSource, IEnergyReceiverMK2, INBTPacketReceiver, IInfoProviderEC { +public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IHeatSource, IEnergyReceiverMK2, IBufPacketReceiver, IInfoProviderEC { public long power; public int heatEnergy; @@ -47,12 +48,7 @@ public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IH this.isOn = true; } - NBTTagCompound data = new NBTTagCompound(); - data.setByte("s", (byte) this.setting); - data.setInteger("h", this.heatEnergy); - data.setBoolean("o", isOn); - data.setBoolean("muffled", muffled); - INBTPacketReceiver.networkPack(this, data, 25); + sendStandard(25); } else { if(isOn) { @@ -103,11 +99,19 @@ public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IH } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.setting = nbt.getByte("s"); - this.heatEnergy = nbt.getInteger("h"); - this.isOn = nbt.getBoolean("o"); - this.muffled = nbt.getBoolean("muffled"); + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.muffled); + buf.writeByte(this.setting); + buf.writeInt(this.heatEnergy); + buf.writeBoolean(this.isOn); + } + + @Override + public void deserialize(ByteBuf buf) { + this.muffled = buf.readBoolean(); + this.setting = buf.readByte(); + this.heatEnergy = buf.readInt(); + this.isOn = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 1e9d5885d..3dee8b92a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -10,7 +10,6 @@ import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.gui.GUIHeaterHeatex; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,6 +17,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, INBTPacketReceiver, IFluidStandardTransceiver, IGUIProvider, IControlReceiver { +public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, IFluidStandardTransceiver, IGUIProvider, IControlReceiver { public FluidTank[] tanks; public int amountToCool = 1; @@ -56,28 +56,30 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe this.heatEnergy *= 0.999; - NBTTagCompound data = new NBTTagCompound(); - tanks[0].writeToNBT(data, "0"); - this.tryConvert(); - tanks[1].writeToNBT(data, "1"); - data.setInteger("heat", heatEnergy); - data.setInteger("toCool", amountToCool); - data.setInteger("delay", tickDelay); - INBTPacketReceiver.networkPack(this, data, 25); + networkPackNT(25); for(DirPos pos : getConPos()) { if(this.tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - tanks[0].readFromNBT(nbt, "0"); - tanks[1].readFromNBT(nbt, "1"); - this.heatEnergy = nbt.getInteger("heat"); - this.amountToCool = nbt.getInteger("toCool"); - this.tickDelay = nbt.getInteger("delay"); + public void serialize(ByteBuf buf) { + tanks[0].serialize(buf); + tanks[1].serialize(buf); + buf.writeInt(this.heatEnergy); + buf.writeInt(this.amountToCool); + buf.writeInt(this.tickDelay); + } + + @Override + public void deserialize(ByteBuf buf) { + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + this.heatEnergy = buf.readInt(); + this.amountToCool = buf.readInt(); + this.tickDelay = buf.readInt(); } protected void setupTanks() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 948022a43..50be9bd1b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -133,19 +133,6 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im steam.deserialize(buf); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.progress = nbt.getIntArray("progress"); - this.maxProgress = nbt.getIntArray("maxProgress"); - this.isProgressing = nbt.getBoolean("isProgressing"); - - water.readFromNBT(nbt, "w"); - steam.readFromNBT(nbt, "s"); - } - private int getWaterRequired() { return 1000 / this.speed; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 3ec39159b..a9f0f903d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -11,13 +11,14 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.block.material.Material; @@ -29,7 +30,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; -public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardReceiver { +public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardReceiver { public static final HashSet acceptedFuels = new HashSet(); @@ -174,12 +175,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IN } } - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("isOn", isOn); - data.setFloat("yaw", this.rotationYaw); - data.setFloat("pitch", this.rotationPitch); - tank.writeToNBT(data, "t"); - INBTPacketReceiver.networkPack(this, data, 100); + sendStandard(100); } else { this.lastSpin = this.spin; @@ -280,12 +276,20 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IN } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.isOn = nbt.getBoolean("isOn"); - this.syncYaw = nbt.getFloat("yaw"); - this.syncPitch = nbt.getFloat("pitch"); + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.isOn); + buf.writeFloat(this.syncYaw); + buf.writeFloat(this.syncPitch); + this.tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + this.isOn = buf.readBoolean(); + this.syncYaw = buf.readFloat(); + this.syncPitch = buf.readFloat(); this.turnProgress = 3; //use 3-ply for extra smoothness - this.tank.readFromNBT(nbt, "t"); + this.tank.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java index 9a6dc8f21..5b2f427d7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java @@ -46,9 +46,9 @@ public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFlu if(worldObj.getTotalWorldTime() % 20 == 0) { for(DirPos pos : getConPos()) this.trySubscribe(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } - - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50)); - + + sendStandard(50); + if(tank.getFill() > 0) { if(tank.getTankType().hasTrait(FT_Amat.class)) { worldObj.newExplosion(null, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 10F, true, true); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java index eb22b3289..f5799e1ed 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java @@ -10,20 +10,23 @@ import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { public FluidTank input; public FluidTank output; @@ -41,7 +44,9 @@ public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements private long fissureScanTime; private AudioWrapper audio; - + + ByteBuf buf = new PacketBuffer(Unpooled.buffer()); + @Override public void updateEntity() { @@ -66,21 +71,20 @@ public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements } } } - - NBTTagCompound data = new NBTTagCompound(); - input.writeToNBT(data, "i"); + + input.serialize(buf); heatFluid(); - output.writeToNBT(data, "o"); + output.serialize(buf); if(output.getFill() > 0) { for(DirPos pos : getConPos()) { this.sendFluid(output, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } - data.setInteger("heat", this.getTotalHeat()); - INBTPacketReceiver.networkPack(this, data, 150); + buf.writeInt(this.getTotalHeat()); + sendStandard(150); } else { @@ -182,11 +186,17 @@ public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements } @Override - public void networkUnpack(NBTTagCompound nbt) { - input.readFromNBT(nbt, "i"); - output.readFromNBT(nbt, "o"); - - this.bufferedHeat = nbt.getInteger("heat"); + public void serialize(ByteBuf buf) { + buf.writeBytes(this.buf); + this.buf = new PacketBuffer(Unpooled.buffer()); + } + + @Override + public void deserialize(ByteBuf buf) { + input.deserialize(buf); + output.deserialize(buf); + + this.bufferedHeat = buf.readInt(); } private void updateConnections() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java index 7996973c8..4c844422d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java @@ -222,15 +222,18 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement return new int[] { 3, 4, 5, 6 }; } + // o7 + /* @Override public void networkUnpack(NBTTagCompound nbt) { super.networkUnpack(nbt); - + this.power = nbt.getLong("power"); this.spin = nbt.getInteger("spin"); this.burn = nbt.getIntArray("burn"); this.hasRTG = nbt.getBoolean("hasRTG"); } + */ public int getPowerFromFuel(boolean con) { FluidType type = tanks[1].getTankType(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index e9751c820..4ddbe6acd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -14,7 +14,6 @@ import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; @@ -35,7 +34,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineMixer extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { public long power; public static final long maxPower = 10_000; @@ -162,20 +161,6 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB for(int i = 0; i < tanks.length; i++) tanks[i].deserialize(buf); } - - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - this.processTime = nbt.getInteger("processTime"); - this.progress = nbt.getInteger("progress"); - this.recipeIndex = nbt.getInteger("recipe"); - this.wasOn = nbt.getBoolean("wasOn"); - for(int i = 0; i < 3; i++) { - tanks[i].readFromNBT(nbt, i + ""); - } - } public boolean canProcess() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index 655ce48be..6bea61bca 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -175,24 +175,6 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU this.turnProgress = 2; } - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.speed = nbt.getInteger("speed"); - this.burnTime = nbt.getInteger("burnTime"); - this.syncPress = nbt.getInteger("press"); - - if(nbt.hasKey("stack")) { - NBTTagCompound stack = nbt.getCompoundTag("stack"); - this.syncStack = ItemStack.loadItemStackFromNBT(stack); - } else { - this.syncStack = null; - } - - this.turnProgress = 2; - } - public boolean canProcess() { if(burnTime < 200) return false; if(slots[1] == null || slots[2] == null) return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java index 653064658..5c4b60c55 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -9,20 +9,19 @@ import com.hbm.blocks.ModBlocks; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; -import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.*; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine { public static final HashSet validBlocks = new HashSet(); @@ -50,7 +49,7 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp public static int groundDepth = 4; public static int steamSpeed = 1_000; public static int electricSpeed = 10_000; - + @Override public String getConfigName() { return "waterpump"; @@ -91,9 +90,8 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp this.isOn = true; this.operate(); } - - NBTTagCompound data = this.getSync(); - INBTPacketReceiver.networkPack(this, data, 150); + + sendStandard(150); } else { @@ -133,20 +131,19 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp return validBlocks >= invalidBlocks; // valid block count has to be at least 50% } - - protected NBTTagCompound getSync() { - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("isOn", isOn); - data.setBoolean("onGround", onGround); - water.writeToNBT(data, "w"); - return data; + + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.isOn); + buf.writeBoolean(this.onGround); + water.serialize(buf); } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.isOn = nbt.getBoolean("isOn"); - this.onGround = nbt.getBoolean("onGround"); - water.readFromNBT(nbt, "w"); + public void deserialize(ByteBuf buf) { + this.isOn = buf.readBoolean(); + this.onGround = buf.readBoolean(); + water.deserialize(buf); } protected abstract boolean canOperate(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java index 288193818..39835837b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java @@ -5,6 +5,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; public class TileEntityMachinePumpElectric extends TileEntityMachinePumpBase implements IEnergyReceiverMK2 { @@ -28,17 +29,17 @@ public class TileEntityMachinePumpElectric extends TileEntityMachinePumpBase imp super.updateEntity(); } - - protected NBTTagCompound getSync() { - NBTTagCompound data = super.getSync(); - data.setLong("power", power); - return data; + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(this.power); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - this.power = nbt.getLong("power"); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java index d935cfbf4..fff843d0f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java @@ -4,6 +4,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.fauxpointtwelve.DirPos; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; public class TileEntityMachinePumpSteam extends TileEntityMachinePumpBase { @@ -47,19 +48,19 @@ public class TileEntityMachinePumpSteam extends TileEntityMachinePumpBase { public FluidTank[] getReceivingTanks() { return new FluidTank[] {steam}; } - - protected NBTTagCompound getSync() { - NBTTagCompound data = super.getSync(); - steam.writeToNBT(data, "s"); - lps.writeToNBT(data, "l"); - return data; + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + steam.serialize(buf); + lps.serialize(buf); } @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - steam.readFromNBT(nbt, "s"); - lps.readFromNBT(nbt, "l"); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + steam.deserialize(buf); + lps.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 0eb956fe3..ef8625264 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -215,7 +215,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I screen.refZ = zCoord; screen.range = this.getRange(); screen.linked = true; - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, pos.getX(), pos.getY(), pos.getZ(), 25)); + sendStandard(25); } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarScreen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarScreen.java index ba08f0d82..c08bfc9f3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarScreen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarScreen.java @@ -3,19 +3,16 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import api.hbm.entity.RadarEntry; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import com.hbm.tileentity.TileEntityLoadedBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineRadarScreen extends TileEntity implements IBufPacketReceiver { +public class TileEntityMachineRadarScreen extends TileEntityLoadedBase implements IBufPacketReceiver { public List entries = new ArrayList(); public int refX; @@ -28,16 +25,12 @@ public class TileEntityMachineRadarScreen extends TileEntity implements IBufPack public void updateEntity() { if(!worldObj.isRemote) { - this.networkPackNT(100); + this.sendStandard(100); entries.clear(); this.linked = false; } } - public void networkPackNT(int range) { - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - @Override public void serialize(ByteBuf buf) { buf.writeBoolean(linked); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 71caf6423..619574436 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -11,14 +11,12 @@ import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMold; import com.hbm.items.machine.ItemScraps; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.util.fauxpointtwelve.DirPos; -import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -32,7 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; //god thank you bob for this base class -public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor, ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver, IInventory { +public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor, ISidedInventory, IFluidStandardTransceiver, IBufPacketReceiver, IInventory { public FluidTank water; public FluidTank steam; @@ -110,12 +108,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase } } - NBTTagCompound data = new NBTTagCompound(); - - water.writeToNBT(data, "w"); - steam.writeToNBT(data, "s"); - - this.networkPack(data, 150); + sendStandard(150); } @@ -254,16 +247,14 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase return new GUIMachineStrandCaster(player.inventory, this); } - public void networkPack(NBTTagCompound nbt, int range) { - if(!worldObj.isRemote) - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + @Override public void serialize(ByteBuf buf) { + water.serialize(buf); + steam.serialize(buf); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - water.readFromNBT(nbt, "w"); - steam.readFromNBT(nbt, "s"); - + @Override public void deserialize(ByteBuf buf) { + water.deserialize(buf); + steam.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java index 0784cd130..2fc9636d8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java @@ -3,12 +3,14 @@ package com.hbm.tileentity.machine; import java.util.Iterator; import java.util.List; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energymk2.IEnergyReceiverMK2; +import com.hbm.util.BufferUtil; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.ReflectionHelper; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityTracker; @@ -29,7 +31,7 @@ import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.IChunkProvider; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTeleporter extends TileEntityLoadedBase implements IEnergyReceiverMK2, INBTPacketReceiver { +public class TileEntityMachineTeleporter extends TileEntityLoadedBase implements IEnergyReceiverMK2, IBufPacketReceiver { public long power = 0; public int targetX = -1; @@ -55,10 +57,7 @@ public class TileEntityMachineTeleporter extends TileEntityLoadedBase implements } } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setIntArray("target", new int[] {targetX, targetY, targetZ, targetDim}); - INBTPacketReceiver.networkPack(this, data, 15); + sendStandard(15); } else { @@ -72,9 +71,15 @@ public class TileEntityMachineTeleporter extends TileEntityLoadedBase implements } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.power = nbt.getLong("power"); - int[] target = nbt.getIntArray("target"); + public void serialize(ByteBuf buf) { + buf.writeLong(power); + BufferUtil.writeIntArray(buf, new int[] {targetX, targetY, targetZ, targetDim}); + } + + @Override + public void deserialize(ByteBuf buf) { + this.power = buf.readLong(); + int[] target = BufferUtil.readIntArray(buf); this.targetX = target[0]; this.targetY = target[1]; this.targetZ = target[2]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRadioRec.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRadioRec.java index 7c1f7ea37..817a57adb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRadioRec.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRadioRec.java @@ -1,20 +1,22 @@ package com.hbm.tileentity.machine; import com.hbm.interfaces.IControlReceiver; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.network.RTTYSystem; import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; +import com.hbm.util.BufferUtil; import com.hbm.util.NoteBuilder; import com.hbm.util.NoteBuilder.Instrument; import com.hbm.util.NoteBuilder.Note; import com.hbm.util.NoteBuilder.Octave; import com.hbm.util.Tuple.Triplet; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -public class TileEntityRadioRec extends TileEntity implements INBTPacketReceiver, IControlReceiver { +public class TileEntityRadioRec extends TileEntity implements IBufPacketReceiver, IControlReceiver { public String channel = ""; public boolean isOn = false; @@ -49,17 +51,20 @@ public class TileEntityRadioRec extends TileEntity implements INBTPacketReceiver } } - NBTTagCompound data = new NBTTagCompound(); - data.setString("channel", channel); - data.setBoolean("isOn", isOn); - INBTPacketReceiver.networkPack(this, data, 15); + sendStandard(15); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - channel = nbt.getString("channel"); - isOn = nbt.getBoolean("isOn"); + public void serialize(ByteBuf buf) { + BufferUtil.writeString(buf, this.channel); + buf.writeBoolean(this.isOn); + } + + @Override + public void deserialize(ByteBuf buf) { + this.channel = BufferUtil.readString(buf); + this.isOn = buf.readBoolean(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java index f0b6a5500..84852dfc3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java @@ -10,15 +10,17 @@ import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCraftingAuto; +import com.hbm.util.BufferUtil; import com.hbm.util.ItemStackUtil; import api.hbm.tile.IHeatSource; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Blocks; @@ -27,7 +29,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; @@ -144,24 +146,8 @@ public class TileEntitySawmill extends TileEntityMachineBase { this.overspeed = 0; this.warnCooldown = 0; } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("heat", heat); - data.setInteger("progress", progress); - data.setBoolean("hasBlade", hasBlade); - NBTTagList list = new NBTTagList(); - for(int i = 0; i < slots.length; i++) { - if(slots[i] != null) { - NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setByte("slot", (byte) i); - slots[i].writeToNBT(nbt1); - list.appendTag(nbt1); - } - } - data.setTag("items", list); - - INBTPacketReceiver.networkPack(this, data, 150); + networkPackNT(150); this.heat = 0; @@ -180,20 +166,28 @@ public class TileEntitySawmill extends TileEntityMachineBase { } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.heat = nbt.getInteger("heat"); - this.progress = nbt.getInteger("progress"); - this.hasBlade = nbt.getBoolean("hasBlade"); - - NBTTagList list = nbt.getTagList("items", 10); + public void serialize(ByteBuf buf) { + buf.writeInt(heat); + buf.writeInt(progress); + buf.writeBoolean(hasBlade); - slots = new ItemStack[3]; - for(int i = 0; i < list.tagCount(); i++) { - NBTTagCompound nbt1 = list.getCompoundTagAt(i); - byte b0 = nbt1.getByte("slot"); - if(b0 >= 0 && b0 < slots.length) { - slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); - } + ByteBuf itemBuf = new PacketBuffer(Unpooled.buffer()); + + for (ItemStack slot : slots) { + BufferUtil.writeItemStack(buf, slot); + } + + buf.writeBytes(itemBuf); + } + + @Override + public void deserialize(ByteBuf buf) { + this.heat = buf.readInt(); + this.progress = buf.readInt(); + this.hasBlade = buf.readBoolean(); + + for(int i = 0; i < slots.length; i++) { + slots[i] = BufferUtil.readItemStack(buf); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index c2803d6c6..7d70c7295 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -5,13 +5,10 @@ import java.util.HashSet; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidStandardTransceiver; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -56,7 +53,7 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui heat = 0; - networkPackNT(15); + sendStandard(15); } else { //a delayed queue of mirror positions because we can't expect the boiler to always tick first @@ -121,10 +118,6 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui public FluidTank[] getAllTanks() { return new FluidTank[] { water, steam }; } - - public void networkPackNT(int range) { - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } @Override public void serialize(ByteBuf buf) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java index c64a83cec..f921d04ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java @@ -4,6 +4,7 @@ import com.hbm.tileentity.TileEntityTickingBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -28,7 +29,7 @@ public class TileEntitySolarMirror extends TileEntityTickingBase { if(!worldObj.isRemote) { if(worldObj.getTotalWorldTime() % 20 == 0) - sendUpdate(); + this.networkPackNT(200); if(tY < yCoord) { isOn = false; @@ -64,22 +65,18 @@ public class TileEntitySolarMirror extends TileEntityTickingBase { } } - public void sendUpdate() { - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("posX", tX); - data.setInteger("posY", tY); - data.setInteger("posZ", tZ); - data.setBoolean("isOn", isOn); - this.networkPack(data, 200); + @Override public void serialize(ByteBuf buf) { + buf.writeInt(this.tX); + buf.writeInt(this.tY); + buf.writeInt(this.tZ); + buf.writeBoolean(this.isOn); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - tX = nbt.getInteger("posX"); - tY = nbt.getInteger("posY"); - tZ = nbt.getInteger("posZ"); - isOn = nbt.getBoolean("isOn"); + @Override public void deserialize(ByteBuf buf) { + this.tX = buf.readInt(); + this.tY = buf.readInt(); + this.tZ = buf.readInt(); + this.isOn = buf.readBoolean(); } public void setTarget(int x, int y, int z) { @@ -87,7 +84,7 @@ public class TileEntitySolarMirror extends TileEntityTickingBase { tY = y; tZ = z; this.markDirty(); - this.sendUpdate(); + this.networkPackNT(200); } public void readFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index a09c5747e..508786fec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -9,8 +9,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,13 +18,16 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine { public long powerBuffer; @@ -66,7 +69,9 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner writer.name("I:ldsCap").value(ldsCap); writer.name("D:efficiency").value(efficiency); } - + + ByteBuf buf = new PacketBuffer(Unpooled.buffer()); + @Override public void updateEntity() { @@ -76,9 +81,8 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner tanks[0].setTankType(Fluids.STEAM); tanks[1].setTankType(Fluids.SPENTSTEAM); - - NBTTagCompound data = new NBTTagCompound(); - tanks[0].writeToNBT(data, "s"); + + tanks[0].serialize(buf); FT_Coolable trait = tanks[0].getTankType().getTrait(FT_Coolable.class); double eff = trait.getEfficiency(CoolingType.TURBINE) * efficiency; @@ -105,9 +109,9 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner this.worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.steamEngineOperate", getVolume(1.0F), 0.5F + (acceleration / 80F)); } - data.setLong("power", this.powerBuffer); - data.setFloat("rotor", this.rotor); - tanks[1].writeToNBT(data, "w"); + buf.writeLong(this.powerBuffer); + buf.writeFloat(this.rotor); + tanks[1].serialize(buf); for(DirPos pos : getConPos()) { if(this.powerBuffer > 0) this.tryProvide(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); @@ -115,7 +119,7 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } - INBTPacketReceiver.networkPack(this, data, 150); + sendStandard(150); } else { this.lastRotor = this.rotor; @@ -139,7 +143,7 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord + 1, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot) }; } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -207,11 +211,17 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.powerBuffer = nbt.getLong("power"); - this.syncRotor = nbt.getFloat("rotor"); + public void serialize(ByteBuf buf) { + buf.writeBytes(this.buf); + this.buf = new PacketBuffer(Unpooled.buffer()); + } + + @Override + public void deserialize(ByteBuf buf) { + this.powerBuffer = buf.readLong(); + this.syncRotor = buf.readFloat(); this.turnProgress = 3; //use 3-ply for extra smoothness - this.tanks[0].readFromNBT(nbt, "s"); - this.tanks[1].readFromNBT(nbt, "w"); + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java index d59a5e933..8c86ca568 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java @@ -8,8 +8,8 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityCog; import com.hbm.lib.Library; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -17,12 +17,13 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityStirling extends TileEntityLoadedBase implements INBTPacketReceiver, IEnergyProviderMK2, IConfigurableMachine { +public class TileEntityStirling extends TileEntityLoadedBase implements IBufPacketReceiver, IEnergyProviderMK2, IConfigurableMachine { public long powerBuffer; public int heat; @@ -88,11 +89,7 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack this.warnCooldown = 0; } - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", powerBuffer); - data.setInteger("heat", heat); - data.setBoolean("hasCog", hasCog); - INBTPacketReceiver.networkPack(this, data, 150); + sendStandard(150); if(hasCog) { for(DirPos pos : getConPos()) { @@ -143,10 +140,17 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.powerBuffer = nbt.getLong("power"); - this.heat = nbt.getInteger("heat"); - this.hasCog = nbt.getBoolean("hasCog"); + public void serialize(ByteBuf buf) { + buf.writeLong(this.powerBuffer); + buf.writeInt(this.heat); + buf.writeBoolean(this.hasCog); + } + + @Override + public void deserialize(ByteBuf buf) { + this.powerBuffer = buf.readLong(); + this.heat = buf.readInt(); + this.hasCog = buf.readBoolean(); } protected void tryPullHeat() { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 37f9f4fb0..2579c61bd 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -5,7 +5,7 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.CrackingRecipes; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -13,11 +13,12 @@ import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { public FluidTank[] tanks; @@ -52,22 +53,23 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl if(tanks[i].getFill() > 0) this.sendFluid(tanks[i], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } - - NBTTagCompound data = new NBTTagCompound(); - for(int i = 0; i < 5; i++) - tanks[i].writeToNBT(data, "tank" + i); - - INBTPacketReceiver.networkPack(this, data, 50); + sendStandard(25); } this.worldObj.theProfiler.endSection(); } } @Override - public void networkUnpack(NBTTagCompound nbt) { + public void serialize(ByteBuf buf) { for(int i = 0; i < 5; i++) - tanks[i].readFromNBT(nbt, "tank" + i); + tanks[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + for(int i = 0; i < 5; i++) + tanks[i].deserialize(buf); } private void updateConnections() { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index a95a94b68..7196e9b31 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -93,14 +93,6 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase im for(int i = 0; i < 4; i++) tanks[i].deserialize(buf); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.power = nbt.getLong("power"); - for(int i = 0; i < 4; i++) tanks[i].readFromNBT(nbt, "" + i); - } - private void reform() { Triplet out = ReformingRecipes.getOutput(tanks[0].getTankType()); diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index 9052dd9fc..a96995673 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -69,7 +69,7 @@ public class TileEntityMachineFractionTower extends TileEntityLoadedBase impleme this.sendFluid(); - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50)); + sendStandard(50); } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java index b4745b170..0463be416 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java @@ -40,9 +40,9 @@ public abstract class TileEntityPileBase extends TileEntity { Vec3 neutronVector = Vec3.createVectorHelper(1, 0, 0); - neutronVector.rotateAroundX((float)(Math.PI * 2D * worldObj.rand.nextDouble())); - neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); neutronVector.rotateAroundZ((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + neutronVector.rotateAroundY((float)(Math.PI * 2D * worldObj.rand.nextDouble())); + neutronVector.rotateAroundX((float)(Math.PI * 2D * worldObj.rand.nextDouble())); new PileNeutronStream(node, neutronVector, flux); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index befccb90d..a1d770a95 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -6,14 +6,11 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.CompatHandler; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.machine.ItemRBMKRod; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; -import com.hbm.tileentity.INBTPacketReceiver; import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -30,7 +27,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.List; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityCraneConsole extends TileEntity implements INBTPacketReceiver, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityCraneConsole extends TileEntity implements IBufPacketReceiver, SimpleComponent, CompatHandler.OCComponent { public int centerX; public int centerY; @@ -165,26 +162,8 @@ public class TileEntityCraneConsole extends TileEntity implements INBTPacketRece this.loadedHeat = 0; this.loadedEnrichment = 0; } - - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setBoolean("crane", setUpCrane); - - if(setUpCrane) { //no need to send any of this if there's NO FUCKING CRANE THERE - nbt.setInteger("centerX", centerX); - nbt.setInteger("centerY", centerY); - nbt.setInteger("centerZ", centerZ); - nbt.setInteger("spanF", spanF); - nbt.setInteger("spanB", spanB); - nbt.setInteger("spanL", spanL); - nbt.setInteger("spanR", spanR); - nbt.setInteger("height", height); - nbt.setDouble("posFront", posFront); - nbt.setDouble("posLeft", posLeft); - nbt.setBoolean("loaded", this.hasItemLoaded()); - nbt.setDouble("loadedHeat", loadedHeat); - nbt.setDouble("loadedEnrichment", loadedEnrichment); - } - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250)); + + sendStandard(250); } } @@ -244,27 +223,49 @@ public class TileEntityCraneConsole extends TileEntity implements INBTPacketRece } @Override - public void networkUnpack(NBTTagCompound nbt) { - + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.setUpCrane); + + if(this.setUpCrane) { //no need to send any of this if there's NO FUCKING CRANE THERE + buf.writeInt(this.centerX); + buf.writeInt(this.centerY); + buf.writeInt(this.centerZ); + buf.writeInt(this.spanF); + buf.writeInt(this.spanB); + buf.writeInt(this.spanL); + buf.writeInt(this.spanR); + buf.writeInt(this.height); + buf.writeDouble(this.posFront); + buf.writeDouble(this.posLeft); + buf.writeBoolean(this.hasItemLoaded()); + buf.writeDouble(this.loadedHeat); + buf.writeDouble(this.loadedEnrichment); + } + } + + @Override + public void deserialize(ByteBuf buf) { lastPosFront = posFront; lastPosLeft = posLeft; lastProgress = progress; - - this.setUpCrane = nbt.getBoolean("crane"); - this.centerX = nbt.getInteger("centerX"); - this.centerY = nbt.getInteger("centerY"); - this.centerZ = nbt.getInteger("centerZ"); - this.spanF = nbt.getInteger("spanF"); - this.spanB = nbt.getInteger("spanB"); - this.spanL = nbt.getInteger("spanL"); - this.spanR = nbt.getInteger("spanR"); - this.height = nbt.getInteger("height"); - this.posFront = nbt.getDouble("posFront"); - this.posLeft = nbt.getDouble("posLeft"); - this.hasLoaded = nbt.getBoolean("loaded"); - this.posLeft = nbt.getDouble("posLeft"); - this.loadedHeat = nbt.getDouble("loadedHeat"); - this.loadedEnrichment = nbt.getDouble("loadedEnrichment"); + + this.setUpCrane = buf.readBoolean(); + if (this.setUpCrane) { + this.centerX = buf.readInt(); + this.centerY = buf.readInt(); + this.centerZ = buf.readInt(); + this.spanF = buf.readInt(); + this.spanB = buf.readInt(); + this.spanL = buf.readInt(); + this.spanR = buf.readInt(); + this.height = buf.readInt(); + this.posFront = buf.readDouble(); + this.posLeft = buf.readDouble(); + this.hasLoaded = buf.readBoolean(); + this.posLeft = buf.readDouble(); + this.loadedHeat = buf.readDouble(); + this.loadedEnrichment = buf.readDouble(); + } } public void setTarget(int x, int y, int z) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 1dd976ed4..53526b9bc 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -9,11 +9,9 @@ import com.hbm.entity.effect.EntitySpear; import com.hbm.entity.projectile.EntityRBMKDebris; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.neutron.NeutronNodeWorld; -import com.hbm.handler.neutron.RBMKNeutronHandler; import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.saveddata.TomSaveData; import com.hbm.tileentity.IBufPacketReceiver; @@ -119,7 +117,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements coolPassively(); this.worldObj.theProfiler.endSection(); - this.networkPackNT(trackingRange()); + this.sendStandard(trackingRange()); } } @@ -280,13 +278,8 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements nbt.setInteger("steam", this.steam); } - public void networkPackNT(int range) { - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - @Override public void serialize(ByteBuf buf) { - buf.writeBoolean(this.muffled); buf.writeDouble(this.heat); buf.writeInt(this.water); buf.writeInt(this.steam); @@ -294,7 +287,6 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements @Override public void deserialize(ByteBuf buf) { - this.muffled = buf.readBoolean(); this.heat = buf.readDouble(); this.water = buf.readInt(); this.steam = buf.readInt(); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 8fa2d7317..0ebc3d3dc 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -1,15 +1,11 @@ package com.hbm.tileentity.machine.rbmk; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fluids.FluidTank; /** * Base class for RBMK components that have GUI slots and thus have to handle @@ -124,19 +120,6 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase return new int[] {}; } - public int getGaugeScaled(int i, FluidTank tank) { - return tank.getFluidAmount() * i / tank.getCapacity(); - } - - public void networkPack(NBTTagCompound nbt, int range) { - - if(!worldObj.isRemote) - PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - - public void handleButtonPacket(int value, int meta) { - } - @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java index fc1451df5..acdfb8e7e 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java @@ -70,7 +70,7 @@ public class TileEntityFileCabinet extends TileEntityCrateBase implements IGUIPr } else timer = 0; - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 25)); + sendStandard(25); } else { this.prevLowerExtent = lowerExtent; this.prevUpperExtent = upperExtent; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 6db2f555f..dd80a4875 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -3,11 +3,13 @@ package com.hbm.tileentity.machine.storage; import com.hbm.inventory.container.ContainerMassStorage; import com.hbm.inventory.gui.GUIMassStorage; import com.hbm.items.ModItems; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IControlReceiverFilter; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -16,7 +18,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPacketReceiver, IControlReceiverFilter { +public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPacketReceiver, IControlReceiverFilter { private int stack = 0; public boolean output = false; @@ -79,28 +81,30 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa if(slots[2] == null) { slots[2] = slots[1].copy(); slots[2].stackSize = amount; - this.stack -= amount; } else { amount = Math.min(amount, slots[2].getMaxStackSize() - slots[2].stackSize); slots[2].stackSize += amount; - this.stack -= amount; } + this.stack -= amount; } } - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("stack", getStockpile()); - data.setBoolean("output", output); - if(slots[1] != null) slots[1].writeToNBT(data); - INBTPacketReceiver.networkPack(this, data, 15); + + sendStandard(15); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.stack = nbt.getInteger("stack"); - this.output = nbt.getBoolean("output"); - this.type = ItemStack.loadItemStackFromNBT(nbt); + public void serialize(ByteBuf buf) { + buf.writeInt(this.stack); + buf.writeBoolean(this.output); + BufferUtil.writeItemStack(buf, this.type); + } + + @Override + public void deserialize(ByteBuf buf) { + this.stack = buf.readInt(); + this.output = buf.readBoolean(); + this.type = BufferUtil.readItemStack(buf); } public int getCapacity() { @@ -180,12 +184,11 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa if(slots[2] == null) { slots[2] = slots[1].copy(); slots[2].stackSize = amount; - this.stack -= amount; } else { amount = Math.min(amount, slots[2].getMaxStackSize() - slots[2].stackSize); slots[2].stackSize += amount; - this.stack -= amount; } + this.stack -= amount; } if(data.hasKey("toggle")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 280c16fd0..446d4bf6e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -10,14 +10,15 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIDroneCrate; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BufferUtil; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -27,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver { +public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver { public FluidTank tank; @@ -82,26 +83,31 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP (nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x00ffff); } - - - NBTTagCompound data = new NBTTagCompound(); - data.setIntArray("pos", new int[] {nextX, nextY, nextZ}); - data.setBoolean("mode", sendingMode); - data.setBoolean("type", itemType); - tank.writeToNBT(data, "t"); - INBTPacketReceiver.networkPack(this, data, 25); + networkPackNT(25); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - int[] pos = nbt.getIntArray("pos"); + public void serialize(ByteBuf buf) { + BufferUtil.writeIntArray(buf, new int[] { + this.nextX, + this.nextY, + this.nextZ + }); + buf.writeBoolean(this.sendingMode); + buf.writeBoolean(this.itemType); + tank.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + int[] pos = BufferUtil.readIntArray(buf); this.nextX = pos[0]; this.nextY = pos[1]; this.nextZ = pos[2]; - this.sendingMode = nbt.getBoolean("mode"); - this.itemType = nbt.getBoolean("type"); - tank.readFromNBT(nbt, "t"); + this.sendingMode = buf.readBoolean(); + this.itemType = buf.readBoolean(); + tank.deserialize(buf); } protected void loadItems(EntityDeliveryDrone drone) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java index faa21f615..9d4948175 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java @@ -9,15 +9,16 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.container.ContainerDroneRequester; import com.hbm.inventory.gui.GUIDroneRequester; import com.hbm.module.ModulePatternMatcher; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.network.RequestNetwork.PathNode; import com.hbm.tileentity.network.RequestNetwork.RequestNode; import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -27,7 +28,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; -public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer implements INBTPacketReceiver, IGUIProvider, IControlReceiverFilter { +public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer implements IBufPacketReceiver, IGUIProvider, IControlReceiverFilter { public ModulePatternMatcher matcher; @@ -46,16 +47,17 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer super.updateEntity(); if(!worldObj.isRemote) { - - NBTTagCompound data = new NBTTagCompound(); - this.matcher.writeToNBT(data); - INBTPacketReceiver.networkPack(this, data, 15); + + sendStandard(15); } } - @Override - public void networkUnpack(NBTTagCompound nbt) { - this.matcher.readFromNBT(nbt); + @Override public void serialize(ByteBuf buf) { + this.matcher.serialize(buf); + } + + @Override public void deserialize(ByteBuf buf) { + this.matcher.deserialize(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java index cb08c5bb8..4af12a1ab 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java @@ -39,7 +39,7 @@ public class TileEntityDroneWaypoint extends TileEntity implements IBufPacketRec } } - PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 15)); + sendStandard(15); } else { BlockPos pos = getCoord(dir); if(nextY != -1 && worldObj.getTotalWorldTime() % 2 == 0) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java index 26d6dec14..789f0a96d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java @@ -6,14 +6,16 @@ import java.util.List; import com.hbm.handler.CompatHandler; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.gui.GuiScreenRadioTelex; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; +import com.hbm.util.BufferUtil; import com.hbm.util.ItemStackUtil; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; @@ -30,7 +32,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiver, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityRadioTelex extends TileEntity implements IBufPacketReceiver, IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { public static final int lineWidth = 33; public String txChannel = ""; @@ -130,28 +132,32 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv } } - NBTTagCompound data = new NBTTagCompound(); - for(int i = 0; i < 5; i++) { - data.setString("tx" + i, txBuffer[i]); - data.setString("rx" + i, rxBuffer[i]); - } - data.setString("txChan", txChannel); - data.setString("rxChan", rxChannel); - data.setInteger("sending", sendingChar); - INBTPacketReceiver.networkPack(this, data, 16); + sendStandard(16); } } @Override - public void networkUnpack(NBTTagCompound nbt) { - + public void serialize(ByteBuf buf) { for(int i = 0; i < 5; i++) { - txBuffer[i] = nbt.getString("tx" + i); - rxBuffer[i] = nbt.getString("rx" + i); + BufferUtil.writeString(buf, txBuffer[i]); + BufferUtil.writeString(buf, rxBuffer[i]); } - this.txChannel = nbt.getString("txChan"); - this.rxChannel = nbt.getString("rxChan"); - this.sendingChar = (char) nbt.getInteger("sending"); + + BufferUtil.writeString(buf, this.txChannel); + BufferUtil.writeString(buf, this.rxChannel); + buf.writeChar(this.sendingChar); + } + + @Override + public void deserialize(ByteBuf buf) { + for(int i = 0; i < 5; i++) { + txBuffer[i] = BufferUtil.readString(buf); + rxBuffer[i] = BufferUtil.readString(buf); + } + + this.txChannel = BufferUtil.readString(buf); + this.rxChannel = BufferUtil.readString(buf); + this.sendingChar = buf.readChar(); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java index e881b1ecf..5a01077fa 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java @@ -1,8 +1,10 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.IControlReceiver; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.util.BufferUtil; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -10,7 +12,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -public class TileEntityRadioTorchBase extends TileEntity implements INBTPacketReceiver, IControlReceiver { +public class TileEntityRadioTorchBase extends TileEntity implements IBufPacketReceiver, IControlReceiver { /** channel we're broadcasting on/listening to */ public String channel = ""; @@ -30,12 +32,7 @@ public class TileEntityRadioTorchBase extends TileEntity implements INBTPacketRe if(!worldObj.isRemote) { - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("p", polling); - data.setBoolean("m", customMap); - if(channel != null) data.setString("c", channel); - for(int i = 0; i < 16; i++) if(mapping[i] != null) data.setString("m" + i, mapping[i]); - INBTPacketReceiver.networkPack(this, data, 50); + sendStandard(50); } } @@ -62,11 +59,19 @@ public class TileEntityRadioTorchBase extends TileEntity implements INBTPacketRe } @Override - public void networkUnpack(NBTTagCompound nbt) { - this.polling = nbt.getBoolean("p"); - this.customMap = nbt.getBoolean("m"); - this.channel = nbt.getString("c"); - for(int i = 0; i < 16; i++) this.mapping[i] = nbt.getString("m" + i); + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.polling); + buf.writeBoolean(this.customMap); + BufferUtil.writeString(buf, this.channel); + for(int i = 0; i < 16; i++) BufferUtil.writeString(buf, this.mapping[i]); + } + + @Override + public void deserialize(ByteBuf buf) { + this.polling = buf.readBoolean(); + this.customMap = buf.readBoolean(); + this.channel = BufferUtil.readString(buf); + for(int i = 0; i < 16; i++) this.mapping[i] = BufferUtil.readString(buf); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchLogic.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchLogic.java index 4a44c3504..36b070cb2 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchLogic.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchLogic.java @@ -1,9 +1,11 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.IControlReceiver; -import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; +import com.hbm.util.BufferUtil; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -11,7 +13,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -public class TileEntityRadioTorchLogic extends TileEntity implements INBTPacketReceiver, IControlReceiver { +public class TileEntityRadioTorchLogic extends TileEntity implements IBufPacketReceiver, IControlReceiver { /** channel we're broadcasting on/listening to */ public String channel = ""; @@ -80,13 +82,7 @@ public class TileEntityRadioTorchLogic extends TileEntity implements INBTPacketR } } - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean("p", polling); - data.setBoolean("d", descending); - if(channel != null) data.setString("c", channel); - for(int i = 0; i < 16; i++) if(!mapping[i].equals("")) data.setString("m" + i, mapping[i]); - for(int i = 0; i < 16; i++) if(conditions[i] > 0) data.setInteger("c" + i, conditions[i]); - INBTPacketReceiver.networkPack(this, data, 50); + sendStandard(50); } } @@ -150,12 +146,22 @@ public class TileEntityRadioTorchLogic extends TileEntity implements INBTPacketR for(int i = 0; i < 16; i++) if(conditions[i] > 0) nbt.setInteger("c" + i, conditions[i]); } - public void networkUnpack(NBTTagCompound nbt) { - this.polling = nbt.getBoolean("p"); - this.channel = nbt.getString("c"); - this.descending = nbt.getBoolean("d"); - for(int i = 0; i < 16; i++) this.mapping[i] = nbt.getString("m" + i); - for(int i = 0; i < 16; i++) this.conditions[i] = nbt.getInteger("c" + i); + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.polling); + BufferUtil.writeString(buf, this.channel); + buf.writeBoolean(this.descending); + for(int i = 0; i < 16; i++) BufferUtil.writeString(buf, this.mapping[i]); + for(int i = 0; i < 16; i++) buf.writeInt(this.conditions[i]); + } + + @Override + public void deserialize(ByteBuf buf) { + this.polling = buf.readBoolean(); + this.channel = BufferUtil.readString(buf); + this.descending = buf.readBoolean(); + for(int i = 0; i < 16; i++) this.mapping[i] = BufferUtil.readString(buf); + for(int i = 0; i < 16; i++) this.conditions[i] = buf.readInt(); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java index 71fc659f9..2d5c95a4f 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java @@ -1,9 +1,5 @@ package com.hbm.tileentity.network; -import com.hbm.packet.NBTPacket; -import com.hbm.packet.PacketDispatcher; - -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -107,10 +103,6 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques } } - public void networkPack(NBTTagCompound nbt, int range) { - if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); - } - @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 848356340..77ac2a0fb 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -311,28 +311,6 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple this.trySubscribe(worldObj, xCoord + dir.offsetX * 2 + rot.offsetX * -1, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * -1, dir); } - @Override - public void networkUnpack(NBTTagCompound nbt) { - super.networkUnpack(nbt); - - this.turnProgress = 2; - this.syncRotationPitch = nbt.getDouble("pitch"); - this.syncRotationYaw = nbt.getDouble("yaw"); - this.power = nbt.getLong("power"); - this.isOn = nbt.getBoolean("isOn"); - this.targetPlayers = nbt.getBoolean("targetPlayers"); - this.targetAnimals = nbt.getBoolean("targetAnimals"); - this.targetMobs = nbt.getBoolean("targetMobs"); - this.targetMachines = nbt.getBoolean("targetMachines"); - this.stattrak = nbt.getInteger("stattrak"); - - if(nbt.hasKey("tX")) { - this.tPos = Vec3.createVectorHelper(nbt.getDouble("tX"), nbt.getDouble("tY"), nbt.getDouble("tZ")); - } else { - this.tPos = null; - } - } - @Override public void handleButtonPacket(int value, int meta) { From b7d0748c26fe0e86057e0e1841ffab201b3fcc3a Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 30 Aug 2024 14:43:45 +0200 Subject: [PATCH 17/17] Merge master into branch Optimization, intelliJ couldn't do it, so I did it myself. --- changelog | 9 +- .../api/hbm/energymk2/IEnergyProviderMK2.java | 2 +- .../api/hbm/energymk2/IEnergyReceiverMK2.java | 2 +- .../java/api/hbm/fluid/IFluidConnector.java | 2 +- src/main/java/api/hbm/fluid/IFluidUser.java | 2 +- .../java/api/hbm/item/IButtonReceiver.java | 17 - .../java/api/hbm/item/IClickReceiver.java | 20 - src/main/java/com/hbm/blocks/ModBlocks.java | 15 +- .../com/hbm/blocks/bomb/BlockCrashedBomb.java | 2 +- .../com/hbm/blocks/bomb/BlockVolcano.java | 2 +- .../com/hbm/blocks/generic/BlockEmitter.java | 2 +- .../com/hbm/blocks/generic/PartEmitter.java | 2 +- .../hbm/blocks/machine/MachineCapacitor.java | 3 - .../blocks/machine/MachineICFController.java | 2 +- .../blocks/machine/MachinePWRController.java | 2 +- .../hbm/blocks/machine/ZirnoxDestroyed.java | 2 +- .../blocks/machine/pile/BlockGraphite.java | 2 +- .../machine/rbmk/RBMKDebrisBurning.java | 2 +- .../machine/rbmk/RBMKDebrisRadiating.java | 2 +- .../com/hbm/blocks/network/FluidValve.java | 2 +- .../hbm/entity/item/EntityFallingBlockNT.java | 15 +- .../com/hbm/entity/item/EntityFireworks.java | 2 +- .../hbm/entity/item/EntityMagnusCartus.java | 2 +- .../com/hbm/entity/logic/EntityBomber.java | 2 +- .../hbm/entity/logic/EntityDeathBlast.java | 2 +- .../java/com/hbm/entity/logic/EntityEMP.java | 2 +- .../entity/logic/EntityNukeExplosionMK3.java | 2 +- .../entity/missile/EntityMissileShuttle.java | 2 +- .../hbm/entity/mob/EntityCreeperNuclear.java | 2 +- .../hbm/entity/mob/EntityHunterChopper.java | 2 +- .../java/com/hbm/entity/mob/EntityPigeon.java | 2 +- .../com/hbm/entity/mob/EntityTaintCrab.java | 2 +- .../java/com/hbm/entity/mob/EntityUFO.java | 2 +- .../hbm/entity/mob/glyphid/EntityGlyphid.java | 2 +- .../mob/glyphid/EntityGlyphidNuclear.java | 2 +- .../entity/mob/siege/EntitySiegeCraft.java | 2 +- .../entity/projectile/EntityBombletZeta.java | 2 +- .../entity/projectile/EntityBulletBaseNT.java | 2 +- .../com/hbm/entity/projectile/EntityCog.java | 2 +- .../hbm/entity/projectile/EntityRubble.java | 2 +- .../hbm/entity/projectile/EntitySawblade.java | 2 +- .../com/hbm/explosion/ExplosionChaos.java | 24 - .../com/hbm/explosion/ExplosionLarge.java | 2 +- .../com/hbm/explosion/ExplosionNukeSmall.java | 3 +- .../standard/ExplosionEffectAmat.java | 2 +- .../standard/ExplosionEffectStandard.java | 2 +- .../standard/PlayerProcessorStandard.java | 2 +- .../java/com/hbm/extprop/HbmLivingProps.java | 4 +- .../com/hbm/handler/BossSpawnHandler.java | 5 +- .../com/hbm/handler/EntityEffectHandler.java | 4 +- .../java/com/hbm/handler/HbmKeybinds.java | 23 +- .../com/hbm/handler/HbmKeybindsServer.java | 25 + .../java/com/hbm/handler/WeaponAbility.java | 2 +- .../handler/guncfg/BulletConfigFactory.java | 2 +- .../hbm/handler/guncfg/Gun12GaugeFactory.java | 2 +- .../handler/guncfg/Gun44MagnumFactory.java | 2 +- .../hbm/handler/guncfg/Gun4GaugeFactory.java | 2 +- .../hbm/handler/guncfg/Gun50BMGFactory.java | 2 +- .../hbm/handler/guncfg/Gun556mmFactory.java | 2 +- .../hbm/handler/guncfg/Gun75BoltFactory.java | 2 +- .../handler/guncfg/GunDetonatorFactory.java | 2 +- .../hbm/handler/guncfg/GunEnergyFactory.java | 4 +- .../hbm/handler/guncfg/GunFatmanFactory.java | 2 +- .../hbm/handler/guncfg/GunGrenadeFactory.java | 2 +- .../com/hbm/handler/guncfg/GunNPCFactory.java | 2 +- .../ChunkRadiationHandlerSimple.java | 2 +- .../hazard/type/HazardTypeHydroactive.java | 3 +- .../java/com/hbm/inventory/RecipesCommon.java | 15 +- .../java/com/hbm/inventory/gui/GUIAnvil.java | 2 +- .../java/com/hbm/inventory/gui/GUIBarrel.java | 2 +- .../inventory/gui/GUICombustionEngine.java | 2 +- .../com/hbm/inventory/gui/GUICompressor.java | 2 +- .../com/hbm/inventory/gui/GUICoreEmitter.java | 2 +- .../hbm/inventory/gui/GUICoreStabilizer.java | 2 +- .../hbm/inventory/gui/GUICounterTorch.java | 2 +- .../com/hbm/inventory/gui/GUICraneBoxer.java | 2 +- .../hbm/inventory/gui/GUICraneExtractor.java | 2 +- .../hbm/inventory/gui/GUICraneGrabber.java | 2 +- .../com/hbm/inventory/gui/GUICraneRouter.java | 2 +- .../com/hbm/inventory/gui/GUIDroneCrate.java | 2 +- .../inventory/gui/GUIElectrolyserFluid.java | 2 +- .../inventory/gui/GUIElectrolyserMetal.java | 2 +- .../java/com/hbm/inventory/gui/GUIFEL.java | 2 +- .../com/hbm/inventory/gui/GUIForceField.java | 2 +- .../java/com/hbm/inventory/gui/GUIFunnel.java | 2 +- .../java/com/hbm/inventory/gui/GUIHadron.java | 2 +- .../hbm/inventory/gui/GUIHeaterHeatex.java | 2 +- .../java/com/hbm/inventory/gui/GUIITER.java | 2 +- .../hbm/inventory/gui/GUILaunchPadRusted.java | 2 +- .../gui/GUIMachineArcFurnaceLarge.java | 2 +- .../hbm/inventory/gui/GUIMachineBattery.java | 2 +- .../inventory/gui/GUIMachineExcavator.java | 2 +- .../inventory/gui/GUIMachineFluidTank.java | 2 +- .../hbm/inventory/gui/GUIMachineGasFlare.java | 2 +- .../inventory/gui/GUIMachineLaunchTable.java | 2 +- .../gui/GUIMachineMissileAssembly.java | 2 +- .../hbm/inventory/gui/GUIMachineRadarNT.java | 2 +- .../inventory/gui/GUIMachineTurbineGas.java | 2 +- .../inventory/gui/GUIMachineWoodBurner.java | 2 +- .../com/hbm/inventory/gui/GUIMassStorage.java | 2 +- .../com/hbm/inventory/gui/GUIMicrowave.java | 2 +- .../com/hbm/inventory/gui/GUIMiningLaser.java | 2 +- .../java/com/hbm/inventory/gui/GUIMixer.java | 2 +- .../com/hbm/inventory/gui/GUINukeFstbmb.java | 2 +- .../com/hbm/inventory/gui/GUIOilburner.java | 2 +- .../java/com/hbm/inventory/gui/GUIPWR.java | 2 +- .../com/hbm/inventory/gui/GUIRBMKBoiler.java | 2 +- .../com/hbm/inventory/gui/GUIRBMKConsole.java | 2 +- .../com/hbm/inventory/gui/GUIRBMKControl.java | 2 +- .../hbm/inventory/gui/GUIRBMKControlAuto.java | 2 +- .../com/hbm/inventory/gui/GUIRadioRec.java | 2 +- .../hbm/inventory/gui/GUIReactorControl.java | 2 +- .../hbm/inventory/gui/GUIReactorResearch.java | 2 +- .../hbm/inventory/gui/GUIReactorZirnox.java | 2 +- .../java/com/hbm/inventory/gui/GUISILEX.java | 2 +- .../hbm/inventory/gui/GUIScreenBobmazon.java | 2 +- .../inventory/gui/GUIScreenDesignator.java | 2 +- .../com/hbm/inventory/gui/GUIScreenFluid.java | 2 +- .../inventory/gui/GUIScreenRadioTorch.java | 2 +- .../gui/GUIScreenRadioTorchLogic.java | 2 +- .../hbm/inventory/gui/GUIScreenSatCoord.java | 2 +- .../inventory/gui/GUIScreenSatInterface.java | 2 +- .../gui/GUIScreenTemplateFolder.java | 2 +- .../hbm/inventory/gui/GUISoyuzLauncher.java | 2 +- .../com/hbm/inventory/gui/GUITurretArty.java | 2 +- .../com/hbm/inventory/gui/GUITurretBase.java | 4 +- .../hbm/inventory/gui/GUITurretHIMARS.java | 2 +- .../java/com/hbm/inventory/gui/GUIWatz.java | 2 +- .../hbm/inventory/gui/GuiInfoContainer.java | 3 +- .../inventory/gui/GuiScreenRadioTelex.java | 2 +- .../java/com/hbm/items/IKeybindReceiver.java | 11 + src/main/java/com/hbm/items/ISyncButtons.java | 11 - src/main/java/com/hbm/items/ModItems.java | 15 +- .../com/hbm/items/armor/ArmorBJJetpack.java | 2 +- .../java/com/hbm/items/armor/ArmorDNT.java | 2 +- .../java/com/hbm/items/armor/ArmorDiesel.java | 2 +- .../com/hbm/items/armor/ItemModKnife.java | 2 +- .../java/com/hbm/items/armor/ItemModLens.java | 2 +- .../com/hbm/items/armor/JetpackBooster.java | 2 +- .../com/hbm/items/armor/JetpackBreak.java | 2 +- .../com/hbm/items/armor/JetpackRegular.java | 2 +- .../hbm/items/armor/JetpackVectorized.java | 2 +- .../java/com/hbm/items/food/ItemLemon.java | 2 +- .../hbm/items/machine/ItemFluidIDMulti.java | 2 +- .../com/hbm/items/special/ItemCigarette.java | 2 +- .../com/hbm/items/tool/ItemBlowtorch.java | 2 +- .../java/com/hbm/items/tool/ItemBoltgun.java | 2 +- .../java/com/hbm/items/tool/ItemChainsaw.java | 2 +- .../hbm/items/tool/ItemLaserDetonator.java | 2 +- .../com/hbm/items/tool/ItemOilDetector.java | 2 +- .../hbm/items/tool/ItemOreDensityScanner.java | 2 +- .../hbm/items/tool/ItemPollutionDetector.java | 2 +- .../com/hbm/items/tool/ItemPowerNetTool.java | 2 +- .../com/hbm/items/tool/ItemSatInterface.java | 2 +- .../com/hbm/items/tool/ItemToolAbility.java | 2 +- .../com/hbm/items/weapon/ItemAmmoArty.java | 2 +- .../com/hbm/items/weapon/ItemAmmoHIMARS.java | 2 +- .../com/hbm/items/weapon/ItemCrucible.java | 2 +- .../com/hbm/items/weapon/ItemCryoCannon.java | 2 +- .../{gununified => }/ItemEnergyGunBase.java | 7 +- .../com/hbm/items/weapon/ItemGunBase.java | 6 +- .../hbm/items/weapon/ItemGunChemthrower.java | 2 +- .../com/hbm/items/weapon/ItemGunGauss.java | 2 +- .../com/hbm/items/weapon/ItemPlasmaSpear.java | 179 - .../hbm/items/weapon/gununified/GunFrame.java | 59 - .../weapon/gununified/GunRealoadable.java | 30 - .../weapon/gununified/IReloadBehavior.java | 10 - .../weapon/gununified/IStatusBarProvider.java | 13 - .../gununified/StatusBarDurability.java | 16 - .../hbm/items/weapon/sedna/BulletConfig.java | 36 + .../com/hbm/items/weapon/sedna/GunConfig.java | 62 + .../hbm/items/weapon/sedna/GunFactory.java | 25 + .../hbm/items/weapon/sedna/ItemGunBase.java | 112 + .../com/hbm/items/weapon/sedna/Receiver.java | 24 + .../items/weapon/sedna/mags/IMagazine.java | 24 + .../sedna/mags/MagazineRevolverDrum.java | 82 + .../sedna/mags/MagazineStandardBase.java | 60 + .../hbm/items/weapon/sedna/package-info.java | 24 + src/main/java/com/hbm/main/ClientProxy.java | 6 + src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/main/ModEventHandler.java | 4 +- .../com/hbm/main/ModEventHandlerClient.java | 49 +- .../com/hbm/main/ModEventHandlerRenderer.java | 21 + .../java/com/hbm/main/ResourceManager.java | 1 + .../java/com/hbm/packet/PacketDispatcher.java | 7 +- .../com/hbm/packet/SyncButtonsPacket.java | 56 - .../{ => toclient}/AuxElectricityPacket.java | 2 +- .../packet/{ => toclient}/AuxGaugePacket.java | 2 +- .../{ => toclient}/AuxParticlePacket.java | 2 +- .../{ => toclient}/AuxParticlePacketNT.java | 2 +- .../{ => toclient}/BiomeSyncPacket.java | 2 +- .../hbm/packet/{ => toclient}/BufPacket.java | 2 +- .../ExplosionKnockbackPacket.java | 2 +- ...lientEffectsAndParticleHandlingPacket.java | 2 +- .../packet/{ => toclient}/ExtPropPacket.java | 2 +- .../{ => toclient}/GunAnimationPacket.java | 2 +- .../LoopedEntitySoundPacket.java | 2 +- .../{ => toclient}/LoopedSoundPacket.java | 2 +- .../{ => toclient}/ParticleBurstPacket.java | 2 +- .../{ => toclient}/PermaSyncPacket.java | 4 +- .../{ => toclient}/PlayerInformPacket.java | 2 +- .../packet/{ => toclient}/SatPanelPacket.java | 2 +- .../{ => toclient}/TEDoorAnimationPacket.java | 2 +- .../hbm/packet/{ => toclient}/TEFFPacket.java | 2 +- .../TEMissileMultipartPacket.java | 2 +- .../packet/{ => toclient}/TESirenPacket.java | 2 +- .../packet/{ => toclient}/TEVaultPacket.java | 2 +- .../{ => toserver}/AnvilCraftPacket.java | 2 +- .../{ => toserver}/AuxButtonPacket.java | 2 +- .../{ => toserver}/GunButtonPacket.java | 2 +- .../{ => toserver}/ItemBobmazonPacket.java | 2 +- .../{ => toserver}/ItemDesignatorPacket.java | 2 +- .../{ => toserver}/ItemFolderPacket.java | 2 +- .../packet/{ => toserver}/KeybindPacket.java | 8 +- .../{ => toserver}/NBTControlPacket.java | 2 +- .../{ => toserver}/NBTItemControlPacket.java | 2 +- .../packet/{ => toserver}/SatCoordPacket.java | 2 +- .../packet/{ => toserver}/SatLaserPacket.java | 2 +- .../hbm/particle/helper/IParticleCreator.java | 2 +- .../item/weapon/ItemRenderWeaponGlass.java | 2 +- .../item/weapon/sedna/ItemRenderDebug.java | 44 + .../weapon/sedna/ItemRenderWeaponBase.java | 185 + .../com/hbm/render/tileentity/RenderLPW2.java | 2 +- .../render/tileentity/RenderSolarBoiler.java | 2 +- .../hbm/tileentity/IBufPacketReceiver.java | 2 +- .../hbm/tileentity/TileEntityDoorGeneric.java | 2 +- .../hbm/tileentity/TileEntityMachineBase.java | 6 +- .../hbm/tileentity/bomb/TileEntityCharge.java | 3 - .../bomb/TileEntityCompactLauncher.java | 4 +- .../tileentity/bomb/TileEntityFireworks.java | 2 +- .../bomb/TileEntityLaunchTable.java | 4 +- .../hbm/tileentity/deco/TileEntityGeysir.java | 2 +- .../machine/TileEntityBlastDoor.java | 2 +- .../machine/TileEntityBroadcaster.java | 2 +- .../machine/TileEntityCrucible.java | 2 +- .../machine/TileEntityElectrolyser.java | 2 +- .../machine/TileEntityForceField.java | 2 +- .../machine/TileEntityFoundryOutlet.java | 2 +- .../machine/TileEntityFoundrySlagtap.java | 2 +- .../tileentity/machine/TileEntityHadron.java | 2 +- .../machine/TileEntityHadronPower.java | 3 - .../hbm/tileentity/machine/TileEntityICF.java | 2 +- .../tileentity/machine/TileEntityITER.java | 2 +- .../machine/TileEntityMachineArcFurnace.java | 4 +- .../TileEntityMachineArcFurnaceLarge.java | 2 +- .../machine/TileEntityMachineArcWelder.java | 2 +- .../machine/TileEntityMachineDrain.java | 2 +- .../machine/TileEntityMachineGasCent.java | 2 +- .../TileEntityMachineMissileAssembly.java | 2 +- .../machine/TileEntityMachineOreSlopper.java | 2 +- .../machine/TileEntityMachineRTG.java | 2 +- .../machine/TileEntityMachineRadarNT.java | 2 +- .../machine/TileEntityMachineShredder.java | 2 +- .../machine/TileEntityMachineSiren.java | 2 +- .../TileEntityMachineSolderingStation.java | 2 +- .../machine/TileEntityMachineTurbofan.java | 2 +- .../tileentity/machine/TileEntitySawmill.java | 4 +- .../machine/TileEntityVaultDoor.java | 2 +- .../tileentity/machine/TileEntityWatz.java | 2 +- .../machine/TileEntityZirnoxDestroyed.java | 2 +- .../oil/TileEntityMachineFractionTower.java | 3 - .../machine/pile/TileEntityPileFuel.java | 2 +- .../machine/rbmk/TileEntityRBMKBase.java | 6 +- .../storage/TileEntityFileCabinet.java | 3 - .../storage/TileEntityMachineFluidTank.java | 2 +- .../network/TileEntityDroneWaypoint.java | 3 - .../network/TileEntityFluidValve.java | 11 +- .../network/TileEntityPipeBaseNT.java | 5 +- .../turret/TileEntityTurretArty.java | 2 +- .../turret/TileEntityTurretBaseNT.java | 2 +- .../turret/TileEntityTurretChekhov.java | 2 +- .../turret/TileEntityTurretFritz.java | 2 +- .../turret/TileEntityTurretHoward.java | 2 +- .../turret/TileEntityTurretHowardDamaged.java | 2 +- .../turret/TileEntityTurretJeremy.java | 2 +- .../turret/TileEntityTurretMaxwell.java | 2 +- .../turret/TileEntityTurretSentry.java | 2 +- .../turret/TileEntityTurretSentryDamaged.java | 2 +- .../turret/TileEntityTurretTauon.java | 2 +- src/main/java/com/hbm/util/ParticleUtil.java | 2 +- src/main/java/com/hbm/world/WorldUtil.java | 3 +- src/main/resources/META-INF/HBM_at.cfg | 3 + src/main/resources/assets/hbm/lang/de_DE.lang | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../assets/hbm/models/machines/lpw2.obj | 10610 +++++++++------- .../hbm/models/weapons/maresleg_mk2.obj | 2314 ++++ .../assets/hbm/models/weapons/pepperbox.obj | 3645 ++++++ .../blocks/playground/deco_steel_kit.png | Bin 1684 -> 2331 bytes .../hbm/textures/models/machines/lpw2.png | Bin 19602 -> 104090 bytes .../hbm/textures/models/weapons/debug_gun.png | Bin 0 -> 4269 bytes .../hbm/textures/models/weapons/lil_pip.png | Bin 4498 -> 0 bytes .../hbm/textures/models/weapons/maresleg.png | Bin 0 -> 4117 bytes .../hbm/textures/models/weapons/pepperbox.png | Bin 0 -> 3118 bytes 293 files changed, 13009 insertions(+), 5451 deletions(-) delete mode 100644 src/main/java/api/hbm/item/IButtonReceiver.java delete mode 100644 src/main/java/api/hbm/item/IClickReceiver.java create mode 100644 src/main/java/com/hbm/handler/HbmKeybindsServer.java create mode 100644 src/main/java/com/hbm/items/IKeybindReceiver.java delete mode 100644 src/main/java/com/hbm/items/ISyncButtons.java rename src/main/java/com/hbm/items/weapon/{gununified => }/ItemEnergyGunBase.java (95%) delete mode 100644 src/main/java/com/hbm/items/weapon/ItemPlasmaSpear.java delete mode 100644 src/main/java/com/hbm/items/weapon/gununified/GunFrame.java delete mode 100644 src/main/java/com/hbm/items/weapon/gununified/GunRealoadable.java delete mode 100644 src/main/java/com/hbm/items/weapon/gununified/IReloadBehavior.java delete mode 100644 src/main/java/com/hbm/items/weapon/gununified/IStatusBarProvider.java delete mode 100644 src/main/java/com/hbm/items/weapon/gununified/StatusBarDurability.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/GunConfig.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/GunFactory.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/Receiver.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/package-info.java delete mode 100644 src/main/java/com/hbm/packet/SyncButtonsPacket.java rename src/main/java/com/hbm/packet/{ => toclient}/AuxElectricityPacket.java (97%) rename src/main/java/com/hbm/packet/{ => toclient}/AuxGaugePacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/AuxParticlePacket.java (97%) rename src/main/java/com/hbm/packet/{ => toclient}/AuxParticlePacketNT.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/BiomeSyncPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/BufPacket.java (97%) rename src/main/java/com/hbm/packet/{ => toclient}/ExplosionKnockbackPacket.java (97%) rename src/main/java/com/hbm/packet/{ => toclient}/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/ExtPropPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/GunAnimationPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/LoopedEntitySoundPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/LoopedSoundPacket.java (99%) rename src/main/java/com/hbm/packet/{ => toclient}/ParticleBurstPacket.java (97%) rename src/main/java/com/hbm/packet/{ => toclient}/PermaSyncPacket.java (94%) rename src/main/java/com/hbm/packet/{ => toclient}/PlayerInformPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/SatPanelPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/TEDoorAnimationPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/TEFFPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/TEMissileMultipartPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/TESirenPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toclient}/TEVaultPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/AnvilCraftPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/AuxButtonPacket.java (99%) rename src/main/java/com/hbm/packet/{ => toserver}/GunButtonPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/ItemBobmazonPacket.java (99%) rename src/main/java/com/hbm/packet/{ => toserver}/ItemDesignatorPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/ItemFolderPacket.java (99%) rename src/main/java/com/hbm/packet/{ => toserver}/KeybindPacket.java (84%) rename src/main/java/com/hbm/packet/{ => toserver}/NBTControlPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/NBTItemControlPacket.java (98%) rename src/main/java/com/hbm/packet/{ => toserver}/SatCoordPacket.java (97%) rename src/main/java/com/hbm/packet/{ => toserver}/SatLaserPacket.java (97%) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java create mode 100644 src/main/resources/assets/hbm/models/weapons/maresleg_mk2.obj create mode 100644 src/main/resources/assets/hbm/models/weapons/pepperbox.obj create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/debug_gun.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/maresleg.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/pepperbox.png diff --git a/changelog b/changelog index b675028b3..c26beadfa 100644 --- a/changelog +++ b/changelog @@ -5,8 +5,15 @@ * Removed forgotten bricks * Updated CMB brick texture * The ICF machine block now renders with its 3d model in the creative inventory +* "Toggle backpack" keybind is now called "toggle jetpack" to reduce confusion ## Fixed * Fixed pumpjack gauges not syncing properly * Fixed some concrete variants not being revertable into uncolored concrete -* Fixed the ore density scanner not using proper translations for the HUD \ No newline at end of file +* Fixed the ore density scanner not using proper translations for the HUD +* Fixed the solar boiler's rays rendering on fast graphics instead of on fancy graphics +* Fixed hydroreactive items not exploding when submerged in water +* Fixed fluid valves visually disconnecting when switching state +* Fixed fluid valves no visually connecting when type is set +* Fixed falling blocks spawned by nukes or impulse grenades dropping blocks that don't have drops +* Added even more exception handling to CompStacks, hopefully fixing an incompatibility with Mana Metal \ No newline at end of file diff --git a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java index c264d0120..6643e3fcd 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java @@ -1,7 +1,7 @@ package api.hbm.energymk2; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.Compat; import api.hbm.energymk2.Nodespace.PowerNode; diff --git a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java index 5ec931234..27bcc21f2 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java @@ -1,7 +1,7 @@ package api.hbm.energymk2; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.Compat; import api.hbm.energymk2.Nodespace.PowerNode; diff --git a/src/main/java/api/hbm/fluid/IFluidConnector.java b/src/main/java/api/hbm/fluid/IFluidConnector.java index a6db68c2c..e299938c1 100644 --- a/src/main/java/api/hbm/fluid/IFluidConnector.java +++ b/src/main/java/api/hbm/fluid/IFluidConnector.java @@ -1,8 +1,8 @@ package api.hbm.fluid; import com.hbm.inventory.fluid.FluidType; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.Compat; import api.hbm.tile.ILoadedTile; diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java index 4c98dfd14..3f5ab4f95 100644 --- a/src/main/java/api/hbm/fluid/IFluidUser.java +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -2,8 +2,8 @@ package api.hbm.fluid; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.Compat; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/api/hbm/item/IButtonReceiver.java b/src/main/java/api/hbm/item/IButtonReceiver.java deleted file mode 100644 index db1741b55..000000000 --- a/src/main/java/api/hbm/item/IButtonReceiver.java +++ /dev/null @@ -1,17 +0,0 @@ -package api.hbm.item; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface IButtonReceiver { - - /** - * Called in ModEventHandlerClient for any keyboard input related to this item - * @param stack - * @param player - */ - @SideOnly(Side.CLIENT) - public void handleKeyboardInput(ItemStack stack, EntityPlayer player); -} diff --git a/src/main/java/api/hbm/item/IClickReceiver.java b/src/main/java/api/hbm/item/IClickReceiver.java deleted file mode 100644 index fd6830410..000000000 --- a/src/main/java/api/hbm/item/IClickReceiver.java +++ /dev/null @@ -1,20 +0,0 @@ -package api.hbm.item; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface IClickReceiver { - - /** - * Called in ModEventHandlerClient for any mouse input related to this item - * @param stack - * @param player - * @param button - * @param state - * @return true if the event should be canceled - */ - @SideOnly(Side.CLIENT) - public boolean handleMouseInput(ItemStack stack, EntityPlayer player, int button, boolean state); -} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7a1a9f6e2..46eec14fd 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -893,7 +893,6 @@ public class ModBlocks { public static Block watz_element; public static Block watz_cooler; public static Block watz_end; - public static Block watz_conductor; public static Block balefire; public static Block fire_digamma; @@ -1997,7 +1996,6 @@ public class ModBlocks { watz_element = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_element_top").setBlockName("watz_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_element_side"); watz_cooler = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_cooler_top").setBlockName("watz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_cooler_side"); watz_end = new BlockToolConversion(Material.iron).addVariant("_bolted").setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); - watz_conductor = new BlockCableConnect(Material.iron).setBlockName("watz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":watz_conductor_top"); watz = new Watz().setBlockName("watz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); watz_pump = new WatzPump().setBlockName("watz_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3310,6 +3308,12 @@ public class ModBlocks { GameRegistry.registerBlock(plasma, ItemBlockLore.class, plasma.getUnlocalizedName()); GameRegistry.registerBlock(iter, iter.getUnlocalizedName()); GameRegistry.registerBlock(plasma_heater, plasma_heater.getUnlocalizedName()); + + register(watz_element); + register(watz_cooler); + register(watz_end); + register(watz); + register(watz_pump); register(machine_icf_press); register(icf_laser_component); @@ -3317,13 +3321,6 @@ public class ModBlocks { register(icf_block); register(icf_component); register(icf); - - GameRegistry.registerBlock(watz_element, watz_element.getUnlocalizedName()); - GameRegistry.registerBlock(watz_cooler, watz_cooler.getUnlocalizedName()); - register(watz_end); - GameRegistry.registerBlock(watz_conductor, watz_conductor.getUnlocalizedName()); - GameRegistry.registerBlock(watz, watz.getUnlocalizedName()); - GameRegistry.registerBlock(watz_pump, watz_pump.getUnlocalizedName()); //E GameRegistry.registerBlock(balefire, balefire.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java index 93683f0d2..f2a3f7783 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java @@ -7,8 +7,8 @@ import com.hbm.config.BombConfig; import com.hbm.entity.logic.EntityBalefire; import com.hbm.interfaces.IBomb; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.bomb.TileEntityCrashedBomb; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java index f2a8d73d7..8ae9a63a3 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java @@ -9,8 +9,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityShrapnel; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/generic/BlockEmitter.java b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java index 9c59c282e..c6d8d59f6 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockEmitter.java +++ b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java @@ -4,9 +4,9 @@ import java.awt.Color; import java.util.List; import com.hbm.blocks.ITooltipProvider; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.block.IToolable; import com.hbm.tileentity.TileEntityLoadedBase; diff --git a/src/main/java/com/hbm/blocks/generic/PartEmitter.java b/src/main/java/com/hbm/blocks/generic/PartEmitter.java index db823972c..771c9e37d 100644 --- a/src/main/java/com/hbm/blocks/generic/PartEmitter.java +++ b/src/main/java/com/hbm/blocks/generic/PartEmitter.java @@ -3,8 +3,8 @@ package com.hbm.blocks.generic; import java.util.List; import com.hbm.blocks.ITooltipProvider; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ParticleUtil; import api.hbm.block.IToolable; diff --git a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java index e4221efec..fd525f9f6 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java @@ -10,8 +10,6 @@ import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityLoadedBase; @@ -22,7 +20,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/com/hbm/blocks/machine/MachineICFController.java b/src/main/java/com/hbm/blocks/machine/MachineICFController.java index 321d8307d..10d851109 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineICFController.java +++ b/src/main/java/com/hbm/blocks/machine/MachineICFController.java @@ -11,8 +11,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; import com.hbm.blocks.machine.BlockICFLaserComponent.EnumICFPart; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.machine.TileEntityICFController; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java index 4c9654659..0fcbc6117 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java @@ -9,8 +9,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.BlockPWR.TileEntityBlockPWR; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.machine.TileEntityPWRController; import com.hbm.util.fauxpointtwelve.BlockPos; diff --git a/src/main/java/com/hbm/blocks/machine/ZirnoxDestroyed.java b/src/main/java/com/hbm/blocks/machine/ZirnoxDestroyed.java index 73526c494..459e958fd 100644 --- a/src/main/java/com/hbm/blocks/machine/ZirnoxDestroyed.java +++ b/src/main/java/com/hbm/blocks/machine/ZirnoxDestroyed.java @@ -8,8 +8,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityZirnoxDestroyed; diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java index c5018700a..28ddcd06a 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockFlammable; import com.hbm.items.ModItems; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.ParticleBurstPacket; +import com.hbm.packet.toclient.ParticleBurstPacket; import api.hbm.block.IToolable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisBurning.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisBurning.java index 0480adc74..dc2f70829 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisBurning.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisBurning.java @@ -4,8 +4,8 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisRadiating.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisRadiating.java index 299cf9f3c..9aef21c0b 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisRadiating.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDebrisRadiating.java @@ -5,8 +5,8 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/blocks/network/FluidValve.java b/src/main/java/com/hbm/blocks/network/FluidValve.java index 5a0b3d5b3..bfea2582e 100644 --- a/src/main/java/com/hbm/blocks/network/FluidValve.java +++ b/src/main/java/com/hbm/blocks/network/FluidValve.java @@ -54,6 +54,7 @@ public class FluidValve extends FluidDuctBase implements ILookOverlay { if(!player.isSneaking()) { int meta = world.getBlockMetadata(x, y, z); + TileEntityFluidValve te = (TileEntityFluidValve) world.getTileEntity(x, y, z); if(meta == 0) { world.setBlockMetadataWithNotify(x, y, z, 1, 2); world.playSoundEffect(x, y, z, "hbm:block.reactorStart", 1.0F, 1.0F); @@ -62,7 +63,6 @@ public class FluidValve extends FluidDuctBase implements ILookOverlay { world.playSoundEffect(x, y, z, "hbm:block.reactorStart", 1.0F, 0.85F); } - TileEntityFluidValve te = (TileEntityFluidValve) world.getTileEntity(x, y, z); te.updateState(); return true; diff --git a/src/main/java/com/hbm/entity/item/EntityFallingBlockNT.java b/src/main/java/com/hbm/entity/item/EntityFallingBlockNT.java index 150c4352f..6e1375bbc 100644 --- a/src/main/java/com/hbm/entity/item/EntityFallingBlockNT.java +++ b/src/main/java/com/hbm/entity/item/EntityFallingBlockNT.java @@ -109,6 +109,7 @@ public class EntityFallingBlockNT extends Entity { int x = MathHelper.floor_double(this.posX); int y = MathHelper.floor_double(this.posY); int z = MathHelper.floor_double(this.posZ); + int meta = this.getMeta(); if(this.fallingTicks == 1) { if(this.worldObj.getBlock(x, y, z) != this.getBlock()) { @@ -127,10 +128,10 @@ public class EntityFallingBlockNT extends Entity { if(this.worldObj.getBlock(x, y, z) != Blocks.piston_extension) { this.setDead(); - if(!this.destroyOnLand && replacementCheck(x, y, z) && this.worldObj.setBlock(x, y, z, this.getBlock(), this.getMeta(), 3)) { + if(!this.destroyOnLand && replacementCheck(x, y, z) && this.worldObj.setBlock(x, y, z, this.getBlock(), meta, 3)) { - if(this.getBlock() instanceof BlockFalling) ((BlockFalling) this.getBlock()).func_149828_a(this.worldObj, x, y, z, this.getMeta()); - if(this.getBlock() instanceof BlockFallingNT) ((BlockFallingNT) this.getBlock()).onLand(this.worldObj, x, y, z, this.getMeta()); + if(this.getBlock() instanceof BlockFalling) ((BlockFalling) this.getBlock()).func_149828_a(this.worldObj, x, y, z, meta); + if(this.getBlock() instanceof BlockFallingNT) ((BlockFallingNT) this.getBlock()).onLand(this.worldObj, x, y, z, meta); if(this.tileNBT != null && this.getBlock() instanceof ITileEntityProvider) { TileEntity tileentity = this.worldObj.getTileEntity(x, y, z); @@ -153,13 +154,13 @@ public class EntityFallingBlockNT extends Entity { tileentity.markDirty(); } } - } else if(this.canDrop && !this.destroyOnLand) { - this.entityDropItem(new ItemStack(this.getBlock(), 1, this.getBlock().damageDropped(this.getMeta())), 0.0F); + } else if(this.canDrop && !this.destroyOnLand && this.getBlock().getItemDropped(meta, rand, 0) != null) { + this.entityDropItem(new ItemStack(this.getBlock().getItemDropped(meta, rand, 0), 1, this.getBlock().damageDropped(meta)), 0.0F); } } } else if(this.fallingTicks > 100 && !this.worldObj.isRemote && (y < 1 || y > 256) || this.fallingTicks > 600) { - if(this.canDrop) { - this.entityDropItem(new ItemStack(this.getBlock(), 1, this.getBlock().damageDropped(this.getMeta())), 0.0F); + if(this.canDrop && this.getBlock().getItemDropped(meta, rand, 0) != null) { + this.entityDropItem(new ItemStack(this.getBlock().getItemDropped(meta, rand, 0), 1, this.getBlock().damageDropped(meta)), 0.0F); } this.setDead(); diff --git a/src/main/java/com/hbm/entity/item/EntityFireworks.java b/src/main/java/com/hbm/entity/item/EntityFireworks.java index 64227e4aa..6602c2ef4 100644 --- a/src/main/java/com/hbm/entity/item/EntityFireworks.java +++ b/src/main/java/com/hbm/entity/item/EntityFireworks.java @@ -1,7 +1,7 @@ package com.hbm.entity.item; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/entity/item/EntityMagnusCartus.java b/src/main/java/com/hbm/entity/item/EntityMagnusCartus.java index 478363a7d..53f379cae 100644 --- a/src/main/java/com/hbm/entity/item/EntityMagnusCartus.java +++ b/src/main/java/com/hbm/entity/item/EntityMagnusCartus.java @@ -1,8 +1,8 @@ package com.hbm.entity.item; import com.hbm.entity.cart.EntityMinecartBogie; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/entity/logic/EntityBomber.java b/src/main/java/com/hbm/entity/logic/EntityBomber.java index 820bdfc3b..25cc3acb4 100644 --- a/src/main/java/com/hbm/entity/logic/EntityBomber.java +++ b/src/main/java/com/hbm/entity/logic/EntityBomber.java @@ -11,8 +11,8 @@ import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.LoopedEntitySoundPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.LoopedEntitySoundPacket; import com.hbm.util.ParticleUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/entity/logic/EntityDeathBlast.java b/src/main/java/com/hbm/entity/logic/EntityDeathBlast.java index 75fea35f7..e8da0ab89 100644 --- a/src/main/java/com/hbm/entity/logic/EntityDeathBlast.java +++ b/src/main/java/com/hbm/entity/logic/EntityDeathBlast.java @@ -2,8 +2,8 @@ package com.hbm.entity.logic; import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.handler.BulletConfigSyncingUtil; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/entity/logic/EntityEMP.java b/src/main/java/com/hbm/entity/logic/EntityEMP.java index 3ba75fc54..c322b4fa7 100644 --- a/src/main/java/com/hbm/entity/logic/EntityEMP.java +++ b/src/main/java/com/hbm/entity/logic/EntityEMP.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.ParticleBurstPacket; +import com.hbm.packet.toclient.ParticleBurstPacket; import api.hbm.energymk2.IEnergyHandlerMK2; import cofh.api.energy.IEnergyProvider; diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java index 665d9550d..c72a26679 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java @@ -16,8 +16,8 @@ import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.ExplosionSolinium; import com.hbm.interfaces.Spaghetti; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java index bdee6f5f4..6c07d944d 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java @@ -8,8 +8,8 @@ import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.init.Blocks; diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java b/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java index ca78f32a9..8322f29b6 100644 --- a/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java @@ -9,8 +9,8 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java index c5e3bb9f7..cffaee494 100644 --- a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java +++ b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java @@ -5,8 +5,8 @@ import com.hbm.entity.projectile.EntityChopperMine; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.entity.IRadiationImmune; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/entity/mob/EntityPigeon.java b/src/main/java/com/hbm/entity/mob/EntityPigeon.java index ad6d203fc..34e19c294 100644 --- a/src/main/java/com/hbm/entity/mob/EntityPigeon.java +++ b/src/main/java/com/hbm/entity/mob/EntityPigeon.java @@ -8,8 +8,8 @@ import com.hbm.entity.mob.ai.EntityAIStopFlying; import com.hbm.entity.mob.ai.EntityAISwimmingConditional; import com.hbm.entity.mob.ai.EntityAIWanderConditional; import com.hbm.items.tool.ItemFertilizer; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/entity/mob/EntityTaintCrab.java b/src/main/java/com/hbm/entity/mob/EntityTaintCrab.java index aa0851cc9..e6db43891 100644 --- a/src/main/java/com/hbm/entity/mob/EntityTaintCrab.java +++ b/src/main/java/com/hbm/entity/mob/EntityTaintCrab.java @@ -6,8 +6,8 @@ import java.util.List; import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.tileentity.machine.TileEntityTesla; diff --git a/src/main/java/com/hbm/entity/mob/EntityUFO.java b/src/main/java/com/hbm/entity/mob/EntityUFO.java index 4a8f46ee5..f30a84f93 100644 --- a/src/main/java/com/hbm/entity/mob/EntityUFO.java +++ b/src/main/java/com/hbm/entity/mob/EntityUFO.java @@ -9,8 +9,8 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java index a3ac74fbf..423f68429 100644 --- a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java +++ b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java @@ -15,8 +15,8 @@ import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.items.ModItems; import com.hbm.main.ResourceManager; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphidNuclear.java b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphidNuclear.java index 7c1ce74e1..daad80877 100644 --- a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphidNuclear.java +++ b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphidNuclear.java @@ -11,8 +11,8 @@ import com.hbm.explosion.vanillant.standard.EntityProcessorStandard; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java index 72c0e29de..47dfee456 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java @@ -5,8 +5,8 @@ import java.util.List; import com.hbm.entity.mob.EntityUFOBase; import com.hbm.entity.projectile.EntitySiegeLaser; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java b/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java index 1a21d96c2..8775e9510 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java @@ -4,8 +4,8 @@ import com.hbm.config.BombConfig; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java index 2e44faf9f..d6370efb8 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java @@ -25,8 +25,8 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.items.weapon.ItemGunBase; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.util.ArmorUtil; import com.hbm.util.BobMathUtil; diff --git a/src/main/java/com/hbm/entity/projectile/EntityCog.java b/src/main/java/com/hbm/entity/projectile/EntityCog.java index 84c27bb77..8fb460a3e 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityCog.java +++ b/src/main/java/com/hbm/entity/projectile/EntityCog.java @@ -2,8 +2,8 @@ package com.hbm.entity.projectile; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/entity/projectile/EntityRubble.java b/src/main/java/com/hbm/entity/projectile/EntityRubble.java index b19f7263b..4cc2daf1f 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityRubble.java +++ b/src/main/java/com/hbm/entity/projectile/EntityRubble.java @@ -2,7 +2,7 @@ package com.hbm.entity.projectile; import com.hbm.lib.ModDamageSource; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.ParticleBurstPacket; +import com.hbm.packet.toclient.ParticleBurstPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/entity/projectile/EntitySawblade.java b/src/main/java/com/hbm/entity/projectile/EntitySawblade.java index 9d4a3b592..fcc0c5a79 100644 --- a/src/main/java/com/hbm/entity/projectile/EntitySawblade.java +++ b/src/main/java/com/hbm/entity/projectile/EntitySawblade.java @@ -2,8 +2,8 @@ package com.hbm.entity.projectile; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/explosion/ExplosionChaos.java b/src/main/java/com/hbm/explosion/ExplosionChaos.java index ea23952ef..ded0a8193 100644 --- a/src/main/java/com/hbm/explosion/ExplosionChaos.java +++ b/src/main/java/com/hbm/explosion/ExplosionChaos.java @@ -70,29 +70,6 @@ public class ExplosionChaos { } } - public static void antiCheat(World world, int x, int y, int z, int bombStartStrength) { - - int r = bombStartStrength; - int r2 = r * r; - int r22 = r2 / 2; - for (int xx = -r; xx < r; xx++) { - int X = xx + x; - int XX = xx * xx; - for (int yy = -r; yy < r; yy++) { - int Y = yy + y; - int YY = XX + yy * yy; - for (int zz = -r; zz < r; zz++) { - int Z = zz + z; - int ZZ = YY + zz * zz; - if (ZZ < r22) { - if (rand.nextInt(15) == 0 && world.getBlock(X, Y, Z) != Blocks.air) - world.setBlock(X, Y, Z, ModBlocks.cheater_virus); - } - } - } - } - } - public static void hardenVirus(World world, int x, int y, int z, int bombStartStrength) { int r = bombStartStrength; @@ -405,7 +382,6 @@ public class ExplosionChaos { } public static void pDestruction(World world, int x, int y, int z) { - EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, (double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); world.spawnEntityInWorld(entityfallingblock); } diff --git a/src/main/java/com/hbm/explosion/ExplosionLarge.java b/src/main/java/com/hbm/explosion/ExplosionLarge.java index 2fff85b46..ae8f4e5cb 100644 --- a/src/main/java/com/hbm/explosion/ExplosionLarge.java +++ b/src/main/java/com/hbm/explosion/ExplosionLarge.java @@ -5,8 +5,8 @@ import java.util.Random; import com.hbm.entity.projectile.EntityRubble; import com.hbm.entity.projectile.EntityShrapnel; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ParticleUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java index 0734db2e5..cca47893b 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java @@ -5,8 +5,9 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; + import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectAmat.java b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectAmat.java index 088c38a83..be83da6b2 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectAmat.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectAmat.java @@ -2,8 +2,8 @@ package com.hbm.explosion.vanillant.standard; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.interfaces.IExplosionSFX; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java index 79b5b6966..583eaa004 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java @@ -4,8 +4,8 @@ import java.util.List; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.interfaces.IExplosionSFX; -import com.hbm.packet.ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.util.MathHelper; diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/PlayerProcessorStandard.java b/src/main/java/com/hbm/explosion/vanillant/standard/PlayerProcessorStandard.java index 186ea3b85..73f75de27 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/PlayerProcessorStandard.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/PlayerProcessorStandard.java @@ -5,8 +5,8 @@ import java.util.Map.Entry; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.interfaces.IPlayerProcessor; -import com.hbm.packet.ExplosionKnockbackPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.ExplosionKnockbackPacket; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 81a44a47a..18c6a73fa 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -8,9 +8,9 @@ import com.hbm.config.RadiationConfig; import com.hbm.entity.mob.EntityDuck; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index 485de324f..fa14f7d41 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -245,8 +245,9 @@ public class BossSpawnHandler { Vec3 vec; if(repell) { vec = Vec3.createVectorHelper(meteor.posX - player.posX, 0, meteor.posZ - player.posZ).normalize(); - vec.xCoord = vec.xCoord * meteorRand.nextDouble() - 0.5D; - vec.zCoord = vec.zCoord * meteorRand.nextDouble() - 0.5D; + double vel = meteorRand.nextDouble(); + vec.xCoord = vec.xCoord * vel; + vec.zCoord = vec.zCoord * vel; meteor.safe = true; } else { vec = Vec3.createVectorHelper(meteorRand.nextDouble() - 0.5D, 0, 0); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index a7f68661a..0810bb580 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -20,10 +20,10 @@ import com.hbm.interfaces.IArmorModDash; import com.hbm.items.armor.ArmorFSB; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.packet.toclient.ExtPropPacket; import com.hbm.potion.HbmPotion; -import com.hbm.packet.ExtPropPacket; import com.hbm.saveddata.AuxSavedData; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 6ae2507e1..7aa5525b1 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -1,13 +1,14 @@ package com.hbm.handler; import com.hbm.inventory.gui.GUICalculator; + import cpw.mods.fml.common.FMLCommonHandler; import org.lwjgl.input.Keyboard; import com.hbm.extprop.HbmPlayerProps; import com.hbm.main.MainRegistry; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.KeybindPacket; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -21,10 +22,14 @@ public class HbmKeybinds { public static KeyBinding calculatorKey = new KeyBinding(category + ".calculator", Keyboard.KEY_N, category); public static KeyBinding jetpackKey = new KeyBinding(category + ".toggleBack", Keyboard.KEY_C, category); public static KeyBinding hudKey = new KeyBinding(category + ".toggleHUD", Keyboard.KEY_V, category); - public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); + public static KeyBinding gunPrimaryKey = new KeyBinding(category + ".gunPrimary", -100, category); + public static KeyBinding gunSecondaryKey = new KeyBinding(category + ".gunSecondary", -99, category); + public static KeyBinding gunTertiaryKey = new KeyBinding(category + ".gunTertitary", -98, category); + public static KeyBinding craneUpKey = new KeyBinding(category + ".craneMoveUp", Keyboard.KEY_UP, category); public static KeyBinding craneDownKey = new KeyBinding(category + ".craneMoveDown", Keyboard.KEY_DOWN, category); public static KeyBinding craneLeftKey = new KeyBinding(category + ".craneMoveLeft", Keyboard.KEY_LEFT, category); @@ -35,10 +40,14 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(calculatorKey); ClientRegistry.registerKeyBinding(jetpackKey); ClientRegistry.registerKeyBinding(hudKey); - ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); + ClientRegistry.registerKeyBinding(reloadKey); + ClientRegistry.registerKeyBinding(gunPrimaryKey); + ClientRegistry.registerKeyBinding(gunSecondaryKey); + ClientRegistry.registerKeyBinding(gunTertiaryKey); + ClientRegistry.registerKeyBinding(craneUpKey); ClientRegistry.registerKeyBinding(craneDownKey); ClientRegistry.registerKeyBinding(craneLeftKey); @@ -69,13 +78,17 @@ public class HbmKeybinds { JETPACK, TOGGLE_JETPACK, TOGGLE_HEAD, - RELOAD, DASH, TRAIN, CRANE_UP, CRANE_DOWN, CRANE_LEFT, CRANE_RIGHT, - CRANE_LOAD + CRANE_LOAD, + + GUN_PRIMARY, + GUN_SECONDARY, + GUN_TERTIARY, + RELOAD, } } diff --git a/src/main/java/com/hbm/handler/HbmKeybindsServer.java b/src/main/java/com/hbm/handler/HbmKeybindsServer.java new file mode 100644 index 000000000..46b76a22c --- /dev/null +++ b/src/main/java/com/hbm/handler/HbmKeybindsServer.java @@ -0,0 +1,25 @@ +package com.hbm.handler; + +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.items.IKeybindReceiver; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class HbmKeybindsServer { + + /** Can't put this in HbmKeybinds because it's littered with clientonly stuff */ + public static void onPressedServer(EntityPlayer player, EnumKeybind key, boolean state) { + + // EXTPROP HANDLING + HbmPlayerProps props = HbmPlayerProps.getData(player); + props.setKeyPressed(key, state); + + // ITEM HANDLING + ItemStack held = player.getHeldItem(); + if(held != null && held.getItem() instanceof IKeybindReceiver) { + ((IKeybindReceiver) held.getItem()).handleKeybind(player, held, key, state); + } + } +} diff --git a/src/main/java/com/hbm/handler/WeaponAbility.java b/src/main/java/com/hbm/handler/WeaponAbility.java index 11e2621b3..46025acce 100644 --- a/src/main/java/com/hbm/handler/WeaponAbility.java +++ b/src/main/java/com/hbm/handler/WeaponAbility.java @@ -4,8 +4,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.items.ModItems; import com.hbm.items.tool.IItemAbility; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.util.ContaminationUtil; diff --git a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java index 5dac19082..b355567bf 100644 --- a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java @@ -14,8 +14,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.*; import com.hbm.items.ModItems; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorRegistry.HazardClass; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java index 0bb1f6103..a6d351802 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java @@ -11,8 +11,8 @@ import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java index 9f7a5aca7..98ac02468 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java @@ -17,8 +17,8 @@ import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java index 786346617..80dd4fc6d 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java @@ -19,8 +19,8 @@ import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java index 847a3f3ab..ac04b5aa4 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java @@ -14,8 +14,8 @@ import com.hbm.items.ItemAmmoEnums.AmmoLunaticSniper; import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java index 4c0f19804..34c25392a 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java @@ -12,8 +12,8 @@ import com.hbm.items.ItemAmmoEnums.Ammo556mm; import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java index 47ae1fb7d..8362c2605 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java @@ -10,8 +10,8 @@ import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; diff --git a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java index 2d76d18e6..f5b88310c 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java @@ -11,7 +11,7 @@ import com.hbm.main.MainRegistry; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; diff --git a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java index 0ea31f450..ed16b5fa1 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -19,9 +19,9 @@ import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.ExplosionKnockbackPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.packet.toclient.ExplosionKnockbackPacket; import com.hbm.potion.HbmPotion; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.tileentity.IRepairable; diff --git a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java index 5ed0b21db..123d99d7e 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java @@ -17,8 +17,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java index 1d7f84c1f..2aa52a588 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java @@ -12,8 +12,8 @@ import com.hbm.items.ItemAmmoEnums.AmmoGrenade; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.HbmAnimations.AnimType; diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index d7fff5e2b..2bdf1cb63 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -12,8 +12,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.BobMathUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java b/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java index 161dd5522..e09d50209 100644 --- a/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java +++ b/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java @@ -5,8 +5,8 @@ import java.util.Map.Entry; import com.hbm.blocks.ModBlocks; import com.hbm.config.RadiationConfig; -import com.hbm.packet.AuxParticlePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java b/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java index f7d6a3c49..a716f925c 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java @@ -6,6 +6,7 @@ import com.hbm.config.RadiationConfig; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.util.I18nUtil; +import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -32,7 +33,7 @@ public class HazardTypeHydroactive extends HazardTypeBase { if(RadiationConfig.disableHydro) return; - if(item.isWet()) { + if(item.isWet() || item.worldObj.getBlock((int) Math.floor(item.posX), (int) Math.floor(item.posY), (int) Math.floor(item.posZ)).getMaterial() == Material.water) { item.setDead(); item.worldObj.newExplosion(null, item.posX, item.posY + item.height * 0.5, item.posZ, level, false, true); } diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index 85a43f6bf..c2f5914db 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -116,10 +116,17 @@ public class RecipesCommon { this.stacksize = 1; return; } - this.item = stack.getItem(); - if(this.item == null) this.item = ModItems.nothing; //i'm going to bash some fuckard's head in - this.stacksize = stack.stackSize; - this.meta = stack.getItemDamage(); + try { + this.item = stack.getItem(); + if(this.item == null) this.item = ModItems.nothing; //i'm going to bash some fuckard's head in + this.stacksize = stack.stackSize; + this.meta = stack.getItemDamage(); + } catch(Exception ex) { + this.item = ModItems.nothing; + if(!GeneralConfig.enableSilentCompStackErrors) { + ex.printStackTrace(); + } + } } public ComparableStack makeSingular() { diff --git a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java index 2b9bbe7ea..5ad9b2944 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java +++ b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java @@ -17,8 +17,8 @@ import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilConstructionRecipe; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilOutput; import com.hbm.lib.RefStrings; -import com.hbm.packet.AnvilCraftPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AnvilCraftPacket; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/com/hbm/inventory/gui/GUIBarrel.java b/src/main/java/com/hbm/inventory/gui/GUIBarrel.java index e739e81d6..bba645724 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBarrel.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBarrel.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerBarrel; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.storage.TileEntityBarrel; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICombustionEngine.java b/src/main/java/com/hbm/inventory/gui/GUICombustionEngine.java index dc8f89785..d75127785 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICombustionEngine.java +++ b/src/main/java/com/hbm/inventory/gui/GUICombustionEngine.java @@ -9,8 +9,8 @@ import com.hbm.inventory.fluid.trait.FT_Combustible; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineCombustionEngine; import com.hbm.util.EnumUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUICompressor.java b/src/main/java/com/hbm/inventory/gui/GUICompressor.java index 66e72609b..9e2d4aa51 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICompressor.java +++ b/src/main/java/com/hbm/inventory/gui/GUICompressor.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCompressor; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineCompressor; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICoreEmitter.java b/src/main/java/com/hbm/inventory/gui/GUICoreEmitter.java index e8ac99bda..89502cc38 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICoreEmitter.java +++ b/src/main/java/com/hbm/inventory/gui/GUICoreEmitter.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCoreEmitter; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityCoreEmitter; import com.hbm.util.BobMathUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUICoreStabilizer.java b/src/main/java/com/hbm/inventory/gui/GUICoreStabilizer.java index 99c6fb2be..30ec1aa1d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICoreStabilizer.java +++ b/src/main/java/com/hbm/inventory/gui/GUICoreStabilizer.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCoreStabilizer; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityCoreStabilizer; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java b/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java index b4c4dd7b2..6a066a684 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java +++ b/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCounterTorch; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchCounter; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneBoxer.java b/src/main/java/com/hbm/inventory/gui/GUICraneBoxer.java index e2faf5fa4..80dc88555 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICraneBoxer.java +++ b/src/main/java/com/hbm/inventory/gui/GUICraneBoxer.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCraneBoxer; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityCraneBoxer; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java b/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java index e6937c829..7e8f74ab0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java +++ b/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCraneExtractor; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityCraneExtractor; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java b/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java index ef1465205..6bff412fc 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java +++ b/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCraneGrabber; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityCraneGrabber; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneRouter.java b/src/main/java/com/hbm/inventory/gui/GUICraneRouter.java index f378237df..77798355b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICraneRouter.java +++ b/src/main/java/com/hbm/inventory/gui/GUICraneRouter.java @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCraneRouter; import com.hbm.lib.RefStrings; import com.hbm.module.ModulePatternMatcher; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityCraneRouter; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java b/src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java index cd99405b4..4e98d7c4a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java +++ b/src/main/java/com/hbm/inventory/gui/GUIDroneCrate.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerDroneCrate; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityDroneCrate; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserFluid.java b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserFluid.java index 914228045..32a547130 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserFluid.java +++ b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserFluid.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerElectrolyserFluid; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityElectrolyser; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java index 3e4eabfd9..670acabb0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java +++ b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerElectrolyserMetal; import com.hbm.inventory.material.Mats; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityElectrolyser; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIFEL.java b/src/main/java/com/hbm/inventory/gui/GUIFEL.java index 890cb3299..443c01cac 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFEL.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFEL.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerFEL; import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityFEL; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIForceField.java b/src/main/java/com/hbm/inventory/gui/GUIForceField.java index 506541074..e18aca9f1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIForceField.java +++ b/src/main/java/com/hbm/inventory/gui/GUIForceField.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerForceField; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityForceField; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIFunnel.java b/src/main/java/com/hbm/inventory/gui/GUIFunnel.java index 817be3b10..80fd75371 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFunnel.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFunnel.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerFunnel; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineFunnel; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIHadron.java b/src/main/java/com/hbm/inventory/gui/GUIHadron.java index b39db1804..92d97a872 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIHadron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIHadron.java @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerHadron; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityHadron; import com.hbm.tileentity.machine.TileEntityHadron.EnumHadronState; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIHeaterHeatex.java b/src/main/java/com/hbm/inventory/gui/GUIHeaterHeatex.java index a5a2a781f..d4eefef9a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIHeaterHeatex.java +++ b/src/main/java/com/hbm/inventory/gui/GUIHeaterHeatex.java @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerHeaterHeatex; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityHeaterHeatex; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIITER.java b/src/main/java/com/hbm/inventory/gui/GUIITER.java index 4e9b1d85c..27f78ff5d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIITER.java +++ b/src/main/java/com/hbm/inventory/gui/GUIITER.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerITER; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityITER; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java index a90bd4799..d3bf1c87f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java +++ b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java @@ -10,8 +10,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.container.ContainerLaunchPadRusted; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.render.item.ItemRenderMissileGeneric; import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java index f1fdb4d91..7e50956a2 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java @@ -11,8 +11,8 @@ import com.hbm.inventory.container.ContainerMachineArcFurnaceLarge; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java b/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java index 11480d37d..2fa8c4bbe 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java @@ -14,8 +14,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineBattery; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.storage.TileEntityMachineBattery; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java b/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java index 4b78d4aa5..fe81cccba 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineExcavator; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineExcavator; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineFluidTank.java b/src/main/java/com/hbm/inventory/gui/GUIMachineFluidTank.java index 54ddb47e9..9ef320390 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineFluidTank.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineFluidTank.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineFluidTank; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.storage.TileEntityMachineFluidTank; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java index abcc30b6e..eca4887c6 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java @@ -5,8 +5,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineGasFlare; import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.oil.TileEntityMachineGasFlare; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineLaunchTable.java b/src/main/java/com/hbm/inventory/gui/GUIMachineLaunchTable.java index c5373d331..975fb7ad1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineLaunchTable.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineLaunchTable.java @@ -6,8 +6,8 @@ import com.hbm.inventory.container.ContainerLaunchTable; import com.hbm.items.weapon.ItemCustomMissile; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.render.util.MissileMultipart; import com.hbm.render.util.MissilePronter; import com.hbm.tileentity.bomb.TileEntityLaunchTable; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineMissileAssembly.java b/src/main/java/com/hbm/inventory/gui/GUIMachineMissileAssembly.java index c40100afa..d8aec81b6 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineMissileAssembly.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineMissileAssembly.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineMissileAssembly; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.render.util.MissileMultipart; import com.hbm.render.util.MissilePart; import com.hbm.render.util.MissilePronter; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java index 68fd71f77..43fd1ba61 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java @@ -5,8 +5,8 @@ import java.util.Arrays; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 310bc7db0..fe6ecbdea 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -11,8 +11,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.trait.FT_Combustible; import com.hbm.inventory.fluid.trait.FT_Combustible.FuelGrade; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineTurbineGas; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineWoodBurner.java b/src/main/java/com/hbm/inventory/gui/GUIMachineWoodBurner.java index 977f11d20..659febdab 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineWoodBurner.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineWoodBurner.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineWoodBurner; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineWoodBurner; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMassStorage.java b/src/main/java/com/hbm/inventory/gui/GUIMassStorage.java index dfa413f97..08d74a6c3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMassStorage.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMassStorage.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMassStorage; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMicrowave.java b/src/main/java/com/hbm/inventory/gui/GUIMicrowave.java index bc64a398e..13a3ac0f7 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMicrowave.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMicrowave.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMicrowave; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityMicrowave; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMiningLaser.java b/src/main/java/com/hbm/inventory/gui/GUIMiningLaser.java index 79681e6f8..6f5441984 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMiningLaser.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMiningLaser.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMiningLaser; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityMachineMiningLaser; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMixer.java b/src/main/java/com/hbm/inventory/gui/GUIMixer.java index 79f6461d6..974e41635 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMixer.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMixer.java @@ -9,8 +9,8 @@ import com.hbm.inventory.container.ContainerMixer; import com.hbm.inventory.recipes.MixerRecipes; import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineMixer; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeFstbmb.java b/src/main/java/com/hbm/inventory/gui/GUINukeFstbmb.java index b03155b93..a3147d449 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeFstbmb.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeFstbmb.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerNukeFstbmb; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.bomb.TileEntityNukeBalefire; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIOilburner.java b/src/main/java/com/hbm/inventory/gui/GUIOilburner.java index 8d040b03f..d93949e1a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIOilburner.java +++ b/src/main/java/com/hbm/inventory/gui/GUIOilburner.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerOilburner; import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityHeaterOilburner; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIPWR.java b/src/main/java/com/hbm/inventory/gui/GUIPWR.java index db21f4194..3220d178b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPWR.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPWR.java @@ -9,8 +9,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerPWR; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.render.util.GaugeUtil; import com.hbm.tileentity.machine.TileEntityPWRController; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKBoiler.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKBoiler.java index 0b32f00e1..8a645908c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKBoiler.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKBoiler.java @@ -6,8 +6,8 @@ import com.hbm.inventory.container.ContainerRBMKGeneric; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBoiler; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index b07d3a19c..7867f1bc2 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -11,8 +11,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java index fecf9b8e3..b1c8f415e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKControl.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerRBMKControl; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java index 13ce7330f..acb1efae1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKControlAuto.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerRBMKControlAuto; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlAuto; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java index f9014122c..c1fb2b367 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java @@ -6,8 +6,8 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityRadioRec; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorControl.java b/src/main/java/com/hbm/inventory/gui/GUIReactorControl.java index b141317da..b44711ee5 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorControl.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorControl.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerReactorControl; import com.hbm.lib.RefStrings; import com.hbm.module.NumberDisplay; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityReactorControl; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java b/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java index e02d155a5..e8d13b703 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorResearch.java @@ -7,8 +7,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerReactorResearch; import com.hbm.lib.RefStrings; import com.hbm.module.NumberDisplay; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityReactorResearch; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java index f09558da7..be0312a00 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerReactorZirnox; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityReactorZirnox; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUISILEX.java b/src/main/java/com/hbm/inventory/gui/GUISILEX.java index 64b9f36bd..b36c07fcd 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISILEX.java +++ b/src/main/java/com/hbm/inventory/gui/GUISILEX.java @@ -10,8 +10,8 @@ import com.hbm.inventory.recipes.SILEXRecipes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntitySILEX; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenBobmazon.java b/src/main/java/com/hbm/inventory/gui/GUIScreenBobmazon.java index a96b12b6a..14ed3b483 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenBobmazon.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenBobmazon.java @@ -9,8 +9,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.ItemBobmazonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.ItemBobmazonPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenDesignator.java b/src/main/java/com/hbm/inventory/gui/GUIScreenDesignator.java index 67cae4179..7f9c35ac9 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenDesignator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenDesignator.java @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; -import com.hbm.packet.ItemDesignatorPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.ItemDesignatorPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenFluid.java b/src/main/java/com/hbm/inventory/gui/GUIScreenFluid.java index e72526ced..e25744def 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenFluid.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenFluid.java @@ -12,8 +12,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTItemControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTItemControlPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java index fc90751df..1f879d0a7 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java @@ -6,8 +6,8 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchBase; import com.hbm.tileentity.network.TileEntityRadioTorchSender; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java index c78ea3061..11b38f125 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java @@ -7,8 +7,8 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchLogic; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenSatCoord.java b/src/main/java/com/hbm/inventory/gui/GUIScreenSatCoord.java index af560d0d9..e7f4fe2bb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenSatCoord.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenSatCoord.java @@ -8,7 +8,7 @@ import com.hbm.items.ISatChip; import com.hbm.items.tool.ItemSatInterface; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.SatCoordPacket; +import com.hbm.packet.toserver.SatCoordPacket; import com.hbm.saveddata.satellites.Satellite.CoordActions; import com.hbm.saveddata.satellites.Satellite.Interfaces; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenSatInterface.java b/src/main/java/com/hbm/inventory/gui/GUIScreenSatInterface.java index 392f620f9..bba6b5b4f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenSatInterface.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenSatInterface.java @@ -10,7 +10,7 @@ import com.hbm.items.ISatChip; import com.hbm.items.tool.ItemSatInterface; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.SatLaserPacket; +import com.hbm.packet.toserver.SatLaserPacket; import com.hbm.saveddata.satellites.Satellite.InterfaceActions; import com.hbm.saveddata.satellites.Satellite.Interfaces; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index f58519d0a..a91652ef0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -24,8 +24,8 @@ import com.hbm.items.machine.ItemStamp; import com.hbm.items.machine.ItemStamp.StampType; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.ItemFolderPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.ItemFolderPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java b/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java index 644f6eff6..a1fdb30cc 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java +++ b/src/main/java/com/hbm/inventory/gui/GUISoyuzLauncher.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerSoyuzLauncher; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntitySoyuzLauncher; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretArty.java b/src/main/java/com/hbm/inventory/gui/GUITurretArty.java index f53a71a13..04b188f14 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretArty.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretArty.java @@ -1,8 +1,8 @@ package com.hbm.inventory.gui; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.turret.TileEntityTurretArty; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretBase.java b/src/main/java/com/hbm/inventory/gui/GUITurretBase.java index c4c79e551..c5964c108 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretBase.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretBase.java @@ -8,9 +8,9 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerTurretBase; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java b/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java index 1458112b9..2ca5524f1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java @@ -1,8 +1,8 @@ package com.hbm.inventory.gui; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; import com.hbm.tileentity.turret.TileEntityTurretHIMARS; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/inventory/gui/GUIWatz.java b/src/main/java/com/hbm/inventory/gui/GUIWatz.java index c22046d29..cf190b93e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIWatz.java +++ b/src/main/java/com/hbm/inventory/gui/GUIWatz.java @@ -6,8 +6,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerWatz; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.render.util.GaugeUtil; import com.hbm.render.util.GaugeUtil.Gauge; import com.hbm.tileentity.machine.TileEntityWatz; diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index bec49c8d3..d58fa3c3c 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -7,8 +7,9 @@ import codechicken.nei.api.INEIGuiHandler; import codechicken.nei.api.TaggedInventoryArea; import com.hbm.inventory.SlotPattern; import com.hbm.inventory.container.ContainerBase; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; + import cpw.mods.fml.common.Optional; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/inventory/gui/GuiScreenRadioTelex.java b/src/main/java/com/hbm/inventory/gui/GuiScreenRadioTelex.java index 316c6e9fb..c406fd3c9 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiScreenRadioTelex.java +++ b/src/main/java/com/hbm/inventory/gui/GuiScreenRadioTelex.java @@ -7,8 +7,8 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTelex; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/items/IKeybindReceiver.java b/src/main/java/com/hbm/items/IKeybindReceiver.java new file mode 100644 index 000000000..77ba05157 --- /dev/null +++ b/src/main/java/com/hbm/items/IKeybindReceiver.java @@ -0,0 +1,11 @@ +package com.hbm.items; + +import com.hbm.handler.HbmKeybinds.EnumKeybind; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface IKeybindReceiver { + + public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state); +} diff --git a/src/main/java/com/hbm/items/ISyncButtons.java b/src/main/java/com/hbm/items/ISyncButtons.java deleted file mode 100644 index e06e3e78c..000000000 --- a/src/main/java/com/hbm/items/ISyncButtons.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.hbm.items; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.event.MouseEvent; - -public interface ISyncButtons { - - public boolean canReceiveMouse(EntityPlayer player, ItemStack stack, MouseEvent event, int button, boolean buttonstate); - public void receiveMouse(EntityPlayer player, ItemStack stack, int button, boolean buttonstate); -} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 1685902ee..4e4fffd1f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -36,7 +36,7 @@ import com.hbm.items.weapon.ItemCustomMissilePart.*; import com.hbm.items.weapon.ItemMissile.MissileFormFactor; import com.hbm.items.weapon.ItemMissile.MissileFuel; import com.hbm.items.weapon.ItemMissile.MissileTier; -import com.hbm.items.weapon.gununified.ItemEnergyGunBase; +import com.hbm.items.weapon.sedna.GunFactory; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.potion.HbmPotion; @@ -1612,11 +1612,9 @@ public class ModItems { public static Item gun_m2; public static Item gun_lunatic_marksman; public static Item gun_uac_pistol; - - // We'll figure this part out later - //public static Item gun_llr, gun_mlr, gun_hlr, gun_twr, gun_lunatic, gun_lunatic_shotty; - //public static Item gun_uac_pistol, gun_uac_dmr, gun_uac_carbine, gun_uac_lmg; - //public static Item gun_benelli, gun_benelli_mod, gun_g36, spear_bishamonten, pagoda; + + public static Item gun_debug; + public static Item ammo_debug; public static Item crucible; @@ -5474,6 +5472,8 @@ public class ModItems { mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); + GunFactory.init(); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.mud_fluid, 1000), new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket)); FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.acid_fluid, 1000), new ItemStack(ModItems.bucket_acid), new ItemStack(Items.bucket)); FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.toxic_fluid, 1000), new ItemStack(ModItems.bucket_toxic), new ItemStack(Items.bucket)); @@ -7012,6 +7012,9 @@ public class ModItems { GameRegistry.registerItem(gun_glass_cannon, gun_glass_cannon.getUnlocalizedName()); GameRegistry.registerItem(gun_lunatic_marksman, gun_lunatic_marksman.getUnlocalizedName()); + GameRegistry.registerItem(gun_debug, gun_debug.getUnlocalizedName()); + GameRegistry.registerItem(ammo_debug, ammo_debug.getUnlocalizedName()); + //Ammo GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); GameRegistry.registerItem(gun_xvl1456_ammo, gun_xvl1456_ammo.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java index 5882236e7..5702fed77 100644 --- a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java +++ b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java @@ -3,8 +3,8 @@ package com.hbm.items.armor; import java.util.List; import com.hbm.extprop.HbmPlayerProps; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.model.ModelArmorBJ; import com.hbm.util.ArmorUtil; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/items/armor/ArmorDNT.java b/src/main/java/com/hbm/items/armor/ArmorDNT.java index 068ae49f1..88e9d3773 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDNT.java +++ b/src/main/java/com/hbm/items/armor/ArmorDNT.java @@ -6,8 +6,8 @@ import java.util.UUID; import com.google.common.collect.Multimap; import com.hbm.extprop.HbmPlayerProps; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.model.ModelArmorDNT; import com.hbm.util.ArmorUtil; import com.hbm.util.BobMathUtil; diff --git a/src/main/java/com/hbm/items/armor/ArmorDiesel.java b/src/main/java/com/hbm/items/armor/ArmorDiesel.java index e42510fc3..2bc61d99c 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDiesel.java +++ b/src/main/java/com/hbm/items/armor/ArmorDiesel.java @@ -6,8 +6,8 @@ import com.hbm.handler.ArmorModHandler; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.model.ModelArmorDiesel; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/items/armor/ItemModKnife.java b/src/main/java/com/hbm/items/armor/ItemModKnife.java index 9d61d7e2e..0c49f092f 100644 --- a/src/main/java/com/hbm/items/armor/ItemModKnife.java +++ b/src/main/java/com/hbm/items/armor/ItemModKnife.java @@ -5,8 +5,8 @@ import java.util.UUID; import com.hbm.handler.ArmorModHandler; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/items/armor/ItemModLens.java b/src/main/java/com/hbm/items/armor/ItemModLens.java index a9df9cfff..7aeafb941 100644 --- a/src/main/java/com/hbm/items/armor/ItemModLens.java +++ b/src/main/java/com/hbm/items/armor/ItemModLens.java @@ -5,8 +5,8 @@ import java.util.List; import com.hbm.blocks.ModBlocks; import com.hbm.handler.ArmorModHandler; import com.hbm.items.ISatChip; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.saveddata.SatelliteSavedData; import com.hbm.saveddata.satellites.Satellite; import com.hbm.saveddata.satellites.SatelliteScanner; diff --git a/src/main/java/com/hbm/items/armor/JetpackBooster.java b/src/main/java/com/hbm/items/armor/JetpackBooster.java index 09b90947b..f3dbc31bb 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBooster.java +++ b/src/main/java/com/hbm/items/armor/JetpackBooster.java @@ -4,8 +4,8 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.fluid.FluidType; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/JetpackBreak.java b/src/main/java/com/hbm/items/armor/JetpackBreak.java index 340fd2f09..f92b8798b 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBreak.java +++ b/src/main/java/com/hbm/items/armor/JetpackBreak.java @@ -4,8 +4,8 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.fluid.FluidType; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/JetpackRegular.java b/src/main/java/com/hbm/items/armor/JetpackRegular.java index cbf04933b..9e23c4375 100644 --- a/src/main/java/com/hbm/items/armor/JetpackRegular.java +++ b/src/main/java/com/hbm/items/armor/JetpackRegular.java @@ -4,8 +4,8 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.fluid.FluidType; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/JetpackVectorized.java b/src/main/java/com/hbm/items/armor/JetpackVectorized.java index d95312f80..1017fd2a4 100644 --- a/src/main/java/com/hbm/items/armor/JetpackVectorized.java +++ b/src/main/java/com/hbm/items/armor/JetpackVectorized.java @@ -4,8 +4,8 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.fluid.FluidType; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/food/ItemLemon.java b/src/main/java/com/hbm/items/food/ItemLemon.java index 17499655c..032fbf61a 100644 --- a/src/main/java/com/hbm/items/food/ItemLemon.java +++ b/src/main/java/com/hbm/items/food/ItemLemon.java @@ -3,8 +3,8 @@ package com.hbm.items.food; import java.util.List; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java index 612eb8442..0592359de 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java @@ -8,7 +8,7 @@ import com.hbm.inventory.gui.GUIScreenFluid; import com.hbm.items.IItemControlReceiver; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.util.ChatBuilder; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/items/special/ItemCigarette.java b/src/main/java/com/hbm/items/special/ItemCigarette.java index 092885af4..b38fd2d29 100644 --- a/src/main/java/com/hbm/items/special/ItemCigarette.java +++ b/src/main/java/com/hbm/items/special/ItemCigarette.java @@ -5,8 +5,8 @@ import java.util.List; import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java index e690582c0..57698b4a0 100644 --- a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java +++ b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java @@ -8,8 +8,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.block.IToolable; import api.hbm.block.IToolable.ToolType; diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index 0b4ef3dd2..16eb83a0b 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -5,8 +5,8 @@ import com.hbm.items.IAnimatedItem; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.util.EntityDamageUtil; diff --git a/src/main/java/com/hbm/items/tool/ItemChainsaw.java b/src/main/java/com/hbm/items/tool/ItemChainsaw.java index a2d4dfb38..b20f5ba3b 100644 --- a/src/main/java/com/hbm/items/tool/ItemChainsaw.java +++ b/src/main/java/com/hbm/items/tool/ItemChainsaw.java @@ -2,8 +2,8 @@ package com.hbm.items.tool; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.IHeldSoundProvider; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayerMP; diff --git a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java index 4fee946c8..eddb41ace 100644 --- a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java +++ b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java @@ -11,7 +11,7 @@ import com.hbm.interfaces.IHoldableWeapon; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; diff --git a/src/main/java/com/hbm/items/tool/ItemOilDetector.java b/src/main/java/com/hbm/items/tool/ItemOilDetector.java index 45d41af10..3b9cf86b7 100644 --- a/src/main/java/com/hbm/items/tool/ItemOilDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemOilDetector.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.blocks.ModBlocks; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java b/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java index 12483fac7..5fd3ac58f 100644 --- a/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java +++ b/src/main/java/com/hbm/items/tool/ItemOreDensityScanner.java @@ -3,7 +3,7 @@ package com.hbm.items.tool; import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java index 1776249cf..c83ca9459 100644 --- a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java @@ -4,7 +4,7 @@ import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionData; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java index a5907f3f5..660c0ed82 100644 --- a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java +++ b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java @@ -3,8 +3,8 @@ package com.hbm.items.tool; import java.util.List; import com.hbm.blocks.BlockDummyable; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ChatBuilder; import com.hbm.util.fauxpointtwelve.BlockPos; diff --git a/src/main/java/com/hbm/items/tool/ItemSatInterface.java b/src/main/java/com/hbm/items/tool/ItemSatInterface.java index f67a8cc9e..512bfcc72 100644 --- a/src/main/java/com/hbm/items/tool/ItemSatInterface.java +++ b/src/main/java/com/hbm/items/tool/ItemSatInterface.java @@ -6,7 +6,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemSatChip; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.SatPanelPacket; +import com.hbm.packet.toclient.SatPanelPacket; import com.hbm.saveddata.SatelliteSavedData; import com.hbm.saveddata.satellites.Satellite; import com.hbm.tileentity.IGUIProvider; diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 43b6c885e..99ce2d356 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -13,7 +13,7 @@ import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.*; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import com.hbm.handler.WeaponAbility; diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index d6482e22f..0014cb736 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -23,8 +23,8 @@ import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.particle.helper.ExplosionCreator; diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoHIMARS.java b/src/main/java/com/hbm/items/weapon/ItemAmmoHIMARS.java index 61ad4299d..f50d3ba0f 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoHIMARS.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoHIMARS.java @@ -15,8 +15,8 @@ import com.hbm.explosion.vanillant.standard.EntityProcessorCross; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.helper.ExplosionCreator; import com.hbm.potion.HbmPotion; diff --git a/src/main/java/com/hbm/items/weapon/ItemCrucible.java b/src/main/java/com/hbm/items/weapon/ItemCrucible.java index 0fbfb1a64..14e0818cf 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCrucible.java +++ b/src/main/java/com/hbm/items/weapon/ItemCrucible.java @@ -6,8 +6,8 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.hbm.items.IEquipReceiver; import com.hbm.items.tool.ItemSwordAbility; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ShadyUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/items/weapon/ItemCryoCannon.java b/src/main/java/com/hbm/items/weapon/ItemCryoCannon.java index 6a69055ab..4831b4556 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCryoCannon.java +++ b/src/main/java/com/hbm/items/weapon/ItemCryoCannon.java @@ -5,8 +5,8 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.fluid.Fluids; -import com.hbm.packet.GunAnimationPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.enchantment.Enchantment; diff --git a/src/main/java/com/hbm/items/weapon/gununified/ItemEnergyGunBase.java b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java similarity index 95% rename from src/main/java/com/hbm/items/weapon/gununified/ItemEnergyGunBase.java rename to src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java index 554f5a6ea..ffbc0388d 100644 --- a/src/main/java/com/hbm/items/weapon/gununified/ItemEnergyGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java @@ -1,4 +1,4 @@ -package com.hbm.items.weapon.gununified; +package com.hbm.items.weapon; import java.util.List; @@ -9,10 +9,9 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IHoldableWeapon; -import com.hbm.items.weapon.ItemGunBase; -import com.hbm.packet.GunAnimationPacket; -import com.hbm.packet.GunButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.GunAnimationPacket; +import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index e40e9889c..56e9d3be8 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -19,10 +19,10 @@ import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; import com.hbm.lib.HbmCollection; -import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.GunAnimationPacket; -import com.hbm.packet.GunButtonPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.packet.toclient.GunAnimationPacket; +import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java index 110ed0f3e..3a9ec6fba 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java @@ -10,8 +10,8 @@ import com.hbm.interfaces.IHoldableWeapon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.machine.ItemFluidIcon; -import com.hbm.packet.GunAnimationPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunGauss.java b/src/main/java/com/hbm/items/weapon/ItemGunGauss.java index 7dd20b1a0..b3c7e83c0 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunGauss.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunGauss.java @@ -5,8 +5,8 @@ import com.hbm.handler.GunConfiguration; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.GunAnimationPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.sound.AudioWrapper; diff --git a/src/main/java/com/hbm/items/weapon/ItemPlasmaSpear.java b/src/main/java/com/hbm/items/weapon/ItemPlasmaSpear.java deleted file mode 100644 index 38b210a38..000000000 --- a/src/main/java/com/hbm/items/weapon/ItemPlasmaSpear.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.hbm.items.weapon; - -import java.util.List; - -import com.hbm.inventory.fluid.FluidType; -import com.hbm.inventory.fluid.Fluids; -import com.hbm.items.ISyncButtons; -import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.PacketDispatcher; - -import api.hbm.fluid.IFillableItem; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.client.event.MouseEvent; - -public class ItemPlasmaSpear extends Item implements IFillableItem, ISyncButtons { - - public static final int maxFuel = 3_000; - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return getFill(stack) < maxFuel; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return 1 - (double) getFill(stack) / (double) maxFuel; - } - - @Override - public int getFill(ItemStack stack) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - setFill(stack, maxFuel); - return maxFuel; - } - - return stack.stackTagCompound.getInteger("fuel"); - } - - public void setFill(ItemStack stack, int fill) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - } - - stack.stackTagCompound.setInteger("fuel", fill); - } - - public static ItemStack getEmptyTool(Item item) { - ItemPlasmaSpear tool = (ItemPlasmaSpear) item; - ItemStack stack = new ItemStack(item); - tool.setFill(stack, 0); - return stack; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - - if(world.isRemote) return stack; - - if(!stack.hasTagCompound()) { - stack.stackTagCompound = new NBTTagCompound(); - } - - stack.stackTagCompound.setBoolean("melee", !stack.stackTagCompound.getBoolean("melee")); - world.playSoundAtEntity(player, "random.orb", 0.25F, 1.25F); - - return stack; - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - - if(stack.hasTagCompound() && !stack.stackTagCompound.getBoolean("melee")) { - return true; //cancel hitting, it's ranged - } - - return false; - } - - @Override - public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) { - - if(!(entityLiving instanceof EntityPlayerMP)) - return false; - - if(getFill(stack) <= 0) - return false; - - if(stack.hasTagCompound() && stack.stackTagCompound.getBoolean("melee")) { - return true; //cancel hitting, it's ranged - } - - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("type", "anim"); - nbt.setString("mode", "lSwing"); - PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(nbt, 0, 0, 0), (EntityPlayerMP)entityLiving); - - return false; - } - - @Override - public boolean canReceiveMouse(EntityPlayer player, ItemStack stack, MouseEvent event, int button, boolean buttonstate) { - - if(stack.hasTagCompound() && stack.stackTagCompound.getBoolean("melee")) { - return false; - } - - if(button == 0) { - event.setCanceled(true); - return true; - } - - return false; - } - - @Override - public void receiveMouse(EntityPlayer player, ItemStack stack, int button, boolean buttonstate) { - Vec3 start = Vec3.createVectorHelper(player.posX, player.posY + player.getEyeHeight() - player.yOffset, player.posZ); - Vec3 look = player.getLookVec(); - Vec3 end = start.addVector(look.xCoord * 100, look.yCoord * 100, look.zCoord * 100); - - List targets = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, AxisAlignedBB.getBoundingBox( - Math.min(start.xCoord, end.xCoord), - Math.min(start.yCoord, end.yCoord), - Math.min(start.zCoord, end.zCoord), - Math.max(start.xCoord, end.xCoord), - Math.max(start.yCoord, end.yCoord), - Math.max(start.zCoord, end.zCoord) - )); - - for(Entity target : targets) { - - AxisAlignedBB aabb = target.boundingBox; - MovingObjectPosition hitMop = aabb.calculateIntercept(start, end); - - if(hitMop != null) { - target.attackEntityFrom(new EntityDamageSource(ModDamageSource.s_laser, player).setDamageBypassesArmor(), 15F); - } - } - } - - @Override - public boolean acceptsFluid(FluidType type, ItemStack stack) { - return type == Fluids.SCHRABIDIC; - } - - @Override - public int tryFill(FluidType type, int amount, ItemStack stack) { - - int fill = this.getFill(stack); - int toFill = this.maxFuel - fill; - toFill = Math.min(toFill, amount); - toFill = Math.min(toFill, 10); - - this.setFill(stack, fill + toFill); - - return amount - toFill; - } - - @Override public boolean providesFluid(FluidType type, ItemStack stack) { return false; } - @Override public int tryEmpty(FluidType type, int amount, ItemStack stack) { return 0; } - - @Override - public FluidType getFirstFluidType(ItemStack stack) { - return Fluids.SCHRABIDIC; - } -} diff --git a/src/main/java/com/hbm/items/weapon/gununified/GunFrame.java b/src/main/java/com/hbm/items/weapon/gununified/GunFrame.java deleted file mode 100644 index ad2ab4f0d..000000000 --- a/src/main/java/com/hbm/items/weapon/gununified/GunFrame.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.hbm.items.weapon.gununified; - -import java.util.ArrayList; -import java.util.List; - -import com.hbm.util.Tuple.Pair; -import com.hbm.util.Tuple.Triplet; - -import api.hbm.item.IClickReceiver; -import api.hbm.item.IGunHUDProvider; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.Entity; -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; - -@Deprecated -public abstract class GunFrame extends Item implements IGunHUDProvider, IClickReceiver { - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { - - if(entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - - if(world.isRemote) { - this.updatePlayerClient(stack, world, player, slot, isCurrentItem); - } else { - this.updatePlayerServer(stack, world, player, slot, isCurrentItem); - } - } - } - - public void updatePlayerClient(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { } - public void updatePlayerServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { } - - @Override - @SideOnly(Side.CLIENT) - public boolean handleMouseInput(ItemStack stack, EntityPlayer player, int button, boolean state) { - return false; - } - - @Override - public List> getStatusBars(ItemStack stack, EntityPlayer player) { - return new ArrayList(); - } - - @Override - public List> getAmmoInfo(ItemStack stack, EntityPlayer player) { - return null; - } - - public static double getDurabilityBar(ItemStack stack) { - return 1.0D; - } -} diff --git a/src/main/java/com/hbm/items/weapon/gununified/GunRealoadable.java b/src/main/java/com/hbm/items/weapon/gununified/GunRealoadable.java deleted file mode 100644 index d1cfc831f..000000000 --- a/src/main/java/com/hbm/items/weapon/gununified/GunRealoadable.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hbm.items.weapon.gununified; - -import org.lwjgl.input.Keyboard; - -import com.hbm.handler.HbmKeybinds; - -import api.hbm.item.IButtonReceiver; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public class GunRealoadable extends GunFrame implements IButtonReceiver { - - private IReloadBehavior reload; - public static boolean lastReload = false; - - @Override - @SideOnly(Side.CLIENT) - public void handleKeyboardInput(ItemStack stack, EntityPlayer player) { - - boolean reload = Keyboard.isKeyDown(HbmKeybinds.reloadKey.getKeyCode()); - - if(this.reload != null) { - this.reload.tryStartReload(stack, player); - } - - lastReload = reload; - } -} diff --git a/src/main/java/com/hbm/items/weapon/gununified/IReloadBehavior.java b/src/main/java/com/hbm/items/weapon/gununified/IReloadBehavior.java deleted file mode 100644 index 1bc6e3d19..000000000 --- a/src/main/java/com/hbm/items/weapon/gununified/IReloadBehavior.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.hbm.items.weapon.gununified; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface IReloadBehavior { - - public boolean tryStartReload(ItemStack stack, EntityPlayer player); - public boolean updateRelaod(ItemStack stack, EntityPlayer player); -} diff --git a/src/main/java/com/hbm/items/weapon/gununified/IStatusBarProvider.java b/src/main/java/com/hbm/items/weapon/gununified/IStatusBarProvider.java deleted file mode 100644 index 6d91fce96..000000000 --- a/src/main/java/com/hbm/items/weapon/gununified/IStatusBarProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.hbm.items.weapon.gununified; - -import java.util.List; - -import com.hbm.util.Tuple.Triplet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface IStatusBarProvider { - - public void provideBars(ItemStack stack, EntityPlayer player, List> bars); -} diff --git a/src/main/java/com/hbm/items/weapon/gununified/StatusBarDurability.java b/src/main/java/com/hbm/items/weapon/gununified/StatusBarDurability.java deleted file mode 100644 index 9a47d0664..000000000 --- a/src/main/java/com/hbm/items/weapon/gununified/StatusBarDurability.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hbm.items.weapon.gununified; - -import java.util.List; - -import com.hbm.util.Tuple.Triplet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public class StatusBarDurability implements IStatusBarProvider { - - @Override - public void provideBars(ItemStack stack, EntityPlayer player, List> bars) { - //TODO - } -} diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java new file mode 100644 index 000000000..9cc858b8b --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -0,0 +1,36 @@ +package com.hbm.items.weapon.sedna; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.inventory.RecipesCommon.ComparableStack; + +import net.minecraft.item.Item; + +public class BulletConfig { + + public static List configs = new ArrayList(); + + public final int id; + + public ComparableStack ammo; + public int ammoReloadCount = 1; + public float velocity = 5F; + public float spread = 0F; + public float wear = 1F; + public int projectilesMin = 1; + public int projectilesMax = 1; + + public float damageMult = 1.0F; + public float headshotMult = 1.0F; + + public double gravity = 0; + public int expires = 100; + + public BulletConfig() { + this.id = configs.size(); + configs.add(this); + } + + public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java new file mode 100644 index 000000000..91bdffc24 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -0,0 +1,62 @@ +package com.hbm.items.weapon.sedna; + +import java.util.function.BiConsumer; + +import com.hbm.render.util.RenderScreenOverlay.Crosshair; + +import net.minecraft.item.ItemStack; + +public class GunConfig { + + /* FIELDS */ + + /** List of receivers used by the gun, primary and secondary are usually indices 0 and 1 respectively, if applicable */ + protected Receiver[] receivers; + protected float durability; + protected int drawDuration = 0; + protected Crosshair crosshair; + /** Lambda functions for clicking shit */ + protected BiConsumer onPressPrimary; + protected BiConsumer onPressSecondary; + protected BiConsumer onPressTertiary; + protected BiConsumer onPressReload; + /** Lambda functions for releasing the aforementioned shit */ + protected BiConsumer onReleasePrimary; + protected BiConsumer onReleaseSecondary; + protected BiConsumer onReleaseTertiary; + protected BiConsumer onReleaseReload; + + /* GETTERS */ + + public Receiver[] getReceivers(ItemStack stack) { return receivers; } + public float getDurability(ItemStack stack) { return durability; } + public int getDrawDuration(ItemStack stack) { return drawDuration; } + public Crosshair getCrosshair(ItemStack stack) { return crosshair; } + + public BiConsumer getPressPrimary(ItemStack stack) { return this.onPressPrimary; } + public BiConsumer getPressSecondary(ItemStack stack) { return this.onPressSecondary; } + public BiConsumer getPressTertiary(ItemStack stack) { return this.onPressTertiary; } + public BiConsumer getPressReload(ItemStack stack) { return this.onPressReload; } + + public BiConsumer getReleasePrimary(ItemStack stack) { return this.onReleasePrimary; } + public BiConsumer getReleaseSecondary(ItemStack stack) { return this.onReleaseSecondary; } + public BiConsumer getReleaseTertiary(ItemStack stack) { return this.onReleaseTertiary; } + public BiConsumer getReleaseReload(ItemStack stack) { return this.onReleaseReload; } + + /* SETTERS */ + + public GunConfig rec(Receiver... receivers) { this.receivers = receivers; return this; } + public GunConfig dura(float dura) { this.durability = dura; return this; } + public GunConfig draw(int draw) { this.drawDuration = draw; return this; } + public GunConfig crosshair(Crosshair crosshair) { this.crosshair = crosshair; return this; } + + public GunConfig pp(BiConsumer lambda) { this.onPressPrimary = lambda; return this; } + public GunConfig ps(BiConsumer lambda) { this.onPressSecondary = lambda; return this; } + public GunConfig pt(BiConsumer lambda) { this.onPressTertiary = lambda; return this; } + public GunConfig pr(BiConsumer lambda) { this.onPressReload = lambda; return this; } + + public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary = lambda; return this; } + public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary = lambda; return this; } + public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary = lambda; return this; } + public GunConfig rr(BiConsumer lambda) { this.onReleaseReload = lambda; return this; } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java new file mode 100644 index 000000000..d27913133 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java @@ -0,0 +1,25 @@ +package com.hbm.items.weapon.sedna; + +import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.mags.MagazineRevolverDrum; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.render.util.RenderScreenOverlay.Crosshair; + +import net.minecraft.item.Item; + +public class GunFactory { + + public static void init() { + + ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); + + BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug); + + ModItems.gun_debug = new ItemGunBase(new GunConfig() + .dura(600).draw(15).crosshair(Crosshair.L_CLASSIC) + .rec(new Receiver() + .dmg(10F).delay(10).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug))) + ).setUnlocalizedName("gun_debug").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_darter"); + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java new file mode 100644 index 000000000..1a82c51ba --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java @@ -0,0 +1,112 @@ +package com.hbm.items.weapon.sedna; + +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.items.IKeybindReceiver; +import com.hbm.util.EnumUtil; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class ItemGunBase extends Item implements IKeybindReceiver { + + public static final String KEY_DRAWN = "drawn"; + public static final String KEY_TIMER = "timer"; + public static final String KEY_STATE = "state"; + public static final String KEY_PRIMARY = "mouse1"; + public static final String KEY_SECONDARY = "mouse2"; + public static final String KEY_TERTIARY = "mouse3"; + public static final String KEY_RELOAD = "reload"; + + /** NEVER ACCESS DIRECTLY - USE GETTER */ + private GunConfig config_DNA; + + public GunConfig getConfig(ItemStack stack) { + return config_DNA; + } + + public ItemGunBase(GunConfig cfg) { + this.setMaxStackSize(1); + this.config_DNA = cfg; + } + + public static enum GunState { + DRAWING, //initial delay after selecting + IDLE, //gun can be fired or reloaded + WINDUP, //fire button is down, added delay before fire + JUST_FIRED, //gun has been fired, cooldown + RELOADING //gun is currently reloading + } + + @Override + public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean newState) { + + GunConfig config = getConfig(stack); + + if(keybind == EnumKeybind.GUN_PRIMARY && newState && !getPrimary(stack)) { if(config.getPressPrimary(stack) != null) config.getPressPrimary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_PRIMARY && !newState && getPrimary(stack)) { if(config.getReleasePrimary(stack) != null) config.getReleasePrimary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_SECONDARY && newState && !getSecondary(stack)) { if(config.getPressSecondary(stack) != null) config.getPressSecondary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_SECONDARY && !newState && getSecondary(stack)) { if(config.getReleaseSecondary(stack) != null) config.getReleaseSecondary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_TERTIARY && newState && !getTertiary(stack)) { if(config.getPressTertiary(stack) != null) config.getPressTertiary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_TERTIARY && !newState && getTertiary(stack)) { if(config.getReleaseTertiary(stack) != null) config.getReleaseTertiary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.RELOAD && newState && !getReloadKey(stack)) { if(config.getPressReload(stack) != null) config.getPressReload(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.RELOAD && !newState && getReloadKey(stack)) { if(config.getReleaseReload(stack) != null) config.getReleaseReload(stack).accept(stack, config); return; } + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld) { + if(world.isRemote) return; + + GunConfig config = this.getConfig(stack); + + if(!isHeld) { + this.setState(stack, GunState.DRAWING); + this.setTimer(stack, config.getDrawDuration(stack)); + return; + } + + int timer = this.getTimer(stack); + if(timer > 0) this.setTimer(stack, timer - 1); + if(timer <= 1) nextState(); + } + + public void nextState() { + // run the decider + } + + // GUN DRAWN // + public static boolean getIsDrawn(ItemStack stack) { return getValueBool(stack, KEY_DRAWN); } + public static void setIsDrawn(ItemStack stack, boolean value) { setValueBool(stack, KEY_DRAWN, value); } + + // GUN STATE TIMER // + public static int getTimer(ItemStack stack) { return getValueInt(stack, KEY_TIMER); } + public static void setTimer(ItemStack stack, int value) { setValueInt(stack, KEY_TIMER, value); } + + // GUN STATE // + public static GunState getState(ItemStack stack) { return EnumUtil.grabEnumSafely(GunState.class, getValueByte(stack, KEY_STATE)); } + public static void setState(ItemStack stack, GunState value) { setValueByte(stack, KEY_STATE, (byte) value.ordinal()); } + + // BUTTON STATES // + public static boolean getPrimary(ItemStack stack) { return getValueBool(stack, KEY_PRIMARY); } + public static void setPrimary(ItemStack stack, boolean value) { setValueBool(stack, KEY_PRIMARY, value); } + public static boolean getSecondary(ItemStack stack) { return getValueBool(stack, KEY_SECONDARY); } + public static void setSecondary(ItemStack stack, boolean value) { setValueBool(stack, KEY_SECONDARY, value); } + public static boolean getTertiary(ItemStack stack) { return getValueBool(stack, KEY_TERTIARY); } + public static void setTertiary(ItemStack stack, boolean value) { setValueBool(stack, KEY_TERTIARY, value); } + public static boolean getReloadKey(ItemStack stack) { return getValueBool(stack, KEY_RELOAD); } + public static void setReloadKey(ItemStack stack, boolean value) { setValueBool(stack, KEY_RELOAD, value); } + + + /// UTIL /// + public static int getValueInt(ItemStack stack, String name) { if(stack.hasTagCompound()) stack.getTagCompound().getInteger(name); return 0; } + public static void setValueInt(ItemStack stack, String name, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger(name, value); } + + public static byte getValueByte(ItemStack stack, String name) { if(stack.hasTagCompound()) stack.getTagCompound().getByte(name); return 0; } + public static void setValueByte(ItemStack stack, String name, byte value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setByte(name, value); } + + public static boolean getValueBool(ItemStack stack, String name) { if(stack.hasTagCompound()) stack.getTagCompound().getBoolean(name); return false; } + public static void setValueBool(ItemStack stack, String name, boolean value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setBoolean(name, value); } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java new file mode 100644 index 000000000..fbc3ec079 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -0,0 +1,24 @@ +package com.hbm.items.weapon.sedna; + +import com.hbm.handler.CasingEjector; +import com.hbm.items.weapon.sedna.mags.IMagazine; + +public class Receiver { + + protected float baseDamage; + protected int delayAfterFire; + protected int roundsPerCycle = 1; + protected boolean refireOnHold = false; + protected int burstSize = 1; + protected int delayAfterBurst = 0; + protected CasingEjector ejector = null; + protected IMagazine magazine; + + public Receiver dmg(float dmg) { this.baseDamage = dmg; return this; } + public Receiver delay(int delay) { this.delayAfterFire = delay; return this; } + public Receiver rounds(int rounds) { this.roundsPerCycle = rounds; return this; } + public Receiver auto(boolean auto) { this.refireOnHold = auto; return this; } + public Receiver burst(int size, int delay) { this.burstSize = size; this.delayAfterBurst = delay; return this; } + public Receiver burst(CasingEjector ejector) { this.ejector = ejector; return this; } + public Receiver mag(IMagazine magazine) { this.magazine = magazine; return this; } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java new file mode 100644 index 000000000..90d6a2337 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java @@ -0,0 +1,24 @@ +package com.hbm.items.weapon.sedna.mags; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface IMagazine { + + /** What ammo is loaded currently */ + public Object getType(ItemStack stack); + /** Sets the mag's ammo type */ + public void setType(ItemStack stack, Object type); + /** How much ammo this mag can carry */ + public int getCapacity(ItemStack stack); + /** How much ammo is currently loaded */ + public int getAmount(ItemStack stack); + /** Sets the mag's ammo level */ + public void setAmount(ItemStack stack, int amount); + /** If a reload can even be initiated, i.e. the player even has bullets to load */ + public boolean canReload(ItemStack stack, EntityPlayer player); + /** The action done at the end of one reload cycle, either loading one shell or replacing the whole mag */ + public void reloadAction(ItemStack stack, EntityPlayer player); + /** The stack that should be displayed for the ammo HUD */ + public ItemStack getIcon(ItemStack stack); +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java new file mode 100644 index 000000000..628d1a73d --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java @@ -0,0 +1,82 @@ +package com.hbm.items.weapon.sedna.mags; + +import com.hbm.items.weapon.sedna.BulletConfig; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** Uses individual bullets which are loaded all at once */ +public class MagazineRevolverDrum extends MagazineStandardBase { + + public MagazineRevolverDrum(int index, int capacity) { + super(index, capacity); + } + + /** Returns true if the player has the same ammo if partially loaded, or any valid ammo if not */ + @Override + public boolean canReload(ItemStack stack, EntityPlayer player) { + + for(ItemStack slot : player.inventory.mainInventory) { + + if(slot != null) { + if(this.getAmount(stack) == 0) { + for(BulletConfig config : this.acceptedBullets) { + if(config.ammo.matchesRecipe(slot, true)) return true; + } + } else { + BulletConfig config = (BulletConfig) this.getType(stack); + if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } + if(config.ammo.matchesRecipe(slot, true)) return true; + } + } + } + + return false; + } + + /** Reloads all rounds at once. If the mag is empty, the mag's type will change to the first valid ammo type */ + @Override + public void reloadAction(ItemStack stack, EntityPlayer player) { + + for(int i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack slot = player.inventory.mainInventory[i]; + + if(slot != null) { + + //mag is empty, assume next best type + if(this.getAmount(stack) == 0) { + + for(BulletConfig config : this.acceptedBullets) { + if(config.ammo.matchesRecipe(slot, true)) { + this.setType(stack, config); + int toLoad = Math.min(this.getCapacity(stack), slot.stackSize); + this.setAmount(stack, toLoad); + player.inventory.decrStackSize(i, toLoad); + break; + } + } + //mag has a type set, only load that + } else { + BulletConfig config = (BulletConfig) this.getType(stack); + if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT + + if(config.ammo.matchesRecipe(slot, true)) { + int alreadyLoaded = this.getAmount(stack); + int toLoad = Math.min(this.getCapacity(stack) - alreadyLoaded, slot.stackSize); + this.setAmount(stack, toLoad + alreadyLoaded); + player.inventory.decrStackSize(i, toLoad); + } + } + } + } + } + + @Override + public ItemStack getIcon(ItemStack stack) { + Object o = this.getType(stack); + if(o instanceof BulletConfig) { + return ((BulletConfig) o).ammo.toStack(); + } + return null; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java new file mode 100644 index 000000000..4ce6a9eb9 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java @@ -0,0 +1,60 @@ +package com.hbm.items.weapon.sedna.mags; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.items.weapon.sedna.ItemGunBase; +import com.hbm.items.weapon.sedna.Receiver; + +import net.minecraft.item.ItemStack; + +/** Base class for typical magazines, i.e. ones that hold bullets, shells, grenades, etc, any ammo item. Type methods deal with BulletConfigs */ +public abstract class MagazineStandardBase implements IMagazine { + + public static final String KEY_MAG_COUNT = "magcount"; + public static final String KEY_MAG_TYPE = "magtype"; + + protected List acceptedBullets = new ArrayList(); + + /** A number so the gun tell multiple mags apart */ + public int index; + /** How much ammo this mag can hold */ + public int capacity; + public Receiver parent; + + public MagazineStandardBase(int index, int capacity) { + this.index = index; + this.capacity = capacity; + } + + public MagazineStandardBase addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; } + + @Override + public Object getType(ItemStack stack) { + int type = getMagType(stack, index); + if(type >= 0 && type < acceptedBullets.size()) { + return acceptedBullets.get(type); + } + return null; + } + + @Override + public void setType(ItemStack stack, Object type) { + if(!(type instanceof BulletConfig)) return; + int i = acceptedBullets.indexOf(type); + if(i >= 0) setMagType(stack, index, i); + } + + @Override public int getCapacity(ItemStack stack) { return capacity; } + @Override public int getAmount(ItemStack stack) { return getMagCount(stack, index); } + @Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); } + + // MAG TYPE // + public static int getMagType(ItemStack stack, int index) { return ItemGunBase.getValueInt(stack, KEY_MAG_TYPE + index); } + public static void setMagType(ItemStack stack, int index, int value) { ItemGunBase.setValueInt(stack, KEY_MAG_TYPE + index, value); } + + // MAG COUNT // + public static int getMagCount(ItemStack stack, int index) { return ItemGunBase.getValueInt(stack, KEY_MAG_COUNT + index); } + public static void setMagCount(ItemStack stack, int index, int value) { ItemGunBase.setValueInt(stack, KEY_MAG_COUNT + index, value); } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/package-info.java b/src/main/java/com/hbm/items/weapon/sedna/package-info.java new file mode 100644 index 000000000..a23713eca --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/package-info.java @@ -0,0 +1,24 @@ +/** + * + */ +/** + * @author hbm + * + */ +package com.hbm.items.weapon.sedna; + +/* + +The MK2 unified gun system SEDNA + +ItemGunBase - NBT, timer, keybind handling + | GunConfig (1) - durability and sights + | Receiver (n) - base damage, fire modes + | Magazine (1) - NBT, reload management + | BulletConfig (n) - ammo stats + +Based on this system, alt fire that should logically use the same receiver actually use two different receivers, and +by extension two different mag fields. In this case, make sure to use the same mag instance (or an identical one) +on either receiver to ensure that both receivers access the same ammo pool and accept the same ammo types. + +*/ \ No newline at end of file diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c84df18c8..7bd969303 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -104,6 +104,7 @@ import com.hbm.render.item.*; import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType; import com.hbm.render.item.block.*; import com.hbm.render.item.weapon.*; +import com.hbm.render.item.weapon.sedna.*; import com.hbm.render.loader.HmfModelLoader; import com.hbm.render.model.ModelPigeon; import com.hbm.render.tileentity.*; @@ -602,6 +603,8 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.gun_coilgun, new ItemRenderWeaponCoilgun()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_cryocannon, new ItemRenderWeaponCryoCannon()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_congolake, new ItemRenderWeaponCongo()); + //SEDNA + MinecraftForgeClient.registerItemRenderer(ModItems.gun_debug, new ItemRenderDebug()); //multitool MinecraftForgeClient.registerItemRenderer(ModItems.multitool_dig, new ItemRenderMultitool()); MinecraftForgeClient.registerItemRenderer(ModItems.multitool_silk, new ItemRenderMultitool()); @@ -2110,6 +2113,9 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); + case GUN_PRIMARY: return HbmKeybinds.gunPrimaryKey.getIsKeyPressed(); + case GUN_SECONDARY: return HbmKeybinds.gunSecondaryKey.getIsKeyPressed(); + case GUN_TERTIARY: return HbmKeybinds.gunTertiaryKey.getIsKeyPressed(); } return false; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 5a88ba3bf..acdda9f2e 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1422,6 +1422,7 @@ public class MainRegistry { ignoreMappings.add("hbm:item.gas7"); ignoreMappings.add("hbm:item.gas8"); ignoreMappings.add("hbm:tile.brick_forgotten"); + ignoreMappings.add("hbm:tile.watz_conductor"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 725bad598..478c1fe9a 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -60,8 +60,8 @@ import com.hbm.lib.HbmCollection; import com.hbm.lib.ModDamageSource; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PermaSyncPacket; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PermaSyncPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.AuxSavedData; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 317e05ba7..9b2bddb31 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -33,7 +33,6 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.gui.GUIArmorTable; import com.hbm.inventory.gui.GUIScreenPreview; import com.hbm.inventory.gui.GUIScreenWikiRender; -import com.hbm.items.ISyncButtons; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; import com.hbm.items.armor.ArmorFSBPowered; @@ -46,10 +45,9 @@ import com.hbm.items.machine.ItemRBMKPellet; import com.hbm.items.weapon.ItemGunBase; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; -import com.hbm.packet.AuxButtonPacket; -import com.hbm.packet.GunButtonPacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.SyncButtonsPacket; +import com.hbm.packet.toserver.AuxButtonPacket; +import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.render.block.ct.CTStitchReceiver; @@ -80,9 +78,6 @@ import com.hbm.util.ArmorUtil; import com.hbm.util.ArmorRegistry.HazardClass; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; -import api.hbm.item.IButtonReceiver; -import api.hbm.item.IClickReceiver; - import com.hbm.sound.MovingSoundPlayerLoop.EnumHbmSound; import cpw.mods.fml.client.FMLClientHandler; @@ -91,7 +86,6 @@ import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; -import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; @@ -593,15 +587,6 @@ public class ModEventHandlerClient { Item held = player.getHeldItem().getItem(); - if(held instanceof IClickReceiver) { - IClickReceiver rec = (IClickReceiver) held; - - if(rec.handleMouseInput(player.getHeldItem(), player, event.button, event.buttonstate)) { - event.setCanceled(true); - return; - } - } - if(held instanceof ItemGunBase) { if(event.button == 0) @@ -620,30 +605,6 @@ public class ModEventHandlerClient { item.startActionClient(player.getHeldItem(), player.worldObj, player, false); } } - - if(held instanceof ISyncButtons) { - ISyncButtons rec = (ISyncButtons) held; - - if(rec.canReceiveMouse(player, player.getHeldItem(), event, event.button, event.buttonstate)) { - PacketDispatcher.wrapper.sendToServer(new SyncButtonsPacket(event.buttonstate, event.button)); - } - } - } - } - - @SubscribeEvent - public void keyEvent(KeyInputEvent event) { - - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - if(player.getHeldItem() != null) { - - Item held = player.getHeldItem().getItem(); - - if(held instanceof IButtonReceiver) { - IButtonReceiver rec = (IButtonReceiver) held; - rec.handleKeyboardInput(player.getHeldItem(), player); - } } } @@ -1110,8 +1071,8 @@ public class ModEventHandlerClient { @SideOnly(Side.CLIENT) @SubscribeEvent - public void onMouseClicked(InputEvent.KeyInputEvent event) { - + public void onMouseClicked(InputEvent.MouseInputEvent event) { + Minecraft mc = Minecraft.getMinecraft(); if(GeneralConfig.enableKeybindOverlap && (mc.currentScreen == null || mc.currentScreen.allowUserInput)) { boolean state = Mouse.getEventButtonState(); @@ -1122,7 +1083,7 @@ public class ModEventHandlerClient { KeyBinding key = (KeyBinding) o; if(key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { - + key.pressed = state; if(state) { key.pressTime++; diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index 7fb0fc35b..693c8e20c 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -9,6 +9,7 @@ import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.items.armor.IArmorDisableModel; import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart; import com.hbm.packet.PermaSyncHandler; +import com.hbm.render.item.weapon.sedna.ItemRenderWeaponBase; import com.hbm.render.model.ModelMan; import com.hbm.world.biome.BiomeGenCraterBase; @@ -33,11 +34,15 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; +import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.EntityViewRenderEvent.FogColors; import net.minecraftforge.client.event.EntityViewRenderEvent.FogDensity; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; +import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.common.ForgeModContainer; @@ -409,6 +414,22 @@ public class ModEventHandlerRenderer { } } + @SubscribeEvent + public void onRenderHand(RenderHandEvent event) { + + //can't use plaxer.getHeldItem() here because the item rendering persists for a few frames after hitting the switch key + ItemStack toRender = Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender; + + if(toRender != null) { + IItemRenderer renderer = MinecraftForgeClient.getItemRenderer(toRender, ItemRenderType.EQUIPPED_FIRST_PERSON); + + if(renderer instanceof ItemRenderWeaponBase) { + ((ItemRenderWeaponBase) renderer).setPerspectiveAndRender(toRender, event.partialTicks); + event.setCanceled(true); + } + } + } + private static boolean fogInit = false; private static int fogX; private static int fogZ; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index aa3ff784d..07f22e0cb 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -951,6 +951,7 @@ public class ResourceManager { public static final ResourceLocation congolake_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/congolake.png"); public static final ResourceLocation lilmac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac.png"); public static final ResourceLocation lilmac_scope_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac_scope.png"); + public static final ResourceLocation debug_gun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/debug_gun.png"); public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png"); diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 73126336b..903a7939a 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -1,6 +1,8 @@ package com.hbm.packet; import com.hbm.lib.RefStrings; +import com.hbm.packet.toclient.*; +import com.hbm.packet.toserver.*; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; @@ -11,8 +13,7 @@ public class PacketDispatcher { //Mark 1 Packet Sending Device public static final SimpleNetworkWrapper wrapper = NetworkRegistry.INSTANCE.newSimpleChannel(RefStrings.MODID); - public static final void registerPackets() - { + public static final void registerPackets() { int i = 0; //Sound packet that keeps client and server separated @@ -71,8 +72,6 @@ public class PacketDispatcher { wrapper.registerMessage(ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.Handler.class, ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.class, i++, Side.CLIENT); //Packet to send NBT data from clients to the serverside held item wrapper.registerMessage(NBTItemControlPacket.Handler.class, NBTItemControlPacket.class, i++, Side.SERVER); - //sends a button press to the held item, assuming it is an ISyncButtons - wrapper.registerMessage(SyncButtonsPacket.Handler.class, SyncButtonsPacket.class, i++, Side.SERVER); //General syncing for global values wrapper.registerMessage(PermaSyncPacket.Handler.class, PermaSyncPacket.class, i++, Side.CLIENT); //Syncs biome information for single positions or entire chunks diff --git a/src/main/java/com/hbm/packet/SyncButtonsPacket.java b/src/main/java/com/hbm/packet/SyncButtonsPacket.java deleted file mode 100644 index b460a4141..000000000 --- a/src/main/java/com/hbm/packet/SyncButtonsPacket.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.hbm.packet; - -import com.hbm.items.ISyncButtons; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import cpw.mods.fml.relauncher.Side; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; - -public class SyncButtonsPacket implements IMessage { - - boolean state; - int button; - - public SyncButtonsPacket() { } - - public SyncButtonsPacket(boolean s, int b) { - state = s; - button = b; - } - - @Override - public void fromBytes(ByteBuf buf) { - state = buf.readBoolean(); - button = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeBoolean(state); - buf.writeInt(button); - } - - public static class Handler implements IMessageHandler { - - @Override - public IMessage onMessage(SyncButtonsPacket m, MessageContext ctx) { - - if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) - return null; - - EntityPlayer p = ctx.getServerHandler().playerEntity; - - if(p.getHeldItem() != null && p.getHeldItem().getItem() instanceof ISyncButtons) { - - ISyncButtons item = (ISyncButtons)p.getHeldItem().getItem(); - item.receiveMouse(p, p.getHeldItem(), m.button, m.state); - } - - return null; - } - } -} diff --git a/src/main/java/com/hbm/packet/AuxElectricityPacket.java b/src/main/java/com/hbm/packet/toclient/AuxElectricityPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/AuxElectricityPacket.java rename to src/main/java/com/hbm/packet/toclient/AuxElectricityPacket.java index 39c27e7e1..571f925ce 100644 --- a/src/main/java/com/hbm/packet/AuxElectricityPacket.java +++ b/src/main/java/com/hbm/packet/toclient/AuxElectricityPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import api.hbm.energymk2.IEnergyHandlerMK2; import cpw.mods.fml.common.network.simpleimpl.IMessage; diff --git a/src/main/java/com/hbm/packet/AuxGaugePacket.java b/src/main/java/com/hbm/packet/toclient/AuxGaugePacket.java similarity index 98% rename from src/main/java/com/hbm/packet/AuxGaugePacket.java rename to src/main/java/com/hbm/packet/toclient/AuxGaugePacket.java index 17af20444..190a7f4b4 100644 --- a/src/main/java/com/hbm/packet/AuxGaugePacket.java +++ b/src/main/java/com/hbm/packet/toclient/AuxGaugePacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.interfaces.Spaghetti; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; diff --git a/src/main/java/com/hbm/packet/AuxParticlePacket.java b/src/main/java/com/hbm/packet/toclient/AuxParticlePacket.java similarity index 97% rename from src/main/java/com/hbm/packet/AuxParticlePacket.java rename to src/main/java/com/hbm/packet/toclient/AuxParticlePacket.java index 1483e297d..317e121c0 100644 --- a/src/main/java/com/hbm/packet/AuxParticlePacket.java +++ b/src/main/java/com/hbm/packet/toclient/AuxParticlePacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.main.MainRegistry; diff --git a/src/main/java/com/hbm/packet/AuxParticlePacketNT.java b/src/main/java/com/hbm/packet/toclient/AuxParticlePacketNT.java similarity index 98% rename from src/main/java/com/hbm/packet/AuxParticlePacketNT.java rename to src/main/java/com/hbm/packet/toclient/AuxParticlePacketNT.java index f3b311e3a..beace3830 100644 --- a/src/main/java/com/hbm/packet/AuxParticlePacketNT.java +++ b/src/main/java/com/hbm/packet/toclient/AuxParticlePacketNT.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import java.io.IOException; diff --git a/src/main/java/com/hbm/packet/BiomeSyncPacket.java b/src/main/java/com/hbm/packet/toclient/BiomeSyncPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/BiomeSyncPacket.java rename to src/main/java/com/hbm/packet/toclient/BiomeSyncPacket.java index 203ddc281..3f529e1c3 100644 --- a/src/main/java/com/hbm/packet/BiomeSyncPacket.java +++ b/src/main/java/com/hbm/packet/toclient/BiomeSyncPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; diff --git a/src/main/java/com/hbm/packet/BufPacket.java b/src/main/java/com/hbm/packet/toclient/BufPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/BufPacket.java rename to src/main/java/com/hbm/packet/toclient/BufPacket.java index 7ff502c9d..2e9b32c12 100644 --- a/src/main/java/com/hbm/packet/BufPacket.java +++ b/src/main/java/com/hbm/packet/toclient/BufPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.tileentity.IBufPacketReceiver; diff --git a/src/main/java/com/hbm/packet/ExplosionKnockbackPacket.java b/src/main/java/com/hbm/packet/toclient/ExplosionKnockbackPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/ExplosionKnockbackPacket.java rename to src/main/java/com/hbm/packet/toclient/ExplosionKnockbackPacket.java index 9d0aa99c2..0a4972bfe 100644 --- a/src/main/java/com/hbm/packet/ExplosionKnockbackPacket.java +++ b/src/main/java/com/hbm/packet/toclient/ExplosionKnockbackPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; diff --git a/src/main/java/com/hbm/packet/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java b/src/main/java/com/hbm/packet/toclient/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java rename to src/main/java/com/hbm/packet/toclient/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java index c8300a0da..142a3fb26 100644 --- a/src/main/java/com/hbm/packet/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java +++ b/src/main/java/com/hbm/packet/toclient/ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/main/java/com/hbm/packet/ExtPropPacket.java b/src/main/java/com/hbm/packet/toclient/ExtPropPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/ExtPropPacket.java rename to src/main/java/com/hbm/packet/toclient/ExtPropPacket.java index 641bc9b68..0364bf7e9 100644 --- a/src/main/java/com/hbm/packet/ExtPropPacket.java +++ b/src/main/java/com/hbm/packet/toclient/ExtPropPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import java.io.IOException; diff --git a/src/main/java/com/hbm/packet/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/GunAnimationPacket.java rename to src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java index c744f72fd..58389f2f4 100644 --- a/src/main/java/com/hbm/packet/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.items.weapon.ItemGunBase; import com.hbm.render.anim.BusAnimation; diff --git a/src/main/java/com/hbm/packet/LoopedEntitySoundPacket.java b/src/main/java/com/hbm/packet/toclient/LoopedEntitySoundPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/LoopedEntitySoundPacket.java rename to src/main/java/com/hbm/packet/toclient/LoopedEntitySoundPacket.java index 0d364608f..f5282515a 100644 --- a/src/main/java/com/hbm/packet/LoopedEntitySoundPacket.java +++ b/src/main/java/com/hbm/packet/toclient/LoopedEntitySoundPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.entity.logic.EntityBomber; import com.hbm.sound.MovingSoundBomber; diff --git a/src/main/java/com/hbm/packet/LoopedSoundPacket.java b/src/main/java/com/hbm/packet/toclient/LoopedSoundPacket.java similarity index 99% rename from src/main/java/com/hbm/packet/LoopedSoundPacket.java rename to src/main/java/com/hbm/packet/toclient/LoopedSoundPacket.java index 0312680a0..5533245d1 100644 --- a/src/main/java/com/hbm/packet/LoopedSoundPacket.java +++ b/src/main/java/com/hbm/packet/toclient/LoopedSoundPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.interfaces.Spaghetti; import com.hbm.sound.*; diff --git a/src/main/java/com/hbm/packet/ParticleBurstPacket.java b/src/main/java/com/hbm/packet/toclient/ParticleBurstPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/ParticleBurstPacket.java rename to src/main/java/com/hbm/packet/toclient/ParticleBurstPacket.java index c6b58a8b7..6be55c831 100644 --- a/src/main/java/com/hbm/packet/ParticleBurstPacket.java +++ b/src/main/java/com/hbm/packet/toclient/ParticleBurstPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; diff --git a/src/main/java/com/hbm/packet/PermaSyncPacket.java b/src/main/java/com/hbm/packet/toclient/PermaSyncPacket.java similarity index 94% rename from src/main/java/com/hbm/packet/PermaSyncPacket.java rename to src/main/java/com/hbm/packet/toclient/PermaSyncPacket.java index 2415e3696..dcf7ee365 100644 --- a/src/main/java/com/hbm/packet/PermaSyncPacket.java +++ b/src/main/java/com/hbm/packet/toclient/PermaSyncPacket.java @@ -1,4 +1,6 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; + +import com.hbm.packet.PermaSyncHandler; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; diff --git a/src/main/java/com/hbm/packet/PlayerInformPacket.java b/src/main/java/com/hbm/packet/toclient/PlayerInformPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/PlayerInformPacket.java rename to src/main/java/com/hbm/packet/toclient/PlayerInformPacket.java index 01bb8b599..0cdb23d20 100644 --- a/src/main/java/com/hbm/packet/PlayerInformPacket.java +++ b/src/main/java/com/hbm/packet/toclient/PlayerInformPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.main.MainRegistry; diff --git a/src/main/java/com/hbm/packet/SatPanelPacket.java b/src/main/java/com/hbm/packet/toclient/SatPanelPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/SatPanelPacket.java rename to src/main/java/com/hbm/packet/toclient/SatPanelPacket.java index 89252d7e1..3a1a343d3 100644 --- a/src/main/java/com/hbm/packet/SatPanelPacket.java +++ b/src/main/java/com/hbm/packet/toclient/SatPanelPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import java.io.IOException; diff --git a/src/main/java/com/hbm/packet/TEDoorAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/TEDoorAnimationPacket.java rename to src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java index 7321aa015..3511f0d07 100644 --- a/src/main/java/com/hbm/packet/TEDoorAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.interfaces.IAnimatedDoor; diff --git a/src/main/java/com/hbm/packet/TEFFPacket.java b/src/main/java/com/hbm/packet/toclient/TEFFPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/TEFFPacket.java rename to src/main/java/com/hbm/packet/toclient/TEFFPacket.java index 4549dfc11..26de5bd91 100644 --- a/src/main/java/com/hbm/packet/TEFFPacket.java +++ b/src/main/java/com/hbm/packet/toclient/TEFFPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.tileentity.machine.TileEntityForceField; import cpw.mods.fml.common.network.simpleimpl.IMessage; diff --git a/src/main/java/com/hbm/packet/TEMissileMultipartPacket.java b/src/main/java/com/hbm/packet/toclient/TEMissileMultipartPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/TEMissileMultipartPacket.java rename to src/main/java/com/hbm/packet/toclient/TEMissileMultipartPacket.java index 9bf955906..e25d5bbac 100644 --- a/src/main/java/com/hbm/packet/TEMissileMultipartPacket.java +++ b/src/main/java/com/hbm/packet/toclient/TEMissileMultipartPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.handler.MissileStruct; import com.hbm.tileentity.bomb.TileEntityCompactLauncher; diff --git a/src/main/java/com/hbm/packet/TESirenPacket.java b/src/main/java/com/hbm/packet/toclient/TESirenPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/TESirenPacket.java rename to src/main/java/com/hbm/packet/toclient/TESirenPacket.java index bdd3d0ea0..8e6f79825 100644 --- a/src/main/java/com/hbm/packet/TESirenPacket.java +++ b/src/main/java/com/hbm/packet/toclient/TESirenPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.items.machine.ItemCassette.SoundType; import com.hbm.items.machine.ItemCassette.TrackType; diff --git a/src/main/java/com/hbm/packet/TEVaultPacket.java b/src/main/java/com/hbm/packet/toclient/TEVaultPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/TEVaultPacket.java rename to src/main/java/com/hbm/packet/toclient/TEVaultPacket.java index 2b0139e92..84721d0b9 100644 --- a/src/main/java/com/hbm/packet/TEVaultPacket.java +++ b/src/main/java/com/hbm/packet/toclient/TEVaultPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toclient; import com.hbm.tileentity.machine.TileEntityBlastDoor; import com.hbm.tileentity.machine.TileEntityVaultDoor; diff --git a/src/main/java/com/hbm/packet/AnvilCraftPacket.java b/src/main/java/com/hbm/packet/toserver/AnvilCraftPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/AnvilCraftPacket.java rename to src/main/java/com/hbm/packet/toserver/AnvilCraftPacket.java index d8b1049a4..1a33e48a6 100644 --- a/src/main/java/com/hbm/packet/AnvilCraftPacket.java +++ b/src/main/java/com/hbm/packet/toserver/AnvilCraftPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.inventory.container.ContainerAnvil; import com.hbm.inventory.recipes.anvil.AnvilRecipes; diff --git a/src/main/java/com/hbm/packet/AuxButtonPacket.java b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java similarity index 99% rename from src/main/java/com/hbm/packet/AuxButtonPacket.java rename to src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java index c80dfd5ef..7f41feeb1 100644 --- a/src/main/java/com/hbm/packet/AuxButtonPacket.java +++ b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.config.MobConfig; import com.hbm.entity.mob.EntityDuck; diff --git a/src/main/java/com/hbm/packet/GunButtonPacket.java b/src/main/java/com/hbm/packet/toserver/GunButtonPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/GunButtonPacket.java rename to src/main/java/com/hbm/packet/toserver/GunButtonPacket.java index a9688de1d..0dc5f0e99 100644 --- a/src/main/java/com/hbm/packet/GunButtonPacket.java +++ b/src/main/java/com/hbm/packet/toserver/GunButtonPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.items.weapon.ItemGunBase; diff --git a/src/main/java/com/hbm/packet/ItemBobmazonPacket.java b/src/main/java/com/hbm/packet/toserver/ItemBobmazonPacket.java similarity index 99% rename from src/main/java/com/hbm/packet/ItemBobmazonPacket.java rename to src/main/java/com/hbm/packet/toserver/ItemBobmazonPacket.java index c665f8891..9866b4596 100644 --- a/src/main/java/com/hbm/packet/ItemBobmazonPacket.java +++ b/src/main/java/com/hbm/packet/toserver/ItemBobmazonPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import java.util.Random; diff --git a/src/main/java/com/hbm/packet/ItemDesignatorPacket.java b/src/main/java/com/hbm/packet/toserver/ItemDesignatorPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/ItemDesignatorPacket.java rename to src/main/java/com/hbm/packet/toserver/ItemDesignatorPacket.java index 126325b16..8acdcc808 100644 --- a/src/main/java/com/hbm/packet/ItemDesignatorPacket.java +++ b/src/main/java/com/hbm/packet/toserver/ItemDesignatorPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.items.ModItems; diff --git a/src/main/java/com/hbm/packet/ItemFolderPacket.java b/src/main/java/com/hbm/packet/toserver/ItemFolderPacket.java similarity index 99% rename from src/main/java/com/hbm/packet/ItemFolderPacket.java rename to src/main/java/com/hbm/packet/toserver/ItemFolderPacket.java index 7f70ce19a..e6258ba19 100644 --- a/src/main/java/com/hbm/packet/ItemFolderPacket.java +++ b/src/main/java/com/hbm/packet/toserver/ItemFolderPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.AssemblerRecipes; diff --git a/src/main/java/com/hbm/packet/KeybindPacket.java b/src/main/java/com/hbm/packet/toserver/KeybindPacket.java similarity index 84% rename from src/main/java/com/hbm/packet/KeybindPacket.java rename to src/main/java/com/hbm/packet/toserver/KeybindPacket.java index 3b3f2a80c..945d21e69 100644 --- a/src/main/java/com/hbm/packet/KeybindPacket.java +++ b/src/main/java/com/hbm/packet/toserver/KeybindPacket.java @@ -1,7 +1,7 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; -import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.handler.HbmKeybindsServer; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -39,9 +39,7 @@ public class KeybindPacket implements IMessage { public IMessage onMessage(KeybindPacket m, MessageContext ctx) { EntityPlayer p = ctx.getServerHandler().playerEntity; - HbmPlayerProps props = HbmPlayerProps.getData(p); - - props.setKeyPressed(EnumKeybind.values()[m.key], m.pressed); + HbmKeybindsServer.onPressedServer(p, EnumKeybind.values()[m.key], m.pressed); return null; } diff --git a/src/main/java/com/hbm/packet/NBTControlPacket.java b/src/main/java/com/hbm/packet/toserver/NBTControlPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/NBTControlPacket.java rename to src/main/java/com/hbm/packet/toserver/NBTControlPacket.java index 226b3eae1..52ca6261c 100644 --- a/src/main/java/com/hbm/packet/NBTControlPacket.java +++ b/src/main/java/com/hbm/packet/toserver/NBTControlPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import java.io.IOException; diff --git a/src/main/java/com/hbm/packet/NBTItemControlPacket.java b/src/main/java/com/hbm/packet/toserver/NBTItemControlPacket.java similarity index 98% rename from src/main/java/com/hbm/packet/NBTItemControlPacket.java rename to src/main/java/com/hbm/packet/toserver/NBTItemControlPacket.java index 7f03f6894..3bae1121a 100644 --- a/src/main/java/com/hbm/packet/NBTItemControlPacket.java +++ b/src/main/java/com/hbm/packet/toserver/NBTItemControlPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import java.io.IOException; diff --git a/src/main/java/com/hbm/packet/SatCoordPacket.java b/src/main/java/com/hbm/packet/toserver/SatCoordPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/SatCoordPacket.java rename to src/main/java/com/hbm/packet/toserver/SatCoordPacket.java index 0d165165d..b36ef3245 100644 --- a/src/main/java/com/hbm/packet/SatCoordPacket.java +++ b/src/main/java/com/hbm/packet/toserver/SatCoordPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.items.ISatChip; import com.hbm.items.tool.ItemSatInterface; diff --git a/src/main/java/com/hbm/packet/SatLaserPacket.java b/src/main/java/com/hbm/packet/toserver/SatLaserPacket.java similarity index 97% rename from src/main/java/com/hbm/packet/SatLaserPacket.java rename to src/main/java/com/hbm/packet/toserver/SatLaserPacket.java index 1dc430a7b..9b0bacea8 100644 --- a/src/main/java/com/hbm/packet/SatLaserPacket.java +++ b/src/main/java/com/hbm/packet/toserver/SatLaserPacket.java @@ -1,4 +1,4 @@ -package com.hbm.packet; +package com.hbm.packet.toserver; import com.hbm.items.ISatChip; import com.hbm.items.tool.ItemSatInterface; diff --git a/src/main/java/com/hbm/particle/helper/IParticleCreator.java b/src/main/java/com/hbm/particle/helper/IParticleCreator.java index 2dbae2da1..f55ef2f05 100644 --- a/src/main/java/com/hbm/particle/helper/IParticleCreator.java +++ b/src/main/java/com/hbm/particle/helper/IParticleCreator.java @@ -2,8 +2,8 @@ package com.hbm.particle.helper; import java.util.Random; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java index aa8e186e4..418636da7 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponGlass.java @@ -3,7 +3,7 @@ package com.hbm.render.item.weapon; import org.lwjgl.opengl.GL11; import com.hbm.handler.BulletConfiguration; -import com.hbm.items.weapon.gununified.ItemEnergyGunBase; +import com.hbm.items.weapon.ItemEnergyGunBase; import com.hbm.main.ResourceManager; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java new file mode 100644 index 000000000..4e52a079a --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java @@ -0,0 +1,44 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +public class ItemRenderDebug extends ItemRenderWeaponBase { + + @Override + public void renderFirstPerson(ItemStack stack) { + + double scale = 0.125D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.debug_gun_tex); + ResourceManager.lilmac.renderPart("Gun"); + ResourceManager.lilmac.renderPart("Cylinder"); + ResourceManager.lilmac.renderPart("Bullets"); + ResourceManager.lilmac.renderPart("Casings"); + ResourceManager.lilmac.renderPart("Pivot"); + ResourceManager.lilmac.renderPart("Hammer"); + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + GL11.glRotated(90, 0, 1, 0); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.debug_gun_tex); + ResourceManager.lilmac.renderPart("Gun"); + ResourceManager.lilmac.renderPart("Cylinder"); + ResourceManager.lilmac.renderPart("Bullets"); + ResourceManager.lilmac.renderPart("Casings"); + ResourceManager.lilmac.renderPart("Pivot"); + ResourceManager.lilmac.renderPart("Hammer"); + GL11.glShadeModel(GL11.GL_FLAT); + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java new file mode 100644 index 000000000..66f862e0f --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java @@ -0,0 +1,185 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.lwjgl.util.glu.Project; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraftforge.client.IItemRenderer; + +public abstract class ItemRenderWeaponBase implements IItemRenderer { + + public static float interp; + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION; + } + + @SuppressWarnings("incomplete-switch") //shut the fuck up + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + GL11.glPushMatrix(); + switch(type) { + case EQUIPPED_FIRST_PERSON: setupFirstPerson(item); renderFirstPerson(item); break; + case EQUIPPED: setupThirdPerson(item); renderOther(item, type); break; + case INVENTORY: setupInv(item); renderOther(item, type); break; + case ENTITY: setupEntity(item); renderOther(item, type); break; + } + GL11.glPopMatrix(); + } + + public void setPerspectiveAndRender(ItemStack stack, float interp) { + + this.interp = interp; + + Minecraft mc = Minecraft.getMinecraft(); + EntityRenderer entityRenderer = mc.entityRenderer; + float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16; + + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + Project.gluPerspective(this.getFOVModifier(interp, false), (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, farPlaneDistance * 2.0F); + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + GL11.glPushMatrix(); + + if(mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode()) { + entityRenderer.enableLightmap(interp); + this.setupTransformsAndRender(stack); + entityRenderer.disableLightmap(interp); + } + + GL11.glPopMatrix(); + + if(mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping()) { + entityRenderer.itemRenderer.renderOverlays(interp); + } + } + + private float getFOVModifier(float interp, boolean useFOVSetting) { + + Minecraft mc = Minecraft.getMinecraft(); + EntityLivingBase entityplayer = (EntityLivingBase) mc.renderViewEntity; + float fov = 70.0F; + + if(useFOVSetting) fov = mc.gameSettings.fovSetting; + + if(entityplayer.getHealth() <= 0.0F) { + float f2 = (float) entityplayer.deathTime + interp; + fov /= (1.0F - 500.0F / (f2 + 500.0F)) * 2.0F + 1.0F; + } + + Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(mc.theWorld, entityplayer, interp); + if(block.getMaterial() == Material.water) fov = fov * 60.0F / 70.0F; + + return fov; + } + + protected void setupTransformsAndRender(ItemStack itemstack) { + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + + float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * interp; + GL11.glPushMatrix(); + GL11.glRotatef(pitch, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * interp, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + EntityPlayerSP entityplayersp = (EntityPlayerSP) player; + float armPitch = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * interp; + float armYaw = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * interp; + GL11.glRotatef((player.rotationPitch - armPitch) * 0.1F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef((player.rotationYaw - armYaw) * 0.1F, 0.0F, 1.0F, 0.0F); + + int i = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), 0); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if(itemstack != null) { + int l = itemstack.getItem().getColorFromItemStack(itemstack, 0); + float r = (float) (l >> 16 & 255) / 255.0F; + float g = (float) (l >> 8 & 255) / 255.0F; + float b = (float) (l & 255) / 255.0F; + GL11.glColor4f(r, g, b, 1.0F); + } + + float f8; + float f13; + + GL11.glPushMatrix(); + + f13 = 0.8F; + + float swing = player.getSwingProgress(interp); + float swingZ = MathHelper.sin(swing * (float) Math.PI); + float swingX = MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI); + GL11.glTranslatef(-swingX * 0.4F, MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI * 2.0F) * 0.2F, -swingZ * 0.2F); + + GL11.glTranslatef(0.7F * f13, -0.65F * f13 - (1.0F - 1/* raiseprogress */) * 0.6F, -0.9F * f13); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float swingYaw = MathHelper.sin(swing * swing * (float) Math.PI); + float swingPitchRoll = MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI); + GL11.glRotatef(-swingYaw * 20.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-swingPitchRoll * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-swingPitchRoll * 80.0F, 1.0F, 0.0F, 0.0F); + + f8 = 0.4F; + GL11.glScalef(f8, f8, f8); + + this.renderItem(ItemRenderType.EQUIPPED_FIRST_PERSON, itemstack, null, player); + + GL11.glPopMatrix(); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + } + + protected void setupFirstPerson(ItemStack stack) { + //GL11.glRotated(90, 0, 1, 0); + //GL11.glRotated(40, -1, 0, 0); + } + + protected void setupThirdPerson(ItemStack stack) { + double scale = 0.125D; + GL11.glScaled(scale, scale, scale); + } + + protected void setupInv(ItemStack stack) { + GL11.glScaled(1, 1, -1); + GL11.glTranslated(8, 8, 0); + GL11.glRotated(225, 0, 0, 1); + GL11.glRotated(90, 0, 1, 0); + } + + protected void setupEntity(ItemStack stack) { + + } + + public abstract void renderFirstPerson(ItemStack stack); + public abstract void renderOther(ItemStack stack, ItemRenderType type); +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderLPW2.java b/src/main/java/com/hbm/render/tileentity/RenderLPW2.java index bb5e674f0..4e4eacf41 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLPW2.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLPW2.java @@ -139,7 +139,7 @@ public class RenderLPW2 extends TileEntitySpecialRenderer { GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); - GL11.glTranslated(0, BobMathUtil.sps(errorTimer) + errorTimer / 2D - 1, 0); + GL11.glTranslated(0, (BobMathUtil.sps(errorTimer) + errorTimer / 2D) % 1, 0); ResourceManager.lpw2.renderPart("Screen"); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderSolarBoiler.java b/src/main/java/com/hbm/render/tileentity/RenderSolarBoiler.java index 54c3c1ad1..f15a7d778 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSolarBoiler.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSolarBoiler.java @@ -38,7 +38,7 @@ public class RenderSolarBoiler extends TileEntitySpecialRenderer { GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); - if(te instanceof TileEntitySolarBoiler && !Minecraft.getMinecraft().gameSettings.fancyGraphics) { + if(te instanceof TileEntitySolarBoiler && Minecraft.getMinecraft().gameSettings.fancyGraphics) { TileEntitySolarBoiler boiler = (TileEntitySolarBoiler) te; Tessellator tess = Tessellator.instance; diff --git a/src/main/java/com/hbm/tileentity/IBufPacketReceiver.java b/src/main/java/com/hbm/tileentity/IBufPacketReceiver.java index 688962e83..04d1fe52a 100644 --- a/src/main/java/com/hbm/tileentity/IBufPacketReceiver.java +++ b/src/main/java/com/hbm/tileentity/IBufPacketReceiver.java @@ -1,7 +1,7 @@ package com.hbm.tileentity; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.BufPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index a8f856310..d05ac0843 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -10,7 +10,7 @@ import com.hbm.interfaces.IAnimatedDoor; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEDoorAnimationPacket; +import com.hbm.packet.toclient.TEDoorAnimationPacket; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.util.fauxpointtwelve.BlockPos; diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index a8e1ee651..e9e8c0e05 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -1,8 +1,8 @@ package com.hbm.tileentity; -import com.hbm.packet.AuxGaugePacket; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxGaugePacket; +import com.hbm.packet.toclient.BufPacket; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -153,7 +153,7 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, val, id), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } @Deprecated public void processGauge(int val, int id) { } - + /** Sends a sync packet that uses ByteBuf for efficient information-cramming */ public void networkPackNT(int range) { if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java index aee39ce6d..4d4b08836 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCharge.java @@ -1,11 +1,8 @@ package com.hbm.tileentity.bomb; import com.hbm.blocks.bomb.BlockChargeBase; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; -import cpw.mods.fml.common.network.NetworkRegistry; import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index dc0775e96..40a3d4644 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -16,9 +16,9 @@ import com.hbm.items.weapon.ItemCustomMissilePart.FuelType; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEMissileMultipartPacket; +import com.hbm.packet.toclient.BufPacket; +import com.hbm.packet.toclient.TEMissileMultipartPacket; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IRadarCommandReceiver; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityFireworks.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityFireworks.java index be34e001c..ed97928b7 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityFireworks.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityFireworks.java @@ -1,8 +1,8 @@ package com.hbm.tileentity.bomb; import com.hbm.entity.item.EntityFireworks; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index b8ab5fab8..cd1aa132d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -17,9 +17,9 @@ import com.hbm.items.weapon.ItemCustomMissilePart.FuelType; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEMissileMultipartPacket; +import com.hbm.packet.toclient.BufPacket; +import com.hbm.packet.toclient.TEMissileMultipartPacket; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IRadarCommandReceiver; diff --git a/src/main/java/com/hbm/tileentity/deco/TileEntityGeysir.java b/src/main/java/com/hbm/tileentity/deco/TileEntityGeysir.java index 122e52ba3..ac6bfec24 100644 --- a/src/main/java/com/hbm/tileentity/deco/TileEntityGeysir.java +++ b/src/main/java/com/hbm/tileentity/deco/TileEntityGeysir.java @@ -7,8 +7,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.entity.particle.EntityOrangeFX; import com.hbm.entity.projectile.EntityShrapnel; import com.hbm.entity.projectile.EntityWaterSplash; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityBlastDoor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityBlastDoor.java index e13795a69..d22bd4150 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityBlastDoor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityBlastDoor.java @@ -3,7 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.DummyBlockBlast; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEVaultPacket; +import com.hbm.packet.toclient.TEVaultPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityBroadcaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityBroadcaster.java index 0c580bf65..744e3bab9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityBroadcaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityBroadcaster.java @@ -3,8 +3,8 @@ package com.hbm.tileentity.machine; import java.util.List; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.LoopedSoundPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.LoopedSoundPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 1fb87fc69..3e2450404 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -18,8 +18,8 @@ import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.CrucibleRecipes; import com.hbm.inventory.recipes.CrucibleRecipes.CrucibleRecipe; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 8ab35d24b..40ce00a0e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -23,8 +23,8 @@ import com.hbm.inventory.recipes.ElectrolyserMetalRecipes.ElectrolysisMetalRecip import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 417c24894..91d89b53e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -8,7 +8,7 @@ import com.hbm.inventory.gui.GUIForceField; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEFFPacket; +import com.hbm.packet.toclient.TEFFPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index 1414283fe..8c795202b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -2,8 +2,8 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.inventory.material.NTMMaterial; import com.hbm.util.CrucibleUtil; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundrySlagtap.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundrySlagtap.java index ba297333f..ecf625688 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundrySlagtap.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundrySlagtap.java @@ -3,8 +3,8 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockDynamicSlag.TileEntitySlag; import com.hbm.inventory.material.Mats.MaterialStack; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.Compat; import api.hbm.block.ICrucibleAcceptor; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 17798d41c..89fd43fe1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -15,8 +15,8 @@ import com.hbm.inventory.recipes.HadronRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.TileEntityHadronDiode.DiodeConfig; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java index 3fce746dc..c42db2790 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java @@ -1,13 +1,10 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.machine.BlockHadronPower; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energymk2.IEnergyReceiverMK2; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java index 4f4c3d65d..62d4ae6a7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java @@ -11,8 +11,8 @@ import com.hbm.inventory.gui.GUIICF; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemICFPellet; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 39f8678ec..3fd90d627 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -21,8 +21,8 @@ import com.hbm.items.ModItems; import com.hbm.items.special.ItemFusionShield; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index 2162cfeb8..bff0afcdb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -6,9 +6,9 @@ import com.hbm.inventory.container.ContainerMachineArcFurnace; import com.hbm.inventory.gui.GUIMachineArcFurnace; import com.hbm.items.ModItems; import com.hbm.lib.Library; -import com.hbm.packet.AuxElectricityPacket; -import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxElectricityPacket; +import com.hbm.packet.toclient.AuxGaugePacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index abd5b4ec2..c1e92720a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -21,8 +21,8 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 6a3132006..5eb5af98f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -14,8 +14,8 @@ import com.hbm.inventory.recipes.ArcWelderRecipes.ArcWelderRecipe; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java index 5b2f427d7..f019f0815 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java @@ -12,8 +12,8 @@ import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Gaseous; import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid; import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Viscous; import com.hbm.main.MainRegistry; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.BufPacket; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index b3179241c..92fb4d7a7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -11,8 +11,8 @@ import com.hbm.inventory.recipes.GasCentrifugeRecipes.PseudoFluidType; import com.hbm.items.ModItems; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.lib.Library; -import com.hbm.packet.LoopedSoundPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.LoopedSoundPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BufferUtil; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 4ffd642d6..9560bbd23 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -8,7 +8,7 @@ import com.hbm.items.weapon.ItemCustomMissilePart; import com.hbm.items.weapon.ItemCustomMissilePart.FuelType; import com.hbm.items.weapon.ItemCustomMissilePart.PartType; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEMissileMultipartPacket; +import com.hbm.packet.toclient.TEMissileMultipartPacket; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 90e1ec36e..4d6aad8ab 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -18,8 +18,8 @@ import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 56ab3442f..6172e954e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -4,8 +4,8 @@ import com.hbm.config.VersatileConfig; import com.hbm.inventory.container.ContainerMachineRTG; import com.hbm.inventory.gui.GUIMachineRTG; import com.hbm.items.machine.ItemRTGPellet; -import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxElectricityPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index ef8625264..9c224199a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -18,8 +18,8 @@ import com.hbm.items.ModItems; import com.hbm.items.tool.ItemCoordinateBase; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.BufPacket; import com.hbm.saveddata.SatelliteSavedData; import com.hbm.saveddata.satellites.Satellite; import com.hbm.saveddata.satellites.SatelliteHorizons; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 9ac85cf5c..53cf6a7d4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -5,8 +5,8 @@ import com.hbm.inventory.gui.GUIMachineShredder; import com.hbm.inventory.recipes.ShredderRecipes; import com.hbm.items.machine.ItemBlades; import com.hbm.lib.Library; -import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxElectricityPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index a2ebd812f..9cd3671b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -8,7 +8,7 @@ import com.hbm.items.machine.ItemCassette; import com.hbm.items.machine.ItemCassette.SoundType; import com.hbm.items.machine.ItemCassette.TrackType; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TESirenPacket; +import com.hbm.packet.toclient.TESirenPacket; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 0b2fb6dc7..3a405ca0d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -14,8 +14,8 @@ import com.hbm.inventory.recipes.SolderingRecipes.SolderingRecipe; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index b6cc7780d..6970a921f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -18,8 +18,8 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java index 84852dfc3..1599374d9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySawmill.java @@ -8,8 +8,8 @@ import com.hbm.entity.projectile.EntitySawblade; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCraftingAuto; import com.hbm.util.BufferUtil; @@ -148,7 +148,7 @@ public class TileEntitySawmill extends TileEntityMachineBase { } networkPackNT(150); - + this.heat = 0; } else { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityVaultDoor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityVaultDoor.java index 8ca80eb24..8fa592af5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityVaultDoor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityVaultDoor.java @@ -3,7 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.DummyBlockVault; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEVaultPacket; +import com.hbm.packet.toclient.TEVaultPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 81957e0cd..e3489abe0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -18,8 +18,8 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemWatzPellet; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityZirnoxDestroyed.java b/src/main/java/com/hbm/tileentity/machine/TileEntityZirnoxDestroyed.java index 4fb2be3ef..562109830 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityZirnoxDestroyed.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityZirnoxDestroyed.java @@ -3,8 +3,8 @@ package com.hbm.tileentity.machine; import java.util.List; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index a96995673..15e1f0977 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -5,15 +5,12 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.FractionRecipes; import com.hbm.lib.Library; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java index 0318a99b7..aedcb0082 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java @@ -3,8 +3,8 @@ package com.hbm.tileentity.machine.pile; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.block.IPileNeutronReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 53526b9bc..9bb659bd1 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -11,8 +11,8 @@ import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.neutron.NeutronNodeWorld; import com.hbm.handler.neutron.RBMKNeutronHandler.RBMKType; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.saveddata.TomSaveData; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IOverpressurable; @@ -224,7 +224,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements NeutronNodeWorld.removeNode(new BlockPos(this)); // woo-fucking-hoo!!! } - + @Override public void markDirty() { @@ -251,7 +251,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements public RBMKType getRBMKType() { return RBMKType.OTHER; } - + protected static boolean diag = false; @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java index acdfb8e7e..7b66c3d55 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java @@ -2,12 +2,9 @@ package com.hbm.tileentity.machine.storage; import com.hbm.inventory.container.ContainerFileCabinet; import com.hbm.inventory.gui.GUIFileCabinet; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index 51a133253..6d20ef764 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -19,8 +19,8 @@ import com.hbm.inventory.gui.GUIMachineFluidTank; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IOverpressurable; import com.hbm.tileentity.IPersistentNBT; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java index 4af12a1ab..ffd51fb0f 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneWaypoint.java @@ -4,12 +4,9 @@ import java.util.List; import com.hbm.entity.item.EntityDeliveryDrone; import com.hbm.util.ParticleUtil; -import com.hbm.packet.BufPacket; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.util.fauxpointtwelve.BlockPos; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityFluidValve.java b/src/main/java/com/hbm/tileentity/network/TileEntityFluidValve.java index 6e1a226dd..7d6ff74d8 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityFluidValve.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityFluidValve.java @@ -1,16 +1,20 @@ package com.hbm.tileentity.network; import api.hbm.fluid.PipeNet; +import net.minecraft.block.Block; +import net.minecraft.world.World; public class TileEntityFluidValve extends TileEntityPipeBaseNT { @Override - public boolean canUpdate() { + public boolean shouldConnect() { return this.worldObj != null && this.getBlockMetadata() == 1 && super.canUpdate(); } public void updateState() { + this.blockMetadata = -1; // delete cache + if(this.getBlockMetadata() == 0 && this.network != null) { this.network.destroy(); this.network = null; @@ -24,4 +28,9 @@ public class TileEntityFluidValve extends TileEntityPipeBaseNT { } } } + + @Override + public boolean shouldRefresh(Block oldBlock, Block newBlock, int oldMeta, int newMeta, World world, int x, int y, int z) { + return oldBlock != newBlock; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 4db863014..b3004d9b0 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -28,7 +28,7 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor lastType = type; } - if(!worldObj.isRemote && canUpdate()) { + if(!worldObj.isRemote && shouldConnect()) { //we got here either because the net doesn't exist or because it's not valid, so that's safe to assume this.setPipeNet(type, null); @@ -101,8 +101,7 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor /** * Only update until a power net is formed, in >99% of the cases it should be the first tick. Everything else is handled by neighbors and the net itself. */ - @Override - public boolean canUpdate() { + public boolean shouldConnect() { return (this.network == null || !this.network.isValid()) && !this.isInvalid(); } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java index f741d7e4f..e4e646eb7 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java @@ -11,8 +11,8 @@ import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemAmmoArty; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.Optional; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 77ac2a0fb..3866c7d4b 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -21,8 +21,8 @@ import com.hbm.inventory.container.ContainerTurretBase; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemTurretBiometry; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java index 6ca6c4e35..64f329a79 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java @@ -7,8 +7,8 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.CasingEjector; import com.hbm.inventory.gui.GUITurretChekhov; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 19996d6af..e11edbc53 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -15,8 +15,8 @@ import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid; import com.hbm.inventory.gui.GUITurretFritz; import com.hbm.items.ModItems; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java index 5afbd8afa..f726cdff3 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java @@ -10,8 +10,8 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.guncfg.GunDGKFactory; import com.hbm.inventory.gui.GUITurretHoward; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.util.EntityDamageUtil; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java index 26536ffb5..c3e9d7655 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java @@ -3,8 +3,8 @@ package com.hbm.tileentity.turret; import com.hbm.config.WeaponConfig; import com.hbm.handler.guncfg.GunDGKFactory; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java index f89b81cbd..e5c323f2b 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java @@ -7,8 +7,8 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.CasingEjector; import com.hbm.inventory.gui.GUITurretJeremy; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index f9f4e82c5..b39e07cb2 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -8,8 +8,8 @@ import com.hbm.inventory.gui.GUITurretMaxwell; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java index aca28eb62..6c7c5359f 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java @@ -8,8 +8,8 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.CasingEjector; import com.hbm.inventory.container.ContainerTurretBase; import com.hbm.inventory.gui.GUITurretSentry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentryDamaged.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentryDamaged.java index acb7898cb..bc3dc51ff 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentryDamaged.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentryDamaged.java @@ -2,8 +2,8 @@ package com.hbm.tileentity.turret; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java index 0510a86ac..4932f013d 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java @@ -7,8 +7,8 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.inventory.gui.GUITurretTauon; import com.hbm.lib.ModDamageSource; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/util/ParticleUtil.java b/src/main/java/com/hbm/util/ParticleUtil.java index 45898c14d..2c654de56 100644 --- a/src/main/java/com/hbm/util/ParticleUtil.java +++ b/src/main/java/com/hbm/util/ParticleUtil.java @@ -1,8 +1,8 @@ package com.hbm.util; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/world/WorldUtil.java b/src/main/java/com/hbm/world/WorldUtil.java index b06cf9d86..4f23a6865 100644 --- a/src/main/java/com/hbm/world/WorldUtil.java +++ b/src/main/java/com/hbm/world/WorldUtil.java @@ -1,7 +1,8 @@ package com.hbm.world; -import com.hbm.packet.BiomeSyncPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.BiomeSyncPacket; + import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; diff --git a/src/main/resources/META-INF/HBM_at.cfg b/src/main/resources/META-INF/HBM_at.cfg index 09bf2e8c3..c84644c46 100644 --- a/src/main/resources/META-INF/HBM_at.cfg +++ b/src/main/resources/META-INF/HBM_at.cfg @@ -34,3 +34,6 @@ public net.minecraft.world.gen.ChunkProviderFlat field_82702_h # ha # ChunkProviderServer public net.minecraft.world.gen.ChunkProviderServer field_73248_b # chunksToUnload + +# ItemRenderer +public net.minecraft.client.renderer.ItemRenderer.field_78453_b # itemToRender \ No newline at end of file diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 026f86d95..9a0f2e0cc 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -654,7 +654,7 @@ hbm.key.craneMoveDown=Kran rückwärts hbm.key.craneMoveLeft=Kran nach links hbm.key.craneMoveRight=Kran nach rechts hbm.key.craneMoveUp=Kran vorwärts -hbm.key.toggleBack=Rucksack umschalten +hbm.key.toggleBack=Jetpack umschalten hbm.key.toggleHUD=HUD umschalten hbm.key.reload=Nachladen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 336ad59dc..2e7c34e4a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1350,7 +1350,7 @@ hbm.key.craneMoveLeft=Move Crane Left hbm.key.craneMoveRight=Move Crane Right hbm.key.craneMoveUp=Move Crane Forward hbm.key.dash=Dash (Unbind from Crouch in config) -hbm.key.toggleBack=Toggle Backpack +hbm.key.toggleBack=Toggle Jetpack hbm.key.toggleHUD=Toggle HUD hbm.key.reload=Reload diff --git a/src/main/resources/assets/hbm/models/machines/lpw2.obj b/src/main/resources/assets/hbm/models/machines/lpw2.obj index ff9ea5ee8..aa4a22e47 100644 --- a/src/main/resources/assets/hbm/models/machines/lpw2.obj +++ b/src/main/resources/assets/hbm/models/machines/lpw2.obj @@ -2101,7 +2101,7 @@ vt 0.365749 0.937209 vt 0.364028 0.958140 vt 0.365749 0.965116 vt 0.364028 0.944186 -vt 0.462995 0.962791 +vt 0.462995 0.965116 vt 0.478485 0.958140 vt 0.478485 0.965116 vt 0.462995 0.979070 @@ -2120,20 +2120,22 @@ vt 0.462995 0.937209 vt 0.462995 0.951163 vt 0.483649 0.958140 vt 0.483649 0.965116 +vt 0.479346 0.972093 vt 0.483649 0.979070 vt 0.480207 0.979070 vt 0.481067 0.923256 vt 0.483649 0.930233 vt 0.482788 0.930233 +vt 0.479346 0.958140 vt 0.483649 0.951163 vt 0.483649 0.972093 vt 0.481067 0.951163 vt 0.483649 0.944186 -vt 0.488812 0.972093 +vt 0.487952 0.972093 vt 0.487091 0.979070 vt 0.486231 0.923256 vt 0.484509 0.930233 -vt 0.488812 0.958140 +vt 0.487952 0.958140 vt 0.488812 0.965116 vt 0.486231 0.951163 vt 0.482788 0.944186 @@ -2148,7 +2150,9 @@ vt 0.509466 0.944186 vt 0.488812 0.944186 vt 0.488812 0.951163 vt 0.509466 0.958140 +vt 0.488812 0.958140 vt 0.509466 0.972093 +vt 0.488812 0.972093 vt 0.509466 0.951163 vt 0.509466 0.965116 vt 0.509466 0.979070 @@ -2557,7 +2561,7 @@ vt 0.365749 0.965116 vt 0.364028 0.958140 vt 0.364028 0.944186 vt 0.478485 0.958140 -vt 0.462995 0.962791 +vt 0.462995 0.965116 vt 0.478485 0.965116 vt 0.478485 0.972093 vt 0.462995 0.979070 @@ -2574,7 +2578,9 @@ vt 0.462995 0.972093 vt 0.462995 0.937209 vt 0.462995 0.951163 vt 0.483649 0.958140 +vt 0.479346 0.958140 vt 0.483649 0.979070 +vt 0.479346 0.972093 vt 0.480207 0.979070 vt 0.483649 0.930233 vt 0.481067 0.923256 @@ -2584,11 +2590,11 @@ vt 0.481067 0.951163 vt 0.483649 0.965116 vt 0.483649 0.944186 vt 0.482788 0.944186 -vt 0.488812 0.972093 +vt 0.487952 0.972093 vt 0.483649 0.972093 vt 0.486231 0.923256 vt 0.483649 0.923256 -vt 0.488812 0.958140 +vt 0.487952 0.958140 vt 0.488812 0.965116 vt 0.486231 0.951163 vt 0.483649 0.937209 @@ -2603,7 +2609,9 @@ vt 0.509466 0.944186 vt 0.488812 0.944186 vt 0.509466 0.958140 vt 0.488812 0.951163 +vt 0.488812 0.958140 vt 0.509466 0.972093 +vt 0.488812 0.972093 vt 0.509466 0.951163 vt 0.509466 0.965116 vt 0.509466 0.979070 @@ -3643,381 +3651,381 @@ f 594/1031/73 587/1019/64 586/1021/65 f 599/1032/26 592/1025/68 591/1027/12 f 597/1033/10 590/1028/70 589/1030/72 f 587/1019/64 604/1034/74 603/1035/13 -f 586/1021/65 601/1036/75 585/1037/66 -f 585/1038/66 607/1039/76 592/1040/68 -f 588/1018/63 605/1041/77 604/1034/74 -f 586/1021/65 603/1035/13 602/1042/78 -f 589/1043/72 606/1044/79 605/1041/77 -f 601/1036/75 609/1045/80 608/1046/81 -f 607/1039/76 608/1047/81 614/1048/82 -f 605/1041/77 611/1049/83 604/1034/74 -f 602/1042/78 610/1050/85 609/1045/80 -f 606/1044/79 612/1051/84 605/1041/77 -f 604/1034/74 610/1050/85 603/1035/13 -f 590/1052/70 591/1053/12 606/1044/79 -f 606/1044/79 591/1053/12 613/1054/86 -f 592/1040/68 607/1039/76 591/1053/12 -f 607/1039/76 614/1048/82 591/1053/12 -f 614/1055/82 615/1056/87 591/1057/12 -f 608/1058/81 622/1059/88 614/1055/82 -f 591/1057/12 621/1060/89 613/1061/86 -f 612/1062/84 619/1063/90 611/1049/83 -f 610/1050/85 617/1064/91 609/1045/80 -f 613/1061/86 620/1065/92 612/1062/84 -f 611/1049/83 618/1066/93 610/1050/85 -f 609/1045/80 616/1067/73 608/1068/81 -f 626/1069/10 633/1070/70 634/1071/72 -f 624/1072/26 631/1073/68 632/1074/12 -f 629/1075/73 636/1076/64 637/1077/65 -f 627/1078/71 634/1071/72 635/1079/63 -f 625/1080/69 632/1074/12 633/1070/70 -f 623/1081/67 638/1082/66 631/1073/68 -f 630/1083/9 637/1077/65 638/1084/66 -f 628/1085/27 635/1079/63 636/1076/64 -f 647/1086/94 640/1087/12 652/1088/95 -f 650/1089/96 643/1090/20 649/1091/97 -f 652/1088/95 641/1092/26 651/1093/98 -f 653/1094/99 645/1095/21 647/1086/94 -f 649/1091/97 644/1096/13 648/1097/100 -f 648/1097/100 646/1098/27 616/1099/73 -f 616/1100/73 639/1101/16 653/1094/99 -f 651/1093/98 642/1102/15 650/1089/96 -f 648/1103/100 616/1104/73 659/1105/101 -f 617/1106/91 659/1105/101 616/1104/73 -f 653/1107/99 654/1108/102 616/1109/73 -f 622/1110/88 616/1109/73 654/1108/102 -f 655/1111/103 651/1093/98 656/1112/69 -f 658/1113/105 650/1114/96 649/1115/97 -f 660/1116/106 652/1117/95 655/1111/103 -f 657/1118/104 651/1093/98 650/1114/96 -f 659/1105/101 649/1115/97 648/1103/100 -f 654/1108/102 647/1119/94 660/1116/106 -f 622/1110/88 660/1116/106 615/1120/87 -f 619/1121/90 658/1113/105 618/1122/93 -f 620/1065/92 655/1111/103 656/1112/69 -f 615/1120/87 655/1111/103 621/1123/89 -f 618/1122/93 659/1105/101 617/1106/91 -f 619/1121/90 656/1112/69 657/1118/104 -f 636/1076/64 664/1124/74 663/1125/13 -f 637/1126/65 661/1127/75 638/1128/66 -f 638/1129/66 667/1130/76 631/1131/68 -f 635/1132/63 665/1133/77 664/1124/74 -f 636/1076/64 662/1134/78 637/1126/65 -f 634/1135/72 666/1136/79 665/1133/77 -f 661/1127/75 669/1137/80 668/1138/81 -f 667/1130/76 668/1139/81 674/1140/82 -f 665/1133/77 671/1141/83 664/1124/74 -f 662/1134/78 670/1142/85 669/1137/80 -f 666/1136/79 672/1143/84 665/1133/77 -f 664/1124/74 670/1142/85 663/1125/13 -f 633/1144/70 632/1145/12 666/1136/79 -f 666/1136/79 632/1145/12 673/1146/86 -f 631/1131/68 667/1130/76 632/1145/12 -f 667/1130/76 674/1140/82 632/1145/12 -f 674/1147/82 675/1148/87 632/1149/12 -f 668/1150/81 682/1151/88 674/1147/82 -f 632/1149/12 681/1152/89 673/1153/86 -f 672/1154/84 679/1155/90 671/1156/83 -f 670/1142/85 677/1157/91 669/1158/80 -f 673/1153/86 680/1159/92 672/1154/84 -f 671/1156/83 678/1160/93 670/1142/85 -f 669/1158/80 676/1161/73 668/1162/81 -f 691/1163/94 684/1164/12 696/1165/95 -f 694/1166/96 687/1167/20 693/1168/97 -f 696/1165/95 685/1169/26 695/1170/98 -f 697/1171/99 689/1172/21 691/1163/94 -f 693/1168/97 688/1173/13 692/1174/100 -f 692/1174/100 690/1175/27 676/1176/73 -f 676/1177/73 683/1178/16 697/1171/99 -f 695/1170/98 686/1179/15 694/1166/96 -f 692/1180/100 676/1181/73 703/1182/101 -f 677/1183/91 703/1182/101 676/1181/73 -f 697/1184/99 698/1185/102 676/1186/73 -f 682/1187/88 676/1186/73 698/1185/102 -f 699/1188/103 695/1170/98 700/1189/69 -f 701/1190/104 693/1191/97 702/1192/105 -f 704/1193/106 696/1194/95 699/1188/103 -f 700/1189/69 694/1195/96 701/1190/104 -f 703/1182/101 693/1191/97 692/1180/100 -f 698/1185/102 691/1196/94 704/1193/106 -f 675/1197/87 698/1185/102 704/1193/106 -f 679/1198/90 702/1192/105 678/1199/93 -f 680/1159/92 699/1188/103 700/1189/69 -f 675/1197/87 699/1188/103 681/1200/89 -f 678/1199/93 703/1182/101 677/1183/91 -f 680/1159/92 701/1190/104 679/1198/90 -f 720/1201/13 705/1202/27 712/1203/13 -f 718/1204/15 711/1205/20 710/1206/15 -f 716/1207/12 709/1208/26 708/1209/12 -f 713/1210/16 707/1211/21 706/1212/16 -f 719/1213/20 712/1203/13 711/1205/20 -f 717/1214/26 710/1206/15 709/1215/26 -f 715/1216/21 708/1209/12 707/1211/21 -f 714/1217/27 706/1212/16 705/1202/27 -f 733/1218/107 462/819/108 461/817/107 -f 734/1219/108 463/821/109 462/819/108 -f 735/1220/109 464/824/110 463/821/109 -f 464/824/110 721/1221/111 449/823/112 -f 721/1222/111 450/826/113 449/823/112 -f 722/1223/114 451/828/115 450/826/113 -f 451/828/115 724/1224/116 452/814/116 -f 452/814/116 725/1225/117 453/816/117 -f 453/816/117 726/1226/118 454/818/119 -f 454/818/119 727/1227/120 455/820/120 -f 455/820/120 728/1228/121 456/822/121 -f 728/1229/121 457/1230/122 456/822/121 -f 457/825/122 730/1231/123 458/827/123 -f 730/1232/123 459/813/124 458/827/123 -f 731/1233/124 460/815/125 459/813/124 -f 732/1234/126 461/817/107 460/815/125 -f 784/1235/13 769/1236/27 776/1237/13 -f 782/1238/15 775/1239/20 774/1240/15 -f 780/1241/12 773/1242/26 772/1243/12 -f 777/1244/16 771/1245/21 770/1246/16 -f 783/1247/20 776/1237/13 775/1239/20 -f 781/1248/26 774/1240/15 773/1249/26 -f 779/1250/21 772/1243/12 771/1245/21 -f 778/1251/27 770/1246/16 769/1236/27 -f 800/1252/13 785/1253/27 792/1254/13 -f 798/1255/15 791/1256/20 790/1257/15 -f 796/1258/12 789/1259/26 788/1260/12 -f 793/1261/16 787/1262/21 786/1263/16 -f 799/1264/20 792/1254/13 791/1256/20 -f 797/1265/26 790/1257/15 789/1266/26 -f 795/1267/21 788/1260/12 787/1262/21 -f 794/1268/27 786/1263/16 785/1253/27 -f 816/1269/13 801/1270/27 808/1271/13 -f 814/1272/15 807/1273/20 806/1274/15 -f 812/1275/12 805/1276/26 804/1277/12 -f 809/1278/16 803/1279/21 802/1280/16 -f 815/1281/20 808/1271/13 807/1273/20 -f 813/1282/26 806/1274/15 805/1283/26 -f 811/1284/21 804/1277/12 803/1279/21 -f 810/1285/27 802/1280/16 801/1270/27 -f 820/1286/127 827/1287/27 819/1288/128 -f 818/1289/129 825/1290/9 817/1291/130 -f 817/1292/130 832/1293/67 824/1294/131 -f 823/1295/15 830/1296/69 822/1297/132 -f 821/1298/133 828/1299/71 820/1286/127 -f 819/1288/128 826/1300/73 818/1289/129 -f 824/1294/131 831/1301/26 823/1295/15 -f 822/1297/132 829/1302/10 821/1298/133 -f 819/1288/128 836/1303/134 820/1304/127 -f 833/1305/135 818/1306/129 817/1307/130 -f 839/1308/136 817/1309/130 824/1310/131 -f 820/1304/127 837/1311/137 821/1312/133 -f 834/1313/138 819/1288/128 818/1306/129 -f 821/1312/133 838/1314/139 822/1315/132 -f 833/1305/135 841/1316/140 834/1313/138 -f 839/1308/136 840/1317/141 833/1318/135 -f 843/1319/142 837/1311/137 836/1303/134 -f 841/1316/140 835/1320/16 834/1313/138 -f 844/1321/143 838/1314/139 837/1311/137 -f 842/1322/144 836/1303/134 835/1320/16 -f 822/1315/132 838/1314/139 823/1323/15 -f 838/1314/139 845/1324/145 823/1323/15 -f 824/1310/131 823/1323/15 839/1308/136 -f 839/1308/136 823/1323/15 846/1325/146 -f 847/1326/93 846/1327/146 823/1328/15 -f 854/1329/91 840/1330/141 846/1327/146 -f 853/1331/90 823/1328/15 845/1332/145 -f 851/1333/89 844/1334/143 843/1335/142 -f 849/1336/88 842/1322/144 841/1337/140 -f 852/1338/92 845/1332/145 844/1334/143 -f 850/1339/87 843/1335/142 842/1322/144 -f 848/1340/73 841/1337/140 840/1341/141 -f 865/1342/132 858/1343/10 866/1344/133 -f 863/1345/131 856/1346/26 864/1347/15 -f 868/1348/128 861/1349/73 869/1350/129 -f 866/1344/133 859/1351/71 867/1352/127 -f 864/1347/15 857/1353/69 865/1342/132 -f 870/1354/130 855/1355/67 863/1345/131 -f 869/1350/129 862/1356/9 870/1357/130 -f 867/1352/127 860/1358/27 868/1348/128 -f 872/1359/15 879/1360/97 884/1361/96 -f 875/1362/21 882/1363/95 881/1364/94 -f 873/1365/26 884/1361/96 883/1366/98 -f 877/1367/20 885/1368/100 879/1360/97 -f 876/1369/16 881/1364/94 880/1370/99 -f 878/1371/27 880/1370/99 848/1372/73 -f 871/1373/13 848/1374/73 885/1368/100 -f 874/1375/12 883/1366/98 882/1363/95 -f 880/1376/99 891/1377/102 848/1378/73 -f 849/1379/88 848/1378/73 891/1377/102 -f 885/1380/100 848/1381/73 886/1382/101 -f 854/1383/91 886/1382/101 848/1381/73 -f 883/1366/98 887/1384/104 888/1385/69 -f 890/1386/106 882/1387/95 889/1388/103 -f 884/1389/96 892/1390/105 887/1384/104 -f 889/1388/103 883/1366/98 888/1385/69 -f 891/1377/102 881/1391/94 890/1386/106 -f 879/1392/97 886/1382/101 892/1390/105 -f 892/1390/105 854/1383/91 847/1393/93 -f 850/1394/87 889/1388/103 851/1395/89 -f 888/1385/69 853/1396/90 852/1338/92 -f 887/1384/104 847/1393/93 853/1396/90 -f 849/1379/88 890/1386/106 850/1394/87 -f 889/1388/103 852/1338/92 851/1395/89 -f 895/1397/16 867/1398/127 868/1348/128 -f 870/1399/130 894/1400/138 869/1401/129 -f 899/1402/136 870/1403/130 863/1404/131 -f 867/1398/127 897/1405/137 866/1406/133 -f 894/1400/138 868/1348/128 869/1401/129 -f 866/1406/133 898/1407/139 865/1408/132 -f 893/1409/135 901/1410/140 894/1400/138 -f 899/1402/136 900/1411/141 893/1412/135 -f 903/1413/142 897/1405/137 896/1414/134 -f 894/1400/138 902/1415/144 895/1397/16 -f 904/1416/143 898/1407/139 897/1405/137 -f 902/1415/144 896/1414/134 895/1397/16 -f 865/1408/132 898/1407/139 864/1417/15 -f 898/1407/139 905/1418/145 864/1417/15 -f 863/1404/131 864/1417/15 899/1402/136 -f 899/1402/136 864/1417/15 906/1419/146 -f 907/1420/93 906/1421/146 864/1422/15 -f 914/1423/91 900/1424/141 906/1421/146 -f 913/1425/90 864/1422/15 905/1426/145 -f 911/1427/89 904/1428/143 903/1429/142 -f 909/1430/88 902/1415/144 901/1431/140 -f 912/1432/92 905/1426/145 904/1428/143 -f 910/1433/87 903/1429/142 902/1415/144 -f 908/1434/73 901/1431/140 900/1435/141 -f 916/1436/15 923/1437/97 928/1438/96 -f 919/1439/21 926/1440/95 925/1441/94 -f 917/1442/26 928/1438/96 927/1443/98 -f 921/1444/20 929/1445/100 923/1437/97 -f 920/1446/16 925/1441/94 924/1447/99 -f 922/1448/27 924/1447/99 908/1449/73 -f 915/1450/13 908/1451/73 929/1445/100 -f 918/1452/12 927/1443/98 926/1440/95 -f 924/1453/99 935/1454/102 908/1455/73 -f 909/1456/88 908/1455/73 935/1454/102 -f 929/1457/100 908/1458/73 930/1459/101 -f 914/1460/91 930/1459/101 908/1458/73 -f 927/1443/98 931/1461/104 932/1462/69 -f 925/1463/94 933/1464/103 934/1465/106 -f 931/1461/104 923/1466/97 936/1467/105 -f 933/1464/103 927/1443/98 932/1462/69 -f 935/1454/102 925/1463/94 934/1465/106 -f 923/1466/97 930/1459/101 936/1467/105 -f 936/1467/105 914/1460/91 907/1468/93 -f 910/1469/87 933/1464/103 911/1470/89 -f 912/1432/92 931/1461/104 913/1471/90 -f 931/1461/104 907/1468/93 913/1471/90 -f 909/1456/88 934/1465/106 910/1469/87 -f 933/1464/103 912/1432/92 911/1470/89 -f 940/1472/127 947/1473/27 939/1474/128 -f 938/1475/129 945/1476/9 937/1477/130 -f 937/1478/130 952/1479/67 944/1480/131 -f 943/1481/15 950/1482/69 942/1483/132 -f 941/1484/133 948/1485/71 940/1472/127 -f 939/1474/128 946/1486/73 938/1475/129 -f 944/1480/131 951/1487/26 943/1481/15 -f 942/1483/132 949/1488/10 941/1484/133 -f 939/1474/128 956/1489/134 940/1472/127 -f 953/1490/135 938/1475/129 937/1491/130 -f 959/1492/136 937/1493/130 944/1494/131 -f 940/1472/127 957/1495/137 941/1496/133 -f 938/1475/129 955/1497/16 939/1474/128 -f 941/1496/133 958/1498/139 942/1499/132 -f 953/1490/135 961/1500/140 954/1501/138 -f 959/1492/136 960/1502/141 953/1503/135 -f 963/1504/142 957/1495/137 956/1489/134 -f 954/1501/138 962/1505/144 955/1497/16 -f 964/1506/143 958/1498/139 957/1495/137 -f 962/1505/144 956/1489/134 955/1497/16 -f 942/1499/132 958/1498/139 943/1507/15 -f 958/1498/139 965/1508/145 943/1507/15 -f 944/1494/131 943/1507/15 959/1492/136 -f 959/1492/136 943/1507/15 966/1509/146 -f 967/1510/93 966/1511/146 943/1512/15 -f 974/1513/91 960/1514/141 966/1511/146 -f 973/1515/90 943/1512/15 965/1516/145 -f 971/1517/89 964/1518/143 963/1504/142 -f 969/1519/88 962/1505/144 961/1500/140 -f 972/1520/92 965/1516/145 964/1518/143 -f 970/1521/87 963/1504/142 962/1505/144 -f 968/1522/73 961/1500/140 960/1523/141 -f 985/1524/132 978/1525/10 986/1526/133 -f 983/1527/131 976/1528/26 984/1529/15 -f 988/1530/128 981/1531/73 989/1532/129 -f 986/1526/133 979/1533/71 987/1534/127 -f 984/1529/15 977/1535/69 985/1524/132 -f 990/1536/130 975/1537/67 983/1527/131 -f 989/1532/129 982/1538/9 990/1539/130 -f 987/1534/127 980/1540/27 988/1530/128 -f 992/1541/15 999/1542/97 1004/1543/96 -f 995/1544/21 1002/1545/95 1001/1546/94 -f 993/1547/26 1004/1543/96 1003/1548/98 -f 997/1549/20 1005/1550/100 999/1542/97 -f 996/1551/16 1001/1546/94 1000/1552/99 -f 998/1553/27 1000/1552/99 968/1554/73 -f 991/1555/13 968/1556/73 1005/1550/100 -f 994/1557/12 1003/1548/98 1002/1545/95 -f 1000/1558/99 1011/1559/102 968/1560/73 -f 969/1561/88 968/1560/73 1011/1559/102 -f 1005/1562/100 968/1563/73 1006/1564/101 -f 974/1565/91 1006/1564/101 968/1563/73 -f 1003/1548/98 1007/1566/104 1008/1567/69 -f 1010/1568/106 1002/1569/95 1009/1570/103 -f 1004/1571/96 1012/1572/105 1007/1566/104 -f 1009/1570/103 1003/1548/98 1008/1567/69 -f 1011/1559/102 1001/1573/94 1010/1568/106 -f 999/1574/97 1006/1564/101 1012/1572/105 -f 1012/1572/105 974/1565/91 967/1575/93 -f 1010/1568/106 971/1576/89 970/1577/87 -f 972/1520/92 1007/1566/104 973/1578/90 -f 1007/1566/104 967/1575/93 973/1578/90 -f 969/1561/88 1010/1568/106 970/1577/87 -f 971/1576/89 1008/1567/69 972/1520/92 -f 988/1530/128 1016/1579/134 987/1580/127 -f 1013/1581/135 989/1582/129 990/1583/130 -f 1019/1584/136 990/1585/130 983/1586/131 -f 987/1580/127 1017/1587/137 986/1588/133 -f 1014/1589/138 988/1530/128 989/1582/129 -f 986/1588/133 1018/1590/139 985/1591/132 -f 1013/1581/135 1021/1592/140 1014/1589/138 -f 1019/1584/136 1020/1593/141 1013/1594/135 -f 1023/1595/142 1017/1587/137 1016/1579/134 -f 1014/1589/138 1022/1596/144 1015/1597/16 -f 1024/1598/143 1018/1590/139 1017/1587/137 -f 1022/1596/144 1016/1579/134 1015/1597/16 -f 985/1591/132 1018/1590/139 984/1599/15 -f 1018/1590/139 1025/1600/145 984/1599/15 -f 983/1586/131 984/1599/15 1019/1584/136 -f 1019/1584/136 984/1599/15 1026/1601/146 -f 1027/1602/93 1026/1603/146 984/1604/15 -f 1034/1605/91 1020/1606/141 1026/1603/146 -f 1033/1607/90 984/1604/15 1025/1608/145 -f 1031/1609/89 1024/1610/143 1023/1611/142 -f 1029/1612/88 1022/1596/144 1021/1613/140 -f 1032/1614/92 1025/1608/145 1024/1610/143 -f 1030/1615/87 1023/1611/142 1022/1596/144 -f 1028/1616/73 1021/1613/140 1020/1617/141 -f 1036/1618/15 1043/1619/97 1048/1620/96 -f 1039/1621/21 1046/1622/95 1045/1623/94 -f 1037/1624/26 1048/1620/96 1047/1625/98 -f 1041/1626/20 1049/1627/100 1043/1619/97 -f 1040/1628/16 1045/1623/94 1044/1629/99 -f 1042/1630/27 1044/1629/99 1028/1631/73 -f 1035/1632/13 1028/1633/73 1049/1627/100 -f 1038/1634/12 1047/1625/98 1046/1622/95 -f 1044/1635/99 1055/1636/102 1028/1637/73 -f 1029/1638/88 1028/1637/73 1055/1636/102 -f 1049/1639/100 1028/1640/73 1050/1641/101 -f 1034/1642/91 1050/1641/101 1028/1640/73 -f 1047/1625/98 1051/1643/104 1052/1644/69 -f 1045/1645/94 1053/1646/103 1054/1647/106 -f 1048/1648/96 1056/1649/105 1051/1643/104 -f 1046/1650/95 1052/1644/69 1053/1646/103 -f 1055/1636/102 1045/1645/94 1054/1647/106 -f 1043/1651/97 1050/1641/101 1056/1649/105 -f 1027/1652/93 1050/1641/101 1034/1642/91 -f 1054/1647/106 1031/1653/89 1030/1654/87 -f 1032/1614/92 1051/1643/104 1033/1655/90 -f 1051/1643/104 1027/1652/93 1033/1655/90 -f 1029/1638/88 1054/1647/106 1030/1654/87 -f 1053/1646/103 1032/1614/92 1031/1653/89 +f 586/1036/65 601/1037/75 585/1038/66 +f 585/1039/66 607/1040/76 592/1041/68 +f 588/1042/63 605/1043/77 604/1034/74 +f 586/1036/65 603/1035/13 602/1044/78 +f 589/1045/72 606/1046/79 605/1043/77 +f 601/1037/75 609/1047/80 608/1048/81 +f 607/1040/76 608/1049/81 614/1050/82 +f 605/1043/77 611/1051/83 604/1034/74 +f 602/1044/78 610/1052/85 609/1047/80 +f 606/1046/79 612/1053/84 605/1043/77 +f 604/1034/74 610/1052/85 603/1035/13 +f 590/1054/70 591/1055/12 606/1046/79 +f 606/1046/79 591/1055/12 613/1056/86 +f 592/1041/68 607/1040/76 591/1055/12 +f 607/1040/76 614/1050/82 591/1055/12 +f 614/1057/82 615/1058/87 591/1059/12 +f 608/1060/81 622/1061/88 614/1057/82 +f 591/1059/12 621/1062/89 613/1063/86 +f 612/1064/84 619/1065/90 611/1066/83 +f 610/1052/85 617/1067/91 609/1068/80 +f 613/1063/86 620/1069/92 612/1064/84 +f 611/1066/83 618/1070/93 610/1052/85 +f 609/1068/80 616/1071/73 608/1072/81 +f 626/1073/10 633/1074/70 634/1075/72 +f 624/1076/26 631/1077/68 632/1078/12 +f 629/1079/73 636/1080/64 637/1081/65 +f 627/1082/71 634/1075/72 635/1083/63 +f 625/1084/69 632/1078/12 633/1074/70 +f 623/1085/67 638/1086/66 631/1077/68 +f 630/1087/9 637/1081/65 638/1088/66 +f 628/1089/27 635/1083/63 636/1080/64 +f 647/1090/94 640/1091/12 652/1092/95 +f 650/1093/96 643/1094/20 649/1095/97 +f 652/1092/95 641/1096/26 651/1097/98 +f 653/1098/99 645/1099/21 647/1090/94 +f 649/1095/97 644/1100/13 648/1101/100 +f 648/1101/100 646/1102/27 616/1103/73 +f 616/1104/73 639/1105/16 653/1098/99 +f 651/1097/98 642/1106/15 650/1093/96 +f 648/1107/100 616/1108/73 659/1109/101 +f 617/1110/91 659/1109/101 616/1108/73 +f 653/1111/99 654/1112/102 616/1113/73 +f 622/1114/88 616/1113/73 654/1112/102 +f 655/1115/103 651/1097/98 656/1116/69 +f 658/1117/105 650/1118/96 649/1119/97 +f 660/1120/106 652/1121/95 655/1115/103 +f 657/1122/104 651/1097/98 650/1118/96 +f 659/1109/101 649/1119/97 648/1107/100 +f 654/1112/102 647/1123/94 660/1120/106 +f 622/1114/88 660/1120/106 615/1124/87 +f 619/1125/90 658/1117/105 618/1126/93 +f 620/1069/92 655/1115/103 656/1116/69 +f 615/1124/87 655/1115/103 621/1127/89 +f 618/1126/93 659/1109/101 617/1110/91 +f 619/1125/90 656/1116/69 657/1122/104 +f 636/1080/64 664/1128/74 663/1129/13 +f 637/1130/65 661/1131/75 638/1132/66 +f 638/1133/66 667/1134/76 631/1135/68 +f 635/1136/63 665/1137/77 664/1128/74 +f 636/1080/64 662/1138/78 637/1130/65 +f 634/1139/72 666/1140/79 665/1137/77 +f 661/1131/75 669/1141/80 668/1142/81 +f 667/1134/76 668/1143/81 674/1144/82 +f 665/1137/77 671/1145/83 664/1128/74 +f 662/1138/78 670/1146/85 669/1141/80 +f 666/1140/79 672/1147/84 665/1137/77 +f 664/1128/74 670/1146/85 663/1129/13 +f 633/1148/70 632/1149/12 666/1140/79 +f 666/1140/79 632/1149/12 673/1150/86 +f 631/1135/68 667/1134/76 632/1149/12 +f 667/1134/76 674/1144/82 632/1149/12 +f 674/1151/82 675/1152/87 632/1153/12 +f 668/1154/81 682/1155/88 674/1151/82 +f 632/1153/12 681/1156/89 673/1157/86 +f 672/1158/84 679/1159/90 671/1160/83 +f 670/1146/85 677/1161/91 669/1162/80 +f 673/1157/86 680/1163/92 672/1158/84 +f 671/1160/83 678/1164/93 670/1146/85 +f 669/1162/80 676/1165/73 668/1166/81 +f 691/1167/94 684/1168/12 696/1169/95 +f 694/1170/96 687/1171/20 693/1172/97 +f 696/1169/95 685/1173/26 695/1174/98 +f 697/1175/99 689/1176/21 691/1167/94 +f 693/1172/97 688/1177/13 692/1178/100 +f 692/1178/100 690/1179/27 676/1180/73 +f 676/1181/73 683/1182/16 697/1175/99 +f 695/1174/98 686/1183/15 694/1170/96 +f 692/1184/100 676/1185/73 703/1186/101 +f 677/1187/91 703/1186/101 676/1185/73 +f 697/1188/99 698/1189/102 676/1190/73 +f 682/1191/88 676/1190/73 698/1189/102 +f 699/1192/103 695/1174/98 700/1193/69 +f 701/1194/104 693/1195/97 702/1196/105 +f 704/1197/106 696/1198/95 699/1192/103 +f 700/1193/69 694/1199/96 701/1194/104 +f 703/1186/101 693/1195/97 692/1184/100 +f 698/1189/102 691/1200/94 704/1197/106 +f 675/1201/87 698/1189/102 704/1197/106 +f 679/1202/90 702/1196/105 678/1203/93 +f 680/1163/92 699/1192/103 700/1193/69 +f 675/1201/87 699/1192/103 681/1204/89 +f 678/1203/93 703/1186/101 677/1187/91 +f 680/1163/92 701/1194/104 679/1202/90 +f 720/1205/13 705/1206/27 712/1207/13 +f 718/1208/15 711/1209/20 710/1210/15 +f 716/1211/12 709/1212/26 708/1213/12 +f 713/1214/16 707/1215/21 706/1216/16 +f 719/1217/20 712/1207/13 711/1209/20 +f 717/1218/26 710/1210/15 709/1219/26 +f 715/1220/21 708/1213/12 707/1215/21 +f 714/1221/27 706/1216/16 705/1206/27 +f 733/1222/107 462/819/108 461/817/107 +f 734/1223/108 463/821/109 462/819/108 +f 735/1224/109 464/824/110 463/821/109 +f 464/824/110 721/1225/111 449/823/112 +f 721/1226/111 450/826/113 449/823/112 +f 722/1227/114 451/828/115 450/826/113 +f 451/828/115 724/1228/116 452/814/116 +f 452/814/116 725/1229/117 453/816/117 +f 453/816/117 726/1230/118 454/818/119 +f 454/818/119 727/1231/120 455/820/120 +f 455/820/120 728/1232/121 456/822/121 +f 728/1233/121 457/1234/122 456/822/121 +f 457/825/122 730/1235/123 458/827/123 +f 730/1236/123 459/813/124 458/827/123 +f 731/1237/124 460/815/125 459/813/124 +f 732/1238/126 461/817/107 460/815/125 +f 784/1239/13 769/1240/27 776/1241/13 +f 782/1242/15 775/1243/20 774/1244/15 +f 780/1245/12 773/1246/26 772/1247/12 +f 777/1248/16 771/1249/21 770/1250/16 +f 783/1251/20 776/1241/13 775/1243/20 +f 781/1252/26 774/1244/15 773/1253/26 +f 779/1254/21 772/1247/12 771/1249/21 +f 778/1255/27 770/1250/16 769/1240/27 +f 800/1256/13 785/1257/27 792/1258/13 +f 798/1259/15 791/1260/20 790/1261/15 +f 796/1262/12 789/1263/26 788/1264/12 +f 793/1265/16 787/1266/21 786/1267/16 +f 799/1268/20 792/1258/13 791/1260/20 +f 797/1269/26 790/1261/15 789/1270/26 +f 795/1271/21 788/1264/12 787/1266/21 +f 794/1272/27 786/1267/16 785/1257/27 +f 816/1273/13 801/1274/27 808/1275/13 +f 814/1276/15 807/1277/20 806/1278/15 +f 812/1279/12 805/1280/26 804/1281/12 +f 809/1282/16 803/1283/21 802/1284/16 +f 815/1285/20 808/1275/13 807/1277/20 +f 813/1286/26 806/1278/15 805/1287/26 +f 811/1288/21 804/1281/12 803/1283/21 +f 810/1289/27 802/1284/16 801/1274/27 +f 820/1290/127 827/1291/27 819/1292/128 +f 818/1293/129 825/1294/9 817/1295/130 +f 817/1296/130 832/1297/67 824/1298/131 +f 823/1299/15 830/1300/69 822/1301/132 +f 821/1302/133 828/1303/71 820/1290/127 +f 819/1292/128 826/1304/73 818/1293/129 +f 824/1298/131 831/1305/26 823/1299/15 +f 822/1301/132 829/1306/10 821/1302/133 +f 819/1292/128 836/1307/134 820/1308/127 +f 833/1309/135 818/1310/129 817/1311/130 +f 839/1312/136 817/1313/130 824/1314/131 +f 820/1308/127 837/1315/137 821/1316/133 +f 834/1317/138 819/1292/128 818/1310/129 +f 821/1316/133 838/1318/139 822/1319/132 +f 833/1309/135 841/1320/140 834/1317/138 +f 839/1312/136 840/1321/141 833/1322/135 +f 843/1323/142 837/1315/137 836/1307/134 +f 841/1320/140 835/1324/16 834/1317/138 +f 844/1325/143 838/1318/139 837/1315/137 +f 842/1326/144 836/1307/134 835/1324/16 +f 822/1319/132 838/1318/139 823/1327/15 +f 838/1318/139 845/1328/145 823/1327/15 +f 824/1314/131 823/1327/15 839/1312/136 +f 839/1312/136 823/1327/15 846/1329/146 +f 847/1330/93 846/1331/146 823/1332/15 +f 854/1333/91 840/1334/141 846/1331/146 +f 853/1335/90 823/1332/15 845/1336/145 +f 851/1337/89 844/1338/143 843/1339/142 +f 849/1340/88 842/1326/144 841/1341/140 +f 852/1342/92 845/1336/145 844/1338/143 +f 850/1343/87 843/1339/142 842/1326/144 +f 848/1344/73 841/1341/140 840/1345/141 +f 865/1346/132 858/1347/10 866/1348/133 +f 863/1349/131 856/1350/26 864/1351/15 +f 868/1352/128 861/1353/73 869/1354/129 +f 866/1348/133 859/1355/71 867/1356/127 +f 864/1351/15 857/1357/69 865/1346/132 +f 870/1358/130 855/1359/67 863/1349/131 +f 869/1354/129 862/1360/9 870/1361/130 +f 867/1356/127 860/1362/27 868/1352/128 +f 872/1363/15 879/1364/97 884/1365/96 +f 875/1366/21 882/1367/95 881/1368/94 +f 873/1369/26 884/1365/96 883/1370/98 +f 877/1371/20 885/1372/100 879/1364/97 +f 876/1373/16 881/1368/94 880/1374/99 +f 878/1375/27 880/1374/99 848/1376/73 +f 871/1377/13 848/1378/73 885/1372/100 +f 874/1379/12 883/1370/98 882/1367/95 +f 880/1380/99 891/1381/102 848/1382/73 +f 849/1383/88 848/1382/73 891/1381/102 +f 885/1384/100 848/1385/73 886/1386/101 +f 854/1387/91 886/1386/101 848/1385/73 +f 883/1370/98 887/1388/104 888/1389/69 +f 890/1390/106 882/1391/95 889/1392/103 +f 884/1393/96 892/1394/105 887/1388/104 +f 889/1392/103 883/1370/98 888/1389/69 +f 891/1381/102 881/1395/94 890/1390/106 +f 879/1396/97 886/1386/101 892/1394/105 +f 892/1394/105 854/1387/91 847/1397/93 +f 850/1398/87 889/1392/103 851/1399/89 +f 888/1389/69 853/1400/90 852/1342/92 +f 887/1388/104 847/1397/93 853/1400/90 +f 849/1383/88 890/1390/106 850/1398/87 +f 889/1392/103 852/1342/92 851/1399/89 +f 895/1401/16 867/1402/127 868/1352/128 +f 870/1403/130 894/1404/138 869/1405/129 +f 899/1406/136 870/1407/130 863/1408/131 +f 867/1402/127 897/1409/137 866/1410/133 +f 894/1404/138 868/1352/128 869/1405/129 +f 866/1410/133 898/1411/139 865/1412/132 +f 893/1413/135 901/1414/140 894/1404/138 +f 899/1406/136 900/1415/141 893/1416/135 +f 903/1417/142 897/1409/137 896/1418/134 +f 894/1404/138 902/1419/144 895/1401/16 +f 904/1420/143 898/1411/139 897/1409/137 +f 902/1419/144 896/1418/134 895/1401/16 +f 865/1412/132 898/1411/139 864/1421/15 +f 898/1411/139 905/1422/145 864/1421/15 +f 863/1408/131 864/1421/15 899/1406/136 +f 899/1406/136 864/1421/15 906/1423/146 +f 907/1424/93 906/1425/146 864/1426/15 +f 914/1427/91 900/1428/141 906/1425/146 +f 913/1429/90 864/1426/15 905/1430/145 +f 911/1431/89 904/1432/143 903/1433/142 +f 909/1434/88 902/1419/144 901/1435/140 +f 912/1436/92 905/1430/145 904/1432/143 +f 910/1437/87 903/1433/142 902/1419/144 +f 908/1438/73 901/1435/140 900/1439/141 +f 916/1440/15 923/1441/97 928/1442/96 +f 919/1443/21 926/1444/95 925/1445/94 +f 917/1446/26 928/1442/96 927/1447/98 +f 921/1448/20 929/1449/100 923/1441/97 +f 920/1450/16 925/1445/94 924/1451/99 +f 922/1452/27 924/1451/99 908/1453/73 +f 915/1454/13 908/1455/73 929/1449/100 +f 918/1456/12 927/1447/98 926/1444/95 +f 924/1457/99 935/1458/102 908/1459/73 +f 909/1460/88 908/1459/73 935/1458/102 +f 929/1461/100 908/1462/73 930/1463/101 +f 914/1464/91 930/1463/101 908/1462/73 +f 927/1447/98 931/1465/104 932/1466/69 +f 925/1467/94 933/1468/103 934/1469/106 +f 931/1465/104 923/1470/97 936/1471/105 +f 933/1468/103 927/1447/98 932/1466/69 +f 935/1458/102 925/1467/94 934/1469/106 +f 923/1470/97 930/1463/101 936/1471/105 +f 936/1471/105 914/1464/91 907/1472/93 +f 910/1473/87 933/1468/103 911/1474/89 +f 912/1436/92 931/1465/104 913/1475/90 +f 931/1465/104 907/1472/93 913/1475/90 +f 909/1460/88 934/1469/106 910/1473/87 +f 933/1468/103 912/1436/92 911/1474/89 +f 940/1476/127 947/1477/27 939/1478/128 +f 938/1479/129 945/1480/9 937/1481/130 +f 937/1482/130 952/1483/67 944/1484/131 +f 943/1485/15 950/1486/69 942/1487/132 +f 941/1488/133 948/1489/71 940/1476/127 +f 939/1478/128 946/1490/73 938/1479/129 +f 944/1484/131 951/1491/26 943/1485/15 +f 942/1487/132 949/1492/10 941/1488/133 +f 939/1478/128 956/1493/134 940/1494/127 +f 953/1495/135 938/1496/129 937/1497/130 +f 959/1498/136 937/1499/130 944/1500/131 +f 940/1494/127 957/1501/137 941/1502/133 +f 938/1496/129 955/1503/16 939/1478/128 +f 941/1502/133 958/1504/139 942/1505/132 +f 953/1495/135 961/1506/140 954/1507/138 +f 959/1498/136 960/1508/141 953/1509/135 +f 963/1510/142 957/1501/137 956/1493/134 +f 954/1507/138 962/1511/144 955/1503/16 +f 964/1512/143 958/1504/139 957/1501/137 +f 962/1511/144 956/1493/134 955/1503/16 +f 942/1505/132 958/1504/139 943/1513/15 +f 958/1504/139 965/1514/145 943/1513/15 +f 944/1500/131 943/1513/15 959/1498/136 +f 959/1498/136 943/1513/15 966/1515/146 +f 967/1516/93 966/1517/146 943/1518/15 +f 974/1519/91 960/1520/141 966/1517/146 +f 973/1521/90 943/1518/15 965/1522/145 +f 971/1523/89 964/1524/143 963/1525/142 +f 969/1526/88 962/1511/144 961/1527/140 +f 972/1528/92 965/1522/145 964/1524/143 +f 970/1529/87 963/1525/142 962/1511/144 +f 968/1530/73 961/1527/140 960/1531/141 +f 985/1532/132 978/1533/10 986/1534/133 +f 983/1535/131 976/1536/26 984/1537/15 +f 988/1538/128 981/1539/73 989/1540/129 +f 986/1534/133 979/1541/71 987/1542/127 +f 984/1537/15 977/1543/69 985/1532/132 +f 990/1544/130 975/1545/67 983/1535/131 +f 989/1540/129 982/1546/9 990/1547/130 +f 987/1542/127 980/1548/27 988/1538/128 +f 992/1549/15 999/1550/97 1004/1551/96 +f 995/1552/21 1002/1553/95 1001/1554/94 +f 993/1555/26 1004/1551/96 1003/1556/98 +f 997/1557/20 1005/1558/100 999/1550/97 +f 996/1559/16 1001/1554/94 1000/1560/99 +f 998/1561/27 1000/1560/99 968/1562/73 +f 991/1563/13 968/1564/73 1005/1558/100 +f 994/1565/12 1003/1556/98 1002/1553/95 +f 1000/1566/99 1011/1567/102 968/1568/73 +f 969/1569/88 968/1568/73 1011/1567/102 +f 1005/1570/100 968/1571/73 1006/1572/101 +f 974/1573/91 1006/1572/101 968/1571/73 +f 1003/1556/98 1007/1574/104 1008/1575/69 +f 1010/1576/106 1002/1577/95 1009/1578/103 +f 1004/1579/96 1012/1580/105 1007/1574/104 +f 1009/1578/103 1003/1556/98 1008/1575/69 +f 1011/1567/102 1001/1581/94 1010/1576/106 +f 999/1582/97 1006/1572/101 1012/1580/105 +f 1012/1580/105 974/1573/91 967/1583/93 +f 1010/1576/106 971/1584/89 970/1585/87 +f 972/1528/92 1007/1574/104 973/1586/90 +f 1007/1574/104 967/1583/93 973/1586/90 +f 969/1569/88 1010/1576/106 970/1585/87 +f 971/1584/89 1008/1575/69 972/1528/92 +f 988/1538/128 1016/1587/134 987/1588/127 +f 1013/1589/135 989/1590/129 990/1591/130 +f 1019/1592/136 990/1593/130 983/1594/131 +f 987/1588/127 1017/1595/137 986/1596/133 +f 1014/1597/138 988/1538/128 989/1590/129 +f 986/1596/133 1018/1598/139 985/1599/132 +f 1013/1589/135 1021/1600/140 1014/1597/138 +f 1019/1592/136 1020/1601/141 1013/1602/135 +f 1023/1603/142 1017/1595/137 1016/1587/134 +f 1014/1597/138 1022/1604/144 1015/1605/16 +f 1024/1606/143 1018/1598/139 1017/1595/137 +f 1022/1604/144 1016/1587/134 1015/1605/16 +f 985/1599/132 1018/1598/139 984/1607/15 +f 1018/1598/139 1025/1608/145 984/1607/15 +f 983/1594/131 984/1607/15 1019/1592/136 +f 1019/1592/136 984/1607/15 1026/1609/146 +f 1027/1610/93 1026/1611/146 984/1612/15 +f 1034/1613/91 1020/1614/141 1026/1611/146 +f 1033/1615/90 984/1612/15 1025/1616/145 +f 1031/1617/89 1024/1618/143 1023/1619/142 +f 1029/1620/88 1022/1604/144 1021/1621/140 +f 1032/1622/92 1025/1616/145 1024/1618/143 +f 1030/1623/87 1023/1619/142 1022/1604/144 +f 1028/1624/73 1021/1621/140 1020/1625/141 +f 1036/1626/15 1043/1627/97 1048/1628/96 +f 1039/1629/21 1046/1630/95 1045/1631/94 +f 1037/1632/26 1048/1628/96 1047/1633/98 +f 1041/1634/20 1049/1635/100 1043/1627/97 +f 1040/1636/16 1045/1631/94 1044/1637/99 +f 1042/1638/27 1044/1637/99 1028/1639/73 +f 1035/1640/13 1028/1641/73 1049/1635/100 +f 1038/1642/12 1047/1633/98 1046/1630/95 +f 1044/1643/99 1055/1644/102 1028/1645/73 +f 1029/1646/88 1028/1645/73 1055/1644/102 +f 1049/1647/100 1028/1648/73 1050/1649/101 +f 1034/1650/91 1050/1649/101 1028/1648/73 +f 1047/1633/98 1051/1651/104 1052/1652/69 +f 1045/1653/94 1053/1654/103 1054/1655/106 +f 1048/1656/96 1056/1657/105 1051/1651/104 +f 1046/1658/95 1052/1652/69 1053/1654/103 +f 1055/1644/102 1045/1653/94 1054/1655/106 +f 1043/1659/97 1050/1649/101 1056/1657/105 +f 1027/1660/93 1050/1649/101 1034/1650/91 +f 1054/1655/106 1031/1661/89 1030/1662/87 +f 1032/1622/92 1051/1651/104 1033/1663/90 +f 1051/1651/104 1027/1660/93 1033/1663/90 +f 1029/1646/88 1054/1655/106 1030/1662/87 +f 1053/1654/103 1032/1622/92 1031/1661/89 f 28/556/19 44/587/19 45/557/20 f 21/559/21 37/588/21 38/560/22 f 29/558/20 45/557/20 46/562/23 @@ -4050,22 +4058,22 @@ f 58/452/43 59/209/44 43/583/44 f 59/215/44 60/217/45 44/587/45 f 60/221/45 61/223/46 45/557/46 f 45/557/46 61/458/46 62/227/31 -f 32/571/47 80/1656/47 79/590/48 +f 32/571/47 80/1664/47 79/590/48 f 30/563/49 31/567/48 79/591/48 f 29/558/50 30/563/49 78/593/49 -f 29/558/50 77/1657/50 76/595/51 -f 28/556/51 76/1658/51 75/596/52 -f 27/584/52 75/1659/52 74/597/53 -f 26/580/53 74/1660/53 73/598/54 +f 29/558/50 77/1665/50 76/595/51 +f 28/556/51 76/1666/51 75/596/52 +f 27/584/52 75/1667/52 74/597/53 +f 26/580/53 74/1668/53 73/598/54 f 24/569/55 25/573/54 73/599/54 -f 24/569/55 72/1661/55 71/601/56 -f 23/565/56 71/1662/56 70/602/57 -f 22/561/57 70/1663/57 69/603/58 +f 24/569/55 72/1669/55 71/601/56 +f 23/565/56 71/1670/56 70/602/57 +f 22/561/57 70/1671/57 69/603/58 f 20/586/59 21/559/58 69/604/58 f 19/582/60 20/586/59 68/606/59 -f 19/582/60 67/1664/60 66/608/61 -f 18/576/61 66/1665/61 65/609/62 -f 17/574/62 65/1666/62 80/610/47 +f 19/582/60 67/1672/60 66/608/61 +f 18/576/61 66/1673/61 65/609/62 +f 17/574/62 65/1674/62 80/610/47 f 113/28/27 129/72/27 144/69/25 f 114/32/28 130/435/28 129/72/27 f 115/31/16 131/76/16 130/435/28 @@ -4100,7 +4108,7 @@ f 191/110/13 207/154/13 206/151/23 f 192/113/25 208/157/25 207/154/13 f 224/611/13 217/627/27 209/612/27 f 222/614/15 223/623/20 215/615/20 -f 220/617/12 221/1667/26 213/618/26 +f 220/617/12 221/1675/26 213/618/26 f 218/620/16 219/626/21 211/621/21 f 223/623/20 224/611/13 216/613/13 f 221/624/26 222/614/15 214/616/15 @@ -4108,7 +4116,7 @@ f 219/626/21 220/617/12 212/619/12 f 217/627/27 218/620/16 210/622/16 f 240/628/12 233/644/26 225/629/26 f 238/631/16 239/640/21 231/632/21 -f 236/634/13 237/1668/27 229/635/27 +f 236/634/13 237/1676/27 229/635/27 f 234/637/15 235/643/20 227/638/20 f 239/640/21 240/628/12 232/630/12 f 237/641/27 238/631/16 230/633/16 @@ -4116,7 +4124,7 @@ f 235/643/20 236/634/13 228/636/13 f 233/644/26 234/637/15 226/639/15 f 256/645/15 249/661/20 241/646/20 f 254/648/12 255/657/26 247/649/26 -f 252/651/16 253/1669/21 245/652/21 +f 252/651/16 253/1677/21 245/652/21 f 250/654/13 251/660/27 243/655/27 f 255/657/26 256/645/15 248/647/15 f 253/658/21 254/648/12 246/650/12 @@ -4124,7 +4132,7 @@ f 251/660/27 252/651/16 244/653/16 f 249/661/20 250/654/13 242/656/13 f 272/662/16 265/678/21 257/663/21 f 270/665/13 271/674/27 263/666/27 -f 268/668/15 269/1670/20 261/669/20 +f 268/668/15 269/1678/20 261/669/20 f 266/671/12 267/677/26 259/672/26 f 271/674/27 272/662/16 264/664/16 f 269/675/20 270/665/13 262/667/13 @@ -4132,7 +4140,7 @@ f 267/677/26 268/668/15 260/670/15 f 265/678/21 266/671/12 258/673/12 f 288/679/20 281/695/13 273/680/13 f 286/682/26 287/691/15 279/683/15 -f 284/685/21 285/1671/12 277/686/12 +f 284/685/21 285/1679/12 277/686/12 f 282/688/27 283/694/16 275/689/16 f 287/691/15 288/679/20 280/681/20 f 285/692/12 286/682/26 278/684/26 @@ -4140,7 +4148,7 @@ f 283/694/16 284/685/21 276/687/21 f 281/695/13 282/688/27 274/690/27 f 304/696/21 297/712/12 289/697/12 f 302/699/27 303/708/16 295/700/16 -f 300/702/20 301/1672/13 293/703/13 +f 300/702/20 301/1680/13 293/703/13 f 298/705/26 299/711/15 291/706/15 f 303/708/16 304/696/21 296/698/21 f 301/709/13 302/699/27 294/701/27 @@ -4148,7 +4156,7 @@ f 299/711/15 300/702/20 292/704/20 f 297/712/12 298/705/26 290/707/26 f 320/713/26 313/729/15 305/714/15 f 318/716/21 319/725/12 311/717/12 -f 316/719/27 317/1673/16 309/720/16 +f 316/719/27 317/1681/16 309/720/16 f 314/722/20 315/728/13 307/723/13 f 319/725/12 320/713/26 312/715/26 f 317/726/16 318/716/21 310/718/21 @@ -4156,7 +4164,7 @@ f 315/728/13 316/719/27 308/721/27 f 313/729/15 314/722/20 306/724/20 f 336/730/27 329/746/16 321/731/16 f 334/733/20 335/742/13 327/734/13 -f 332/736/26 333/1674/15 325/737/15 +f 332/736/26 333/1682/15 325/737/15 f 330/739/21 331/745/12 323/740/12 f 335/742/13 336/730/27 328/732/27 f 333/743/15 334/733/20 326/735/20 @@ -4164,7 +4172,7 @@ f 331/745/12 332/736/26 324/738/26 f 329/746/16 330/739/21 322/741/21 f 337/747/27 353/751/27 354/748/28 f 352/750/25 368/777/25 353/751/27 -f 345/752/26 361/1675/26 362/753/29 +f 345/752/26 361/1683/26 362/753/29 f 338/749/28 354/748/28 355/755/16 f 346/754/29 362/753/29 363/757/15 f 339/756/16 355/755/16 356/759/30 @@ -4196,7 +4204,7 @@ f 394/311/29 395/314/15 379/278/15 f 387/297/16 388/299/30 372/466/30 f 401/780/27 417/784/27 418/781/28 f 416/783/25 432/810/25 417/784/27 -f 409/785/26 425/1676/26 426/786/29 +f 409/785/26 425/1684/26 426/786/29 f 402/782/28 418/781/28 419/788/16 f 410/787/29 426/786/29 427/790/15 f 403/789/16 419/788/16 420/792/30 @@ -4219,7 +4227,7 @@ f 454/818/22 455/820/12 439/339/12 f 462/819/23 463/821/13 447/487/13 f 455/820/12 456/822/24 440/343/24 f 463/821/13 464/824/25 448/321/25 -f 456/822/24 457/1230/26 441/491/26 +f 456/822/24 457/1234/26 441/491/26 f 449/823/27 450/826/28 434/326/28 f 464/824/25 449/823/27 433/488/27 f 457/825/26 458/827/29 442/347/29 @@ -4228,7 +4236,7 @@ f 458/827/29 459/813/15 443/350/15 f 451/828/16 452/814/30 436/489/30 f 475/829/27 476/841/71 468/830/63 f 473/832/9 474/843/73 466/833/65 -f 480/835/67 473/1677/9 465/836/66 +f 480/835/67 473/1685/9 465/836/66 f 478/838/69 479/844/26 471/839/12 f 476/841/71 477/845/10 469/842/72 f 474/843/73 475/829/27 467/831/64 @@ -4236,18 +4244,18 @@ f 479/844/26 480/835/67 472/837/68 f 477/845/10 478/838/69 470/840/70 f 467/831/64 468/854/63 484/846/74 f 466/848/65 482/856/78 481/849/75 -f 465/851/66 481/1678/75 487/852/76 +f 465/851/66 481/1686/75 487/852/76 f 468/854/63 469/857/72 485/855/77 f 466/848/65 467/831/64 483/847/13 f 469/857/72 470/866/70 486/858/79 f 481/849/75 482/856/78 489/859/80 -f 487/852/76 481/1678/75 488/861/81 +f 487/852/76 481/1686/75 488/861/81 f 485/855/77 492/864/84 491/863/83 f 483/847/13 490/865/85 489/859/80 f 486/858/79 493/868/86 492/864/84 f 484/846/74 491/863/83 490/865/85 f 494/869/82 502/873/88 495/870/87 -f 488/872/81 496/1679/73 502/873/88 +f 488/872/81 496/1687/73 502/873/88 f 471/871/12 495/870/87 501/874/89 f 492/876/84 500/881/92 499/877/90 f 490/865/85 498/882/93 497/879/91 @@ -4259,7 +4267,7 @@ f 504/888/26 503/897/67 511/889/68 f 509/891/73 508/901/27 516/892/64 f 507/894/71 506/885/10 514/887/72 f 505/896/69 504/888/26 512/890/12 -f 503/897/67 510/1680/9 518/898/66 +f 503/897/67 510/1688/9 518/898/66 f 510/899/9 509/891/73 517/893/65 f 508/901/27 507/894/71 515/895/63 f 527/902/94 525/911/21 520/903/12 @@ -4268,7 +4276,7 @@ f 532/904/95 520/903/12 521/908/26 f 533/910/99 519/917/16 525/911/21 f 529/907/97 523/906/20 524/912/13 f 528/913/100 524/912/13 526/914/27 -f 496/916/73 526/1681/27 519/917/16 +f 496/916/73 526/1689/27 519/917/16 f 531/909/98 521/908/26 522/918/15 f 535/927/103 532/933/95 531/909/98 f 537/929/104 530/934/96 529/930/97 @@ -4284,18 +4292,18 @@ f 497/922/91 498/938/93 538/931/105 f 500/881/92 536/928/69 537/929/104 f 515/940/63 544/949/74 543/941/13 f 517/942/65 542/950/78 541/943/75 -f 518/945/66 541/1682/75 547/946/76 +f 518/945/66 541/1690/75 547/946/76 f 515/940/63 514/951/72 545/948/77 f 516/892/64 543/941/13 542/950/78 f 514/951/72 513/960/70 546/952/79 f 541/943/75 542/950/78 549/953/80 -f 547/946/76 541/1682/75 548/955/81 +f 547/946/76 541/1690/75 548/955/81 f 545/948/77 552/959/84 551/957/83 f 542/950/78 543/941/13 550/958/85 f 546/952/79 553/962/86 552/959/84 f 544/949/74 551/957/83 550/958/85 f 554/963/82 562/967/88 555/964/87 -f 548/966/81 556/1683/73 562/967/88 +f 548/966/81 556/1691/73 562/967/88 f 512/965/12 555/964/87 561/968/89 f 552/970/84 560/975/92 559/971/90 f 550/958/85 558/976/93 557/973/91 @@ -4308,7 +4316,7 @@ f 576/981/95 564/980/12 565/985/26 f 577/987/99 563/994/16 569/988/21 f 573/984/97 567/983/20 568/989/13 f 572/990/100 568/989/13 570/991/27 -f 556/993/73 570/1684/27 563/994/16 +f 556/993/73 570/1692/27 563/994/16 f 575/986/98 565/985/26 566/995/15 f 579/1004/103 576/1010/95 575/986/98 f 581/1006/104 574/1011/96 573/1007/97 @@ -4324,340 +4332,340 @@ f 557/999/91 558/1015/93 582/1008/105 f 560/975/92 580/1005/69 581/1006/104 f 595/1017/27 596/1029/71 588/1018/63 f 593/1020/9 594/1031/73 586/1021/65 -f 600/1023/67 593/1685/9 585/1024/66 +f 600/1023/67 593/1693/9 585/1024/66 f 598/1026/69 599/1032/26 591/1027/12 f 596/1029/71 597/1033/10 589/1030/72 f 594/1031/73 595/1017/27 587/1019/64 f 599/1032/26 600/1023/67 592/1025/68 f 597/1033/10 598/1026/69 590/1028/70 -f 587/1019/64 588/1018/63 604/1034/74 -f 586/1021/65 602/1042/78 601/1036/75 -f 585/1038/66 601/1686/75 607/1039/76 -f 588/1018/63 589/1043/72 605/1041/77 -f 586/1021/65 587/1019/64 603/1035/13 -f 589/1043/72 590/1052/70 606/1044/79 -f 601/1036/75 602/1042/78 609/1045/80 -f 607/1039/76 601/1686/75 608/1047/81 -f 605/1041/77 612/1051/84 611/1049/83 -f 602/1042/78 603/1035/13 610/1050/85 -f 606/1044/79 613/1054/86 612/1051/84 -f 604/1034/74 611/1049/83 610/1050/85 -f 614/1055/82 622/1059/88 615/1056/87 -f 608/1058/81 616/1687/73 622/1059/88 -f 591/1057/12 615/1056/87 621/1060/89 -f 612/1062/84 620/1065/92 619/1063/90 -f 610/1050/85 618/1066/93 617/1064/91 -f 613/1061/86 621/1060/89 620/1065/92 -f 611/1049/83 619/1063/90 618/1066/93 -f 609/1045/80 617/1064/91 616/1067/73 -f 626/1069/10 625/1080/69 633/1070/70 -f 624/1072/26 623/1081/67 631/1073/68 -f 629/1075/73 628/1085/27 636/1076/64 -f 627/1078/71 626/1069/10 634/1071/72 -f 625/1080/69 624/1072/26 632/1074/12 -f 623/1081/67 630/1688/9 638/1082/66 -f 630/1083/9 629/1075/73 637/1077/65 -f 628/1085/27 627/1078/71 635/1079/63 -f 647/1086/94 645/1095/21 640/1087/12 -f 650/1089/96 642/1102/15 643/1090/20 -f 652/1088/95 640/1087/12 641/1092/26 -f 653/1094/99 639/1101/16 645/1095/21 -f 649/1091/97 643/1090/20 644/1096/13 -f 648/1097/100 644/1096/13 646/1098/27 -f 616/1100/73 646/1689/27 639/1101/16 -f 651/1093/98 641/1092/26 642/1102/15 -f 655/1111/103 652/1117/95 651/1093/98 -f 658/1113/105 657/1118/104 650/1114/96 -f 660/1116/106 647/1119/94 652/1117/95 -f 657/1118/104 656/1112/69 651/1093/98 -f 659/1105/101 658/1113/105 649/1115/97 -f 654/1108/102 653/1107/99 647/1119/94 -f 622/1110/88 654/1108/102 660/1116/106 -f 619/1121/90 657/1118/104 658/1113/105 -f 620/1065/92 621/1123/89 655/1111/103 -f 615/1120/87 660/1116/106 655/1111/103 -f 618/1122/93 658/1113/105 659/1105/101 -f 619/1121/90 620/1065/92 656/1112/69 -f 636/1076/64 635/1132/63 664/1124/74 -f 637/1126/65 662/1134/78 661/1127/75 -f 638/1129/66 661/1690/75 667/1130/76 -f 635/1132/63 634/1135/72 665/1133/77 -f 636/1076/64 663/1125/13 662/1134/78 -f 634/1135/72 633/1144/70 666/1136/79 -f 661/1127/75 662/1134/78 669/1137/80 -f 667/1130/76 661/1690/75 668/1139/81 -f 665/1133/77 672/1143/84 671/1141/83 -f 662/1134/78 663/1125/13 670/1142/85 -f 666/1136/79 673/1146/86 672/1143/84 -f 664/1124/74 671/1141/83 670/1142/85 -f 674/1147/82 682/1151/88 675/1148/87 -f 668/1150/81 676/1691/73 682/1151/88 -f 632/1149/12 675/1148/87 681/1152/89 -f 672/1154/84 680/1159/92 679/1155/90 -f 670/1142/85 678/1160/93 677/1157/91 -f 673/1153/86 681/1152/89 680/1159/92 -f 671/1156/83 679/1155/90 678/1160/93 -f 669/1158/80 677/1157/91 676/1161/73 -f 691/1163/94 689/1172/21 684/1164/12 -f 694/1166/96 686/1179/15 687/1167/20 -f 696/1165/95 684/1164/12 685/1169/26 -f 697/1171/99 683/1178/16 689/1172/21 -f 693/1168/97 687/1167/20 688/1173/13 -f 692/1174/100 688/1173/13 690/1175/27 -f 676/1177/73 690/1692/27 683/1178/16 -f 695/1170/98 685/1169/26 686/1179/15 -f 699/1188/103 696/1194/95 695/1170/98 -f 701/1190/104 694/1195/96 693/1191/97 -f 704/1193/106 691/1196/94 696/1194/95 -f 700/1189/69 695/1170/98 694/1195/96 -f 703/1182/101 702/1192/105 693/1191/97 -f 698/1185/102 697/1184/99 691/1196/94 -f 675/1197/87 682/1187/88 698/1185/102 -f 679/1198/90 701/1190/104 702/1192/105 -f 680/1159/92 681/1200/89 699/1188/103 -f 675/1197/87 704/1193/106 699/1188/103 -f 678/1199/93 702/1192/105 703/1182/101 -f 680/1159/92 700/1189/69 701/1190/104 -f 720/1201/13 714/1217/27 705/1202/27 -f 718/1204/15 719/1213/20 711/1205/20 -f 716/1207/12 717/1693/26 709/1208/26 -f 713/1210/16 715/1216/21 707/1211/21 -f 719/1213/20 720/1201/13 712/1203/13 -f 717/1214/26 718/1204/15 710/1206/15 -f 715/1216/21 716/1207/12 708/1209/12 -f 714/1217/27 713/1210/16 706/1212/16 -f 733/1218/107 734/1694/108 462/819/108 -f 734/1219/108 735/1695/109 463/821/109 -f 735/1220/109 736/1696/147 464/824/110 -f 464/824/110 736/1697/147 721/1221/111 -f 721/1222/111 722/1698/114 450/826/113 -f 722/1223/114 723/1699/115 451/828/115 -f 451/828/115 723/1700/115 724/1224/116 -f 452/814/116 724/1701/116 725/1225/117 -f 453/816/117 725/1702/117 726/1226/118 -f 454/818/119 726/1703/118 727/1227/120 -f 455/820/120 727/1704/120 728/1228/121 -f 728/1229/121 729/1705/122 457/1230/122 -f 457/825/122 729/1706/122 730/1231/123 -f 730/1232/123 731/1707/124 459/813/124 -f 731/1233/124 732/1708/126 460/815/125 -f 732/1234/126 733/1709/107 461/817/107 -f 784/1235/13 778/1251/27 769/1236/27 -f 782/1238/15 783/1247/20 775/1239/20 -f 780/1241/12 781/1710/26 773/1242/26 -f 777/1244/16 779/1250/21 771/1245/21 -f 783/1247/20 784/1235/13 776/1237/13 -f 781/1248/26 782/1238/15 774/1240/15 -f 779/1250/21 780/1241/12 772/1243/12 -f 778/1251/27 777/1244/16 770/1246/16 -f 800/1252/13 794/1268/27 785/1253/27 -f 798/1255/15 799/1264/20 791/1256/20 -f 796/1258/12 797/1711/26 789/1259/26 -f 793/1261/16 795/1267/21 787/1262/21 -f 799/1264/20 800/1252/13 792/1254/13 -f 797/1265/26 798/1255/15 790/1257/15 -f 795/1267/21 796/1258/12 788/1260/12 -f 794/1268/27 793/1261/16 786/1263/16 -f 816/1269/13 810/1285/27 801/1270/27 -f 814/1272/15 815/1281/20 807/1273/20 -f 812/1275/12 813/1712/26 805/1276/26 -f 809/1278/16 811/1284/21 803/1279/21 -f 815/1281/20 816/1269/13 808/1271/13 -f 813/1282/26 814/1272/15 806/1274/15 -f 811/1284/21 812/1275/12 804/1277/12 -f 810/1285/27 809/1278/16 802/1280/16 -f 820/1286/127 828/1299/71 827/1287/27 -f 818/1289/129 826/1300/73 825/1290/9 -f 817/1292/130 825/1713/9 832/1293/67 -f 823/1295/15 831/1301/26 830/1296/69 -f 821/1298/133 829/1302/10 828/1299/71 -f 819/1288/128 827/1287/27 826/1300/73 -f 824/1294/131 832/1293/67 831/1301/26 -f 822/1297/132 830/1296/69 829/1302/10 -f 819/1288/128 835/1320/16 836/1303/134 -f 833/1305/135 834/1313/138 818/1306/129 -f 839/1308/136 833/1318/135 817/1309/130 -f 820/1304/127 836/1303/134 837/1311/137 -f 834/1313/138 835/1320/16 819/1288/128 -f 821/1312/133 837/1311/137 838/1314/139 -f 833/1305/135 840/1714/141 841/1316/140 -f 839/1308/136 846/1325/146 840/1317/141 -f 843/1319/142 844/1321/143 837/1311/137 -f 841/1316/140 842/1322/144 835/1320/16 -f 844/1321/143 845/1324/145 838/1314/139 -f 842/1322/144 843/1319/142 836/1303/134 -f 847/1326/93 854/1329/91 846/1327/146 -f 854/1329/91 848/1715/73 840/1330/141 -f 853/1331/90 847/1326/93 823/1328/15 -f 851/1333/89 852/1338/92 844/1334/143 -f 849/1336/88 850/1339/87 842/1322/144 -f 852/1338/92 853/1331/90 845/1332/145 -f 850/1339/87 851/1333/89 843/1335/142 -f 848/1340/73 849/1336/88 841/1337/140 -f 865/1342/132 857/1353/69 858/1343/10 -f 863/1345/131 855/1355/67 856/1346/26 -f 868/1348/128 860/1358/27 861/1349/73 -f 866/1344/133 858/1343/10 859/1351/71 -f 864/1347/15 856/1346/26 857/1353/69 -f 870/1354/130 862/1716/9 855/1355/67 -f 869/1350/129 861/1349/73 862/1356/9 -f 867/1352/127 859/1351/71 860/1358/27 -f 872/1359/15 877/1367/20 879/1360/97 -f 875/1362/21 874/1375/12 882/1363/95 -f 873/1365/26 872/1359/15 884/1361/96 -f 877/1367/20 871/1373/13 885/1368/100 -f 876/1369/16 875/1362/21 881/1364/94 -f 878/1371/27 876/1369/16 880/1370/99 -f 871/1373/13 878/1717/27 848/1374/73 -f 874/1375/12 873/1365/26 883/1366/98 -f 883/1366/98 884/1389/96 887/1384/104 -f 890/1386/106 881/1391/94 882/1387/95 -f 884/1389/96 879/1392/97 892/1390/105 -f 889/1388/103 882/1387/95 883/1366/98 -f 891/1377/102 880/1376/99 881/1391/94 -f 879/1392/97 885/1380/100 886/1382/101 -f 892/1390/105 886/1382/101 854/1383/91 -f 850/1394/87 890/1386/106 889/1388/103 -f 888/1385/69 887/1384/104 853/1396/90 -f 887/1384/104 892/1390/105 847/1393/93 -f 849/1379/88 891/1377/102 890/1386/106 -f 889/1388/103 888/1385/69 852/1338/92 -f 895/1397/16 896/1414/134 867/1398/127 -f 870/1399/130 893/1409/135 894/1400/138 -f 899/1402/136 893/1412/135 870/1403/130 -f 867/1398/127 896/1414/134 897/1405/137 -f 894/1400/138 895/1397/16 868/1348/128 -f 866/1406/133 897/1405/137 898/1407/139 -f 893/1409/135 900/1718/141 901/1410/140 -f 899/1402/136 906/1419/146 900/1411/141 -f 903/1413/142 904/1416/143 897/1405/137 -f 894/1400/138 901/1410/140 902/1415/144 -f 904/1416/143 905/1418/145 898/1407/139 -f 902/1415/144 903/1413/142 896/1414/134 -f 907/1420/93 914/1423/91 906/1421/146 -f 914/1423/91 908/1719/73 900/1424/141 -f 913/1425/90 907/1420/93 864/1422/15 -f 911/1427/89 912/1432/92 904/1428/143 -f 909/1430/88 910/1433/87 902/1415/144 -f 912/1432/92 913/1425/90 905/1426/145 -f 910/1433/87 911/1427/89 903/1429/142 -f 908/1434/73 909/1430/88 901/1431/140 -f 916/1436/15 921/1444/20 923/1437/97 -f 919/1439/21 918/1452/12 926/1440/95 -f 917/1442/26 916/1436/15 928/1438/96 -f 921/1444/20 915/1450/13 929/1445/100 -f 920/1446/16 919/1439/21 925/1441/94 -f 922/1448/27 920/1446/16 924/1447/99 -f 915/1450/13 922/1720/27 908/1451/73 -f 918/1452/12 917/1442/26 927/1443/98 -f 927/1443/98 928/1721/96 931/1461/104 -f 925/1463/94 926/1722/95 933/1464/103 -f 931/1461/104 928/1721/96 923/1466/97 -f 933/1464/103 926/1722/95 927/1443/98 -f 935/1454/102 924/1453/99 925/1463/94 -f 923/1466/97 929/1457/100 930/1459/101 -f 936/1467/105 930/1459/101 914/1460/91 -f 910/1469/87 934/1465/106 933/1464/103 -f 912/1432/92 932/1462/69 931/1461/104 -f 931/1461/104 936/1467/105 907/1468/93 -f 909/1456/88 935/1454/102 934/1465/106 -f 933/1464/103 932/1462/69 912/1432/92 -f 940/1472/127 948/1485/71 947/1473/27 -f 938/1475/129 946/1486/73 945/1476/9 -f 937/1478/130 945/1723/9 952/1479/67 -f 943/1481/15 951/1487/26 950/1482/69 -f 941/1484/133 949/1488/10 948/1485/71 -f 939/1474/128 947/1473/27 946/1486/73 -f 944/1480/131 952/1479/67 951/1487/26 -f 942/1483/132 950/1482/69 949/1488/10 -f 939/1474/128 955/1497/16 956/1489/134 -f 953/1490/135 954/1501/138 938/1475/129 -f 959/1492/136 953/1503/135 937/1493/130 -f 940/1472/127 956/1489/134 957/1495/137 -f 938/1475/129 954/1501/138 955/1497/16 -f 941/1496/133 957/1495/137 958/1498/139 -f 953/1490/135 960/1724/141 961/1500/140 -f 959/1492/136 966/1509/146 960/1502/141 -f 963/1504/142 964/1506/143 957/1495/137 -f 954/1501/138 961/1500/140 962/1505/144 -f 964/1506/143 965/1508/145 958/1498/139 -f 962/1505/144 963/1504/142 956/1489/134 -f 967/1510/93 974/1513/91 966/1511/146 -f 974/1513/91 968/1725/73 960/1514/141 -f 973/1515/90 967/1510/93 943/1512/15 -f 971/1517/89 972/1520/92 964/1518/143 -f 969/1519/88 970/1521/87 962/1505/144 -f 972/1520/92 973/1515/90 965/1516/145 -f 970/1521/87 971/1517/89 963/1504/142 -f 968/1522/73 969/1519/88 961/1500/140 -f 985/1524/132 977/1535/69 978/1525/10 -f 983/1527/131 975/1537/67 976/1528/26 -f 988/1530/128 980/1540/27 981/1531/73 -f 986/1526/133 978/1525/10 979/1533/71 -f 984/1529/15 976/1528/26 977/1535/69 -f 990/1536/130 982/1726/9 975/1537/67 -f 989/1532/129 981/1531/73 982/1538/9 -f 987/1534/127 979/1533/71 980/1540/27 -f 992/1541/15 997/1549/20 999/1542/97 -f 995/1544/21 994/1557/12 1002/1545/95 -f 993/1547/26 992/1541/15 1004/1543/96 -f 997/1549/20 991/1555/13 1005/1550/100 -f 996/1551/16 995/1544/21 1001/1546/94 -f 998/1553/27 996/1551/16 1000/1552/99 -f 991/1555/13 998/1727/27 968/1556/73 -f 994/1557/12 993/1547/26 1003/1548/98 -f 1003/1548/98 1004/1571/96 1007/1566/104 -f 1010/1568/106 1001/1573/94 1002/1569/95 -f 1004/1571/96 999/1574/97 1012/1572/105 -f 1009/1570/103 1002/1569/95 1003/1548/98 -f 1011/1559/102 1000/1558/99 1001/1573/94 -f 999/1574/97 1005/1562/100 1006/1564/101 -f 1012/1572/105 1006/1564/101 974/1565/91 -f 1010/1568/106 1009/1570/103 971/1576/89 -f 972/1520/92 1008/1567/69 1007/1566/104 -f 1007/1566/104 1012/1572/105 967/1575/93 -f 969/1561/88 1011/1559/102 1010/1568/106 -f 971/1576/89 1009/1570/103 1008/1567/69 -f 988/1530/128 1015/1597/16 1016/1579/134 -f 1013/1581/135 1014/1589/138 989/1582/129 -f 1019/1584/136 1013/1594/135 990/1585/130 -f 987/1580/127 1016/1579/134 1017/1587/137 -f 1014/1589/138 1015/1597/16 988/1530/128 -f 986/1588/133 1017/1587/137 1018/1590/139 -f 1013/1581/135 1020/1728/141 1021/1592/140 -f 1019/1584/136 1026/1601/146 1020/1593/141 -f 1023/1595/142 1024/1598/143 1017/1587/137 -f 1014/1589/138 1021/1592/140 1022/1596/144 -f 1024/1598/143 1025/1600/145 1018/1590/139 -f 1022/1596/144 1023/1595/142 1016/1579/134 -f 1027/1602/93 1034/1605/91 1026/1603/146 -f 1034/1605/91 1028/1729/73 1020/1606/141 -f 1033/1607/90 1027/1602/93 984/1604/15 -f 1031/1609/89 1032/1614/92 1024/1610/143 -f 1029/1612/88 1030/1615/87 1022/1596/144 -f 1032/1614/92 1033/1607/90 1025/1608/145 -f 1030/1615/87 1031/1609/89 1023/1611/142 -f 1028/1616/73 1029/1612/88 1021/1613/140 -f 1036/1618/15 1041/1626/20 1043/1619/97 -f 1039/1621/21 1038/1634/12 1046/1622/95 -f 1037/1624/26 1036/1618/15 1048/1620/96 -f 1041/1626/20 1035/1632/13 1049/1627/100 -f 1040/1628/16 1039/1621/21 1045/1623/94 -f 1042/1630/27 1040/1628/16 1044/1629/99 -f 1035/1632/13 1042/1730/27 1028/1633/73 -f 1038/1634/12 1037/1624/26 1047/1625/98 -f 1047/1625/98 1048/1648/96 1051/1643/104 -f 1045/1645/94 1046/1650/95 1053/1646/103 -f 1048/1648/96 1043/1651/97 1056/1649/105 -f 1046/1650/95 1047/1625/98 1052/1644/69 -f 1055/1636/102 1044/1635/99 1045/1645/94 -f 1043/1651/97 1049/1639/100 1050/1641/101 -f 1027/1652/93 1056/1649/105 1050/1641/101 -f 1054/1647/106 1053/1646/103 1031/1653/89 -f 1032/1614/92 1052/1644/69 1051/1643/104 -f 1051/1643/104 1056/1649/105 1027/1652/93 -f 1029/1638/88 1055/1636/102 1054/1647/106 -f 1053/1646/103 1052/1644/69 1032/1614/92 +f 587/1019/64 588/1042/63 604/1034/74 +f 586/1036/65 602/1044/78 601/1037/75 +f 585/1039/66 601/1694/75 607/1040/76 +f 588/1042/63 589/1045/72 605/1043/77 +f 586/1036/65 587/1019/64 603/1035/13 +f 589/1045/72 590/1054/70 606/1046/79 +f 601/1037/75 602/1044/78 609/1047/80 +f 607/1040/76 601/1694/75 608/1049/81 +f 605/1043/77 612/1053/84 611/1051/83 +f 602/1044/78 603/1035/13 610/1052/85 +f 606/1046/79 613/1056/86 612/1053/84 +f 604/1034/74 611/1051/83 610/1052/85 +f 614/1057/82 622/1061/88 615/1058/87 +f 608/1060/81 616/1695/73 622/1061/88 +f 591/1059/12 615/1058/87 621/1062/89 +f 612/1064/84 620/1069/92 619/1065/90 +f 610/1052/85 618/1070/93 617/1067/91 +f 613/1063/86 621/1062/89 620/1069/92 +f 611/1066/83 619/1065/90 618/1070/93 +f 609/1068/80 617/1067/91 616/1071/73 +f 626/1073/10 625/1084/69 633/1074/70 +f 624/1076/26 623/1085/67 631/1077/68 +f 629/1079/73 628/1089/27 636/1080/64 +f 627/1082/71 626/1073/10 634/1075/72 +f 625/1084/69 624/1076/26 632/1078/12 +f 623/1085/67 630/1696/9 638/1086/66 +f 630/1087/9 629/1079/73 637/1081/65 +f 628/1089/27 627/1082/71 635/1083/63 +f 647/1090/94 645/1099/21 640/1091/12 +f 650/1093/96 642/1106/15 643/1094/20 +f 652/1092/95 640/1091/12 641/1096/26 +f 653/1098/99 639/1105/16 645/1099/21 +f 649/1095/97 643/1094/20 644/1100/13 +f 648/1101/100 644/1100/13 646/1102/27 +f 616/1104/73 646/1697/27 639/1105/16 +f 651/1097/98 641/1096/26 642/1106/15 +f 655/1115/103 652/1121/95 651/1097/98 +f 658/1117/105 657/1122/104 650/1118/96 +f 660/1120/106 647/1123/94 652/1121/95 +f 657/1122/104 656/1116/69 651/1097/98 +f 659/1109/101 658/1117/105 649/1119/97 +f 654/1112/102 653/1111/99 647/1123/94 +f 622/1114/88 654/1112/102 660/1120/106 +f 619/1125/90 657/1122/104 658/1117/105 +f 620/1069/92 621/1127/89 655/1115/103 +f 615/1124/87 660/1120/106 655/1115/103 +f 618/1126/93 658/1117/105 659/1109/101 +f 619/1125/90 620/1069/92 656/1116/69 +f 636/1080/64 635/1136/63 664/1128/74 +f 637/1130/65 662/1138/78 661/1131/75 +f 638/1133/66 661/1698/75 667/1134/76 +f 635/1136/63 634/1139/72 665/1137/77 +f 636/1080/64 663/1129/13 662/1138/78 +f 634/1139/72 633/1148/70 666/1140/79 +f 661/1131/75 662/1138/78 669/1141/80 +f 667/1134/76 661/1698/75 668/1143/81 +f 665/1137/77 672/1147/84 671/1145/83 +f 662/1138/78 663/1129/13 670/1146/85 +f 666/1140/79 673/1150/86 672/1147/84 +f 664/1128/74 671/1145/83 670/1146/85 +f 674/1151/82 682/1155/88 675/1152/87 +f 668/1154/81 676/1699/73 682/1155/88 +f 632/1153/12 675/1152/87 681/1156/89 +f 672/1158/84 680/1163/92 679/1159/90 +f 670/1146/85 678/1164/93 677/1161/91 +f 673/1157/86 681/1156/89 680/1163/92 +f 671/1160/83 679/1159/90 678/1164/93 +f 669/1162/80 677/1161/91 676/1165/73 +f 691/1167/94 689/1176/21 684/1168/12 +f 694/1170/96 686/1183/15 687/1171/20 +f 696/1169/95 684/1168/12 685/1173/26 +f 697/1175/99 683/1182/16 689/1176/21 +f 693/1172/97 687/1171/20 688/1177/13 +f 692/1178/100 688/1177/13 690/1179/27 +f 676/1181/73 690/1700/27 683/1182/16 +f 695/1174/98 685/1173/26 686/1183/15 +f 699/1192/103 696/1198/95 695/1174/98 +f 701/1194/104 694/1199/96 693/1195/97 +f 704/1197/106 691/1200/94 696/1198/95 +f 700/1193/69 695/1174/98 694/1199/96 +f 703/1186/101 702/1196/105 693/1195/97 +f 698/1189/102 697/1188/99 691/1200/94 +f 675/1201/87 682/1191/88 698/1189/102 +f 679/1202/90 701/1194/104 702/1196/105 +f 680/1163/92 681/1204/89 699/1192/103 +f 675/1201/87 704/1197/106 699/1192/103 +f 678/1203/93 702/1196/105 703/1186/101 +f 680/1163/92 700/1193/69 701/1194/104 +f 720/1205/13 714/1221/27 705/1206/27 +f 718/1208/15 719/1217/20 711/1209/20 +f 716/1211/12 717/1701/26 709/1212/26 +f 713/1214/16 715/1220/21 707/1215/21 +f 719/1217/20 720/1205/13 712/1207/13 +f 717/1218/26 718/1208/15 710/1210/15 +f 715/1220/21 716/1211/12 708/1213/12 +f 714/1221/27 713/1214/16 706/1216/16 +f 733/1222/107 734/1702/108 462/819/108 +f 734/1223/108 735/1703/109 463/821/109 +f 735/1224/109 736/1704/147 464/824/110 +f 464/824/110 736/1705/147 721/1225/111 +f 721/1226/111 722/1706/114 450/826/113 +f 722/1227/114 723/1707/115 451/828/115 +f 451/828/115 723/1708/115 724/1228/116 +f 452/814/116 724/1709/116 725/1229/117 +f 453/816/117 725/1710/117 726/1230/118 +f 454/818/119 726/1711/118 727/1231/120 +f 455/820/120 727/1712/120 728/1232/121 +f 728/1233/121 729/1713/122 457/1234/122 +f 457/825/122 729/1714/122 730/1235/123 +f 730/1236/123 731/1715/124 459/813/124 +f 731/1237/124 732/1716/126 460/815/125 +f 732/1238/126 733/1717/107 461/817/107 +f 784/1239/13 778/1255/27 769/1240/27 +f 782/1242/15 783/1251/20 775/1243/20 +f 780/1245/12 781/1718/26 773/1246/26 +f 777/1248/16 779/1254/21 771/1249/21 +f 783/1251/20 784/1239/13 776/1241/13 +f 781/1252/26 782/1242/15 774/1244/15 +f 779/1254/21 780/1245/12 772/1247/12 +f 778/1255/27 777/1248/16 770/1250/16 +f 800/1256/13 794/1272/27 785/1257/27 +f 798/1259/15 799/1268/20 791/1260/20 +f 796/1262/12 797/1719/26 789/1263/26 +f 793/1265/16 795/1271/21 787/1266/21 +f 799/1268/20 800/1256/13 792/1258/13 +f 797/1269/26 798/1259/15 790/1261/15 +f 795/1271/21 796/1262/12 788/1264/12 +f 794/1272/27 793/1265/16 786/1267/16 +f 816/1273/13 810/1289/27 801/1274/27 +f 814/1276/15 815/1285/20 807/1277/20 +f 812/1279/12 813/1720/26 805/1280/26 +f 809/1282/16 811/1288/21 803/1283/21 +f 815/1285/20 816/1273/13 808/1275/13 +f 813/1286/26 814/1276/15 806/1278/15 +f 811/1288/21 812/1279/12 804/1281/12 +f 810/1289/27 809/1282/16 802/1284/16 +f 820/1290/127 828/1303/71 827/1291/27 +f 818/1293/129 826/1304/73 825/1294/9 +f 817/1296/130 825/1721/9 832/1297/67 +f 823/1299/15 831/1305/26 830/1300/69 +f 821/1302/133 829/1306/10 828/1303/71 +f 819/1292/128 827/1291/27 826/1304/73 +f 824/1298/131 832/1297/67 831/1305/26 +f 822/1301/132 830/1300/69 829/1306/10 +f 819/1292/128 835/1324/16 836/1307/134 +f 833/1309/135 834/1317/138 818/1310/129 +f 839/1312/136 833/1322/135 817/1313/130 +f 820/1308/127 836/1307/134 837/1315/137 +f 834/1317/138 835/1324/16 819/1292/128 +f 821/1316/133 837/1315/137 838/1318/139 +f 833/1309/135 840/1722/141 841/1320/140 +f 839/1312/136 846/1329/146 840/1321/141 +f 843/1323/142 844/1325/143 837/1315/137 +f 841/1320/140 842/1326/144 835/1324/16 +f 844/1325/143 845/1328/145 838/1318/139 +f 842/1326/144 843/1323/142 836/1307/134 +f 847/1330/93 854/1333/91 846/1331/146 +f 854/1333/91 848/1723/73 840/1334/141 +f 853/1335/90 847/1330/93 823/1332/15 +f 851/1337/89 852/1342/92 844/1338/143 +f 849/1340/88 850/1343/87 842/1326/144 +f 852/1342/92 853/1335/90 845/1336/145 +f 850/1343/87 851/1337/89 843/1339/142 +f 848/1344/73 849/1340/88 841/1341/140 +f 865/1346/132 857/1357/69 858/1347/10 +f 863/1349/131 855/1359/67 856/1350/26 +f 868/1352/128 860/1362/27 861/1353/73 +f 866/1348/133 858/1347/10 859/1355/71 +f 864/1351/15 856/1350/26 857/1357/69 +f 870/1358/130 862/1724/9 855/1359/67 +f 869/1354/129 861/1353/73 862/1360/9 +f 867/1356/127 859/1355/71 860/1362/27 +f 872/1363/15 877/1371/20 879/1364/97 +f 875/1366/21 874/1379/12 882/1367/95 +f 873/1369/26 872/1363/15 884/1365/96 +f 877/1371/20 871/1377/13 885/1372/100 +f 876/1373/16 875/1366/21 881/1368/94 +f 878/1375/27 876/1373/16 880/1374/99 +f 871/1377/13 878/1725/27 848/1378/73 +f 874/1379/12 873/1369/26 883/1370/98 +f 883/1370/98 884/1393/96 887/1388/104 +f 890/1390/106 881/1395/94 882/1391/95 +f 884/1393/96 879/1396/97 892/1394/105 +f 889/1392/103 882/1391/95 883/1370/98 +f 891/1381/102 880/1380/99 881/1395/94 +f 879/1396/97 885/1384/100 886/1386/101 +f 892/1394/105 886/1386/101 854/1387/91 +f 850/1398/87 890/1390/106 889/1392/103 +f 888/1389/69 887/1388/104 853/1400/90 +f 887/1388/104 892/1394/105 847/1397/93 +f 849/1383/88 891/1381/102 890/1390/106 +f 889/1392/103 888/1389/69 852/1342/92 +f 895/1401/16 896/1418/134 867/1402/127 +f 870/1403/130 893/1413/135 894/1404/138 +f 899/1406/136 893/1416/135 870/1407/130 +f 867/1402/127 896/1418/134 897/1409/137 +f 894/1404/138 895/1401/16 868/1352/128 +f 866/1410/133 897/1409/137 898/1411/139 +f 893/1413/135 900/1726/141 901/1414/140 +f 899/1406/136 906/1423/146 900/1415/141 +f 903/1417/142 904/1420/143 897/1409/137 +f 894/1404/138 901/1414/140 902/1419/144 +f 904/1420/143 905/1422/145 898/1411/139 +f 902/1419/144 903/1417/142 896/1418/134 +f 907/1424/93 914/1427/91 906/1425/146 +f 914/1427/91 908/1727/73 900/1428/141 +f 913/1429/90 907/1424/93 864/1426/15 +f 911/1431/89 912/1436/92 904/1432/143 +f 909/1434/88 910/1437/87 902/1419/144 +f 912/1436/92 913/1429/90 905/1430/145 +f 910/1437/87 911/1431/89 903/1433/142 +f 908/1438/73 909/1434/88 901/1435/140 +f 916/1440/15 921/1448/20 923/1441/97 +f 919/1443/21 918/1456/12 926/1444/95 +f 917/1446/26 916/1440/15 928/1442/96 +f 921/1448/20 915/1454/13 929/1449/100 +f 920/1450/16 919/1443/21 925/1445/94 +f 922/1452/27 920/1450/16 924/1451/99 +f 915/1454/13 922/1728/27 908/1455/73 +f 918/1456/12 917/1446/26 927/1447/98 +f 927/1447/98 928/1729/96 931/1465/104 +f 925/1467/94 926/1730/95 933/1468/103 +f 931/1465/104 928/1729/96 923/1470/97 +f 933/1468/103 926/1730/95 927/1447/98 +f 935/1458/102 924/1457/99 925/1467/94 +f 923/1470/97 929/1461/100 930/1463/101 +f 936/1471/105 930/1463/101 914/1464/91 +f 910/1473/87 934/1469/106 933/1468/103 +f 912/1436/92 932/1466/69 931/1465/104 +f 931/1465/104 936/1471/105 907/1472/93 +f 909/1460/88 935/1458/102 934/1469/106 +f 933/1468/103 932/1466/69 912/1436/92 +f 940/1476/127 948/1489/71 947/1477/27 +f 938/1479/129 946/1490/73 945/1480/9 +f 937/1482/130 945/1731/9 952/1483/67 +f 943/1485/15 951/1491/26 950/1486/69 +f 941/1488/133 949/1492/10 948/1489/71 +f 939/1478/128 947/1477/27 946/1490/73 +f 944/1484/131 952/1483/67 951/1491/26 +f 942/1487/132 950/1486/69 949/1492/10 +f 939/1478/128 955/1503/16 956/1493/134 +f 953/1495/135 954/1507/138 938/1496/129 +f 959/1498/136 953/1509/135 937/1499/130 +f 940/1494/127 956/1493/134 957/1501/137 +f 938/1496/129 954/1507/138 955/1503/16 +f 941/1502/133 957/1501/137 958/1504/139 +f 953/1495/135 960/1732/141 961/1506/140 +f 959/1498/136 966/1515/146 960/1508/141 +f 963/1510/142 964/1512/143 957/1501/137 +f 954/1507/138 961/1506/140 962/1511/144 +f 964/1512/143 965/1514/145 958/1504/139 +f 962/1511/144 963/1510/142 956/1493/134 +f 967/1516/93 974/1519/91 966/1517/146 +f 974/1519/91 968/1733/73 960/1520/141 +f 973/1521/90 967/1516/93 943/1518/15 +f 971/1523/89 972/1528/92 964/1524/143 +f 969/1526/88 970/1529/87 962/1511/144 +f 972/1528/92 973/1521/90 965/1522/145 +f 970/1529/87 971/1523/89 963/1525/142 +f 968/1530/73 969/1526/88 961/1527/140 +f 985/1532/132 977/1543/69 978/1533/10 +f 983/1535/131 975/1545/67 976/1536/26 +f 988/1538/128 980/1548/27 981/1539/73 +f 986/1534/133 978/1533/10 979/1541/71 +f 984/1537/15 976/1536/26 977/1543/69 +f 990/1544/130 982/1734/9 975/1545/67 +f 989/1540/129 981/1539/73 982/1546/9 +f 987/1542/127 979/1541/71 980/1548/27 +f 992/1549/15 997/1557/20 999/1550/97 +f 995/1552/21 994/1565/12 1002/1553/95 +f 993/1555/26 992/1549/15 1004/1551/96 +f 997/1557/20 991/1563/13 1005/1558/100 +f 996/1559/16 995/1552/21 1001/1554/94 +f 998/1561/27 996/1559/16 1000/1560/99 +f 991/1563/13 998/1735/27 968/1564/73 +f 994/1565/12 993/1555/26 1003/1556/98 +f 1003/1556/98 1004/1579/96 1007/1574/104 +f 1010/1576/106 1001/1581/94 1002/1577/95 +f 1004/1579/96 999/1582/97 1012/1580/105 +f 1009/1578/103 1002/1577/95 1003/1556/98 +f 1011/1567/102 1000/1566/99 1001/1581/94 +f 999/1582/97 1005/1570/100 1006/1572/101 +f 1012/1580/105 1006/1572/101 974/1573/91 +f 1010/1576/106 1009/1578/103 971/1584/89 +f 972/1528/92 1008/1575/69 1007/1574/104 +f 1007/1574/104 1012/1580/105 967/1583/93 +f 969/1569/88 1011/1567/102 1010/1576/106 +f 971/1584/89 1009/1578/103 1008/1575/69 +f 988/1538/128 1015/1605/16 1016/1587/134 +f 1013/1589/135 1014/1597/138 989/1590/129 +f 1019/1592/136 1013/1602/135 990/1593/130 +f 987/1588/127 1016/1587/134 1017/1595/137 +f 1014/1597/138 1015/1605/16 988/1538/128 +f 986/1596/133 1017/1595/137 1018/1598/139 +f 1013/1589/135 1020/1736/141 1021/1600/140 +f 1019/1592/136 1026/1609/146 1020/1601/141 +f 1023/1603/142 1024/1606/143 1017/1595/137 +f 1014/1597/138 1021/1600/140 1022/1604/144 +f 1024/1606/143 1025/1608/145 1018/1598/139 +f 1022/1604/144 1023/1603/142 1016/1587/134 +f 1027/1610/93 1034/1613/91 1026/1611/146 +f 1034/1613/91 1028/1737/73 1020/1614/141 +f 1033/1615/90 1027/1610/93 984/1612/15 +f 1031/1617/89 1032/1622/92 1024/1618/143 +f 1029/1620/88 1030/1623/87 1022/1604/144 +f 1032/1622/92 1033/1615/90 1025/1616/145 +f 1030/1623/87 1031/1617/89 1023/1619/142 +f 1028/1624/73 1029/1620/88 1021/1621/140 +f 1036/1626/15 1041/1634/20 1043/1627/97 +f 1039/1629/21 1038/1642/12 1046/1630/95 +f 1037/1632/26 1036/1626/15 1048/1628/96 +f 1041/1634/20 1035/1640/13 1049/1635/100 +f 1040/1636/16 1039/1629/21 1045/1631/94 +f 1042/1638/27 1040/1636/16 1044/1637/99 +f 1035/1640/13 1042/1738/27 1028/1641/73 +f 1038/1642/12 1037/1632/26 1047/1633/98 +f 1047/1633/98 1048/1656/96 1051/1651/104 +f 1045/1653/94 1046/1658/95 1053/1654/103 +f 1048/1656/96 1043/1659/97 1056/1657/105 +f 1046/1658/95 1047/1633/98 1052/1652/69 +f 1055/1644/102 1044/1643/99 1045/1653/94 +f 1043/1659/97 1049/1647/100 1050/1649/101 +f 1027/1660/93 1056/1657/105 1050/1649/101 +f 1054/1655/106 1053/1654/103 1031/1661/89 +f 1032/1622/92 1052/1652/69 1051/1651/104 +f 1051/1651/104 1056/1657/105 1027/1660/93 +f 1029/1646/88 1055/1644/102 1054/1655/106 +f 1053/1654/103 1052/1652/69 1032/1622/92 o SuspensionBackCenter v 0.000000 4.000000 -7.750007 v -0.191342 3.961939 -7.750007 @@ -4707,6 +4715,38 @@ v 0.000000 3.125000 -9.500008 v 0.265164 3.234835 -9.500008 v 0.375000 3.500000 -9.500008 v 0.265164 3.765165 -9.500008 +v 0.000000 4.000000 -7.750007 +v -0.191342 3.961939 -7.750007 +v -0.353554 3.853553 -7.750007 +v -0.461940 3.691341 -7.750007 +v -0.500000 3.500000 -7.750008 +v -0.461940 3.308658 -7.750008 +v -0.353554 3.146446 -7.750008 +v -0.191342 3.038060 -7.750008 +v 0.000000 3.000000 -7.750008 +v 0.191341 3.038060 -7.750008 +v 0.353553 3.146446 -7.750008 +v 0.461940 3.308658 -7.750008 +v 0.500000 3.500000 -7.750008 +v 0.461940 3.691341 -7.750007 +v 0.353553 3.853553 -7.750007 +v 0.191341 3.961939 -7.750007 +v 0.000000 4.000000 -9.500008 +v -0.191342 3.961939 -9.500008 +v -0.353554 3.853553 -9.500008 +v -0.461940 3.691341 -9.500008 +v -0.500000 3.500000 -9.500008 +v -0.461940 3.308658 -9.500008 +v -0.353554 3.146446 -9.500008 +v -0.191342 3.038060 -9.500008 +v 0.000000 3.000000 -9.500008 +v 0.191341 3.038060 -9.500008 +v 0.353553 3.146446 -9.500008 +v 0.461940 3.308658 -9.500008 +v 0.500000 3.500000 -9.500008 +v 0.461940 3.691341 -9.500008 +v 0.353553 3.853553 -9.500008 +v 0.191341 3.961939 -9.500008 vt 0.851119 0.458140 vt 0.827883 0.465116 vt 0.827022 0.458140 @@ -4756,9 +4796,43 @@ vt 0.838210 0.502326 vt 0.814114 0.502326 vt 0.838210 0.493023 vt 0.838210 0.474419 +vt 0.827883 0.465116 +vt 0.851119 0.458140 +vt 0.827022 0.458140 +vt 0.821859 0.416279 +vt 0.845095 0.409302 +vt 0.820998 0.409302 +vt 0.844234 0.402326 +vt 0.820138 0.402326 +vt 0.814974 0.360465 +vt 0.838210 0.353488 +vt 0.814114 0.353488 +vt 0.822719 0.423256 +vt 0.845955 0.416279 +vt 0.815835 0.367442 +vt 0.839071 0.360465 +vt 0.823580 0.430233 +vt 0.846816 0.423256 +vt 0.816695 0.374419 +vt 0.839931 0.367442 +vt 0.824441 0.437209 +vt 0.847676 0.430233 +vt 0.817556 0.381395 +vt 0.840792 0.374419 +vt 0.825301 0.444186 +vt 0.848537 0.437209 +vt 0.842513 0.388372 +vt 0.841652 0.381395 +vt 0.826162 0.451163 +vt 0.849398 0.444186 +vt 0.819277 0.395349 +vt 0.818417 0.388372 +vt 0.850258 0.451163 +vt 0.843373 0.395349 vt 0.851979 0.465116 vt 0.841652 0.381395 vt 0.838210 0.539535 +vt 0.851979 0.465116 vn -0.3827 -0.9239 0.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 1.0000 0.0000 @@ -4776,54 +4850,86 @@ vn 0.9239 0.3827 0.0000 vn -0.7071 -0.7071 0.0000 vn 0.7071 0.7071 0.0000 s 1 -f 1080/1731/148 1065/1732/149 1064/1733/148 -f 1073/1734/150 1058/1735/151 1057/1736/150 -f 1088/1737/152 1057/1736/150 1072/1738/152 -f 1081/1739/149 1066/1740/153 1065/1741/149 -f 1074/1742/151 1059/1743/154 1058/1735/151 -f 1082/1744/153 1067/1745/155 1066/1740/153 -f 1075/1746/154 1060/1747/156 1059/1743/154 -f 1083/1748/155 1068/1749/157 1067/1745/155 -f 1076/1750/156 1061/1751/158 1060/1747/156 -f 1084/1752/157 1069/1753/159 1068/1749/157 -f 1077/1754/158 1062/1755/160 1061/1751/158 -f 1069/1753/159 1086/1756/161 1070/1757/161 -f 1078/1758/160 1063/1759/162 1062/1755/160 -f 1086/1756/161 1071/1760/163 1070/1757/161 -f 1079/1761/162 1064/1733/148 1063/1759/162 -f 1087/1762/163 1072/1738/152 1071/1760/163 -f 1100/1763/162 1093/1764/149 1092/1765/162 -f 1098/1766/154 1091/1767/158 1090/1768/154 -f 1103/1769/159 1096/1770/163 1095/1771/159 -f 1101/1772/149 1094/1773/155 1093/1774/149 -f 1099/1775/158 1092/1765/162 1091/1767/158 -f 1097/1776/150 1090/1768/154 1089/1777/150 -f 1104/1778/163 1089/1777/150 1096/1770/163 -f 1102/1779/155 1095/1771/159 1094/1773/155 -f 1080/1731/148 1081/1780/149 1065/1732/149 -f 1073/1734/150 1074/1742/151 1058/1735/151 -f 1088/1737/152 1073/1734/150 1057/1736/150 -f 1081/1739/149 1082/1744/153 1066/1740/153 -f 1074/1742/151 1075/1746/154 1059/1743/154 -f 1082/1744/153 1083/1748/155 1067/1745/155 -f 1075/1746/154 1076/1750/156 1060/1747/156 -f 1083/1748/155 1084/1752/157 1068/1749/157 -f 1076/1750/156 1077/1754/158 1061/1751/158 -f 1084/1752/157 1085/1781/159 1069/1753/159 -f 1077/1754/158 1078/1758/160 1062/1755/160 -f 1069/1753/159 1085/1781/159 1086/1756/161 -f 1078/1758/160 1079/1761/162 1063/1759/162 -f 1086/1756/161 1087/1762/163 1071/1760/163 -f 1079/1761/162 1080/1731/148 1064/1733/148 -f 1087/1762/163 1088/1737/152 1072/1738/152 -f 1100/1763/162 1101/1782/149 1093/1764/149 -f 1098/1766/154 1099/1775/158 1091/1767/158 -f 1103/1769/159 1104/1778/163 1096/1770/163 -f 1101/1772/149 1102/1779/155 1094/1773/155 -f 1099/1775/158 1100/1763/162 1092/1765/162 -f 1097/1776/150 1098/1766/154 1090/1768/154 -f 1104/1778/163 1097/1776/150 1089/1777/150 -f 1102/1779/155 1103/1769/159 1095/1771/159 +f 1080/1739/148 1065/1740/149 1064/1741/148 +f 1073/1742/150 1058/1743/151 1057/1744/150 +f 1088/1745/152 1057/1744/150 1072/1746/152 +f 1081/1747/149 1066/1748/153 1065/1749/149 +f 1074/1750/151 1059/1751/154 1058/1743/151 +f 1082/1752/153 1067/1753/155 1066/1748/153 +f 1075/1754/154 1060/1755/156 1059/1751/154 +f 1083/1756/155 1068/1757/157 1067/1753/155 +f 1076/1758/156 1061/1759/158 1060/1755/156 +f 1084/1760/157 1069/1761/159 1068/1757/157 +f 1077/1762/158 1062/1763/160 1061/1759/158 +f 1069/1761/159 1086/1764/161 1070/1765/161 +f 1078/1766/160 1063/1767/162 1062/1763/160 +f 1086/1764/161 1071/1768/163 1070/1765/161 +f 1079/1769/162 1064/1741/148 1063/1767/162 +f 1087/1770/163 1072/1746/152 1071/1768/163 +f 1100/1771/162 1093/1772/149 1092/1773/162 +f 1098/1774/154 1091/1775/158 1090/1776/154 +f 1103/1777/159 1096/1778/163 1095/1779/159 +f 1101/1780/149 1094/1781/155 1093/1782/149 +f 1099/1783/158 1092/1773/162 1091/1775/158 +f 1097/1784/150 1090/1776/154 1089/1785/150 +f 1104/1786/163 1089/1785/150 1096/1778/163 +f 1102/1787/155 1095/1779/159 1094/1781/155 +f 1113/1788/150 1128/1789/152 1112/1790/152 +f 1106/1791/153 1121/1792/149 1105/1793/149 +f 1105/1793/149 1136/1794/148 1120/1795/148 +f 1114/1796/151 1129/1797/150 1113/1798/150 +f 1107/1799/155 1122/1800/153 1106/1791/153 +f 1115/1801/154 1130/1802/151 1114/1796/151 +f 1108/1803/157 1123/1804/155 1107/1799/155 +f 1116/1805/156 1131/1806/154 1115/1801/154 +f 1109/1807/159 1124/1808/157 1108/1803/157 +f 1117/1809/158 1132/1810/156 1116/1805/156 +f 1110/1811/161 1125/1812/159 1109/1807/159 +f 1117/1809/158 1134/1813/160 1133/1814/158 +f 1111/1815/163 1126/1816/161 1110/1811/161 +f 1119/1817/162 1134/1813/160 1118/1818/160 +f 1112/1790/152 1127/1819/163 1111/1815/163 +f 1120/1795/148 1135/1820/162 1119/1817/162 +f 1080/1739/148 1081/1821/149 1065/1740/149 +f 1073/1742/150 1074/1750/151 1058/1743/151 +f 1088/1745/152 1073/1742/150 1057/1744/150 +f 1081/1747/149 1082/1752/153 1066/1748/153 +f 1074/1750/151 1075/1754/154 1059/1751/154 +f 1082/1752/153 1083/1756/155 1067/1753/155 +f 1075/1754/154 1076/1758/156 1060/1755/156 +f 1083/1756/155 1084/1760/157 1068/1757/157 +f 1076/1758/156 1077/1762/158 1061/1759/158 +f 1084/1760/157 1085/1822/159 1069/1761/159 +f 1077/1762/158 1078/1766/160 1062/1763/160 +f 1069/1761/159 1085/1822/159 1086/1764/161 +f 1078/1766/160 1079/1769/162 1063/1767/162 +f 1086/1764/161 1087/1770/163 1071/1768/163 +f 1079/1769/162 1080/1739/148 1064/1741/148 +f 1087/1770/163 1088/1745/152 1072/1746/152 +f 1100/1771/162 1101/1823/149 1093/1772/149 +f 1098/1774/154 1099/1783/158 1091/1775/158 +f 1103/1777/159 1104/1786/163 1096/1778/163 +f 1101/1780/149 1102/1787/155 1094/1781/155 +f 1099/1783/158 1100/1771/162 1092/1773/162 +f 1097/1784/150 1098/1774/154 1090/1776/154 +f 1104/1786/163 1097/1784/150 1089/1785/150 +f 1102/1787/155 1103/1777/159 1095/1779/159 +f 1113/1788/150 1129/1824/150 1128/1789/152 +f 1106/1791/153 1122/1800/153 1121/1792/149 +f 1105/1793/149 1121/1792/149 1136/1794/148 +f 1114/1796/151 1130/1802/151 1129/1797/150 +f 1107/1799/155 1123/1804/155 1122/1800/153 +f 1115/1801/154 1131/1806/154 1130/1802/151 +f 1108/1803/157 1124/1808/157 1123/1804/155 +f 1116/1805/156 1132/1810/156 1131/1806/154 +f 1109/1807/159 1125/1812/159 1124/1808/157 +f 1117/1809/158 1133/1814/158 1132/1810/156 +f 1110/1811/161 1126/1816/161 1125/1812/159 +f 1117/1809/158 1118/1818/160 1134/1813/160 +f 1111/1815/163 1127/1819/163 1126/1816/161 +f 1119/1817/162 1135/1820/162 1134/1813/160 +f 1112/1790/152 1128/1789/152 1127/1819/163 +f 1120/1795/148 1136/1794/148 1135/1820/162 o SuspensionBackOuter v 1.750000 5.499998 -7.750008 v 1.573223 5.426775 -7.750008 @@ -4953,6 +5059,70 @@ v 1.750000 1.374998 -9.000008 v 2.015165 1.484833 -9.000008 v 2.125000 1.749998 -9.000008 v 2.015165 2.015163 -9.000008 +v 1.750000 5.624999 -7.750007 +v 1.484835 5.515163 -7.750007 +v 1.375000 5.249998 -7.750007 +v 1.484835 4.984833 -7.750007 +v 1.750000 4.874998 -7.750007 +v 2.015165 4.984833 -7.750007 +v 2.125000 5.249998 -7.750007 +v 2.015165 5.515163 -7.750007 +v 1.750000 5.624999 -9.000008 +v 1.484835 5.515163 -9.000008 +v 1.375000 5.249998 -9.000008 +v 1.484835 4.984833 -9.000008 +v 1.750000 4.874998 -9.000008 +v 2.015165 4.984833 -9.000008 +v 2.125000 5.249998 -9.000008 +v 2.015165 5.515163 -9.000008 +v -1.750000 5.624999 -7.750007 +v -2.015165 5.515163 -7.750007 +v -2.125000 5.249998 -7.750007 +v -2.015165 4.984833 -7.750007 +v -1.750000 4.874998 -7.750007 +v -1.484835 4.984833 -7.750007 +v -1.375000 5.249998 -7.750007 +v -1.484835 5.515163 -7.750007 +v -1.750000 5.624999 -9.000008 +v -2.015165 5.515163 -9.000008 +v -2.125000 5.249998 -9.000008 +v -2.015165 4.984833 -9.000008 +v -1.750000 4.874998 -9.000008 +v -1.484835 4.984833 -9.000008 +v -1.375000 5.249998 -9.000008 +v -1.484835 5.515163 -9.000008 +v -1.750000 2.124999 -7.750007 +v -2.015165 2.015163 -7.750007 +v -2.125000 1.749998 -7.750007 +v -2.015165 1.484833 -7.750007 +v -1.750000 1.374998 -7.750007 +v -1.484835 1.484833 -7.750007 +v -1.375000 1.749998 -7.750007 +v -1.484835 2.015163 -7.750007 +v -1.750000 2.124999 -9.000008 +v -2.015165 2.015163 -9.000008 +v -2.125000 1.749998 -9.000008 +v -2.015165 1.484833 -9.000008 +v -1.750000 1.374998 -9.000008 +v -1.484835 1.484833 -9.000008 +v -1.375000 1.749998 -9.000008 +v -1.484835 2.015163 -9.000008 +v 1.750000 2.124999 -7.750007 +v 1.484835 2.015163 -7.750007 +v 1.375000 1.749998 -7.750007 +v 1.484835 1.484833 -7.750007 +v 1.750000 1.374998 -7.750007 +v 2.015165 1.484833 -7.750007 +v 2.125000 1.749998 -7.750007 +v 2.015165 2.015163 -7.750007 +v 1.750000 2.124999 -9.000008 +v 1.484835 2.015163 -9.000008 +v 1.375000 1.749998 -9.000008 +v 1.484835 1.484833 -9.000008 +v 1.750000 1.374998 -9.000008 +v 2.015165 1.484833 -9.000008 +v 2.125000 1.749998 -9.000008 +v 2.015165 2.015163 -9.000008 vt 0.793460 0.825581 vt 0.776248 0.832558 vt 0.776248 0.825581 @@ -5089,6 +5259,74 @@ vt 0.799484 0.781395 vt 0.783133 0.790698 vt 0.797762 0.762791 vt 0.795181 0.734884 +vt 0.777108 0.725581 +vt 0.793460 0.716279 +vt 0.776248 0.716279 +vt 0.782272 0.781395 +vt 0.798623 0.772093 +vt 0.781411 0.772093 +vt 0.780551 0.762791 +vt 0.796902 0.753488 +vt 0.779690 0.753488 +vt 0.796041 0.744186 +vt 0.778830 0.744186 +vt 0.777969 0.734884 +vt 0.794320 0.725581 +vt 0.783133 0.790698 +vt 0.799484 0.781395 +vt 0.797762 0.762791 +vt 0.795181 0.734884 +vt 0.777108 0.725581 +vt 0.793460 0.716279 +vt 0.776248 0.716279 +vt 0.782272 0.781395 +vt 0.798623 0.772093 +vt 0.781411 0.772093 +vt 0.780551 0.762791 +vt 0.796902 0.753488 +vt 0.779690 0.753488 +vt 0.796041 0.744186 +vt 0.778830 0.744186 +vt 0.777969 0.734884 +vt 0.794320 0.725581 +vt 0.783133 0.790698 +vt 0.799484 0.781395 +vt 0.797762 0.762791 +vt 0.795181 0.734884 +vt 0.777108 0.725581 +vt 0.793460 0.716279 +vt 0.776248 0.716279 +vt 0.782272 0.781395 +vt 0.798623 0.772093 +vt 0.781411 0.772093 +vt 0.780551 0.762791 +vt 0.796902 0.753488 +vt 0.779690 0.753488 +vt 0.796041 0.744186 +vt 0.778830 0.744186 +vt 0.777969 0.734884 +vt 0.794320 0.725581 +vt 0.783133 0.790698 +vt 0.799484 0.781395 +vt 0.797762 0.762791 +vt 0.795181 0.734884 +vt 0.777108 0.725581 +vt 0.793460 0.716279 +vt 0.776248 0.716279 +vt 0.782272 0.781395 +vt 0.798623 0.772093 +vt 0.781411 0.772093 +vt 0.780551 0.762791 +vt 0.796902 0.753488 +vt 0.779690 0.753488 +vt 0.796041 0.744186 +vt 0.778830 0.744186 +vt 0.777969 0.734884 +vt 0.794320 0.725581 +vt 0.783133 0.790698 +vt 0.799484 0.781395 +vt 0.797762 0.762791 +vt 0.795181 0.734884 vt 0.793460 0.846512 vt 0.800344 0.790698 vt 0.793460 0.846512 @@ -5097,6 +5335,10 @@ vt 0.793460 0.846512 vt 0.800344 0.790698 vt 0.793460 0.846512 vt 0.800344 0.790698 +vt 0.800344 0.790698 +vt 0.800344 0.790698 +vt 0.800344 0.790698 +vt 0.800344 0.790698 vn -0.7071 0.7071 0.0000 vn -1.0000 0.0000 0.0000 vn 1.0000 0.0000 0.0000 @@ -5106,134 +5348,198 @@ vn 0.7071 -0.7071 0.0000 vn -0.7071 -0.7071 0.0000 vn 0.0000 1.0000 0.0000 s 1 -f 1114/1783/164 1107/1784/165 1106/1785/164 -f 1119/1786/166 1112/1787/167 1111/1788/166 -f 1117/1789/168 1110/1790/169 1109/1791/168 -f 1115/1792/165 1108/1793/170 1107/1784/165 -f 1113/1794/171 1106/1785/164 1105/1795/171 -f 1120/1796/167 1105/1795/171 1112/1787/167 -f 1118/1797/169 1111/1788/166 1110/1790/169 -f 1116/1798/170 1109/1799/168 1108/1793/170 -f 1133/1800/168 1126/1801/169 1125/1802/168 -f 1131/1803/165 1124/1804/170 1123/1805/165 -f 1129/1806/171 1122/1807/164 1121/1808/171 -f 1136/1809/167 1121/1808/171 1128/1810/167 -f 1134/1811/169 1127/1812/166 1126/1801/169 -f 1132/1813/170 1125/1814/168 1124/1804/170 -f 1130/1815/164 1123/1805/165 1122/1807/164 -f 1135/1816/166 1128/1810/167 1127/1812/166 -f 1146/1817/164 1139/1818/165 1138/1819/164 -f 1151/1820/166 1144/1821/167 1143/1822/166 -f 1149/1823/168 1142/1824/169 1141/1825/168 -f 1147/1826/165 1140/1827/170 1139/1818/165 -f 1145/1828/171 1138/1819/164 1137/1829/171 -f 1152/1830/167 1137/1829/171 1144/1821/167 -f 1150/1831/169 1143/1822/166 1142/1824/169 -f 1148/1832/170 1141/1833/168 1140/1827/170 -f 1165/1834/168 1158/1835/169 1157/1836/168 -f 1163/1837/165 1156/1838/170 1155/1839/165 -f 1161/1840/171 1154/1841/164 1153/1842/171 -f 1168/1843/167 1153/1842/171 1160/1844/167 -f 1166/1845/169 1159/1846/166 1158/1835/169 -f 1164/1847/170 1157/1848/168 1156/1838/170 -f 1162/1849/164 1155/1839/165 1154/1841/164 -f 1167/1850/166 1160/1844/167 1159/1846/166 -f 1178/1851/164 1171/1852/165 1170/1853/164 -f 1183/1854/166 1176/1855/167 1175/1856/166 -f 1181/1857/168 1174/1858/169 1173/1859/168 -f 1179/1860/165 1172/1861/170 1171/1852/165 -f 1177/1862/171 1170/1853/164 1169/1863/171 -f 1184/1864/167 1169/1863/171 1176/1855/167 -f 1182/1865/169 1175/1856/166 1174/1858/169 -f 1180/1866/170 1173/1867/168 1172/1861/170 -f 1197/1868/168 1190/1869/169 1189/1870/168 -f 1195/1871/165 1188/1872/170 1187/1873/165 -f 1193/1874/171 1186/1875/164 1185/1876/171 -f 1200/1877/167 1185/1876/171 1192/1878/167 -f 1198/1879/169 1191/1880/166 1190/1869/169 -f 1196/1881/170 1189/1882/168 1188/1872/170 -f 1194/1883/164 1187/1873/165 1186/1875/164 -f 1199/1884/166 1192/1878/167 1191/1880/166 -f 1210/1885/164 1203/1886/165 1202/1887/164 -f 1215/1888/166 1208/1889/167 1207/1890/166 -f 1213/1891/168 1206/1892/169 1205/1893/168 -f 1211/1894/165 1204/1895/170 1203/1886/165 -f 1209/1896/171 1202/1887/164 1201/1897/171 -f 1216/1898/167 1201/1897/171 1208/1889/167 -f 1214/1899/169 1207/1890/166 1206/1892/169 -f 1212/1900/170 1205/1901/168 1204/1895/170 -f 1229/1902/168 1222/1903/169 1221/1904/168 -f 1227/1905/165 1220/1906/170 1219/1907/165 -f 1225/1908/171 1218/1909/164 1217/1910/171 -f 1232/1911/167 1217/1910/171 1224/1912/167 -f 1230/1913/169 1223/1914/166 1222/1903/169 -f 1228/1915/170 1221/1916/168 1220/1906/170 -f 1226/1917/164 1219/1907/165 1218/1909/164 -f 1231/1918/166 1224/1912/167 1223/1914/166 -f 1114/1783/164 1115/1792/165 1107/1784/165 -f 1119/1786/166 1120/1796/167 1112/1787/167 -f 1117/1789/168 1118/1797/169 1110/1790/169 -f 1115/1792/165 1116/1798/170 1108/1793/170 -f 1113/1794/171 1114/1783/164 1106/1785/164 -f 1120/1796/167 1113/1794/171 1105/1795/171 -f 1118/1797/169 1119/1786/166 1111/1788/166 -f 1116/1798/170 1117/1919/168 1109/1799/168 -f 1133/1800/168 1134/1811/169 1126/1801/169 -f 1131/1803/165 1132/1813/170 1124/1804/170 -f 1129/1806/171 1130/1815/164 1122/1807/164 -f 1136/1809/167 1129/1806/171 1121/1808/171 -f 1134/1811/169 1135/1816/166 1127/1812/166 -f 1132/1813/170 1133/1920/168 1125/1814/168 -f 1130/1815/164 1131/1803/165 1123/1805/165 -f 1135/1816/166 1136/1809/167 1128/1810/167 -f 1146/1817/164 1147/1826/165 1139/1818/165 -f 1151/1820/166 1152/1830/167 1144/1821/167 -f 1149/1823/168 1150/1831/169 1142/1824/169 -f 1147/1826/165 1148/1832/170 1140/1827/170 -f 1145/1828/171 1146/1817/164 1138/1819/164 -f 1152/1830/167 1145/1828/171 1137/1829/171 -f 1150/1831/169 1151/1820/166 1143/1822/166 -f 1148/1832/170 1149/1921/168 1141/1833/168 -f 1165/1834/168 1166/1845/169 1158/1835/169 -f 1163/1837/165 1164/1847/170 1156/1838/170 -f 1161/1840/171 1162/1849/164 1154/1841/164 -f 1168/1843/167 1161/1840/171 1153/1842/171 -f 1166/1845/169 1167/1850/166 1159/1846/166 -f 1164/1847/170 1165/1922/168 1157/1848/168 -f 1162/1849/164 1163/1837/165 1155/1839/165 -f 1167/1850/166 1168/1843/167 1160/1844/167 -f 1178/1851/164 1179/1860/165 1171/1852/165 -f 1183/1854/166 1184/1864/167 1176/1855/167 -f 1181/1857/168 1182/1865/169 1174/1858/169 -f 1179/1860/165 1180/1866/170 1172/1861/170 -f 1177/1862/171 1178/1851/164 1170/1853/164 -f 1184/1864/167 1177/1862/171 1169/1863/171 -f 1182/1865/169 1183/1854/166 1175/1856/166 -f 1180/1866/170 1181/1923/168 1173/1867/168 -f 1197/1868/168 1198/1879/169 1190/1869/169 -f 1195/1871/165 1196/1881/170 1188/1872/170 -f 1193/1874/171 1194/1883/164 1186/1875/164 -f 1200/1877/167 1193/1874/171 1185/1876/171 -f 1198/1879/169 1199/1884/166 1191/1880/166 -f 1196/1881/170 1197/1924/168 1189/1882/168 -f 1194/1883/164 1195/1871/165 1187/1873/165 -f 1199/1884/166 1200/1877/167 1192/1878/167 -f 1210/1885/164 1211/1894/165 1203/1886/165 -f 1215/1888/166 1216/1898/167 1208/1889/167 -f 1213/1891/168 1214/1899/169 1206/1892/169 -f 1211/1894/165 1212/1900/170 1204/1895/170 -f 1209/1896/171 1210/1885/164 1202/1887/164 -f 1216/1898/167 1209/1896/171 1201/1897/171 -f 1214/1899/169 1215/1888/166 1207/1890/166 -f 1212/1900/170 1213/1925/168 1205/1901/168 -f 1229/1902/168 1230/1913/169 1222/1903/169 -f 1227/1905/165 1228/1915/170 1220/1906/170 -f 1225/1908/171 1226/1917/164 1218/1909/164 -f 1232/1911/167 1225/1908/171 1217/1910/171 -f 1230/1913/169 1231/1918/166 1223/1914/166 -f 1228/1915/170 1229/1926/168 1221/1916/168 -f 1226/1917/164 1227/1905/165 1219/1907/165 -f 1231/1918/166 1232/1911/167 1224/1912/167 +f 1146/1825/164 1139/1826/165 1138/1827/164 +f 1151/1828/166 1144/1829/167 1143/1830/166 +f 1149/1831/168 1142/1832/169 1141/1833/168 +f 1147/1834/165 1140/1835/170 1139/1826/165 +f 1145/1836/171 1138/1827/164 1137/1837/171 +f 1152/1838/167 1137/1837/171 1144/1829/167 +f 1150/1839/169 1143/1830/166 1142/1832/169 +f 1148/1840/170 1141/1841/168 1140/1835/170 +f 1165/1842/168 1158/1843/169 1157/1844/168 +f 1163/1845/165 1156/1846/170 1155/1847/165 +f 1161/1848/171 1154/1849/164 1153/1850/171 +f 1168/1851/167 1153/1850/171 1160/1852/167 +f 1166/1853/169 1159/1854/166 1158/1843/169 +f 1164/1855/170 1157/1856/168 1156/1846/170 +f 1162/1857/164 1155/1847/165 1154/1849/164 +f 1167/1858/166 1160/1852/167 1159/1854/166 +f 1178/1859/164 1171/1860/165 1170/1861/164 +f 1183/1862/166 1176/1863/167 1175/1864/166 +f 1181/1865/168 1174/1866/169 1173/1867/168 +f 1179/1868/165 1172/1869/170 1171/1860/165 +f 1177/1870/171 1170/1861/164 1169/1871/171 +f 1184/1872/167 1169/1871/171 1176/1863/167 +f 1182/1873/169 1175/1864/166 1174/1866/169 +f 1180/1874/170 1173/1875/168 1172/1869/170 +f 1197/1876/168 1190/1877/169 1189/1878/168 +f 1195/1879/165 1188/1880/170 1187/1881/165 +f 1193/1882/171 1186/1883/164 1185/1884/171 +f 1200/1885/167 1185/1884/171 1192/1886/167 +f 1198/1887/169 1191/1888/166 1190/1877/169 +f 1196/1889/170 1189/1890/168 1188/1880/170 +f 1194/1891/164 1187/1881/165 1186/1883/164 +f 1199/1892/166 1192/1886/167 1191/1888/166 +f 1210/1893/164 1203/1894/165 1202/1895/164 +f 1215/1896/166 1208/1897/167 1207/1898/166 +f 1213/1899/168 1206/1900/169 1205/1901/168 +f 1211/1902/165 1204/1903/170 1203/1894/165 +f 1209/1904/171 1202/1895/164 1201/1905/171 +f 1216/1906/167 1201/1905/171 1208/1897/167 +f 1214/1907/169 1207/1898/166 1206/1900/169 +f 1212/1908/170 1205/1909/168 1204/1903/170 +f 1229/1910/168 1222/1911/169 1221/1912/168 +f 1227/1913/165 1220/1914/170 1219/1915/165 +f 1225/1916/171 1218/1917/164 1217/1918/171 +f 1232/1919/167 1217/1918/171 1224/1920/167 +f 1230/1921/169 1223/1922/166 1222/1911/169 +f 1228/1923/170 1221/1924/168 1220/1914/170 +f 1226/1925/164 1219/1915/165 1218/1917/164 +f 1231/1926/166 1224/1920/167 1223/1922/166 +f 1242/1927/164 1235/1928/165 1234/1929/164 +f 1247/1930/166 1240/1931/167 1239/1932/166 +f 1245/1933/168 1238/1934/169 1237/1935/168 +f 1243/1936/165 1236/1937/170 1235/1928/165 +f 1241/1938/171 1234/1929/164 1233/1939/171 +f 1248/1940/167 1233/1939/171 1240/1931/167 +f 1246/1941/169 1239/1932/166 1238/1934/169 +f 1244/1942/170 1237/1943/168 1236/1937/170 +f 1261/1944/168 1254/1945/169 1253/1946/168 +f 1259/1947/165 1252/1948/170 1251/1949/165 +f 1257/1950/171 1250/1951/164 1249/1952/171 +f 1264/1953/167 1249/1952/171 1256/1954/167 +f 1262/1955/169 1255/1956/166 1254/1945/169 +f 1260/1957/170 1253/1958/168 1252/1948/170 +f 1258/1959/164 1251/1949/165 1250/1951/164 +f 1263/1960/166 1256/1954/167 1255/1956/166 +f 1270/1961/164 1277/1962/171 1269/1963/171 +f 1268/1964/167 1275/1965/166 1267/1966/166 +f 1266/1967/169 1273/1968/168 1265/1969/168 +f 1265/1969/168 1280/1970/170 1272/1971/170 +f 1271/1972/165 1278/1973/164 1270/1961/164 +f 1269/1974/171 1276/1975/167 1268/1964/167 +f 1267/1966/166 1274/1976/169 1266/1967/169 +f 1272/1971/170 1279/1977/165 1271/1972/165 +f 1286/1978/164 1293/1979/171 1285/1980/171 +f 1284/1981/167 1291/1982/166 1283/1983/166 +f 1282/1984/169 1289/1985/168 1281/1986/168 +f 1281/1986/168 1296/1987/170 1288/1988/170 +f 1287/1989/165 1294/1990/164 1286/1978/164 +f 1285/1991/171 1292/1992/167 1284/1981/167 +f 1283/1983/166 1290/1993/169 1282/1984/169 +f 1288/1988/170 1295/1994/165 1287/1989/165 +f 1302/1995/164 1309/1996/171 1301/1997/171 +f 1300/1998/167 1307/1999/166 1299/2000/166 +f 1298/2001/169 1305/2002/168 1297/2003/168 +f 1297/2003/168 1312/2004/170 1304/2005/170 +f 1303/2006/165 1310/2007/164 1302/1995/164 +f 1301/2008/171 1308/2009/167 1300/1998/167 +f 1299/2000/166 1306/2010/169 1298/2001/169 +f 1304/2005/170 1311/2011/165 1303/2006/165 +f 1318/2012/164 1325/2013/171 1317/2014/171 +f 1316/2015/167 1323/2016/166 1315/2017/166 +f 1314/2018/169 1321/2019/168 1313/2020/168 +f 1313/2020/168 1328/2021/170 1320/2022/170 +f 1319/2023/165 1326/2024/164 1318/2012/164 +f 1317/2025/171 1324/2026/167 1316/2015/167 +f 1315/2017/166 1322/2027/169 1314/2018/169 +f 1320/2022/170 1327/2028/165 1319/2023/165 +f 1146/1825/164 1147/1834/165 1139/1826/165 +f 1151/1828/166 1152/1838/167 1144/1829/167 +f 1149/1831/168 1150/1839/169 1142/1832/169 +f 1147/1834/165 1148/1840/170 1140/1835/170 +f 1145/1836/171 1146/1825/164 1138/1827/164 +f 1152/1838/167 1145/1836/171 1137/1837/171 +f 1150/1839/169 1151/1828/166 1143/1830/166 +f 1148/1840/170 1149/2029/168 1141/1841/168 +f 1165/1842/168 1166/1853/169 1158/1843/169 +f 1163/1845/165 1164/1855/170 1156/1846/170 +f 1161/1848/171 1162/1857/164 1154/1849/164 +f 1168/1851/167 1161/1848/171 1153/1850/171 +f 1166/1853/169 1167/1858/166 1159/1854/166 +f 1164/1855/170 1165/2030/168 1157/1856/168 +f 1162/1857/164 1163/1845/165 1155/1847/165 +f 1167/1858/166 1168/1851/167 1160/1852/167 +f 1178/1859/164 1179/1868/165 1171/1860/165 +f 1183/1862/166 1184/1872/167 1176/1863/167 +f 1181/1865/168 1182/1873/169 1174/1866/169 +f 1179/1868/165 1180/1874/170 1172/1869/170 +f 1177/1870/171 1178/1859/164 1170/1861/164 +f 1184/1872/167 1177/1870/171 1169/1871/171 +f 1182/1873/169 1183/1862/166 1175/1864/166 +f 1180/1874/170 1181/2031/168 1173/1875/168 +f 1197/1876/168 1198/1887/169 1190/1877/169 +f 1195/1879/165 1196/1889/170 1188/1880/170 +f 1193/1882/171 1194/1891/164 1186/1883/164 +f 1200/1885/167 1193/1882/171 1185/1884/171 +f 1198/1887/169 1199/1892/166 1191/1888/166 +f 1196/1889/170 1197/2032/168 1189/1890/168 +f 1194/1891/164 1195/1879/165 1187/1881/165 +f 1199/1892/166 1200/1885/167 1192/1886/167 +f 1210/1893/164 1211/1902/165 1203/1894/165 +f 1215/1896/166 1216/1906/167 1208/1897/167 +f 1213/1899/168 1214/1907/169 1206/1900/169 +f 1211/1902/165 1212/1908/170 1204/1903/170 +f 1209/1904/171 1210/1893/164 1202/1895/164 +f 1216/1906/167 1209/1904/171 1201/1905/171 +f 1214/1907/169 1215/1896/166 1207/1898/166 +f 1212/1908/170 1213/2033/168 1205/1909/168 +f 1229/1910/168 1230/1921/169 1222/1911/169 +f 1227/1913/165 1228/1923/170 1220/1914/170 +f 1225/1916/171 1226/1925/164 1218/1917/164 +f 1232/1919/167 1225/1916/171 1217/1918/171 +f 1230/1921/169 1231/1926/166 1223/1922/166 +f 1228/1923/170 1229/2034/168 1221/1924/168 +f 1226/1925/164 1227/1913/165 1219/1915/165 +f 1231/1926/166 1232/1919/167 1224/1920/167 +f 1242/1927/164 1243/1936/165 1235/1928/165 +f 1247/1930/166 1248/1940/167 1240/1931/167 +f 1245/1933/168 1246/1941/169 1238/1934/169 +f 1243/1936/165 1244/1942/170 1236/1937/170 +f 1241/1938/171 1242/1927/164 1234/1929/164 +f 1248/1940/167 1241/1938/171 1233/1939/171 +f 1246/1941/169 1247/1930/166 1239/1932/166 +f 1244/1942/170 1245/2035/168 1237/1943/168 +f 1261/1944/168 1262/1955/169 1254/1945/169 +f 1259/1947/165 1260/1957/170 1252/1948/170 +f 1257/1950/171 1258/1959/164 1250/1951/164 +f 1264/1953/167 1257/1950/171 1249/1952/171 +f 1262/1955/169 1263/1960/166 1255/1956/166 +f 1260/1957/170 1261/2036/168 1253/1958/168 +f 1258/1959/164 1259/1947/165 1251/1949/165 +f 1263/1960/166 1264/1953/167 1256/1954/167 +f 1270/1961/164 1278/1973/164 1277/1962/171 +f 1268/1964/167 1276/1975/167 1275/1965/166 +f 1266/1967/169 1274/1976/169 1273/1968/168 +f 1265/1969/168 1273/1968/168 1280/1970/170 +f 1271/1972/165 1279/1977/165 1278/1973/164 +f 1269/1974/171 1277/2037/171 1276/1975/167 +f 1267/1966/166 1275/1965/166 1274/1976/169 +f 1272/1971/170 1280/1970/170 1279/1977/165 +f 1286/1978/164 1294/1990/164 1293/1979/171 +f 1284/1981/167 1292/1992/167 1291/1982/166 +f 1282/1984/169 1290/1993/169 1289/1985/168 +f 1281/1986/168 1289/1985/168 1296/1987/170 +f 1287/1989/165 1295/1994/165 1294/1990/164 +f 1285/1991/171 1293/2038/171 1292/1992/167 +f 1283/1983/166 1291/1982/166 1290/1993/169 +f 1288/1988/170 1296/1987/170 1295/1994/165 +f 1302/1995/164 1310/2007/164 1309/1996/171 +f 1300/1998/167 1308/2009/167 1307/1999/166 +f 1298/2001/169 1306/2010/169 1305/2002/168 +f 1297/2003/168 1305/2002/168 1312/2004/170 +f 1303/2006/165 1311/2011/165 1310/2007/164 +f 1301/2008/171 1309/2039/171 1308/2009/167 +f 1299/2000/166 1307/1999/166 1306/2010/169 +f 1304/2005/170 1312/2004/170 1311/2011/165 +f 1318/2012/164 1326/2024/164 1325/2013/171 +f 1316/2015/167 1324/2026/167 1323/2016/166 +f 1314/2018/169 1322/2027/169 1321/2019/168 +f 1313/2020/168 1321/2019/168 1328/2021/170 +f 1319/2023/165 1327/2028/165 1326/2024/164 +f 1317/2025/171 1325/2040/171 1324/2026/167 +f 1315/2017/166 1323/2016/166 1322/2027/169 +f 1320/2022/170 1328/2021/170 1327/2028/165 o SuspensionLeft v -1.937497 6.687504 6.437500 v -1.937497 6.820086 6.382583 @@ -5363,6 +5669,70 @@ v -2.624997 0.312492 6.437500 v -2.624997 0.445075 6.382583 v -2.624997 0.499992 6.250000 v -2.624997 0.445075 6.117417 +v -1.937497 6.687504 6.437500 +v -1.937497 6.820086 6.382583 +v -1.937497 6.875004 6.250000 +v -1.937497 6.820086 6.117417 +v -1.937497 6.687504 6.062500 +v -1.937497 6.554921 6.117417 +v -1.937497 6.500004 6.250000 +v -1.937497 6.554921 6.382583 +v -2.624997 6.687504 6.437500 +v -2.624997 6.820086 6.382583 +v -2.624997 6.875004 6.250000 +v -2.624997 6.820086 6.117417 +v -2.624997 6.687504 6.062500 +v -2.624997 6.554921 6.117417 +v -2.624997 6.500004 6.250000 +v -2.624997 6.554921 6.382583 +v -1.937497 6.687504 7.937500 +v -1.937497 6.820086 7.882583 +v -1.937497 6.875004 7.750000 +v -1.937497 6.820086 7.617417 +v -1.937497 6.687504 7.562500 +v -1.937497 6.554921 7.617417 +v -1.937497 6.500004 7.750000 +v -1.937497 6.554921 7.882583 +v -2.624997 6.687504 7.937500 +v -2.624997 6.820086 7.882583 +v -2.624997 6.875004 7.750000 +v -2.624997 6.820086 7.617417 +v -2.624997 6.687504 7.562500 +v -2.624997 6.554921 7.617417 +v -2.624997 6.500004 7.750000 +v -2.624997 6.554921 7.882583 +v -1.937497 0.312492 7.562500 +v -1.937497 0.179910 7.617417 +v -1.937497 0.124992 7.750000 +v -1.937497 0.179910 7.882583 +v -1.937497 0.312492 7.937500 +v -1.937497 0.445075 7.882583 +v -1.937497 0.499992 7.750000 +v -1.937497 0.445075 7.617417 +v -2.624997 0.312492 7.562500 +v -2.624997 0.179910 7.617417 +v -2.624997 0.124992 7.750000 +v -2.624997 0.179910 7.882583 +v -2.624997 0.312492 7.937500 +v -2.624997 0.445075 7.882583 +v -2.624997 0.499992 7.750000 +v -2.624997 0.445075 7.617417 +v -1.937497 0.312492 6.062500 +v -1.937497 0.179910 6.117417 +v -1.937497 0.124992 6.250000 +v -1.937497 0.179910 6.382583 +v -1.937497 0.312492 6.437500 +v -1.937497 0.445075 6.382583 +v -1.937497 0.499992 6.250000 +v -1.937497 0.445075 6.117417 +v -2.624997 0.312492 6.062500 +v -2.624997 0.179910 6.117417 +v -2.624997 0.124992 6.250000 +v -2.624997 0.179910 6.382583 +v -2.624997 0.312492 6.437500 +v -2.624997 0.445075 6.382583 +v -2.624997 0.499992 6.250000 +v -2.624997 0.445075 6.117417 vt 0.837349 0.637209 vt 0.846816 0.641860 vt 0.837349 0.641860 @@ -5499,6 +5869,74 @@ vt 0.833907 0.651163 vt 0.822719 0.641860 vt 0.833046 0.646512 vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 @@ -5507,6 +5945,10 @@ vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 vn 0.0000 -0.7071 -0.7071 vn 0.0000 0.0000 -1.0000 vn 0.0000 -1.0000 -0.0000 @@ -5516,134 +5958,198 @@ vn 0.0000 0.7071 0.7071 vn 0.0000 1.0000 -0.0000 vn 0.0000 0.7071 -0.7071 s 1 -f 1246/1927/172 1261/1928/173 1245/1929/173 -f 1239/1930/174 1254/1931/172 1238/1932/172 -f 1247/1933/174 1262/1934/172 1246/1927/172 -f 1240/1935/175 1255/1936/174 1239/1937/174 -f 1248/1938/175 1263/1939/174 1247/1940/174 -f 1233/1941/176 1256/1942/175 1240/1935/175 -f 1234/1943/177 1249/1944/176 1233/1941/176 -f 1241/1945/176 1264/1946/175 1248/1938/175 -f 1242/1947/177 1257/1948/176 1241/1945/176 -f 1235/1949/178 1250/1950/177 1234/1943/177 -f 1243/1951/178 1258/1952/177 1242/1947/177 -f 1236/1953/179 1251/1954/178 1235/1949/178 -f 1244/1955/179 1259/1956/178 1243/1951/178 -f 1237/1957/173 1252/1958/179 1236/1953/179 -f 1245/1929/173 1260/1959/179 1244/1955/179 -f 1238/1932/172 1253/1960/173 1237/1957/173 -f 1270/1961/172 1277/1962/173 1269/1963/173 -f 1271/1964/174 1278/1965/172 1270/1961/172 -f 1272/1966/175 1279/1967/174 1271/1968/174 -f 1265/1969/176 1280/1970/175 1272/1966/175 -f 1266/1971/177 1273/1972/176 1265/1969/176 -f 1267/1973/178 1274/1974/177 1266/1971/177 -f 1268/1975/179 1275/1976/178 1267/1973/178 -f 1269/1963/173 1276/1977/179 1268/1975/179 -f 1287/1978/174 1294/1979/172 1286/1980/172 -f 1288/1981/175 1295/1982/174 1287/1983/174 -f 1281/1984/176 1296/1985/175 1288/1981/175 -f 1282/1986/177 1289/1987/176 1281/1984/176 -f 1283/1988/178 1290/1989/177 1282/1986/177 -f 1284/1990/179 1291/1991/178 1283/1988/178 -f 1285/1992/173 1292/1993/179 1284/1990/179 -f 1286/1980/172 1293/1994/173 1285/1992/173 -f 1310/1995/177 1325/1996/176 1309/1997/176 -f 1303/1998/178 1318/1999/177 1302/2000/177 -f 1311/2001/178 1326/2002/177 1310/1995/177 -f 1304/2003/179 1319/2004/178 1303/2005/178 -f 1312/2006/179 1327/2007/178 1311/2008/178 -f 1297/2009/173 1320/2010/179 1304/2003/179 -f 1298/2011/172 1313/2012/173 1297/2009/173 -f 1305/2013/173 1328/2014/179 1312/2006/179 -f 1306/2015/172 1321/2016/173 1305/2013/173 -f 1299/2017/174 1314/2018/172 1298/2011/172 -f 1307/2019/174 1322/2020/172 1306/2015/172 -f 1300/2021/175 1315/2022/174 1299/2017/174 -f 1308/2023/175 1323/2024/174 1307/2019/174 -f 1301/2025/176 1316/2026/175 1300/2021/175 -f 1309/1997/176 1324/2027/175 1308/2023/175 -f 1302/2000/177 1317/2028/176 1301/2025/176 -f 1334/2029/177 1341/2030/176 1333/2031/176 -f 1335/2032/178 1342/2033/177 1334/2029/177 -f 1336/2034/179 1343/2035/178 1335/2036/178 -f 1329/2037/173 1344/2038/179 1336/2034/179 -f 1330/2039/172 1337/2040/173 1329/2037/173 -f 1331/2041/174 1338/2042/172 1330/2039/172 -f 1332/2043/175 1339/2044/174 1331/2041/174 -f 1333/2031/176 1340/2045/175 1332/2043/175 -f 1351/2046/178 1358/2047/177 1350/2048/177 -f 1352/2049/179 1359/2050/178 1351/2051/178 -f 1345/2052/173 1360/2053/179 1352/2049/179 -f 1346/2054/172 1353/2055/173 1345/2052/173 -f 1347/2056/174 1354/2057/172 1346/2054/172 -f 1348/2058/175 1355/2059/174 1347/2056/174 -f 1349/2060/176 1356/2061/175 1348/2058/175 -f 1350/2048/177 1357/2062/176 1349/2060/176 -f 1246/1927/172 1262/1934/172 1261/1928/173 -f 1239/1930/174 1255/2063/174 1254/1931/172 -f 1247/1933/174 1263/2064/174 1262/1934/172 -f 1240/1935/175 1256/1942/175 1255/1936/174 -f 1248/1938/175 1264/1946/175 1263/1939/174 -f 1233/1941/176 1249/1944/176 1256/1942/175 -f 1234/1943/177 1250/1950/177 1249/1944/176 -f 1241/1945/176 1257/1948/176 1264/1946/175 -f 1242/1947/177 1258/1952/177 1257/1948/176 -f 1235/1949/178 1251/1954/178 1250/1950/177 -f 1243/1951/178 1259/1956/178 1258/1952/177 -f 1236/1953/179 1252/1958/179 1251/1954/178 -f 1244/1955/179 1260/1959/179 1259/1956/178 -f 1237/1957/173 1253/1960/173 1252/1958/179 -f 1245/1929/173 1261/1928/173 1260/1959/179 -f 1238/1932/172 1254/1931/172 1253/1960/173 -f 1270/1961/172 1278/1965/172 1277/1962/173 -f 1271/1964/174 1279/2065/174 1278/1965/172 -f 1272/1966/175 1280/1970/175 1279/1967/174 -f 1265/1969/176 1273/1972/176 1280/1970/175 -f 1266/1971/177 1274/1974/177 1273/1972/176 -f 1267/1973/178 1275/1976/178 1274/1974/177 -f 1268/1975/179 1276/1977/179 1275/1976/178 -f 1269/1963/173 1277/1962/173 1276/1977/179 -f 1287/1978/174 1295/2066/174 1294/1979/172 -f 1288/1981/175 1296/1985/175 1295/1982/174 -f 1281/1984/176 1289/1987/176 1296/1985/175 -f 1282/1986/177 1290/1989/177 1289/1987/176 -f 1283/1988/178 1291/1991/178 1290/1989/177 -f 1284/1990/179 1292/1993/179 1291/1991/178 -f 1285/1992/173 1293/1994/173 1292/1993/179 -f 1286/1980/172 1294/1979/172 1293/1994/173 -f 1310/1995/177 1326/2002/177 1325/1996/176 -f 1303/1998/178 1319/2067/178 1318/1999/177 -f 1311/2001/178 1327/2068/178 1326/2002/177 -f 1304/2003/179 1320/2010/179 1319/2004/178 -f 1312/2006/179 1328/2014/179 1327/2007/178 -f 1297/2009/173 1313/2012/173 1320/2010/179 -f 1298/2011/172 1314/2018/172 1313/2012/173 -f 1305/2013/173 1321/2016/173 1328/2014/179 -f 1306/2015/172 1322/2020/172 1321/2016/173 -f 1299/2017/174 1315/2022/174 1314/2018/172 -f 1307/2019/174 1323/2024/174 1322/2020/172 -f 1300/2021/175 1316/2026/175 1315/2022/174 -f 1308/2023/175 1324/2027/175 1323/2024/174 -f 1301/2025/176 1317/2028/176 1316/2026/175 -f 1309/1997/176 1325/1996/176 1324/2027/175 -f 1302/2000/177 1318/1999/177 1317/2028/176 -f 1334/2029/177 1342/2033/177 1341/2030/176 -f 1335/2032/178 1343/2069/178 1342/2033/177 -f 1336/2034/179 1344/2038/179 1343/2035/178 -f 1329/2037/173 1337/2040/173 1344/2038/179 -f 1330/2039/172 1338/2042/172 1337/2040/173 -f 1331/2041/174 1339/2044/174 1338/2042/172 -f 1332/2043/175 1340/2045/175 1339/2044/174 -f 1333/2031/176 1341/2030/176 1340/2045/175 -f 1351/2046/178 1359/2070/178 1358/2047/177 -f 1352/2049/179 1360/2053/179 1359/2050/178 -f 1345/2052/173 1353/2055/173 1360/2053/179 -f 1346/2054/172 1354/2057/172 1353/2055/173 -f 1347/2056/174 1355/2059/174 1354/2057/172 -f 1348/2058/175 1356/2061/175 1355/2059/174 -f 1349/2060/176 1357/2062/176 1356/2061/175 -f 1350/2048/177 1358/2047/177 1357/2062/176 +f 1342/2041/172 1357/2042/173 1341/2043/173 +f 1335/2044/174 1350/2045/172 1334/2046/172 +f 1343/2047/174 1358/2048/172 1342/2041/172 +f 1336/2049/175 1351/2050/174 1335/2051/174 +f 1344/2052/175 1359/2053/174 1343/2054/174 +f 1329/2055/176 1352/2056/175 1336/2049/175 +f 1330/2057/177 1345/2058/176 1329/2055/176 +f 1337/2059/176 1360/2060/175 1344/2052/175 +f 1338/2061/177 1353/2062/176 1337/2059/176 +f 1331/2063/178 1346/2064/177 1330/2057/177 +f 1339/2065/178 1354/2066/177 1338/2061/177 +f 1332/2067/179 1347/2068/178 1331/2063/178 +f 1340/2069/179 1355/2070/178 1339/2065/178 +f 1333/2071/173 1348/2072/179 1332/2067/179 +f 1341/2043/173 1356/2073/179 1340/2069/179 +f 1334/2046/172 1349/2074/173 1333/2071/173 +f 1366/2075/172 1373/2076/173 1365/2077/173 +f 1367/2078/174 1374/2079/172 1366/2075/172 +f 1368/2080/175 1375/2081/174 1367/2082/174 +f 1361/2083/176 1376/2084/175 1368/2080/175 +f 1362/2085/177 1369/2086/176 1361/2083/176 +f 1363/2087/178 1370/2088/177 1362/2085/177 +f 1364/2089/179 1371/2090/178 1363/2087/178 +f 1365/2077/173 1372/2091/179 1364/2089/179 +f 1383/2092/174 1390/2093/172 1382/2094/172 +f 1384/2095/175 1391/2096/174 1383/2097/174 +f 1377/2098/176 1392/2099/175 1384/2095/175 +f 1378/2100/177 1385/2101/176 1377/2098/176 +f 1379/2102/178 1386/2103/177 1378/2100/177 +f 1380/2104/179 1387/2105/178 1379/2102/178 +f 1381/2106/173 1388/2107/179 1380/2104/179 +f 1382/2094/172 1389/2108/173 1381/2106/173 +f 1406/2109/177 1421/2110/176 1405/2111/176 +f 1399/2112/178 1414/2113/177 1398/2114/177 +f 1407/2115/178 1422/2116/177 1406/2109/177 +f 1400/2117/179 1415/2118/178 1399/2119/178 +f 1408/2120/179 1423/2121/178 1407/2122/178 +f 1393/2123/173 1416/2124/179 1400/2117/179 +f 1394/2125/172 1409/2126/173 1393/2123/173 +f 1401/2127/173 1424/2128/179 1408/2120/179 +f 1402/2129/172 1417/2130/173 1401/2127/173 +f 1395/2131/174 1410/2132/172 1394/2125/172 +f 1403/2133/174 1418/2134/172 1402/2129/172 +f 1396/2135/175 1411/2136/174 1395/2131/174 +f 1404/2137/175 1419/2138/174 1403/2133/174 +f 1397/2139/176 1412/2140/175 1396/2135/175 +f 1405/2111/176 1420/2141/175 1404/2137/175 +f 1398/2114/177 1413/2142/176 1397/2139/176 +f 1430/2143/177 1437/2144/176 1429/2145/176 +f 1431/2146/178 1438/2147/177 1430/2143/177 +f 1432/2148/179 1439/2149/178 1431/2150/178 +f 1425/2151/173 1440/2152/179 1432/2148/179 +f 1426/2153/172 1433/2154/173 1425/2151/173 +f 1427/2155/174 1434/2156/172 1426/2153/172 +f 1428/2157/175 1435/2158/174 1427/2155/174 +f 1429/2145/176 1436/2159/175 1428/2157/175 +f 1447/2160/178 1454/2161/177 1446/2162/177 +f 1448/2163/179 1455/2164/178 1447/2165/178 +f 1441/2166/173 1456/2167/179 1448/2163/179 +f 1442/2168/172 1449/2169/173 1441/2166/173 +f 1443/2170/174 1450/2171/172 1442/2168/172 +f 1444/2172/175 1451/2173/174 1443/2170/174 +f 1445/2174/176 1452/2175/175 1444/2172/175 +f 1446/2162/177 1453/2176/176 1445/2174/176 +f 1470/2177/177 1463/2178/178 1462/2179/177 +f 1471/2180/178 1464/2181/179 1463/2182/178 +f 1472/2183/179 1457/2184/173 1464/2181/179 +f 1465/2185/173 1458/2186/172 1457/2184/173 +f 1466/2187/172 1459/2188/174 1458/2186/172 +f 1467/2189/174 1460/2190/175 1459/2188/174 +f 1468/2191/175 1461/2192/176 1460/2190/175 +f 1469/2193/176 1462/2179/177 1461/2192/176 +f 1486/2194/177 1479/2195/178 1478/2196/177 +f 1487/2197/178 1480/2198/179 1479/2199/178 +f 1488/2200/179 1473/2201/173 1480/2198/179 +f 1481/2202/173 1474/2203/172 1473/2201/173 +f 1482/2204/172 1475/2205/174 1474/2203/172 +f 1483/2206/174 1476/2207/175 1475/2205/174 +f 1484/2208/175 1477/2209/176 1476/2207/175 +f 1485/2210/176 1478/2196/177 1477/2209/176 +f 1502/2211/172 1495/2212/174 1494/2213/172 +f 1503/2214/174 1496/2215/175 1495/2216/174 +f 1504/2217/175 1489/2218/176 1496/2215/175 +f 1497/2219/176 1490/2220/177 1489/2218/176 +f 1498/2221/177 1491/2222/178 1490/2220/177 +f 1499/2223/178 1492/2224/179 1491/2222/178 +f 1500/2225/179 1493/2226/173 1492/2224/179 +f 1501/2227/173 1494/2213/172 1493/2226/173 +f 1518/2228/172 1511/2229/174 1510/2230/172 +f 1519/2231/174 1512/2232/175 1511/2233/174 +f 1520/2234/175 1505/2235/176 1512/2232/175 +f 1513/2236/176 1506/2237/177 1505/2235/176 +f 1514/2238/177 1507/2239/178 1506/2237/177 +f 1515/2240/178 1508/2241/179 1507/2239/178 +f 1516/2242/179 1509/2243/173 1508/2241/179 +f 1517/2244/173 1510/2230/172 1509/2243/173 +f 1342/2041/172 1358/2048/172 1357/2042/173 +f 1335/2044/174 1351/2245/174 1350/2045/172 +f 1343/2047/174 1359/2246/174 1358/2048/172 +f 1336/2049/175 1352/2056/175 1351/2050/174 +f 1344/2052/175 1360/2060/175 1359/2053/174 +f 1329/2055/176 1345/2058/176 1352/2056/175 +f 1330/2057/177 1346/2064/177 1345/2058/176 +f 1337/2059/176 1353/2062/176 1360/2060/175 +f 1338/2061/177 1354/2066/177 1353/2062/176 +f 1331/2063/178 1347/2068/178 1346/2064/177 +f 1339/2065/178 1355/2070/178 1354/2066/177 +f 1332/2067/179 1348/2072/179 1347/2068/178 +f 1340/2069/179 1356/2073/179 1355/2070/178 +f 1333/2071/173 1349/2074/173 1348/2072/179 +f 1341/2043/173 1357/2042/173 1356/2073/179 +f 1334/2046/172 1350/2045/172 1349/2074/173 +f 1366/2075/172 1374/2079/172 1373/2076/173 +f 1367/2078/174 1375/2247/174 1374/2079/172 +f 1368/2080/175 1376/2084/175 1375/2081/174 +f 1361/2083/176 1369/2086/176 1376/2084/175 +f 1362/2085/177 1370/2088/177 1369/2086/176 +f 1363/2087/178 1371/2090/178 1370/2088/177 +f 1364/2089/179 1372/2091/179 1371/2090/178 +f 1365/2077/173 1373/2076/173 1372/2091/179 +f 1383/2092/174 1391/2248/174 1390/2093/172 +f 1384/2095/175 1392/2099/175 1391/2096/174 +f 1377/2098/176 1385/2101/176 1392/2099/175 +f 1378/2100/177 1386/2103/177 1385/2101/176 +f 1379/2102/178 1387/2105/178 1386/2103/177 +f 1380/2104/179 1388/2107/179 1387/2105/178 +f 1381/2106/173 1389/2108/173 1388/2107/179 +f 1382/2094/172 1390/2093/172 1389/2108/173 +f 1406/2109/177 1422/2116/177 1421/2110/176 +f 1399/2112/178 1415/2249/178 1414/2113/177 +f 1407/2115/178 1423/2250/178 1422/2116/177 +f 1400/2117/179 1416/2124/179 1415/2118/178 +f 1408/2120/179 1424/2128/179 1423/2121/178 +f 1393/2123/173 1409/2126/173 1416/2124/179 +f 1394/2125/172 1410/2132/172 1409/2126/173 +f 1401/2127/173 1417/2130/173 1424/2128/179 +f 1402/2129/172 1418/2134/172 1417/2130/173 +f 1395/2131/174 1411/2136/174 1410/2132/172 +f 1403/2133/174 1419/2138/174 1418/2134/172 +f 1396/2135/175 1412/2140/175 1411/2136/174 +f 1404/2137/175 1420/2141/175 1419/2138/174 +f 1397/2139/176 1413/2142/176 1412/2140/175 +f 1405/2111/176 1421/2110/176 1420/2141/175 +f 1398/2114/177 1414/2113/177 1413/2142/176 +f 1430/2143/177 1438/2147/177 1437/2144/176 +f 1431/2146/178 1439/2251/178 1438/2147/177 +f 1432/2148/179 1440/2152/179 1439/2149/178 +f 1425/2151/173 1433/2154/173 1440/2152/179 +f 1426/2153/172 1434/2156/172 1433/2154/173 +f 1427/2155/174 1435/2158/174 1434/2156/172 +f 1428/2157/175 1436/2159/175 1435/2158/174 +f 1429/2145/176 1437/2144/176 1436/2159/175 +f 1447/2160/178 1455/2252/178 1454/2161/177 +f 1448/2163/179 1456/2167/179 1455/2164/178 +f 1441/2166/173 1449/2169/173 1456/2167/179 +f 1442/2168/172 1450/2171/172 1449/2169/173 +f 1443/2170/174 1451/2173/174 1450/2171/172 +f 1444/2172/175 1452/2175/175 1451/2173/174 +f 1445/2174/176 1453/2176/176 1452/2175/175 +f 1446/2162/177 1454/2161/177 1453/2176/176 +f 1470/2177/177 1471/2253/178 1463/2178/178 +f 1471/2180/178 1472/2183/179 1464/2181/179 +f 1472/2183/179 1465/2185/173 1457/2184/173 +f 1465/2185/173 1466/2187/172 1458/2186/172 +f 1466/2187/172 1467/2189/174 1459/2188/174 +f 1467/2189/174 1468/2191/175 1460/2190/175 +f 1468/2191/175 1469/2193/176 1461/2192/176 +f 1469/2193/176 1470/2177/177 1462/2179/177 +f 1486/2194/177 1487/2254/178 1479/2195/178 +f 1487/2197/178 1488/2200/179 1480/2198/179 +f 1488/2200/179 1481/2202/173 1473/2201/173 +f 1481/2202/173 1482/2204/172 1474/2203/172 +f 1482/2204/172 1483/2206/174 1475/2205/174 +f 1483/2206/174 1484/2208/175 1476/2207/175 +f 1484/2208/175 1485/2210/176 1477/2209/176 +f 1485/2210/176 1486/2194/177 1478/2196/177 +f 1502/2211/172 1503/2255/174 1495/2212/174 +f 1503/2214/174 1504/2217/175 1496/2215/175 +f 1504/2217/175 1497/2219/176 1489/2218/176 +f 1497/2219/176 1498/2221/177 1490/2220/177 +f 1498/2221/177 1499/2223/178 1491/2222/178 +f 1499/2223/178 1500/2225/179 1492/2224/179 +f 1500/2225/179 1501/2227/173 1493/2226/173 +f 1501/2227/173 1502/2211/172 1494/2213/172 +f 1518/2228/172 1519/2256/174 1511/2229/174 +f 1519/2231/174 1520/2234/175 1512/2232/175 +f 1520/2234/175 1513/2236/176 1505/2235/176 +f 1513/2236/176 1514/2238/177 1506/2237/177 +f 1514/2238/177 1515/2240/178 1507/2239/178 +f 1515/2240/178 1516/2242/179 1508/2241/179 +f 1516/2242/179 1517/2244/173 1509/2243/173 +f 1517/2244/173 1518/2228/172 1510/2230/172 o SuspensionRight v 1.937497 6.687504 7.562500 v 1.937497 6.820086 7.617417 @@ -5773,6 +6279,70 @@ v 2.624997 0.312492 7.562500 v 2.624997 0.445075 7.617417 v 2.624997 0.499992 7.750000 v 2.624997 0.445075 7.882583 +v 1.937497 6.687504 7.562500 +v 1.937497 6.820086 7.617417 +v 1.937497 6.875004 7.750000 +v 1.937497 6.820086 7.882583 +v 1.937497 6.687504 7.937500 +v 1.937497 6.554921 7.882583 +v 1.937497 6.500004 7.750000 +v 1.937497 6.554921 7.617417 +v 2.624997 6.687504 7.562500 +v 2.624997 6.820086 7.617417 +v 2.624997 6.875004 7.750000 +v 2.624997 6.820086 7.882583 +v 2.624997 6.687504 7.937500 +v 2.624997 6.554921 7.882583 +v 2.624997 6.500004 7.750000 +v 2.624997 6.554921 7.617417 +v 1.937497 6.687504 6.062500 +v 1.937497 6.820086 6.117417 +v 1.937497 6.875004 6.250000 +v 1.937497 6.820086 6.382583 +v 1.937497 6.687504 6.437500 +v 1.937497 6.554921 6.382583 +v 1.937497 6.500004 6.250000 +v 1.937497 6.554921 6.117417 +v 2.624997 6.687504 6.062500 +v 2.624997 6.820086 6.117417 +v 2.624997 6.875004 6.250000 +v 2.624997 6.820086 6.382583 +v 2.624997 6.687504 6.437500 +v 2.624997 6.554921 6.382583 +v 2.624997 6.500004 6.250000 +v 2.624997 6.554921 6.117417 +v 1.937497 0.312492 6.437500 +v 1.937497 0.179910 6.382583 +v 1.937497 0.124992 6.250000 +v 1.937497 0.179910 6.117417 +v 1.937497 0.312492 6.062500 +v 1.937497 0.445075 6.117417 +v 1.937497 0.499992 6.250000 +v 1.937497 0.445075 6.382583 +v 2.624997 0.312492 6.437500 +v 2.624997 0.179910 6.382583 +v 2.624997 0.124992 6.250000 +v 2.624997 0.179910 6.117417 +v 2.624997 0.312492 6.062500 +v 2.624997 0.445075 6.117417 +v 2.624997 0.499992 6.250000 +v 2.624997 0.445075 6.382583 +v 1.937497 0.312492 7.937500 +v 1.937497 0.179910 7.882583 +v 1.937497 0.124992 7.750000 +v 1.937497 0.179910 7.617417 +v 1.937497 0.312492 7.562500 +v 1.937497 0.445075 7.617417 +v 1.937497 0.499992 7.750000 +v 1.937497 0.445075 7.882583 +v 2.624997 0.312492 7.937500 +v 2.624997 0.179910 7.882583 +v 2.624997 0.124992 7.750000 +v 2.624997 0.179910 7.617417 +v 2.624997 0.312492 7.562500 +v 2.624997 0.445075 7.617417 +v 2.624997 0.499992 7.750000 +v 2.624997 0.445075 7.882583 vt 0.837349 0.637209 vt 0.846816 0.641860 vt 0.837349 0.641860 @@ -5909,6 +6479,74 @@ vt 0.833907 0.651163 vt 0.822719 0.641860 vt 0.833046 0.646512 vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 @@ -5917,6 +6555,10 @@ vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 vn 0.0000 -0.7071 0.7071 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 @@ -5926,134 +6568,198 @@ vn 0.0000 0.7071 -0.7071 vn 0.0000 1.0000 0.0000 vn 0.0000 0.7071 0.7071 s 1 -f 1374/2071/180 1389/2072/181 1373/2073/181 -f 1367/2074/182 1382/2075/180 1366/2076/180 -f 1375/2077/182 1390/2078/180 1374/2071/180 -f 1368/2079/183 1383/2080/182 1367/2081/182 -f 1376/2082/183 1391/2083/182 1375/2084/182 -f 1361/2085/184 1384/2086/183 1368/2079/183 -f 1362/2087/185 1377/2088/184 1361/2085/184 -f 1369/2089/184 1392/2090/183 1376/2082/183 -f 1370/2091/185 1385/2092/184 1369/2089/184 -f 1363/2093/186 1378/2094/185 1362/2087/185 -f 1371/2095/186 1386/2096/185 1370/2091/185 -f 1364/2097/187 1379/2098/186 1363/2093/186 -f 1372/2099/187 1387/2100/186 1371/2095/186 -f 1365/2101/181 1380/2102/187 1364/2097/187 -f 1373/2073/181 1388/2103/187 1372/2099/187 -f 1366/2076/180 1381/2104/181 1365/2101/181 -f 1398/2105/180 1405/2106/181 1397/2107/181 -f 1399/2108/182 1406/2109/180 1398/2105/180 -f 1400/2110/183 1407/2111/182 1399/2112/182 -f 1393/2113/184 1408/2114/183 1400/2110/183 -f 1394/2115/185 1401/2116/184 1393/2113/184 -f 1395/2117/186 1402/2118/185 1394/2115/185 -f 1396/2119/187 1403/2120/186 1395/2117/186 -f 1397/2107/181 1404/2121/187 1396/2119/187 -f 1415/2122/182 1422/2123/180 1414/2124/180 -f 1416/2125/183 1423/2126/182 1415/2127/182 -f 1409/2128/184 1424/2129/183 1416/2125/183 -f 1410/2130/185 1417/2131/184 1409/2128/184 -f 1411/2132/186 1418/2133/185 1410/2130/185 -f 1412/2134/187 1419/2135/186 1411/2132/186 -f 1413/2136/181 1420/2137/187 1412/2134/187 -f 1414/2124/180 1421/2138/181 1413/2136/181 -f 1438/2139/185 1453/2140/184 1437/2141/184 -f 1431/2142/186 1446/2143/185 1430/2144/185 -f 1439/2145/186 1454/2146/185 1438/2139/185 -f 1432/2147/187 1447/2148/186 1431/2149/186 -f 1440/2150/187 1455/2151/186 1439/2152/186 -f 1425/2153/181 1448/2154/187 1432/2147/187 -f 1426/2155/180 1441/2156/181 1425/2153/181 -f 1433/2157/181 1456/2158/187 1440/2150/187 -f 1434/2159/180 1449/2160/181 1433/2157/181 -f 1427/2161/182 1442/2162/180 1426/2155/180 -f 1435/2163/182 1450/2164/180 1434/2159/180 -f 1428/2165/183 1443/2166/182 1427/2161/182 -f 1436/2167/183 1451/2168/182 1435/2163/182 -f 1429/2169/184 1444/2170/183 1428/2165/183 -f 1437/2141/184 1452/2171/183 1436/2167/183 -f 1430/2144/185 1445/2172/184 1429/2169/184 -f 1462/2173/185 1469/2174/184 1461/2175/184 -f 1463/2176/186 1470/2177/185 1462/2173/185 -f 1464/2178/187 1471/2179/186 1463/2180/186 -f 1457/2181/181 1472/2182/187 1464/2178/187 -f 1458/2183/180 1465/2184/181 1457/2181/181 -f 1459/2185/182 1466/2186/180 1458/2183/180 -f 1460/2187/183 1467/2188/182 1459/2185/182 -f 1461/2175/184 1468/2189/183 1460/2187/183 -f 1479/2190/186 1486/2191/185 1478/2192/185 -f 1480/2193/187 1487/2194/186 1479/2195/186 -f 1473/2196/181 1488/2197/187 1480/2193/187 -f 1474/2198/180 1481/2199/181 1473/2196/181 -f 1475/2200/182 1482/2201/180 1474/2198/180 -f 1476/2202/183 1483/2203/182 1475/2200/182 -f 1477/2204/184 1484/2205/183 1476/2202/183 -f 1478/2192/185 1485/2206/184 1477/2204/184 -f 1374/2071/180 1390/2078/180 1389/2072/181 -f 1367/2074/182 1383/2207/182 1382/2075/180 -f 1375/2077/182 1391/2208/182 1390/2078/180 -f 1368/2079/183 1384/2086/183 1383/2080/182 -f 1376/2082/183 1392/2090/183 1391/2083/182 -f 1361/2085/184 1377/2088/184 1384/2086/183 -f 1362/2087/185 1378/2094/185 1377/2088/184 -f 1369/2089/184 1385/2092/184 1392/2090/183 -f 1370/2091/185 1386/2096/185 1385/2092/184 -f 1363/2093/186 1379/2098/186 1378/2094/185 -f 1371/2095/186 1387/2100/186 1386/2096/185 -f 1364/2097/187 1380/2102/187 1379/2098/186 -f 1372/2099/187 1388/2103/187 1387/2100/186 -f 1365/2101/181 1381/2104/181 1380/2102/187 -f 1373/2073/181 1389/2072/181 1388/2103/187 -f 1366/2076/180 1382/2075/180 1381/2104/181 -f 1398/2105/180 1406/2109/180 1405/2106/181 -f 1399/2108/182 1407/2209/182 1406/2109/180 -f 1400/2110/183 1408/2114/183 1407/2111/182 -f 1393/2113/184 1401/2116/184 1408/2114/183 -f 1394/2115/185 1402/2118/185 1401/2116/184 -f 1395/2117/186 1403/2120/186 1402/2118/185 -f 1396/2119/187 1404/2121/187 1403/2120/186 -f 1397/2107/181 1405/2106/181 1404/2121/187 -f 1415/2122/182 1423/2210/182 1422/2123/180 -f 1416/2125/183 1424/2129/183 1423/2126/182 -f 1409/2128/184 1417/2131/184 1424/2129/183 -f 1410/2130/185 1418/2133/185 1417/2131/184 -f 1411/2132/186 1419/2135/186 1418/2133/185 -f 1412/2134/187 1420/2137/187 1419/2135/186 -f 1413/2136/181 1421/2138/181 1420/2137/187 -f 1414/2124/180 1422/2123/180 1421/2138/181 -f 1438/2139/185 1454/2146/185 1453/2140/184 -f 1431/2142/186 1447/2211/186 1446/2143/185 -f 1439/2145/186 1455/2212/186 1454/2146/185 -f 1432/2147/187 1448/2154/187 1447/2148/186 -f 1440/2150/187 1456/2158/187 1455/2151/186 -f 1425/2153/181 1441/2156/181 1448/2154/187 -f 1426/2155/180 1442/2162/180 1441/2156/181 -f 1433/2157/181 1449/2160/181 1456/2158/187 -f 1434/2159/180 1450/2164/180 1449/2160/181 -f 1427/2161/182 1443/2166/182 1442/2162/180 -f 1435/2163/182 1451/2168/182 1450/2164/180 -f 1428/2165/183 1444/2170/183 1443/2166/182 -f 1436/2167/183 1452/2171/183 1451/2168/182 -f 1429/2169/184 1445/2172/184 1444/2170/183 -f 1437/2141/184 1453/2140/184 1452/2171/183 -f 1430/2144/185 1446/2143/185 1445/2172/184 -f 1462/2173/185 1470/2177/185 1469/2174/184 -f 1463/2176/186 1471/2213/186 1470/2177/185 -f 1464/2178/187 1472/2182/187 1471/2179/186 -f 1457/2181/181 1465/2184/181 1472/2182/187 -f 1458/2183/180 1466/2186/180 1465/2184/181 -f 1459/2185/182 1467/2188/182 1466/2186/180 -f 1460/2187/183 1468/2189/183 1467/2188/182 -f 1461/2175/184 1469/2174/184 1468/2189/183 -f 1479/2190/186 1487/2214/186 1486/2191/185 -f 1480/2193/187 1488/2197/187 1487/2194/186 -f 1473/2196/181 1481/2199/181 1488/2197/187 -f 1474/2198/180 1482/2201/180 1481/2199/181 -f 1475/2200/182 1483/2203/182 1482/2201/180 -f 1476/2202/183 1484/2205/183 1483/2203/182 -f 1477/2204/184 1485/2206/184 1484/2205/183 -f 1478/2192/185 1486/2191/185 1485/2206/184 +f 1534/2257/180 1549/2258/181 1533/2259/181 +f 1527/2260/182 1542/2261/180 1526/2262/180 +f 1535/2263/182 1550/2264/180 1534/2257/180 +f 1528/2265/183 1543/2266/182 1527/2267/182 +f 1536/2268/183 1551/2269/182 1535/2270/182 +f 1521/2271/184 1544/2272/183 1528/2265/183 +f 1522/2273/185 1537/2274/184 1521/2271/184 +f 1529/2275/184 1552/2276/183 1536/2268/183 +f 1530/2277/185 1545/2278/184 1529/2275/184 +f 1523/2279/186 1538/2280/185 1522/2273/185 +f 1531/2281/186 1546/2282/185 1530/2277/185 +f 1524/2283/187 1539/2284/186 1523/2279/186 +f 1532/2285/187 1547/2286/186 1531/2281/186 +f 1525/2287/181 1540/2288/187 1524/2283/187 +f 1533/2259/181 1548/2289/187 1532/2285/187 +f 1526/2262/180 1541/2290/181 1525/2287/181 +f 1558/2291/180 1565/2292/181 1557/2293/181 +f 1559/2294/182 1566/2295/180 1558/2291/180 +f 1560/2296/183 1567/2297/182 1559/2298/182 +f 1553/2299/184 1568/2300/183 1560/2296/183 +f 1554/2301/185 1561/2302/184 1553/2299/184 +f 1555/2303/186 1562/2304/185 1554/2301/185 +f 1556/2305/187 1563/2306/186 1555/2303/186 +f 1557/2293/181 1564/2307/187 1556/2305/187 +f 1575/2308/182 1582/2309/180 1574/2310/180 +f 1576/2311/183 1583/2312/182 1575/2313/182 +f 1569/2314/184 1584/2315/183 1576/2311/183 +f 1570/2316/185 1577/2317/184 1569/2314/184 +f 1571/2318/186 1578/2319/185 1570/2316/185 +f 1572/2320/187 1579/2321/186 1571/2318/186 +f 1573/2322/181 1580/2323/187 1572/2320/187 +f 1574/2310/180 1581/2324/181 1573/2322/181 +f 1598/2325/185 1613/2326/184 1597/2327/184 +f 1591/2328/186 1606/2329/185 1590/2330/185 +f 1599/2331/186 1614/2332/185 1598/2325/185 +f 1592/2333/187 1607/2334/186 1591/2335/186 +f 1600/2336/187 1615/2337/186 1599/2338/186 +f 1585/2339/181 1608/2340/187 1592/2333/187 +f 1586/2341/180 1601/2342/181 1585/2339/181 +f 1593/2343/181 1616/2344/187 1600/2336/187 +f 1594/2345/180 1609/2346/181 1593/2343/181 +f 1587/2347/182 1602/2348/180 1586/2341/180 +f 1595/2349/182 1610/2350/180 1594/2345/180 +f 1588/2351/183 1603/2352/182 1587/2347/182 +f 1596/2353/183 1611/2354/182 1595/2349/182 +f 1589/2355/184 1604/2356/183 1588/2351/183 +f 1597/2327/184 1612/2357/183 1596/2353/183 +f 1590/2330/185 1605/2358/184 1589/2355/184 +f 1622/2359/185 1629/2360/184 1621/2361/184 +f 1623/2362/186 1630/2363/185 1622/2359/185 +f 1624/2364/187 1631/2365/186 1623/2366/186 +f 1617/2367/181 1632/2368/187 1624/2364/187 +f 1618/2369/180 1625/2370/181 1617/2367/181 +f 1619/2371/182 1626/2372/180 1618/2369/180 +f 1620/2373/183 1627/2374/182 1619/2371/182 +f 1621/2361/184 1628/2375/183 1620/2373/183 +f 1639/2376/186 1646/2377/185 1638/2378/185 +f 1640/2379/187 1647/2380/186 1639/2381/186 +f 1633/2382/181 1648/2383/187 1640/2379/187 +f 1634/2384/180 1641/2385/181 1633/2382/181 +f 1635/2386/182 1642/2387/180 1634/2384/180 +f 1636/2388/183 1643/2389/182 1635/2386/182 +f 1637/2390/184 1644/2391/183 1636/2388/183 +f 1638/2378/185 1645/2392/184 1637/2390/184 +f 1662/2393/185 1655/2394/186 1654/2395/185 +f 1663/2396/186 1656/2397/187 1655/2398/186 +f 1664/2399/187 1649/2400/181 1656/2397/187 +f 1657/2401/181 1650/2402/180 1649/2400/181 +f 1658/2403/180 1651/2404/182 1650/2402/180 +f 1659/2405/182 1652/2406/183 1651/2404/182 +f 1660/2407/183 1653/2408/184 1652/2406/183 +f 1661/2409/184 1654/2395/185 1653/2408/184 +f 1678/2410/185 1671/2411/186 1670/2412/185 +f 1679/2413/186 1672/2414/187 1671/2415/186 +f 1680/2416/187 1665/2417/181 1672/2414/187 +f 1673/2418/181 1666/2419/180 1665/2417/181 +f 1674/2420/180 1667/2421/182 1666/2419/180 +f 1675/2422/182 1668/2423/183 1667/2421/182 +f 1676/2424/183 1669/2425/184 1668/2423/183 +f 1677/2426/184 1670/2412/185 1669/2425/184 +f 1694/2427/180 1687/2428/182 1686/2429/180 +f 1695/2430/182 1688/2431/183 1687/2432/182 +f 1696/2433/183 1681/2434/184 1688/2431/183 +f 1689/2435/184 1682/2436/185 1681/2434/184 +f 1690/2437/185 1683/2438/186 1682/2436/185 +f 1691/2439/186 1684/2440/187 1683/2438/186 +f 1692/2441/187 1685/2442/181 1684/2440/187 +f 1693/2443/181 1686/2429/180 1685/2442/181 +f 1710/2444/180 1703/2445/182 1702/2446/180 +f 1711/2447/182 1704/2448/183 1703/2449/182 +f 1712/2450/183 1697/2451/184 1704/2448/183 +f 1705/2452/184 1698/2453/185 1697/2451/184 +f 1706/2454/185 1699/2455/186 1698/2453/185 +f 1707/2456/186 1700/2457/187 1699/2455/186 +f 1708/2458/187 1701/2459/181 1700/2457/187 +f 1709/2460/181 1702/2446/180 1701/2459/181 +f 1534/2257/180 1550/2264/180 1549/2258/181 +f 1527/2260/182 1543/2461/182 1542/2261/180 +f 1535/2263/182 1551/2462/182 1550/2264/180 +f 1528/2265/183 1544/2272/183 1543/2266/182 +f 1536/2268/183 1552/2276/183 1551/2269/182 +f 1521/2271/184 1537/2274/184 1544/2272/183 +f 1522/2273/185 1538/2280/185 1537/2274/184 +f 1529/2275/184 1545/2278/184 1552/2276/183 +f 1530/2277/185 1546/2282/185 1545/2278/184 +f 1523/2279/186 1539/2284/186 1538/2280/185 +f 1531/2281/186 1547/2286/186 1546/2282/185 +f 1524/2283/187 1540/2288/187 1539/2284/186 +f 1532/2285/187 1548/2289/187 1547/2286/186 +f 1525/2287/181 1541/2290/181 1540/2288/187 +f 1533/2259/181 1549/2258/181 1548/2289/187 +f 1526/2262/180 1542/2261/180 1541/2290/181 +f 1558/2291/180 1566/2295/180 1565/2292/181 +f 1559/2294/182 1567/2463/182 1566/2295/180 +f 1560/2296/183 1568/2300/183 1567/2297/182 +f 1553/2299/184 1561/2302/184 1568/2300/183 +f 1554/2301/185 1562/2304/185 1561/2302/184 +f 1555/2303/186 1563/2306/186 1562/2304/185 +f 1556/2305/187 1564/2307/187 1563/2306/186 +f 1557/2293/181 1565/2292/181 1564/2307/187 +f 1575/2308/182 1583/2464/182 1582/2309/180 +f 1576/2311/183 1584/2315/183 1583/2312/182 +f 1569/2314/184 1577/2317/184 1584/2315/183 +f 1570/2316/185 1578/2319/185 1577/2317/184 +f 1571/2318/186 1579/2321/186 1578/2319/185 +f 1572/2320/187 1580/2323/187 1579/2321/186 +f 1573/2322/181 1581/2324/181 1580/2323/187 +f 1574/2310/180 1582/2309/180 1581/2324/181 +f 1598/2325/185 1614/2332/185 1613/2326/184 +f 1591/2328/186 1607/2465/186 1606/2329/185 +f 1599/2331/186 1615/2466/186 1614/2332/185 +f 1592/2333/187 1608/2340/187 1607/2334/186 +f 1600/2336/187 1616/2344/187 1615/2337/186 +f 1585/2339/181 1601/2342/181 1608/2340/187 +f 1586/2341/180 1602/2348/180 1601/2342/181 +f 1593/2343/181 1609/2346/181 1616/2344/187 +f 1594/2345/180 1610/2350/180 1609/2346/181 +f 1587/2347/182 1603/2352/182 1602/2348/180 +f 1595/2349/182 1611/2354/182 1610/2350/180 +f 1588/2351/183 1604/2356/183 1603/2352/182 +f 1596/2353/183 1612/2357/183 1611/2354/182 +f 1589/2355/184 1605/2358/184 1604/2356/183 +f 1597/2327/184 1613/2326/184 1612/2357/183 +f 1590/2330/185 1606/2329/185 1605/2358/184 +f 1622/2359/185 1630/2363/185 1629/2360/184 +f 1623/2362/186 1631/2467/186 1630/2363/185 +f 1624/2364/187 1632/2368/187 1631/2365/186 +f 1617/2367/181 1625/2370/181 1632/2368/187 +f 1618/2369/180 1626/2372/180 1625/2370/181 +f 1619/2371/182 1627/2374/182 1626/2372/180 +f 1620/2373/183 1628/2375/183 1627/2374/182 +f 1621/2361/184 1629/2360/184 1628/2375/183 +f 1639/2376/186 1647/2468/186 1646/2377/185 +f 1640/2379/187 1648/2383/187 1647/2380/186 +f 1633/2382/181 1641/2385/181 1648/2383/187 +f 1634/2384/180 1642/2387/180 1641/2385/181 +f 1635/2386/182 1643/2389/182 1642/2387/180 +f 1636/2388/183 1644/2391/183 1643/2389/182 +f 1637/2390/184 1645/2392/184 1644/2391/183 +f 1638/2378/185 1646/2377/185 1645/2392/184 +f 1662/2393/185 1663/2469/186 1655/2394/186 +f 1663/2396/186 1664/2399/187 1656/2397/187 +f 1664/2399/187 1657/2401/181 1649/2400/181 +f 1657/2401/181 1658/2403/180 1650/2402/180 +f 1658/2403/180 1659/2405/182 1651/2404/182 +f 1659/2405/182 1660/2407/183 1652/2406/183 +f 1660/2407/183 1661/2409/184 1653/2408/184 +f 1661/2409/184 1662/2393/185 1654/2395/185 +f 1678/2410/185 1679/2470/186 1671/2411/186 +f 1679/2413/186 1680/2416/187 1672/2414/187 +f 1680/2416/187 1673/2418/181 1665/2417/181 +f 1673/2418/181 1674/2420/180 1666/2419/180 +f 1674/2420/180 1675/2422/182 1667/2421/182 +f 1675/2422/182 1676/2424/183 1668/2423/183 +f 1676/2424/183 1677/2426/184 1669/2425/184 +f 1677/2426/184 1678/2410/185 1670/2412/185 +f 1694/2427/180 1695/2471/182 1687/2428/182 +f 1695/2430/182 1696/2433/183 1688/2431/183 +f 1696/2433/183 1689/2435/184 1681/2434/184 +f 1689/2435/184 1690/2437/185 1682/2436/185 +f 1690/2437/185 1691/2439/186 1683/2438/186 +f 1691/2439/186 1692/2441/187 1684/2440/187 +f 1692/2441/187 1693/2443/181 1685/2442/181 +f 1693/2443/181 1694/2427/180 1686/2429/180 +f 1710/2444/180 1711/2472/182 1703/2445/182 +f 1711/2447/182 1712/2450/183 1704/2448/183 +f 1712/2450/183 1705/2452/184 1697/2451/184 +f 1705/2452/184 1706/2454/185 1698/2453/185 +f 1706/2454/185 1707/2456/186 1699/2455/186 +f 1707/2456/186 1708/2458/187 1700/2457/187 +f 1708/2458/187 1709/2460/181 1701/2459/181 +f 1709/2460/181 1710/2444/180 1702/2446/180 o SuspensionBottom v -3.187505 1.562501 6.437500 v -3.320088 1.562501 6.382583 @@ -6183,6 +6889,70 @@ v 3.187506 0.875000 6.437500 v 3.054923 0.875000 6.382583 v 3.000006 0.875000 6.250000 v 3.054923 0.875000 6.117417 +v -3.187505 1.562501 6.437500 +v -3.320088 1.562501 6.382583 +v -3.375005 1.562501 6.250000 +v -3.320088 1.562501 6.117417 +v -3.187505 1.562501 6.062500 +v -3.054923 1.562501 6.117417 +v -3.000005 1.562501 6.250000 +v -3.054923 1.562501 6.382583 +v -3.187506 0.875001 6.437500 +v -3.320087 0.875001 6.382583 +v -3.375006 0.875001 6.250000 +v -3.320087 0.875001 6.117417 +v -3.187506 0.875001 6.062500 +v -3.054923 0.875001 6.117417 +v -3.000006 0.875001 6.250000 +v -3.054923 0.875001 6.382583 +v -3.187505 1.562501 7.937500 +v -3.320088 1.562501 7.882583 +v -3.375005 1.562501 7.750000 +v -3.320088 1.562501 7.617417 +v -3.187505 1.562501 7.562500 +v -3.054923 1.562501 7.617417 +v -3.000005 1.562501 7.750000 +v -3.054923 1.562501 7.882583 +v -3.187506 0.875001 7.937500 +v -3.320087 0.875001 7.882583 +v -3.375006 0.875001 7.750000 +v -3.320087 0.875001 7.617417 +v -3.187506 0.875001 7.562500 +v -3.054923 0.875001 7.617417 +v -3.000006 0.875001 7.750000 +v -3.054923 0.875001 7.882583 +v 3.187506 1.562501 7.562500 +v 3.320088 1.562501 7.617417 +v 3.375006 1.562501 7.750000 +v 3.320088 1.562501 7.882583 +v 3.187506 1.562501 7.937500 +v 3.054923 1.562501 7.882583 +v 3.000006 1.562501 7.750000 +v 3.054923 1.562501 7.617417 +v 3.187506 0.875000 7.562500 +v 3.320088 0.875000 7.617417 +v 3.375006 0.875000 7.750000 +v 3.320088 0.875000 7.882583 +v 3.187506 0.875000 7.937500 +v 3.054923 0.875000 7.882583 +v 3.000006 0.875000 7.750000 +v 3.054923 0.875000 7.617417 +v 3.187506 1.562501 6.062500 +v 3.320088 1.562501 6.117417 +v 3.375006 1.562501 6.250000 +v 3.320088 1.562501 6.382583 +v 3.187506 1.562501 6.437500 +v 3.054923 1.562501 6.382583 +v 3.000006 1.562501 6.250000 +v 3.054923 1.562501 6.117417 +v 3.187506 0.875000 6.062500 +v 3.320088 0.875000 6.117417 +v 3.375006 0.875000 6.250000 +v 3.320088 0.875000 6.382583 +v 3.187506 0.875000 6.437500 +v 3.054923 0.875000 6.382583 +v 3.000006 0.875000 6.250000 +v 3.054923 0.875000 6.117417 vt 0.837349 0.641860 vt 0.846816 0.637209 vt 0.846816 0.641860 @@ -6319,6 +7089,72 @@ vt 0.833907 0.651163 vt 0.822719 0.641860 vt 0.833046 0.646512 vt 0.832186 0.641860 +vt 0.821859 0.637209 +vt 0.830465 0.632558 +vt 0.820998 0.632558 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833046 0.646512 +vt 0.823580 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 vt 0.820998 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 @@ -6327,6 +7163,12 @@ vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 vt 0.830465 0.632558 +vt 0.831325 0.637209 +vt 0.833907 0.651163 +vt 0.830465 0.632558 +vt 0.832186 0.641860 +vt 0.830465 0.632558 +vt 0.830465 0.632558 vn -0.0000 -0.0000 -1.0000 vn 0.7071 -0.0000 -0.7071 vn 1.0000 -0.0000 -0.0000 @@ -6336,134 +7178,198 @@ vn -0.7071 0.0000 0.7071 vn -1.0000 0.0000 -0.0000 vn -0.7071 0.0000 -0.7071 s 1 -f 1501/2215/188 1518/2216/189 1517/2217/188 -f 1494/2218/189 1511/2219/190 1510/2220/189 -f 1503/2221/190 1518/2216/189 1502/2222/189 -f 1496/2223/191 1511/2224/190 1495/2225/190 -f 1504/2226/191 1519/2227/190 1503/2228/190 -f 1489/2229/192 1512/2230/191 1496/2223/191 -f 1490/2231/193 1505/2232/192 1489/2229/192 -f 1497/2233/192 1520/2234/191 1504/2226/191 -f 1498/2235/193 1513/2236/192 1497/2233/192 -f 1491/2237/194 1506/2238/193 1490/2231/193 -f 1499/2239/194 1514/2240/193 1498/2235/193 -f 1491/2237/194 1508/2241/195 1507/2242/194 -f 1500/2243/195 1515/2244/194 1499/2239/194 -f 1493/2245/188 1508/2241/195 1492/2246/195 -f 1501/2215/188 1516/2247/195 1500/2243/195 -f 1494/2218/189 1509/2248/188 1493/2245/188 -f 1525/2249/188 1534/2250/189 1533/2251/188 -f 1527/2252/190 1534/2250/189 1526/2253/189 -f 1528/2254/191 1535/2255/190 1527/2256/190 -f 1521/2257/192 1536/2258/191 1528/2254/191 -f 1522/2259/193 1529/2260/192 1521/2257/192 -f 1523/2261/194 1530/2262/193 1522/2259/193 -f 1524/2263/195 1531/2264/194 1523/2261/194 -f 1525/2249/188 1532/2265/195 1524/2263/195 -f 1543/2266/190 1550/2267/189 1542/2268/189 -f 1544/2269/191 1551/2270/190 1543/2271/190 -f 1537/2272/192 1552/2273/191 1544/2269/191 -f 1538/2274/193 1545/2275/192 1537/2272/192 -f 1539/2276/194 1546/2277/193 1538/2274/193 -f 1540/2278/195 1547/2279/194 1539/2276/194 -f 1541/2280/188 1548/2281/195 1540/2278/195 -f 1542/2268/189 1549/2282/188 1541/2280/188 -f 1566/2283/193 1581/2284/192 1565/2285/192 -f 1559/2286/194 1574/2287/193 1558/2288/193 -f 1567/2289/194 1582/2290/193 1566/2283/193 -f 1560/2291/195 1575/2292/194 1559/2293/194 -f 1568/2294/195 1583/2295/194 1567/2296/194 -f 1553/2297/188 1576/2298/195 1560/2291/195 -f 1554/2299/189 1569/2300/188 1553/2297/188 -f 1561/2301/188 1584/2302/195 1568/2294/195 -f 1562/2303/189 1577/2304/188 1561/2301/188 -f 1555/2305/190 1570/2306/189 1554/2299/189 -f 1563/2307/190 1578/2308/189 1562/2303/189 -f 1556/2309/191 1571/2310/190 1555/2305/190 -f 1564/2311/191 1579/2312/190 1563/2307/190 -f 1557/2313/192 1572/2314/191 1556/2309/191 -f 1565/2285/192 1580/2315/191 1564/2311/191 -f 1558/2288/193 1573/2316/192 1557/2313/192 -f 1590/2317/193 1597/2318/192 1589/2319/192 -f 1591/2320/194 1598/2321/193 1590/2317/193 -f 1592/2322/195 1599/2323/194 1591/2324/194 -f 1585/2325/188 1600/2326/195 1592/2322/195 -f 1586/2327/189 1593/2328/188 1585/2325/188 -f 1587/2329/190 1594/2330/189 1586/2327/189 -f 1588/2331/191 1595/2332/190 1587/2329/190 -f 1589/2319/192 1596/2333/191 1588/2331/191 -f 1607/2334/194 1614/2335/193 1606/2336/193 -f 1608/2337/195 1615/2338/194 1607/2339/194 -f 1601/2340/188 1616/2341/195 1608/2337/195 -f 1602/2342/189 1609/2343/188 1601/2340/188 -f 1603/2344/190 1610/2345/189 1602/2342/189 -f 1604/2346/191 1611/2347/190 1603/2344/190 -f 1605/2348/192 1612/2349/191 1604/2346/191 -f 1606/2336/193 1613/2350/192 1605/2348/192 -f 1501/2215/188 1502/2222/189 1518/2216/189 -f 1494/2218/189 1495/2351/190 1511/2219/190 -f 1503/2221/190 1519/2352/190 1518/2216/189 -f 1496/2223/191 1512/2230/191 1511/2224/190 -f 1504/2226/191 1520/2234/191 1519/2227/190 -f 1489/2229/192 1505/2232/192 1512/2230/191 -f 1490/2231/193 1506/2238/193 1505/2232/192 -f 1497/2233/192 1513/2236/192 1520/2234/191 -f 1498/2235/193 1514/2240/193 1513/2236/192 -f 1491/2237/194 1507/2242/194 1506/2238/193 -f 1499/2239/194 1515/2244/194 1514/2240/193 -f 1491/2237/194 1492/2246/195 1508/2241/195 -f 1500/2243/195 1516/2247/195 1515/2244/194 -f 1493/2245/188 1509/2248/188 1508/2241/195 -f 1501/2215/188 1517/2217/188 1516/2247/195 -f 1494/2218/189 1510/2220/189 1509/2248/188 -f 1525/2249/188 1526/2253/189 1534/2250/189 -f 1527/2252/190 1535/2353/190 1534/2250/189 -f 1528/2254/191 1536/2258/191 1535/2255/190 -f 1521/2257/192 1529/2260/192 1536/2258/191 -f 1522/2259/193 1530/2262/193 1529/2260/192 -f 1523/2261/194 1531/2264/194 1530/2262/193 -f 1524/2263/195 1532/2265/195 1531/2264/194 -f 1525/2249/188 1533/2251/188 1532/2265/195 -f 1543/2266/190 1551/2354/190 1550/2267/189 -f 1544/2269/191 1552/2273/191 1551/2270/190 -f 1537/2272/192 1545/2275/192 1552/2273/191 -f 1538/2274/193 1546/2277/193 1545/2275/192 -f 1539/2276/194 1547/2279/194 1546/2277/193 -f 1540/2278/195 1548/2281/195 1547/2279/194 -f 1541/2280/188 1549/2282/188 1548/2281/195 -f 1542/2268/189 1550/2267/189 1549/2282/188 -f 1566/2283/193 1582/2290/193 1581/2284/192 -f 1559/2286/194 1575/2355/194 1574/2287/193 -f 1567/2289/194 1583/2356/194 1582/2290/193 -f 1560/2291/195 1576/2298/195 1575/2292/194 -f 1568/2294/195 1584/2302/195 1583/2295/194 -f 1553/2297/188 1569/2300/188 1576/2298/195 -f 1554/2299/189 1570/2306/189 1569/2300/188 -f 1561/2301/188 1577/2304/188 1584/2302/195 -f 1562/2303/189 1578/2308/189 1577/2304/188 -f 1555/2305/190 1571/2310/190 1570/2306/189 -f 1563/2307/190 1579/2312/190 1578/2308/189 -f 1556/2309/191 1572/2314/191 1571/2310/190 -f 1564/2311/191 1580/2315/191 1579/2312/190 -f 1557/2313/192 1573/2316/192 1572/2314/191 -f 1565/2285/192 1581/2284/192 1580/2315/191 -f 1558/2288/193 1574/2287/193 1573/2316/192 -f 1590/2317/193 1598/2321/193 1597/2318/192 -f 1591/2320/194 1599/2357/194 1598/2321/193 -f 1592/2322/195 1600/2326/195 1599/2323/194 -f 1585/2325/188 1593/2328/188 1600/2326/195 -f 1586/2327/189 1594/2330/189 1593/2328/188 -f 1587/2329/190 1595/2332/190 1594/2330/189 -f 1588/2331/191 1596/2333/191 1595/2332/190 -f 1589/2319/192 1597/2318/192 1596/2333/191 -f 1607/2334/194 1615/2358/194 1614/2335/193 -f 1608/2337/195 1616/2341/195 1615/2338/194 -f 1601/2340/188 1609/2343/188 1616/2341/195 -f 1602/2342/189 1610/2345/189 1609/2343/188 -f 1603/2344/190 1611/2347/190 1610/2345/189 -f 1604/2346/191 1612/2349/191 1611/2347/190 -f 1605/2348/192 1613/2350/192 1612/2349/191 -f 1606/2336/193 1614/2335/193 1613/2350/192 +f 1725/2473/188 1742/2474/189 1741/2475/188 +f 1718/2476/189 1735/2477/190 1734/2478/189 +f 1727/2479/190 1742/2474/189 1726/2480/189 +f 1720/2481/191 1735/2482/190 1719/2483/190 +f 1728/2484/191 1743/2485/190 1727/2486/190 +f 1713/2487/192 1736/2488/191 1720/2481/191 +f 1714/2489/193 1729/2490/192 1713/2487/192 +f 1721/2491/192 1744/2492/191 1728/2484/191 +f 1722/2493/193 1737/2494/192 1721/2491/192 +f 1715/2495/194 1730/2496/193 1714/2489/193 +f 1723/2497/194 1738/2498/193 1722/2493/193 +f 1715/2495/194 1732/2499/195 1731/2500/194 +f 1724/2501/195 1739/2502/194 1723/2497/194 +f 1717/2503/188 1732/2499/195 1716/2504/195 +f 1725/2473/188 1740/2505/195 1724/2501/195 +f 1718/2476/189 1733/2506/188 1717/2503/188 +f 1749/2507/188 1758/2508/189 1757/2509/188 +f 1751/2510/190 1758/2508/189 1750/2511/189 +f 1752/2512/191 1759/2513/190 1751/2514/190 +f 1745/2515/192 1760/2516/191 1752/2512/191 +f 1746/2517/193 1753/2518/192 1745/2515/192 +f 1747/2519/194 1754/2520/193 1746/2517/193 +f 1748/2521/195 1755/2522/194 1747/2519/194 +f 1749/2507/188 1756/2523/195 1748/2521/195 +f 1767/2524/190 1774/2525/189 1766/2526/189 +f 1768/2527/191 1775/2528/190 1767/2529/190 +f 1761/2530/192 1776/2531/191 1768/2527/191 +f 1762/2532/193 1769/2533/192 1761/2530/192 +f 1763/2534/194 1770/2535/193 1762/2532/193 +f 1764/2536/195 1771/2537/194 1763/2534/194 +f 1765/2538/188 1772/2539/195 1764/2536/195 +f 1766/2526/189 1773/2540/188 1765/2538/188 +f 1790/2541/193 1805/2542/192 1789/2543/192 +f 1783/2544/194 1798/2545/193 1782/2546/193 +f 1791/2547/194 1806/2548/193 1790/2541/193 +f 1784/2549/195 1799/2550/194 1783/2551/194 +f 1792/2552/195 1807/2553/194 1791/2554/194 +f 1777/2555/188 1800/2556/195 1784/2549/195 +f 1778/2557/189 1793/2558/188 1777/2555/188 +f 1785/2559/188 1808/2560/195 1792/2552/195 +f 1786/2561/189 1801/2562/188 1785/2559/188 +f 1779/2563/190 1794/2564/189 1778/2557/189 +f 1787/2565/190 1802/2566/189 1786/2561/189 +f 1780/2567/191 1795/2568/190 1779/2563/190 +f 1788/2569/191 1803/2570/190 1787/2565/190 +f 1781/2571/192 1796/2572/191 1780/2567/191 +f 1789/2543/192 1804/2573/191 1788/2569/191 +f 1782/2546/193 1797/2574/192 1781/2571/192 +f 1814/2575/193 1821/2576/192 1813/2577/192 +f 1815/2578/194 1822/2579/193 1814/2575/193 +f 1816/2580/195 1823/2581/194 1815/2582/194 +f 1809/2583/188 1824/2584/195 1816/2580/195 +f 1810/2585/189 1817/2586/188 1809/2583/188 +f 1811/2587/190 1818/2588/189 1810/2585/189 +f 1812/2589/191 1819/2590/190 1811/2587/190 +f 1813/2577/192 1820/2591/191 1812/2589/191 +f 1831/2592/194 1838/2593/193 1830/2594/193 +f 1832/2595/195 1839/2596/194 1831/2597/194 +f 1825/2598/188 1840/2599/195 1832/2595/195 +f 1826/2600/189 1833/2601/188 1825/2598/188 +f 1827/2602/190 1834/2603/189 1826/2600/189 +f 1828/2604/191 1835/2605/190 1827/2602/190 +f 1829/2606/192 1836/2607/191 1828/2604/191 +f 1830/2594/193 1837/2608/192 1829/2606/192 +f 1846/2609/193 1855/2610/194 1847/2611/194 +f 1855/2612/194 1848/2613/195 1847/2614/194 +f 1856/2615/195 1841/2616/188 1848/2613/195 +f 1849/2617/188 1842/2618/189 1841/2616/188 +f 1850/2619/189 1843/2620/190 1842/2618/189 +f 1843/2620/190 1852/2621/191 1844/2622/191 +f 1852/2621/191 1845/2623/192 1844/2622/191 +f 1853/2624/192 1846/2609/193 1845/2623/192 +f 1870/2625/193 1863/2626/194 1862/2627/193 +f 1871/2628/194 1864/2629/195 1863/2630/194 +f 1872/2631/195 1857/2632/188 1864/2629/195 +f 1865/2633/188 1858/2634/189 1857/2632/188 +f 1866/2635/189 1859/2636/190 1858/2634/189 +f 1867/2637/190 1860/2638/191 1859/2636/190 +f 1868/2639/191 1861/2640/192 1860/2638/191 +f 1861/2640/192 1870/2625/193 1862/2627/193 +f 1886/2641/189 1879/2642/190 1878/2643/189 +f 1887/2644/190 1880/2645/191 1879/2646/190 +f 1888/2647/191 1873/2648/192 1880/2645/191 +f 1881/2649/192 1874/2650/193 1873/2648/192 +f 1882/2651/193 1875/2652/194 1874/2650/193 +f 1883/2653/194 1876/2654/195 1875/2652/194 +f 1884/2655/195 1877/2656/188 1876/2654/195 +f 1885/2657/188 1878/2643/189 1877/2656/188 +f 1902/2658/189 1895/2659/190 1894/2660/189 +f 1903/2661/190 1896/2662/191 1895/2663/190 +f 1904/2664/191 1889/2665/192 1896/2662/191 +f 1897/2666/192 1890/2667/193 1889/2665/192 +f 1898/2668/193 1891/2669/194 1890/2667/193 +f 1899/2670/194 1892/2671/195 1891/2669/194 +f 1900/2672/195 1893/2673/188 1892/2671/195 +f 1901/2674/188 1894/2660/189 1893/2673/188 +f 1725/2473/188 1726/2480/189 1742/2474/189 +f 1718/2476/189 1719/2675/190 1735/2477/190 +f 1727/2479/190 1743/2676/190 1742/2474/189 +f 1720/2481/191 1736/2488/191 1735/2482/190 +f 1728/2484/191 1744/2492/191 1743/2485/190 +f 1713/2487/192 1729/2490/192 1736/2488/191 +f 1714/2489/193 1730/2496/193 1729/2490/192 +f 1721/2491/192 1737/2494/192 1744/2492/191 +f 1722/2493/193 1738/2498/193 1737/2494/192 +f 1715/2495/194 1731/2500/194 1730/2496/193 +f 1723/2497/194 1739/2502/194 1738/2498/193 +f 1715/2495/194 1716/2504/195 1732/2499/195 +f 1724/2501/195 1740/2505/195 1739/2502/194 +f 1717/2503/188 1733/2506/188 1732/2499/195 +f 1725/2473/188 1741/2475/188 1740/2505/195 +f 1718/2476/189 1734/2478/189 1733/2506/188 +f 1749/2507/188 1750/2511/189 1758/2508/189 +f 1751/2510/190 1759/2677/190 1758/2508/189 +f 1752/2512/191 1760/2516/191 1759/2513/190 +f 1745/2515/192 1753/2518/192 1760/2516/191 +f 1746/2517/193 1754/2520/193 1753/2518/192 +f 1747/2519/194 1755/2522/194 1754/2520/193 +f 1748/2521/195 1756/2523/195 1755/2522/194 +f 1749/2507/188 1757/2509/188 1756/2523/195 +f 1767/2524/190 1775/2678/190 1774/2525/189 +f 1768/2527/191 1776/2531/191 1775/2528/190 +f 1761/2530/192 1769/2533/192 1776/2531/191 +f 1762/2532/193 1770/2535/193 1769/2533/192 +f 1763/2534/194 1771/2537/194 1770/2535/193 +f 1764/2536/195 1772/2539/195 1771/2537/194 +f 1765/2538/188 1773/2540/188 1772/2539/195 +f 1766/2526/189 1774/2525/189 1773/2540/188 +f 1790/2541/193 1806/2548/193 1805/2542/192 +f 1783/2544/194 1799/2679/194 1798/2545/193 +f 1791/2547/194 1807/2680/194 1806/2548/193 +f 1784/2549/195 1800/2556/195 1799/2550/194 +f 1792/2552/195 1808/2560/195 1807/2553/194 +f 1777/2555/188 1793/2558/188 1800/2556/195 +f 1778/2557/189 1794/2564/189 1793/2558/188 +f 1785/2559/188 1801/2562/188 1808/2560/195 +f 1786/2561/189 1802/2566/189 1801/2562/188 +f 1779/2563/190 1795/2568/190 1794/2564/189 +f 1787/2565/190 1803/2570/190 1802/2566/189 +f 1780/2567/191 1796/2572/191 1795/2568/190 +f 1788/2569/191 1804/2573/191 1803/2570/190 +f 1781/2571/192 1797/2574/192 1796/2572/191 +f 1789/2543/192 1805/2542/192 1804/2573/191 +f 1782/2546/193 1798/2545/193 1797/2574/192 +f 1814/2575/193 1822/2579/193 1821/2576/192 +f 1815/2578/194 1823/2681/194 1822/2579/193 +f 1816/2580/195 1824/2584/195 1823/2581/194 +f 1809/2583/188 1817/2586/188 1824/2584/195 +f 1810/2585/189 1818/2588/189 1817/2586/188 +f 1811/2587/190 1819/2590/190 1818/2588/189 +f 1812/2589/191 1820/2591/191 1819/2590/190 +f 1813/2577/192 1821/2576/192 1820/2591/191 +f 1831/2592/194 1839/2682/194 1838/2593/193 +f 1832/2595/195 1840/2599/195 1839/2596/194 +f 1825/2598/188 1833/2601/188 1840/2599/195 +f 1826/2600/189 1834/2603/189 1833/2601/188 +f 1827/2602/190 1835/2605/190 1834/2603/189 +f 1828/2604/191 1836/2607/191 1835/2605/190 +f 1829/2606/192 1837/2608/192 1836/2607/191 +f 1830/2594/193 1838/2593/193 1837/2608/192 +f 1846/2609/193 1854/2683/193 1855/2610/194 +f 1855/2612/194 1856/2615/195 1848/2613/195 +f 1856/2615/195 1849/2617/188 1841/2616/188 +f 1849/2617/188 1850/2619/189 1842/2618/189 +f 1850/2619/189 1851/2684/190 1843/2620/190 +f 1843/2620/190 1851/2684/190 1852/2621/191 +f 1852/2621/191 1853/2624/192 1845/2623/192 +f 1853/2624/192 1854/2683/193 1846/2609/193 +f 1870/2625/193 1871/2685/194 1863/2626/194 +f 1871/2628/194 1872/2631/195 1864/2629/195 +f 1872/2631/195 1865/2633/188 1857/2632/188 +f 1865/2633/188 1866/2635/189 1858/2634/189 +f 1866/2635/189 1867/2637/190 1859/2636/190 +f 1867/2637/190 1868/2639/191 1860/2638/191 +f 1868/2639/191 1869/2686/192 1861/2640/192 +f 1861/2640/192 1869/2686/192 1870/2625/193 +f 1886/2641/189 1887/2687/190 1879/2642/190 +f 1887/2644/190 1888/2647/191 1880/2645/191 +f 1888/2647/191 1881/2649/192 1873/2648/192 +f 1881/2649/192 1882/2651/193 1874/2650/193 +f 1882/2651/193 1883/2653/194 1875/2652/194 +f 1883/2653/194 1884/2655/195 1876/2654/195 +f 1884/2655/195 1885/2657/188 1877/2656/188 +f 1885/2657/188 1886/2641/189 1878/2643/189 +f 1902/2658/189 1903/2688/190 1895/2659/190 +f 1903/2661/190 1904/2664/191 1896/2662/191 +f 1904/2664/191 1897/2666/192 1889/2665/192 +f 1897/2666/192 1898/2668/193 1890/2667/193 +f 1898/2668/193 1899/2670/194 1891/2669/194 +f 1899/2670/194 1900/2672/195 1892/2671/195 +f 1900/2672/195 1901/2674/188 1893/2673/188 +f 1901/2674/188 1902/2658/189 1894/2660/189 o SuspensionTop v -3.187505 5.437495 7.562500 v -3.320088 5.437495 7.617417 @@ -6593,6 +7499,70 @@ v 3.187507 6.124994 7.562500 v 3.054924 6.124994 7.617417 v 3.000007 6.124994 7.750000 v 3.054924 6.124994 7.882583 +v -3.187505 5.437495 7.562500 +v -3.320088 5.437495 7.617417 +v -3.375005 5.437495 7.750000 +v -3.320088 5.437495 7.882583 +v -3.187505 5.437495 7.937500 +v -3.054923 5.437495 7.882583 +v -3.000005 5.437495 7.750000 +v -3.054923 5.437495 7.617417 +v -3.187505 6.124996 7.562500 +v -3.320088 6.124996 7.617417 +v -3.375005 6.124996 7.750000 +v -3.320088 6.124996 7.882583 +v -3.187505 6.124996 7.937500 +v -3.054923 6.124996 7.882583 +v -3.000005 6.124996 7.750000 +v -3.054923 6.124996 7.617417 +v -3.187505 5.437495 6.062500 +v -3.320088 5.437495 6.117417 +v -3.375005 5.437495 6.250000 +v -3.320088 5.437495 6.382583 +v -3.187505 5.437495 6.437500 +v -3.054923 5.437495 6.382583 +v -3.000005 5.437495 6.250000 +v -3.054923 5.437495 6.117417 +v -3.187505 6.124996 6.062500 +v -3.320088 6.124996 6.117417 +v -3.375005 6.124996 6.250000 +v -3.320088 6.124996 6.382583 +v -3.187505 6.124996 6.437500 +v -3.054923 6.124996 6.382583 +v -3.000005 6.124996 6.250000 +v -3.054923 6.124996 6.117417 +v 3.187506 5.437495 6.437500 +v 3.320088 5.437495 6.382583 +v 3.375006 5.437495 6.250000 +v 3.320088 5.437495 6.117417 +v 3.187506 5.437495 6.062500 +v 3.054923 5.437495 6.117417 +v 3.000006 5.437495 6.250000 +v 3.054923 5.437495 6.382583 +v 3.187507 6.124994 6.437500 +v 3.320088 6.124994 6.382583 +v 3.375007 6.124994 6.250000 +v 3.320088 6.124994 6.117417 +v 3.187507 6.124994 6.062500 +v 3.054924 6.124994 6.117417 +v 3.000007 6.124994 6.250000 +v 3.054924 6.124994 6.382583 +v 3.187506 5.437495 7.937500 +v 3.320088 5.437495 7.882583 +v 3.375006 5.437495 7.750000 +v 3.320088 5.437495 7.617417 +v 3.187506 5.437495 7.562500 +v 3.054923 5.437495 7.617417 +v 3.000006 5.437495 7.750000 +v 3.054923 5.437495 7.882583 +v 3.187507 6.124994 7.937500 +v 3.320088 6.124994 7.882583 +v 3.375007 6.124994 7.750000 +v 3.320088 6.124994 7.617417 +v 3.187507 6.124994 7.562500 +v 3.054924 6.124994 7.617417 +v 3.000007 6.124994 7.750000 +v 3.054924 6.124994 7.882583 vt 0.837349 0.637209 vt 0.846816 0.641860 vt 0.837349 0.641860 @@ -6729,6 +7699,73 @@ vt 0.833907 0.651163 vt 0.822719 0.641860 vt 0.823580 0.646512 vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.831325 0.637209 +vt 0.820998 0.632558 +vt 0.821859 0.637209 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833907 0.651163 +vt 0.823580 0.646512 +vt 0.833046 0.646512 +vt 0.822719 0.641860 +vt 0.832186 0.641860 +vt 0.821859 0.637209 +vt 0.830465 0.632558 +vt 0.820998 0.632558 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833046 0.646512 +vt 0.823580 0.646512 +vt 0.832186 0.641860 +vt 0.822719 0.641860 +vt 0.831325 0.637209 +vt 0.821859 0.637209 +vt 0.830465 0.632558 +vt 0.820998 0.632558 +vt 0.837349 0.669767 +vt 0.827022 0.665116 +vt 0.827883 0.669767 +vt 0.836489 0.665116 +vt 0.826162 0.660465 +vt 0.835628 0.660465 +vt 0.825301 0.655814 +vt 0.834768 0.655814 +vt 0.824441 0.651163 +vt 0.833046 0.646512 +vt 0.823580 0.646512 +vt 0.822719 0.641860 +vt 0.831325 0.637209 vt 0.830465 0.632558 vt 0.846816 0.632558 vt 0.846816 0.632558 @@ -6737,6 +7774,11 @@ vt 0.820998 0.632558 vt 0.837349 0.632558 vt 0.837349 0.632558 vt 0.820998 0.632558 +vt 0.830465 0.632558 +vt 0.830465 0.632558 +vt 0.833907 0.651163 +vt 0.833907 0.651163 +vt 0.832186 0.641860 vn 0.7071 0.0000 0.7071 vn -0.0000 0.0000 1.0000 vn 1.0000 0.0000 0.0000 @@ -6746,134 +7788,198 @@ vn -0.7071 0.0000 -0.7071 vn -1.0000 0.0000 0.0000 vn -0.7071 0.0000 0.7071 s 1 -f 1630/2359/196 1645/2360/197 1629/2361/197 -f 1623/2362/198 1638/2363/196 1622/2364/196 -f 1631/2365/198 1646/2366/196 1630/2359/196 -f 1624/2367/199 1639/2368/198 1623/2369/198 -f 1632/2370/199 1647/2371/198 1631/2372/198 -f 1617/2373/200 1640/2374/199 1624/2367/199 -f 1618/2375/201 1633/2376/200 1617/2373/200 -f 1625/2377/200 1648/2378/199 1632/2370/199 -f 1626/2379/201 1641/2380/200 1625/2377/200 -f 1619/2381/202 1634/2382/201 1618/2375/201 -f 1627/2383/202 1642/2384/201 1626/2379/201 -f 1620/2385/203 1635/2386/202 1619/2381/202 -f 1628/2387/203 1643/2388/202 1627/2383/202 -f 1621/2389/197 1636/2390/203 1620/2385/203 -f 1629/2361/197 1644/2391/203 1628/2387/203 -f 1622/2364/196 1637/2392/197 1621/2389/197 -f 1654/2393/196 1661/2394/197 1653/2395/197 -f 1655/2396/198 1662/2397/196 1654/2393/196 -f 1656/2398/199 1663/2399/198 1655/2400/198 -f 1649/2401/200 1664/2402/199 1656/2398/199 -f 1650/2403/201 1657/2404/200 1649/2401/200 -f 1651/2405/202 1658/2406/201 1650/2403/201 -f 1652/2407/203 1659/2408/202 1651/2405/202 -f 1653/2395/197 1660/2409/203 1652/2407/203 -f 1671/2410/198 1678/2411/196 1670/2412/196 -f 1672/2413/199 1679/2414/198 1671/2415/198 -f 1665/2416/200 1680/2417/199 1672/2413/199 -f 1666/2418/201 1673/2419/200 1665/2416/200 -f 1667/2420/202 1674/2421/201 1666/2418/201 -f 1668/2422/203 1675/2423/202 1667/2420/202 -f 1669/2424/197 1676/2425/203 1668/2422/203 -f 1670/2412/196 1677/2426/197 1669/2424/197 -f 1693/2427/200 1710/2428/201 1709/2429/200 -f 1686/2430/201 1703/2431/202 1702/2432/201 -f 1694/2433/201 1711/2434/202 1710/2428/201 -f 1688/2435/203 1703/2436/202 1687/2437/202 -f 1696/2438/203 1711/2439/202 1695/2440/202 -f 1681/2441/197 1704/2442/203 1688/2435/203 -f 1682/2443/196 1697/2444/197 1681/2441/197 -f 1689/2445/197 1712/2446/203 1696/2438/203 -f 1690/2447/196 1705/2448/197 1689/2445/197 -f 1683/2449/198 1698/2450/196 1682/2443/196 -f 1691/2451/198 1706/2452/196 1690/2447/196 -f 1683/2449/198 1700/2453/199 1699/2454/198 -f 1692/2455/199 1707/2456/198 1691/2451/198 -f 1684/2457/199 1701/2458/200 1700/2453/199 -f 1692/2455/199 1709/2429/200 1708/2459/199 -f 1685/2460/200 1702/2432/201 1701/2458/200 -f 1717/2461/200 1726/2462/201 1725/2463/200 -f 1718/2464/201 1727/2465/202 1726/2462/201 -f 1720/2466/203 1727/2467/202 1719/2468/202 -f 1713/2469/197 1728/2470/203 1720/2466/203 -f 1714/2471/196 1721/2472/197 1713/2469/197 -f 1715/2473/198 1722/2474/196 1714/2471/196 -f 1715/2473/198 1724/2475/199 1723/2476/198 -f 1716/2477/199 1725/2463/200 1724/2475/199 -f 1734/2478/201 1743/2479/202 1742/2480/201 -f 1736/2481/203 1743/2482/202 1735/2483/202 -f 1729/2484/197 1744/2485/203 1736/2481/203 -f 1730/2486/196 1737/2487/197 1729/2484/197 -f 1731/2488/198 1738/2489/196 1730/2486/196 -f 1731/2488/198 1740/2490/199 1739/2491/198 -f 1733/2492/200 1740/2490/199 1732/2493/199 -f 1733/2492/200 1742/2480/201 1741/2494/200 -f 1630/2359/196 1646/2366/196 1645/2360/197 -f 1623/2362/198 1639/2495/198 1638/2363/196 -f 1631/2365/198 1647/2496/198 1646/2366/196 -f 1624/2367/199 1640/2374/199 1639/2368/198 -f 1632/2370/199 1648/2378/199 1647/2371/198 -f 1617/2373/200 1633/2376/200 1640/2374/199 -f 1618/2375/201 1634/2382/201 1633/2376/200 -f 1625/2377/200 1641/2380/200 1648/2378/199 -f 1626/2379/201 1642/2384/201 1641/2380/200 -f 1619/2381/202 1635/2386/202 1634/2382/201 -f 1627/2383/202 1643/2388/202 1642/2384/201 -f 1620/2385/203 1636/2390/203 1635/2386/202 -f 1628/2387/203 1644/2391/203 1643/2388/202 -f 1621/2389/197 1637/2392/197 1636/2390/203 -f 1629/2361/197 1645/2360/197 1644/2391/203 -f 1622/2364/196 1638/2363/196 1637/2392/197 -f 1654/2393/196 1662/2397/196 1661/2394/197 -f 1655/2396/198 1663/2497/198 1662/2397/196 -f 1656/2398/199 1664/2402/199 1663/2399/198 -f 1649/2401/200 1657/2404/200 1664/2402/199 -f 1650/2403/201 1658/2406/201 1657/2404/200 -f 1651/2405/202 1659/2408/202 1658/2406/201 -f 1652/2407/203 1660/2409/203 1659/2408/202 -f 1653/2395/197 1661/2394/197 1660/2409/203 -f 1671/2410/198 1679/2498/198 1678/2411/196 -f 1672/2413/199 1680/2417/199 1679/2414/198 -f 1665/2416/200 1673/2419/200 1680/2417/199 -f 1666/2418/201 1674/2421/201 1673/2419/200 -f 1667/2420/202 1675/2423/202 1674/2421/201 -f 1668/2422/203 1676/2425/203 1675/2423/202 -f 1669/2424/197 1677/2426/197 1676/2425/203 -f 1670/2412/196 1678/2411/196 1677/2426/197 -f 1693/2427/200 1694/2433/201 1710/2428/201 -f 1686/2430/201 1687/2499/202 1703/2431/202 -f 1694/2433/201 1695/2500/202 1711/2434/202 -f 1688/2435/203 1704/2442/203 1703/2436/202 -f 1696/2438/203 1712/2446/203 1711/2439/202 -f 1681/2441/197 1697/2444/197 1704/2442/203 -f 1682/2443/196 1698/2450/196 1697/2444/197 -f 1689/2445/197 1705/2448/197 1712/2446/203 -f 1690/2447/196 1706/2452/196 1705/2448/197 -f 1683/2449/198 1699/2454/198 1698/2450/196 -f 1691/2451/198 1707/2456/198 1706/2452/196 -f 1683/2449/198 1684/2457/199 1700/2453/199 -f 1692/2455/199 1708/2459/199 1707/2456/198 -f 1684/2457/199 1685/2460/200 1701/2458/200 -f 1692/2455/199 1693/2427/200 1709/2429/200 -f 1685/2460/200 1686/2430/201 1702/2432/201 -f 1717/2461/200 1718/2464/201 1726/2462/201 -f 1718/2464/201 1719/2501/202 1727/2465/202 -f 1720/2466/203 1728/2470/203 1727/2467/202 -f 1713/2469/197 1721/2472/197 1728/2470/203 -f 1714/2471/196 1722/2474/196 1721/2472/197 -f 1715/2473/198 1723/2476/198 1722/2474/196 -f 1715/2473/198 1716/2477/199 1724/2475/199 -f 1716/2477/199 1717/2461/200 1725/2463/200 -f 1734/2478/201 1735/2502/202 1743/2479/202 -f 1736/2481/203 1744/2485/203 1743/2482/202 -f 1729/2484/197 1737/2487/197 1744/2485/203 -f 1730/2486/196 1738/2489/196 1737/2487/197 -f 1731/2488/198 1739/2491/198 1738/2489/196 -f 1731/2488/198 1732/2493/199 1740/2490/199 -f 1733/2492/200 1741/2494/200 1740/2490/199 -f 1733/2492/200 1734/2478/201 1742/2480/201 +f 1918/2689/196 1933/2690/197 1917/2691/197 +f 1911/2692/198 1926/2693/196 1910/2694/196 +f 1919/2695/198 1934/2696/196 1918/2689/196 +f 1912/2697/199 1927/2698/198 1911/2699/198 +f 1920/2700/199 1935/2701/198 1919/2702/198 +f 1905/2703/200 1928/2704/199 1912/2697/199 +f 1906/2705/201 1921/2706/200 1905/2703/200 +f 1913/2707/200 1936/2708/199 1920/2700/199 +f 1914/2709/201 1929/2710/200 1913/2707/200 +f 1907/2711/202 1922/2712/201 1906/2705/201 +f 1915/2713/202 1930/2714/201 1914/2709/201 +f 1908/2715/203 1923/2716/202 1907/2711/202 +f 1916/2717/203 1931/2718/202 1915/2713/202 +f 1909/2719/197 1924/2720/203 1908/2715/203 +f 1917/2691/197 1932/2721/203 1916/2717/203 +f 1910/2694/196 1925/2722/197 1909/2719/197 +f 1942/2723/196 1949/2724/197 1941/2725/197 +f 1943/2726/198 1950/2727/196 1942/2723/196 +f 1944/2728/199 1951/2729/198 1943/2730/198 +f 1937/2731/200 1952/2732/199 1944/2728/199 +f 1938/2733/201 1945/2734/200 1937/2731/200 +f 1939/2735/202 1946/2736/201 1938/2733/201 +f 1940/2737/203 1947/2738/202 1939/2735/202 +f 1941/2725/197 1948/2739/203 1940/2737/203 +f 1959/2740/198 1966/2741/196 1958/2742/196 +f 1960/2743/199 1967/2744/198 1959/2745/198 +f 1953/2746/200 1968/2747/199 1960/2743/199 +f 1954/2748/201 1961/2749/200 1953/2746/200 +f 1955/2750/202 1962/2751/201 1954/2748/201 +f 1956/2752/203 1963/2753/202 1955/2750/202 +f 1957/2754/197 1964/2755/203 1956/2752/203 +f 1958/2742/196 1965/2756/197 1957/2754/197 +f 1981/2757/200 1998/2758/201 1997/2759/200 +f 1974/2760/201 1991/2761/202 1990/2762/201 +f 1982/2763/201 1999/2764/202 1998/2758/201 +f 1976/2765/203 1991/2766/202 1975/2767/202 +f 1984/2768/203 1999/2769/202 1983/2770/202 +f 1969/2771/197 1992/2772/203 1976/2765/203 +f 1970/2773/196 1985/2774/197 1969/2771/197 +f 1977/2775/197 2000/2776/203 1984/2768/203 +f 1978/2777/196 1993/2778/197 1977/2775/197 +f 1971/2779/198 1986/2780/196 1970/2773/196 +f 1979/2781/198 1994/2782/196 1978/2777/196 +f 1971/2779/198 1988/2783/199 1987/2784/198 +f 1980/2785/199 1995/2786/198 1979/2781/198 +f 1972/2787/199 1989/2788/200 1988/2783/199 +f 1980/2785/199 1997/2759/200 1996/2789/199 +f 1973/2790/200 1990/2762/201 1989/2788/200 +f 2005/2791/200 2014/2792/201 2013/2793/200 +f 2006/2794/201 2015/2795/202 2014/2792/201 +f 2008/2796/203 2015/2797/202 2007/2798/202 +f 2001/2799/197 2016/2800/203 2008/2796/203 +f 2002/2801/196 2009/2802/197 2001/2799/197 +f 2003/2803/198 2010/2804/196 2002/2801/196 +f 2003/2803/198 2012/2805/199 2011/2806/198 +f 2004/2807/199 2013/2793/200 2012/2805/199 +f 2022/2808/201 2031/2809/202 2030/2810/201 +f 2024/2811/203 2031/2812/202 2023/2813/202 +f 2017/2814/197 2032/2815/203 2024/2811/203 +f 2018/2816/196 2025/2817/197 2017/2814/197 +f 2019/2818/198 2026/2819/196 2018/2816/196 +f 2019/2818/198 2028/2820/199 2027/2821/198 +f 2021/2822/200 2028/2820/199 2020/2823/199 +f 2021/2822/200 2030/2810/201 2029/2824/200 +f 2046/2825/201 2039/2826/202 2038/2827/201 +f 2047/2828/202 2040/2829/203 2039/2830/202 +f 2048/2831/203 2033/2832/197 2040/2829/203 +f 2041/2833/197 2034/2834/196 2033/2832/197 +f 2042/2835/196 2035/2836/198 2034/2834/196 +f 2043/2837/198 2036/2838/199 2035/2836/198 +f 2044/2839/199 2037/2840/200 2036/2838/199 +f 2045/2841/200 2038/2827/201 2037/2840/200 +f 2062/2842/201 2055/2843/202 2054/2844/201 +f 2063/2845/202 2056/2846/203 2055/2847/202 +f 2064/2848/203 2049/2849/197 2056/2846/203 +f 2057/2850/197 2050/2851/196 2049/2849/197 +f 2058/2852/196 2051/2853/198 2050/2851/196 +f 2059/2854/198 2052/2855/199 2051/2853/198 +f 2060/2856/199 2053/2857/200 2052/2855/199 +f 2061/2858/200 2054/2844/201 2053/2857/200 +f 2070/2859/196 2079/2860/198 2071/2861/198 +f 2079/2862/198 2072/2863/199 2071/2864/198 +f 2080/2865/199 2065/2866/200 2072/2863/199 +f 2073/2867/200 2066/2868/201 2065/2866/200 +f 2074/2869/201 2067/2870/202 2066/2868/201 +f 2067/2870/202 2076/2871/203 2068/2872/203 +f 2068/2872/203 2077/2873/197 2069/2874/197 +f 2069/2874/197 2078/2875/196 2070/2859/196 +f 2086/2876/196 2095/2877/198 2087/2878/198 +f 2095/2879/198 2088/2880/199 2087/2881/198 +f 2096/2882/199 2081/2883/200 2088/2880/199 +f 2089/2884/200 2082/2885/201 2081/2883/200 +f 2090/2886/201 2083/2887/202 2082/2885/201 +f 2083/2887/202 2092/2888/203 2084/2889/203 +f 2092/2888/203 2085/2890/197 2084/2889/203 +f 2085/2890/197 2094/2891/196 2086/2876/196 +f 1918/2689/196 1934/2696/196 1933/2690/197 +f 1911/2692/198 1927/2892/198 1926/2693/196 +f 1919/2695/198 1935/2893/198 1934/2696/196 +f 1912/2697/199 1928/2704/199 1927/2698/198 +f 1920/2700/199 1936/2708/199 1935/2701/198 +f 1905/2703/200 1921/2706/200 1928/2704/199 +f 1906/2705/201 1922/2712/201 1921/2706/200 +f 1913/2707/200 1929/2710/200 1936/2708/199 +f 1914/2709/201 1930/2714/201 1929/2710/200 +f 1907/2711/202 1923/2716/202 1922/2712/201 +f 1915/2713/202 1931/2718/202 1930/2714/201 +f 1908/2715/203 1924/2720/203 1923/2716/202 +f 1916/2717/203 1932/2721/203 1931/2718/202 +f 1909/2719/197 1925/2722/197 1924/2720/203 +f 1917/2691/197 1933/2690/197 1932/2721/203 +f 1910/2694/196 1926/2693/196 1925/2722/197 +f 1942/2723/196 1950/2727/196 1949/2724/197 +f 1943/2726/198 1951/2894/198 1950/2727/196 +f 1944/2728/199 1952/2732/199 1951/2729/198 +f 1937/2731/200 1945/2734/200 1952/2732/199 +f 1938/2733/201 1946/2736/201 1945/2734/200 +f 1939/2735/202 1947/2738/202 1946/2736/201 +f 1940/2737/203 1948/2739/203 1947/2738/202 +f 1941/2725/197 1949/2724/197 1948/2739/203 +f 1959/2740/198 1967/2895/198 1966/2741/196 +f 1960/2743/199 1968/2747/199 1967/2744/198 +f 1953/2746/200 1961/2749/200 1968/2747/199 +f 1954/2748/201 1962/2751/201 1961/2749/200 +f 1955/2750/202 1963/2753/202 1962/2751/201 +f 1956/2752/203 1964/2755/203 1963/2753/202 +f 1957/2754/197 1965/2756/197 1964/2755/203 +f 1958/2742/196 1966/2741/196 1965/2756/197 +f 1981/2757/200 1982/2763/201 1998/2758/201 +f 1974/2760/201 1975/2896/202 1991/2761/202 +f 1982/2763/201 1983/2897/202 1999/2764/202 +f 1976/2765/203 1992/2772/203 1991/2766/202 +f 1984/2768/203 2000/2776/203 1999/2769/202 +f 1969/2771/197 1985/2774/197 1992/2772/203 +f 1970/2773/196 1986/2780/196 1985/2774/197 +f 1977/2775/197 1993/2778/197 2000/2776/203 +f 1978/2777/196 1994/2782/196 1993/2778/197 +f 1971/2779/198 1987/2784/198 1986/2780/196 +f 1979/2781/198 1995/2786/198 1994/2782/196 +f 1971/2779/198 1972/2787/199 1988/2783/199 +f 1980/2785/199 1996/2789/199 1995/2786/198 +f 1972/2787/199 1973/2790/200 1989/2788/200 +f 1980/2785/199 1981/2757/200 1997/2759/200 +f 1973/2790/200 1974/2760/201 1990/2762/201 +f 2005/2791/200 2006/2794/201 2014/2792/201 +f 2006/2794/201 2007/2898/202 2015/2795/202 +f 2008/2796/203 2016/2800/203 2015/2797/202 +f 2001/2799/197 2009/2802/197 2016/2800/203 +f 2002/2801/196 2010/2804/196 2009/2802/197 +f 2003/2803/198 2011/2806/198 2010/2804/196 +f 2003/2803/198 2004/2807/199 2012/2805/199 +f 2004/2807/199 2005/2791/200 2013/2793/200 +f 2022/2808/201 2023/2899/202 2031/2809/202 +f 2024/2811/203 2032/2815/203 2031/2812/202 +f 2017/2814/197 2025/2817/197 2032/2815/203 +f 2018/2816/196 2026/2819/196 2025/2817/197 +f 2019/2818/198 2027/2821/198 2026/2819/196 +f 2019/2818/198 2020/2823/199 2028/2820/199 +f 2021/2822/200 2029/2824/200 2028/2820/199 +f 2021/2822/200 2022/2808/201 2030/2810/201 +f 2046/2825/201 2047/2900/202 2039/2826/202 +f 2047/2828/202 2048/2831/203 2040/2829/203 +f 2048/2831/203 2041/2833/197 2033/2832/197 +f 2041/2833/197 2042/2835/196 2034/2834/196 +f 2042/2835/196 2043/2837/198 2035/2836/198 +f 2043/2837/198 2044/2839/199 2036/2838/199 +f 2044/2839/199 2045/2841/200 2037/2840/200 +f 2045/2841/200 2046/2825/201 2038/2827/201 +f 2062/2842/201 2063/2901/202 2055/2843/202 +f 2063/2845/202 2064/2848/203 2056/2846/203 +f 2064/2848/203 2057/2850/197 2049/2849/197 +f 2057/2850/197 2058/2852/196 2050/2851/196 +f 2058/2852/196 2059/2854/198 2051/2853/198 +f 2059/2854/198 2060/2856/199 2052/2855/199 +f 2060/2856/199 2061/2858/200 2053/2857/200 +f 2061/2858/200 2062/2842/201 2054/2844/201 +f 2070/2859/196 2078/2875/196 2079/2860/198 +f 2079/2862/198 2080/2865/199 2072/2863/199 +f 2080/2865/199 2073/2867/200 2065/2866/200 +f 2073/2867/200 2074/2869/201 2066/2868/201 +f 2074/2869/201 2075/2902/202 2067/2870/202 +f 2067/2870/202 2075/2902/202 2076/2871/203 +f 2068/2872/203 2076/2871/203 2077/2873/197 +f 2069/2874/197 2077/2873/197 2078/2875/196 +f 2086/2876/196 2094/2891/196 2095/2877/198 +f 2095/2879/198 2096/2882/199 2088/2880/199 +f 2096/2882/199 2089/2884/200 2081/2883/200 +f 2089/2884/200 2090/2886/201 2082/2885/201 +f 2090/2886/201 2091/2903/202 2083/2887/202 +f 2083/2887/202 2091/2903/202 2092/2888/203 +f 2092/2888/203 2093/2904/197 2085/2890/197 +f 2085/2890/197 2093/2904/197 2094/2891/196 o SuspensionCoverBack v -0.500000 6.500000 -4.000000 v -0.676777 6.426777 -4.000000 @@ -6939,6 +8045,38 @@ v 0.750000 6.312500 -5.500000 v 0.882583 6.367417 -5.500000 v 0.937500 6.500000 -5.500000 v 0.882583 6.632583 -5.500000 +v -0.500000 6.500000 -4.000000 +v -0.676777 6.426777 -4.000000 +v -0.750000 6.250000 -4.000000 +v -0.676777 6.073223 -4.000000 +v -0.500000 6.000000 -4.000000 +v -0.323223 6.073223 -4.000000 +v -0.250000 6.250000 -4.000000 +v -0.323223 6.426777 -4.000000 +v 0.500000 6.500000 -4.000000 +v 0.323223 6.426777 -4.000000 +v 0.250000 6.250000 -4.000000 +v 0.323223 6.073223 -4.000000 +v 0.500000 6.000000 -4.000000 +v 0.676777 6.073223 -4.000000 +v 0.750000 6.250000 -4.000000 +v 0.676777 6.426777 -4.000000 +v -0.750000 6.750000 -5.500000 +v -0.926777 6.676777 -5.500000 +v -1.000000 6.500000 -5.500000 +v -0.926777 6.323223 -5.500000 +v -0.750000 6.250000 -5.500000 +v -0.573223 6.323223 -5.500000 +v -0.500000 6.500000 -5.500000 +v -0.573223 6.676777 -5.500000 +v 0.750000 6.750000 -5.500000 +v 0.573223 6.676777 -5.500000 +v 0.500000 6.500000 -5.500000 +v 0.573223 6.323223 -5.500000 +v 0.750000 6.250000 -5.500000 +v 0.926777 6.323223 -5.500000 +v 1.000000 6.500000 -5.500000 +v 0.926777 6.676777 -5.500000 vt 0.873494 0.509302 vt 0.853701 0.516279 vt 0.852840 0.509302 @@ -7003,6 +8141,40 @@ vt 0.877797 0.544186 vt 0.857143 0.544186 vt 0.851979 0.502326 vt 0.872633 0.576744 +vt 0.853701 0.516279 +vt 0.873494 0.509302 +vt 0.852840 0.509302 +vt 0.858864 0.558140 +vt 0.878657 0.551163 +vt 0.858003 0.551163 +vt 0.854561 0.523256 +vt 0.874355 0.516279 +vt 0.852840 0.509302 +vt 0.872633 0.502326 +vt 0.851979 0.502326 +vt 0.855422 0.530233 +vt 0.875215 0.523256 +vt 0.853701 0.516279 +vt 0.873494 0.509302 +vt 0.854561 0.523256 +vt 0.874355 0.516279 +vt 0.876076 0.530233 +vt 0.875215 0.523256 +vt 0.856282 0.537209 +vt 0.876076 0.530233 +vt 0.877797 0.544186 +vt 0.876936 0.537209 +vt 0.857143 0.544186 +vt 0.878657 0.551163 +vt 0.855422 0.530233 +vt 0.876936 0.537209 +vt 0.858003 0.551163 +vt 0.879518 0.558140 +vt 0.856282 0.537209 +vt 0.877797 0.544186 +vt 0.851979 0.502326 +vt 0.872633 0.502326 +vt 0.857143 0.544186 vt 0.879518 0.558140 vt 0.872633 0.581395 vt 0.875215 0.523256 @@ -7011,6 +8183,8 @@ vt 0.876936 0.537209 vt 0.872633 0.595349 vt 0.872633 0.572093 vt 0.872633 0.502326 +vt 0.879518 0.558140 +vt 0.858864 0.558140 vn 0.6882 -0.6882 -0.2294 vn 0.9847 -0.0369 -0.1703 vn -0.6882 -0.6882 -0.2294 @@ -7040,70 +8214,102 @@ vn 0.0369 -0.9847 -0.1703 vn -0.9866 0.0416 -0.1575 vn -0.9847 -0.0369 -0.1703 s 1 -f 1782/2503/204 1751/2504/205 1750/2505/204 -f 1796/2506/206 1765/2507/207 1764/2508/206 -f 1783/2509/208 1752/2510/209 1751/2504/205 -f 1797/2511/210 1766/2512/211 1765/2513/207 -f 1784/2514/212 1745/2515/213 1752/2510/209 -f 1798/2516/214 1767/2517/215 1766/2512/211 -f 1785/2518/216 1754/2519/217 1753/2520/213 -f 1799/2521/218 1768/2522/219 1767/2517/215 -f 1754/2519/217 1787/2523/220 1755/2524/221 -f 1768/2522/219 1793/2525/222 1761/2526/223 -f 1755/2524/221 1788/2527/224 1756/2528/225 -f 1769/2529/223 1802/2530/226 1770/2531/227 -f 1756/2528/225 1789/2532/228 1757/2533/229 -f 1770/2531/227 1803/2534/230 1771/2535/231 -f 1757/2536/229 1790/2537/204 1758/2538/204 -f 1771/2535/231 1804/2539/206 1772/2540/206 -f 1790/2537/204 1759/2541/205 1758/2538/204 -f 1777/2542/216 1746/2543/217 1745/2515/213 -f 1804/2539/206 1773/2544/207 1772/2540/206 -f 1791/2545/208 1760/2546/209 1759/2541/205 -f 1746/2543/217 1779/2547/220 1747/2548/221 -f 1805/2549/210 1774/2550/211 1773/2551/207 -f 1792/2552/212 1753/2520/213 1760/2546/209 -f 1747/2548/221 1780/2553/224 1748/2554/225 -f 1806/2555/214 1775/2556/215 1774/2550/211 -f 1761/2526/223 1794/2557/226 1762/2558/227 -f 1748/2554/225 1781/2559/228 1749/2560/229 -f 1807/2561/218 1776/2562/219 1775/2556/215 -f 1762/2558/227 1795/2563/230 1763/2564/231 -f 1749/2565/229 1782/2503/204 1750/2505/204 -f 1776/2562/219 1801/2566/222 1769/2529/223 -f 1763/2564/231 1796/2506/206 1764/2508/206 -f 1782/2503/204 1783/2509/208 1751/2504/205 -f 1796/2506/206 1797/2567/210 1765/2507/207 -f 1783/2509/208 1784/2514/212 1752/2510/209 -f 1797/2511/210 1798/2516/214 1766/2512/211 -f 1784/2514/212 1777/2542/216 1745/2515/213 -f 1798/2516/214 1799/2521/218 1767/2517/215 -f 1785/2518/216 1786/2568/217 1754/2519/217 -f 1799/2521/218 1800/2569/219 1768/2522/219 -f 1754/2519/217 1786/2568/217 1787/2523/220 -f 1768/2522/219 1800/2569/219 1793/2525/222 -f 1755/2524/221 1787/2523/220 1788/2527/224 -f 1769/2529/223 1801/2566/222 1802/2530/226 -f 1756/2528/225 1788/2527/224 1789/2532/228 -f 1770/2531/227 1802/2530/226 1803/2534/230 -f 1757/2536/229 1789/2570/228 1790/2537/204 -f 1771/2535/231 1803/2534/230 1804/2539/206 -f 1790/2537/204 1791/2545/208 1759/2541/205 -f 1777/2542/216 1778/2571/217 1746/2543/217 -f 1804/2539/206 1805/2572/210 1773/2544/207 -f 1791/2545/208 1792/2552/212 1760/2546/209 -f 1746/2543/217 1778/2571/217 1779/2547/220 -f 1805/2549/210 1806/2555/214 1774/2550/211 -f 1792/2552/212 1785/2518/216 1753/2520/213 -f 1747/2548/221 1779/2547/220 1780/2553/224 -f 1806/2555/214 1807/2561/218 1775/2556/215 -f 1761/2526/223 1793/2525/222 1794/2557/226 -f 1748/2554/225 1780/2553/224 1781/2559/228 -f 1807/2561/218 1808/2573/219 1776/2562/219 -f 1762/2558/227 1794/2557/226 1795/2563/230 -f 1749/2565/229 1781/2574/228 1782/2503/204 -f 1776/2562/219 1808/2573/219 1801/2566/222 -f 1763/2564/231 1795/2563/230 1796/2506/206 +f 2134/2905/204 2103/2906/205 2102/2907/204 +f 2148/2908/206 2117/2909/207 2116/2910/206 +f 2135/2911/208 2104/2912/209 2103/2906/205 +f 2149/2913/210 2118/2914/211 2117/2915/207 +f 2136/2916/212 2097/2917/213 2104/2912/209 +f 2150/2918/214 2119/2919/215 2118/2914/211 +f 2137/2920/216 2106/2921/217 2105/2922/213 +f 2151/2923/218 2120/2924/219 2119/2919/215 +f 2106/2921/217 2139/2925/220 2107/2926/221 +f 2120/2924/219 2145/2927/222 2113/2928/223 +f 2107/2926/221 2140/2929/224 2108/2930/225 +f 2121/2931/223 2154/2932/226 2122/2933/227 +f 2108/2930/225 2141/2934/228 2109/2935/229 +f 2122/2933/227 2155/2936/230 2123/2937/231 +f 2109/2938/229 2142/2939/204 2110/2940/204 +f 2123/2937/231 2156/2941/206 2124/2942/206 +f 2142/2939/204 2111/2943/205 2110/2940/204 +f 2129/2944/216 2098/2945/217 2097/2917/213 +f 2156/2941/206 2125/2946/207 2124/2942/206 +f 2143/2947/208 2112/2948/209 2111/2943/205 +f 2098/2945/217 2131/2949/220 2099/2950/221 +f 2157/2951/210 2126/2952/211 2125/2953/207 +f 2144/2954/212 2105/2922/213 2112/2948/209 +f 2099/2950/221 2132/2955/224 2100/2956/225 +f 2158/2957/214 2127/2958/215 2126/2952/211 +f 2113/2928/223 2146/2959/226 2114/2960/227 +f 2100/2956/225 2133/2961/228 2101/2962/229 +f 2159/2963/218 2128/2964/219 2127/2958/215 +f 2114/2960/227 2147/2965/230 2115/2966/231 +f 2101/2967/229 2134/2905/204 2102/2907/204 +f 2128/2964/219 2153/2968/222 2121/2931/223 +f 2115/2966/231 2148/2908/206 2116/2910/206 +f 2167/2969/220 2182/2970/217 2166/2971/217 +f 2173/2972/222 2188/2973/219 2172/2974/219 +f 2168/2975/224 2183/2976/221 2167/2969/220 +f 2174/2977/226 2189/2978/223 2173/2979/222 +f 2161/2980/228 2184/2981/225 2168/2975/224 +f 2175/2982/230 2190/2983/227 2174/2977/226 +f 2176/2984/206 2191/2985/231 2175/2982/230 +f 2176/2984/206 2185/2986/207 2192/2987/206 +f 2162/2988/204 2177/2989/229 2161/2980/228 +f 2162/2988/204 2179/2990/205 2178/2991/204 +f 2163/2992/208 2180/2993/209 2179/2990/205 +f 2169/2994/210 2186/2995/211 2185/2986/207 +f 2164/2996/212 2181/2997/213 2180/2993/209 +f 2170/2998/214 2187/2999/215 2186/2995/211 +f 2165/3000/216 2182/2970/217 2181/3001/213 +f 2171/3002/218 2188/2973/219 2187/2999/215 +f 2134/2905/204 2135/2911/208 2103/2906/205 +f 2148/2908/206 2149/3003/210 2117/2909/207 +f 2135/2911/208 2136/2916/212 2104/2912/209 +f 2149/2913/210 2150/2918/214 2118/2914/211 +f 2136/2916/212 2129/2944/216 2097/2917/213 +f 2150/2918/214 2151/2923/218 2119/2919/215 +f 2137/2920/216 2138/3004/217 2106/2921/217 +f 2151/2923/218 2152/3005/219 2120/2924/219 +f 2106/2921/217 2138/3004/217 2139/2925/220 +f 2120/2924/219 2152/3005/219 2145/2927/222 +f 2107/2926/221 2139/2925/220 2140/2929/224 +f 2121/2931/223 2153/2968/222 2154/2932/226 +f 2108/2930/225 2140/2929/224 2141/2934/228 +f 2122/2933/227 2154/2932/226 2155/2936/230 +f 2109/2938/229 2141/3006/228 2142/2939/204 +f 2123/2937/231 2155/2936/230 2156/2941/206 +f 2142/2939/204 2143/2947/208 2111/2943/205 +f 2129/2944/216 2130/3007/217 2098/2945/217 +f 2156/2941/206 2157/3008/210 2125/2946/207 +f 2143/2947/208 2144/2954/212 2112/2948/209 +f 2098/2945/217 2130/3007/217 2131/2949/220 +f 2157/2951/210 2158/2957/214 2126/2952/211 +f 2144/2954/212 2137/2920/216 2105/2922/213 +f 2099/2950/221 2131/2949/220 2132/2955/224 +f 2158/2957/214 2159/2963/218 2127/2958/215 +f 2113/2928/223 2145/2927/222 2146/2959/226 +f 2100/2956/225 2132/2955/224 2133/2961/228 +f 2159/2963/218 2160/3009/219 2128/2964/219 +f 2114/2960/227 2146/2959/226 2147/2965/230 +f 2101/2967/229 2133/3010/228 2134/2905/204 +f 2128/2964/219 2160/3009/219 2153/2968/222 +f 2115/2966/231 2147/2965/230 2148/2908/206 +f 2167/2969/220 2183/2976/221 2182/2970/217 +f 2173/2972/222 2189/3011/223 2188/2973/219 +f 2168/2975/224 2184/2981/225 2183/2976/221 +f 2174/2977/226 2190/2983/227 2189/2978/223 +f 2161/2980/228 2177/2989/229 2184/2981/225 +f 2175/2982/230 2191/2985/231 2190/2983/227 +f 2176/2984/206 2192/2987/206 2191/2985/231 +f 2176/2984/206 2169/2994/210 2185/2986/207 +f 2162/2988/204 2178/2991/204 2177/2989/229 +f 2162/2988/204 2163/2992/208 2179/2990/205 +f 2163/2992/208 2164/2996/212 2180/2993/209 +f 2169/2994/210 2170/2998/214 2186/2995/211 +f 2164/2996/212 2165/3012/216 2181/2997/213 +f 2170/2998/214 2171/3002/218 2187/2999/215 +f 2165/3000/216 2166/2971/217 2182/2970/217 +f 2171/3002/218 2172/2974/219 2188/2973/219 o Server4 v 3.375000 1.000000 -8.875000 v 2.625000 1.000000 -8.875000 @@ -7131,16 +8337,16 @@ vn 0.0000 0.0000 1.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 s off -f 1815/2575/232 1813/2576/232 1814/2577/232 -f 1810/2578/233 1816/2579/233 1809/2580/233 -f 1811/2581/234 1814/2577/234 1812/2582/234 -f 1809/2583/235 1815/2575/235 1811/2584/235 -f 1812/2585/236 1813/2576/236 1810/2586/236 -f 1815/2575/232 1816/2579/232 1813/2576/232 -f 1810/2578/233 1813/2576/233 1816/2579/233 -f 1811/2581/234 1815/2575/234 1814/2577/234 -f 1809/2583/235 1816/2579/235 1815/2575/235 -f 1812/2585/236 1814/2577/236 1813/2576/236 +f 2199/3013/232 2197/3014/232 2198/3015/232 +f 2194/3016/233 2200/3017/233 2193/3018/233 +f 2195/3019/234 2198/3015/234 2196/3020/234 +f 2193/3021/235 2199/3013/235 2195/3022/235 +f 2196/3023/236 2197/3014/236 2194/3024/236 +f 2199/3013/232 2200/3017/232 2197/3014/232 +f 2194/3016/233 2197/3014/233 2200/3017/233 +f 2195/3019/234 2199/3013/234 2198/3015/234 +f 2193/3021/235 2200/3017/235 2199/3013/235 +f 2196/3023/236 2198/3015/236 2197/3014/236 o Server3 v 3.375000 1.312500 -8.875000 v 2.625000 1.312500 -8.875000 @@ -7171,18 +8377,18 @@ vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 s off -f 1823/2587/237 1821/2588/237 1822/2589/237 -f 1818/2590/238 1824/2591/238 1817/2592/238 -f 1819/2593/239 1822/2589/239 1820/2594/239 -f 1817/2595/240 1823/2587/240 1819/2596/240 -f 1820/2597/241 1821/2588/241 1818/2598/241 -f 1819/2596/242 1818/2599/242 1817/2595/242 -f 1823/2587/237 1824/2591/237 1821/2588/237 -f 1818/2590/238 1821/2588/238 1824/2591/238 -f 1819/2593/239 1823/2587/239 1822/2589/239 -f 1817/2595/240 1824/2591/240 1823/2587/240 -f 1820/2597/241 1822/2589/241 1821/2588/241 -f 1819/2596/242 1820/2600/242 1818/2599/242 +f 2207/3025/237 2205/3026/237 2206/3027/237 +f 2202/3028/238 2208/3029/238 2201/3030/238 +f 2203/3031/239 2206/3027/239 2204/3032/239 +f 2201/3033/240 2207/3025/240 2203/3034/240 +f 2204/3035/241 2205/3026/241 2202/3036/241 +f 2203/3034/242 2202/3037/242 2201/3033/242 +f 2207/3025/237 2208/3029/237 2205/3026/237 +f 2202/3028/238 2205/3026/238 2208/3029/238 +f 2203/3031/239 2207/3025/239 2206/3027/239 +f 2201/3033/240 2208/3029/240 2207/3025/240 +f 2204/3035/241 2206/3027/241 2205/3026/241 +f 2203/3034/242 2204/3038/242 2202/3037/242 o Server2 v 3.375000 1.625000 -8.875000 v 2.625000 1.625000 -8.875000 @@ -7213,18 +8419,18 @@ vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 s off -f 1831/2601/243 1829/2602/243 1830/2603/243 -f 1826/2604/244 1832/2605/244 1825/2606/244 -f 1827/2607/245 1830/2603/245 1828/2608/245 -f 1825/2609/246 1831/2601/246 1827/2610/246 -f 1828/2611/247 1829/2602/247 1826/2612/247 -f 1827/2610/248 1826/2613/248 1825/2609/248 -f 1831/2601/243 1832/2605/243 1829/2602/243 -f 1826/2604/244 1829/2602/244 1832/2605/244 -f 1827/2607/245 1831/2601/245 1830/2603/245 -f 1825/2609/246 1832/2605/246 1831/2601/246 -f 1828/2611/247 1830/2603/247 1829/2602/247 -f 1827/2610/248 1828/2614/248 1826/2613/248 +f 2215/3039/243 2213/3040/243 2214/3041/243 +f 2210/3042/244 2216/3043/244 2209/3044/244 +f 2211/3045/245 2214/3041/245 2212/3046/245 +f 2209/3047/246 2215/3039/246 2211/3048/246 +f 2212/3049/247 2213/3040/247 2210/3050/247 +f 2211/3048/248 2210/3051/248 2209/3047/248 +f 2215/3039/243 2216/3043/243 2213/3040/243 +f 2210/3042/244 2213/3040/244 2216/3043/244 +f 2211/3045/245 2215/3039/245 2214/3041/245 +f 2209/3047/246 2216/3043/246 2215/3039/246 +f 2212/3049/247 2214/3041/247 2213/3040/247 +f 2211/3048/248 2212/3052/248 2210/3051/248 o Server1 v 3.375000 1.937500 -8.875000 v 2.625000 1.937500 -8.875000 @@ -7255,18 +8461,18 @@ vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 s off -f 1839/2615/249 1837/2616/249 1838/2617/249 -f 1834/2618/250 1840/2619/250 1833/2620/250 -f 1835/2621/251 1838/2617/251 1836/2622/251 -f 1833/2623/252 1839/2615/252 1835/2624/252 -f 1836/2625/253 1837/2616/253 1834/2626/253 -f 1835/2624/254 1834/2627/254 1833/2623/254 -f 1839/2615/249 1840/2619/249 1837/2616/249 -f 1834/2618/250 1837/2616/250 1840/2619/250 -f 1835/2621/251 1839/2615/251 1838/2617/251 -f 1833/2623/252 1840/2619/252 1839/2615/252 -f 1836/2625/253 1838/2617/253 1837/2616/253 -f 1835/2624/254 1836/2628/254 1834/2627/254 +f 2223/3053/249 2221/3054/249 2222/3055/249 +f 2218/3056/250 2224/3057/250 2217/3058/250 +f 2219/3059/251 2222/3055/251 2220/3060/251 +f 2217/3061/252 2223/3053/252 2219/3062/252 +f 2220/3063/253 2221/3054/253 2218/3064/253 +f 2219/3062/254 2218/3065/254 2217/3061/254 +f 2223/3053/249 2224/3057/249 2221/3054/249 +f 2218/3056/250 2221/3054/250 2224/3057/250 +f 2219/3059/251 2223/3053/251 2222/3055/251 +f 2217/3061/252 2224/3057/252 2223/3053/252 +f 2220/3063/253 2222/3055/253 2221/3054/253 +f 2219/3062/254 2220/3066/254 2218/3065/254 o Monitor v 2.625000 1.250000 -7.875000 v 2.625000 1.250000 -7.125000 @@ -7319,32 +8525,32 @@ vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 1.0000 0.0000 0.0000 s off -f 1841/2629/255 1845/2630/255 1842/2631/255 -f 1847/2632/256 1843/2633/256 1844/2634/256 -f 1842/2635/257 1843/2633/257 1841/2636/257 -f 1841/2637/258 1848/2638/258 1846/2639/258 -f 1845/2630/259 1844/2634/259 1842/2631/259 -f 1849/2640/260 1846/2641/260 1850/2642/260 -f 1852/2643/260 1847/2632/260 1851/2644/260 -f 1850/2645/260 1848/2638/260 1852/2646/260 -f 1851/2647/260 1845/2630/260 1849/2648/260 -f 1850/2642/256 1853/2649/256 1849/2640/256 -f 1852/2646/259 1854/2650/259 1850/2645/259 -f 1851/2644/255 1856/2651/255 1852/2643/255 -f 1849/2648/258 1855/2652/258 1851/2647/258 -f 1841/2629/255 1846/2641/255 1845/2630/255 -f 1847/2632/256 1848/2638/256 1843/2633/256 -f 1842/2635/257 1844/2634/257 1843/2633/257 -f 1841/2637/258 1843/2633/258 1848/2638/258 -f 1845/2630/259 1847/2632/259 1844/2634/259 -f 1849/2640/260 1845/2630/260 1846/2641/260 -f 1852/2643/260 1848/2638/260 1847/2632/260 -f 1850/2645/260 1846/2639/260 1848/2638/260 -f 1851/2647/260 1847/2632/260 1845/2630/260 -f 1850/2642/256 1854/2653/256 1853/2649/256 -f 1852/2646/259 1856/2654/259 1854/2650/259 -f 1851/2644/255 1855/2655/255 1856/2651/255 -f 1849/2648/258 1853/2656/258 1855/2652/258 +f 2225/3067/255 2229/3068/255 2226/3069/255 +f 2231/3070/256 2227/3071/256 2228/3072/256 +f 2226/3073/257 2227/3071/257 2225/3074/257 +f 2225/3075/258 2232/3076/258 2230/3077/258 +f 2229/3068/259 2228/3072/259 2226/3069/259 +f 2233/3078/260 2230/3079/260 2234/3080/260 +f 2236/3081/260 2231/3070/260 2235/3082/260 +f 2234/3083/260 2232/3076/260 2236/3084/260 +f 2235/3085/260 2229/3068/260 2233/3086/260 +f 2234/3080/256 2237/3087/256 2233/3078/256 +f 2236/3084/259 2238/3088/259 2234/3083/259 +f 2235/3082/255 2240/3089/255 2236/3081/255 +f 2233/3086/258 2239/3090/258 2235/3085/258 +f 2225/3067/255 2230/3079/255 2229/3068/255 +f 2231/3070/256 2232/3076/256 2227/3071/256 +f 2226/3073/257 2228/3072/257 2227/3071/257 +f 2225/3075/258 2227/3071/258 2232/3076/258 +f 2229/3068/259 2231/3070/259 2228/3072/259 +f 2233/3078/260 2229/3068/260 2230/3079/260 +f 2236/3081/260 2232/3076/260 2231/3070/260 +f 2234/3083/260 2230/3077/260 2232/3076/260 +f 2235/3085/260 2231/3070/260 2229/3068/260 +f 2234/3080/256 2238/3091/256 2237/3087/256 +f 2236/3084/259 2240/3092/259 2238/3088/259 +f 2235/3082/255 2239/3093/255 2240/3089/255 +f 2233/3086/258 2237/3094/258 2239/3090/258 o Screen v 3.312500 1.312500 -7.187500 v 3.312500 1.312500 -7.812500 @@ -7371,16 +8577,16 @@ vn 0.9428 0.2357 0.2357 vn 0.9428 0.2357 -0.2357 vn 0.9428 -0.2357 0.2357 s 1 -f 1862/2657/261 1863/2658/262 1861/2659/263 -f 1861/2659/263 1858/2660/264 1862/2657/261 -f 1864/2661/265 1859/2662/266 1863/2658/262 -f 1862/2657/261 1860/2663/267 1864/2661/265 -f 1863/2658/262 1857/2664/268 1861/2659/263 -f 1862/2657/261 1864/2661/265 1863/2658/262 -f 1861/2659/263 1857/2664/268 1858/2660/264 -f 1864/2661/265 1860/2663/267 1859/2662/266 -f 1862/2657/261 1858/2660/264 1860/2663/267 -f 1863/2658/262 1859/2662/266 1857/2664/268 +f 2246/3095/261 2247/3096/262 2245/3097/263 +f 2245/3097/263 2242/3098/264 2246/3095/261 +f 2248/3099/265 2243/3100/266 2247/3096/262 +f 2246/3095/261 2244/3101/267 2248/3099/265 +f 2247/3096/262 2241/3102/268 2245/3097/263 +f 2246/3095/261 2248/3099/265 2247/3096/262 +f 2245/3097/263 2241/3102/268 2242/3098/264 +f 2248/3099/265 2244/3101/267 2243/3100/266 +f 2246/3095/261 2242/3098/264 2244/3101/267 +f 2247/3096/262 2243/3100/266 2241/3102/268 o SuspensionCoverFront v -0.500000 6.500000 0.500000 v -0.676777 6.426777 0.500000 @@ -7446,6 +8652,38 @@ v 1.000000 6.312500 3.500000 v 1.132583 6.367417 3.500000 v 1.187500 6.500000 3.500000 v 1.132583 6.632583 3.500000 +v -0.500000 6.500000 0.500000 +v -0.676777 6.426777 0.500000 +v -0.750000 6.250000 0.500000 +v -0.676777 6.073223 0.500000 +v -0.500000 6.000000 0.500000 +v -0.323223 6.073223 0.500000 +v -0.250000 6.250000 0.500000 +v -0.323223 6.426777 0.500000 +v -1.000000 6.750000 3.500000 +v -1.176777 6.676777 3.500000 +v -1.250000 6.500000 3.500000 +v -1.176777 6.323223 3.500000 +v -1.000000 6.250000 3.500000 +v -0.823223 6.323223 3.500000 +v -0.750000 6.500000 3.500000 +v -0.823223 6.676777 3.500000 +v 0.500000 6.500000 0.500000 +v 0.323223 6.426777 0.500000 +v 0.250000 6.250000 0.500000 +v 0.323223 6.073223 0.500000 +v 0.500000 6.000000 0.500000 +v 0.676777 6.073223 0.500000 +v 0.750000 6.250000 0.500000 +v 0.676777 6.426777 0.500000 +v 1.000000 6.750000 3.500000 +v 0.823223 6.676777 3.500000 +v 0.750000 6.500000 3.500000 +v 0.823223 6.323223 3.500000 +v 1.000000 6.250000 3.500000 +v 1.176777 6.323223 3.500000 +v 1.250000 6.500000 3.500000 +v 1.176777 6.676777 3.500000 vt 0.847676 0.560465 vt 0.805508 0.553488 vt 0.846816 0.553488 @@ -7514,10 +8752,46 @@ vt 0.845095 0.600000 vt 0.803787 0.595349 vt 0.845095 0.595349 vt 0.803787 0.600000 +vt 0.805508 0.553488 +vt 0.847676 0.560465 +vt 0.846816 0.553488 +vt 0.806368 0.560465 +vt 0.848537 0.567442 +vt 0.807229 0.567442 +vt 0.849398 0.574419 +vt 0.808950 0.581395 +vt 0.850258 0.581395 +vt 0.809811 0.588372 +vt 0.851119 0.588372 +vt 0.810671 0.595349 +vt 0.851979 0.595349 +vt 0.845095 0.539535 +vt 0.804647 0.546512 +vt 0.845955 0.546512 +vt 0.805508 0.553488 +vt 0.847676 0.560465 +vt 0.846816 0.553488 +vt 0.807229 0.567442 +vt 0.848537 0.567442 +vt 0.808089 0.574419 +vt 0.849398 0.574419 +vt 0.808950 0.581395 +vt 0.850258 0.581395 +vt 0.809811 0.588372 +vt 0.851119 0.588372 +vt 0.851979 0.595349 +vt 0.803787 0.539535 +vt 0.845955 0.546512 +vt 0.845095 0.539535 +vt 0.804647 0.546512 vt 0.851979 0.595349 vt 0.845095 0.632558 vt 0.810671 0.595349 vt 0.803787 0.632558 +vt 0.808089 0.574419 +vt 0.803787 0.539535 +vt 0.806368 0.560465 +vt 0.810671 0.595349 vn 0.7343 0.6756 0.0661 vn 0.9865 0.0209 0.1627 vn 0.9860 -0.0186 0.1659 @@ -7551,70 +8825,102 @@ vn 0.6749 -0.7362 -0.0511 vn 0.0411 -0.9962 0.0762 vn 0.7343 -0.6756 -0.0661 s 1 -f 1872/2665/269 1887/2666/270 1871/2667/271 -f 1880/2668/269 1895/2669/270 1879/2670/271 -f 1865/2671/272 1888/2672/273 1872/2665/269 -f 1866/2673/274 1881/2674/275 1865/2671/272 -f 1873/2675/272 1896/2676/273 1880/2668/269 -f 1874/2677/274 1889/2678/275 1873/2675/272 -f 1866/2673/274 1883/2679/276 1882/2680/277 -f 1874/2677/274 1891/2681/276 1890/2682/277 -f 1867/2683/278 1884/2684/279 1883/2679/276 -f 1875/2685/278 1892/2686/279 1891/2681/276 -f 1868/2687/280 1885/2688/281 1884/2684/279 -f 1876/2689/280 1893/2690/281 1892/2686/279 -f 1869/2691/282 1886/2692/283 1885/2693/281 -f 1877/2694/282 1894/2695/283 1893/2696/281 -f 1871/2667/271 1886/2692/283 1870/2697/284 -f 1879/2670/271 1894/2695/283 1878/2698/284 -f 1904/2699/285 1911/2700/286 1903/2701/287 -f 1904/2699/285 1905/2702/288 1912/2703/289 -f 1897/2704/290 1906/2705/291 1905/2702/288 -f 1898/2706/292 1907/2707/293 1906/2705/291 -f 1899/2708/294 1908/2709/295 1907/2707/293 -f 1901/2710/296 1908/2709/295 1900/2711/297 -f 1902/2712/298 1909/2713/299 1901/2714/296 -f 1903/2701/287 1910/2715/300 1902/2712/298 -f 1920/2716/285 1927/2717/286 1919/2718/287 -f 1920/2716/285 1921/2719/288 1928/2720/289 -f 1913/2721/290 1922/2722/291 1921/2719/288 -f 1914/2723/292 1923/2724/293 1922/2722/291 -f 1915/2725/294 1924/2726/295 1923/2724/293 -f 1917/2727/296 1924/2726/295 1916/2728/297 -f 1918/2729/298 1925/2730/299 1917/2731/296 -f 1919/2718/287 1926/2732/300 1918/2729/298 -f 1872/2665/269 1888/2672/273 1887/2666/270 -f 1880/2668/269 1896/2676/273 1895/2669/270 -f 1865/2671/272 1881/2674/275 1888/2672/273 -f 1866/2673/274 1882/2680/277 1881/2674/275 -f 1873/2675/272 1889/2678/275 1896/2676/273 -f 1874/2677/274 1890/2682/277 1889/2678/275 -f 1866/2673/274 1867/2683/278 1883/2679/276 -f 1874/2677/274 1875/2685/278 1891/2681/276 -f 1867/2683/278 1868/2687/280 1884/2684/279 -f 1875/2685/278 1876/2689/280 1892/2686/279 -f 1868/2687/280 1869/2733/282 1885/2688/281 -f 1876/2689/280 1877/2734/282 1893/2690/281 -f 1869/2691/282 1870/2697/284 1886/2692/283 -f 1877/2694/282 1878/2698/284 1894/2695/283 -f 1871/2667/271 1887/2666/270 1886/2692/283 -f 1879/2670/271 1895/2669/270 1894/2695/283 -f 1904/2699/285 1912/2703/289 1911/2700/286 -f 1904/2699/285 1897/2704/290 1905/2702/288 -f 1897/2704/290 1898/2706/292 1906/2705/291 -f 1898/2706/292 1899/2708/294 1907/2707/293 -f 1899/2708/294 1900/2711/297 1908/2709/295 -f 1901/2710/296 1909/2735/299 1908/2709/295 -f 1902/2712/298 1910/2715/300 1909/2713/299 -f 1903/2701/287 1911/2700/286 1910/2715/300 -f 1920/2716/285 1928/2720/289 1927/2717/286 -f 1920/2716/285 1913/2721/290 1921/2719/288 -f 1913/2721/290 1914/2723/292 1922/2722/291 -f 1914/2723/292 1915/2725/294 1923/2724/293 -f 1915/2725/294 1916/2728/297 1924/2726/295 -f 1917/2727/296 1925/2736/299 1924/2726/295 -f 1918/2729/298 1926/2732/300 1925/2730/299 -f 1919/2718/287 1927/2717/286 1926/2732/300 +f 2256/3103/269 2271/3104/270 2255/3105/271 +f 2264/3106/269 2279/3107/270 2263/3108/271 +f 2249/3109/272 2272/3110/273 2256/3103/269 +f 2250/3111/274 2265/3112/275 2249/3109/272 +f 2257/3113/272 2280/3114/273 2264/3106/269 +f 2258/3115/274 2273/3116/275 2257/3113/272 +f 2250/3111/274 2267/3117/276 2266/3118/277 +f 2258/3115/274 2275/3119/276 2274/3120/277 +f 2251/3121/278 2268/3122/279 2267/3117/276 +f 2259/3123/278 2276/3124/279 2275/3119/276 +f 2252/3125/280 2269/3126/281 2268/3122/279 +f 2260/3127/280 2277/3128/281 2276/3124/279 +f 2253/3129/282 2270/3130/283 2269/3131/281 +f 2261/3132/282 2278/3133/283 2277/3134/281 +f 2255/3105/271 2270/3130/283 2254/3135/284 +f 2263/3108/271 2278/3133/283 2262/3136/284 +f 2288/3137/285 2295/3138/286 2287/3139/287 +f 2288/3137/285 2289/3140/288 2296/3141/289 +f 2281/3142/290 2290/3143/291 2289/3140/288 +f 2282/3144/292 2291/3145/293 2290/3143/291 +f 2283/3146/294 2292/3147/295 2291/3145/293 +f 2285/3148/296 2292/3147/295 2284/3149/297 +f 2286/3150/298 2293/3151/299 2285/3152/296 +f 2287/3139/287 2294/3153/300 2286/3150/298 +f 2304/3154/285 2311/3155/286 2303/3156/287 +f 2304/3154/285 2305/3157/288 2312/3158/289 +f 2297/3159/290 2306/3160/291 2305/3157/288 +f 2298/3161/292 2307/3162/293 2306/3160/291 +f 2299/3163/294 2308/3164/295 2307/3162/293 +f 2301/3165/296 2308/3164/295 2300/3166/297 +f 2302/3167/298 2309/3168/299 2301/3169/296 +f 2303/3156/287 2310/3170/300 2302/3167/298 +f 2327/3171/278 2320/3172/279 2319/3173/276 +f 2328/3174/280 2313/3175/281 2320/3172/279 +f 2321/3176/282 2314/3177/283 2313/3175/281 +f 2314/3177/283 2323/3178/271 2315/3179/270 +f 2315/3179/270 2324/3180/269 2316/3181/273 +f 2316/3181/273 2325/3182/272 2317/3183/275 +f 2317/3184/275 2326/3185/274 2318/3186/277 +f 2326/3185/274 2319/3173/276 2318/3186/277 +f 2343/3187/294 2336/3188/295 2335/3189/293 +f 2336/3188/295 2337/3190/296 2329/3191/299 +f 2329/3191/299 2338/3192/298 2330/3193/300 +f 2330/3193/300 2339/3194/287 2331/3195/286 +f 2331/3195/286 2340/3196/285 2332/3197/289 +f 2340/3196/285 2333/3198/288 2332/3197/289 +f 2341/3199/290 2334/3200/291 2333/3201/288 +f 2342/3202/292 2335/3189/293 2334/3200/291 +f 2256/3103/269 2272/3110/273 2271/3104/270 +f 2264/3106/269 2280/3114/273 2279/3107/270 +f 2249/3109/272 2265/3112/275 2272/3110/273 +f 2250/3111/274 2266/3118/277 2265/3112/275 +f 2257/3113/272 2273/3116/275 2280/3114/273 +f 2258/3115/274 2274/3120/277 2273/3116/275 +f 2250/3111/274 2251/3121/278 2267/3117/276 +f 2258/3115/274 2259/3123/278 2275/3119/276 +f 2251/3121/278 2252/3125/280 2268/3122/279 +f 2259/3123/278 2260/3127/280 2276/3124/279 +f 2252/3125/280 2253/3203/282 2269/3126/281 +f 2260/3127/280 2261/3204/282 2277/3128/281 +f 2253/3129/282 2254/3135/284 2270/3130/283 +f 2261/3132/282 2262/3136/284 2278/3133/283 +f 2255/3105/271 2271/3104/270 2270/3130/283 +f 2263/3108/271 2279/3107/270 2278/3133/283 +f 2288/3137/285 2296/3141/289 2295/3138/286 +f 2288/3137/285 2281/3142/290 2289/3140/288 +f 2281/3142/290 2282/3144/292 2290/3143/291 +f 2282/3144/292 2283/3146/294 2291/3145/293 +f 2283/3146/294 2284/3149/297 2292/3147/295 +f 2285/3148/296 2293/3205/299 2292/3147/295 +f 2286/3150/298 2294/3153/300 2293/3151/299 +f 2287/3139/287 2295/3138/286 2294/3153/300 +f 2304/3154/285 2312/3158/289 2311/3155/286 +f 2304/3154/285 2297/3159/290 2305/3157/288 +f 2297/3159/290 2298/3161/292 2306/3160/291 +f 2298/3161/292 2299/3163/294 2307/3162/293 +f 2299/3163/294 2300/3166/297 2308/3164/295 +f 2301/3165/296 2309/3206/299 2308/3164/295 +f 2302/3167/298 2310/3170/300 2309/3168/299 +f 2303/3156/287 2311/3155/286 2310/3170/300 +f 2327/3171/278 2328/3174/280 2320/3172/279 +f 2328/3174/280 2321/3176/282 2313/3175/281 +f 2321/3176/282 2322/3207/284 2314/3177/283 +f 2314/3177/283 2322/3207/284 2323/3178/271 +f 2315/3179/270 2323/3178/271 2324/3180/269 +f 2316/3181/273 2324/3180/269 2325/3182/272 +f 2317/3184/275 2325/3208/272 2326/3185/274 +f 2326/3185/274 2327/3171/278 2319/3173/276 +f 2343/3187/294 2344/3209/297 2336/3188/295 +f 2336/3188/295 2344/3209/297 2337/3190/296 +f 2329/3191/299 2337/3190/296 2338/3192/298 +f 2330/3193/300 2338/3192/298 2339/3194/287 +f 2331/3195/286 2339/3194/287 2340/3196/285 +f 2340/3196/285 2341/3210/290 2333/3198/288 +f 2341/3199/290 2342/3202/292 2334/3200/291 +f 2342/3202/292 2343/3187/294 2335/3189/293 o Cover v -1.000000 6.500000 0.500000 v 1.000000 6.500000 0.500000 @@ -7679,34 +8985,34 @@ vn 0.4082 -0.4082 0.8165 vn -0.4082 0.4082 -0.8165 vn 0.4082 0.4082 -0.8165 s off -f 1930/2737/301 1931/2738/301 1929/2739/301 -f 1933/2740/302 1935/2741/302 1934/2742/302 -f 1933/2740/303 1938/2743/303 1937/2744/303 -f 1936/2745/304 1939/2746/304 1935/2741/304 -f 1932/2747/305 1933/2748/305 1931/2738/305 -f 1929/2739/306 1935/2741/306 1930/2737/306 -f 1932/2747/307 1941/2749/307 1942/2750/307 -f 1931/2738/308 1943/2751/308 1929/2739/308 -f 1930/2752/309 1935/2753/309 1941/2749/309 -f 1929/2754/310 1943/2751/310 1934/2755/310 -f 1943/2751/304 1937/2756/304 1938/2757/304 -f 1931/2758/311 1933/2759/311 1944/2760/311 -f 1942/2750/303 1939/2761/303 1940/2762/303 -f 1932/2763/312 1942/2750/312 1936/2764/312 -f 1934/2755/313 1943/2751/313 1938/2757/313 -f 1941/2749/314 1935/2753/314 1939/2761/314 -f 1936/2764/315 1942/2750/315 1940/2762/315 -f 1944/2760/316 1933/2759/316 1937/2756/316 -f 1930/2737/301 1932/2747/301 1931/2738/301 -f 1933/2740/302 1936/2745/302 1935/2741/302 -f 1933/2740/303 1934/2742/303 1938/2743/303 -f 1936/2745/304 1940/2765/304 1939/2746/304 -f 1932/2747/305 1936/2766/305 1933/2748/305 -f 1929/2739/306 1934/2742/306 1935/2741/306 -f 1932/2747/307 1930/2737/307 1941/2749/307 -f 1931/2738/308 1944/2760/308 1943/2751/308 -f 1943/2751/304 1944/2760/304 1937/2756/304 -f 1942/2750/303 1941/2749/303 1939/2761/303 +f 2346/3211/301 2347/3212/301 2345/3213/301 +f 2349/3214/302 2351/3215/302 2350/3216/302 +f 2349/3214/303 2354/3217/303 2353/3218/303 +f 2352/3219/304 2355/3220/304 2351/3215/304 +f 2348/3221/305 2349/3222/305 2347/3212/305 +f 2345/3213/306 2351/3215/306 2346/3211/306 +f 2348/3221/307 2357/3223/307 2358/3224/307 +f 2347/3212/308 2359/3225/308 2345/3213/308 +f 2346/3226/309 2351/3227/309 2357/3223/309 +f 2345/3228/310 2359/3225/310 2350/3229/310 +f 2359/3225/304 2353/3230/304 2354/3231/304 +f 2347/3232/311 2349/3233/311 2360/3234/311 +f 2358/3224/303 2355/3235/303 2356/3236/303 +f 2348/3237/312 2358/3224/312 2352/3238/312 +f 2350/3229/313 2359/3225/313 2354/3231/313 +f 2357/3223/314 2351/3227/314 2355/3235/314 +f 2352/3238/315 2358/3224/315 2356/3236/315 +f 2360/3234/316 2349/3233/316 2353/3230/316 +f 2346/3211/301 2348/3221/301 2347/3212/301 +f 2349/3214/302 2352/3219/302 2351/3215/302 +f 2349/3214/303 2350/3216/303 2354/3217/303 +f 2352/3219/304 2356/3239/304 2355/3220/304 +f 2348/3221/305 2352/3240/305 2349/3222/305 +f 2345/3213/306 2350/3216/306 2351/3215/306 +f 2348/3221/307 2346/3211/307 2357/3223/307 +f 2347/3212/308 2360/3234/308 2359/3225/308 +f 2359/3225/304 2360/3234/304 2353/3230/304 +f 2358/3224/303 2357/3223/303 2355/3235/303 o Piston v 0.000000 4.999998 0.499994 v -0.574025 4.885818 0.499994 @@ -7889,103 +9195,103 @@ vn -0.0000 -1.0000 0.0000 vn 0.3827 -0.9239 0.0000 vn 0.7071 -0.7071 0.0000 s off -f 1959/2767/317 1974/2768/317 1958/2769/317 -f 1960/2770/317 1975/2771/317 1959/2772/317 -f 1945/2773/317 1976/2774/317 1960/2775/317 -f 1946/2776/317 1961/2777/317 1945/2778/317 -f 1946/2779/317 1963/2780/317 1962/2781/317 -f 1947/2782/317 1964/2783/317 1963/2780/317 -f 1948/2784/317 1965/2785/317 1964/2783/317 -f 1949/2786/317 1966/2787/317 1965/2785/317 -f 1950/2788/317 1967/2789/317 1966/2787/317 -f 1952/2790/317 1967/2789/317 1951/2791/317 -f 1952/2792/317 1969/2793/317 1968/2794/317 -f 1954/2795/317 1969/2796/317 1953/2797/317 -f 1955/2798/317 1970/2799/317 1954/2800/317 -f 1956/2801/317 1971/2802/317 1955/2803/317 -f 1957/2804/317 1972/2805/317 1956/2806/317 -f 1957/2807/317 1974/2768/317 1973/2808/317 -f 2006/2809/318 1991/2810/318 1990/2811/318 -f 2007/2812/318 1992/2813/318 1991/2814/318 -f 2008/2815/318 1978/2816/318 1992/2817/318 -f 1994/2818/318 1977/2819/318 1978/2820/318 -f 1977/2821/318 1995/2822/318 1979/2823/318 -f 1979/2824/318 1996/2825/318 1980/2826/318 -f 1996/2825/318 1981/2827/318 1980/2828/318 -f 1981/2829/318 1998/2830/318 1982/2831/318 -f 1982/2832/318 1999/2833/318 1983/2834/318 -f 1999/2833/318 1984/2835/318 1983/2836/318 -f 1984/2837/318 2001/2838/318 1985/2839/318 -f 2001/2840/318 1986/2841/318 1985/2842/318 -f 2002/2843/318 1987/2844/318 1986/2845/318 -f 2003/2846/318 1988/2847/318 1987/2848/318 -f 2004/2849/318 1989/2850/318 1988/2851/318 -f 1989/2852/318 2006/2809/318 1990/2853/318 -f 1959/2767/317 1975/2771/317 1974/2768/317 -f 1960/2770/317 1976/2774/317 1975/2771/317 -f 1945/2773/317 1961/2777/317 1976/2774/317 -f 1946/2776/317 1962/2781/317 1961/2777/317 -f 1946/2779/317 1947/2854/317 1963/2780/317 -f 1947/2782/317 1948/2855/317 1964/2783/317 -f 1948/2784/317 1949/2856/317 1965/2785/317 -f 1949/2786/317 1950/2857/317 1966/2787/317 -f 1950/2788/317 1951/2858/317 1967/2789/317 -f 1952/2790/317 1968/2794/317 1967/2789/317 -f 1952/2792/317 1953/2859/317 1969/2793/317 -f 1954/2795/317 1970/2799/317 1969/2796/317 -f 1955/2798/317 1971/2802/317 1970/2799/317 -f 1956/2801/317 1972/2805/317 1971/2802/317 -f 1957/2804/317 1973/2808/317 1972/2805/317 -f 1957/2807/317 1958/2860/317 1974/2768/317 -f 2006/2809/318 2007/2812/318 1991/2810/318 -f 2007/2812/318 2008/2815/318 1992/2813/318 -f 2008/2815/318 1994/2818/318 1978/2816/318 -f 1994/2818/318 1993/2861/318 1977/2819/318 -f 1977/2821/318 1993/2861/318 1995/2822/318 -f 1979/2824/318 1995/2822/318 1996/2825/318 -f 1996/2825/318 1997/2862/318 1981/2827/318 -f 1981/2829/318 1997/2862/318 1998/2830/318 -f 1982/2832/318 1998/2830/318 1999/2833/318 -f 1999/2833/318 2000/2863/318 1984/2835/318 -f 1984/2837/318 2000/2863/318 2001/2838/318 -f 2001/2840/318 2002/2843/318 1986/2841/318 -f 2002/2843/318 2003/2846/318 1987/2844/318 -f 2003/2846/318 2004/2849/318 1988/2847/318 -f 2004/2849/318 2005/2864/318 1989/2850/318 -f 1989/2852/318 2005/2864/318 2006/2809/318 +f 2375/3241/317 2390/3242/317 2374/3243/317 +f 2376/3244/317 2391/3245/317 2375/3246/317 +f 2361/3247/317 2392/3248/317 2376/3249/317 +f 2362/3250/317 2377/3251/317 2361/3252/317 +f 2362/3253/317 2379/3254/317 2378/3255/317 +f 2363/3256/317 2380/3257/317 2379/3254/317 +f 2364/3258/317 2381/3259/317 2380/3257/317 +f 2365/3260/317 2382/3261/317 2381/3259/317 +f 2366/3262/317 2383/3263/317 2382/3261/317 +f 2368/3264/317 2383/3263/317 2367/3265/317 +f 2368/3266/317 2385/3267/317 2384/3268/317 +f 2370/3269/317 2385/3270/317 2369/3271/317 +f 2371/3272/317 2386/3273/317 2370/3274/317 +f 2372/3275/317 2387/3276/317 2371/3277/317 +f 2373/3278/317 2388/3279/317 2372/3280/317 +f 2373/3281/317 2390/3242/317 2389/3282/317 +f 2422/3283/318 2407/3284/318 2406/3285/318 +f 2423/3286/318 2408/3287/318 2407/3288/318 +f 2424/3289/318 2394/3290/318 2408/3291/318 +f 2410/3292/318 2393/3293/318 2394/3294/318 +f 2393/3295/318 2411/3296/318 2395/3297/318 +f 2395/3298/318 2412/3299/318 2396/3300/318 +f 2412/3299/318 2397/3301/318 2396/3302/318 +f 2397/3303/318 2414/3304/318 2398/3305/318 +f 2398/3306/318 2415/3307/318 2399/3308/318 +f 2415/3307/318 2400/3309/318 2399/3310/318 +f 2400/3311/318 2417/3312/318 2401/3313/318 +f 2417/3314/318 2402/3315/318 2401/3316/318 +f 2418/3317/318 2403/3318/318 2402/3319/318 +f 2419/3320/318 2404/3321/318 2403/3322/318 +f 2420/3323/318 2405/3324/318 2404/3325/318 +f 2405/3326/318 2422/3283/318 2406/3327/318 +f 2375/3241/317 2391/3245/317 2390/3242/317 +f 2376/3244/317 2392/3248/317 2391/3245/317 +f 2361/3247/317 2377/3251/317 2392/3248/317 +f 2362/3250/317 2378/3255/317 2377/3251/317 +f 2362/3253/317 2363/3328/317 2379/3254/317 +f 2363/3256/317 2364/3329/317 2380/3257/317 +f 2364/3258/317 2365/3330/317 2381/3259/317 +f 2365/3260/317 2366/3331/317 2382/3261/317 +f 2366/3262/317 2367/3332/317 2383/3263/317 +f 2368/3264/317 2384/3268/317 2383/3263/317 +f 2368/3266/317 2369/3333/317 2385/3267/317 +f 2370/3269/317 2386/3273/317 2385/3270/317 +f 2371/3272/317 2387/3276/317 2386/3273/317 +f 2372/3275/317 2388/3279/317 2387/3276/317 +f 2373/3278/317 2389/3282/317 2388/3279/317 +f 2373/3281/317 2374/3334/317 2390/3242/317 +f 2422/3283/318 2423/3286/318 2407/3284/318 +f 2423/3286/318 2424/3289/318 2408/3287/318 +f 2424/3289/318 2410/3292/318 2394/3290/318 +f 2410/3292/318 2409/3335/318 2393/3293/318 +f 2393/3295/318 2409/3335/318 2411/3296/318 +f 2395/3298/318 2411/3296/318 2412/3299/318 +f 2412/3299/318 2413/3336/318 2397/3301/318 +f 2397/3303/318 2413/3336/318 2414/3304/318 +f 2398/3306/318 2414/3304/318 2415/3307/318 +f 2415/3307/318 2416/3337/318 2400/3309/318 +f 2400/3311/318 2416/3337/318 2417/3312/318 +f 2417/3314/318 2418/3317/318 2402/3315/318 +f 2418/3317/318 2419/3320/318 2403/3318/318 +f 2419/3320/318 2420/3323/318 2404/3321/318 +f 2420/3323/318 2421/3338/318 2405/3324/318 +f 2405/3326/318 2421/3338/318 2422/3283/318 s 1 -f 1973/2808/319 2004/2849/320 1972/2805/320 -f 1974/2768/321 2005/2864/319 1973/2808/319 -f 1975/2771/322 2006/2809/321 1974/2768/321 -f 1962/2781/323 1994/2818/324 1961/2777/324 -f 1976/2774/325 2007/2812/322 1975/2771/322 -f 1963/2780/326 1993/2861/323 1962/2781/323 -f 1961/2777/324 2008/2815/325 1976/2774/325 -f 1964/2783/327 1995/2822/326 1963/2780/326 -f 1965/2785/328 1996/2825/327 1964/2783/327 -f 1966/2787/329 1997/2862/328 1965/2785/328 -f 1967/2789/330 1998/2830/329 1966/2787/329 -f 1968/2794/331 1999/2833/330 1967/2789/330 -f 1969/2793/332 2000/2863/331 1968/2794/331 -f 1970/2799/333 2001/2840/332 1969/2796/332 -f 1971/2802/334 2002/2843/333 1970/2799/333 -f 1972/2805/320 2003/2846/334 1971/2802/334 -f 1973/2808/319 2005/2864/319 2004/2849/320 -f 1974/2768/321 2006/2809/321 2005/2864/319 -f 1975/2771/322 2007/2812/322 2006/2809/321 -f 1962/2781/323 1993/2861/323 1994/2818/324 -f 1976/2774/325 2008/2815/325 2007/2812/322 -f 1963/2780/326 1995/2822/326 1993/2861/323 -f 1961/2777/324 1994/2818/324 2008/2815/325 -f 1964/2783/327 1996/2825/327 1995/2822/326 -f 1965/2785/328 1997/2862/328 1996/2825/327 -f 1966/2787/329 1998/2830/329 1997/2862/328 -f 1967/2789/330 1999/2833/330 1998/2830/329 -f 1968/2794/331 2000/2863/331 1999/2833/330 -f 1969/2793/332 2001/2838/332 2000/2863/331 -f 1970/2799/333 2002/2843/333 2001/2840/332 -f 1971/2802/334 2003/2846/334 2002/2843/333 -f 1972/2805/320 2004/2849/320 2003/2846/334 +f 2389/3282/319 2420/3323/320 2388/3279/320 +f 2390/3242/321 2421/3338/319 2389/3282/319 +f 2391/3245/322 2422/3283/321 2390/3242/321 +f 2378/3255/323 2410/3292/324 2377/3251/324 +f 2392/3248/325 2423/3286/322 2391/3245/322 +f 2379/3254/326 2409/3335/323 2378/3255/323 +f 2377/3251/324 2424/3289/325 2392/3248/325 +f 2380/3257/327 2411/3296/326 2379/3254/326 +f 2381/3259/328 2412/3299/327 2380/3257/327 +f 2382/3261/329 2413/3336/328 2381/3259/328 +f 2383/3263/330 2414/3304/329 2382/3261/329 +f 2384/3268/331 2415/3307/330 2383/3263/330 +f 2385/3267/332 2416/3337/331 2384/3268/331 +f 2386/3273/333 2417/3314/332 2385/3270/332 +f 2387/3276/334 2418/3317/333 2386/3273/333 +f 2388/3279/320 2419/3320/334 2387/3276/334 +f 2389/3282/319 2421/3338/319 2420/3323/320 +f 2390/3242/321 2422/3283/321 2421/3338/319 +f 2391/3245/322 2423/3286/322 2422/3283/321 +f 2378/3255/323 2409/3335/323 2410/3292/324 +f 2392/3248/325 2424/3289/325 2423/3286/322 +f 2379/3254/326 2411/3296/326 2409/3335/323 +f 2377/3251/324 2410/3292/324 2424/3289/325 +f 2380/3257/327 2412/3299/327 2411/3296/326 +f 2381/3259/328 2413/3336/328 2412/3299/327 +f 2382/3261/329 2414/3304/329 2413/3336/328 +f 2383/3263/330 2415/3307/330 2414/3304/329 +f 2384/3268/331 2416/3337/331 2415/3307/330 +f 2385/3267/332 2417/3312/332 2416/3337/331 +f 2386/3273/333 2418/3317/333 2417/3314/332 +f 2387/3276/334 2419/3320/334 2418/3317/333 +f 2388/3279/320 2420/3323/320 2419/3320/334 o Flap v -0.750000 6.812501 8.750000 v 0.750000 6.812501 8.750000 @@ -8049,30 +9355,30 @@ vn -0.9965 0.0000 -0.0830 vn 0.9965 -0.0000 -0.0830 vn 0.0000 -0.9965 -0.0830 s off -f 2011/2865/335 2010/2866/335 2009/2867/335 -f 2014/2868/336 2009/2867/336 2010/2866/336 -f 2011/2865/337 2014/2869/337 2012/2870/337 -f 2010/2866/338 2012/2870/338 2014/2871/338 -f 2009/2867/339 2013/2872/339 2011/2865/339 -f 2017/2873/340 2030/2874/340 2029/2875/340 -f 2017/2873/341 2027/2876/341 2015/2877/341 -f 2018/2878/342 2028/2879/342 2030/2874/342 -f 2026/2880/343 2021/2881/343 2025/2882/343 -f 2025/2882/342 2019/2883/342 2023/2884/342 -f 2026/2885/341 2020/2886/341 2022/2887/341 -f 2024/2888/340 2019/2883/340 2020/2886/340 -f 2016/2889/343 2027/2890/343 2028/2879/343 -f 2011/2865/335 2012/2870/335 2010/2866/335 -f 2014/2868/336 2013/2891/336 2009/2867/336 -f 2011/2865/337 2013/2892/337 2014/2869/337 -f 2017/2873/340 2018/2878/340 2030/2874/340 -f 2017/2873/341 2029/2875/341 2027/2876/341 -f 2018/2878/342 2016/2889/342 2028/2879/342 -f 2026/2880/343 2022/2893/343 2021/2881/343 -f 2025/2882/342 2021/2881/342 2019/2883/342 -f 2026/2885/341 2024/2888/341 2020/2886/341 -f 2024/2888/340 2023/2884/340 2019/2883/340 -f 2016/2889/343 2015/2894/343 2027/2890/343 +f 2427/3339/335 2426/3340/335 2425/3341/335 +f 2430/3342/336 2425/3341/336 2426/3340/336 +f 2427/3339/337 2430/3343/337 2428/3344/337 +f 2426/3340/338 2428/3344/338 2430/3345/338 +f 2425/3341/339 2429/3346/339 2427/3339/339 +f 2433/3347/340 2446/3348/340 2445/3349/340 +f 2433/3347/341 2443/3350/341 2431/3351/341 +f 2434/3352/342 2444/3353/342 2446/3348/342 +f 2442/3354/343 2437/3355/343 2441/3356/343 +f 2441/3356/342 2435/3357/342 2439/3358/342 +f 2442/3359/341 2436/3360/341 2438/3361/341 +f 2440/3362/340 2435/3357/340 2436/3360/340 +f 2432/3363/343 2443/3364/343 2444/3353/343 +f 2427/3339/335 2428/3344/335 2426/3340/335 +f 2430/3342/336 2429/3365/336 2425/3341/336 +f 2427/3339/337 2429/3366/337 2430/3343/337 +f 2433/3347/340 2434/3352/340 2446/3348/340 +f 2433/3347/341 2445/3349/341 2443/3350/341 +f 2434/3352/342 2432/3363/342 2444/3353/342 +f 2442/3354/343 2438/3367/343 2437/3355/343 +f 2441/3356/342 2437/3355/342 2435/3357/342 +f 2442/3359/341 2440/3362/341 2436/3360/341 +f 2440/3362/340 2439/3358/340 2435/3357/340 +f 2432/3363/343 2431/3368/343 2443/3364/343 o TurbineBack v -0.562500 3.249998 -5.250007 v 0.562500 3.249998 -5.250007 @@ -8285,87 +9591,87 @@ vn -0.6906 -0.6906 0.2146 vn -0.6906 0.6906 -0.2146 vn -0.6906 0.6906 0.2146 s off -f 2053/2895/344 2045/2896/344 2043/2897/344 -f 2047/2898/345 2037/2899/345 2034/2900/345 -f 2045/2901/344 2048/2902/344 2042/2903/344 -f 2051/2904/345 2035/2905/345 2037/2906/345 -f 2057/2907/344 2041/2908/344 2039/2909/344 -f 2055/2910/345 2031/2911/345 2033/2912/345 -f 2038/2913/345 2059/2914/345 2032/2915/345 -f 2062/2916/344 2046/2917/344 2040/2918/344 -f 2064/2919/345 2033/2920/345 2035/2921/345 -f 2066/2922/344 2043/2923/344 2041/2924/344 -f 2069/2925/344 2044/2926/344 2046/2927/344 -f 2067/2928/345 2038/2929/345 2036/2930/345 -f 2067/2928/346 2036/2931/346 2046/2932/346 -f 2073/2933/344 2040/2934/344 2042/2935/344 -f 2060/2936/347 2040/2937/347 2072/2938/347 -f 2071/2939/345 2034/2940/345 2032/2941/345 -f 2042/2942/348 2071/2939/348 2032/2943/348 -f 2047/2898/349 2045/2944/349 2052/2945/349 -f 2077/2946/344 2039/2947/344 2044/2948/344 -f 2051/2904/350 2043/2949/350 2065/2950/350 -f 2031/2951/345 2078/2952/345 2036/2953/345 -f 2044/2954/351 2075/2955/351 2031/2956/351 -f 2055/2910/352 2039/2957/352 2076/2958/352 -f 2056/2959/353 2064/2919/353 2041/2960/353 -f 2054/2961/354 2066/2922/354 2041/2962/354 -f 2050/2963/355 2053/2895/355 2043/2964/355 -f 2049/2965/356 2045/2966/356 2074/2967/356 -f 2059/2914/357 2073/2933/357 2042/2968/357 -f 2062/2916/358 2040/2969/358 2070/2970/358 -f 2036/2971/359 2078/2952/359 2046/2972/359 -f 2058/2973/360 2077/2946/360 2044/2974/360 -f 2039/2975/361 2033/2976/361 2063/2977/361 -f 2042/2968/362 2032/2978/362 2059/2914/362 -f 2074/2967/363 2045/2966/363 2034/2979/363 -f 2043/2964/364 2037/2980/364 2050/2963/364 -f 2041/2962/365 2035/2981/365 2054/2961/365 -f 2063/2977/366 2057/2907/366 2039/2975/366 -f 2044/2974/367 2031/2982/367 2058/2973/367 -f 2046/2972/368 2078/2952/368 2069/2925/368 -f 2070/2970/369 2040/2969/369 2038/2983/369 -f 2040/2937/370 2060/2936/370 2038/2984/370 -f 2071/2939/371 2042/2942/371 2048/2902/371 -f 2045/2944/372 2047/2898/372 2034/2985/372 -f 2043/2949/373 2051/2904/373 2037/2986/373 -f 2041/2960/374 2064/2919/374 2035/2987/374 -f 2039/2957/375 2055/2910/375 2033/2988/375 -f 2075/2955/376 2044/2954/376 2068/2989/376 -f 2046/2932/377 2061/2990/377 2067/2928/377 -f 2053/2895/344 2052/2945/344 2045/2896/344 -f 2047/2898/345 2050/2963/345 2037/2899/345 -f 2045/2901/344 2049/2965/344 2048/2902/344 -f 2051/2904/345 2054/2961/345 2035/2905/345 -f 2057/2907/344 2056/2959/344 2041/2908/344 -f 2055/2910/345 2058/2973/345 2031/2911/345 -f 2038/2913/345 2060/2936/345 2059/2914/345 -f 2062/2916/344 2061/2990/344 2046/2917/344 -f 2064/2919/345 2063/2977/345 2033/2920/345 -f 2066/2922/344 2065/2950/344 2043/2923/344 -f 2069/2925/344 2068/2989/344 2044/2926/344 -f 2067/2928/345 2070/2970/345 2038/2929/345 -f 2073/2933/344 2072/2938/344 2040/2934/344 -f 2071/2939/345 2074/2967/345 2034/2940/345 -f 2077/2946/344 2076/2958/344 2039/2947/344 -f 2031/2951/345 2075/2955/345 2078/2952/345 +f 2469/3369/344 2461/3370/344 2459/3371/344 +f 2463/3372/345 2453/3373/345 2450/3374/345 +f 2461/3375/344 2464/3376/344 2458/3377/344 +f 2467/3378/345 2451/3379/345 2453/3380/345 +f 2473/3381/344 2457/3382/344 2455/3383/344 +f 2471/3384/345 2447/3385/345 2449/3386/345 +f 2454/3387/345 2475/3388/345 2448/3389/345 +f 2478/3390/344 2462/3391/344 2456/3392/344 +f 2480/3393/345 2449/3394/345 2451/3395/345 +f 2482/3396/344 2459/3397/344 2457/3398/344 +f 2485/3399/344 2460/3400/344 2462/3401/344 +f 2483/3402/345 2454/3403/345 2452/3404/345 +f 2483/3402/346 2452/3405/346 2462/3406/346 +f 2489/3407/344 2456/3408/344 2458/3409/344 +f 2476/3410/347 2456/3411/347 2488/3412/347 +f 2487/3413/345 2450/3414/345 2448/3415/345 +f 2458/3416/348 2487/3413/348 2448/3417/348 +f 2463/3372/349 2461/3418/349 2468/3419/349 +f 2493/3420/344 2455/3421/344 2460/3422/344 +f 2467/3378/350 2459/3423/350 2481/3424/350 +f 2447/3425/345 2494/3426/345 2452/3427/345 +f 2460/3428/351 2491/3429/351 2447/3430/351 +f 2471/3384/352 2455/3431/352 2492/3432/352 +f 2472/3433/353 2480/3393/353 2457/3434/353 +f 2470/3435/354 2482/3396/354 2457/3436/354 +f 2466/3437/355 2469/3369/355 2459/3438/355 +f 2465/3439/356 2461/3440/356 2490/3441/356 +f 2475/3388/357 2489/3407/357 2458/3442/357 +f 2478/3390/358 2456/3443/358 2486/3444/358 +f 2452/3445/359 2494/3426/359 2462/3446/359 +f 2474/3447/360 2493/3420/360 2460/3448/360 +f 2455/3449/361 2449/3450/361 2479/3451/361 +f 2458/3442/362 2448/3452/362 2475/3388/362 +f 2490/3441/363 2461/3440/363 2450/3453/363 +f 2459/3438/364 2453/3454/364 2466/3437/364 +f 2457/3436/365 2451/3455/365 2470/3435/365 +f 2479/3451/366 2473/3381/366 2455/3449/366 +f 2460/3448/367 2447/3456/367 2474/3447/367 +f 2462/3446/368 2494/3426/368 2485/3399/368 +f 2486/3444/369 2456/3443/369 2454/3457/369 +f 2456/3411/370 2476/3410/370 2454/3458/370 +f 2487/3413/371 2458/3416/371 2464/3376/371 +f 2461/3418/372 2463/3372/372 2450/3459/372 +f 2459/3423/373 2467/3378/373 2453/3460/373 +f 2457/3434/374 2480/3393/374 2451/3461/374 +f 2455/3431/375 2471/3384/375 2449/3462/375 +f 2491/3429/376 2460/3428/376 2484/3463/376 +f 2462/3406/377 2477/3464/377 2483/3402/377 +f 2469/3369/344 2468/3419/344 2461/3370/344 +f 2463/3372/345 2466/3437/345 2453/3373/345 +f 2461/3375/344 2465/3439/344 2464/3376/344 +f 2467/3378/345 2470/3435/345 2451/3379/345 +f 2473/3381/344 2472/3433/344 2457/3382/344 +f 2471/3384/345 2474/3447/345 2447/3385/345 +f 2454/3387/345 2476/3410/345 2475/3388/345 +f 2478/3390/344 2477/3464/344 2462/3391/344 +f 2480/3393/345 2479/3451/345 2449/3394/345 +f 2482/3396/344 2481/3424/344 2459/3397/344 +f 2485/3399/344 2484/3463/344 2460/3400/344 +f 2483/3402/345 2486/3444/345 2454/3403/345 +f 2489/3407/344 2488/3412/344 2456/3408/344 +f 2487/3413/345 2490/3441/345 2450/3414/345 +f 2493/3420/344 2492/3432/344 2455/3421/344 +f 2447/3425/345 2491/3429/345 2494/3426/345 s 1 -f 2051/2904/378 2065/2950/379 2054/2961/380 -f 2047/2898/381 2052/2945/382 2050/2963/383 -f 2049/2965/384 2074/2967/385 2048/2902/386 -f 2060/2936/387 2072/2938/388 2059/2914/389 -f 2067/2928/390 2061/2990/391 2070/2970/392 -f 2069/2925/393 2078/2952/394 2068/2989/395 -f 2055/2910/396 2076/2958/397 2058/2973/398 -f 2057/2907/399 2063/2977/400 2056/2959/401 -f 2050/2963/383 2052/2945/382 2053/2895/402 -f 2048/2902/386 2074/2967/385 2071/2939/403 -f 2059/2914/389 2072/2938/388 2073/2933/404 -f 2070/2970/392 2061/2990/391 2062/2916/405 -f 2068/2989/395 2078/2952/394 2075/2955/406 -f 2058/2973/398 2076/2958/397 2077/2946/407 -f 2056/2959/401 2063/2977/400 2064/2919/408 -f 2054/2961/380 2065/2950/379 2066/2922/409 +f 2467/3378/378 2481/3424/379 2470/3435/380 +f 2463/3372/381 2468/3419/382 2466/3437/383 +f 2465/3439/384 2490/3441/385 2464/3376/386 +f 2476/3410/387 2488/3412/388 2475/3388/389 +f 2483/3402/390 2477/3464/391 2486/3444/392 +f 2485/3399/393 2494/3426/394 2484/3463/395 +f 2471/3384/396 2492/3432/397 2474/3447/398 +f 2473/3381/399 2479/3451/400 2472/3433/401 +f 2466/3437/383 2468/3419/382 2469/3369/402 +f 2464/3376/386 2490/3441/385 2487/3413/403 +f 2475/3388/389 2488/3412/388 2489/3407/404 +f 2486/3444/392 2477/3464/391 2478/3390/405 +f 2484/3463/395 2494/3426/394 2491/3429/406 +f 2474/3447/398 2492/3432/397 2493/3420/407 +f 2472/3433/401 2479/3451/400 2480/3393/408 +f 2470/3435/380 2481/3424/379 2482/3396/409 o TurbineFront v -0.562500 3.249998 -4.250007 v 0.562500 3.249998 -4.250007 @@ -8578,87 +9884,87 @@ vn -0.6906 -0.6906 0.2146 vn -0.6906 0.6906 -0.2146 vn -0.6906 0.6906 0.2146 s off -f 2101/2991/410 2093/2992/410 2091/2993/410 -f 2095/2994/411 2085/2995/411 2082/2996/411 -f 2093/2997/410 2096/2998/410 2090/2999/410 -f 2099/3000/411 2083/3001/411 2085/3002/411 -f 2105/3003/410 2089/3004/410 2087/3005/410 -f 2103/3006/411 2079/3007/411 2081/3008/411 -f 2086/3009/411 2107/3010/411 2080/3011/411 -f 2110/3012/410 2094/3013/410 2088/3014/410 -f 2112/3015/411 2081/3016/411 2083/3017/411 -f 2089/3018/410 2113/3019/410 2091/3020/410 -f 2117/3021/410 2092/3022/410 2094/3023/410 -f 2115/3024/411 2086/3025/411 2084/3026/411 -f 2115/3024/412 2084/3027/412 2094/3028/412 -f 2121/3029/410 2088/3030/410 2090/3031/410 -f 2108/3032/413 2088/3033/413 2120/3034/413 -f 2119/3035/411 2082/3036/411 2080/3037/411 -f 2090/3038/414 2119/3035/414 2080/3039/414 -f 2095/2994/415 2093/3040/415 2100/3041/415 -f 2125/3042/410 2087/3043/410 2092/3044/410 -f 2099/3000/416 2091/3045/416 2113/3019/416 -f 2079/3046/411 2126/3047/411 2084/3048/411 -f 2092/3049/417 2123/3050/417 2079/3051/417 -f 2103/3006/418 2087/3052/418 2124/3053/418 -f 2104/3054/419 2112/3015/419 2089/3055/419 -f 2102/3056/420 2114/3057/420 2089/3058/420 -f 2098/3059/421 2101/2991/421 2091/3060/421 -f 2097/3061/422 2093/3062/422 2122/3063/422 -f 2107/3010/423 2121/3029/423 2090/3064/423 -f 2110/3012/424 2088/3065/424 2118/3066/424 -f 2084/3067/425 2126/3047/425 2094/3068/425 -f 2106/3069/426 2125/3042/426 2092/3070/426 -f 2087/3071/427 2111/3072/427 2105/3003/427 -f 2091/3045/428 2099/3000/428 2085/3073/428 -f 2089/3055/429 2112/3015/429 2083/3074/429 -f 2087/3052/430 2103/3006/430 2081/3075/430 -f 2123/3050/431 2092/3049/431 2116/3076/431 -f 2094/3028/432 2109/3077/432 2115/3024/432 -f 2088/3033/433 2108/3032/433 2086/3078/433 -f 2119/3035/434 2090/3038/434 2096/2998/434 -f 2093/3040/435 2095/2994/435 2082/3079/435 -f 2091/3060/436 2085/3080/436 2098/3059/436 -f 2122/3063/437 2093/3062/437 2082/3081/437 -f 2090/3064/438 2080/3082/438 2107/3010/438 -f 2118/3066/439 2088/3065/439 2086/3083/439 -f 2094/3068/440 2126/3047/440 2117/3021/440 -f 2092/3070/441 2079/3084/441 2106/3069/441 -f 2111/3072/442 2087/3071/442 2081/3085/442 -f 2089/3058/443 2083/3086/443 2102/3056/443 -f 2101/2991/410 2100/3041/410 2093/2992/410 -f 2095/2994/411 2098/3059/411 2085/2995/411 -f 2093/2997/410 2097/3061/410 2096/2998/410 -f 2099/3000/411 2102/3056/411 2083/3001/411 -f 2105/3003/410 2104/3054/410 2089/3004/410 -f 2103/3006/411 2106/3069/411 2079/3007/411 -f 2086/3009/411 2108/3032/411 2107/3010/411 -f 2110/3012/410 2109/3077/410 2094/3013/410 -f 2112/3015/411 2111/3072/411 2081/3016/411 -f 2089/3018/410 2114/3057/410 2113/3019/410 -f 2117/3021/410 2116/3076/410 2092/3022/410 -f 2115/3024/411 2118/3066/411 2086/3025/411 -f 2121/3029/410 2120/3034/410 2088/3030/410 -f 2119/3035/411 2122/3063/411 2082/3036/411 -f 2125/3042/410 2124/3053/410 2087/3043/410 -f 2079/3046/411 2123/3050/411 2126/3047/411 +f 2517/3465/410 2509/3466/410 2507/3467/410 +f 2511/3468/411 2501/3469/411 2498/3470/411 +f 2509/3471/410 2512/3472/410 2506/3473/410 +f 2515/3474/411 2499/3475/411 2501/3476/411 +f 2521/3477/410 2505/3478/410 2503/3479/410 +f 2519/3480/411 2495/3481/411 2497/3482/411 +f 2502/3483/411 2523/3484/411 2496/3485/411 +f 2526/3486/410 2510/3487/410 2504/3488/410 +f 2528/3489/411 2497/3490/411 2499/3491/411 +f 2505/3492/410 2529/3493/410 2507/3494/410 +f 2533/3495/410 2508/3496/410 2510/3497/410 +f 2531/3498/411 2502/3499/411 2500/3500/411 +f 2531/3498/412 2500/3501/412 2510/3502/412 +f 2537/3503/410 2504/3504/410 2506/3505/410 +f 2524/3506/413 2504/3507/413 2536/3508/413 +f 2535/3509/411 2498/3510/411 2496/3511/411 +f 2506/3512/414 2535/3509/414 2496/3513/414 +f 2511/3468/415 2509/3514/415 2516/3515/415 +f 2541/3516/410 2503/3517/410 2508/3518/410 +f 2515/3474/416 2507/3519/416 2529/3493/416 +f 2495/3520/411 2542/3521/411 2500/3522/411 +f 2508/3523/417 2539/3524/417 2495/3525/417 +f 2519/3480/418 2503/3526/418 2540/3527/418 +f 2520/3528/419 2528/3489/419 2505/3529/419 +f 2518/3530/420 2530/3531/420 2505/3532/420 +f 2514/3533/421 2517/3465/421 2507/3534/421 +f 2513/3535/422 2509/3536/422 2538/3537/422 +f 2523/3484/423 2537/3503/423 2506/3538/423 +f 2526/3486/424 2504/3539/424 2534/3540/424 +f 2500/3541/425 2542/3521/425 2510/3542/425 +f 2522/3543/426 2541/3516/426 2508/3544/426 +f 2503/3545/427 2527/3546/427 2521/3477/427 +f 2507/3519/428 2515/3474/428 2501/3547/428 +f 2505/3529/429 2528/3489/429 2499/3548/429 +f 2503/3526/430 2519/3480/430 2497/3549/430 +f 2539/3524/431 2508/3523/431 2532/3550/431 +f 2510/3502/432 2525/3551/432 2531/3498/432 +f 2504/3507/433 2524/3506/433 2502/3552/433 +f 2535/3509/434 2506/3512/434 2512/3472/434 +f 2509/3514/435 2511/3468/435 2498/3553/435 +f 2507/3534/436 2501/3554/436 2514/3533/436 +f 2538/3537/437 2509/3536/437 2498/3555/437 +f 2506/3538/438 2496/3556/438 2523/3484/438 +f 2534/3540/439 2504/3539/439 2502/3557/439 +f 2510/3542/440 2542/3521/440 2533/3495/440 +f 2508/3544/441 2495/3558/441 2522/3543/441 +f 2527/3546/442 2503/3545/442 2497/3559/442 +f 2505/3532/443 2499/3560/443 2518/3530/443 +f 2517/3465/410 2516/3515/410 2509/3466/410 +f 2511/3468/411 2514/3533/411 2501/3469/411 +f 2509/3471/410 2513/3535/410 2512/3472/410 +f 2515/3474/411 2518/3530/411 2499/3475/411 +f 2521/3477/410 2520/3528/410 2505/3478/410 +f 2519/3480/411 2522/3543/411 2495/3481/411 +f 2502/3483/411 2524/3506/411 2523/3484/411 +f 2526/3486/410 2525/3551/410 2510/3487/410 +f 2528/3489/411 2527/3546/411 2497/3490/411 +f 2505/3492/410 2530/3531/410 2529/3493/410 +f 2533/3495/410 2532/3550/410 2508/3496/410 +f 2531/3498/411 2534/3540/411 2502/3499/411 +f 2537/3503/410 2536/3508/410 2504/3504/410 +f 2535/3509/411 2538/3537/411 2498/3510/411 +f 2541/3516/410 2540/3527/410 2503/3517/410 +f 2495/3520/411 2539/3524/411 2542/3521/411 s 1 -f 2099/3000/444 2113/3019/445 2102/3056/446 -f 2095/2994/447 2100/3041/448 2098/3059/449 -f 2097/3061/450 2122/3063/451 2096/2998/452 -f 2108/3032/453 2120/3034/454 2107/3010/455 -f 2115/3024/456 2109/3077/457 2118/3066/458 -f 2117/3021/459 2126/3047/460 2116/3076/461 -f 2103/3006/462 2124/3053/463 2106/3069/464 -f 2105/3003/465 2111/3072/466 2104/3054/467 -f 2098/3059/449 2100/3041/448 2101/2991/468 -f 2096/2998/452 2122/3063/451 2119/3035/469 -f 2107/3010/455 2120/3034/454 2121/3029/470 -f 2118/3066/458 2109/3077/457 2110/3012/471 -f 2116/3076/461 2126/3047/460 2123/3050/472 -f 2106/3069/464 2124/3053/463 2125/3042/473 -f 2104/3054/467 2111/3072/466 2112/3015/474 -f 2102/3056/446 2113/3019/445 2114/3057/475 +f 2515/3474/444 2529/3493/445 2518/3530/446 +f 2511/3468/447 2516/3515/448 2514/3533/449 +f 2513/3535/450 2538/3537/451 2512/3472/452 +f 2524/3506/453 2536/3508/454 2523/3484/455 +f 2531/3498/456 2525/3551/457 2534/3540/458 +f 2533/3495/459 2542/3521/460 2532/3550/461 +f 2519/3480/462 2540/3527/463 2522/3543/464 +f 2521/3477/465 2527/3546/466 2520/3528/467 +f 2514/3533/449 2516/3515/448 2517/3465/468 +f 2512/3472/452 2538/3537/451 2535/3509/469 +f 2523/3484/455 2536/3508/454 2537/3503/470 +f 2534/3540/458 2525/3551/457 2526/3486/471 +f 2532/3550/461 2542/3521/460 2539/3524/472 +f 2522/3543/464 2540/3527/463 2541/3516/473 +f 2520/3528/467 2527/3546/466 2528/3489/474 +f 2518/3530/446 2529/3493/445 2530/3531/475 o Rotor v -0.562500 3.249998 -1.250006 v 0.562500 3.249998 -1.250006 @@ -8815,86 +10121,86 @@ vn -1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -0.7071 -0.7071 0.0000 s off -f 2144/3087/476 2146/3088/476 2143/3089/476 -f 2144/3087/477 2130/3090/477 2138/3091/477 -f 2141/3092/478 2144/3087/478 2138/3093/478 -f 2146/3088/479 2141/3094/479 2133/3095/479 -f 2143/3089/480 2133/3096/480 2130/3097/480 -f 2148/3098/481 2150/3099/481 2147/3100/481 -f 2148/3098/482 2133/3101/482 2141/3102/482 -f 2149/3103/478 2141/3104/478 2139/3105/478 -f 2150/3099/483 2139/3106/483 2131/3107/483 -f 2147/3100/480 2131/3108/480 2133/3109/480 -f 2152/3110/483 2154/3111/483 2151/3112/483 -f 2152/3110/481 2129/3113/481 2137/3114/481 -f 2153/3115/478 2137/3116/478 2135/3117/478 -f 2154/3111/484 2135/3118/484 2127/3119/484 -f 2151/3112/480 2127/3120/480 2129/3121/480 -f 2156/3122/477 2158/3123/477 2155/3124/477 -f 2134/3125/480 2155/3124/480 2128/3126/480 -f 2157/3127/485 2134/3128/485 2142/3129/485 -f 2158/3123/478 2142/3130/478 2136/3131/478 -f 2155/3124/476 2136/3132/476 2128/3133/476 -f 2160/3134/479 2162/3135/479 2159/3136/479 -f 2160/3134/480 2129/3137/480 2131/3138/480 -f 2161/3139/476 2131/3140/476 2139/3141/476 -f 2137/3142/478 2161/3139/478 2139/3143/478 -f 2159/3136/485 2137/3144/485 2129/3145/485 -f 2164/3146/484 2166/3147/484 2163/3148/484 -f 2164/3146/483 2132/3149/483 2140/3150/483 -f 2165/3151/478 2140/3152/478 2142/3153/478 -f 2166/3147/482 2142/3154/482 2134/3155/482 -f 2163/3148/480 2134/3156/480 2132/3157/480 -f 2168/3158/482 2170/3159/482 2167/3160/482 -f 2168/3158/484 2128/3161/484 2136/3162/484 -f 2169/3163/478 2136/3164/478 2138/3165/478 -f 2170/3159/481 2138/3166/481 2130/3167/481 -f 2167/3160/480 2130/3168/480 2128/3169/480 -f 2172/3170/485 2174/3171/485 2171/3172/485 -f 2172/3170/479 2127/3173/479 2135/3174/479 -f 2173/3175/478 2135/3176/478 2140/3177/478 -f 2174/3171/477 2140/3178/477 2132/3179/477 -f 2127/3180/480 2174/3171/480 2132/3181/480 -f 2144/3087/476 2145/3182/476 2146/3088/476 -f 2144/3087/477 2143/3089/477 2130/3090/477 -f 2141/3092/478 2145/3182/478 2144/3087/478 -f 2146/3088/479 2145/3182/479 2141/3094/479 -f 2143/3089/480 2146/3088/480 2133/3096/480 -f 2148/3098/481 2149/3103/481 2150/3099/481 -f 2148/3098/482 2147/3100/482 2133/3101/482 -f 2149/3103/478 2148/3098/478 2141/3104/478 -f 2150/3099/483 2149/3103/483 2139/3106/483 -f 2147/3100/480 2150/3099/480 2131/3108/480 -f 2152/3110/483 2153/3115/483 2154/3111/483 -f 2152/3110/481 2151/3112/481 2129/3113/481 -f 2153/3115/478 2152/3110/478 2137/3116/478 -f 2154/3111/484 2153/3115/484 2135/3118/484 -f 2151/3112/480 2154/3111/480 2127/3120/480 -f 2156/3122/477 2157/3127/477 2158/3123/477 -f 2134/3125/480 2156/3122/480 2155/3124/480 -f 2157/3127/485 2156/3122/485 2134/3128/485 -f 2158/3123/478 2157/3127/478 2142/3130/478 -f 2155/3124/476 2158/3123/476 2136/3132/476 -f 2160/3134/479 2161/3139/479 2162/3135/479 -f 2160/3134/480 2159/3136/480 2129/3137/480 -f 2161/3139/476 2160/3134/476 2131/3140/476 -f 2137/3142/478 2162/3135/478 2161/3139/478 -f 2159/3136/485 2162/3135/485 2137/3144/485 -f 2164/3146/484 2165/3151/484 2166/3147/484 -f 2164/3146/483 2163/3148/483 2132/3149/483 -f 2165/3151/478 2164/3146/478 2140/3152/478 -f 2166/3147/482 2165/3151/482 2142/3154/482 -f 2163/3148/480 2166/3147/480 2134/3156/480 -f 2168/3158/482 2169/3163/482 2170/3159/482 -f 2168/3158/484 2167/3160/484 2128/3161/484 -f 2169/3163/478 2168/3158/478 2136/3164/478 -f 2170/3159/481 2169/3163/481 2138/3166/481 -f 2167/3160/480 2170/3159/480 2130/3168/480 -f 2172/3170/485 2173/3175/485 2174/3171/485 -f 2172/3170/479 2171/3172/479 2127/3173/479 -f 2173/3175/478 2172/3170/478 2135/3176/478 -f 2174/3171/477 2173/3175/477 2140/3178/477 -f 2127/3180/480 2171/3172/480 2174/3171/480 +f 2560/3561/476 2562/3562/476 2559/3563/476 +f 2560/3561/477 2546/3564/477 2554/3565/477 +f 2557/3566/478 2560/3561/478 2554/3567/478 +f 2562/3562/479 2557/3568/479 2549/3569/479 +f 2559/3563/480 2549/3570/480 2546/3571/480 +f 2564/3572/481 2566/3573/481 2563/3574/481 +f 2564/3572/482 2549/3575/482 2557/3576/482 +f 2565/3577/478 2557/3578/478 2555/3579/478 +f 2566/3573/483 2555/3580/483 2547/3581/483 +f 2563/3574/480 2547/3582/480 2549/3583/480 +f 2568/3584/483 2570/3585/483 2567/3586/483 +f 2568/3584/481 2545/3587/481 2553/3588/481 +f 2569/3589/478 2553/3590/478 2551/3591/478 +f 2570/3585/484 2551/3592/484 2543/3593/484 +f 2567/3586/480 2543/3594/480 2545/3595/480 +f 2572/3596/477 2574/3597/477 2571/3598/477 +f 2550/3599/480 2571/3598/480 2544/3600/480 +f 2573/3601/485 2550/3602/485 2558/3603/485 +f 2574/3597/478 2558/3604/478 2552/3605/478 +f 2571/3598/476 2552/3606/476 2544/3607/476 +f 2576/3608/479 2578/3609/479 2575/3610/479 +f 2576/3608/480 2545/3611/480 2547/3612/480 +f 2577/3613/476 2547/3614/476 2555/3615/476 +f 2553/3616/478 2577/3613/478 2555/3617/478 +f 2575/3610/485 2553/3618/485 2545/3619/485 +f 2580/3620/484 2582/3621/484 2579/3622/484 +f 2580/3620/483 2548/3623/483 2556/3624/483 +f 2581/3625/478 2556/3626/478 2558/3627/478 +f 2582/3621/482 2558/3628/482 2550/3629/482 +f 2579/3622/480 2550/3630/480 2548/3631/480 +f 2584/3632/482 2586/3633/482 2583/3634/482 +f 2584/3632/484 2544/3635/484 2552/3636/484 +f 2585/3637/478 2552/3638/478 2554/3639/478 +f 2586/3633/481 2554/3640/481 2546/3641/481 +f 2583/3634/480 2546/3642/480 2544/3643/480 +f 2588/3644/485 2590/3645/485 2587/3646/485 +f 2588/3644/479 2543/3647/479 2551/3648/479 +f 2589/3649/478 2551/3650/478 2556/3651/478 +f 2590/3645/477 2556/3652/477 2548/3653/477 +f 2543/3654/480 2590/3645/480 2548/3655/480 +f 2560/3561/476 2561/3656/476 2562/3562/476 +f 2560/3561/477 2559/3563/477 2546/3564/477 +f 2557/3566/478 2561/3656/478 2560/3561/478 +f 2562/3562/479 2561/3656/479 2557/3568/479 +f 2559/3563/480 2562/3562/480 2549/3570/480 +f 2564/3572/481 2565/3577/481 2566/3573/481 +f 2564/3572/482 2563/3574/482 2549/3575/482 +f 2565/3577/478 2564/3572/478 2557/3578/478 +f 2566/3573/483 2565/3577/483 2555/3580/483 +f 2563/3574/480 2566/3573/480 2547/3582/480 +f 2568/3584/483 2569/3589/483 2570/3585/483 +f 2568/3584/481 2567/3586/481 2545/3587/481 +f 2569/3589/478 2568/3584/478 2553/3590/478 +f 2570/3585/484 2569/3589/484 2551/3592/484 +f 2567/3586/480 2570/3585/480 2543/3594/480 +f 2572/3596/477 2573/3601/477 2574/3597/477 +f 2550/3599/480 2572/3596/480 2571/3598/480 +f 2573/3601/485 2572/3596/485 2550/3602/485 +f 2574/3597/478 2573/3601/478 2558/3604/478 +f 2571/3598/476 2574/3597/476 2552/3606/476 +f 2576/3608/479 2577/3613/479 2578/3609/479 +f 2576/3608/480 2575/3610/480 2545/3611/480 +f 2577/3613/476 2576/3608/476 2547/3614/476 +f 2553/3616/478 2578/3609/478 2577/3613/478 +f 2575/3610/485 2578/3609/485 2553/3618/485 +f 2580/3620/484 2581/3625/484 2582/3621/484 +f 2580/3620/483 2579/3622/483 2548/3623/483 +f 2581/3625/478 2580/3620/478 2556/3626/478 +f 2582/3621/482 2581/3625/482 2558/3628/482 +f 2579/3622/480 2582/3621/480 2550/3630/480 +f 2584/3632/482 2585/3637/482 2586/3633/482 +f 2584/3632/484 2583/3634/484 2544/3635/484 +f 2585/3637/478 2584/3632/478 2552/3638/478 +f 2586/3633/481 2585/3637/481 2554/3640/481 +f 2583/3634/480 2586/3633/480 2546/3642/480 +f 2588/3644/485 2589/3649/485 2590/3645/485 +f 2588/3644/479 2587/3646/479 2543/3647/479 +f 2589/3649/478 2588/3644/478 2551/3650/478 +f 2590/3645/477 2589/3649/477 2556/3652/477 +f 2543/3654/480 2587/3646/480 2590/3645/480 o ShroudV v -1.437500 0.374996 5.500000 v 1.437500 0.374996 5.500000 @@ -9143,126 +10449,126 @@ vn -0.7071 0.7071 0.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 s off -f 2191/3183/486 2177/3184/486 2192/3185/486 -f 2194/3186/487 2176/3187/487 2193/3188/487 -f 2201/3189/487 2196/3190/487 2188/3191/487 -f 2183/3192/488 2201/3193/488 2197/3194/488 -f 2196/3190/489 2183/3195/489 2195/3196/489 -f 2198/3197/490 2201/3198/490 2202/3199/490 -f 2189/3200/491 2185/3201/491 2187/3202/491 -f 2193/3188/488 2180/3203/488 2191/3183/488 -f 2189/3200/492 2188/3191/492 2190/3204/492 -f 2188/3191/493 2195/3196/493 2190/3204/493 -f 2192/3185/490 2193/3188/490 2191/3183/490 -f 2187/3202/487 2201/3205/487 2188/3191/487 -f 2192/3185/489 2200/3206/489 2194/3186/489 -f 2190/3204/486 2198/3197/486 2189/3200/486 -f 2177/3184/492 2176/3207/492 2175/3208/492 -f 2179/3209/491 2204/3210/491 2180/3203/491 -f 2204/3211/493 2176/3212/493 2178/3213/493 -f 2176/3214/487 2179/3209/487 2193/3188/487 -f 2180/3203/486 2178/3213/486 2191/3183/486 -f 2199/3215/493 2206/3216/493 2200/3206/493 -f 2206/3217/491 2177/3218/491 2175/3219/491 -f 2200/3206/487 2175/3220/487 2194/3186/487 -f 2177/3218/486 2199/3215/486 2192/3185/486 -f 2195/3196/486 2197/3194/486 2190/3204/486 -f 2186/3221/488 2181/3222/488 2185/3201/488 -f 2181/3223/489 2198/3224/489 2202/3225/489 -f 2185/3201/487 2202/3226/487 2187/3202/487 -f 2198/3224/486 2186/3221/486 2189/3200/486 -f 2209/3227/494 2208/3228/494 2207/3229/494 -f 2213/3230/487 2210/3231/487 2209/3232/487 -f 2207/3233/486 2212/3234/486 2211/3235/486 -f 2212/3234/492 2210/3231/492 2214/3236/492 -f 2217/3237/494 2216/3238/494 2215/3239/494 -f 2221/3240/487 2218/3241/487 2217/3242/487 -f 2215/3243/486 2220/3244/486 2219/3245/486 -f 2220/3244/492 2218/3241/492 2222/3246/492 -f 2225/3247/495 2224/3248/495 2223/3249/495 -f 2229/3250/486 2226/3251/486 2225/3252/486 -f 2223/3253/487 2228/3254/487 2227/3255/487 -f 2228/3254/492 2226/3251/492 2230/3256/492 -f 2233/3257/495 2232/3258/495 2231/3259/495 -f 2237/3260/486 2234/3261/486 2233/3262/486 -f 2231/3263/487 2236/3264/487 2235/3265/487 -f 2236/3264/492 2234/3261/492 2238/3266/492 -f 2241/3267/495 2240/3268/495 2239/3269/495 -f 2245/3270/487 2242/3271/487 2241/3272/487 -f 2239/3273/486 2244/3274/486 2243/3275/486 -f 2244/3274/490 2242/3271/490 2246/3276/490 -f 2249/3277/495 2248/3278/495 2247/3279/495 -f 2253/3280/487 2250/3281/487 2249/3282/487 -f 2247/3283/486 2252/3284/486 2251/3285/486 -f 2252/3284/490 2250/3281/490 2254/3286/490 -f 2257/3287/494 2256/3288/494 2255/3289/494 -f 2261/3290/486 2258/3291/486 2257/3292/486 -f 2255/3293/487 2260/3294/487 2259/3295/487 -f 2260/3294/490 2258/3291/490 2262/3296/490 -f 2265/3297/494 2264/3298/494 2263/3299/494 -f 2269/3300/486 2266/3301/486 2265/3302/486 -f 2263/3303/487 2268/3304/487 2267/3305/487 -f 2268/3304/490 2266/3301/490 2270/3306/490 -f 2191/3183/486 2178/3307/486 2177/3184/486 -f 2194/3186/487 2175/3308/487 2176/3187/487 -f 2201/3189/487 2184/3309/487 2196/3190/487 -f 2183/3192/488 2184/3310/488 2201/3193/488 -f 2196/3190/489 2184/3311/489 2183/3195/489 -f 2198/3197/490 2197/3312/490 2201/3198/490 -f 2189/3200/491 2186/3221/491 2185/3201/491 -f 2193/3188/488 2179/3209/488 2180/3203/488 -f 2189/3200/492 2187/3202/492 2188/3191/492 -f 2188/3191/493 2196/3190/493 2195/3196/493 -f 2192/3185/490 2194/3186/490 2193/3188/490 -f 2187/3202/487 2202/3313/487 2201/3205/487 -f 2192/3185/489 2199/3215/489 2200/3206/489 -f 2190/3204/486 2197/3312/486 2198/3197/486 -f 2177/3184/492 2178/3307/492 2176/3207/492 -f 2179/3209/491 2203/3314/491 2204/3210/491 -f 2204/3211/493 2203/3315/493 2176/3212/493 -f 2176/3214/487 2203/3316/487 2179/3209/487 -f 2180/3203/486 2204/3211/486 2178/3213/486 -f 2199/3215/493 2205/3317/493 2206/3216/493 -f 2206/3217/491 2205/3318/491 2177/3218/491 -f 2200/3206/487 2206/3319/487 2175/3220/487 -f 2177/3218/486 2205/3318/486 2199/3215/486 -f 2195/3196/486 2183/3192/486 2197/3194/486 -f 2186/3221/488 2182/3320/488 2181/3222/488 -f 2181/3223/489 2182/3321/489 2198/3224/489 -f 2185/3201/487 2181/3322/487 2202/3226/487 -f 2198/3224/486 2182/3321/486 2186/3221/486 -f 2209/3227/494 2210/3231/494 2208/3228/494 -f 2213/3230/487 2214/3236/487 2210/3231/487 -f 2207/3233/486 2208/3228/486 2212/3234/486 -f 2212/3234/492 2208/3228/492 2210/3231/492 -f 2217/3237/494 2218/3241/494 2216/3238/494 -f 2221/3240/487 2222/3246/487 2218/3241/487 -f 2215/3243/486 2216/3238/486 2220/3244/486 -f 2220/3244/492 2216/3238/492 2218/3241/492 -f 2225/3247/495 2226/3251/495 2224/3248/495 -f 2229/3250/486 2230/3256/486 2226/3251/486 -f 2223/3253/487 2224/3248/487 2228/3254/487 -f 2228/3254/492 2224/3248/492 2226/3251/492 -f 2233/3257/495 2234/3261/495 2232/3258/495 -f 2237/3260/486 2238/3266/486 2234/3261/486 -f 2231/3263/487 2232/3258/487 2236/3264/487 -f 2236/3264/492 2232/3258/492 2234/3261/492 -f 2241/3267/495 2242/3271/495 2240/3268/495 -f 2245/3270/487 2246/3276/487 2242/3271/487 -f 2239/3273/486 2240/3268/486 2244/3274/486 -f 2244/3274/490 2240/3268/490 2242/3271/490 -f 2249/3277/495 2250/3281/495 2248/3278/495 -f 2253/3280/487 2254/3286/487 2250/3281/487 -f 2247/3283/486 2248/3278/486 2252/3284/486 -f 2252/3284/490 2248/3278/490 2250/3281/490 -f 2257/3287/494 2258/3291/494 2256/3288/494 -f 2261/3290/486 2262/3296/486 2258/3291/486 -f 2255/3293/487 2256/3288/487 2260/3294/487 -f 2260/3294/490 2256/3288/490 2258/3291/490 -f 2265/3297/494 2266/3301/494 2264/3298/494 -f 2269/3300/486 2270/3306/486 2266/3301/486 -f 2263/3303/487 2264/3298/487 2268/3304/487 -f 2268/3304/490 2264/3298/490 2266/3301/490 +f 2607/3657/486 2593/3658/486 2608/3659/486 +f 2610/3660/487 2592/3661/487 2609/3662/487 +f 2617/3663/487 2612/3664/487 2604/3665/487 +f 2599/3666/488 2617/3667/488 2613/3668/488 +f 2612/3664/489 2599/3669/489 2611/3670/489 +f 2614/3671/490 2617/3672/490 2618/3673/490 +f 2605/3674/491 2601/3675/491 2603/3676/491 +f 2609/3662/488 2596/3677/488 2607/3657/488 +f 2605/3674/492 2604/3665/492 2606/3678/492 +f 2604/3665/493 2611/3670/493 2606/3678/493 +f 2608/3659/490 2609/3662/490 2607/3657/490 +f 2603/3676/487 2617/3679/487 2604/3665/487 +f 2608/3659/489 2616/3680/489 2610/3660/489 +f 2606/3678/486 2614/3671/486 2605/3674/486 +f 2593/3658/492 2592/3681/492 2591/3682/492 +f 2595/3683/491 2620/3684/491 2596/3677/491 +f 2620/3685/493 2592/3686/493 2594/3687/493 +f 2592/3688/487 2595/3683/487 2609/3662/487 +f 2596/3677/486 2594/3687/486 2607/3657/486 +f 2615/3689/493 2622/3690/493 2616/3680/493 +f 2622/3691/491 2593/3692/491 2591/3693/491 +f 2616/3680/487 2591/3694/487 2610/3660/487 +f 2593/3692/486 2615/3689/486 2608/3659/486 +f 2611/3670/486 2613/3668/486 2606/3678/486 +f 2602/3695/488 2597/3696/488 2601/3675/488 +f 2597/3697/489 2614/3698/489 2618/3699/489 +f 2601/3675/487 2618/3700/487 2603/3676/487 +f 2614/3698/486 2602/3695/486 2605/3674/486 +f 2625/3701/494 2624/3702/494 2623/3703/494 +f 2629/3704/487 2626/3705/487 2625/3706/487 +f 2623/3707/486 2628/3708/486 2627/3709/486 +f 2628/3708/492 2626/3705/492 2630/3710/492 +f 2633/3711/494 2632/3712/494 2631/3713/494 +f 2637/3714/487 2634/3715/487 2633/3716/487 +f 2631/3717/486 2636/3718/486 2635/3719/486 +f 2636/3718/492 2634/3715/492 2638/3720/492 +f 2641/3721/495 2640/3722/495 2639/3723/495 +f 2645/3724/486 2642/3725/486 2641/3726/486 +f 2639/3727/487 2644/3728/487 2643/3729/487 +f 2644/3728/492 2642/3725/492 2646/3730/492 +f 2649/3731/495 2648/3732/495 2647/3733/495 +f 2653/3734/486 2650/3735/486 2649/3736/486 +f 2647/3737/487 2652/3738/487 2651/3739/487 +f 2652/3738/492 2650/3735/492 2654/3740/492 +f 2657/3741/495 2656/3742/495 2655/3743/495 +f 2661/3744/487 2658/3745/487 2657/3746/487 +f 2655/3747/486 2660/3748/486 2659/3749/486 +f 2660/3748/490 2658/3745/490 2662/3750/490 +f 2665/3751/495 2664/3752/495 2663/3753/495 +f 2669/3754/487 2666/3755/487 2665/3756/487 +f 2663/3757/486 2668/3758/486 2667/3759/486 +f 2668/3758/490 2666/3755/490 2670/3760/490 +f 2673/3761/494 2672/3762/494 2671/3763/494 +f 2677/3764/486 2674/3765/486 2673/3766/486 +f 2671/3767/487 2676/3768/487 2675/3769/487 +f 2676/3768/490 2674/3765/490 2678/3770/490 +f 2681/3771/494 2680/3772/494 2679/3773/494 +f 2685/3774/486 2682/3775/486 2681/3776/486 +f 2679/3777/487 2684/3778/487 2683/3779/487 +f 2684/3778/490 2682/3775/490 2686/3780/490 +f 2607/3657/486 2594/3781/486 2593/3658/486 +f 2610/3660/487 2591/3782/487 2592/3661/487 +f 2617/3663/487 2600/3783/487 2612/3664/487 +f 2599/3666/488 2600/3784/488 2617/3667/488 +f 2612/3664/489 2600/3785/489 2599/3669/489 +f 2614/3671/490 2613/3786/490 2617/3672/490 +f 2605/3674/491 2602/3695/491 2601/3675/491 +f 2609/3662/488 2595/3683/488 2596/3677/488 +f 2605/3674/492 2603/3676/492 2604/3665/492 +f 2604/3665/493 2612/3664/493 2611/3670/493 +f 2608/3659/490 2610/3660/490 2609/3662/490 +f 2603/3676/487 2618/3787/487 2617/3679/487 +f 2608/3659/489 2615/3689/489 2616/3680/489 +f 2606/3678/486 2613/3786/486 2614/3671/486 +f 2593/3658/492 2594/3781/492 2592/3681/492 +f 2595/3683/491 2619/3788/491 2620/3684/491 +f 2620/3685/493 2619/3789/493 2592/3686/493 +f 2592/3688/487 2619/3790/487 2595/3683/487 +f 2596/3677/486 2620/3685/486 2594/3687/486 +f 2615/3689/493 2621/3791/493 2622/3690/493 +f 2622/3691/491 2621/3792/491 2593/3692/491 +f 2616/3680/487 2622/3793/487 2591/3694/487 +f 2593/3692/486 2621/3792/486 2615/3689/486 +f 2611/3670/486 2599/3666/486 2613/3668/486 +f 2602/3695/488 2598/3794/488 2597/3696/488 +f 2597/3697/489 2598/3795/489 2614/3698/489 +f 2601/3675/487 2597/3796/487 2618/3700/487 +f 2614/3698/486 2598/3795/486 2602/3695/486 +f 2625/3701/494 2626/3705/494 2624/3702/494 +f 2629/3704/487 2630/3710/487 2626/3705/487 +f 2623/3707/486 2624/3702/486 2628/3708/486 +f 2628/3708/492 2624/3702/492 2626/3705/492 +f 2633/3711/494 2634/3715/494 2632/3712/494 +f 2637/3714/487 2638/3720/487 2634/3715/487 +f 2631/3717/486 2632/3712/486 2636/3718/486 +f 2636/3718/492 2632/3712/492 2634/3715/492 +f 2641/3721/495 2642/3725/495 2640/3722/495 +f 2645/3724/486 2646/3730/486 2642/3725/486 +f 2639/3727/487 2640/3722/487 2644/3728/487 +f 2644/3728/492 2640/3722/492 2642/3725/492 +f 2649/3731/495 2650/3735/495 2648/3732/495 +f 2653/3734/486 2654/3740/486 2650/3735/486 +f 2647/3737/487 2648/3732/487 2652/3738/487 +f 2652/3738/492 2648/3732/492 2650/3735/492 +f 2657/3741/495 2658/3745/495 2656/3742/495 +f 2661/3744/487 2662/3750/487 2658/3745/487 +f 2655/3747/486 2656/3742/486 2660/3748/486 +f 2660/3748/490 2656/3742/490 2658/3745/490 +f 2665/3751/495 2666/3755/495 2664/3752/495 +f 2669/3754/487 2670/3760/487 2666/3755/487 +f 2663/3757/486 2664/3752/486 2668/3758/486 +f 2668/3758/490 2664/3752/490 2666/3755/490 +f 2673/3761/494 2674/3765/494 2672/3762/494 +f 2677/3764/486 2678/3770/486 2674/3765/486 +f 2671/3767/487 2672/3762/487 2676/3768/487 +f 2676/3768/490 2672/3762/490 2674/3765/490 +f 2681/3771/494 2682/3775/494 2680/3772/494 +f 2685/3774/486 2686/3780/486 2682/3775/486 +f 2679/3777/487 2680/3772/487 2684/3778/487 +f 2684/3778/490 2680/3772/490 2682/3775/490 o ShroudH v 2.562502 1.499998 8.500000 v 2.562502 1.499998 5.500000 @@ -9511,126 +10817,126 @@ vn 0.7071 0.7071 0.0000 vn 0.0000 1.0000 0.0000 vn 0.0000 -1.0000 0.0000 s off -f 2287/3323/496 2276/3324/496 2288/3325/496 -f 2290/3326/497 2277/3327/497 2289/3328/497 -f 2297/3329/497 2292/3330/497 2284/3331/497 -f 2279/3332/498 2297/3333/498 2293/3334/498 -f 2292/3330/499 2279/3335/499 2291/3336/499 -f 2294/3337/500 2297/3338/500 2298/3339/500 -f 2285/3340/501 2281/3341/501 2283/3342/501 -f 2289/3328/498 2273/3343/498 2287/3323/498 -f 2285/3340/502 2284/3331/502 2286/3344/502 -f 2284/3331/503 2291/3336/503 2286/3344/503 -f 2288/3325/500 2289/3328/500 2287/3323/500 -f 2283/3342/497 2297/3345/497 2284/3331/497 -f 2288/3325/499 2296/3346/499 2290/3326/499 -f 2286/3344/496 2294/3337/496 2285/3340/496 -f 2276/3324/502 2277/3347/502 2278/3348/502 -f 2274/3349/501 2300/3350/501 2273/3343/501 -f 2300/3351/503 2277/3352/503 2275/3353/503 -f 2277/3354/497 2274/3349/497 2289/3328/497 -f 2273/3343/496 2275/3353/496 2287/3323/496 -f 2295/3355/503 2302/3356/503 2296/3346/503 -f 2302/3357/501 2276/3358/501 2278/3359/501 -f 2296/3346/497 2278/3360/497 2290/3326/497 -f 2276/3358/496 2295/3355/496 2288/3325/496 -f 2291/3336/496 2293/3334/496 2286/3344/496 -f 2282/3361/498 2272/3362/498 2281/3341/498 -f 2272/3363/499 2294/3364/499 2298/3365/499 -f 2281/3341/497 2298/3366/497 2283/3342/497 -f 2294/3364/496 2282/3361/496 2285/3340/496 -f 2305/3367/504 2304/3368/504 2303/3369/504 -f 2309/3370/497 2306/3371/497 2305/3372/497 -f 2303/3373/496 2308/3374/496 2307/3375/496 -f 2308/3374/500 2306/3371/500 2310/3376/500 -f 2313/3377/504 2312/3378/504 2311/3379/504 -f 2317/3380/497 2314/3381/497 2313/3382/497 -f 2311/3383/496 2316/3384/496 2315/3385/496 -f 2316/3384/500 2314/3381/500 2318/3386/500 -f 2321/3387/505 2320/3388/505 2319/3389/505 -f 2325/3390/496 2322/3391/496 2321/3392/496 -f 2319/3393/497 2324/3394/497 2323/3395/497 -f 2324/3394/500 2322/3391/500 2326/3396/500 -f 2329/3397/505 2328/3398/505 2327/3399/505 -f 2333/3400/496 2330/3401/496 2329/3402/496 -f 2327/3403/497 2332/3404/497 2331/3405/497 -f 2332/3404/500 2330/3401/500 2334/3406/500 -f 2337/3407/505 2336/3408/505 2335/3409/505 -f 2341/3410/497 2338/3411/497 2337/3412/497 -f 2335/3413/496 2340/3414/496 2339/3415/496 -f 2340/3414/502 2338/3411/502 2342/3416/502 -f 2345/3417/505 2344/3418/505 2343/3419/505 -f 2349/3420/497 2346/3421/497 2345/3422/497 -f 2343/3423/496 2348/3424/496 2347/3425/496 -f 2348/3424/502 2346/3421/502 2350/3426/502 -f 2353/3427/504 2352/3428/504 2351/3429/504 -f 2357/3430/496 2354/3431/496 2353/3432/496 -f 2351/3433/497 2356/3434/497 2355/3435/497 -f 2356/3434/502 2354/3431/502 2358/3436/502 -f 2361/3437/504 2360/3438/504 2359/3439/504 -f 2365/3440/496 2362/3441/496 2361/3442/496 -f 2359/3443/497 2364/3444/497 2363/3445/497 -f 2364/3444/502 2362/3441/502 2366/3446/502 -f 2287/3323/496 2275/3447/496 2276/3324/496 -f 2290/3326/497 2278/3448/497 2277/3327/497 -f 2297/3329/497 2280/3449/497 2292/3330/497 -f 2279/3332/498 2280/3450/498 2297/3333/498 -f 2292/3330/499 2280/3451/499 2279/3335/499 -f 2294/3337/500 2293/3452/500 2297/3338/500 -f 2285/3340/501 2282/3361/501 2281/3341/501 -f 2289/3328/498 2274/3349/498 2273/3343/498 -f 2285/3340/502 2283/3342/502 2284/3331/502 -f 2284/3331/503 2292/3330/503 2291/3336/503 -f 2288/3325/500 2290/3326/500 2289/3328/500 -f 2283/3342/497 2298/3453/497 2297/3345/497 -f 2288/3325/499 2295/3355/499 2296/3346/499 -f 2286/3344/496 2293/3452/496 2294/3337/496 -f 2276/3324/502 2275/3447/502 2277/3347/502 -f 2274/3349/501 2299/3454/501 2300/3350/501 -f 2300/3351/503 2299/3455/503 2277/3352/503 -f 2277/3354/497 2299/3456/497 2274/3349/497 -f 2273/3343/496 2300/3351/496 2275/3353/496 -f 2295/3355/503 2301/3457/503 2302/3356/503 -f 2302/3357/501 2301/3458/501 2276/3358/501 -f 2296/3346/497 2302/3459/497 2278/3360/497 -f 2276/3358/496 2301/3458/496 2295/3355/496 -f 2291/3336/496 2279/3332/496 2293/3334/496 -f 2282/3361/498 2271/3460/498 2272/3362/498 -f 2272/3363/499 2271/3461/499 2294/3364/499 -f 2281/3341/497 2272/3462/497 2298/3366/497 -f 2294/3364/496 2271/3461/496 2282/3361/496 -f 2305/3367/504 2306/3371/504 2304/3368/504 -f 2309/3370/497 2310/3376/497 2306/3371/497 -f 2303/3373/496 2304/3368/496 2308/3374/496 -f 2308/3374/500 2304/3368/500 2306/3371/500 -f 2313/3377/504 2314/3381/504 2312/3378/504 -f 2317/3380/497 2318/3386/497 2314/3381/497 -f 2311/3383/496 2312/3378/496 2316/3384/496 -f 2316/3384/500 2312/3378/500 2314/3381/500 -f 2321/3387/505 2322/3391/505 2320/3388/505 -f 2325/3390/496 2326/3396/496 2322/3391/496 -f 2319/3393/497 2320/3388/497 2324/3394/497 -f 2324/3394/500 2320/3388/500 2322/3391/500 -f 2329/3397/505 2330/3401/505 2328/3398/505 -f 2333/3400/496 2334/3406/496 2330/3401/496 -f 2327/3403/497 2328/3398/497 2332/3404/497 -f 2332/3404/500 2328/3398/500 2330/3401/500 -f 2337/3407/505 2338/3411/505 2336/3408/505 -f 2341/3410/497 2342/3416/497 2338/3411/497 -f 2335/3413/496 2336/3408/496 2340/3414/496 -f 2340/3414/502 2336/3408/502 2338/3411/502 -f 2345/3417/505 2346/3421/505 2344/3418/505 -f 2349/3420/497 2350/3426/497 2346/3421/497 -f 2343/3423/496 2344/3418/496 2348/3424/496 -f 2348/3424/502 2344/3418/502 2346/3421/502 -f 2353/3427/504 2354/3431/504 2352/3428/504 -f 2357/3430/496 2358/3436/496 2354/3431/496 -f 2351/3433/497 2352/3428/497 2356/3434/497 -f 2356/3434/502 2352/3428/502 2354/3431/502 -f 2361/3437/504 2362/3441/504 2360/3438/504 -f 2365/3440/496 2366/3446/496 2362/3441/496 -f 2359/3443/497 2360/3438/497 2364/3444/497 -f 2364/3444/502 2360/3438/502 2362/3441/502 +f 2703/3797/496 2692/3798/496 2704/3799/496 +f 2706/3800/497 2693/3801/497 2705/3802/497 +f 2713/3803/497 2708/3804/497 2700/3805/497 +f 2695/3806/498 2713/3807/498 2709/3808/498 +f 2708/3804/499 2695/3809/499 2707/3810/499 +f 2710/3811/500 2713/3812/500 2714/3813/500 +f 2701/3814/501 2697/3815/501 2699/3816/501 +f 2705/3802/498 2689/3817/498 2703/3797/498 +f 2701/3814/502 2700/3805/502 2702/3818/502 +f 2700/3805/503 2707/3810/503 2702/3818/503 +f 2704/3799/500 2705/3802/500 2703/3797/500 +f 2699/3816/497 2713/3819/497 2700/3805/497 +f 2704/3799/499 2712/3820/499 2706/3800/499 +f 2702/3818/496 2710/3811/496 2701/3814/496 +f 2692/3798/502 2693/3821/502 2694/3822/502 +f 2690/3823/501 2716/3824/501 2689/3817/501 +f 2716/3825/503 2693/3826/503 2691/3827/503 +f 2693/3828/497 2690/3823/497 2705/3802/497 +f 2689/3817/496 2691/3827/496 2703/3797/496 +f 2711/3829/503 2718/3830/503 2712/3820/503 +f 2718/3831/501 2692/3832/501 2694/3833/501 +f 2712/3820/497 2694/3834/497 2706/3800/497 +f 2692/3832/496 2711/3829/496 2704/3799/496 +f 2707/3810/496 2709/3808/496 2702/3818/496 +f 2698/3835/498 2688/3836/498 2697/3815/498 +f 2688/3837/499 2710/3838/499 2714/3839/499 +f 2697/3815/497 2714/3840/497 2699/3816/497 +f 2710/3838/496 2698/3835/496 2701/3814/496 +f 2721/3841/504 2720/3842/504 2719/3843/504 +f 2725/3844/497 2722/3845/497 2721/3846/497 +f 2719/3847/496 2724/3848/496 2723/3849/496 +f 2724/3848/500 2722/3845/500 2726/3850/500 +f 2729/3851/504 2728/3852/504 2727/3853/504 +f 2733/3854/497 2730/3855/497 2729/3856/497 +f 2727/3857/496 2732/3858/496 2731/3859/496 +f 2732/3858/500 2730/3855/500 2734/3860/500 +f 2737/3861/505 2736/3862/505 2735/3863/505 +f 2741/3864/496 2738/3865/496 2737/3866/496 +f 2735/3867/497 2740/3868/497 2739/3869/497 +f 2740/3868/500 2738/3865/500 2742/3870/500 +f 2745/3871/505 2744/3872/505 2743/3873/505 +f 2749/3874/496 2746/3875/496 2745/3876/496 +f 2743/3877/497 2748/3878/497 2747/3879/497 +f 2748/3878/500 2746/3875/500 2750/3880/500 +f 2753/3881/505 2752/3882/505 2751/3883/505 +f 2757/3884/497 2754/3885/497 2753/3886/497 +f 2751/3887/496 2756/3888/496 2755/3889/496 +f 2756/3888/502 2754/3885/502 2758/3890/502 +f 2761/3891/505 2760/3892/505 2759/3893/505 +f 2765/3894/497 2762/3895/497 2761/3896/497 +f 2759/3897/496 2764/3898/496 2763/3899/496 +f 2764/3898/502 2762/3895/502 2766/3900/502 +f 2769/3901/504 2768/3902/504 2767/3903/504 +f 2773/3904/496 2770/3905/496 2769/3906/496 +f 2767/3907/497 2772/3908/497 2771/3909/497 +f 2772/3908/502 2770/3905/502 2774/3910/502 +f 2777/3911/504 2776/3912/504 2775/3913/504 +f 2781/3914/496 2778/3915/496 2777/3916/496 +f 2775/3917/497 2780/3918/497 2779/3919/497 +f 2780/3918/502 2778/3915/502 2782/3920/502 +f 2703/3797/496 2691/3921/496 2692/3798/496 +f 2706/3800/497 2694/3922/497 2693/3801/497 +f 2713/3803/497 2696/3923/497 2708/3804/497 +f 2695/3806/498 2696/3924/498 2713/3807/498 +f 2708/3804/499 2696/3925/499 2695/3809/499 +f 2710/3811/500 2709/3926/500 2713/3812/500 +f 2701/3814/501 2698/3835/501 2697/3815/501 +f 2705/3802/498 2690/3823/498 2689/3817/498 +f 2701/3814/502 2699/3816/502 2700/3805/502 +f 2700/3805/503 2708/3804/503 2707/3810/503 +f 2704/3799/500 2706/3800/500 2705/3802/500 +f 2699/3816/497 2714/3927/497 2713/3819/497 +f 2704/3799/499 2711/3829/499 2712/3820/499 +f 2702/3818/496 2709/3926/496 2710/3811/496 +f 2692/3798/502 2691/3921/502 2693/3821/502 +f 2690/3823/501 2715/3928/501 2716/3824/501 +f 2716/3825/503 2715/3929/503 2693/3826/503 +f 2693/3828/497 2715/3930/497 2690/3823/497 +f 2689/3817/496 2716/3825/496 2691/3827/496 +f 2711/3829/503 2717/3931/503 2718/3830/503 +f 2718/3831/501 2717/3932/501 2692/3832/501 +f 2712/3820/497 2718/3933/497 2694/3834/497 +f 2692/3832/496 2717/3932/496 2711/3829/496 +f 2707/3810/496 2695/3806/496 2709/3808/496 +f 2698/3835/498 2687/3934/498 2688/3836/498 +f 2688/3837/499 2687/3935/499 2710/3838/499 +f 2697/3815/497 2688/3936/497 2714/3840/497 +f 2710/3838/496 2687/3935/496 2698/3835/496 +f 2721/3841/504 2722/3845/504 2720/3842/504 +f 2725/3844/497 2726/3850/497 2722/3845/497 +f 2719/3847/496 2720/3842/496 2724/3848/496 +f 2724/3848/500 2720/3842/500 2722/3845/500 +f 2729/3851/504 2730/3855/504 2728/3852/504 +f 2733/3854/497 2734/3860/497 2730/3855/497 +f 2727/3857/496 2728/3852/496 2732/3858/496 +f 2732/3858/500 2728/3852/500 2730/3855/500 +f 2737/3861/505 2738/3865/505 2736/3862/505 +f 2741/3864/496 2742/3870/496 2738/3865/496 +f 2735/3867/497 2736/3862/497 2740/3868/497 +f 2740/3868/500 2736/3862/500 2738/3865/500 +f 2745/3871/505 2746/3875/505 2744/3872/505 +f 2749/3874/496 2750/3880/496 2746/3875/496 +f 2743/3877/497 2744/3872/497 2748/3878/497 +f 2748/3878/500 2744/3872/500 2746/3875/500 +f 2753/3881/505 2754/3885/505 2752/3882/505 +f 2757/3884/497 2758/3890/497 2754/3885/497 +f 2751/3887/496 2752/3882/496 2756/3888/496 +f 2756/3888/502 2752/3882/502 2754/3885/502 +f 2761/3891/505 2762/3895/505 2760/3892/505 +f 2765/3894/497 2766/3900/497 2762/3895/497 +f 2759/3897/496 2760/3892/496 2764/3898/496 +f 2764/3898/502 2760/3892/502 2762/3895/502 +f 2769/3901/504 2770/3905/504 2768/3902/504 +f 2773/3904/496 2774/3910/496 2770/3905/496 +f 2767/3907/497 2768/3902/497 2772/3908/497 +f 2772/3908/502 2768/3902/502 2770/3905/502 +f 2777/3911/504 2778/3915/504 2776/3912/504 +f 2781/3914/496 2782/3920/496 2778/3915/496 +f 2775/3917/497 2776/3912/497 2780/3918/497 +f 2780/3918/502 2776/3912/502 2778/3915/502 o Engine v 0.000000 6.499998 9.499993 v -1.148050 6.271637 9.499993 @@ -10264,327 +11570,327 @@ vn 0.8186 0.3391 -0.4636 vn 0.6531 0.2705 -0.7074 vn -0.0000 -0.0000 -1.0000 s off -f 2372/3463/506 2389/3464/506 2388/3465/506 -f 2374/3466/506 2389/3467/506 2373/3468/506 -f 2375/3469/506 2390/3470/506 2374/3466/506 -f 2376/3471/506 2391/3472/506 2375/3473/506 -f 2376/3471/506 2393/3474/506 2392/3475/506 -f 2378/3476/506 2393/3477/506 2377/3478/506 -f 2378/3476/506 2395/3479/506 2394/3480/506 -f 2380/3481/506 2395/3482/506 2379/3483/506 -f 2380/3481/506 2397/3484/506 2396/3485/506 -f 2382/3486/506 2397/3487/506 2381/3488/506 -f 2367/3489/506 2398/3490/506 2382/3486/506 -f 2368/3491/506 2383/3492/506 2367/3489/506 -f 2368/3491/506 2385/3493/506 2384/3494/506 -f 2370/3495/506 2385/3496/506 2369/3497/506 -f 2370/3495/506 2387/3498/506 2386/3499/506 -f 2372/3463/506 2387/3500/506 2371/3501/506 -f 2372/3463/506 2373/3468/506 2389/3464/506 -f 2374/3466/506 2390/3502/506 2389/3467/506 -f 2375/3469/506 2391/3503/506 2390/3470/506 -f 2376/3471/506 2392/3504/506 2391/3472/506 -f 2376/3471/506 2377/3478/506 2393/3474/506 -f 2378/3476/506 2394/3505/506 2393/3477/506 -f 2378/3476/506 2379/3483/506 2395/3479/506 -f 2380/3481/506 2396/3506/506 2395/3482/506 -f 2380/3481/506 2381/3488/506 2397/3484/506 -f 2382/3486/506 2398/3507/506 2397/3487/506 -f 2367/3489/506 2383/3508/506 2398/3490/506 -f 2368/3491/506 2384/3509/506 2383/3492/506 -f 2368/3491/506 2369/3497/506 2385/3493/506 -f 2370/3495/506 2386/3510/506 2385/3496/506 -f 2370/3495/506 2371/3501/506 2387/3498/506 -f 2372/3463/506 2388/3511/506 2387/3500/506 +f 2788/3937/506 2805/3938/506 2804/3939/506 +f 2790/3940/506 2805/3941/506 2789/3942/506 +f 2791/3943/506 2806/3944/506 2790/3940/506 +f 2792/3945/506 2807/3946/506 2791/3947/506 +f 2792/3945/506 2809/3948/506 2808/3949/506 +f 2794/3950/506 2809/3951/506 2793/3952/506 +f 2794/3950/506 2811/3953/506 2810/3954/506 +f 2796/3955/506 2811/3956/506 2795/3957/506 +f 2796/3955/506 2813/3958/506 2812/3959/506 +f 2798/3960/506 2813/3961/506 2797/3962/506 +f 2783/3963/506 2814/3964/506 2798/3960/506 +f 2784/3965/506 2799/3966/506 2783/3963/506 +f 2784/3965/506 2801/3967/506 2800/3968/506 +f 2786/3969/506 2801/3970/506 2785/3971/506 +f 2786/3969/506 2803/3972/506 2802/3973/506 +f 2788/3937/506 2803/3974/506 2787/3975/506 +f 2788/3937/506 2789/3942/506 2805/3938/506 +f 2790/3940/506 2806/3976/506 2805/3941/506 +f 2791/3943/506 2807/3977/506 2806/3944/506 +f 2792/3945/506 2808/3978/506 2807/3946/506 +f 2792/3945/506 2793/3952/506 2809/3948/506 +f 2794/3950/506 2810/3979/506 2809/3951/506 +f 2794/3950/506 2795/3957/506 2811/3953/506 +f 2796/3955/506 2812/3980/506 2811/3956/506 +f 2796/3955/506 2797/3962/506 2813/3958/506 +f 2798/3960/506 2814/3981/506 2813/3961/506 +f 2783/3963/506 2799/3982/506 2814/3964/506 +f 2784/3965/506 2800/3983/506 2799/3966/506 +f 2784/3965/506 2785/3971/506 2801/3967/506 +f 2786/3969/506 2802/3984/506 2801/3970/506 +f 2786/3969/506 2787/3975/506 2803/3972/506 +f 2788/3937/506 2804/3985/506 2803/3974/506 s 1 -f 2409/3512/507 2448/3513/508 2408/3514/509 -f 2425/3515/510 2448/3513/508 2449/3516/511 -f 2440/3517/512 2425/3518/510 2441/3519/513 -f 2404/3520/514 2441/3521/513 2405/3522/515 -f 2456/3523/516 2405/3524/515 2457/3525/517 -f 2420/3526/518 2457/3527/517 2421/3528/519 -f 2436/3529/520 2421/3530/519 2437/3531/521 -f 2412/3532/522 2437/3533/521 2413/3534/523 -f 2452/3535/524 2413/3536/523 2453/3537/525 -f 2428/3538/526 2453/3539/525 2429/3540/527 -f 2433/3541/528 2408/3542/509 2432/3543/529 -f 2433/3544/528 2416/3545/530 2417/3546/531 -f 2417/3547/531 2460/3548/532 2461/3549/533 -f 2400/3550/534 2460/3548/532 2399/3551/535 -f 2400/3552/534 2444/3553/536 2445/3554/537 -f 2429/3555/527 2444/3553/536 2428/3538/526 -f 2401/3556/538 2461/3557/533 2400/3550/534 -f 2463/3558/539 2401/3556/538 2402/3559/540 -f 2434/3560/541 2417/3546/531 2418/3561/542 -f 2419/3562/543 2434/3560/541 2418/3561/542 -f 2417/3547/531 2462/3563/544 2418/3564/542 -f 2418/3564/542 2463/3565/539 2419/3566/543 -f 2409/3567/507 2434/3568/541 2410/3569/545 -f 2410/3569/545 2435/3570/546 2411/3571/547 -f 2410/3572/545 2449/3573/511 2409/3512/507 -f 2411/3574/547 2450/3575/548 2410/3572/545 -f 2425/3515/510 2450/3576/548 2426/3577/549 -f 2427/3578/550 2450/3576/548 2451/3579/551 -f 2426/3580/549 2441/3519/513 2425/3518/510 -f 2427/3581/550 2442/3582/552 2426/3580/549 -f 2405/3522/515 2442/3583/552 2406/3584/553 -f 2406/3584/553 2443/3585/554 2407/3586/555 -f 2458/3587/556 2405/3524/515 2406/3588/553 -f 2407/3589/555 2458/3587/556 2406/3588/553 -f 2421/3528/519 2458/3590/556 2422/3591/557 -f 2422/3591/557 2459/3592/558 2423/3593/559 -f 2422/3594/557 2437/3531/521 2421/3530/519 -f 2423/3595/559 2438/3596/560 2422/3594/557 -f 2414/3597/561 2437/3533/521 2438/3598/560 -f 2415/3599/562 2438/3598/560 2439/3600/563 -f 2414/3601/561 2453/3537/525 2413/3536/523 -f 2415/3602/562 2454/3603/564 2414/3601/561 -f 2430/3604/565 2453/3539/525 2454/3605/564 -f 2431/3606/566 2454/3605/564 2455/3607/567 -f 2446/3608/568 2429/3555/527 2430/3609/565 -f 2431/3610/566 2446/3608/568 2430/3609/565 -f 2400/3552/534 2446/3611/568 2401/3612/538 -f 2401/3612/538 2447/3613/569 2402/3614/540 -f 2403/3615/506 2402/3614/540 2447/3613/569 -f 2447/3616/569 2431/3610/566 2403/3617/506 -f 2455/3607/567 2403/3618/506 2431/3606/566 -f 2455/3619/567 2415/3602/562 2403/3620/506 -f 2439/3600/563 2403/3621/506 2415/3599/562 -f 2439/3622/563 2423/3595/559 2403/3623/506 -f 2459/3592/558 2403/3624/506 2423/3593/559 -f 2459/3625/558 2407/3589/555 2403/3626/506 -f 2443/3585/554 2403/3627/506 2407/3586/555 -f 2443/3628/554 2427/3581/550 2403/3629/506 -f 2451/3579/551 2403/3630/506 2427/3578/550 -f 2451/3631/551 2411/3574/547 2403/3632/506 -f 2435/3570/546 2403/3633/506 2411/3571/547 -f 2403/3634/506 2463/3558/539 2402/3559/540 -f 2463/3565/539 2403/3635/506 2419/3566/543 -f 2435/3636/546 2419/3562/543 2403/3637/506 -f 2394/3638/570 2399/3551/535 2460/3548/532 -f 2396/3639/571 2399/3551/535 2395/3640/572 -f 2396/3639/571 2428/3538/526 2444/3553/536 -f 2452/3535/524 2397/3641/573 2398/3642/574 -f 2398/3642/574 2412/3532/522 2452/3535/524 -f 2436/3529/520 2383/3643/575 2384/3644/576 -f 2384/3644/576 2420/3526/518 2436/3529/520 -f 2456/3523/516 2385/3645/577 2386/3646/578 -f 2386/3646/578 2404/3520/514 2456/3523/516 -f 2440/3517/512 2387/3647/579 2388/3648/580 -f 2388/3648/580 2424/3649/581 2440/3517/512 -f 2448/3513/508 2389/3650/582 2390/3651/583 -f 2390/3651/583 2408/3514/509 2448/3513/508 -f 2432/3543/529 2391/3472/584 2392/3652/585 -f 2393/3653/586 2432/3543/529 2392/3652/585 -f 2394/3638/570 2416/3545/530 2393/3653/586 -f 2464/3654/587 2526/3655/588 2465/3656/589 -f 2466/3657/590 2526/3655/588 2527/3658/591 -f 2466/3657/590 2528/3659/592 2467/3660/593 -f 2509/3661/594 2465/3662/589 2510/3663/595 -f 2494/3664/596 2509/3661/594 2510/3665/595 -f 2517/3666/597 2494/3667/596 2518/3668/598 -f 2478/3669/599 2517/3666/597 2518/3670/598 -f 2502/3671/600 2477/3672/601 2478/3673/599 -f 2486/3674/602 2501/3675/603 2502/3676/600 -f 2522/3677/604 2485/3678/605 2486/3679/602 -f 2470/3680/606 2521/3681/607 2522/3682/604 -f 2506/3683/608 2469/3684/609 2470/3685/606 -f 2490/3686/610 2505/3687/611 2506/3688/608 -f 2513/3689/612 2490/3690/610 2514/3691/613 -f 2474/3692/614 2513/3689/612 2514/3693/613 -f 2497/3694/615 2474/3695/614 2498/3696/616 -f 2481/3697/617 2498/3698/616 2482/3699/618 -f 2526/3700/588 2481/3697/617 2482/3701/618 -f 2377/3478/577 2525/3702/619 2378/3476/578 -f 2378/3476/578 2464/3654/587 2379/3483/579 -f 2380/3481/580 2464/3654/587 2509/3661/594 -f 2380/3481/580 2493/3703/620 2381/3488/582 -f 2381/3488/582 2517/3666/597 2382/3486/583 -f 2382/3486/583 2477/3672/601 2367/3489/584 -f 2367/3489/584 2501/3675/603 2368/3491/585 -f 2368/3491/585 2485/3678/605 2369/3497/586 -f 2369/3497/586 2521/3681/607 2370/3495/570 -f 2370/3495/570 2469/3684/609 2371/3501/572 -f 2371/3501/572 2505/3687/611 2372/3463/571 -f 2372/3463/571 2489/3704/621 2373/3468/573 -f 2373/3468/573 2513/3689/612 2374/3466/574 -f 2374/3466/574 2473/3705/622 2375/3469/575 -f 2375/3473/575 2497/3694/615 2376/3471/576 -f 2497/3694/615 2377/3478/577 2376/3471/576 -f 2527/3706/591 2482/3701/618 2483/3707/623 -f 2528/3708/592 2483/3707/623 2484/3709/624 -f 2483/3710/623 2498/3698/616 2499/3711/625 -f 2484/3712/624 2499/3711/625 2500/3713/626 -f 2499/3714/625 2474/3695/614 2475/3715/627 -f 2476/3716/628 2499/3714/625 2475/3715/627 -f 2475/3717/627 2514/3693/613 2515/3718/629 -f 2476/3719/628 2515/3718/629 2516/3720/630 -f 2491/3721/631 2514/3691/613 2490/3690/610 -f 2516/3722/630 2491/3721/631 2492/3723/632 -f 2491/3724/631 2506/3688/608 2507/3725/633 -f 2492/3726/632 2507/3725/633 2508/3727/634 -f 2507/3728/633 2470/3685/606 2471/3729/635 -f 2508/3730/634 2471/3729/635 2472/3731/636 -f 2470/3680/606 2523/3732/637 2471/3733/635 -f 2472/3734/636 2523/3732/637 2524/3735/638 -f 2523/3736/637 2486/3679/602 2487/3737/639 -f 2524/3738/638 2487/3737/639 2488/3739/640 -f 2487/3740/639 2502/3676/600 2503/3741/641 -f 2488/3742/640 2503/3741/641 2504/3743/642 -f 2479/3744/643 2502/3671/600 2478/3673/599 -f 2480/3745/644 2503/3746/641 2479/3744/643 -f 2479/3747/643 2518/3670/598 2519/3748/645 -f 2480/3749/644 2519/3748/645 2520/3750/646 -f 2495/3751/647 2518/3668/598 2494/3667/596 -f 2496/3752/648 2519/3753/645 2495/3751/647 -f 2495/3754/647 2510/3665/595 2511/3755/649 -f 2496/3756/648 2511/3755/649 2512/3757/650 -f 2511/3758/649 2465/3662/589 2466/3759/590 -f 2512/3760/650 2466/3759/590 2467/3761/593 -f 2468/3762/651 2467/3660/593 2528/3659/592 -f 2528/3708/592 2484/3709/624 2468/3763/651 -f 2500/3713/626 2468/3764/651 2484/3712/624 -f 2500/3765/626 2476/3716/628 2468/3766/651 -f 2516/3720/630 2468/3767/651 2476/3719/628 -f 2516/3722/630 2492/3723/632 2468/3768/651 -f 2508/3727/634 2468/3769/651 2492/3726/632 -f 2508/3730/634 2472/3731/636 2468/3770/651 -f 2524/3735/638 2468/3771/651 2472/3734/636 -f 2524/3738/638 2488/3739/640 2468/3772/651 -f 2504/3743/642 2468/3773/651 2488/3742/640 -f 2504/3774/642 2480/3745/644 2468/3775/651 -f 2520/3750/646 2468/3776/651 2480/3749/644 -f 2520/3777/646 2496/3752/648 2468/3778/651 -f 2512/3757/650 2468/3779/651 2496/3756/648 -f 2468/3780/651 2512/3760/650 2467/3761/593 -f 2409/3512/507 2449/3573/511 2448/3513/508 -f 2425/3515/510 2424/3649/581 2448/3513/508 -f 2440/3517/512 2424/3649/581 2425/3518/510 -f 2404/3520/514 2440/3517/512 2441/3521/513 -f 2456/3523/516 2404/3520/514 2405/3524/515 -f 2420/3526/518 2456/3523/516 2457/3527/517 -f 2436/3529/520 2420/3526/518 2421/3530/519 -f 2412/3532/522 2436/3529/520 2437/3533/521 -f 2452/3535/524 2412/3532/522 2413/3536/523 -f 2428/3538/526 2452/3535/524 2453/3539/525 -f 2433/3541/528 2409/3567/507 2408/3542/509 -f 2433/3544/528 2432/3543/529 2416/3545/530 -f 2417/3547/531 2416/3545/530 2460/3548/532 -f 2400/3550/534 2461/3557/533 2460/3548/532 -f 2400/3552/534 2399/3551/535 2444/3553/536 -f 2429/3555/527 2445/3781/537 2444/3553/536 -f 2401/3556/538 2462/3782/544 2461/3557/533 -f 2463/3558/539 2462/3782/544 2401/3556/538 -f 2434/3560/541 2433/3544/528 2417/3546/531 -f 2419/3562/543 2435/3636/546 2434/3560/541 -f 2417/3547/531 2461/3549/533 2462/3563/544 -f 2418/3564/542 2462/3563/544 2463/3565/539 -f 2409/3567/507 2433/3541/528 2434/3568/541 -f 2410/3569/545 2434/3568/541 2435/3570/546 -f 2410/3572/545 2450/3575/548 2449/3573/511 -f 2411/3574/547 2451/3631/551 2450/3575/548 -f 2425/3515/510 2449/3516/511 2450/3576/548 -f 2427/3578/550 2426/3577/549 2450/3576/548 -f 2426/3580/549 2442/3582/552 2441/3519/513 -f 2427/3581/550 2443/3628/554 2442/3582/552 -f 2405/3522/515 2441/3521/513 2442/3583/552 -f 2406/3584/553 2442/3583/552 2443/3585/554 -f 2458/3587/556 2457/3525/517 2405/3524/515 -f 2407/3589/555 2459/3625/558 2458/3587/556 -f 2421/3528/519 2457/3527/517 2458/3590/556 -f 2422/3591/557 2458/3590/556 2459/3592/558 -f 2422/3594/557 2438/3596/560 2437/3531/521 -f 2423/3595/559 2439/3622/563 2438/3596/560 -f 2414/3597/561 2413/3534/523 2437/3533/521 -f 2415/3599/562 2414/3597/561 2438/3598/560 -f 2414/3601/561 2454/3603/564 2453/3537/525 -f 2415/3602/562 2455/3619/567 2454/3603/564 -f 2430/3604/565 2429/3540/527 2453/3539/525 -f 2431/3606/566 2430/3604/565 2454/3605/564 -f 2446/3608/568 2445/3781/537 2429/3555/527 -f 2431/3610/566 2447/3616/569 2446/3608/568 -f 2400/3552/534 2445/3554/537 2446/3611/568 -f 2401/3612/538 2446/3611/568 2447/3613/569 -f 2394/3638/570 2395/3640/572 2399/3551/535 -f 2396/3639/571 2444/3553/536 2399/3551/535 -f 2396/3639/571 2397/3641/573 2428/3538/526 -f 2452/3535/524 2428/3538/526 2397/3641/573 -f 2398/3642/574 2383/3643/575 2412/3532/522 -f 2436/3529/520 2412/3532/522 2383/3643/575 -f 2384/3644/576 2385/3645/577 2420/3526/518 -f 2456/3523/516 2420/3526/518 2385/3645/577 -f 2386/3646/578 2387/3647/579 2404/3520/514 -f 2440/3517/512 2404/3520/514 2387/3647/579 -f 2388/3648/580 2389/3650/582 2424/3649/581 -f 2448/3513/508 2424/3649/581 2389/3650/582 -f 2390/3651/583 2391/3783/584 2408/3514/509 -f 2432/3543/529 2408/3542/509 2391/3472/584 -f 2393/3653/586 2416/3545/530 2432/3543/529 -f 2394/3638/570 2460/3548/532 2416/3545/530 -f 2464/3654/587 2525/3702/619 2526/3655/588 -f 2466/3657/590 2465/3656/589 2526/3655/588 -f 2466/3657/590 2527/3658/591 2528/3659/592 -f 2509/3661/594 2464/3654/587 2465/3662/589 -f 2494/3664/596 2493/3703/620 2509/3661/594 -f 2517/3666/597 2493/3703/620 2494/3667/596 -f 2478/3669/599 2477/3672/601 2517/3666/597 -f 2502/3671/600 2501/3675/603 2477/3672/601 -f 2486/3674/602 2485/3678/605 2501/3675/603 -f 2522/3677/604 2521/3681/607 2485/3678/605 -f 2470/3680/606 2469/3684/609 2521/3681/607 -f 2506/3683/608 2505/3687/611 2469/3684/609 -f 2490/3686/610 2489/3704/621 2505/3687/611 -f 2513/3689/612 2489/3704/621 2490/3690/610 -f 2474/3692/614 2473/3705/622 2513/3689/612 -f 2497/3694/615 2473/3784/622 2474/3695/614 -f 2481/3697/617 2497/3694/615 2498/3698/616 -f 2526/3700/588 2525/3702/619 2481/3697/617 -f 2377/3478/577 2481/3697/617 2525/3702/619 -f 2378/3476/578 2525/3702/619 2464/3654/587 -f 2380/3481/580 2379/3483/579 2464/3654/587 -f 2380/3481/580 2509/3661/594 2493/3703/620 -f 2381/3488/582 2493/3703/620 2517/3666/597 -f 2382/3486/583 2517/3666/597 2477/3672/601 -f 2367/3489/584 2477/3672/601 2501/3675/603 -f 2368/3491/585 2501/3675/603 2485/3678/605 -f 2369/3497/586 2485/3678/605 2521/3681/607 -f 2370/3495/570 2521/3681/607 2469/3684/609 -f 2371/3501/572 2469/3684/609 2505/3687/611 -f 2372/3463/571 2505/3687/611 2489/3704/621 -f 2373/3468/573 2489/3704/621 2513/3689/612 -f 2374/3466/574 2513/3689/612 2473/3705/622 -f 2375/3473/575 2473/3784/622 2497/3694/615 -f 2497/3694/615 2481/3697/617 2377/3478/577 -f 2527/3706/591 2526/3700/588 2482/3701/618 -f 2528/3708/592 2527/3706/591 2483/3707/623 -f 2483/3710/623 2482/3699/618 2498/3698/616 -f 2484/3712/624 2483/3710/623 2499/3711/625 -f 2499/3714/625 2498/3696/616 2474/3695/614 -f 2476/3716/628 2500/3765/626 2499/3714/625 -f 2475/3717/627 2474/3692/614 2514/3693/613 -f 2476/3719/628 2475/3717/627 2515/3718/629 -f 2491/3721/631 2515/3785/629 2514/3691/613 -f 2516/3722/630 2515/3785/629 2491/3721/631 -f 2491/3724/631 2490/3686/610 2506/3688/608 -f 2492/3726/632 2491/3724/631 2507/3725/633 -f 2507/3728/633 2506/3683/608 2470/3685/606 -f 2508/3730/634 2507/3728/633 2471/3729/635 -f 2470/3680/606 2522/3682/604 2523/3732/637 -f 2472/3734/636 2471/3733/635 2523/3732/637 -f 2523/3736/637 2522/3677/604 2486/3679/602 -f 2524/3738/638 2523/3736/637 2487/3737/639 -f 2487/3740/639 2486/3674/602 2502/3676/600 -f 2488/3742/640 2487/3740/639 2503/3741/641 -f 2479/3744/643 2503/3746/641 2502/3671/600 -f 2480/3745/644 2504/3774/642 2503/3746/641 -f 2479/3747/643 2478/3669/599 2518/3670/598 -f 2480/3749/644 2479/3747/643 2519/3748/645 -f 2495/3751/647 2519/3753/645 2518/3668/598 -f 2496/3752/648 2520/3777/646 2519/3753/645 -f 2495/3754/647 2494/3664/596 2510/3665/595 -f 2496/3756/648 2495/3754/647 2511/3755/649 -f 2511/3758/649 2510/3663/595 2465/3662/589 -f 2512/3760/650 2511/3758/649 2466/3759/590 +f 2825/3986/507 2864/3987/508 2824/3988/509 +f 2841/3989/510 2864/3987/508 2865/3990/511 +f 2856/3991/512 2841/3992/510 2857/3993/513 +f 2820/3994/514 2857/3995/513 2821/3996/515 +f 2872/3997/516 2821/3998/515 2873/3999/517 +f 2836/4000/518 2873/4001/517 2837/4002/519 +f 2852/4003/520 2837/4004/519 2853/4005/521 +f 2828/4006/522 2853/4007/521 2829/4008/523 +f 2868/4009/524 2829/4010/523 2869/4011/525 +f 2844/4012/526 2869/4013/525 2845/4014/527 +f 2849/4015/528 2824/4016/509 2848/4017/529 +f 2849/4018/528 2832/4019/530 2833/4020/531 +f 2833/4021/531 2876/4022/532 2877/4023/533 +f 2816/4024/534 2876/4022/532 2815/4025/535 +f 2816/4026/534 2860/4027/536 2861/4028/537 +f 2845/4029/527 2860/4027/536 2844/4012/526 +f 2817/4030/538 2877/4031/533 2816/4024/534 +f 2879/4032/539 2817/4030/538 2818/4033/540 +f 2850/4034/541 2833/4020/531 2834/4035/542 +f 2835/4036/543 2850/4034/541 2834/4035/542 +f 2833/4021/531 2878/4037/544 2834/4038/542 +f 2834/4038/542 2879/4039/539 2835/4040/543 +f 2825/4041/507 2850/4042/541 2826/4043/545 +f 2826/4043/545 2851/4044/546 2827/4045/547 +f 2826/4046/545 2865/4047/511 2825/3986/507 +f 2827/4048/547 2866/4049/548 2826/4046/545 +f 2841/3989/510 2866/4050/548 2842/4051/549 +f 2843/4052/550 2866/4050/548 2867/4053/551 +f 2842/4054/549 2857/3993/513 2841/3992/510 +f 2843/4055/550 2858/4056/552 2842/4054/549 +f 2821/3996/515 2858/4057/552 2822/4058/553 +f 2822/4058/553 2859/4059/554 2823/4060/555 +f 2874/4061/556 2821/3998/515 2822/4062/553 +f 2823/4063/555 2874/4061/556 2822/4062/553 +f 2837/4002/519 2874/4064/556 2838/4065/557 +f 2838/4065/557 2875/4066/558 2839/4067/559 +f 2838/4068/557 2853/4005/521 2837/4004/519 +f 2839/4069/559 2854/4070/560 2838/4068/557 +f 2830/4071/561 2853/4007/521 2854/4072/560 +f 2831/4073/562 2854/4072/560 2855/4074/563 +f 2830/4075/561 2869/4011/525 2829/4010/523 +f 2831/4076/562 2870/4077/564 2830/4075/561 +f 2846/4078/565 2869/4013/525 2870/4079/564 +f 2847/4080/566 2870/4079/564 2871/4081/567 +f 2862/4082/568 2845/4029/527 2846/4083/565 +f 2847/4084/566 2862/4082/568 2846/4083/565 +f 2816/4026/534 2862/4085/568 2817/4086/538 +f 2817/4086/538 2863/4087/569 2818/4088/540 +f 2819/4089/506 2818/4088/540 2863/4087/569 +f 2863/4090/569 2847/4084/566 2819/4091/506 +f 2871/4081/567 2819/4092/506 2847/4080/566 +f 2871/4093/567 2831/4076/562 2819/4094/506 +f 2855/4074/563 2819/4095/506 2831/4073/562 +f 2855/4096/563 2839/4069/559 2819/4097/506 +f 2875/4066/558 2819/4098/506 2839/4067/559 +f 2875/4099/558 2823/4063/555 2819/4100/506 +f 2859/4059/554 2819/4101/506 2823/4060/555 +f 2859/4102/554 2843/4055/550 2819/4103/506 +f 2867/4053/551 2819/4104/506 2843/4052/550 +f 2867/4105/551 2827/4048/547 2819/4106/506 +f 2851/4044/546 2819/4107/506 2827/4045/547 +f 2819/4108/506 2879/4032/539 2818/4033/540 +f 2879/4039/539 2819/4109/506 2835/4040/543 +f 2851/4110/546 2835/4036/543 2819/4111/506 +f 2810/4112/570 2815/4025/535 2876/4022/532 +f 2812/4113/571 2815/4025/535 2811/4114/572 +f 2812/4113/571 2844/4012/526 2860/4027/536 +f 2868/4009/524 2813/4115/573 2814/4116/574 +f 2814/4116/574 2828/4006/522 2868/4009/524 +f 2852/4003/520 2799/4117/575 2800/4118/576 +f 2800/4118/576 2836/4000/518 2852/4003/520 +f 2872/3997/516 2801/4119/577 2802/4120/578 +f 2802/4120/578 2820/3994/514 2872/3997/516 +f 2856/3991/512 2803/4121/579 2804/4122/580 +f 2804/4122/580 2840/4123/581 2856/3991/512 +f 2864/3987/508 2805/4124/582 2806/4125/583 +f 2806/4125/583 2824/3988/509 2864/3987/508 +f 2848/4017/529 2807/3946/584 2808/4126/585 +f 2809/4127/586 2848/4017/529 2808/4126/585 +f 2810/4112/570 2832/4019/530 2809/4127/586 +f 2880/4128/587 2942/4129/588 2881/4130/589 +f 2882/4131/590 2942/4129/588 2943/4132/591 +f 2882/4131/590 2944/4133/592 2883/4134/593 +f 2925/4135/594 2881/4136/589 2926/4137/595 +f 2910/4138/596 2925/4135/594 2926/4139/595 +f 2933/4140/597 2910/4141/596 2934/4142/598 +f 2894/4143/599 2933/4140/597 2934/4144/598 +f 2918/4145/600 2893/4146/601 2894/4147/599 +f 2902/4148/602 2917/4149/603 2918/4150/600 +f 2938/4151/604 2901/4152/605 2902/4153/602 +f 2886/4154/606 2937/4155/607 2938/4156/604 +f 2922/4157/608 2885/4158/609 2886/4159/606 +f 2906/4160/610 2921/4161/611 2922/4162/608 +f 2929/4163/612 2906/4164/610 2930/4165/613 +f 2890/4166/614 2929/4163/612 2930/4167/613 +f 2913/4168/615 2890/4169/614 2914/4170/616 +f 2897/4171/617 2914/4172/616 2898/4173/618 +f 2942/4174/588 2897/4171/617 2898/4175/618 +f 2793/3952/577 2941/4176/619 2794/3950/578 +f 2794/3950/578 2880/4128/587 2795/3957/579 +f 2796/3955/580 2880/4128/587 2925/4135/594 +f 2796/3955/580 2909/4177/620 2797/3962/582 +f 2797/3962/582 2933/4140/597 2798/3960/583 +f 2798/3960/583 2893/4146/601 2783/3963/584 +f 2783/3963/584 2917/4149/603 2784/3965/585 +f 2784/3965/585 2901/4152/605 2785/3971/586 +f 2785/3971/586 2937/4155/607 2786/3969/570 +f 2786/3969/570 2885/4158/609 2787/3975/572 +f 2787/3975/572 2921/4161/611 2788/3937/571 +f 2788/3937/571 2905/4178/621 2789/3942/573 +f 2789/3942/573 2929/4163/612 2790/3940/574 +f 2790/3940/574 2889/4179/622 2791/3943/575 +f 2791/3947/575 2913/4168/615 2792/3945/576 +f 2913/4168/615 2793/3952/577 2792/3945/576 +f 2943/4180/591 2898/4175/618 2899/4181/623 +f 2944/4182/592 2899/4181/623 2900/4183/624 +f 2899/4184/623 2914/4172/616 2915/4185/625 +f 2900/4186/624 2915/4185/625 2916/4187/626 +f 2915/4188/625 2890/4169/614 2891/4189/627 +f 2892/4190/628 2915/4188/625 2891/4189/627 +f 2891/4191/627 2930/4167/613 2931/4192/629 +f 2892/4193/628 2931/4192/629 2932/4194/630 +f 2907/4195/631 2930/4165/613 2906/4164/610 +f 2932/4196/630 2907/4195/631 2908/4197/632 +f 2907/4198/631 2922/4162/608 2923/4199/633 +f 2908/4200/632 2923/4199/633 2924/4201/634 +f 2923/4202/633 2886/4159/606 2887/4203/635 +f 2924/4204/634 2887/4203/635 2888/4205/636 +f 2886/4154/606 2939/4206/637 2887/4207/635 +f 2888/4208/636 2939/4206/637 2940/4209/638 +f 2939/4210/637 2902/4153/602 2903/4211/639 +f 2940/4212/638 2903/4211/639 2904/4213/640 +f 2903/4214/639 2918/4150/600 2919/4215/641 +f 2904/4216/640 2919/4215/641 2920/4217/642 +f 2895/4218/643 2918/4145/600 2894/4147/599 +f 2896/4219/644 2919/4220/641 2895/4218/643 +f 2895/4221/643 2934/4144/598 2935/4222/645 +f 2896/4223/644 2935/4222/645 2936/4224/646 +f 2911/4225/647 2934/4142/598 2910/4141/596 +f 2912/4226/648 2935/4227/645 2911/4225/647 +f 2911/4228/647 2926/4139/595 2927/4229/649 +f 2912/4230/648 2927/4229/649 2928/4231/650 +f 2927/4232/649 2881/4136/589 2882/4233/590 +f 2928/4234/650 2882/4233/590 2883/4235/593 +f 2884/4236/651 2883/4134/593 2944/4133/592 +f 2944/4182/592 2900/4183/624 2884/4237/651 +f 2916/4187/626 2884/4238/651 2900/4186/624 +f 2916/4239/626 2892/4190/628 2884/4240/651 +f 2932/4194/630 2884/4241/651 2892/4193/628 +f 2932/4196/630 2908/4197/632 2884/4242/651 +f 2924/4201/634 2884/4243/651 2908/4200/632 +f 2924/4204/634 2888/4205/636 2884/4244/651 +f 2940/4209/638 2884/4245/651 2888/4208/636 +f 2940/4212/638 2904/4213/640 2884/4246/651 +f 2920/4217/642 2884/4247/651 2904/4216/640 +f 2920/4248/642 2896/4219/644 2884/4249/651 +f 2936/4224/646 2884/4250/651 2896/4223/644 +f 2936/4251/646 2912/4226/648 2884/4252/651 +f 2928/4231/650 2884/4253/651 2912/4230/648 +f 2884/4254/651 2928/4234/650 2883/4235/593 +f 2825/3986/507 2865/4047/511 2864/3987/508 +f 2841/3989/510 2840/4123/581 2864/3987/508 +f 2856/3991/512 2840/4123/581 2841/3992/510 +f 2820/3994/514 2856/3991/512 2857/3995/513 +f 2872/3997/516 2820/3994/514 2821/3998/515 +f 2836/4000/518 2872/3997/516 2873/4001/517 +f 2852/4003/520 2836/4000/518 2837/4004/519 +f 2828/4006/522 2852/4003/520 2853/4007/521 +f 2868/4009/524 2828/4006/522 2829/4010/523 +f 2844/4012/526 2868/4009/524 2869/4013/525 +f 2849/4015/528 2825/4041/507 2824/4016/509 +f 2849/4018/528 2848/4017/529 2832/4019/530 +f 2833/4021/531 2832/4019/530 2876/4022/532 +f 2816/4024/534 2877/4031/533 2876/4022/532 +f 2816/4026/534 2815/4025/535 2860/4027/536 +f 2845/4029/527 2861/4255/537 2860/4027/536 +f 2817/4030/538 2878/4256/544 2877/4031/533 +f 2879/4032/539 2878/4256/544 2817/4030/538 +f 2850/4034/541 2849/4018/528 2833/4020/531 +f 2835/4036/543 2851/4110/546 2850/4034/541 +f 2833/4021/531 2877/4023/533 2878/4037/544 +f 2834/4038/542 2878/4037/544 2879/4039/539 +f 2825/4041/507 2849/4015/528 2850/4042/541 +f 2826/4043/545 2850/4042/541 2851/4044/546 +f 2826/4046/545 2866/4049/548 2865/4047/511 +f 2827/4048/547 2867/4105/551 2866/4049/548 +f 2841/3989/510 2865/3990/511 2866/4050/548 +f 2843/4052/550 2842/4051/549 2866/4050/548 +f 2842/4054/549 2858/4056/552 2857/3993/513 +f 2843/4055/550 2859/4102/554 2858/4056/552 +f 2821/3996/515 2857/3995/513 2858/4057/552 +f 2822/4058/553 2858/4057/552 2859/4059/554 +f 2874/4061/556 2873/3999/517 2821/3998/515 +f 2823/4063/555 2875/4099/558 2874/4061/556 +f 2837/4002/519 2873/4001/517 2874/4064/556 +f 2838/4065/557 2874/4064/556 2875/4066/558 +f 2838/4068/557 2854/4070/560 2853/4005/521 +f 2839/4069/559 2855/4096/563 2854/4070/560 +f 2830/4071/561 2829/4008/523 2853/4007/521 +f 2831/4073/562 2830/4071/561 2854/4072/560 +f 2830/4075/561 2870/4077/564 2869/4011/525 +f 2831/4076/562 2871/4093/567 2870/4077/564 +f 2846/4078/565 2845/4014/527 2869/4013/525 +f 2847/4080/566 2846/4078/565 2870/4079/564 +f 2862/4082/568 2861/4255/537 2845/4029/527 +f 2847/4084/566 2863/4090/569 2862/4082/568 +f 2816/4026/534 2861/4028/537 2862/4085/568 +f 2817/4086/538 2862/4085/568 2863/4087/569 +f 2810/4112/570 2811/4114/572 2815/4025/535 +f 2812/4113/571 2860/4027/536 2815/4025/535 +f 2812/4113/571 2813/4115/573 2844/4012/526 +f 2868/4009/524 2844/4012/526 2813/4115/573 +f 2814/4116/574 2799/4117/575 2828/4006/522 +f 2852/4003/520 2828/4006/522 2799/4117/575 +f 2800/4118/576 2801/4119/577 2836/4000/518 +f 2872/3997/516 2836/4000/518 2801/4119/577 +f 2802/4120/578 2803/4121/579 2820/3994/514 +f 2856/3991/512 2820/3994/514 2803/4121/579 +f 2804/4122/580 2805/4124/582 2840/4123/581 +f 2864/3987/508 2840/4123/581 2805/4124/582 +f 2806/4125/583 2807/4257/584 2824/3988/509 +f 2848/4017/529 2824/4016/509 2807/3946/584 +f 2809/4127/586 2832/4019/530 2848/4017/529 +f 2810/4112/570 2876/4022/532 2832/4019/530 +f 2880/4128/587 2941/4176/619 2942/4129/588 +f 2882/4131/590 2881/4130/589 2942/4129/588 +f 2882/4131/590 2943/4132/591 2944/4133/592 +f 2925/4135/594 2880/4128/587 2881/4136/589 +f 2910/4138/596 2909/4177/620 2925/4135/594 +f 2933/4140/597 2909/4177/620 2910/4141/596 +f 2894/4143/599 2893/4146/601 2933/4140/597 +f 2918/4145/600 2917/4149/603 2893/4146/601 +f 2902/4148/602 2901/4152/605 2917/4149/603 +f 2938/4151/604 2937/4155/607 2901/4152/605 +f 2886/4154/606 2885/4158/609 2937/4155/607 +f 2922/4157/608 2921/4161/611 2885/4158/609 +f 2906/4160/610 2905/4178/621 2921/4161/611 +f 2929/4163/612 2905/4178/621 2906/4164/610 +f 2890/4166/614 2889/4179/622 2929/4163/612 +f 2913/4168/615 2889/4258/622 2890/4169/614 +f 2897/4171/617 2913/4168/615 2914/4172/616 +f 2942/4174/588 2941/4176/619 2897/4171/617 +f 2793/3952/577 2897/4171/617 2941/4176/619 +f 2794/3950/578 2941/4176/619 2880/4128/587 +f 2796/3955/580 2795/3957/579 2880/4128/587 +f 2796/3955/580 2925/4135/594 2909/4177/620 +f 2797/3962/582 2909/4177/620 2933/4140/597 +f 2798/3960/583 2933/4140/597 2893/4146/601 +f 2783/3963/584 2893/4146/601 2917/4149/603 +f 2784/3965/585 2917/4149/603 2901/4152/605 +f 2785/3971/586 2901/4152/605 2937/4155/607 +f 2786/3969/570 2937/4155/607 2885/4158/609 +f 2787/3975/572 2885/4158/609 2921/4161/611 +f 2788/3937/571 2921/4161/611 2905/4178/621 +f 2789/3942/573 2905/4178/621 2929/4163/612 +f 2790/3940/574 2929/4163/612 2889/4179/622 +f 2791/3947/575 2889/4258/622 2913/4168/615 +f 2913/4168/615 2897/4171/617 2793/3952/577 +f 2943/4180/591 2942/4174/588 2898/4175/618 +f 2944/4182/592 2943/4180/591 2899/4181/623 +f 2899/4184/623 2898/4173/618 2914/4172/616 +f 2900/4186/624 2899/4184/623 2915/4185/625 +f 2915/4188/625 2914/4170/616 2890/4169/614 +f 2892/4190/628 2916/4239/626 2915/4188/625 +f 2891/4191/627 2890/4166/614 2930/4167/613 +f 2892/4193/628 2891/4191/627 2931/4192/629 +f 2907/4195/631 2931/4259/629 2930/4165/613 +f 2932/4196/630 2931/4259/629 2907/4195/631 +f 2907/4198/631 2906/4160/610 2922/4162/608 +f 2908/4200/632 2907/4198/631 2923/4199/633 +f 2923/4202/633 2922/4157/608 2886/4159/606 +f 2924/4204/634 2923/4202/633 2887/4203/635 +f 2886/4154/606 2938/4156/604 2939/4206/637 +f 2888/4208/636 2887/4207/635 2939/4206/637 +f 2939/4210/637 2938/4151/604 2902/4153/602 +f 2940/4212/638 2939/4210/637 2903/4211/639 +f 2903/4214/639 2902/4148/602 2918/4150/600 +f 2904/4216/640 2903/4214/639 2919/4215/641 +f 2895/4218/643 2919/4220/641 2918/4145/600 +f 2896/4219/644 2920/4248/642 2919/4220/641 +f 2895/4221/643 2894/4143/599 2934/4144/598 +f 2896/4223/644 2895/4221/643 2935/4222/645 +f 2911/4225/647 2935/4227/645 2934/4142/598 +f 2912/4226/648 2936/4251/646 2935/4227/645 +f 2911/4228/647 2910/4138/596 2926/4139/595 +f 2912/4230/648 2911/4228/647 2927/4229/649 +f 2927/4232/649 2926/4137/595 2881/4136/589 +f 2928/4234/650 2927/4232/649 2882/4233/590 o Frame v -3.125000 4.499998 -5.500007 v -2.375000 4.499998 -5.500007 @@ -14468,2068 +15774,2068 @@ vn -0.1363 -0.6737 -0.7263 vn 0.1448 0.7194 0.6794 vn -0.1363 -0.6737 0.7263 s off -f 2533/3786/652 2529/3787/652 2534/3788/652 -f 2534/3788/653 2531/3789/653 2540/3790/653 -f 2540/3791/654 2532/3792/654 2539/3793/654 -f 2539/3794/655 2533/3795/655 2535/3796/655 -f 2535/3796/656 2534/3788/656 2538/3797/656 -f 2540/3798/653 2538/3797/653 2534/3799/653 -f 2541/3800/657 2537/3801/657 2542/3802/657 -f 2539/3793/655 2530/3803/655 2533/3786/655 -f 2540/3798/653 2537/3801/653 2538/3797/653 -f 2539/3794/655 2536/3804/655 2541/3805/655 -f 2536/3804/658 2538/3797/658 2537/3801/658 -f 2540/3806/659 2541/3805/659 2542/3807/659 -f 2544/3808/658 2545/3809/658 2543/3810/658 -f 2545/3811/660 2546/3812/660 2543/3813/660 -f 2544/3808/655 2548/3814/655 2545/3809/655 -f 2543/3813/654 2547/3815/654 2544/3808/654 -f 2549/3816/654 2552/3817/654 2550/3818/654 -f 2549/3819/653 2554/3820/653 2551/3821/653 -f 2552/3817/661 2553/3822/661 2550/3818/661 -f 2550/3823/658 2553/3824/658 2549/3819/658 -f 2548/3814/658 2552/3825/658 2546/3826/658 -f 2562/3827/662 2568/3828/662 2560/3829/662 -f 2569/3830/658 2562/3831/658 2561/3832/658 -f 2565/3833/663 2555/3834/663 2557/3835/663 -f 2558/3836/659 2565/3837/659 2557/3838/659 -f 2567/3839/664 2561/3840/664 2559/3841/664 -f 2568/3828/655 2556/3842/655 2560/3829/655 -f 2564/3843/665 2558/3844/665 2556/3842/665 -f 2563/3845/653 2559/3841/653 2555/3834/653 -f 2558/3846/654 2546/3812/654 2552/3817/654 -f 2546/3812/654 2555/3847/654 2547/3815/654 -f 2552/3817/654 2556/3848/654 2558/3846/654 -f 2548/3814/652 2566/3849/652 2554/3820/652 -f 2566/3849/652 2564/3850/652 2554/3820/652 -f 2565/3837/652 2548/3814/652 2563/3851/652 -f 2583/3852/659 2597/3853/659 2592/3854/659 -f 2573/3855/658 2574/3856/658 2575/3857/658 -f 2575/3857/658 2576/3858/658 2573/3855/658 -f 2574/3856/655 2597/3859/655 2584/3860/655 -f 2576/3858/658 2577/3861/658 2580/3862/658 -f 2593/3863/653 2589/3864/653 2578/3865/653 -f 2581/3866/659 2585/3867/659 2584/3868/659 -f 2587/3869/659 2585/3867/659 2581/3866/659 -f 2595/3870/652 2592/3854/652 2597/3853/652 -f 2587/3869/659 2588/3871/659 2586/3872/659 -f 2577/3861/660 2588/3873/660 2580/3874/660 -f 2627/3875/658 2620/3876/658 2619/3877/658 -f 2573/3855/653 2582/3878/653 2571/3879/653 -f 2575/3857/652 2586/3872/652 2577/3861/652 -f 2574/3880/661 2585/3867/661 2575/3857/661 -f 2579/3881/655 2587/3882/655 2576/3858/655 -f 2620/3883/662 2626/3884/662 2618/3885/662 -f 2576/3886/654 2581/3866/654 2573/3887/654 -f 2572/3888/655 2592/3889/655 2591/3890/655 -f 2588/3891/653 2596/3892/653 2580/3862/653 -f 2572/3888/658 2595/3893/658 2571/3879/658 -f 2595/3893/658 2573/3855/658 2571/3879/658 -f 2581/3866/659 2597/3853/659 2582/3894/659 -f 2598/3895/659 2587/3869/659 2590/3896/659 -f 2576/3858/658 2596/3892/658 2579/3881/658 -f 2598/3895/659 2589/3897/659 2594/3898/659 -f 2578/3865/658 2596/3892/658 2593/3863/658 -f 2594/3898/652 2596/3899/652 2598/3895/652 -f 2547/3815/655 2600/3900/655 2548/3814/655 -f 2600/3901/655 2599/3902/655 2601/3903/655 -f 2601/3903/666 2599/3904/666 2602/3905/666 -f 2604/3906/667 2605/3907/667 2603/3908/667 -f 2605/3907/653 2604/3909/653 2610/3910/653 -f 2602/3905/659 2605/3907/659 2609/3911/659 -f 2610/3912/653 2551/3821/653 2554/3820/653 -f 2607/3913/668 2612/3914/668 2609/3911/668 -f 2611/3915/669 2606/3916/669 2608/3917/669 -f 2600/3901/655 2606/3916/655 2611/3918/655 -f 2610/3910/653 2607/3913/653 2605/3907/653 -f 2609/3911/652 2611/3919/652 2608/3917/652 -f 2623/3920/663 2613/3921/663 2615/3922/663 -f 2616/3923/659 2623/3924/659 2615/3925/659 -f 2625/3926/664 2619/3927/664 2617/3928/664 -f 2626/3884/655 2614/3929/655 2618/3885/655 -f 2622/3930/665 2616/3931/665 2614/3929/665 -f 2621/3932/653 2617/3928/653 2613/3921/653 -f 2569/3830/652 2624/3933/652 2570/3934/652 -f 2616/3935/654 2561/3936/654 2562/3937/654 -f 2621/3938/652 2569/3830/652 2567/3939/652 -f 2561/3936/654 2613/3940/654 2559/3941/654 -f 2560/3942/654 2616/3935/654 2562/3937/654 -f 2624/3933/652 2568/3943/652 2570/3934/652 -f 2612/3944/658 2600/3900/658 2611/3945/658 -f 2627/3875/652 2610/3912/652 2628/3946/652 -f 2628/3946/652 2610/3912/652 2626/3947/652 -f 2627/3875/652 2625/3948/652 2600/3900/652 -f 2602/3905/654 2620/3949/654 2603/3908/654 -f 2620/3949/654 2604/3950/654 2603/3908/654 -f 2599/3951/654 2619/3952/654 2602/3905/654 -f 2599/3951/654 2547/3815/654 2559/3941/654 -f 2621/3938/652 2567/3939/652 2548/3814/652 -f 2604/3950/654 2618/3953/654 2614/3954/654 -f 2622/3955/652 2610/3912/652 2554/3820/652 -f 2633/3956/658 2632/3957/658 2629/3958/658 -f 2631/3959/659 2634/3960/659 2630/3961/659 -f 2632/3957/653 2635/3962/653 2631/3963/653 -f 2630/3961/655 2633/3956/655 2629/3958/655 -f 2641/3964/658 2640/3965/658 2637/3966/658 -f 2639/3967/659 2642/3968/659 2638/3969/659 -f 2640/3965/653 2643/3970/653 2639/3967/653 -f 2638/3971/655 2641/3964/655 2637/3966/655 -f 2642/3972/670 2647/3973/670 2641/3974/670 -f 2636/3975/671 2645/3976/671 2635/3977/671 -f 2646/3978/654 2648/3979/654 2645/3980/654 -f 2646/3978/658 2651/3981/658 2647/3982/658 -f 2648/3983/659 2649/3984/659 2645/3985/659 -f 2651/3981/652 2649/3984/652 2652/3986/652 -f 2647/3982/658 2644/3987/658 2641/3988/658 -f 2651/3981/660 2643/3970/660 2644/3989/660 -f 2652/3986/659 2642/3990/659 2643/3991/659 -f 2650/3992/658 2636/3993/658 2633/3994/658 -f 2634/3960/661 2650/3992/661 2633/3956/661 -f 2645/3985/659 2634/3995/659 2635/3996/659 -f 2659/3997/658 2660/3998/658 2653/3999/658 -f 2685/4000/658 2689/4001/658 2693/4002/658 -f 2679/4003/659 2675/4004/659 2671/4005/659 -f 2702/4006/658 2703/4007/658 2701/4008/658 -f 2703/4009/670 2704/4010/670 2701/4011/670 -f 2702/4006/653 2706/4012/653 2703/4009/653 -f 2701/4008/652 2705/4013/652 2702/4006/652 -f 2707/4014/652 2710/4015/652 2708/4016/652 -f 2707/4014/655 2712/4017/655 2709/4018/655 -f 2710/4019/671 2711/4020/671 2708/4021/671 -f 2708/4016/658 2711/4022/658 2707/4014/658 -f 2710/4015/658 2714/4023/658 2712/4024/658 -f 2706/4025/658 2715/4026/658 2704/4027/658 -f 2710/4015/660 2723/4028/660 2713/4029/660 -f 2704/4027/652 2718/4030/652 2705/4013/652 -f 2712/4017/655 2722/4031/655 2709/4018/655 -f 2715/4026/661 2719/4032/661 2704/4027/661 -f 2706/4012/671 2726/4033/671 2716/4034/671 -f 2709/4018/652 2721/4035/652 2710/4015/652 -f 2714/4036/670 2720/4037/670 2712/4017/670 -f 2705/4013/653 2717/4038/653 2706/4012/653 -f 2723/4028/659 2720/4039/659 2724/4040/659 -f 2718/4030/659 2719/4032/659 2717/4041/659 -f 2729/4042/670 2730/4043/670 2727/4044/670 -f 2728/4045/653 2732/4046/653 2729/4042/653 -f 2727/4047/652 2731/4048/652 2728/4045/652 -f 2733/4049/652 2736/4050/652 2734/4051/652 -f 2733/4049/655 2738/4052/655 2735/4053/655 -f 2736/4054/671 2737/4055/671 2734/4056/671 -f 2742/4057/658 2745/4058/658 2746/4059/658 -f 2740/4060/658 2739/4061/658 2741/4062/658 -f 2743/4063/652 2733/4049/652 2734/4051/652 -f 2744/4064/655 2737/4055/655 2733/4049/655 -f 2740/4060/652 2727/4047/652 2728/4045/652 -f 2739/4065/653 2728/4045/653 2729/4042/653 -f 2743/4063/660 2749/4066/660 2745/4058/660 -f 2737/4067/659 2749/4066/659 2734/4051/659 -f 2750/4068/670 2742/4069/670 2746/4070/670 -f 2751/4071/661 2741/4062/661 2747/4072/661 -f 2751/4071/659 2729/4073/659 2727/4047/659 -f 2739/4065/671 2752/4074/671 2748/4075/671 -f 2951/4076/659 2950/4077/659 2949/4078/659 -f 2955/4079/658 2953/4080/658 2954/4081/658 -f 2952/4082/655 2955/4079/655 2950/4077/655 -f 2951/4083/653 2954/4081/653 2953/4080/653 -f 2952/4084/655 2961/4085/655 2958/4086/655 -f 2950/4087/657 2954/4081/657 2949/4088/657 -f 2951/4083/653 2953/4080/653 2957/4089/653 -f 2956/4090/656 2957/4091/656 2953/4080/656 -f 2952/4082/655 2958/4092/655 2956/4090/655 -f 2951/4093/654 2959/4094/654 2952/4084/654 -f 2957/4091/653 2960/4095/653 2951/4096/653 -f 2958/4086/652 2962/4097/652 2957/4091/652 -f 2966/4098/652 2969/4099/652 2965/4100/652 -f 2963/4101/654 2968/4102/654 2964/4103/654 -f 2964/4103/655 2970/4104/655 2966/4098/655 -f 2965/4100/653 2967/4105/653 2963/4106/653 -f 2974/4107/652 2977/4108/652 2973/4109/652 -f 2971/4110/654 2976/4111/654 2972/4112/654 -f 2972/4112/655 2978/4113/655 2974/4107/655 -f 2973/4109/653 2975/4114/653 2971/4115/653 -f 2985/4116/652 2982/4117/652 2981/4118/652 -f 2984/4119/654 2979/4120/654 2980/4121/654 -f 2986/4122/655 2980/4121/655 2982/4117/655 -f 2983/4123/653 2981/4118/653 2979/4124/653 -f 2993/4125/652 2990/4126/652 2989/4127/652 -f 2992/4128/654 2987/4129/654 2988/4130/654 -f 2994/4131/655 2988/4130/655 2990/4126/655 -f 2991/4132/653 2989/4127/653 2987/4133/653 -f 3001/4134/652 2998/4135/652 2997/4136/652 -f 3000/4137/654 2995/4138/654 2996/4139/654 -f 3002/4140/655 2996/4139/655 2998/4135/655 -f 2999/4141/653 2997/4136/653 2995/4142/653 -f 3009/4143/652 3006/4144/652 3005/4145/652 -f 3008/4146/654 3003/4147/654 3004/4148/654 -f 3010/4149/655 3004/4148/655 3006/4144/655 -f 3007/4150/653 3005/4145/653 3003/4151/653 -f 3017/4152/652 3014/4153/652 3013/4154/652 -f 3016/4155/654 3011/4156/654 3012/4157/654 -f 3018/4158/655 3012/4157/655 3014/4153/655 -f 3015/4159/653 3013/4154/653 3011/4160/653 -f 3025/4161/652 3022/4162/652 3021/4163/652 -f 3024/4164/654 3019/4165/654 3020/4166/654 -f 3026/4167/655 3020/4166/655 3022/4162/655 -f 3023/4168/653 3021/4163/653 3019/4169/653 -f 3033/4170/652 3030/4171/652 3029/4172/652 -f 3032/4173/654 3027/4174/654 3028/4175/654 -f 3034/4176/655 3028/4175/655 3030/4171/655 -f 3031/4177/653 3029/4172/653 3027/4178/653 -f 3041/4179/652 3038/4180/652 3037/4181/652 -f 3040/4182/654 3035/4183/654 3036/4184/654 -f 3042/4185/655 3036/4184/655 3038/4180/655 -f 3039/4186/653 3037/4181/653 3035/4187/653 -f 3049/4188/652 3046/4189/652 3045/4190/652 -f 3048/4191/654 3043/4192/654 3044/4193/654 -f 3050/4194/655 3044/4193/655 3046/4189/655 -f 3047/4195/653 3045/4190/653 3043/4196/653 -f 3057/4197/652 3054/4198/652 3053/4199/652 -f 3056/4200/654 3051/4201/654 3052/4202/654 -f 3058/4203/655 3052/4202/655 3054/4198/655 -f 3055/4204/653 3053/4199/653 3051/4205/653 -f 3060/4206/655 3061/4207/655 3059/4208/655 -f 3066/4209/665 3067/4210/665 3063/4211/665 -f 3060/4206/654 3066/4212/654 3062/4213/654 -f 3061/4214/652 3064/4215/652 3059/4208/652 -f 3062/4216/659 3063/4217/659 3061/4214/659 -f 3059/4208/658 3065/4218/658 3060/4206/658 -f 3068/4219/655 3069/4220/655 3067/4221/655 -f 3068/4222/654 3074/4223/654 3070/4224/654 -f 3069/4220/652 3071/4225/652 3067/4221/652 -f 3074/4223/653 3071/4225/653 3073/4226/653 -f 3064/4215/664 3072/4227/664 3065/4218/664 -f 3072/4227/654 3066/4228/654 3065/4218/654 -f 3067/4210/652 3064/4215/652 3063/4211/652 -f 3076/4229/653 3077/4230/653 3075/4231/653 -f 3078/4232/659 3081/4233/659 3077/4234/659 -f 3082/4235/655 3079/4236/655 3081/4233/655 -f 3080/4237/658 3075/4231/658 3079/4236/658 -f 3078/4238/654 3090/4239/654 3082/4240/654 -f 3082/4240/655 3094/4241/655 3086/4242/655 -f 3078/4243/653 3076/4244/653 3085/4245/653 -f 3086/4242/656 3076/4229/656 3080/4237/656 -f 3082/4240/655 3086/4242/655 3080/4246/655 -f 3077/4247/653 3083/4248/653 3075/4249/653 -f 3083/4248/657 3079/4236/657 3075/4231/657 -f 3081/4250/655 3079/4251/655 3084/4252/655 -f 3084/4252/655 3087/4253/655 3081/4250/655 -f 3083/4248/654 3091/4254/654 3084/4252/654 -f 3085/4245/653 3089/4255/653 3078/4243/653 -f 3086/4242/652 3093/4256/652 3085/4245/652 -f 3081/4250/652 3088/4257/652 3077/4258/652 -f 3077/4247/653 3092/4259/653 3083/4248/653 -f 3097/4260/659 3102/4261/659 3101/4262/659 -f 3096/4263/653 3097/4260/653 3095/4264/653 -f 3095/4264/658 3100/4265/658 3096/4266/658 -f 3097/4260/654 3099/4267/654 3095/4264/654 -f 3105/4268/659 3110/4269/659 3109/4270/659 -f 3104/4271/653 3105/4268/653 3103/4272/653 -f 3103/4272/658 3108/4273/658 3104/4274/658 -f 3105/4268/654 3107/4275/654 3103/4272/654 -f 3114/4276/672 3112/4277/672 3111/4278/672 -f 3115/4279/653 3113/4280/653 3118/4281/653 -f 3120/4282/655 3126/4283/655 3121/4284/655 -f 3122/4285/657 3120/4282/657 3121/4284/657 -f 3122/4286/653 3124/4287/653 3119/4288/653 -f 3115/4289/657 3117/4290/657 3116/4291/657 -f 3117/4290/655 3111/4278/655 3116/4291/655 -f 3123/4292/672 3125/4293/672 3126/4283/672 -f 3133/4294/652 3131/4295/652 3132/4296/652 -f 3129/4297/659 3134/4298/659 3130/4299/659 -f 3128/4300/658 3132/4296/658 3127/4301/658 -f 3130/4302/655 3133/4294/655 3128/4303/655 -f 3127/4304/653 3131/4295/653 3129/4305/653 -f 3137/4306/653 3139/4307/653 3135/4308/653 -f 3142/4309/658 3137/4306/658 3138/4310/658 -f 3136/4311/655 3142/4309/655 3138/4310/655 -f 3135/4312/659 3140/4313/659 3136/4311/659 -f 3145/4314/653 3147/4315/653 3143/4316/653 -f 3150/4317/658 3145/4318/658 3146/4319/658 -f 3144/4320/655 3150/4317/655 3146/4319/655 -f 3143/4316/659 3148/4321/659 3144/4320/659 -f 3153/4322/653 3155/4323/653 3151/4324/653 -f 3158/4325/658 3153/4322/658 3154/4326/658 -f 3152/4327/655 3158/4325/655 3154/4326/655 -f 3151/4324/659 3156/4328/659 3152/4329/659 -f 3161/4330/653 3163/4331/653 3159/4332/653 -f 3166/4333/658 3161/4330/658 3162/4334/658 -f 3160/4335/655 3166/4336/655 3162/4337/655 -f 3159/4332/659 3164/4338/659 3160/4335/659 -f 3170/4339/652 3167/4340/652 3168/4341/652 -f 3171/4342/654 3174/4343/654 3172/4344/654 -f 3170/4339/653 3173/4345/653 3169/4346/653 -f 3167/4340/655 3172/4344/655 3168/4341/655 -f 3168/4341/659 3174/4347/659 3170/4339/659 -f 3169/4346/658 3171/4348/658 3167/4340/658 -f 3180/4349/672 3185/4350/672 3179/4351/672 -f 3179/4352/652 3182/4353/652 3180/4354/652 -f 3177/4355/655 3179/4352/655 3175/4356/655 -f 3178/4357/653 3180/4354/653 3182/4353/653 -f 3179/4351/655 3183/4358/655 3175/4356/655 -f 3176/4359/653 3186/4360/653 3180/4349/653 -f 3188/4361/653 3189/4362/653 3187/4363/653 -f 3190/4364/659 3193/4365/659 3189/4366/659 -f 3194/4367/655 3191/4368/655 3193/4369/655 -f 3190/4364/652 3192/4370/652 3194/4367/652 -f 3202/4371/653 3196/4372/653 3198/4373/653 -f 3195/4374/655 3201/4375/655 3197/4376/655 -f 3197/4376/652 3202/4371/652 3198/4373/652 -f 3201/4377/658 3204/4378/658 3202/4379/658 -f 3203/4380/652 3206/4381/652 3204/4378/652 -f 3202/4379/653 3206/4382/653 3200/4383/653 -f 3205/4384/655 3201/4377/655 3199/4385/655 -f 3213/4386/672 3210/4387/672 3209/4388/672 -f 3211/4389/653 3209/4388/653 3207/4390/653 -f 3214/4391/655 3208/4392/655 3210/4387/655 -f 3217/4393/655 3216/4394/655 3215/4395/655 -f 3221/4396/659 3218/4397/659 3217/4398/659 -f 3219/4399/653 3222/4400/653 3221/4401/653 -f 3220/4402/652 3218/4397/652 3222/4400/652 -f 3229/4403/652 3227/4404/652 3228/4405/652 -f 3225/4406/659 3234/4407/659 3226/4408/659 -f 3223/4409/653 3231/4410/653 3225/4411/653 -f 3226/4412/655 3233/4413/655 3224/4414/655 -f 3233/4413/652 3231/4410/652 3232/4415/652 -f 3224/4416/658 3232/4415/658 3223/4417/658 -f 3235/4418/654 3237/4419/654 3236/4420/654 -f 3229/4403/655 3238/4421/655 3230/4422/655 -f 3227/4404/653 3236/4423/653 3228/4405/653 -f 3230/4422/659 3235/4424/659 3227/4404/659 -f 3228/4405/658 3237/4419/658 3229/4403/658 -f 3208/4392/655 3458/4425/655 3210/4426/655 -f 3209/4427/653 3455/4428/653 3207/4390/653 -f 3210/4426/652 3457/4429/652 3209/4427/652 -f 3458/4430/655 3460/4431/655 3462/4432/655 -f 3457/4433/653 3459/4434/653 3455/4428/653 -f 3458/4430/658 3461/4435/658 3457/4433/658 -f 3460/4436/655 3466/4437/655 3462/4432/655 -f 3459/4438/653 3465/4439/653 3463/4440/653 -f 3462/4432/652 3465/4439/652 3461/4435/652 -f 3464/4441/659 3465/4439/659 3466/4437/659 -f 3480/4442/653 3481/4443/653 3479/4444/653 -f 3472/4445/653 3473/4446/653 3471/4447/653 -f 3470/4448/658 3472/4449/658 3468/4450/658 -f 3571/4451/653 3573/4452/653 3564/4453/653 -f 3467/4454/659 3473/4446/659 3469/4455/659 -f 3469/4455/652 3474/4456/652 3470/4448/652 -f 3478/4457/658 3480/4458/658 3476/4459/658 -f 3566/4460/655 3576/4461/655 3572/4462/655 -f 3475/4463/659 3481/4443/659 3477/4464/659 -f 3477/4464/652 3482/4465/652 3478/4457/652 -f 3496/4466/653 3497/4467/653 3495/4468/653 -f 3488/4469/653 3489/4470/653 3487/4471/653 -f 3486/4472/658 3488/4473/658 3484/4474/658 -f 3585/4475/653 3587/4476/653 3578/4477/653 -f 3483/4478/659 3489/4470/659 3485/4479/659 -f 3485/4479/652 3490/4480/652 3486/4472/652 -f 3494/4481/658 3496/4482/658 3492/4483/658 -f 3564/4484/653 3569/4485/653 3571/4486/653 -f 3491/4487/659 3497/4467/659 3493/4488/659 -f 3493/4488/652 3498/4489/652 3494/4481/652 -f 3512/4490/653 3513/4491/653 3511/4492/653 -f 3504/4493/653 3505/4494/653 3503/4495/653 -f 3502/4496/658 3504/4497/658 3500/4498/658 -f 3572/4462/656 3569/4485/656 3570/4499/656 -f 3499/4500/659 3505/4494/659 3501/4501/659 -f 3501/4501/652 3506/4502/652 3502/4496/652 -f 3510/4503/658 3512/4504/658 3508/4505/658 -f 3566/4506/655 3572/4507/655 3570/4499/655 -f 3507/4508/659 3513/4491/659 3509/4509/659 -f 3509/4509/652 3514/4510/652 3510/4503/652 -f 3518/4511/658 3520/4512/658 3516/4513/658 -f 3591/4514/653 3597/4515/653 3592/4516/653 -f 3515/4517/659 3521/4518/659 3517/4519/659 -f 3517/4519/652 3522/4520/652 3518/4511/652 -f 3526/4521/658 3528/4522/658 3524/4523/658 -f 3566/4506/655 3567/4524/655 3565/4525/655 -f 3523/4526/659 3529/4527/659 3525/4528/659 -f 3525/4528/652 3530/4529/652 3526/4521/652 -f 3534/4530/658 3536/4531/658 3532/4532/658 -f 3564/4453/654 3574/4533/654 3566/4534/654 -f 3531/4535/659 3537/4536/659 3533/4537/659 -f 3533/4537/652 3538/4538/652 3534/4530/652 -f 3542/4539/658 3544/4540/658 3540/4541/658 -f 3563/4542/653 3569/4485/653 3564/4484/653 -f 3539/4543/659 3545/4544/659 3541/4545/659 -f 3541/4545/652 3546/4546/652 3542/4539/652 -f 3550/4547/658 3552/4548/658 3548/4549/658 -f 3567/4524/658 3569/4485/658 3568/4550/658 -f 3547/4551/659 3553/4552/659 3549/4553/659 -f 3549/4553/652 3554/4554/652 3550/4547/652 -f 3558/4555/658 3560/4556/658 3556/4557/658 -f 3564/4484/659 3565/4558/659 3563/4542/659 -f 3555/4559/659 3561/4560/659 3557/4561/659 -f 3557/4561/652 3562/4562/652 3558/4555/652 -f 3555/4563/655 3558/4555/655 3556/4564/655 -f 3547/4565/655 3550/4547/655 3548/4566/655 -f 3539/4567/655 3542/4539/655 3540/4568/655 -f 3531/4569/655 3534/4530/655 3532/4570/655 -f 3523/4571/655 3526/4521/655 3524/4572/655 -f 3515/4573/655 3518/4511/655 3516/4574/655 -f 3572/4462/652 3575/4575/652 3571/4451/652 -f 3580/4576/655 3590/4577/655 3586/4578/655 -f 3578/4579/653 3583/4580/653 3585/4581/653 -f 3586/4578/656 3583/4580/656 3584/4582/656 -f 3580/4583/655 3586/4584/655 3584/4582/655 -f 3594/4585/655 3595/4586/655 3593/4587/655 -f 3580/4583/655 3581/4588/655 3579/4589/655 -f 3578/4477/654 3588/4590/654 3580/4591/654 -f 3577/4592/653 3583/4580/653 3578/4579/653 -f 3581/4588/658 3583/4580/658 3582/4593/658 -f 3578/4579/659 3579/4594/659 3577/4592/659 -f 3586/4578/652 3589/4595/652 3585/4475/652 -f 3595/4586/658 3597/4515/658 3596/4596/658 -f 3592/4516/659 3593/4597/659 3591/4514/659 -f 3602/4598/655 3603/4599/655 3601/4600/655 -f 3599/4601/653 3605/4602/653 3600/4603/653 -f 3603/4599/658 3605/4602/658 3604/4604/658 -f 3600/4603/659 3601/4605/659 3599/4601/659 -f 2743/4063/658 2742/4606/658 2744/4064/658 -f 2739/4607/658 2747/4072/658 2741/4062/658 -f 2719/4032/659 2726/4608/659 2717/4609/659 -f 2720/4610/659 2721/4035/659 2722/4031/659 -f 3611/4611/658 3610/4612/658 3607/4613/658 -f 3609/4614/659 3612/4615/659 3608/4616/659 -f 3610/4612/653 3613/4617/653 3609/4618/653 -f 3608/4616/655 3611/4611/655 3607/4613/655 -f 3619/4619/658 3618/4620/658 3615/4621/658 -f 3617/4622/659 3620/4623/659 3616/4624/659 -f 3618/4620/653 3621/4625/653 3617/4622/653 -f 3616/4626/655 3619/4619/655 3615/4621/655 -f 3620/4627/670 3625/4628/670 3619/4629/670 -f 3614/4630/671 3623/4631/671 3613/4632/671 -f 3624/4633/654 3626/4634/654 3623/4635/654 -f 3624/4633/658 3629/4636/658 3625/4637/658 -f 3626/4638/659 3627/4639/659 3623/4640/659 -f 3629/4636/652 3627/4639/652 3630/4641/652 -f 3625/4637/658 3622/4642/658 3619/4643/658 -f 3629/4636/660 3621/4625/660 3622/4644/660 -f 3630/4641/659 3620/4645/659 3621/4646/659 -f 3628/4647/658 3614/4648/658 3611/4649/658 -f 3612/4615/661 3628/4647/661 3611/4611/661 -f 3623/4640/659 3612/4650/659 3613/4651/659 -f 3647/4652/658 3651/4653/658 3655/4654/658 -f 3641/4655/659 3637/4656/659 3633/4657/659 -f 3665/4658/653 3664/4659/653 3663/4660/653 -f 3671/4661/663 3670/4662/663 3667/4663/663 -f 3670/4664/654 3664/4659/654 3666/4665/654 -f 3668/4666/652 3665/4667/652 3663/4660/652 -f 3667/4668/659 3666/4669/659 3665/4667/659 -f 3669/4670/658 3663/4660/658 3664/4659/658 -f 3673/4671/653 3672/4672/653 3671/4673/653 -f 3678/4674/654 3672/4675/654 3674/4676/654 -f 3675/4677/652 3673/4671/652 3671/4673/652 -f 3675/4677/655 3678/4674/655 3677/4678/655 -f 3676/4679/662 3668/4666/662 3669/4670/662 -f 3670/4680/654 3676/4679/654 3669/4670/654 -f 3668/4666/652 3671/4661/652 3667/4663/652 -f 3681/4681/655 3680/4682/655 3679/4683/655 -f 3685/4684/659 3682/4685/659 3681/4686/659 -f 3683/4687/653 3686/4688/653 3685/4684/653 -f 3679/4683/658 3684/4689/658 3683/4687/658 -f 3694/4690/654 3682/4691/654 3686/4692/654 -f 3698/4693/653 3686/4692/653 3690/4694/653 -f 3682/4695/655 3689/4696/655 3680/4697/655 -f 3680/4682/656 3690/4694/656 3684/4689/656 -f 3686/4692/653 3684/4698/653 3690/4694/653 -f 3681/4699/655 3679/4700/655 3687/4701/655 -f 3683/4687/657 3687/4701/657 3679/4683/657 -f 3685/4702/653 3688/4703/653 3683/4704/653 -f 3691/4705/653 3688/4703/653 3685/4702/653 -f 3695/4706/654 3687/4701/654 3688/4703/654 -f 3693/4707/655 3689/4696/655 3682/4695/655 -f 3697/4708/652 3690/4694/652 3689/4696/652 -f 3692/4709/652 3685/4702/652 3681/4710/652 -f 3696/4711/655 3681/4699/655 3687/4701/655 -f 3701/4712/658 3706/4713/658 3705/4714/658 -f 3700/4715/655 3701/4712/655 3699/4716/655 -f 3699/4716/659 3704/4717/659 3700/4718/659 -f 3701/4712/654 3703/4719/654 3699/4716/654 -f 3709/4720/658 3714/4721/658 3713/4722/658 -f 3708/4723/655 3709/4720/655 3707/4724/655 -f 3707/4724/659 3712/4725/659 3708/4726/659 -f 3709/4720/654 3711/4727/654 3707/4724/654 -f 3717/4728/659 3722/4729/659 3721/4730/659 -f 3716/4731/655 3717/4728/655 3715/4732/655 -f 3715/4732/658 3720/4733/658 3716/4734/658 -f 3717/4728/652 3719/4735/652 3715/4732/652 -f 3725/4736/659 3730/4737/659 3729/4738/659 -f 3724/4739/655 3725/4736/655 3723/4740/655 -f 3723/4740/658 3728/4741/658 3724/4742/658 -f 3725/4736/652 3727/4743/652 3723/4740/652 -f 3733/4744/658 3738/4745/658 3737/4746/658 -f 3732/4747/653 3733/4744/653 3731/4748/653 -f 3731/4748/659 3736/4749/659 3732/4750/659 -f 3733/4744/652 3735/4751/652 3731/4748/652 -f 3741/4752/658 3746/4753/658 3745/4754/658 -f 3740/4755/653 3741/4752/653 3739/4756/653 -f 3739/4756/659 3744/4757/659 3740/4758/659 -f 3741/4752/652 3743/4759/652 3739/4756/652 -f 3749/4760/659 3754/4761/659 3753/4762/659 -f 3748/4763/654 3749/4760/654 3747/4764/654 -f 3747/4764/658 3752/4765/658 3748/4766/658 -f 3749/4760/655 3751/4767/655 3747/4764/655 -f 3757/4768/659 3762/4769/659 3761/4770/659 -f 3756/4771/654 3757/4768/654 3755/4772/654 -f 3755/4772/658 3760/4773/658 3756/4774/658 -f 3757/4768/655 3759/4775/655 3755/4772/655 -f 3766/4776/658 3769/4777/658 3765/4778/658 -f 3764/4779/652 3765/4778/652 3763/4780/652 -f 3763/4780/659 3768/4781/659 3764/4782/659 -f 3765/4778/655 3767/4783/655 3763/4780/655 -f 3774/4784/658 3777/4785/658 3773/4786/658 -f 3772/4787/652 3773/4786/652 3771/4788/652 -f 3771/4788/659 3776/4789/659 3772/4790/659 -f 3773/4786/655 3775/4791/655 3771/4788/655 -f 3781/4792/659 3786/4793/659 3785/4794/659 -f 3780/4795/652 3781/4792/652 3779/4796/652 -f 3779/4796/658 3784/4797/658 3780/4798/658 -f 3781/4792/653 3783/4799/653 3779/4796/653 -f 3789/4800/659 3794/4801/659 3793/4802/659 -f 3788/4803/652 3789/4800/652 3787/4804/652 -f 3787/4804/658 3792/4805/658 3788/4806/658 -f 3789/4800/653 3791/4807/653 3787/4804/653 -f 3798/4808/658 3801/4809/658 3797/4810/658 -f 3796/4811/654 3797/4810/654 3795/4812/654 -f 3795/4812/659 3800/4813/659 3796/4814/659 -f 3797/4810/653 3799/4815/653 3795/4812/653 -f 3806/4816/658 3809/4817/658 3805/4818/658 -f 3804/4819/654 3805/4818/654 3803/4820/654 -f 3803/4820/659 3808/4821/659 3804/4822/659 -f 3805/4818/653 3807/4823/653 3803/4820/653 -f 3817/4824/658 3818/4825/658 3811/4826/658 -f 3833/4827/658 3834/4828/658 3827/4829/658 -f 3849/4830/658 3850/4831/658 3843/4832/658 -f 3199/4385/659 3206/4833/659 3205/4384/659 -f 2533/3786/652 2530/3803/652 2529/3787/652 -f 2534/3788/653 2529/3787/653 2531/3789/653 -f 2540/3791/654 2531/4834/654 2532/3792/654 -f 2535/3796/656 2533/3786/656 2534/3788/656 -f 2541/3800/657 2536/3804/657 2537/3801/657 -f 2539/3793/655 2532/3792/655 2530/3803/655 -f 2540/3798/653 2542/4835/653 2537/3801/653 -f 2539/3794/655 2535/3796/655 2536/3804/655 -f 2536/3804/658 2535/3796/658 2538/3797/658 -f 2540/3806/659 2539/3794/659 2541/3805/659 -f 2545/3811/660 2548/4836/660 2546/3812/660 -f 2544/3808/655 2547/3815/655 2548/3814/655 -f 2543/3813/654 2546/3812/654 2547/3815/654 -f 2549/3816/654 2551/4837/654 2552/3817/654 -f 2549/3819/653 2553/3824/653 2554/3820/653 -f 2552/3817/661 2554/4838/661 2553/3822/661 -f 2548/3814/658 2554/3820/658 2552/3825/658 -f 2562/3827/662 2570/4839/662 2568/3828/662 -f 2569/3830/658 2570/3934/658 2562/3831/658 -f 2565/3833/663 2563/3845/663 2555/3834/663 -f 2558/3836/659 2566/3849/659 2565/3837/659 -f 2567/3839/664 2569/4840/664 2561/3840/664 -f 2568/3828/655 2564/3843/655 2556/3842/655 -f 2564/3843/665 2566/4841/665 2558/3844/665 -f 2563/3845/653 2567/3839/653 2559/3841/653 -f 2558/3846/654 2557/4842/654 2546/3812/654 -f 2546/3812/654 2557/4842/654 2555/3847/654 -f 2552/3817/654 2551/4837/654 2556/3848/654 -f 2548/3814/652 2565/3837/652 2566/3849/652 -f 2583/3852/659 2582/3894/659 2597/3853/659 -f 2575/3857/658 2577/3861/658 2576/3858/658 -f 2574/3856/655 2595/3893/655 2597/3859/655 -f 2593/3863/653 2594/4843/653 2589/3864/653 -f 2587/3869/659 2586/3872/659 2585/3867/659 -f 2595/3870/652 2591/4844/652 2592/3854/652 -f 2577/3861/660 2586/3872/660 2588/3873/660 -f 2627/3875/658 2628/3946/658 2620/3876/658 -f 2573/3855/653 2581/4845/653 2582/3878/653 -f 2575/3857/652 2585/3867/652 2586/3872/652 -f 2574/3880/661 2584/4846/661 2585/3867/661 -f 2579/3881/655 2590/4847/655 2587/3882/655 -f 2620/3883/662 2628/4848/662 2626/3884/662 -f 2576/3886/654 2587/3869/654 2581/3866/654 -f 2572/3888/655 2583/4849/655 2592/3889/655 -f 2588/3891/653 2598/4850/653 2596/3892/653 -f 2572/3888/658 2591/3890/658 2595/3893/658 -f 2595/3893/658 2574/3856/658 2573/3855/658 -f 2581/3866/659 2584/3868/659 2597/3853/659 -f 2598/3895/659 2588/3871/659 2587/3869/659 -f 2576/3858/658 2580/3862/658 2596/3892/658 -f 2598/3895/659 2590/3896/659 2589/3897/659 -f 2578/3865/658 2579/3881/658 2596/3892/658 -f 2594/3898/652 2593/4851/652 2596/3899/652 -f 2547/3815/655 2599/3951/655 2600/3900/655 -f 2606/3916/659 2601/3903/659 2602/3905/659 -f 2602/3905/659 2603/3908/659 2605/3907/659 -f 2605/3907/659 2607/3913/659 2609/3911/659 -f 2609/3911/659 2608/3917/659 2606/3916/659 -f 2606/3916/659 2602/3905/659 2609/3911/659 -f 2610/3912/653 2604/4852/653 2551/3821/653 -f 2600/3901/655 2601/3903/655 2606/3916/655 -f 2610/3910/653 2612/4853/653 2607/3913/653 -f 2609/3911/652 2612/4854/652 2611/3919/652 -f 2623/3920/663 2621/3932/663 2613/3921/663 -f 2616/3923/659 2624/3933/659 2623/3924/659 -f 2625/3926/664 2627/4855/664 2619/3927/664 -f 2626/3884/655 2622/3930/655 2614/3929/655 -f 2622/3930/665 2624/4856/665 2616/3931/665 -f 2621/3932/653 2625/3926/653 2617/3928/653 -f 2569/3830/652 2623/3924/652 2624/3933/652 -f 2616/3935/654 2615/4857/654 2561/3936/654 -f 2621/3938/652 2623/3924/652 2569/3830/652 -f 2561/3936/654 2615/4857/654 2613/3940/654 -f 2560/3942/654 2614/3954/654 2616/3935/654 -f 2624/3933/652 2622/3955/652 2568/3943/652 -f 2612/3944/658 2610/3912/658 2600/3900/658 -f 2627/3875/652 2600/3900/652 2610/3912/652 -f 2602/3905/654 2619/3952/654 2620/3949/654 -f 2620/3949/654 2618/3953/654 2604/3950/654 -f 2599/3951/654 2617/4858/654 2619/3952/654 -f 2555/3847/654 2559/3941/654 2547/3815/654 -f 2559/3941/654 2613/3940/654 2599/3951/654 -f 2613/3940/654 2617/4858/654 2599/3951/654 -f 2567/3939/652 2563/3851/652 2548/3814/652 -f 2548/3814/652 2600/3900/652 2621/3938/652 -f 2600/3900/652 2625/3948/652 2621/3938/652 -f 2614/3954/654 2560/3942/654 2604/3950/654 -f 2560/3942/654 2556/3848/654 2551/4837/654 -f 2604/3950/654 2560/3942/654 2551/4837/654 -f 2554/3820/652 2564/3850/652 2568/3943/652 -f 2622/3955/652 2626/3947/652 2610/3912/652 -f 2554/3820/652 2568/3943/652 2622/3955/652 -f 2633/3956/658 2636/4859/658 2632/3957/658 -f 2631/3959/659 2635/4860/659 2634/3960/659 -f 2632/3957/653 2636/4859/653 2635/3962/653 -f 2630/3961/655 2634/3960/655 2633/3956/655 -f 2641/3964/658 2644/3989/658 2640/3965/658 -f 2639/3967/659 2643/3970/659 2642/3968/659 -f 2640/3965/653 2644/3989/653 2643/3970/653 -f 2638/3971/655 2642/4861/655 2641/3964/655 -f 2642/3972/670 2648/4862/670 2647/3973/670 -f 2636/3975/671 2646/4863/671 2645/3976/671 -f 2646/3978/654 2647/3982/654 2648/3979/654 -f 2646/3978/658 2650/3992/658 2651/3981/658 -f 2648/3983/659 2652/3986/659 2649/3984/659 -f 2651/3981/652 2650/3992/652 2649/3984/652 -f 2647/3982/658 2651/3981/658 2644/3987/658 -f 2651/3981/660 2652/3986/660 2643/3970/660 -f 2652/3986/659 2648/3983/659 2642/3990/659 -f 2650/3992/658 2646/3978/658 2636/3993/658 -f 2634/3960/661 2649/3984/661 2650/3992/661 -f 2645/3985/659 2649/3984/659 2634/3995/659 -f 2653/3999/658 2654/4864/658 2655/4865/658 -f 2655/4865/658 2656/4866/658 2653/3999/658 -f 2656/4866/658 2657/4867/658 2653/3999/658 -f 2657/4867/658 2658/4868/658 2653/3999/658 -f 2658/4868/658 2659/3997/658 2653/3999/658 -f 2685/4000/658 2686/4869/658 2687/4870/658 -f 2687/4870/658 2688/4871/658 2685/4000/658 -f 2688/4871/658 2689/4001/658 2685/4000/658 -f 2689/4001/658 2690/4872/658 2691/4873/658 -f 2691/4873/658 2692/4874/658 2689/4001/658 -f 2692/4874/658 2693/4002/658 2689/4001/658 -f 2693/4002/658 2694/4875/658 2695/4876/658 -f 2695/4876/658 2696/4877/658 2697/4878/658 -f 2697/4878/658 2698/4879/658 2685/4000/658 -f 2698/4879/658 2699/4880/658 2685/4000/658 -f 2699/4880/658 2700/4881/658 2685/4000/658 -f 2693/4002/658 2695/4876/658 2685/4000/658 -f 2695/4876/658 2697/4878/658 2685/4000/658 -f 2671/4005/659 2670/4882/659 2669/4883/659 -f 2669/4883/659 2684/4884/659 2683/4885/659 -f 2683/4885/659 2682/4886/659 2679/4003/659 -f 2682/4886/659 2681/4887/659 2679/4003/659 -f 2681/4887/659 2680/4888/659 2679/4003/659 -f 2679/4003/659 2678/4889/659 2677/4890/659 -f 2677/4890/659 2676/4891/659 2679/4003/659 -f 2676/4891/659 2675/4004/659 2679/4003/659 -f 2675/4004/659 2674/4892/659 2673/4893/659 -f 2673/4893/659 2672/4894/659 2675/4004/659 -f 2672/4894/659 2671/4005/659 2675/4004/659 -f 2671/4005/659 2669/4883/659 2679/4003/659 -f 2669/4883/659 2683/4885/659 2679/4003/659 -f 2703/4009/670 2706/4012/670 2704/4010/670 -f 2702/4006/653 2705/4013/653 2706/4012/653 -f 2701/4008/652 2704/4027/652 2705/4013/652 -f 2707/4014/652 2709/4018/652 2710/4015/652 -f 2707/4014/655 2711/4020/655 2712/4017/655 -f 2710/4019/671 2712/4017/671 2711/4020/671 -f 2710/4015/658 2713/4029/658 2714/4023/658 -f 2706/4025/658 2716/4895/658 2715/4026/658 -f 2710/4015/660 2721/4035/660 2723/4028/660 -f 2704/4027/652 2719/4032/652 2718/4030/652 -f 2712/4017/655 2720/4037/655 2722/4031/655 -f 2715/4026/661 2725/4896/661 2719/4032/661 -f 2706/4012/671 2717/4038/671 2726/4033/671 -f 2709/4018/652 2722/4031/652 2721/4035/652 -f 2714/4036/670 2724/4897/670 2720/4037/670 -f 2705/4013/653 2718/4030/653 2717/4038/653 -f 2723/4028/659 2721/4035/659 2720/4039/659 -f 2729/4042/670 2732/4046/670 2730/4043/670 -f 2728/4045/653 2731/4048/653 2732/4046/653 -f 2727/4047/652 2730/4898/652 2731/4048/652 -f 2733/4049/652 2735/4053/652 2736/4050/652 -f 2733/4049/655 2737/4055/655 2738/4052/655 -f 2736/4054/671 2738/4052/671 2737/4055/671 -f 2742/4057/658 2743/4063/658 2745/4058/658 -f 2743/4063/652 2744/4064/652 2733/4049/652 -f 2744/4064/655 2742/4069/655 2737/4055/655 -f 2740/4060/652 2741/4062/652 2727/4047/652 -f 2739/4065/653 2740/4060/653 2728/4045/653 -f 2743/4063/660 2734/4051/660 2749/4066/660 -f 2737/4067/659 2750/4899/659 2749/4066/659 -f 2750/4068/670 2737/4055/670 2742/4069/670 -f 2751/4071/661 2727/4047/661 2741/4062/661 -f 2751/4071/659 2752/4900/659 2729/4073/659 -f 2739/4065/671 2729/4042/671 2752/4074/671 -f 2951/4076/659 2952/4082/659 2950/4077/659 -f 2955/4079/658 2956/4090/658 2953/4080/658 -f 2952/4082/655 2956/4090/655 2955/4079/655 -f 2951/4083/653 2949/4901/653 2954/4081/653 -f 2952/4084/655 2959/4094/655 2961/4085/655 -f 2950/4087/657 2955/4079/657 2954/4081/657 -f 2956/4090/656 2958/4086/656 2957/4091/656 -f 2951/4093/654 2960/4902/654 2959/4094/654 -f 2957/4091/653 2962/4097/653 2960/4095/653 -f 2958/4086/652 2961/4085/652 2962/4097/652 -f 2966/4098/652 2970/4104/652 2969/4099/652 -f 2963/4101/654 2967/4903/654 2968/4102/654 -f 2964/4103/655 2968/4102/655 2970/4104/655 -f 2965/4100/653 2969/4099/653 2967/4105/653 -f 2974/4107/652 2978/4113/652 2977/4108/652 -f 2971/4110/654 2975/4904/654 2976/4111/654 -f 2972/4112/655 2976/4111/655 2978/4113/655 -f 2973/4109/653 2977/4108/653 2975/4114/653 -f 2985/4116/652 2986/4122/652 2982/4117/652 -f 2984/4119/654 2983/4905/654 2979/4120/654 -f 2986/4122/655 2984/4119/655 2980/4121/655 -f 2983/4123/653 2985/4116/653 2981/4118/653 -f 2993/4125/652 2994/4131/652 2990/4126/652 -f 2992/4128/654 2991/4906/654 2987/4129/654 -f 2994/4131/655 2992/4128/655 2988/4130/655 -f 2991/4132/653 2993/4125/653 2989/4127/653 -f 3001/4134/652 3002/4140/652 2998/4135/652 -f 3000/4137/654 2999/4907/654 2995/4138/654 -f 3002/4140/655 3000/4137/655 2996/4139/655 -f 2999/4141/653 3001/4134/653 2997/4136/653 -f 3009/4143/652 3010/4149/652 3006/4144/652 -f 3008/4146/654 3007/4908/654 3003/4147/654 -f 3010/4149/655 3008/4146/655 3004/4148/655 -f 3007/4150/653 3009/4143/653 3005/4145/653 -f 3017/4152/652 3018/4158/652 3014/4153/652 -f 3016/4155/654 3015/4909/654 3011/4156/654 -f 3018/4158/655 3016/4155/655 3012/4157/655 -f 3015/4159/653 3017/4152/653 3013/4154/653 -f 3025/4161/652 3026/4167/652 3022/4162/652 -f 3024/4164/654 3023/4910/654 3019/4165/654 -f 3026/4167/655 3024/4164/655 3020/4166/655 -f 3023/4168/653 3025/4161/653 3021/4163/653 -f 3033/4170/652 3034/4176/652 3030/4171/652 -f 3032/4173/654 3031/4911/654 3027/4174/654 -f 3034/4176/655 3032/4173/655 3028/4175/655 -f 3031/4177/653 3033/4170/653 3029/4172/653 -f 3041/4179/652 3042/4185/652 3038/4180/652 -f 3040/4182/654 3039/4912/654 3035/4183/654 -f 3042/4185/655 3040/4182/655 3036/4184/655 -f 3039/4186/653 3041/4179/653 3037/4181/653 -f 3049/4188/652 3050/4194/652 3046/4189/652 -f 3048/4191/654 3047/4913/654 3043/4192/654 -f 3050/4194/655 3048/4191/655 3044/4193/655 -f 3047/4195/653 3049/4188/653 3045/4190/653 -f 3057/4197/652 3058/4203/652 3054/4198/652 -f 3056/4200/654 3055/4914/654 3051/4201/654 -f 3058/4203/655 3056/4200/655 3052/4202/655 -f 3055/4204/653 3057/4197/653 3053/4199/653 -f 3060/4206/655 3062/4915/655 3061/4207/655 -f 3066/4209/665 3068/4916/665 3067/4210/665 -f 3060/4206/654 3065/4218/654 3066/4212/654 -f 3061/4214/652 3063/4217/652 3064/4215/652 -f 3062/4216/659 3066/4917/659 3063/4217/659 -f 3059/4208/658 3064/4215/658 3065/4218/658 -f 3068/4219/655 3070/4918/655 3069/4220/655 -f 3068/4222/654 3072/4227/654 3074/4223/654 -f 3069/4220/652 3073/4226/652 3071/4225/652 -f 3074/4223/653 3072/4227/653 3071/4225/653 -f 3064/4215/664 3071/4225/664 3072/4227/664 -f 3072/4227/654 3068/4919/654 3066/4228/654 -f 3067/4210/652 3071/4225/652 3064/4215/652 -f 3076/4229/653 3078/4920/653 3077/4230/653 -f 3078/4232/659 3082/4235/659 3081/4233/659 -f 3082/4235/655 3080/4237/655 3079/4236/655 -f 3080/4237/658 3076/4229/658 3075/4231/658 -f 3078/4238/654 3089/4921/654 3090/4239/654 -f 3082/4240/655 3090/4239/655 3094/4241/655 -f 3086/4242/656 3085/4245/656 3076/4229/656 -f 3083/4248/657 3084/4252/657 3079/4236/657 -f 3084/4252/655 3091/4254/655 3087/4253/655 -f 3083/4248/654 3092/4259/654 3091/4254/654 -f 3085/4245/653 3093/4256/653 3089/4255/653 -f 3086/4242/652 3094/4241/652 3093/4256/652 -f 3081/4250/652 3087/4253/652 3088/4257/652 -f 3077/4247/653 3088/4922/653 3092/4259/653 -f 3097/4260/659 3098/4923/659 3102/4261/659 -f 3096/4263/653 3098/4924/653 3097/4260/653 -f 3095/4264/658 3099/4267/658 3100/4265/658 -f 3097/4260/654 3101/4262/654 3099/4267/654 -f 3105/4268/659 3106/4925/659 3110/4269/659 -f 3104/4271/653 3106/4926/653 3105/4268/653 -f 3103/4272/658 3107/4275/658 3108/4273/658 -f 3105/4268/654 3109/4270/654 3107/4275/654 -f 3114/4276/672 3113/4280/672 3112/4277/672 -f 3115/4279/653 3112/4277/653 3113/4280/653 -f 3120/4282/655 3123/4292/655 3126/4283/655 -f 3122/4285/657 3119/4927/657 3120/4282/657 -f 3122/4286/653 3125/4293/653 3124/4287/653 -f 3115/4289/657 3118/4928/657 3117/4290/657 -f 3117/4290/655 3114/4276/655 3111/4278/655 -f 3123/4292/672 3124/4287/672 3125/4293/672 -f 3133/4294/652 3134/4298/652 3131/4295/652 -f 3129/4297/659 3131/4295/659 3134/4298/659 -f 3128/4300/658 3133/4294/658 3132/4296/658 -f 3130/4302/655 3134/4298/655 3133/4294/655 -f 3127/4304/653 3132/4296/653 3131/4295/653 -f 3137/4306/653 3141/4929/653 3139/4307/653 -f 3142/4309/658 3141/4929/658 3137/4306/658 -f 3136/4311/655 3140/4313/655 3142/4309/655 -f 3135/4312/659 3139/4930/659 3140/4313/659 -f 3145/4314/653 3149/4931/653 3147/4315/653 -f 3150/4317/658 3149/4932/658 3145/4318/658 -f 3144/4320/655 3148/4321/655 3150/4317/655 -f 3143/4316/659 3147/4315/659 3148/4321/659 -f 3153/4322/653 3157/4933/653 3155/4323/653 -f 3158/4325/658 3157/4933/658 3153/4322/658 -f 3152/4327/655 3156/4934/655 3158/4325/655 -f 3151/4324/659 3155/4323/659 3156/4328/659 -f 3161/4330/653 3165/4935/653 3163/4331/653 -f 3166/4333/658 3165/4935/658 3161/4330/658 -f 3160/4335/655 3164/4338/655 3166/4336/655 -f 3159/4332/659 3163/4331/659 3164/4338/659 -f 3170/4339/652 3169/4346/652 3167/4340/652 -f 3171/4342/654 3173/4936/654 3174/4343/654 -f 3170/4339/653 3174/4937/653 3173/4345/653 -f 3167/4340/655 3171/4342/655 3172/4344/655 -f 3168/4341/659 3172/4938/659 3174/4347/659 -f 3169/4346/658 3173/4939/658 3171/4348/658 -f 3180/4349/672 3186/4360/672 3185/4350/672 -f 3179/4352/652 3181/4940/652 3182/4353/652 -f 3177/4355/655 3181/4940/655 3179/4352/655 -f 3178/4357/653 3176/4359/653 3180/4354/653 -f 3179/4351/655 3185/4350/655 3183/4358/655 -f 3176/4359/653 3184/4941/653 3186/4360/653 -f 3188/4361/653 3190/4364/653 3189/4362/653 -f 3190/4364/659 3194/4367/659 3193/4365/659 -f 3194/4367/655 3192/4370/655 3191/4368/655 -f 3190/4364/652 3188/4361/652 3192/4370/652 -f 3202/4371/653 3200/4383/653 3196/4372/653 -f 3195/4374/655 3199/4385/655 3201/4375/655 -f 3197/4376/652 3201/4375/652 3202/4371/652 -f 3201/4377/658 3203/4380/658 3204/4378/658 -f 3203/4380/652 3205/4942/652 3206/4381/652 -f 3202/4379/653 3204/4378/653 3206/4382/653 -f 3205/4384/655 3203/4380/655 3201/4377/655 -f 3213/4386/672 3214/4391/672 3210/4387/672 -f 3211/4389/653 3213/4386/653 3209/4388/653 -f 3214/4391/655 3212/4943/655 3208/4392/655 -f 3217/4393/655 3218/4397/655 3216/4394/655 -f 3221/4396/659 3222/4400/659 3218/4397/659 -f 3219/4399/653 3220/4402/653 3222/4400/653 -f 3220/4402/652 3216/4394/652 3218/4397/652 -f 3229/4403/652 3230/4422/652 3227/4404/652 -f 3225/4406/659 3231/4410/659 3234/4407/659 -f 3223/4409/653 3232/4415/653 3231/4410/653 -f 3226/4412/655 3234/4407/655 3233/4413/655 -f 3233/4413/652 3234/4407/652 3231/4410/652 -f 3224/4416/658 3233/4413/658 3232/4415/658 -f 3235/4418/654 3238/4944/654 3237/4419/654 -f 3229/4403/655 3237/4945/655 3238/4421/655 -f 3227/4404/653 3235/4946/653 3236/4423/653 -f 3230/4422/659 3238/4947/659 3235/4424/659 -f 3228/4405/658 3236/4420/658 3237/4419/658 -f 3208/4392/655 3456/4948/655 3458/4425/655 -f 3209/4427/653 3457/4429/653 3455/4428/653 -f 3210/4426/652 3458/4425/652 3457/4429/652 -f 3458/4430/655 3456/4948/655 3460/4431/655 -f 3457/4433/653 3461/4435/653 3459/4434/653 -f 3458/4430/658 3462/4432/658 3461/4435/658 -f 3460/4436/655 3464/4949/655 3466/4437/655 -f 3459/4438/653 3461/4435/653 3465/4439/653 -f 3462/4432/652 3466/4437/652 3465/4439/652 -f 3464/4441/659 3463/4950/659 3465/4439/659 -f 3480/4442/653 3482/4465/653 3481/4443/653 -f 3472/4445/653 3474/4456/653 3473/4446/653 -f 3470/4448/658 3474/4456/658 3472/4449/658 -f 3571/4451/653 3575/4575/653 3573/4452/653 -f 3467/4454/659 3471/4951/659 3473/4446/659 -f 3469/4455/652 3473/4446/652 3474/4456/652 -f 3478/4457/658 3482/4465/658 3480/4458/658 -f 3566/4460/655 3574/4952/655 3576/4461/655 -f 3475/4463/659 3479/4953/659 3481/4443/659 -f 3477/4464/652 3481/4443/652 3482/4465/652 -f 3496/4466/653 3498/4489/653 3497/4467/653 -f 3488/4469/653 3490/4480/653 3489/4470/653 -f 3486/4472/658 3490/4480/658 3488/4473/658 -f 3585/4475/653 3589/4595/653 3587/4476/653 -f 3483/4478/659 3487/4954/659 3489/4470/659 -f 3485/4479/652 3489/4470/652 3490/4480/652 -f 3494/4481/658 3498/4489/658 3496/4482/658 -f 3491/4487/659 3495/4955/659 3497/4467/659 -f 3493/4488/652 3497/4467/652 3498/4489/652 -f 3512/4490/653 3514/4510/653 3513/4491/653 -f 3504/4493/653 3506/4502/653 3505/4494/653 -f 3502/4496/658 3506/4502/658 3504/4497/658 -f 3572/4462/656 3571/4451/656 3569/4485/656 -f 3499/4500/659 3503/4956/659 3505/4494/659 -f 3501/4501/652 3505/4494/652 3506/4502/652 -f 3510/4503/658 3514/4510/658 3512/4504/658 -f 3507/4508/659 3511/4957/659 3513/4491/659 -f 3509/4509/652 3513/4491/652 3514/4510/652 -f 3518/4511/658 3522/4520/658 3520/4512/658 -f 3591/4514/653 3596/4596/653 3597/4515/653 -f 3515/4517/659 3519/4958/659 3521/4518/659 -f 3517/4519/652 3521/4518/652 3522/4520/652 -f 3526/4521/658 3530/4529/658 3528/4522/658 -f 3566/4506/655 3570/4499/655 3567/4524/655 -f 3523/4526/659 3527/4959/659 3529/4527/659 -f 3525/4528/652 3529/4527/652 3530/4529/652 -f 3534/4530/658 3538/4538/658 3536/4531/658 -f 3564/4453/654 3573/4452/654 3574/4533/654 -f 3531/4535/659 3535/4960/659 3537/4536/659 -f 3533/4537/652 3537/4536/652 3538/4538/652 -f 3542/4539/658 3546/4546/658 3544/4540/658 -f 3563/4542/653 3568/4550/653 3569/4485/653 -f 3539/4543/659 3543/4961/659 3545/4544/659 -f 3541/4545/652 3545/4544/652 3546/4546/652 -f 3550/4547/658 3554/4554/658 3552/4548/658 -f 3567/4524/658 3570/4499/658 3569/4485/658 -f 3547/4551/659 3551/4962/659 3553/4552/659 -f 3549/4553/652 3553/4552/652 3554/4554/652 -f 3558/4555/658 3562/4562/658 3560/4556/658 -f 3564/4484/659 3566/4963/659 3565/4558/659 -f 3555/4559/659 3559/4964/659 3561/4560/659 -f 3557/4561/652 3561/4560/652 3562/4562/652 -f 3555/4563/655 3557/4561/655 3558/4555/655 -f 3547/4565/655 3549/4553/655 3550/4547/655 -f 3539/4567/655 3541/4545/655 3542/4539/655 -f 3531/4569/655 3533/4537/655 3534/4530/655 -f 3523/4571/655 3525/4528/655 3526/4521/655 -f 3515/4573/655 3517/4519/655 3518/4511/655 -f 3572/4462/652 3576/4461/652 3575/4575/652 -f 3580/4576/655 3588/4965/655 3590/4577/655 -f 3586/4578/656 3585/4475/656 3583/4580/656 -f 3594/4585/655 3598/4966/655 3595/4586/655 -f 3580/4583/655 3584/4582/655 3581/4588/655 -f 3578/4477/654 3587/4476/654 3588/4590/654 -f 3577/4592/653 3582/4593/653 3583/4580/653 -f 3581/4588/658 3584/4582/658 3583/4580/658 -f 3578/4579/659 3580/4967/659 3579/4594/659 -f 3586/4578/652 3590/4577/652 3589/4595/652 -f 3595/4586/658 3598/4966/658 3597/4515/658 -f 3592/4516/659 3594/4968/659 3593/4597/659 -f 3602/4598/655 3606/4969/655 3603/4599/655 -f 3599/4601/653 3604/4604/653 3605/4602/653 -f 3603/4599/658 3606/4969/658 3605/4602/658 -f 3600/4603/659 3602/4970/659 3601/4605/659 -f 2739/4607/658 2748/4971/658 2747/4072/658 -f 2719/4032/659 2725/4896/659 2726/4608/659 -f 3611/4611/658 3614/4972/658 3610/4612/658 -f 3609/4614/659 3613/4973/659 3612/4615/659 -f 3610/4612/653 3614/4972/653 3613/4617/653 -f 3608/4616/655 3612/4615/655 3611/4611/655 -f 3619/4619/658 3622/4644/658 3618/4620/658 -f 3617/4622/659 3621/4625/659 3620/4623/659 -f 3618/4620/653 3622/4644/653 3621/4625/653 -f 3616/4626/655 3620/4974/655 3619/4619/655 -f 3620/4627/670 3626/4975/670 3625/4628/670 -f 3614/4630/671 3624/4976/671 3623/4631/671 -f 3624/4633/654 3625/4637/654 3626/4634/654 -f 3624/4633/658 3628/4647/658 3629/4636/658 -f 3626/4638/659 3630/4641/659 3627/4639/659 -f 3629/4636/652 3628/4647/652 3627/4639/652 -f 3625/4637/658 3629/4636/658 3622/4642/658 -f 3629/4636/660 3630/4641/660 3621/4625/660 -f 3630/4641/659 3626/4638/659 3620/4645/659 -f 3628/4647/658 3624/4633/658 3614/4648/658 -f 3612/4615/661 3627/4639/661 3628/4647/661 -f 3623/4640/659 3627/4639/659 3612/4650/659 -f 3647/4652/658 3648/4977/658 3649/4978/658 -f 3649/4978/658 3650/4979/658 3647/4652/658 -f 3650/4979/658 3651/4653/658 3647/4652/658 -f 3651/4653/658 3652/4980/658 3653/4981/658 -f 3653/4981/658 3654/4982/658 3651/4653/658 -f 3654/4982/658 3655/4654/658 3651/4653/658 -f 3655/4654/658 3656/4983/658 3657/4984/658 -f 3657/4984/658 3658/4985/658 3659/4986/658 -f 3659/4986/658 3660/4987/658 3647/4652/658 -f 3660/4987/658 3661/4988/658 3647/4652/658 -f 3661/4988/658 3662/4989/658 3647/4652/658 -f 3655/4654/658 3657/4984/658 3647/4652/658 -f 3657/4984/658 3659/4986/658 3647/4652/658 -f 3633/4657/659 3632/4990/659 3631/4991/659 -f 3631/4991/659 3646/4992/659 3645/4993/659 -f 3645/4993/659 3644/4994/659 3641/4655/659 -f 3644/4994/659 3643/4995/659 3641/4655/659 -f 3643/4995/659 3642/4996/659 3641/4655/659 -f 3641/4655/659 3640/4997/659 3639/4998/659 -f 3639/4998/659 3638/4999/659 3641/4655/659 -f 3638/4999/659 3637/4656/659 3641/4655/659 -f 3637/4656/659 3636/5000/659 3635/5001/659 -f 3635/5001/659 3634/5002/659 3637/4656/659 -f 3634/5002/659 3633/4657/659 3637/4656/659 -f 3633/4657/659 3631/4991/659 3641/4655/659 -f 3631/4991/659 3645/4993/659 3641/4655/659 -f 3665/4658/653 3666/5003/653 3664/4659/653 -f 3671/4661/663 3672/5004/663 3670/4662/663 -f 3670/4664/654 3669/4670/654 3664/4659/654 -f 3668/4666/652 3667/4668/652 3665/4667/652 -f 3667/4668/659 3670/5005/659 3666/4669/659 -f 3669/4670/658 3668/4666/658 3663/4660/658 -f 3673/4671/653 3674/5006/653 3672/4672/653 -f 3678/4674/654 3676/4679/654 3672/4675/654 -f 3675/4677/652 3677/4678/652 3673/4671/652 -f 3675/4677/655 3676/4679/655 3678/4674/655 -f 3676/4679/662 3675/4677/662 3668/4666/662 -f 3670/4680/654 3672/5007/654 3676/4679/654 -f 3668/4666/652 3675/4677/652 3671/4661/652 -f 3681/4681/655 3682/5008/655 3680/4682/655 -f 3685/4684/659 3686/4688/659 3682/4685/659 -f 3683/4687/653 3684/4689/653 3686/4688/653 -f 3679/4683/658 3680/4682/658 3684/4689/658 -f 3694/4690/654 3693/5009/654 3682/4691/654 -f 3698/4693/653 3694/4690/653 3686/4692/653 -f 3680/4682/656 3689/4696/656 3690/4694/656 -f 3683/4687/657 3688/4703/657 3687/4701/657 -f 3691/4705/653 3695/4706/653 3688/4703/653 -f 3695/4706/654 3696/4711/654 3687/4701/654 -f 3693/4707/655 3697/4708/655 3689/4696/655 -f 3697/4708/652 3698/4693/652 3690/4694/652 -f 3692/4709/652 3691/4705/652 3685/4702/652 -f 3696/4711/655 3692/5010/655 3681/4699/655 -f 3701/4712/658 3702/5011/658 3706/4713/658 -f 3700/4715/655 3702/5012/655 3701/4712/655 -f 3699/4716/659 3703/4719/659 3704/4717/659 -f 3701/4712/654 3705/4714/654 3703/4719/654 -f 3709/4720/658 3710/5013/658 3714/4721/658 -f 3708/4723/655 3710/5014/655 3709/4720/655 -f 3707/4724/659 3711/4727/659 3712/4725/659 -f 3709/4720/654 3713/4722/654 3711/4727/654 -f 3717/4728/659 3718/5015/659 3722/4729/659 -f 3716/4731/655 3718/5016/655 3717/4728/655 -f 3715/4732/658 3719/4735/658 3720/4733/658 -f 3717/4728/652 3721/4730/652 3719/4735/652 -f 3725/4736/659 3726/5017/659 3730/4737/659 -f 3724/4739/655 3726/5018/655 3725/4736/655 -f 3723/4740/658 3727/4743/658 3728/4741/658 -f 3725/4736/652 3729/4738/652 3727/4743/652 -f 3733/4744/658 3734/5019/658 3738/4745/658 -f 3732/4747/653 3734/5020/653 3733/4744/653 -f 3731/4748/659 3735/4751/659 3736/4749/659 -f 3733/4744/652 3737/4746/652 3735/4751/652 -f 3741/4752/658 3742/5021/658 3746/4753/658 -f 3740/4755/653 3742/5022/653 3741/4752/653 -f 3739/4756/659 3743/4759/659 3744/4757/659 -f 3741/4752/652 3745/4754/652 3743/4759/652 -f 3749/4760/659 3750/5023/659 3754/4761/659 -f 3748/4763/654 3750/5024/654 3749/4760/654 -f 3747/4764/658 3751/4767/658 3752/4765/658 -f 3749/4760/655 3753/4762/655 3751/4767/655 -f 3757/4768/659 3758/5025/659 3762/4769/659 -f 3756/4771/654 3758/5026/654 3757/4768/654 -f 3755/4772/658 3759/4775/658 3760/4773/658 -f 3757/4768/655 3761/4770/655 3759/4775/655 -f 3766/4776/658 3770/5027/658 3769/4777/658 -f 3764/4779/652 3766/5028/652 3765/4778/652 -f 3763/4780/659 3767/4783/659 3768/4781/659 -f 3765/4778/655 3769/4777/655 3767/4783/655 -f 3774/4784/658 3778/5029/658 3777/4785/658 -f 3772/4787/652 3774/5030/652 3773/4786/652 -f 3771/4788/659 3775/4791/659 3776/4789/659 -f 3773/4786/655 3777/4785/655 3775/4791/655 -f 3781/4792/659 3782/5031/659 3786/4793/659 -f 3780/4795/652 3782/5032/652 3781/4792/652 -f 3779/4796/658 3783/4799/658 3784/4797/658 -f 3781/4792/653 3785/4794/653 3783/4799/653 -f 3789/4800/659 3790/5033/659 3794/4801/659 -f 3788/4803/652 3790/5034/652 3789/4800/652 -f 3787/4804/658 3791/4807/658 3792/4805/658 -f 3789/4800/653 3793/4802/653 3791/4807/653 -f 3798/4808/658 3802/5035/658 3801/4809/658 -f 3796/4811/654 3798/5036/654 3797/4810/654 -f 3795/4812/659 3799/4815/659 3800/4813/659 -f 3797/4810/653 3801/4809/653 3799/4815/653 -f 3806/4816/658 3810/5037/658 3809/4817/658 -f 3804/4819/654 3806/5038/654 3805/4818/654 -f 3803/4820/659 3807/4823/659 3808/4821/659 -f 3805/4818/653 3809/4817/653 3807/4823/653 -f 3811/4826/658 3812/5039/658 3813/5040/658 -f 3813/5040/658 3814/5041/658 3811/4826/658 -f 3814/5041/658 3815/5042/658 3811/4826/658 -f 3815/5042/658 3816/5043/658 3811/4826/658 -f 3816/5043/658 3817/4824/658 3811/4826/658 -f 3827/4829/658 3828/5044/658 3829/5045/658 -f 3829/5045/658 3830/5046/658 3827/4829/658 -f 3830/5046/658 3831/5047/658 3827/4829/658 -f 3831/5047/658 3832/5048/658 3827/4829/658 -f 3832/5048/658 3833/4827/658 3827/4829/658 -f 3843/4832/658 3844/5049/658 3845/5050/658 -f 3845/5050/658 3846/5051/658 3843/4832/658 -f 3846/5051/658 3847/5052/658 3843/4832/658 -f 3847/5052/658 3848/5053/658 3843/4832/658 -f 3848/5053/658 3849/4830/658 3843/4832/658 -f 3199/4385/659 3200/5054/659 3206/4833/659 +f 2949/4260/652 2945/4261/652 2950/4262/652 +f 2950/4262/653 2947/4263/653 2956/4264/653 +f 2956/4265/654 2948/4266/654 2955/4267/654 +f 2955/4268/655 2949/4269/655 2951/4270/655 +f 2951/4270/656 2950/4262/656 2954/4271/656 +f 2956/4272/653 2954/4271/653 2950/4273/653 +f 2957/4274/657 2953/4275/657 2958/4276/657 +f 2955/4267/655 2946/4277/655 2949/4260/655 +f 2956/4272/653 2953/4275/653 2954/4271/653 +f 2955/4268/655 2952/4278/655 2957/4279/655 +f 2952/4278/658 2954/4271/658 2953/4275/658 +f 2956/4280/659 2957/4279/659 2958/4281/659 +f 2960/4282/658 2961/4283/658 2959/4284/658 +f 2961/4285/660 2962/4286/660 2959/4287/660 +f 2960/4282/655 2964/4288/655 2961/4283/655 +f 2959/4287/654 2963/4289/654 2960/4282/654 +f 2965/4290/654 2968/4291/654 2966/4292/654 +f 2965/4293/653 2970/4294/653 2967/4295/653 +f 2968/4291/661 2969/4296/661 2966/4292/661 +f 2966/4297/658 2969/4298/658 2965/4293/658 +f 2964/4288/658 2968/4299/658 2962/4300/658 +f 2978/4301/662 2984/4302/662 2976/4303/662 +f 2985/4304/658 2978/4305/658 2977/4306/658 +f 2981/4307/663 2971/4308/663 2973/4309/663 +f 2974/4310/659 2981/4311/659 2973/4312/659 +f 2983/4313/664 2977/4314/664 2975/4315/664 +f 2984/4302/655 2972/4316/655 2976/4303/655 +f 2980/4317/665 2974/4318/665 2972/4316/665 +f 2979/4319/653 2975/4315/653 2971/4308/653 +f 2974/4320/654 2962/4286/654 2968/4291/654 +f 2962/4286/654 2971/4321/654 2963/4289/654 +f 2968/4291/654 2972/4322/654 2974/4320/654 +f 2964/4288/652 2982/4323/652 2970/4294/652 +f 2982/4323/652 2980/4324/652 2970/4294/652 +f 2981/4311/652 2964/4288/652 2979/4325/652 +f 2999/4326/659 3013/4327/659 3008/4328/659 +f 2989/4329/658 2990/4330/658 2991/4331/658 +f 2991/4331/658 2992/4332/658 2989/4329/658 +f 2990/4330/655 3013/4333/655 3000/4334/655 +f 2992/4332/658 2993/4335/658 2996/4336/658 +f 3009/4337/653 3005/4338/653 2994/4339/653 +f 2997/4340/659 3001/4341/659 3000/4342/659 +f 3003/4343/659 3001/4341/659 2997/4340/659 +f 3011/4344/652 3008/4328/652 3013/4327/652 +f 3003/4343/659 3004/4345/659 3002/4346/659 +f 2993/4335/660 3004/4347/660 2996/4348/660 +f 3043/4349/658 3036/4350/658 3035/4351/658 +f 2989/4329/653 2998/4352/653 2987/4353/653 +f 2991/4331/652 3002/4346/652 2993/4335/652 +f 2990/4354/661 3001/4341/661 2991/4331/661 +f 2995/4355/655 3003/4356/655 2992/4332/655 +f 3036/4357/662 3042/4358/662 3034/4359/662 +f 2992/4360/654 2997/4340/654 2989/4361/654 +f 2988/4362/655 3008/4363/655 3007/4364/655 +f 3004/4365/653 3012/4366/653 2996/4336/653 +f 2988/4362/658 3011/4367/658 2987/4353/658 +f 3011/4367/658 2989/4329/658 2987/4353/658 +f 2997/4340/659 3013/4327/659 2998/4368/659 +f 3014/4369/659 3003/4343/659 3006/4370/659 +f 2992/4332/658 3012/4366/658 2995/4355/658 +f 3014/4369/659 3005/4371/659 3010/4372/659 +f 2994/4339/658 3012/4366/658 3009/4337/658 +f 3010/4372/652 3012/4373/652 3014/4369/652 +f 2963/4289/655 3016/4374/655 2964/4288/655 +f 3016/4375/655 3015/4376/655 3017/4377/655 +f 3017/4377/666 3015/4378/666 3018/4379/666 +f 3020/4380/667 3021/4381/667 3019/4382/667 +f 3021/4381/653 3020/4383/653 3026/4384/653 +f 3018/4379/659 3021/4381/659 3025/4385/659 +f 3026/4386/653 2967/4295/653 2970/4294/653 +f 3023/4387/668 3028/4388/668 3025/4385/668 +f 3027/4389/669 3022/4390/669 3024/4391/669 +f 3016/4375/655 3022/4390/655 3027/4392/655 +f 3026/4384/653 3023/4387/653 3021/4381/653 +f 3025/4385/652 3027/4393/652 3024/4391/652 +f 3039/4394/663 3029/4395/663 3031/4396/663 +f 3032/4397/659 3039/4398/659 3031/4399/659 +f 3041/4400/664 3035/4401/664 3033/4402/664 +f 3042/4358/655 3030/4403/655 3034/4359/655 +f 3038/4404/665 3032/4405/665 3030/4403/665 +f 3037/4406/653 3033/4402/653 3029/4395/653 +f 2985/4304/652 3040/4407/652 2986/4408/652 +f 3032/4409/654 2977/4410/654 2978/4411/654 +f 3037/4412/652 2985/4304/652 2983/4413/652 +f 2977/4410/654 3029/4414/654 2975/4415/654 +f 2976/4416/654 3032/4409/654 2978/4411/654 +f 3040/4407/652 2984/4417/652 2986/4408/652 +f 3028/4418/658 3016/4374/658 3027/4419/658 +f 3043/4349/652 3026/4386/652 3044/4420/652 +f 3044/4420/652 3026/4386/652 3042/4421/652 +f 3043/4349/652 3041/4422/652 3016/4374/652 +f 3018/4379/654 3036/4423/654 3019/4382/654 +f 3036/4423/654 3020/4424/654 3019/4382/654 +f 3015/4425/654 3035/4426/654 3018/4379/654 +f 3015/4425/654 2963/4289/654 2975/4415/654 +f 3037/4412/652 2983/4413/652 2964/4288/652 +f 3020/4424/654 3034/4427/654 3030/4428/654 +f 3038/4429/652 3026/4386/652 2970/4294/652 +f 3049/4430/658 3048/4431/658 3045/4432/658 +f 3047/4433/659 3050/4434/659 3046/4435/659 +f 3048/4431/653 3051/4436/653 3047/4437/653 +f 3046/4435/655 3049/4430/655 3045/4432/655 +f 3057/4438/658 3056/4439/658 3053/4440/658 +f 3055/4441/659 3058/4442/659 3054/4443/659 +f 3056/4439/653 3059/4444/653 3055/4441/653 +f 3054/4445/655 3057/4438/655 3053/4440/655 +f 3058/4446/670 3063/4447/670 3057/4448/670 +f 3052/4449/671 3061/4450/671 3051/4451/671 +f 3062/4452/654 3064/4453/654 3061/4454/654 +f 3062/4452/658 3067/4455/658 3063/4456/658 +f 3064/4457/659 3065/4458/659 3061/4459/659 +f 3067/4455/652 3065/4458/652 3068/4460/652 +f 3063/4456/658 3060/4461/658 3057/4462/658 +f 3067/4455/660 3059/4444/660 3060/4463/660 +f 3068/4460/659 3058/4464/659 3059/4465/659 +f 3066/4466/658 3052/4467/658 3049/4468/658 +f 3050/4434/661 3066/4466/661 3049/4430/661 +f 3061/4459/659 3050/4469/659 3051/4470/659 +f 3075/4471/658 3076/4472/658 3069/4473/658 +f 3101/4474/658 3105/4475/658 3109/4476/658 +f 3095/4477/659 3091/4478/659 3087/4479/659 +f 3118/4480/658 3119/4481/658 3117/4482/658 +f 3119/4483/670 3120/4484/670 3117/4485/670 +f 3118/4480/653 3122/4486/653 3119/4483/653 +f 3117/4482/652 3121/4487/652 3118/4480/652 +f 3123/4488/652 3126/4489/652 3124/4490/652 +f 3123/4488/655 3128/4491/655 3125/4492/655 +f 3126/4493/671 3127/4494/671 3124/4495/671 +f 3124/4490/658 3127/4496/658 3123/4488/658 +f 3126/4489/658 3130/4497/658 3128/4498/658 +f 3122/4499/658 3131/4500/658 3120/4501/658 +f 3126/4489/660 3139/4502/660 3129/4503/660 +f 3120/4501/652 3134/4504/652 3121/4487/652 +f 3128/4491/655 3138/4505/655 3125/4492/655 +f 3131/4500/661 3135/4506/661 3120/4501/661 +f 3122/4486/671 3142/4507/671 3132/4508/671 +f 3125/4492/652 3137/4509/652 3126/4489/652 +f 3130/4510/670 3136/4511/670 3128/4491/670 +f 3121/4487/653 3133/4512/653 3122/4486/653 +f 3139/4502/659 3136/4513/659 3140/4514/659 +f 3134/4504/659 3135/4506/659 3133/4515/659 +f 3145/4516/670 3146/4517/670 3143/4518/670 +f 3144/4519/653 3148/4520/653 3145/4516/653 +f 3143/4521/652 3147/4522/652 3144/4519/652 +f 3149/4523/652 3152/4524/652 3150/4525/652 +f 3149/4523/655 3154/4526/655 3151/4527/655 +f 3152/4528/671 3153/4529/671 3150/4530/671 +f 3158/4531/658 3161/4532/658 3162/4533/658 +f 3156/4534/658 3155/4535/658 3157/4536/658 +f 3159/4537/652 3149/4523/652 3150/4525/652 +f 3160/4538/655 3153/4529/655 3149/4523/655 +f 3156/4534/652 3143/4521/652 3144/4519/652 +f 3155/4539/653 3144/4519/653 3145/4516/653 +f 3159/4537/660 3165/4540/660 3161/4532/660 +f 3153/4541/659 3165/4540/659 3150/4525/659 +f 3166/4542/670 3158/4543/670 3162/4544/670 +f 3167/4545/661 3157/4536/661 3163/4546/661 +f 3167/4545/659 3145/4547/659 3143/4521/659 +f 3155/4539/671 3168/4548/671 3164/4549/671 +f 3367/4550/659 3366/4551/659 3365/4552/659 +f 3371/4553/658 3369/4554/658 3370/4555/658 +f 3368/4556/655 3371/4553/655 3366/4551/655 +f 3367/4557/653 3370/4555/653 3369/4554/653 +f 3368/4558/655 3377/4559/655 3374/4560/655 +f 3366/4561/657 3370/4555/657 3365/4562/657 +f 3367/4557/653 3369/4554/653 3373/4563/653 +f 3372/4564/656 3373/4565/656 3369/4554/656 +f 3368/4556/655 3374/4566/655 3372/4564/655 +f 3367/4567/654 3375/4568/654 3368/4558/654 +f 3373/4565/653 3376/4569/653 3367/4570/653 +f 3374/4560/652 3378/4571/652 3373/4565/652 +f 3382/4572/652 3385/4573/652 3381/4574/652 +f 3379/4575/654 3384/4576/654 3380/4577/654 +f 3380/4577/655 3386/4578/655 3382/4572/655 +f 3381/4574/653 3383/4579/653 3379/4580/653 +f 3390/4581/652 3393/4582/652 3389/4583/652 +f 3387/4584/654 3392/4585/654 3388/4586/654 +f 3388/4586/655 3394/4587/655 3390/4581/655 +f 3389/4583/653 3391/4588/653 3387/4589/653 +f 3401/4590/652 3398/4591/652 3397/4592/652 +f 3400/4593/654 3395/4594/654 3396/4595/654 +f 3402/4596/655 3396/4595/655 3398/4591/655 +f 3399/4597/653 3397/4592/653 3395/4598/653 +f 3409/4599/652 3406/4600/652 3405/4601/652 +f 3408/4602/654 3403/4603/654 3404/4604/654 +f 3410/4605/655 3404/4604/655 3406/4600/655 +f 3407/4606/653 3405/4601/653 3403/4607/653 +f 3417/4608/652 3414/4609/652 3413/4610/652 +f 3416/4611/654 3411/4612/654 3412/4613/654 +f 3418/4614/655 3412/4613/655 3414/4609/655 +f 3415/4615/653 3413/4610/653 3411/4616/653 +f 3425/4617/652 3422/4618/652 3421/4619/652 +f 3424/4620/654 3419/4621/654 3420/4622/654 +f 3426/4623/655 3420/4622/655 3422/4618/655 +f 3423/4624/653 3421/4619/653 3419/4625/653 +f 3433/4626/652 3430/4627/652 3429/4628/652 +f 3432/4629/654 3427/4630/654 3428/4631/654 +f 3434/4632/655 3428/4631/655 3430/4627/655 +f 3431/4633/653 3429/4628/653 3427/4634/653 +f 3441/4635/652 3438/4636/652 3437/4637/652 +f 3440/4638/654 3435/4639/654 3436/4640/654 +f 3442/4641/655 3436/4640/655 3438/4636/655 +f 3439/4642/653 3437/4637/653 3435/4643/653 +f 3449/4644/652 3446/4645/652 3445/4646/652 +f 3448/4647/654 3443/4648/654 3444/4649/654 +f 3450/4650/655 3444/4649/655 3446/4645/655 +f 3447/4651/653 3445/4646/653 3443/4652/653 +f 3457/4653/652 3454/4654/652 3453/4655/652 +f 3456/4656/654 3451/4657/654 3452/4658/654 +f 3458/4659/655 3452/4658/655 3454/4654/655 +f 3455/4660/653 3453/4655/653 3451/4661/653 +f 3465/4662/652 3462/4663/652 3461/4664/652 +f 3464/4665/654 3459/4666/654 3460/4667/654 +f 3466/4668/655 3460/4667/655 3462/4663/655 +f 3463/4669/653 3461/4664/653 3459/4670/653 +f 3473/4671/652 3470/4672/652 3469/4673/652 +f 3472/4674/654 3467/4675/654 3468/4676/654 +f 3474/4677/655 3468/4676/655 3470/4672/655 +f 3471/4678/653 3469/4673/653 3467/4679/653 +f 3476/4680/655 3477/4681/655 3475/4682/655 +f 3482/4683/665 3483/4684/665 3479/4685/665 +f 3476/4680/654 3482/4686/654 3478/4687/654 +f 3477/4688/652 3480/4689/652 3475/4682/652 +f 3478/4690/659 3479/4691/659 3477/4688/659 +f 3475/4682/658 3481/4692/658 3476/4680/658 +f 3484/4693/655 3485/4694/655 3483/4695/655 +f 3484/4696/654 3490/4697/654 3486/4698/654 +f 3485/4694/652 3487/4699/652 3483/4695/652 +f 3490/4697/653 3487/4699/653 3489/4700/653 +f 3480/4689/664 3488/4701/664 3481/4692/664 +f 3488/4701/654 3482/4702/654 3481/4692/654 +f 3483/4684/652 3480/4689/652 3479/4685/652 +f 3492/4703/653 3493/4704/653 3491/4705/653 +f 3494/4706/659 3497/4707/659 3493/4708/659 +f 3498/4709/655 3495/4710/655 3497/4707/655 +f 3496/4711/658 3491/4705/658 3495/4710/658 +f 3494/4712/654 3506/4713/654 3498/4714/654 +f 3498/4714/655 3510/4715/655 3502/4716/655 +f 3494/4717/653 3492/4718/653 3501/4719/653 +f 3502/4716/656 3492/4703/656 3496/4711/656 +f 3498/4714/655 3502/4716/655 3496/4720/655 +f 3493/4721/653 3499/4722/653 3491/4723/653 +f 3499/4722/657 3495/4710/657 3491/4705/657 +f 3497/4724/655 3495/4725/655 3500/4726/655 +f 3500/4726/655 3503/4727/655 3497/4724/655 +f 3499/4722/654 3507/4728/654 3500/4726/654 +f 3501/4719/653 3505/4729/653 3494/4717/653 +f 3502/4716/652 3509/4730/652 3501/4719/652 +f 3497/4724/652 3504/4731/652 3493/4732/652 +f 3493/4721/653 3508/4733/653 3499/4722/653 +f 3513/4734/659 3518/4735/659 3517/4736/659 +f 3512/4737/653 3513/4734/653 3511/4738/653 +f 3511/4738/658 3516/4739/658 3512/4740/658 +f 3513/4734/654 3515/4741/654 3511/4738/654 +f 3521/4742/659 3526/4743/659 3525/4744/659 +f 3520/4745/653 3521/4742/653 3519/4746/653 +f 3519/4746/658 3524/4747/658 3520/4748/658 +f 3521/4742/654 3523/4749/654 3519/4746/654 +f 3530/4750/672 3528/4751/672 3527/4752/672 +f 3531/4753/653 3529/4754/653 3534/4755/653 +f 3536/4756/655 3542/4757/655 3537/4758/655 +f 3538/4759/657 3536/4756/657 3537/4758/657 +f 3538/4760/653 3540/4761/653 3535/4762/653 +f 3531/4763/657 3533/4764/657 3532/4765/657 +f 3533/4764/655 3527/4752/655 3532/4765/655 +f 3539/4766/672 3541/4767/672 3542/4757/672 +f 3549/4768/652 3547/4769/652 3548/4770/652 +f 3545/4771/659 3550/4772/659 3546/4773/659 +f 3544/4774/658 3548/4770/658 3543/4775/658 +f 3546/4776/655 3549/4768/655 3544/4777/655 +f 3543/4778/653 3547/4769/653 3545/4779/653 +f 3553/4780/653 3555/4781/653 3551/4782/653 +f 3558/4783/658 3553/4780/658 3554/4784/658 +f 3552/4785/655 3558/4783/655 3554/4784/655 +f 3551/4786/659 3556/4787/659 3552/4785/659 +f 3561/4788/653 3563/4789/653 3559/4790/653 +f 3566/4791/658 3561/4792/658 3562/4793/658 +f 3560/4794/655 3566/4791/655 3562/4793/655 +f 3559/4790/659 3564/4795/659 3560/4794/659 +f 3569/4796/653 3571/4797/653 3567/4798/653 +f 3574/4799/658 3569/4796/658 3570/4800/658 +f 3568/4801/655 3574/4799/655 3570/4800/655 +f 3567/4798/659 3572/4802/659 3568/4803/659 +f 3577/4804/653 3579/4805/653 3575/4806/653 +f 3582/4807/658 3577/4804/658 3578/4808/658 +f 3576/4809/655 3582/4810/655 3578/4811/655 +f 3575/4806/659 3580/4812/659 3576/4809/659 +f 3586/4813/652 3583/4814/652 3584/4815/652 +f 3587/4816/654 3590/4817/654 3588/4818/654 +f 3586/4813/653 3589/4819/653 3585/4820/653 +f 3583/4814/655 3588/4818/655 3584/4815/655 +f 3584/4815/659 3590/4821/659 3586/4813/659 +f 3585/4820/658 3587/4822/658 3583/4814/658 +f 3596/4823/672 3601/4824/672 3595/4825/672 +f 3595/4826/652 3598/4827/652 3596/4828/652 +f 3593/4829/655 3595/4826/655 3591/4830/655 +f 3594/4831/653 3596/4828/653 3598/4827/653 +f 3595/4825/655 3599/4832/655 3591/4830/655 +f 3592/4833/653 3602/4834/653 3596/4823/653 +f 3604/4835/653 3605/4836/653 3603/4837/653 +f 3606/4838/659 3609/4839/659 3605/4840/659 +f 3610/4841/655 3607/4842/655 3609/4843/655 +f 3606/4838/652 3608/4844/652 3610/4841/652 +f 3618/4845/653 3612/4846/653 3614/4847/653 +f 3611/4848/655 3617/4849/655 3613/4850/655 +f 3613/4850/652 3618/4845/652 3614/4847/652 +f 3617/4851/658 3620/4852/658 3618/4853/658 +f 3619/4854/652 3622/4855/652 3620/4852/652 +f 3618/4853/653 3622/4856/653 3616/4857/653 +f 3621/4858/655 3617/4851/655 3615/4859/655 +f 3629/4860/672 3626/4861/672 3625/4862/672 +f 3627/4863/653 3625/4862/653 3623/4864/653 +f 3630/4865/655 3624/4866/655 3626/4861/655 +f 3633/4867/655 3632/4868/655 3631/4869/655 +f 3637/4870/659 3634/4871/659 3633/4872/659 +f 3635/4873/653 3638/4874/653 3637/4875/653 +f 3636/4876/652 3634/4871/652 3638/4874/652 +f 3645/4877/652 3643/4878/652 3644/4879/652 +f 3641/4880/659 3650/4881/659 3642/4882/659 +f 3639/4883/653 3647/4884/653 3641/4885/653 +f 3642/4886/655 3649/4887/655 3640/4888/655 +f 3649/4887/652 3647/4884/652 3648/4889/652 +f 3640/4890/658 3648/4889/658 3639/4891/658 +f 3651/4892/654 3653/4893/654 3652/4894/654 +f 3645/4877/655 3654/4895/655 3646/4896/655 +f 3643/4878/653 3652/4897/653 3644/4879/653 +f 3646/4896/659 3651/4898/659 3643/4878/659 +f 3644/4879/658 3653/4893/658 3645/4877/658 +f 3624/4866/655 3874/4899/655 3626/4900/655 +f 3625/4901/653 3871/4902/653 3623/4864/653 +f 3626/4900/652 3873/4903/652 3625/4901/652 +f 3874/4904/655 3876/4905/655 3878/4906/655 +f 3873/4907/653 3875/4908/653 3871/4902/653 +f 3874/4904/658 3877/4909/658 3873/4907/658 +f 3876/4910/655 3882/4911/655 3878/4906/655 +f 3875/4912/653 3881/4913/653 3879/4914/653 +f 3878/4906/652 3881/4913/652 3877/4909/652 +f 3880/4915/659 3881/4913/659 3882/4911/659 +f 3896/4916/653 3897/4917/653 3895/4918/653 +f 3888/4919/653 3889/4920/653 3887/4921/653 +f 3886/4922/658 3888/4923/658 3884/4924/658 +f 3987/4925/653 3989/4926/653 3980/4927/653 +f 3883/4928/659 3889/4920/659 3885/4929/659 +f 3885/4929/652 3890/4930/652 3886/4922/652 +f 3894/4931/658 3896/4932/658 3892/4933/658 +f 3982/4934/655 3992/4935/655 3988/4936/655 +f 3891/4937/659 3897/4917/659 3893/4938/659 +f 3893/4938/652 3898/4939/652 3894/4931/652 +f 3912/4940/653 3913/4941/653 3911/4942/653 +f 3904/4943/653 3905/4944/653 3903/4945/653 +f 3902/4946/658 3904/4947/658 3900/4948/658 +f 4001/4949/653 4003/4950/653 3994/4951/653 +f 3899/4952/659 3905/4944/659 3901/4953/659 +f 3901/4953/652 3906/4954/652 3902/4946/652 +f 3910/4955/658 3912/4956/658 3908/4957/658 +f 3980/4958/653 3985/4959/653 3987/4960/653 +f 3907/4961/659 3913/4941/659 3909/4962/659 +f 3909/4962/652 3914/4963/652 3910/4955/652 +f 3928/4964/653 3929/4965/653 3927/4966/653 +f 3920/4967/653 3921/4968/653 3919/4969/653 +f 3918/4970/658 3920/4971/658 3916/4972/658 +f 3988/4936/656 3985/4959/656 3986/4973/656 +f 3915/4974/659 3921/4968/659 3917/4975/659 +f 3917/4975/652 3922/4976/652 3918/4970/652 +f 3926/4977/658 3928/4978/658 3924/4979/658 +f 3982/4980/655 3988/4981/655 3986/4973/655 +f 3923/4982/659 3929/4965/659 3925/4983/659 +f 3925/4983/652 3930/4984/652 3926/4977/652 +f 3934/4985/658 3936/4986/658 3932/4987/658 +f 4007/4988/653 4013/4989/653 4008/4990/653 +f 3931/4991/659 3937/4992/659 3933/4993/659 +f 3933/4993/652 3938/4994/652 3934/4985/652 +f 3942/4995/658 3944/4996/658 3940/4997/658 +f 3982/4980/655 3983/4998/655 3981/4999/655 +f 3939/5000/659 3945/5001/659 3941/5002/659 +f 3941/5002/652 3946/5003/652 3942/4995/652 +f 3950/5004/658 3952/5005/658 3948/5006/658 +f 3980/4927/654 3990/5007/654 3982/5008/654 +f 3947/5009/659 3953/5010/659 3949/5011/659 +f 3949/5011/652 3954/5012/652 3950/5004/652 +f 3958/5013/658 3960/5014/658 3956/5015/658 +f 3979/5016/653 3985/4959/653 3980/4958/653 +f 3955/5017/659 3961/5018/659 3957/5019/659 +f 3957/5019/652 3962/5020/652 3958/5013/652 +f 3966/5021/658 3968/5022/658 3964/5023/658 +f 3983/4998/658 3985/4959/658 3984/5024/658 +f 3963/5025/659 3969/5026/659 3965/5027/659 +f 3965/5027/652 3970/5028/652 3966/5021/652 +f 3974/5029/658 3976/5030/658 3972/5031/658 +f 3980/4958/659 3981/5032/659 3979/5016/659 +f 3971/5033/659 3977/5034/659 3973/5035/659 +f 3973/5035/652 3978/5036/652 3974/5029/652 +f 3971/5037/655 3974/5029/655 3972/5038/655 +f 3963/5039/655 3966/5021/655 3964/5040/655 +f 3955/5041/655 3958/5013/655 3956/5042/655 +f 3947/5043/655 3950/5004/655 3948/5044/655 +f 3939/5045/655 3942/4995/655 3940/5046/655 +f 3931/5047/655 3934/4985/655 3932/5048/655 +f 3988/4936/652 3991/5049/652 3987/4925/652 +f 3996/5050/655 4006/5051/655 4002/5052/655 +f 3994/5053/653 3999/5054/653 4001/5055/653 +f 4002/5052/656 3999/5054/656 4000/5056/656 +f 3996/5057/655 4002/5058/655 4000/5056/655 +f 4010/5059/655 4011/5060/655 4009/5061/655 +f 3996/5057/655 3997/5062/655 3995/5063/655 +f 3994/4951/654 4004/5064/654 3996/5065/654 +f 3993/5066/653 3999/5054/653 3994/5053/653 +f 3997/5062/658 3999/5054/658 3998/5067/658 +f 3994/5053/659 3995/5068/659 3993/5066/659 +f 4002/5052/652 4005/5069/652 4001/4949/652 +f 4011/5060/658 4013/4989/658 4012/5070/658 +f 4008/4990/659 4009/5071/659 4007/4988/659 +f 4018/5072/655 4019/5073/655 4017/5074/655 +f 4015/5075/653 4021/5076/653 4016/5077/653 +f 4019/5073/658 4021/5076/658 4020/5078/658 +f 4016/5077/659 4017/5079/659 4015/5075/659 +f 3159/4537/658 3158/5080/658 3160/4538/658 +f 3155/5081/658 3163/4546/658 3157/4536/658 +f 3135/4506/659 3142/5082/659 3133/5083/659 +f 3136/5084/659 3137/4509/659 3138/4505/659 +f 4027/5085/658 4026/5086/658 4023/5087/658 +f 4025/5088/659 4028/5089/659 4024/5090/659 +f 4026/5086/653 4029/5091/653 4025/5092/653 +f 4024/5090/655 4027/5085/655 4023/5087/655 +f 4035/5093/658 4034/5094/658 4031/5095/658 +f 4033/5096/659 4036/5097/659 4032/5098/659 +f 4034/5094/653 4037/5099/653 4033/5096/653 +f 4032/5100/655 4035/5093/655 4031/5095/655 +f 4036/5101/670 4041/5102/670 4035/5103/670 +f 4030/5104/671 4039/5105/671 4029/5106/671 +f 4040/5107/654 4042/5108/654 4039/5109/654 +f 4040/5107/658 4045/5110/658 4041/5111/658 +f 4042/5112/659 4043/5113/659 4039/5114/659 +f 4045/5110/652 4043/5113/652 4046/5115/652 +f 4041/5111/658 4038/5116/658 4035/5117/658 +f 4045/5110/660 4037/5099/660 4038/5118/660 +f 4046/5115/659 4036/5119/659 4037/5120/659 +f 4044/5121/658 4030/5122/658 4027/5123/658 +f 4028/5089/661 4044/5121/661 4027/5085/661 +f 4039/5114/659 4028/5124/659 4029/5125/659 +f 4063/5126/658 4067/5127/658 4071/5128/658 +f 4057/5129/659 4053/5130/659 4049/5131/659 +f 4081/5132/653 4080/5133/653 4079/5134/653 +f 4087/5135/663 4086/5136/663 4083/5137/663 +f 4086/5138/654 4080/5133/654 4082/5139/654 +f 4084/5140/652 4081/5141/652 4079/5134/652 +f 4083/5142/659 4082/5143/659 4081/5141/659 +f 4085/5144/658 4079/5134/658 4080/5133/658 +f 4089/5145/653 4088/5146/653 4087/5147/653 +f 4094/5148/654 4088/5149/654 4090/5150/654 +f 4091/5151/652 4089/5145/652 4087/5147/652 +f 4091/5151/655 4094/5148/655 4093/5152/655 +f 4092/5153/662 4084/5140/662 4085/5144/662 +f 4086/5154/654 4092/5153/654 4085/5144/654 +f 4084/5140/652 4087/5135/652 4083/5137/652 +f 4097/5155/655 4096/5156/655 4095/5157/655 +f 4101/5158/659 4098/5159/659 4097/5160/659 +f 4099/5161/653 4102/5162/653 4101/5158/653 +f 4095/5157/658 4100/5163/658 4099/5161/658 +f 4110/5164/654 4098/5165/654 4102/5166/654 +f 4114/5167/653 4102/5166/653 4106/5168/653 +f 4098/5169/655 4105/5170/655 4096/5171/655 +f 4096/5156/656 4106/5168/656 4100/5163/656 +f 4102/5166/653 4100/5172/653 4106/5168/653 +f 4097/5173/655 4095/5174/655 4103/5175/655 +f 4099/5161/657 4103/5175/657 4095/5157/657 +f 4101/5176/653 4104/5177/653 4099/5178/653 +f 4107/5179/653 4104/5177/653 4101/5176/653 +f 4111/5180/654 4103/5175/654 4104/5177/654 +f 4109/5181/655 4105/5170/655 4098/5169/655 +f 4113/5182/652 4106/5168/652 4105/5170/652 +f 4108/5183/652 4101/5176/652 4097/5184/652 +f 4112/5185/655 4097/5173/655 4103/5175/655 +f 4117/5186/658 4122/5187/658 4121/5188/658 +f 4116/5189/655 4117/5186/655 4115/5190/655 +f 4115/5190/659 4120/5191/659 4116/5192/659 +f 4117/5186/654 4119/5193/654 4115/5190/654 +f 4125/5194/658 4130/5195/658 4129/5196/658 +f 4124/5197/655 4125/5194/655 4123/5198/655 +f 4123/5198/659 4128/5199/659 4124/5200/659 +f 4125/5194/654 4127/5201/654 4123/5198/654 +f 4133/5202/659 4138/5203/659 4137/5204/659 +f 4132/5205/655 4133/5202/655 4131/5206/655 +f 4131/5206/658 4136/5207/658 4132/5208/658 +f 4133/5202/652 4135/5209/652 4131/5206/652 +f 4141/5210/659 4146/5211/659 4145/5212/659 +f 4140/5213/655 4141/5210/655 4139/5214/655 +f 4139/5214/658 4144/5215/658 4140/5216/658 +f 4141/5210/652 4143/5217/652 4139/5214/652 +f 4149/5218/658 4154/5219/658 4153/5220/658 +f 4148/5221/653 4149/5218/653 4147/5222/653 +f 4147/5222/659 4152/5223/659 4148/5224/659 +f 4149/5218/652 4151/5225/652 4147/5222/652 +f 4157/5226/658 4162/5227/658 4161/5228/658 +f 4156/5229/653 4157/5226/653 4155/5230/653 +f 4155/5230/659 4160/5231/659 4156/5232/659 +f 4157/5226/652 4159/5233/652 4155/5230/652 +f 4165/5234/659 4170/5235/659 4169/5236/659 +f 4164/5237/654 4165/5234/654 4163/5238/654 +f 4163/5238/658 4168/5239/658 4164/5240/658 +f 4165/5234/655 4167/5241/655 4163/5238/655 +f 4173/5242/659 4178/5243/659 4177/5244/659 +f 4172/5245/654 4173/5242/654 4171/5246/654 +f 4171/5246/658 4176/5247/658 4172/5248/658 +f 4173/5242/655 4175/5249/655 4171/5246/655 +f 4182/5250/658 4185/5251/658 4181/5252/658 +f 4180/5253/652 4181/5252/652 4179/5254/652 +f 4179/5254/659 4184/5255/659 4180/5256/659 +f 4181/5252/655 4183/5257/655 4179/5254/655 +f 4190/5258/658 4193/5259/658 4189/5260/658 +f 4188/5261/652 4189/5260/652 4187/5262/652 +f 4187/5262/659 4192/5263/659 4188/5264/659 +f 4189/5260/655 4191/5265/655 4187/5262/655 +f 4197/5266/659 4202/5267/659 4201/5268/659 +f 4196/5269/652 4197/5266/652 4195/5270/652 +f 4195/5270/658 4200/5271/658 4196/5272/658 +f 4197/5266/653 4199/5273/653 4195/5270/653 +f 4205/5274/659 4210/5275/659 4209/5276/659 +f 4204/5277/652 4205/5274/652 4203/5278/652 +f 4203/5278/658 4208/5279/658 4204/5280/658 +f 4205/5274/653 4207/5281/653 4203/5278/653 +f 4214/5282/658 4217/5283/658 4213/5284/658 +f 4212/5285/654 4213/5284/654 4211/5286/654 +f 4211/5286/659 4216/5287/659 4212/5288/659 +f 4213/5284/653 4215/5289/653 4211/5286/653 +f 4222/5290/658 4225/5291/658 4221/5292/658 +f 4220/5293/654 4221/5292/654 4219/5294/654 +f 4219/5294/659 4224/5295/659 4220/5296/659 +f 4221/5292/653 4223/5297/653 4219/5294/653 +f 4233/5298/658 4234/5299/658 4227/5300/658 +f 4249/5301/658 4250/5302/658 4243/5303/658 +f 4265/5304/658 4266/5305/658 4259/5306/658 +f 3615/4859/659 3622/5307/659 3621/4858/659 +f 2949/4260/652 2946/4277/652 2945/4261/652 +f 2950/4262/653 2945/4261/653 2947/4263/653 +f 2956/4265/654 2947/5308/654 2948/4266/654 +f 2951/4270/656 2949/4260/656 2950/4262/656 +f 2957/4274/657 2952/4278/657 2953/4275/657 +f 2955/4267/655 2948/4266/655 2946/4277/655 +f 2956/4272/653 2958/5309/653 2953/4275/653 +f 2955/4268/655 2951/4270/655 2952/4278/655 +f 2952/4278/658 2951/4270/658 2954/4271/658 +f 2956/4280/659 2955/4268/659 2957/4279/659 +f 2961/4285/660 2964/5310/660 2962/4286/660 +f 2960/4282/655 2963/4289/655 2964/4288/655 +f 2959/4287/654 2962/4286/654 2963/4289/654 +f 2965/4290/654 2967/5311/654 2968/4291/654 +f 2965/4293/653 2969/4298/653 2970/4294/653 +f 2968/4291/661 2970/5312/661 2969/4296/661 +f 2964/4288/658 2970/4294/658 2968/4299/658 +f 2978/4301/662 2986/5313/662 2984/4302/662 +f 2985/4304/658 2986/4408/658 2978/4305/658 +f 2981/4307/663 2979/4319/663 2971/4308/663 +f 2974/4310/659 2982/4323/659 2981/4311/659 +f 2983/4313/664 2985/5314/664 2977/4314/664 +f 2984/4302/655 2980/4317/655 2972/4316/655 +f 2980/4317/665 2982/5315/665 2974/4318/665 +f 2979/4319/653 2983/4313/653 2975/4315/653 +f 2974/4320/654 2973/5316/654 2962/4286/654 +f 2962/4286/654 2973/5316/654 2971/4321/654 +f 2968/4291/654 2967/5311/654 2972/4322/654 +f 2964/4288/652 2981/4311/652 2982/4323/652 +f 2999/4326/659 2998/4368/659 3013/4327/659 +f 2991/4331/658 2993/4335/658 2992/4332/658 +f 2990/4330/655 3011/4367/655 3013/4333/655 +f 3009/4337/653 3010/5317/653 3005/4338/653 +f 3003/4343/659 3002/4346/659 3001/4341/659 +f 3011/4344/652 3007/5318/652 3008/4328/652 +f 2993/4335/660 3002/4346/660 3004/4347/660 +f 3043/4349/658 3044/4420/658 3036/4350/658 +f 2989/4329/653 2997/5319/653 2998/4352/653 +f 2991/4331/652 3001/4341/652 3002/4346/652 +f 2990/4354/661 3000/5320/661 3001/4341/661 +f 2995/4355/655 3006/5321/655 3003/4356/655 +f 3036/4357/662 3044/5322/662 3042/4358/662 +f 2992/4360/654 3003/4343/654 2997/4340/654 +f 2988/4362/655 2999/5323/655 3008/4363/655 +f 3004/4365/653 3014/5324/653 3012/4366/653 +f 2988/4362/658 3007/4364/658 3011/4367/658 +f 3011/4367/658 2990/4330/658 2989/4329/658 +f 2997/4340/659 3000/4342/659 3013/4327/659 +f 3014/4369/659 3004/4345/659 3003/4343/659 +f 2992/4332/658 2996/4336/658 3012/4366/658 +f 3014/4369/659 3006/4370/659 3005/4371/659 +f 2994/4339/658 2995/4355/658 3012/4366/658 +f 3010/4372/652 3009/5325/652 3012/4373/652 +f 2963/4289/655 3015/4425/655 3016/4374/655 +f 3022/4390/659 3017/4377/659 3018/4379/659 +f 3018/4379/659 3019/4382/659 3021/4381/659 +f 3021/4381/659 3023/4387/659 3025/4385/659 +f 3025/4385/659 3024/4391/659 3022/4390/659 +f 3022/4390/659 3018/4379/659 3025/4385/659 +f 3026/4386/653 3020/5326/653 2967/4295/653 +f 3016/4375/655 3017/4377/655 3022/4390/655 +f 3026/4384/653 3028/5327/653 3023/4387/653 +f 3025/4385/652 3028/5328/652 3027/4393/652 +f 3039/4394/663 3037/4406/663 3029/4395/663 +f 3032/4397/659 3040/4407/659 3039/4398/659 +f 3041/4400/664 3043/5329/664 3035/4401/664 +f 3042/4358/655 3038/4404/655 3030/4403/655 +f 3038/4404/665 3040/5330/665 3032/4405/665 +f 3037/4406/653 3041/4400/653 3033/4402/653 +f 2985/4304/652 3039/4398/652 3040/4407/652 +f 3032/4409/654 3031/5331/654 2977/4410/654 +f 3037/4412/652 3039/4398/652 2985/4304/652 +f 2977/4410/654 3031/5331/654 3029/4414/654 +f 2976/4416/654 3030/4428/654 3032/4409/654 +f 3040/4407/652 3038/4429/652 2984/4417/652 +f 3028/4418/658 3026/4386/658 3016/4374/658 +f 3043/4349/652 3016/4374/652 3026/4386/652 +f 3018/4379/654 3035/4426/654 3036/4423/654 +f 3036/4423/654 3034/4427/654 3020/4424/654 +f 3015/4425/654 3033/5332/654 3035/4426/654 +f 2971/4321/654 2975/4415/654 2963/4289/654 +f 2975/4415/654 3029/4414/654 3015/4425/654 +f 3029/4414/654 3033/5332/654 3015/4425/654 +f 2983/4413/652 2979/4325/652 2964/4288/652 +f 2964/4288/652 3016/4374/652 3037/4412/652 +f 3016/4374/652 3041/4422/652 3037/4412/652 +f 3030/4428/654 2976/4416/654 3020/4424/654 +f 2976/4416/654 2972/4322/654 2967/5311/654 +f 3020/4424/654 2976/4416/654 2967/5311/654 +f 2970/4294/652 2980/4324/652 2984/4417/652 +f 3038/4429/652 3042/4421/652 3026/4386/652 +f 2970/4294/652 2984/4417/652 3038/4429/652 +f 3049/4430/658 3052/5333/658 3048/4431/658 +f 3047/4433/659 3051/5334/659 3050/4434/659 +f 3048/4431/653 3052/5333/653 3051/4436/653 +f 3046/4435/655 3050/4434/655 3049/4430/655 +f 3057/4438/658 3060/4463/658 3056/4439/658 +f 3055/4441/659 3059/4444/659 3058/4442/659 +f 3056/4439/653 3060/4463/653 3059/4444/653 +f 3054/4445/655 3058/5335/655 3057/4438/655 +f 3058/4446/670 3064/5336/670 3063/4447/670 +f 3052/4449/671 3062/5337/671 3061/4450/671 +f 3062/4452/654 3063/4456/654 3064/4453/654 +f 3062/4452/658 3066/4466/658 3067/4455/658 +f 3064/4457/659 3068/4460/659 3065/4458/659 +f 3067/4455/652 3066/4466/652 3065/4458/652 +f 3063/4456/658 3067/4455/658 3060/4461/658 +f 3067/4455/660 3068/4460/660 3059/4444/660 +f 3068/4460/659 3064/4457/659 3058/4464/659 +f 3066/4466/658 3062/4452/658 3052/4467/658 +f 3050/4434/661 3065/4458/661 3066/4466/661 +f 3061/4459/659 3065/4458/659 3050/4469/659 +f 3069/4473/658 3070/5338/658 3071/5339/658 +f 3071/5339/658 3072/5340/658 3069/4473/658 +f 3072/5340/658 3073/5341/658 3069/4473/658 +f 3073/5341/658 3074/5342/658 3069/4473/658 +f 3074/5342/658 3075/4471/658 3069/4473/658 +f 3101/4474/658 3102/5343/658 3103/5344/658 +f 3103/5344/658 3104/5345/658 3101/4474/658 +f 3104/5345/658 3105/4475/658 3101/4474/658 +f 3105/4475/658 3106/5346/658 3107/5347/658 +f 3107/5347/658 3108/5348/658 3105/4475/658 +f 3108/5348/658 3109/4476/658 3105/4475/658 +f 3109/4476/658 3110/5349/658 3111/5350/658 +f 3111/5350/658 3112/5351/658 3113/5352/658 +f 3113/5352/658 3114/5353/658 3101/4474/658 +f 3114/5353/658 3115/5354/658 3101/4474/658 +f 3115/5354/658 3116/5355/658 3101/4474/658 +f 3109/4476/658 3111/5350/658 3101/4474/658 +f 3111/5350/658 3113/5352/658 3101/4474/658 +f 3087/4479/659 3086/5356/659 3085/5357/659 +f 3085/5357/659 3100/5358/659 3099/5359/659 +f 3099/5359/659 3098/5360/659 3095/4477/659 +f 3098/5360/659 3097/5361/659 3095/4477/659 +f 3097/5361/659 3096/5362/659 3095/4477/659 +f 3095/4477/659 3094/5363/659 3093/5364/659 +f 3093/5364/659 3092/5365/659 3095/4477/659 +f 3092/5365/659 3091/4478/659 3095/4477/659 +f 3091/4478/659 3090/5366/659 3089/5367/659 +f 3089/5367/659 3088/5368/659 3091/4478/659 +f 3088/5368/659 3087/4479/659 3091/4478/659 +f 3087/4479/659 3085/5357/659 3095/4477/659 +f 3085/5357/659 3099/5359/659 3095/4477/659 +f 3119/4483/670 3122/4486/670 3120/4484/670 +f 3118/4480/653 3121/4487/653 3122/4486/653 +f 3117/4482/652 3120/4501/652 3121/4487/652 +f 3123/4488/652 3125/4492/652 3126/4489/652 +f 3123/4488/655 3127/4494/655 3128/4491/655 +f 3126/4493/671 3128/4491/671 3127/4494/671 +f 3126/4489/658 3129/4503/658 3130/4497/658 +f 3122/4499/658 3132/5369/658 3131/4500/658 +f 3126/4489/660 3137/4509/660 3139/4502/660 +f 3120/4501/652 3135/4506/652 3134/4504/652 +f 3128/4491/655 3136/4511/655 3138/4505/655 +f 3131/4500/661 3141/5370/661 3135/4506/661 +f 3122/4486/671 3133/4512/671 3142/4507/671 +f 3125/4492/652 3138/4505/652 3137/4509/652 +f 3130/4510/670 3140/5371/670 3136/4511/670 +f 3121/4487/653 3134/4504/653 3133/4512/653 +f 3139/4502/659 3137/4509/659 3136/4513/659 +f 3145/4516/670 3148/4520/670 3146/4517/670 +f 3144/4519/653 3147/4522/653 3148/4520/653 +f 3143/4521/652 3146/5372/652 3147/4522/652 +f 3149/4523/652 3151/4527/652 3152/4524/652 +f 3149/4523/655 3153/4529/655 3154/4526/655 +f 3152/4528/671 3154/4526/671 3153/4529/671 +f 3158/4531/658 3159/4537/658 3161/4532/658 +f 3159/4537/652 3160/4538/652 3149/4523/652 +f 3160/4538/655 3158/4543/655 3153/4529/655 +f 3156/4534/652 3157/4536/652 3143/4521/652 +f 3155/4539/653 3156/4534/653 3144/4519/653 +f 3159/4537/660 3150/4525/660 3165/4540/660 +f 3153/4541/659 3166/5373/659 3165/4540/659 +f 3166/4542/670 3153/4529/670 3158/4543/670 +f 3167/4545/661 3143/4521/661 3157/4536/661 +f 3167/4545/659 3168/5374/659 3145/4547/659 +f 3155/4539/671 3145/4516/671 3168/4548/671 +f 3367/4550/659 3368/4556/659 3366/4551/659 +f 3371/4553/658 3372/4564/658 3369/4554/658 +f 3368/4556/655 3372/4564/655 3371/4553/655 +f 3367/4557/653 3365/5375/653 3370/4555/653 +f 3368/4558/655 3375/4568/655 3377/4559/655 +f 3366/4561/657 3371/4553/657 3370/4555/657 +f 3372/4564/656 3374/4560/656 3373/4565/656 +f 3367/4567/654 3376/5376/654 3375/4568/654 +f 3373/4565/653 3378/4571/653 3376/4569/653 +f 3374/4560/652 3377/4559/652 3378/4571/652 +f 3382/4572/652 3386/4578/652 3385/4573/652 +f 3379/4575/654 3383/5377/654 3384/4576/654 +f 3380/4577/655 3384/4576/655 3386/4578/655 +f 3381/4574/653 3385/4573/653 3383/4579/653 +f 3390/4581/652 3394/4587/652 3393/4582/652 +f 3387/4584/654 3391/5378/654 3392/4585/654 +f 3388/4586/655 3392/4585/655 3394/4587/655 +f 3389/4583/653 3393/4582/653 3391/4588/653 +f 3401/4590/652 3402/4596/652 3398/4591/652 +f 3400/4593/654 3399/5379/654 3395/4594/654 +f 3402/4596/655 3400/4593/655 3396/4595/655 +f 3399/4597/653 3401/4590/653 3397/4592/653 +f 3409/4599/652 3410/4605/652 3406/4600/652 +f 3408/4602/654 3407/5380/654 3403/4603/654 +f 3410/4605/655 3408/4602/655 3404/4604/655 +f 3407/4606/653 3409/4599/653 3405/4601/653 +f 3417/4608/652 3418/4614/652 3414/4609/652 +f 3416/4611/654 3415/5381/654 3411/4612/654 +f 3418/4614/655 3416/4611/655 3412/4613/655 +f 3415/4615/653 3417/4608/653 3413/4610/653 +f 3425/4617/652 3426/4623/652 3422/4618/652 +f 3424/4620/654 3423/5382/654 3419/4621/654 +f 3426/4623/655 3424/4620/655 3420/4622/655 +f 3423/4624/653 3425/4617/653 3421/4619/653 +f 3433/4626/652 3434/4632/652 3430/4627/652 +f 3432/4629/654 3431/5383/654 3427/4630/654 +f 3434/4632/655 3432/4629/655 3428/4631/655 +f 3431/4633/653 3433/4626/653 3429/4628/653 +f 3441/4635/652 3442/4641/652 3438/4636/652 +f 3440/4638/654 3439/5384/654 3435/4639/654 +f 3442/4641/655 3440/4638/655 3436/4640/655 +f 3439/4642/653 3441/4635/653 3437/4637/653 +f 3449/4644/652 3450/4650/652 3446/4645/652 +f 3448/4647/654 3447/5385/654 3443/4648/654 +f 3450/4650/655 3448/4647/655 3444/4649/655 +f 3447/4651/653 3449/4644/653 3445/4646/653 +f 3457/4653/652 3458/4659/652 3454/4654/652 +f 3456/4656/654 3455/5386/654 3451/4657/654 +f 3458/4659/655 3456/4656/655 3452/4658/655 +f 3455/4660/653 3457/4653/653 3453/4655/653 +f 3465/4662/652 3466/4668/652 3462/4663/652 +f 3464/4665/654 3463/5387/654 3459/4666/654 +f 3466/4668/655 3464/4665/655 3460/4667/655 +f 3463/4669/653 3465/4662/653 3461/4664/653 +f 3473/4671/652 3474/4677/652 3470/4672/652 +f 3472/4674/654 3471/5388/654 3467/4675/654 +f 3474/4677/655 3472/4674/655 3468/4676/655 +f 3471/4678/653 3473/4671/653 3469/4673/653 +f 3476/4680/655 3478/5389/655 3477/4681/655 +f 3482/4683/665 3484/5390/665 3483/4684/665 +f 3476/4680/654 3481/4692/654 3482/4686/654 +f 3477/4688/652 3479/4691/652 3480/4689/652 +f 3478/4690/659 3482/5391/659 3479/4691/659 +f 3475/4682/658 3480/4689/658 3481/4692/658 +f 3484/4693/655 3486/5392/655 3485/4694/655 +f 3484/4696/654 3488/4701/654 3490/4697/654 +f 3485/4694/652 3489/4700/652 3487/4699/652 +f 3490/4697/653 3488/4701/653 3487/4699/653 +f 3480/4689/664 3487/4699/664 3488/4701/664 +f 3488/4701/654 3484/5393/654 3482/4702/654 +f 3483/4684/652 3487/4699/652 3480/4689/652 +f 3492/4703/653 3494/5394/653 3493/4704/653 +f 3494/4706/659 3498/4709/659 3497/4707/659 +f 3498/4709/655 3496/4711/655 3495/4710/655 +f 3496/4711/658 3492/4703/658 3491/4705/658 +f 3494/4712/654 3505/5395/654 3506/4713/654 +f 3498/4714/655 3506/4713/655 3510/4715/655 +f 3502/4716/656 3501/4719/656 3492/4703/656 +f 3499/4722/657 3500/4726/657 3495/4710/657 +f 3500/4726/655 3507/4728/655 3503/4727/655 +f 3499/4722/654 3508/4733/654 3507/4728/654 +f 3501/4719/653 3509/4730/653 3505/4729/653 +f 3502/4716/652 3510/4715/652 3509/4730/652 +f 3497/4724/652 3503/4727/652 3504/4731/652 +f 3493/4721/653 3504/5396/653 3508/4733/653 +f 3513/4734/659 3514/5397/659 3518/4735/659 +f 3512/4737/653 3514/5398/653 3513/4734/653 +f 3511/4738/658 3515/4741/658 3516/4739/658 +f 3513/4734/654 3517/4736/654 3515/4741/654 +f 3521/4742/659 3522/5399/659 3526/4743/659 +f 3520/4745/653 3522/5400/653 3521/4742/653 +f 3519/4746/658 3523/4749/658 3524/4747/658 +f 3521/4742/654 3525/4744/654 3523/4749/654 +f 3530/4750/672 3529/4754/672 3528/4751/672 +f 3531/4753/653 3528/4751/653 3529/4754/653 +f 3536/4756/655 3539/4766/655 3542/4757/655 +f 3538/4759/657 3535/5401/657 3536/4756/657 +f 3538/4760/653 3541/4767/653 3540/4761/653 +f 3531/4763/657 3534/5402/657 3533/4764/657 +f 3533/4764/655 3530/4750/655 3527/4752/655 +f 3539/4766/672 3540/4761/672 3541/4767/672 +f 3549/4768/652 3550/4772/652 3547/4769/652 +f 3545/4771/659 3547/4769/659 3550/4772/659 +f 3544/4774/658 3549/4768/658 3548/4770/658 +f 3546/4776/655 3550/4772/655 3549/4768/655 +f 3543/4778/653 3548/4770/653 3547/4769/653 +f 3553/4780/653 3557/5403/653 3555/4781/653 +f 3558/4783/658 3557/5403/658 3553/4780/658 +f 3552/4785/655 3556/4787/655 3558/4783/655 +f 3551/4786/659 3555/5404/659 3556/4787/659 +f 3561/4788/653 3565/5405/653 3563/4789/653 +f 3566/4791/658 3565/5406/658 3561/4792/658 +f 3560/4794/655 3564/4795/655 3566/4791/655 +f 3559/4790/659 3563/4789/659 3564/4795/659 +f 3569/4796/653 3573/5407/653 3571/4797/653 +f 3574/4799/658 3573/5407/658 3569/4796/658 +f 3568/4801/655 3572/5408/655 3574/4799/655 +f 3567/4798/659 3571/4797/659 3572/4802/659 +f 3577/4804/653 3581/5409/653 3579/4805/653 +f 3582/4807/658 3581/5409/658 3577/4804/658 +f 3576/4809/655 3580/4812/655 3582/4810/655 +f 3575/4806/659 3579/4805/659 3580/4812/659 +f 3586/4813/652 3585/4820/652 3583/4814/652 +f 3587/4816/654 3589/5410/654 3590/4817/654 +f 3586/4813/653 3590/5411/653 3589/4819/653 +f 3583/4814/655 3587/4816/655 3588/4818/655 +f 3584/4815/659 3588/5412/659 3590/4821/659 +f 3585/4820/658 3589/5413/658 3587/4822/658 +f 3596/4823/672 3602/4834/672 3601/4824/672 +f 3595/4826/652 3597/5414/652 3598/4827/652 +f 3593/4829/655 3597/5414/655 3595/4826/655 +f 3594/4831/653 3592/4833/653 3596/4828/653 +f 3595/4825/655 3601/4824/655 3599/4832/655 +f 3592/4833/653 3600/5415/653 3602/4834/653 +f 3604/4835/653 3606/4838/653 3605/4836/653 +f 3606/4838/659 3610/4841/659 3609/4839/659 +f 3610/4841/655 3608/4844/655 3607/4842/655 +f 3606/4838/652 3604/4835/652 3608/4844/652 +f 3618/4845/653 3616/4857/653 3612/4846/653 +f 3611/4848/655 3615/4859/655 3617/4849/655 +f 3613/4850/652 3617/4849/652 3618/4845/652 +f 3617/4851/658 3619/4854/658 3620/4852/658 +f 3619/4854/652 3621/5416/652 3622/4855/652 +f 3618/4853/653 3620/4852/653 3622/4856/653 +f 3621/4858/655 3619/4854/655 3617/4851/655 +f 3629/4860/672 3630/4865/672 3626/4861/672 +f 3627/4863/653 3629/4860/653 3625/4862/653 +f 3630/4865/655 3628/5417/655 3624/4866/655 +f 3633/4867/655 3634/4871/655 3632/4868/655 +f 3637/4870/659 3638/4874/659 3634/4871/659 +f 3635/4873/653 3636/4876/653 3638/4874/653 +f 3636/4876/652 3632/4868/652 3634/4871/652 +f 3645/4877/652 3646/4896/652 3643/4878/652 +f 3641/4880/659 3647/4884/659 3650/4881/659 +f 3639/4883/653 3648/4889/653 3647/4884/653 +f 3642/4886/655 3650/4881/655 3649/4887/655 +f 3649/4887/652 3650/4881/652 3647/4884/652 +f 3640/4890/658 3649/4887/658 3648/4889/658 +f 3651/4892/654 3654/5418/654 3653/4893/654 +f 3645/4877/655 3653/5419/655 3654/4895/655 +f 3643/4878/653 3651/5420/653 3652/4897/653 +f 3646/4896/659 3654/5421/659 3651/4898/659 +f 3644/4879/658 3652/4894/658 3653/4893/658 +f 3624/4866/655 3872/5422/655 3874/4899/655 +f 3625/4901/653 3873/4903/653 3871/4902/653 +f 3626/4900/652 3874/4899/652 3873/4903/652 +f 3874/4904/655 3872/5422/655 3876/4905/655 +f 3873/4907/653 3877/4909/653 3875/4908/653 +f 3874/4904/658 3878/4906/658 3877/4909/658 +f 3876/4910/655 3880/5423/655 3882/4911/655 +f 3875/4912/653 3877/4909/653 3881/4913/653 +f 3878/4906/652 3882/4911/652 3881/4913/652 +f 3880/4915/659 3879/5424/659 3881/4913/659 +f 3896/4916/653 3898/4939/653 3897/4917/653 +f 3888/4919/653 3890/4930/653 3889/4920/653 +f 3886/4922/658 3890/4930/658 3888/4923/658 +f 3987/4925/653 3991/5049/653 3989/4926/653 +f 3883/4928/659 3887/5425/659 3889/4920/659 +f 3885/4929/652 3889/4920/652 3890/4930/652 +f 3894/4931/658 3898/4939/658 3896/4932/658 +f 3982/4934/655 3990/5426/655 3992/4935/655 +f 3891/4937/659 3895/5427/659 3897/4917/659 +f 3893/4938/652 3897/4917/652 3898/4939/652 +f 3912/4940/653 3914/4963/653 3913/4941/653 +f 3904/4943/653 3906/4954/653 3905/4944/653 +f 3902/4946/658 3906/4954/658 3904/4947/658 +f 4001/4949/653 4005/5069/653 4003/4950/653 +f 3899/4952/659 3903/5428/659 3905/4944/659 +f 3901/4953/652 3905/4944/652 3906/4954/652 +f 3910/4955/658 3914/4963/658 3912/4956/658 +f 3907/4961/659 3911/5429/659 3913/4941/659 +f 3909/4962/652 3913/4941/652 3914/4963/652 +f 3928/4964/653 3930/4984/653 3929/4965/653 +f 3920/4967/653 3922/4976/653 3921/4968/653 +f 3918/4970/658 3922/4976/658 3920/4971/658 +f 3988/4936/656 3987/4925/656 3985/4959/656 +f 3915/4974/659 3919/5430/659 3921/4968/659 +f 3917/4975/652 3921/4968/652 3922/4976/652 +f 3926/4977/658 3930/4984/658 3928/4978/658 +f 3923/4982/659 3927/5431/659 3929/4965/659 +f 3925/4983/652 3929/4965/652 3930/4984/652 +f 3934/4985/658 3938/4994/658 3936/4986/658 +f 4007/4988/653 4012/5070/653 4013/4989/653 +f 3931/4991/659 3935/5432/659 3937/4992/659 +f 3933/4993/652 3937/4992/652 3938/4994/652 +f 3942/4995/658 3946/5003/658 3944/4996/658 +f 3982/4980/655 3986/4973/655 3983/4998/655 +f 3939/5000/659 3943/5433/659 3945/5001/659 +f 3941/5002/652 3945/5001/652 3946/5003/652 +f 3950/5004/658 3954/5012/658 3952/5005/658 +f 3980/4927/654 3989/4926/654 3990/5007/654 +f 3947/5009/659 3951/5434/659 3953/5010/659 +f 3949/5011/652 3953/5010/652 3954/5012/652 +f 3958/5013/658 3962/5020/658 3960/5014/658 +f 3979/5016/653 3984/5024/653 3985/4959/653 +f 3955/5017/659 3959/5435/659 3961/5018/659 +f 3957/5019/652 3961/5018/652 3962/5020/652 +f 3966/5021/658 3970/5028/658 3968/5022/658 +f 3983/4998/658 3986/4973/658 3985/4959/658 +f 3963/5025/659 3967/5436/659 3969/5026/659 +f 3965/5027/652 3969/5026/652 3970/5028/652 +f 3974/5029/658 3978/5036/658 3976/5030/658 +f 3980/4958/659 3982/5437/659 3981/5032/659 +f 3971/5033/659 3975/5438/659 3977/5034/659 +f 3973/5035/652 3977/5034/652 3978/5036/652 +f 3971/5037/655 3973/5035/655 3974/5029/655 +f 3963/5039/655 3965/5027/655 3966/5021/655 +f 3955/5041/655 3957/5019/655 3958/5013/655 +f 3947/5043/655 3949/5011/655 3950/5004/655 +f 3939/5045/655 3941/5002/655 3942/4995/655 +f 3931/5047/655 3933/4993/655 3934/4985/655 +f 3988/4936/652 3992/4935/652 3991/5049/652 +f 3996/5050/655 4004/5439/655 4006/5051/655 +f 4002/5052/656 4001/4949/656 3999/5054/656 +f 4010/5059/655 4014/5440/655 4011/5060/655 +f 3996/5057/655 4000/5056/655 3997/5062/655 +f 3994/4951/654 4003/4950/654 4004/5064/654 +f 3993/5066/653 3998/5067/653 3999/5054/653 +f 3997/5062/658 4000/5056/658 3999/5054/658 +f 3994/5053/659 3996/5441/659 3995/5068/659 +f 4002/5052/652 4006/5051/652 4005/5069/652 +f 4011/5060/658 4014/5440/658 4013/4989/658 +f 4008/4990/659 4010/5442/659 4009/5071/659 +f 4018/5072/655 4022/5443/655 4019/5073/655 +f 4015/5075/653 4020/5078/653 4021/5076/653 +f 4019/5073/658 4022/5443/658 4021/5076/658 +f 4016/5077/659 4018/5444/659 4017/5079/659 +f 3155/5081/658 3164/5445/658 3163/4546/658 +f 3135/4506/659 3141/5370/659 3142/5082/659 +f 4027/5085/658 4030/5446/658 4026/5086/658 +f 4025/5088/659 4029/5447/659 4028/5089/659 +f 4026/5086/653 4030/5446/653 4029/5091/653 +f 4024/5090/655 4028/5089/655 4027/5085/655 +f 4035/5093/658 4038/5118/658 4034/5094/658 +f 4033/5096/659 4037/5099/659 4036/5097/659 +f 4034/5094/653 4038/5118/653 4037/5099/653 +f 4032/5100/655 4036/5448/655 4035/5093/655 +f 4036/5101/670 4042/5449/670 4041/5102/670 +f 4030/5104/671 4040/5450/671 4039/5105/671 +f 4040/5107/654 4041/5111/654 4042/5108/654 +f 4040/5107/658 4044/5121/658 4045/5110/658 +f 4042/5112/659 4046/5115/659 4043/5113/659 +f 4045/5110/652 4044/5121/652 4043/5113/652 +f 4041/5111/658 4045/5110/658 4038/5116/658 +f 4045/5110/660 4046/5115/660 4037/5099/660 +f 4046/5115/659 4042/5112/659 4036/5119/659 +f 4044/5121/658 4040/5107/658 4030/5122/658 +f 4028/5089/661 4043/5113/661 4044/5121/661 +f 4039/5114/659 4043/5113/659 4028/5124/659 +f 4063/5126/658 4064/5451/658 4065/5452/658 +f 4065/5452/658 4066/5453/658 4063/5126/658 +f 4066/5453/658 4067/5127/658 4063/5126/658 +f 4067/5127/658 4068/5454/658 4069/5455/658 +f 4069/5455/658 4070/5456/658 4067/5127/658 +f 4070/5456/658 4071/5128/658 4067/5127/658 +f 4071/5128/658 4072/5457/658 4073/5458/658 +f 4073/5458/658 4074/5459/658 4075/5460/658 +f 4075/5460/658 4076/5461/658 4063/5126/658 +f 4076/5461/658 4077/5462/658 4063/5126/658 +f 4077/5462/658 4078/5463/658 4063/5126/658 +f 4071/5128/658 4073/5458/658 4063/5126/658 +f 4073/5458/658 4075/5460/658 4063/5126/658 +f 4049/5131/659 4048/5464/659 4047/5465/659 +f 4047/5465/659 4062/5466/659 4061/5467/659 +f 4061/5467/659 4060/5468/659 4057/5129/659 +f 4060/5468/659 4059/5469/659 4057/5129/659 +f 4059/5469/659 4058/5470/659 4057/5129/659 +f 4057/5129/659 4056/5471/659 4055/5472/659 +f 4055/5472/659 4054/5473/659 4057/5129/659 +f 4054/5473/659 4053/5130/659 4057/5129/659 +f 4053/5130/659 4052/5474/659 4051/5475/659 +f 4051/5475/659 4050/5476/659 4053/5130/659 +f 4050/5476/659 4049/5131/659 4053/5130/659 +f 4049/5131/659 4047/5465/659 4057/5129/659 +f 4047/5465/659 4061/5467/659 4057/5129/659 +f 4081/5132/653 4082/5477/653 4080/5133/653 +f 4087/5135/663 4088/5478/663 4086/5136/663 +f 4086/5138/654 4085/5144/654 4080/5133/654 +f 4084/5140/652 4083/5142/652 4081/5141/652 +f 4083/5142/659 4086/5479/659 4082/5143/659 +f 4085/5144/658 4084/5140/658 4079/5134/658 +f 4089/5145/653 4090/5480/653 4088/5146/653 +f 4094/5148/654 4092/5153/654 4088/5149/654 +f 4091/5151/652 4093/5152/652 4089/5145/652 +f 4091/5151/655 4092/5153/655 4094/5148/655 +f 4092/5153/662 4091/5151/662 4084/5140/662 +f 4086/5154/654 4088/5481/654 4092/5153/654 +f 4084/5140/652 4091/5151/652 4087/5135/652 +f 4097/5155/655 4098/5482/655 4096/5156/655 +f 4101/5158/659 4102/5162/659 4098/5159/659 +f 4099/5161/653 4100/5163/653 4102/5162/653 +f 4095/5157/658 4096/5156/658 4100/5163/658 +f 4110/5164/654 4109/5483/654 4098/5165/654 +f 4114/5167/653 4110/5164/653 4102/5166/653 +f 4096/5156/656 4105/5170/656 4106/5168/656 +f 4099/5161/657 4104/5177/657 4103/5175/657 +f 4107/5179/653 4111/5180/653 4104/5177/653 +f 4111/5180/654 4112/5185/654 4103/5175/654 +f 4109/5181/655 4113/5182/655 4105/5170/655 +f 4113/5182/652 4114/5167/652 4106/5168/652 +f 4108/5183/652 4107/5179/652 4101/5176/652 +f 4112/5185/655 4108/5484/655 4097/5173/655 +f 4117/5186/658 4118/5485/658 4122/5187/658 +f 4116/5189/655 4118/5486/655 4117/5186/655 +f 4115/5190/659 4119/5193/659 4120/5191/659 +f 4117/5186/654 4121/5188/654 4119/5193/654 +f 4125/5194/658 4126/5487/658 4130/5195/658 +f 4124/5197/655 4126/5488/655 4125/5194/655 +f 4123/5198/659 4127/5201/659 4128/5199/659 +f 4125/5194/654 4129/5196/654 4127/5201/654 +f 4133/5202/659 4134/5489/659 4138/5203/659 +f 4132/5205/655 4134/5490/655 4133/5202/655 +f 4131/5206/658 4135/5209/658 4136/5207/658 +f 4133/5202/652 4137/5204/652 4135/5209/652 +f 4141/5210/659 4142/5491/659 4146/5211/659 +f 4140/5213/655 4142/5492/655 4141/5210/655 +f 4139/5214/658 4143/5217/658 4144/5215/658 +f 4141/5210/652 4145/5212/652 4143/5217/652 +f 4149/5218/658 4150/5493/658 4154/5219/658 +f 4148/5221/653 4150/5494/653 4149/5218/653 +f 4147/5222/659 4151/5225/659 4152/5223/659 +f 4149/5218/652 4153/5220/652 4151/5225/652 +f 4157/5226/658 4158/5495/658 4162/5227/658 +f 4156/5229/653 4158/5496/653 4157/5226/653 +f 4155/5230/659 4159/5233/659 4160/5231/659 +f 4157/5226/652 4161/5228/652 4159/5233/652 +f 4165/5234/659 4166/5497/659 4170/5235/659 +f 4164/5237/654 4166/5498/654 4165/5234/654 +f 4163/5238/658 4167/5241/658 4168/5239/658 +f 4165/5234/655 4169/5236/655 4167/5241/655 +f 4173/5242/659 4174/5499/659 4178/5243/659 +f 4172/5245/654 4174/5500/654 4173/5242/654 +f 4171/5246/658 4175/5249/658 4176/5247/658 +f 4173/5242/655 4177/5244/655 4175/5249/655 +f 4182/5250/658 4186/5501/658 4185/5251/658 +f 4180/5253/652 4182/5502/652 4181/5252/652 +f 4179/5254/659 4183/5257/659 4184/5255/659 +f 4181/5252/655 4185/5251/655 4183/5257/655 +f 4190/5258/658 4194/5503/658 4193/5259/658 +f 4188/5261/652 4190/5504/652 4189/5260/652 +f 4187/5262/659 4191/5265/659 4192/5263/659 +f 4189/5260/655 4193/5259/655 4191/5265/655 +f 4197/5266/659 4198/5505/659 4202/5267/659 +f 4196/5269/652 4198/5506/652 4197/5266/652 +f 4195/5270/658 4199/5273/658 4200/5271/658 +f 4197/5266/653 4201/5268/653 4199/5273/653 +f 4205/5274/659 4206/5507/659 4210/5275/659 +f 4204/5277/652 4206/5508/652 4205/5274/652 +f 4203/5278/658 4207/5281/658 4208/5279/658 +f 4205/5274/653 4209/5276/653 4207/5281/653 +f 4214/5282/658 4218/5509/658 4217/5283/658 +f 4212/5285/654 4214/5510/654 4213/5284/654 +f 4211/5286/659 4215/5289/659 4216/5287/659 +f 4213/5284/653 4217/5283/653 4215/5289/653 +f 4222/5290/658 4226/5511/658 4225/5291/658 +f 4220/5293/654 4222/5512/654 4221/5292/654 +f 4219/5294/659 4223/5297/659 4224/5295/659 +f 4221/5292/653 4225/5291/653 4223/5297/653 +f 4227/5300/658 4228/5513/658 4229/5514/658 +f 4229/5514/658 4230/5515/658 4227/5300/658 +f 4230/5515/658 4231/5516/658 4227/5300/658 +f 4231/5516/658 4232/5517/658 4227/5300/658 +f 4232/5517/658 4233/5298/658 4227/5300/658 +f 4243/5303/658 4244/5518/658 4245/5519/658 +f 4245/5519/658 4246/5520/658 4243/5303/658 +f 4246/5520/658 4247/5521/658 4243/5303/658 +f 4247/5521/658 4248/5522/658 4243/5303/658 +f 4248/5522/658 4249/5301/658 4243/5303/658 +f 4259/5306/658 4260/5523/658 4261/5524/658 +f 4261/5524/658 4262/5525/658 4259/5306/658 +f 4262/5525/658 4263/5526/658 4259/5306/658 +f 4263/5526/658 4264/5527/658 4259/5306/658 +f 4264/5527/658 4265/5304/658 4259/5306/658 +f 3615/4859/659 3616/5528/659 3622/5307/659 s 1 -f 2668/5055/661 2653/5056/652 2660/5057/661 -f 2666/5058/670 2659/5059/655 2658/5060/670 -f 2664/5061/671 2657/5062/654 2656/5063/671 -f 2661/5064/660 2655/5065/653 2654/5066/660 -f 2667/5067/655 2660/5057/661 2659/5059/655 -f 2665/5068/654 2658/5060/670 2657/5069/654 -f 2663/5070/653 2656/5063/671 2655/5065/653 -f 2662/5071/652 2654/5066/660 2653/5056/652 -f 2683/5072/661 2698/5073/673 2682/5074/673 -f 2676/5075/674 2691/5076/671 2675/5077/671 -f 2684/5078/675 2699/5079/661 2683/5072/661 -f 2677/5080/654 2692/5081/674 2676/5075/674 -f 2670/5082/676 2685/5083/652 2669/5084/652 -f 2669/5084/652 2700/5085/675 2684/5078/675 -f 2678/5086/677 2693/5087/654 2677/5088/654 -f 2671/5089/660 2686/5090/676 2670/5082/676 -f 2679/5091/670 2694/5092/677 2678/5086/677 -f 2672/5093/678 2687/5094/660 2671/5089/660 -f 2680/5095/679 2695/5096/670 2679/5091/670 -f 2673/5097/653 2688/5098/678 2672/5093/678 -f 2681/5099/655 2696/5100/679 2680/5095/679 -f 2674/5101/680 2689/5102/653 2673/5097/653 -f 2682/5074/673 2697/5103/655 2681/5099/655 -f 2675/5077/671 2690/5104/680 2674/5101/680 -f 2765/5105/655 2798/5106/681 2766/5107/661 -f 2778/5108/671 2811/5109/682 2779/5110/654 -f 2753/5111/660 2791/5112/683 2759/5113/653 -f 2779/5110/654 2812/5114/684 2780/5115/670 -f 2768/5116/652 2793/5117/685 2761/5118/660 -f 2791/5112/683 2754/5119/671 2759/5113/653 -f 2780/5115/670 2813/5120/686 2781/5121/655 -f 2798/5106/681 2768/5122/652 2766/5107/661 -f 2754/5119/671 2787/5123/682 2755/5124/654 -f 2781/5121/655 2814/5125/681 2782/5126/661 -f 2769/5127/660 2807/5128/683 2775/5129/653 -f 2755/5124/654 2788/5130/684 2756/5131/670 -f 2784/5132/652 2809/5133/685 2777/5134/660 -f 2807/5128/683 2770/5135/671 2775/5129/653 -f 2756/5131/670 2789/5136/686 2757/5137/655 -f 2814/5125/681 2784/5138/652 2782/5126/661 -f 2770/5135/671 2803/5139/682 2771/5140/654 -f 2757/5137/655 2790/5141/681 2758/5142/661 -f 2771/5140/654 2804/5143/684 2772/5144/670 -f 2760/5145/652 2785/5146/685 2753/5111/660 -f 2772/5144/670 2805/5147/686 2773/5148/655 -f 2790/5141/681 2760/5149/652 2758/5142/661 -f 2773/5148/655 2806/5150/681 2774/5151/661 -f 2761/5118/660 2799/5152/683 2767/5153/653 -f 2776/5154/652 2801/5155/685 2769/5127/660 -f 2799/5152/683 2762/5156/671 2767/5153/653 -f 2806/5150/681 2776/5157/652 2774/5151/661 -f 2762/5156/671 2795/5158/682 2763/5159/654 -f 2777/5134/660 2815/5160/683 2783/5161/653 -f 2763/5159/654 2796/5162/684 2764/5163/670 -f 2815/5160/683 2778/5108/671 2783/5161/653 -f 2764/5163/670 2797/5164/686 2765/5105/655 -f 2796/5165/684 2828/5166/687 2797/5167/686 -f 2786/5168/688 2819/5169/689 2787/5123/682 -f 2799/5170/683 2825/5171/690 2794/5172/688 -f 2798/5173/681 2828/5166/687 2829/5174/691 -f 2788/5175/684 2819/5169/689 2820/5176/692 -f 2795/5158/682 2825/5171/690 2826/5177/689 -f 2785/5178/685 2823/5179/693 2791/5180/683 -f 2788/5175/684 2821/5181/687 2789/5182/686 -f 2796/5165/684 2826/5177/689 2827/5183/692 -f 2791/5180/683 2818/5184/690 2786/5168/688 -f 2793/5185/685 2830/5186/693 2799/5170/683 -f 2789/5182/686 2822/5187/691 2790/5188/681 -f 2824/5189/694 2844/5190/695 2830/5186/693 -f 2819/5169/689 2834/5191/696 2820/5176/692 -f 2828/5166/687 2841/5192/696 2842/5193/697 -f 2817/5194/694 2837/5195/695 2823/5179/693 -f 2830/5186/693 2839/5196/698 2825/5171/690 -f 2821/5181/687 2834/5191/696 2835/5197/697 -f 2829/5174/691 2842/5193/697 2843/5198/699 -f 2823/5179/693 2832/5199/698 2818/5184/690 -f 2825/5171/690 2840/5200/700 2826/5177/689 -f 2822/5187/691 2835/5197/697 2836/5201/699 -f 2819/5169/689 2832/5199/698 2833/5202/700 -f 2826/5177/689 2841/5192/696 2827/5183/692 -f 2814/5203/681 2856/5204/687 2857/5205/691 -f 2804/5206/684 2847/5207/689 2848/5208/692 -f 2810/5209/688 2854/5210/689 2811/5109/682 -f 2807/5211/683 2845/5212/694 2851/5213/693 -f 2805/5214/686 2848/5208/692 2849/5215/687 -f 2811/5109/682 2855/5216/692 2812/5217/684 -f 2807/5211/683 2846/5218/690 2802/5219/688 -f 2815/5220/683 2852/5221/694 2858/5222/693 -f 2805/5214/686 2850/5223/691 2806/5224/681 -f 2813/5225/686 2855/5216/692 2856/5204/687 -f 2802/5219/688 2847/5207/689 2803/5139/682 -f 2815/5220/683 2853/5226/690 2810/5209/688 -f 2850/5223/691 2863/5227/697 2864/5228/699 -f 2847/5207/689 2860/5229/698 2861/5230/700 -f 2854/5210/689 2869/5231/696 2855/5216/692 -f 2852/5221/694 2872/5232/695 2858/5222/693 -f 2847/5207/689 2862/5233/696 2848/5208/692 -f 2855/5216/692 2870/5234/697 2856/5204/687 -f 2845/5212/694 2865/5235/695 2851/5213/693 -f 2858/5222/693 2867/5236/698 2853/5226/690 -f 2848/5208/692 2863/5227/697 2849/5215/687 -f 2856/5204/687 2871/5237/699 2857/5205/691 -f 2846/5218/690 2865/5235/695 2860/5229/698 -f 2854/5210/689 2867/5236/698 2868/5238/700 -f 2809/5239/685 2816/5240/656 2852/5221/694 -f 2852/5221/694 2816/5240/656 2866/5241/701 -f 2814/5203/681 2857/5205/691 2816/5242/656 -f 2857/5205/691 2871/5237/699 2816/5242/656 -f 2801/5243/685 2808/5244/656 2845/5212/694 -f 2845/5212/694 2808/5244/656 2859/5245/701 -f 2806/5224/681 2850/5223/691 2808/5246/656 -f 2850/5223/691 2864/5228/699 2808/5246/656 -f 2793/5185/685 2800/5247/656 2824/5189/694 -f 2824/5189/694 2800/5247/656 2838/5248/701 -f 2798/5173/681 2829/5174/691 2800/5249/656 -f 2829/5174/691 2843/5198/699 2800/5249/656 -f 2785/5178/685 2792/5250/656 2817/5194/694 -f 2817/5194/694 2792/5250/656 2831/5251/701 -f 2790/5188/681 2822/5187/691 2792/5252/656 -f 2822/5187/691 2836/5201/699 2792/5252/656 -f 2842/5253/697 2889/5254/702 2843/5255/699 -f 2859/5256/701 2897/5257/653 2865/5258/695 -f 2866/5259/701 2876/5260/703 2898/5261/704 -f 2836/5262/699 2873/5263/658 2792/5264/656 -f 2865/5258/695 2892/5265/663 2860/5266/698 -f 2831/5267/701 2883/5268/653 2837/5269/695 -f 2861/5230/700 2892/5265/663 2893/5270/659 -f 2871/5271/699 2876/5272/703 2816/5273/656 -f 2837/5269/695 2878/5274/663 2832/5275/698 -f 2861/5230/700 2894/5276/665 2862/5277/696 -f 2832/5275/698 2879/5278/659 2833/5202/700 -f 2862/5277/696 2895/5279/655 2863/5280/697 -f 2859/5256/701 2875/5281/658 2891/5282/664 -f 2833/5202/700 2880/5283/665 2834/5284/696 -f 2864/5285/699 2895/5279/655 2896/5286/662 -f 2834/5284/696 2881/5287/655 2835/5288/697 -f 2866/5259/701 2904/5289/705 2872/5290/695 -f 2864/5285/699 2875/5291/658 2808/5292/656 -f 2836/5262/699 2881/5287/655 2882/5293/662 -f 2872/5290/695 2899/5294/706 2867/5295/698 -f 2838/5296/701 2890/5297/705 2844/5298/695 -f 2868/5238/700 2899/5294/706 2900/5299/707 -f 2800/5300/656 2884/5301/704 2838/5296/701 -f 2844/5298/695 2885/5302/706 2839/5303/698 -f 2868/5238/700 2901/5304/708 2869/5305/696 -f 2839/5303/698 2886/5306/707 2840/5200/700 -f 2869/5305/696 2902/5307/670 2870/5308/697 -f 2843/5255/699 2874/5309/703 2800/5310/656 -f 2840/5200/700 2887/5311/708 2841/5312/696 -f 2871/5271/699 2902/5307/670 2903/5313/702 -f 2841/5312/696 2888/5314/670 2842/5253/697 -f 2792/5315/656 2877/5316/664 2831/5267/701 -f 2874/5317/703 2911/5318/709 2905/5319/710 -f 2904/5289/705 2914/5320/711 2899/5321/706 -f 2886/5322/707 2910/5323/712 2887/5324/708 -f 2890/5297/705 2907/5325/713 2912/5326/660 -f 2900/5327/707 2914/5320/711 2915/5328/714 -f 2890/5297/705 2908/5329/711 2885/5330/706 -f 2898/5331/704 2906/5332/710 2913/5333/713 -f 2900/5327/707 2916/5334/712 2901/5335/708 -f 2874/5336/703 2907/5325/713 2884/5337/704 -f 2898/5331/704 2918/5338/660 2904/5289/705 -f 2876/5339/703 2917/5340/709 2906/5341/710 -f 2885/5330/706 2909/5342/714 2886/5322/707 -f 2909/5342/714 2922/5343/715 2923/5344/716 -f 2917/5340/709 2920/5345/717 2906/5341/710 -f 2915/5328/714 2928/5346/715 2929/5347/716 -f 2910/5323/712 2923/5344/716 2924/5348/718 -f 2907/5325/713 2919/5349/717 2921/5350/719 -f 2907/5325/713 2926/5351/720 2912/5326/660 -f 2916/5334/712 2929/5347/716 2930/5352/718 -f 2913/5333/713 2932/5353/720 2918/5338/660 -f 2911/5318/709 2919/5354/717 2905/5319/710 -f 2908/5329/711 2926/5351/720 2922/5343/715 -f 2906/5332/710 2927/5355/719 2913/5333/713 -f 2918/5338/660 2928/5346/715 2914/5320/711 -f 2889/5356/702 2888/5357/670 2911/5318/709 -f 2911/5318/709 2888/5357/670 2925/5358/721 -f 2887/5324/708 2910/5323/712 2888/5357/670 -f 2910/5323/712 2924/5348/718 2888/5357/670 -f 2901/5335/708 2916/5334/712 2902/5359/670 -f 2916/5334/712 2930/5352/718 2902/5359/670 -f 2903/5360/702 2902/5359/670 2917/5340/709 -f 2917/5340/709 2902/5359/670 2931/5361/721 -f 2927/5362/719 2948/5363/652 2932/5353/720 -f 2888/5364/670 2941/5365/657 2925/5366/721 -f 2932/5353/720 2944/5367/672 2928/5368/715 -f 2929/5369/716 2944/5367/672 2945/5370/659 -f 2924/5371/718 2933/5372/654 2888/5364/670 -f 2929/5369/716 2946/5373/689 2930/5374/718 -f 2921/5375/719 2942/5376/652 2926/5351/720 -f 2920/5377/717 2943/5378/656 2927/5362/719 -f 2926/5351/720 2938/5379/672 2922/5380/715 -f 2930/5374/718 2934/5381/654 2902/5382/670 -f 2931/5383/721 2936/5384/658 2920/5385/717 -f 2922/5380/715 2939/5386/659 2923/5387/716 -f 2919/5388/717 2937/5389/656 2921/5375/719 -f 2923/5387/716 2940/5390/689 2924/5371/718 -f 2902/5382/670 2947/5391/657 2931/5383/721 -f 2925/5366/721 2935/5392/658 2919/5393/717 -f 3243/5394/722 3249/5395/664 3242/5396/664 -f 3241/5397/653 3247/5398/663 3240/5399/663 -f 3245/5400/665 3251/5401/723 3244/5402/723 -f 3242/5396/664 3248/5403/653 3241/5397/653 -f 3240/5399/663 3246/5404/659 3239/5405/659 -f 3239/5406/659 3252/5407/665 3245/5400/665 -f 3257/5408/722 3261/5409/664 3256/5410/664 -f 3255/5411/653 3259/5412/663 3254/5413/663 -f 3256/5410/664 3260/5414/653 3255/5411/653 -f 3254/5413/663 3258/5415/724 3253/5416/724 -f 3267/5417/722 3271/5418/664 3266/5419/664 -f 3265/5420/653 3269/5421/663 3264/5422/663 -f 3266/5419/664 3270/5423/653 3265/5420/653 -f 3264/5422/663 3268/5424/724 3263/5425/724 -f 3277/5426/722 3281/5427/664 3276/5428/664 -f 3275/5429/653 3279/5430/663 3274/5431/663 -f 3276/5428/664 3280/5432/653 3275/5429/653 -f 3274/5431/663 3278/5433/724 3273/5434/724 -f 3287/5435/722 3291/5436/664 3286/5437/664 -f 3285/5438/653 3289/5439/663 3284/5440/663 -f 3286/5437/664 3290/5441/653 3285/5438/653 -f 3284/5440/663 3288/5442/724 3283/5443/724 -f 3299/5444/725 3305/5445/662 3298/5446/662 -f 3297/5447/658 3303/5448/664 3296/5449/664 -f 3295/5450/653 3301/5451/663 3294/5452/663 -f 3298/5446/662 3304/5453/658 3297/5447/658 -f 3296/5449/664 3302/5454/653 3295/5450/653 -f 3294/5452/663 3300/5455/724 3293/5456/724 -f 3312/5457/655 3318/5458/662 3311/5459/662 -f 3309/5460/726 3315/5461/663 3308/5462/663 -f 3313/5463/665 3319/5464/655 3312/5457/655 -f 3311/5459/662 3317/5465/727 3310/5466/727 -f 3308/5462/663 3314/5467/659 3307/5468/659 -f 3307/5469/659 3320/5470/665 3313/5463/665 -f 3324/5471/655 3328/5472/662 3323/5473/662 -f 3325/5474/665 3329/5475/655 3324/5471/655 -f 3323/5473/662 3327/5476/727 3322/5477/727 -f 3321/5478/728 3330/5479/665 3325/5474/665 -f 3334/5480/655 3338/5481/662 3333/5482/662 -f 3335/5483/665 3339/5484/655 3334/5480/655 -f 3333/5482/662 3337/5485/727 3332/5486/727 -f 3331/5487/728 3340/5488/665 3335/5483/665 -f 3344/5489/655 3348/5490/662 3343/5491/662 -f 3345/5492/665 3349/5493/655 3344/5489/655 -f 3343/5491/662 3347/5494/727 3342/5495/727 -f 3341/5496/728 3350/5497/665 3345/5492/665 -f 3354/5498/655 3358/5499/662 3353/5500/662 -f 3355/5501/665 3359/5502/655 3354/5498/655 -f 3353/5500/662 3357/5503/727 3352/5504/727 -f 3351/5505/728 3360/5506/665 3355/5501/665 -f 3366/5507/655 3372/5508/662 3365/5509/662 -f 3364/5510/658 3370/5511/664 3363/5512/664 -f 3367/5513/665 3373/5514/655 3366/5507/655 -f 3365/5509/662 3371/5515/658 3364/5510/658 -f 3363/5512/664 3369/5516/729 3362/5517/729 -f 3361/5518/728 3374/5519/665 3367/5513/665 -f 3377/5520/726 3381/5521/663 3376/5522/663 -f 3379/5523/665 3383/5524/723 3378/5525/723 -f 3376/5522/663 3380/5526/659 3375/5527/659 -f 3375/5528/659 3384/5529/665 3379/5523/665 -f 3389/5530/725 3393/5531/662 3388/5532/662 -f 3387/5533/658 3391/5534/664 3386/5535/664 -f 3388/5532/662 3392/5536/658 3387/5533/658 -f 3386/5535/664 3390/5537/729 3385/5538/729 -f 3397/5539/726 3401/5540/663 3396/5541/663 -f 3399/5542/665 3403/5543/723 3398/5544/723 -f 3396/5541/663 3400/5545/659 3395/5546/659 -f 3395/5547/659 3404/5548/665 3399/5542/665 -f 3409/5549/725 3413/5550/662 3408/5551/662 -f 3407/5552/658 3411/5553/664 3406/5554/664 -f 3408/5551/662 3412/5555/658 3407/5552/658 -f 3406/5554/664 3410/5556/729 3405/5557/729 -f 3417/5558/726 3421/5559/663 3416/5560/663 -f 3419/5561/665 3423/5562/723 3418/5563/723 -f 3416/5560/663 3420/5564/659 3415/5565/659 -f 3415/5566/659 3424/5567/665 3419/5561/665 -f 3429/5568/725 3433/5569/662 3428/5570/662 -f 3427/5571/658 3431/5572/664 3426/5573/664 -f 3428/5570/662 3432/5574/658 3427/5571/658 -f 3426/5573/664 3430/5575/729 3425/5576/729 -f 3437/5577/726 3441/5578/663 3436/5579/663 -f 3439/5580/665 3443/5581/723 3438/5582/723 -f 3436/5579/663 3440/5583/659 3435/5584/659 -f 3435/5585/659 3444/5586/665 3439/5580/665 -f 3449/5587/725 3453/5588/662 3448/5589/662 -f 3447/5590/658 3451/5591/664 3446/5592/664 -f 3448/5589/662 3452/5593/658 3447/5590/658 -f 3446/5592/664 3450/5594/729 3445/5595/729 -f 3645/5596/661 3660/5597/673 3644/5598/673 -f 3638/5599/674 3653/5600/671 3637/5601/671 -f 3646/5602/675 3661/5603/661 3645/5596/661 -f 3639/5604/654 3654/5605/674 3638/5599/674 -f 3632/5606/676 3647/5607/652 3631/5608/652 -f 3631/5608/652 3662/5609/675 3646/5602/675 -f 3640/5610/677 3655/5611/654 3639/5612/654 -f 3633/5613/660 3648/5614/676 3632/5606/676 -f 3641/5615/670 3656/5616/677 3640/5610/677 -f 3634/5617/678 3649/5618/660 3633/5613/660 -f 3642/5619/679 3657/5620/670 3641/5615/670 -f 3635/5621/653 3650/5622/678 3634/5617/678 -f 3643/5623/655 3658/5624/679 3642/5619/679 -f 3636/5625/680 3651/5626/653 3635/5621/653 -f 3644/5598/673 3659/5627/655 3643/5623/655 -f 3637/5601/671 3652/5628/680 3636/5625/680 -f 3826/5629/661 3811/5630/652 3818/5631/661 -f 3824/5632/670 3817/5633/655 3816/5634/670 -f 3822/5635/671 3815/5636/654 3814/5637/671 -f 3819/5638/660 3813/5639/653 3812/5640/660 -f 3825/5641/655 3818/5631/661 3817/5633/655 -f 3823/5642/654 3816/5634/670 3815/5643/654 -f 3821/5644/653 3814/5637/671 3813/5639/653 -f 3820/5645/652 3812/5640/660 3811/5630/652 -f 3842/5646/661 3827/5647/652 3834/5648/661 -f 3840/5649/670 3833/5650/655 3832/5651/670 -f 3838/5652/671 3831/5653/654 3830/5654/671 -f 3835/5655/660 3829/5656/653 3828/5657/660 -f 3841/5658/655 3834/5648/661 3833/5650/655 -f 3839/5659/654 3832/5651/670 3831/5660/654 -f 3837/5661/653 3830/5654/671 3829/5656/653 -f 3836/5662/652 3828/5657/660 3827/5647/652 -f 3858/5663/661 3843/5664/652 3850/5665/661 -f 3856/5666/670 3849/5667/655 3848/5668/670 -f 3854/5669/671 3847/5670/654 3846/5671/671 -f 3851/5672/660 3845/5673/653 3844/5674/660 -f 3857/5675/655 3850/5665/661 3849/5667/655 -f 3855/5676/654 3848/5668/670 3847/5677/654 -f 3853/5678/653 3846/5671/671 3845/5673/653 -f 3852/5679/652 3844/5674/660 3843/5664/652 -f 3904/5680/685 3871/5681/653 3872/5682/660 -f 3917/5683/682 3884/5684/670 3885/5685/654 -f 3897/5686/686 3859/5687/661 3865/5688/655 -f 3918/5689/688 3885/5685/654 3886/5690/671 -f 3899/5691/681 3874/5692/652 3867/5693/661 -f 3860/5694/670 3897/5686/686 3865/5688/655 -f 3919/5695/683 3886/5690/671 3887/5696/653 -f 3874/5697/652 3904/5680/685 3872/5682/660 -f 3893/5698/682 3860/5694/670 3861/5699/654 -f 3920/5700/685 3887/5696/653 3888/5701/660 -f 3913/5702/686 3875/5703/661 3881/5704/655 -f 3894/5705/688 3861/5699/654 3862/5706/671 -f 3915/5707/681 3890/5708/652 3883/5709/661 -f 3876/5710/670 3913/5702/686 3881/5704/655 -f 3895/5711/683 3862/5706/671 3863/5712/653 -f 3890/5713/652 3920/5700/685 3888/5701/660 -f 3909/5714/682 3876/5710/670 3877/5715/654 -f 3896/5716/685 3863/5712/653 3864/5717/660 -f 3910/5718/688 3877/5715/654 3878/5719/671 -f 3891/5720/681 3866/5721/652 3859/5687/661 -f 3911/5722/683 3878/5719/671 3879/5723/653 -f 3866/5724/652 3896/5716/685 3864/5717/660 -f 3912/5725/685 3879/5723/653 3880/5726/660 -f 3905/5727/686 3867/5693/661 3873/5728/655 -f 3907/5729/681 3882/5730/652 3875/5703/661 -f 3868/5731/670 3905/5727/686 3873/5728/655 -f 3882/5732/652 3912/5725/685 3880/5726/660 -f 3901/5733/682 3868/5731/670 3869/5734/654 -f 3921/5735/686 3883/5709/661 3889/5736/655 -f 3902/5737/688 3869/5734/654 3870/5738/671 -f 3884/5684/670 3921/5735/686 3889/5736/655 -f 3903/5739/683 3870/5738/671 3871/5681/653 -f 3903/5740/683 3933/5741/690 3902/5742/688 -f 3925/5743/689 3892/5744/684 3893/5698/682 -f 3900/5745/684 3936/5746/687 3905/5747/686 -f 3935/5748/694 3903/5740/683 3904/5749/685 -f 3894/5750/688 3925/5743/689 3893/5698/682 -f 3932/5751/689 3900/5745/684 3901/5733/682 -f 3897/5752/686 3923/5753/691 3891/5754/681 -f 3895/5755/683 3926/5756/690 3894/5750/688 -f 3902/5742/688 3932/5751/689 3901/5733/682 -f 3924/5757/692 3897/5752/686 3892/5744/684 -f 3905/5747/686 3930/5758/691 3899/5759/681 -f 3928/5760/694 3895/5755/683 3896/5761/685 -f 3950/5762/697 3930/5758/691 3936/5746/687 -f 3940/5763/698 3925/5743/689 3926/5756/690 -f 3934/5764/693 3947/5765/698 3933/5741/690 -f 3943/5766/697 3923/5753/691 3929/5767/687 -f 3945/5768/696 3936/5746/687 3931/5769/692 -f 3927/5770/693 3940/5763/698 3926/5756/690 -f 3935/5748/694 3948/5771/695 3934/5764/693 -f 3938/5772/696 3929/5767/687 3924/5757/692 -f 3932/5751/689 3945/5768/696 3931/5769/692 -f 3928/5760/694 3941/5773/695 3927/5770/693 -f 3925/5743/689 3938/5772/696 3924/5757/692 -f 3947/5765/698 3932/5751/689 3933/5741/690 -f 3963/5774/694 3919/5775/683 3920/5776/685 -f 3954/5777/690 3909/5714/682 3910/5778/688 -f 3960/5779/689 3916/5780/684 3917/5683/682 -f 3913/5781/686 3951/5782/691 3907/5783/681 -f 3911/5784/683 3954/5777/690 3910/5778/688 -f 3961/5785/690 3917/5683/682 3918/5786/688 -f 3952/5787/692 3913/5781/686 3908/5788/684 -f 3921/5789/686 3958/5790/691 3915/5791/681 -f 3956/5792/694 3911/5784/683 3912/5793/685 -f 3919/5775/683 3961/5785/690 3918/5786/688 -f 3953/5794/689 3908/5788/684 3909/5714/682 -f 3916/5780/684 3964/5795/687 3921/5789/686 -f 3956/5792/694 3969/5796/695 3955/5797/693 -f 3953/5794/689 3966/5798/696 3952/5787/692 -f 3975/5799/698 3960/5779/689 3961/5785/690 -f 3978/5800/697 3958/5790/691 3964/5795/687 -f 3968/5801/698 3953/5794/689 3954/5777/690 -f 3962/5802/693 3975/5799/698 3961/5785/690 -f 3971/5803/697 3951/5782/691 3957/5804/687 -f 3973/5805/696 3964/5795/687 3959/5806/692 -f 3955/5797/693 3968/5801/698 3954/5777/690 -f 3963/5774/694 3976/5807/695 3962/5802/693 -f 3966/5798/696 3957/5804/687 3952/5787/692 -f 3960/5779/689 3973/5805/696 3959/5806/692 -f 3915/5791/681 3958/5790/691 3922/5808/656 -f 3958/5790/691 3972/5809/699 3922/5808/656 -f 3920/5776/685 3922/5810/656 3963/5774/694 -f 3963/5774/694 3922/5810/656 3977/5811/701 -f 3907/5783/681 3951/5782/691 3914/5812/656 -f 3951/5782/691 3965/5813/699 3914/5812/656 -f 3912/5793/685 3914/5814/656 3956/5792/694 -f 3956/5792/694 3914/5814/656 3970/5815/701 -f 3899/5759/681 3930/5758/691 3906/5816/656 -f 3930/5758/691 3944/5817/699 3906/5816/656 -f 3904/5749/685 3906/5818/656 3935/5748/694 -f 3935/5748/694 3906/5818/656 3949/5819/701 -f 3891/5754/681 3923/5753/691 3898/5820/656 -f 3923/5753/691 3937/5821/699 3898/5820/656 -f 3896/5761/685 3898/5822/656 3928/5760/694 -f 3928/5760/694 3898/5822/656 3942/5823/701 -f 3995/5824/730 3948/5825/695 3949/5826/701 -f 4003/5827/655 3965/5828/699 3971/5829/697 -f 3972/5830/699 3982/5831/731 3922/5832/656 -f 3979/5833/658 3942/5834/701 3898/5835/656 -f 3998/5836/665 3971/5829/697 3966/5837/696 -f 3989/5838/655 3937/5839/699 3943/5840/697 -f 3967/5841/700 3998/5836/665 3966/5837/696 -f 3982/5842/731 3977/5843/701 3922/5844/656 -f 3984/5845/665 3943/5840/697 3938/5846/696 -f 4000/5847/663 3967/5841/700 3968/5848/698 -f 3985/5849/659 3938/5846/696 3939/5850/700 -f 4001/5851/653 3968/5848/698 3969/5852/695 -f 3965/5828/699 3981/5853/658 3914/5854/656 -f 3986/5855/663 3939/5850/700 3940/5856/698 -f 3970/5857/701 4001/5851/653 3969/5852/695 -f 3987/5858/653 3940/5856/698 3941/5859/695 -f 4010/5860/732 3972/5830/699 3978/5861/697 -f 3981/5862/658 3970/5857/701 3914/5863/656 -f 3988/5864/664 3941/5859/695 3942/5834/701 -f 4005/5865/733 3978/5861/697 3973/5866/696 -f 3996/5867/732 3944/5868/699 3950/5869/697 -f 3974/5870/700 4005/5865/733 3973/5866/696 -f 3990/5871/734 3906/5872/656 3944/5868/699 -f 3991/5873/733 3950/5869/697 3945/5874/696 -f 4007/5875/735 3974/5870/700 3975/5876/698 -f 3992/5877/736 3945/5874/696 3946/5878/700 -f 4008/5879/671 3975/5876/698 3976/5880/695 -f 3980/5881/731 3949/5826/701 3906/5882/656 -f 3993/5883/735 3946/5878/700 3947/5884/698 -f 3977/5843/701 4008/5879/671 3976/5880/695 -f 3994/5885/671 3947/5884/698 3948/5825/695 -f 3983/5886/662 3898/5887/656 3937/5839/699 -f 3980/5888/731 4017/5889/737 3995/5890/730 -f 4020/5891/738 4010/5860/732 4005/5892/733 -f 4016/5893/739 3992/5894/736 3993/5895/735 -f 3996/5867/732 4013/5896/740 3990/5897/734 -f 4006/5898/736 4020/5891/738 4005/5892/733 -f 4014/5899/738 3996/5867/732 3991/5900/733 -f 4004/5901/734 4012/5902/741 3982/5903/731 -f 4022/5904/739 4006/5898/736 4007/5905/735 -f 4013/5896/740 3980/5906/731 3990/5897/734 -f 4024/5907/661 4004/5901/734 4010/5860/732 -f 3982/5908/731 4023/5909/737 4009/5910/730 -f 4015/5911/742 3991/5900/733 3992/5894/736 -f 4029/5912/743 4014/5899/738 4015/5911/742 -f 4026/5913/744 4023/5909/737 4012/5914/741 -f 4021/5915/742 4034/5916/745 4020/5891/738 -f 4016/5893/739 4029/5912/743 4015/5911/742 -f 4013/5896/740 4025/5917/744 4011/5918/741 -f 4032/5919/746 4013/5896/740 4018/5920/661 -f 4036/5921/747 4021/5915/742 4022/5904/739 -f 4038/5922/746 4019/5923/740 4024/5907/661 -f 4025/5924/744 4017/5889/737 4011/5925/741 -f 4014/5899/738 4032/5919/746 4018/5920/661 -f 4033/5926/748 4012/5902/741 4019/5923/740 -f 4034/5916/745 4024/5907/661 4020/5891/738 -f 3995/5890/730 4017/5889/737 3994/5927/671 -f 4017/5889/737 4031/5928/749 3994/5927/671 -f 3993/5895/735 3994/5927/671 4016/5893/739 -f 4016/5893/739 3994/5927/671 4030/5929/747 -f 4007/5905/735 4008/5930/671 4022/5904/739 -f 4022/5904/739 4008/5930/671 4036/5921/747 -f 4009/5910/730 4023/5909/737 4008/5930/671 -f 4023/5909/737 4037/5931/749 4008/5930/671 -f 4054/5932/652 4033/5933/748 4038/5922/746 -f 4047/5934/657 3994/5935/671 4031/5936/749 -f 4050/5937/672 4038/5922/746 4034/5938/745 -f 4035/5939/743 4050/5937/672 4034/5938/745 -f 4039/5940/654 4030/5941/747 3994/5935/671 -f 4052/5942/689 4035/5939/743 4036/5943/747 -f 4048/5944/652 4027/5945/748 4032/5919/746 -f 4049/5946/656 4026/5947/744 4033/5933/748 -f 4044/5948/672 4032/5919/746 4028/5949/745 -f 4040/5950/654 4036/5943/747 4008/5951/671 -f 4042/5952/658 4037/5953/749 4026/5954/744 -f 4045/5955/659 4028/5949/745 4029/5956/743 -f 4043/5957/656 4025/5958/744 4027/5945/748 -f 4046/5959/689 4029/5956/743 4030/5941/747 -f 4053/5960/657 4008/5951/671 4037/5953/749 -f 4041/5961/658 4031/5936/749 4025/5962/744 -f 2668/5055/661 2662/5071/652 2653/5056/652 -f 2666/5058/670 2667/5067/655 2659/5059/655 -f 2664/5061/671 2665/5963/654 2657/5062/654 -f 2661/5064/660 2663/5070/653 2655/5065/653 -f 2667/5067/655 2668/5055/661 2660/5057/661 -f 2665/5068/654 2666/5058/670 2658/5060/670 -f 2663/5070/653 2664/5061/671 2656/5063/671 -f 2662/5071/652 2661/5064/660 2654/5066/660 -f 2683/5072/661 2699/5079/661 2698/5073/673 -f 2676/5075/674 2692/5081/674 2691/5076/671 -f 2684/5078/675 2700/5085/675 2699/5079/661 -f 2677/5080/654 2693/5964/654 2692/5081/674 -f 2670/5082/676 2686/5090/676 2685/5083/652 -f 2669/5084/652 2685/5083/652 2700/5085/675 -f 2678/5086/677 2694/5092/677 2693/5087/654 -f 2671/5089/660 2687/5094/660 2686/5090/676 -f 2679/5091/670 2695/5096/670 2694/5092/677 -f 2672/5093/678 2688/5098/678 2687/5094/660 -f 2680/5095/679 2696/5100/679 2695/5096/670 -f 2673/5097/653 2689/5102/653 2688/5098/678 -f 2681/5099/655 2697/5103/655 2696/5100/679 -f 2674/5101/680 2690/5104/680 2689/5102/653 -f 2682/5074/673 2698/5073/673 2697/5103/655 -f 2675/5077/671 2691/5076/671 2690/5104/680 -f 2765/5105/655 2797/5164/686 2798/5106/681 -f 2778/5108/671 2810/5965/688 2811/5109/682 -f 2753/5111/660 2785/5146/685 2791/5112/683 -f 2779/5110/654 2811/5109/682 2812/5114/684 -f 2768/5116/652 2800/5966/656 2793/5117/685 -f 2791/5112/683 2786/5967/688 2754/5119/671 -f 2780/5115/670 2812/5114/684 2813/5120/686 -f 2798/5106/681 2800/5968/656 2768/5122/652 -f 2754/5119/671 2786/5967/688 2787/5123/682 -f 2781/5121/655 2813/5120/686 2814/5125/681 -f 2769/5127/660 2801/5155/685 2807/5128/683 -f 2755/5124/654 2787/5123/682 2788/5130/684 -f 2784/5132/652 2816/5969/656 2809/5133/685 -f 2807/5128/683 2802/5970/688 2770/5135/671 -f 2756/5131/670 2788/5130/684 2789/5136/686 -f 2814/5125/681 2816/5971/656 2784/5138/652 -f 2770/5135/671 2802/5970/688 2803/5139/682 -f 2757/5137/655 2789/5136/686 2790/5141/681 -f 2771/5140/654 2803/5139/682 2804/5143/684 -f 2760/5145/652 2792/5972/656 2785/5146/685 -f 2772/5144/670 2804/5143/684 2805/5147/686 -f 2790/5141/681 2792/5973/656 2760/5149/652 -f 2773/5148/655 2805/5147/686 2806/5150/681 -f 2761/5118/660 2793/5117/685 2799/5152/683 -f 2776/5154/652 2808/5974/656 2801/5155/685 -f 2799/5152/683 2794/5975/688 2762/5156/671 -f 2806/5150/681 2808/5976/656 2776/5157/652 -f 2762/5156/671 2794/5975/688 2795/5158/682 -f 2777/5134/660 2809/5133/685 2815/5160/683 -f 2763/5159/654 2795/5158/682 2796/5162/684 -f 2815/5160/683 2810/5965/688 2778/5108/671 -f 2764/5163/670 2796/5162/684 2797/5164/686 -f 2796/5165/684 2827/5183/692 2828/5166/687 -f 2786/5168/688 2818/5184/690 2819/5169/689 -f 2799/5170/683 2830/5186/693 2825/5171/690 -f 2798/5173/681 2797/5167/686 2828/5166/687 -f 2788/5175/684 2787/5123/682 2819/5169/689 -f 2795/5158/682 2794/5172/688 2825/5171/690 -f 2785/5178/685 2817/5194/694 2823/5179/693 -f 2788/5175/684 2820/5176/692 2821/5181/687 -f 2796/5165/684 2795/5158/682 2826/5177/689 -f 2791/5180/683 2823/5179/693 2818/5184/690 -f 2793/5185/685 2824/5189/694 2830/5186/693 -f 2789/5182/686 2821/5181/687 2822/5187/691 -f 2824/5189/694 2838/5248/701 2844/5190/695 -f 2819/5169/689 2833/5202/700 2834/5191/696 -f 2828/5166/687 2827/5183/692 2841/5192/696 -f 2817/5194/694 2831/5251/701 2837/5195/695 -f 2830/5186/693 2844/5190/695 2839/5196/698 -f 2821/5181/687 2820/5176/692 2834/5191/696 -f 2829/5174/691 2828/5166/687 2842/5193/697 -f 2823/5179/693 2837/5195/695 2832/5199/698 -f 2825/5171/690 2839/5196/698 2840/5200/700 -f 2822/5187/691 2821/5181/687 2835/5197/697 -f 2819/5169/689 2818/5184/690 2832/5199/698 -f 2826/5177/689 2840/5200/700 2841/5192/696 -f 2814/5203/681 2813/5225/686 2856/5204/687 -f 2804/5206/684 2803/5139/682 2847/5207/689 -f 2810/5209/688 2853/5226/690 2854/5210/689 -f 2807/5211/683 2801/5243/685 2845/5212/694 -f 2805/5214/686 2804/5206/684 2848/5208/692 -f 2811/5109/682 2854/5210/689 2855/5216/692 -f 2807/5211/683 2851/5213/693 2846/5218/690 -f 2815/5220/683 2809/5239/685 2852/5221/694 -f 2805/5214/686 2849/5215/687 2850/5223/691 -f 2813/5225/686 2812/5217/684 2855/5216/692 -f 2802/5219/688 2846/5218/690 2847/5207/689 -f 2815/5220/683 2858/5222/693 2853/5226/690 -f 2850/5223/691 2849/5215/687 2863/5227/697 -f 2847/5207/689 2846/5218/690 2860/5229/698 -f 2854/5210/689 2868/5238/700 2869/5231/696 -f 2852/5221/694 2866/5241/701 2872/5232/695 -f 2847/5207/689 2861/5230/700 2862/5233/696 -f 2855/5216/692 2869/5231/696 2870/5234/697 -f 2845/5212/694 2859/5245/701 2865/5235/695 -f 2858/5222/693 2872/5232/695 2867/5236/698 -f 2848/5208/692 2862/5233/696 2863/5227/697 -f 2856/5204/687 2870/5234/697 2871/5237/699 -f 2846/5218/690 2851/5213/693 2865/5235/695 -f 2854/5210/689 2853/5226/690 2867/5236/698 -f 2842/5253/697 2888/5314/670 2889/5254/702 -f 2859/5256/701 2891/5282/664 2897/5257/653 -f 2866/5259/701 2816/5977/656 2876/5260/703 -f 2836/5262/699 2882/5293/662 2873/5263/658 -f 2865/5258/695 2897/5257/653 2892/5265/663 -f 2831/5267/701 2877/5316/664 2883/5268/653 -f 2861/5230/700 2860/5266/698 2892/5265/663 -f 2871/5271/699 2903/5313/702 2876/5272/703 -f 2837/5269/695 2883/5268/653 2878/5274/663 -f 2861/5230/700 2893/5270/659 2894/5276/665 -f 2832/5275/698 2878/5274/663 2879/5278/659 -f 2862/5277/696 2894/5276/665 2895/5279/655 -f 2859/5256/701 2808/5978/656 2875/5281/658 -f 2833/5202/700 2879/5278/659 2880/5283/665 -f 2864/5285/699 2863/5280/697 2895/5279/655 -f 2834/5284/696 2880/5283/665 2881/5287/655 -f 2866/5259/701 2898/5261/704 2904/5289/705 -f 2864/5285/699 2896/5286/662 2875/5291/658 -f 2836/5262/699 2835/5288/697 2881/5287/655 -f 2872/5290/695 2904/5289/705 2899/5294/706 -f 2838/5296/701 2884/5301/704 2890/5297/705 -f 2868/5238/700 2867/5295/698 2899/5294/706 -f 2800/5300/656 2874/5979/703 2884/5301/704 -f 2844/5298/695 2890/5297/705 2885/5302/706 -f 2868/5238/700 2900/5299/707 2901/5304/708 -f 2839/5303/698 2885/5302/706 2886/5306/707 -f 2869/5305/696 2901/5304/708 2902/5307/670 -f 2843/5255/699 2889/5254/702 2874/5309/703 -f 2840/5200/700 2886/5306/707 2887/5311/708 -f 2871/5271/699 2870/5308/697 2902/5307/670 -f 2841/5312/696 2887/5311/708 2888/5314/670 -f 2792/5315/656 2873/5980/658 2877/5316/664 -f 2874/5317/703 2889/5356/702 2911/5318/709 -f 2904/5289/705 2918/5338/660 2914/5320/711 -f 2886/5322/707 2909/5342/714 2910/5323/712 -f 2890/5297/705 2884/5337/704 2907/5325/713 -f 2900/5327/707 2899/5321/706 2914/5320/711 -f 2890/5297/705 2912/5326/660 2908/5329/711 -f 2898/5331/704 2876/5981/703 2906/5332/710 -f 2900/5327/707 2915/5328/714 2916/5334/712 -f 2874/5336/703 2905/5982/710 2907/5325/713 -f 2898/5331/704 2913/5333/713 2918/5338/660 -f 2876/5339/703 2903/5360/702 2917/5340/709 -f 2885/5330/706 2908/5329/711 2909/5342/714 -f 2909/5342/714 2908/5329/711 2922/5343/715 -f 2917/5340/709 2931/5361/721 2920/5345/717 -f 2915/5328/714 2914/5320/711 2928/5346/715 -f 2910/5323/712 2909/5342/714 2923/5344/716 -f 2907/5325/713 2905/5982/710 2919/5349/717 -f 2907/5325/713 2921/5350/719 2926/5351/720 -f 2916/5334/712 2915/5328/714 2929/5347/716 -f 2913/5333/713 2927/5355/719 2932/5353/720 -f 2911/5318/709 2925/5358/721 2919/5354/717 -f 2908/5329/711 2912/5326/660 2926/5351/720 -f 2906/5332/710 2920/5983/717 2927/5355/719 -f 2918/5338/660 2932/5353/720 2928/5346/715 -f 2927/5362/719 2943/5378/656 2948/5363/652 -f 2888/5364/670 2933/5372/654 2941/5365/657 -f 2932/5353/720 2948/5363/652 2944/5367/672 -f 2929/5369/716 2928/5368/715 2944/5367/672 -f 2924/5371/718 2940/5390/689 2933/5372/654 -f 2929/5369/716 2945/5370/659 2946/5373/689 -f 2921/5375/719 2937/5389/656 2942/5376/652 -f 2920/5377/717 2936/5984/658 2943/5378/656 -f 2926/5351/720 2942/5376/652 2938/5379/672 -f 2930/5374/718 2946/5373/689 2934/5381/654 -f 2931/5383/721 2947/5391/657 2936/5384/658 -f 2922/5380/715 2938/5379/672 2939/5386/659 -f 2919/5388/717 2935/5985/658 2937/5389/656 -f 2923/5387/716 2939/5386/659 2940/5390/689 -f 2902/5382/670 2934/5381/654 2947/5391/657 -f 2925/5366/721 2941/5365/657 2935/5392/658 -f 3243/5394/722 3250/5986/722 3249/5395/664 -f 3241/5397/653 3248/5403/653 3247/5398/663 -f 3245/5400/665 3252/5407/665 3251/5401/723 -f 3242/5396/664 3249/5395/664 3248/5403/653 -f 3240/5399/663 3247/5398/663 3246/5404/659 -f 3239/5406/659 3246/5987/659 3252/5407/665 -f 3257/5408/722 3262/5988/722 3261/5409/664 -f 3255/5411/653 3260/5414/653 3259/5412/663 -f 3256/5410/664 3261/5409/664 3260/5414/653 -f 3254/5413/663 3259/5412/663 3258/5415/724 -f 3267/5417/722 3272/5989/722 3271/5418/664 -f 3265/5420/653 3270/5423/653 3269/5421/663 -f 3266/5419/664 3271/5418/664 3270/5423/653 -f 3264/5422/663 3269/5421/663 3268/5424/724 -f 3277/5426/722 3282/5990/722 3281/5427/664 -f 3275/5429/653 3280/5432/653 3279/5430/663 -f 3276/5428/664 3281/5427/664 3280/5432/653 -f 3274/5431/663 3279/5430/663 3278/5433/724 -f 3287/5435/722 3292/5991/722 3291/5436/664 -f 3285/5438/653 3290/5441/653 3289/5439/663 -f 3286/5437/664 3291/5436/664 3290/5441/653 -f 3284/5440/663 3289/5439/663 3288/5442/724 -f 3299/5444/725 3306/5992/725 3305/5445/662 -f 3297/5447/658 3304/5453/658 3303/5448/664 -f 3295/5450/653 3302/5454/653 3301/5451/663 -f 3298/5446/662 3305/5445/662 3304/5453/658 -f 3296/5449/664 3303/5448/664 3302/5454/653 -f 3294/5452/663 3301/5451/663 3300/5455/724 -f 3312/5457/655 3319/5464/655 3318/5458/662 -f 3309/5460/726 3316/5993/726 3315/5461/663 -f 3313/5463/665 3320/5470/665 3319/5464/655 -f 3311/5459/662 3318/5458/662 3317/5465/727 -f 3308/5462/663 3315/5461/663 3314/5467/659 -f 3307/5469/659 3314/5994/659 3320/5470/665 -f 3324/5471/655 3329/5475/655 3328/5472/662 -f 3325/5474/665 3330/5479/665 3329/5475/655 -f 3323/5473/662 3328/5472/662 3327/5476/727 -f 3321/5478/728 3326/5995/728 3330/5479/665 -f 3334/5480/655 3339/5484/655 3338/5481/662 -f 3335/5483/665 3340/5488/665 3339/5484/655 -f 3333/5482/662 3338/5481/662 3337/5485/727 -f 3331/5487/728 3336/5996/728 3340/5488/665 -f 3344/5489/655 3349/5493/655 3348/5490/662 -f 3345/5492/665 3350/5497/665 3349/5493/655 -f 3343/5491/662 3348/5490/662 3347/5494/727 -f 3341/5496/728 3346/5997/728 3350/5497/665 -f 3354/5498/655 3359/5502/655 3358/5499/662 -f 3355/5501/665 3360/5506/665 3359/5502/655 -f 3353/5500/662 3358/5499/662 3357/5503/727 -f 3351/5505/728 3356/5998/728 3360/5506/665 -f 3366/5507/655 3373/5514/655 3372/5508/662 -f 3364/5510/658 3371/5515/658 3370/5511/664 -f 3367/5513/665 3374/5519/665 3373/5514/655 -f 3365/5509/662 3372/5508/662 3371/5515/658 -f 3363/5512/664 3370/5511/664 3369/5516/729 -f 3361/5518/728 3368/5999/728 3374/5519/665 -f 3377/5520/726 3382/6000/726 3381/5521/663 -f 3379/5523/665 3384/5529/665 3383/5524/723 -f 3376/5522/663 3381/5521/663 3380/5526/659 -f 3375/5528/659 3380/6001/659 3384/5529/665 -f 3389/5530/725 3394/6002/725 3393/5531/662 -f 3387/5533/658 3392/5536/658 3391/5534/664 -f 3388/5532/662 3393/5531/662 3392/5536/658 -f 3386/5535/664 3391/5534/664 3390/5537/729 -f 3397/5539/726 3402/6003/726 3401/5540/663 -f 3399/5542/665 3404/5548/665 3403/5543/723 -f 3396/5541/663 3401/5540/663 3400/5545/659 -f 3395/5547/659 3400/6004/659 3404/5548/665 -f 3409/5549/725 3414/6005/725 3413/5550/662 -f 3407/5552/658 3412/5555/658 3411/5553/664 -f 3408/5551/662 3413/5550/662 3412/5555/658 -f 3406/5554/664 3411/5553/664 3410/5556/729 -f 3417/5558/726 3422/6006/726 3421/5559/663 -f 3419/5561/665 3424/5567/665 3423/5562/723 -f 3416/5560/663 3421/5559/663 3420/5564/659 -f 3415/5566/659 3420/6007/659 3424/5567/665 -f 3429/5568/725 3434/6008/725 3433/5569/662 -f 3427/5571/658 3432/5574/658 3431/5572/664 -f 3428/5570/662 3433/5569/662 3432/5574/658 -f 3426/5573/664 3431/5572/664 3430/5575/729 -f 3437/5577/726 3442/6009/726 3441/5578/663 -f 3439/5580/665 3444/5586/665 3443/5581/723 -f 3436/5579/663 3441/5578/663 3440/5583/659 -f 3435/5585/659 3440/6010/659 3444/5586/665 -f 3449/5587/725 3454/6011/725 3453/5588/662 -f 3447/5590/658 3452/5593/658 3451/5591/664 -f 3448/5589/662 3453/5588/662 3452/5593/658 -f 3446/5592/664 3451/5591/664 3450/5594/729 -f 3645/5596/661 3661/5603/661 3660/5597/673 -f 3638/5599/674 3654/5605/674 3653/5600/671 -f 3646/5602/675 3662/5609/675 3661/5603/661 -f 3639/5604/654 3655/6012/654 3654/5605/674 -f 3632/5606/676 3648/5614/676 3647/5607/652 -f 3631/5608/652 3647/5607/652 3662/5609/675 -f 3640/5610/677 3656/5616/677 3655/5611/654 -f 3633/5613/660 3649/5618/660 3648/5614/676 -f 3641/5615/670 3657/5620/670 3656/5616/677 -f 3634/5617/678 3650/5622/678 3649/5618/660 -f 3642/5619/679 3658/5624/679 3657/5620/670 -f 3635/5621/653 3651/5626/653 3650/5622/678 -f 3643/5623/655 3659/5627/655 3658/5624/679 -f 3636/5625/680 3652/5628/680 3651/5626/653 -f 3644/5598/673 3660/5597/673 3659/5627/655 -f 3637/5601/671 3653/5600/671 3652/5628/680 -f 3826/5629/661 3820/5645/652 3811/5630/652 -f 3824/5632/670 3825/5641/655 3817/5633/655 -f 3822/5635/671 3823/6013/654 3815/5636/654 -f 3819/5638/660 3821/5644/653 3813/5639/653 -f 3825/5641/655 3826/5629/661 3818/5631/661 -f 3823/5642/654 3824/5632/670 3816/5634/670 -f 3821/5644/653 3822/5635/671 3814/5637/671 -f 3820/5645/652 3819/5638/660 3812/5640/660 -f 3842/5646/661 3836/5662/652 3827/5647/652 -f 3840/5649/670 3841/5658/655 3833/5650/655 -f 3838/5652/671 3839/6014/654 3831/5653/654 -f 3835/5655/660 3837/5661/653 3829/5656/653 -f 3841/5658/655 3842/5646/661 3834/5648/661 -f 3839/5659/654 3840/5649/670 3832/5651/670 -f 3837/5661/653 3838/5652/671 3830/5654/671 -f 3836/5662/652 3835/5655/660 3828/5657/660 -f 3858/5663/661 3852/5679/652 3843/5664/652 -f 3856/5666/670 3857/5675/655 3849/5667/655 -f 3854/5669/671 3855/6015/654 3847/5670/654 -f 3851/5672/660 3853/5678/653 3845/5673/653 -f 3857/5675/655 3858/5663/661 3850/5665/661 -f 3855/5676/654 3856/5666/670 3848/5668/670 -f 3853/5678/653 3854/5669/671 3846/5671/671 -f 3852/5679/652 3851/5672/660 3844/5674/660 -f 3904/5680/685 3903/5739/683 3871/5681/653 -f 3917/5683/682 3916/6016/684 3884/5684/670 -f 3897/5686/686 3891/5720/681 3859/5687/661 -f 3918/5689/688 3917/5683/682 3885/5685/654 -f 3899/5691/681 3906/6017/656 3874/5692/652 -f 3860/5694/670 3892/6018/684 3897/5686/686 -f 3919/5695/683 3918/5689/688 3886/5690/671 -f 3874/5697/652 3906/6019/656 3904/5680/685 -f 3893/5698/682 3892/6018/684 3860/5694/670 -f 3920/5700/685 3919/5695/683 3887/5696/653 -f 3913/5702/686 3907/5729/681 3875/5703/661 -f 3894/5705/688 3893/5698/682 3861/5699/654 -f 3915/5707/681 3922/6020/656 3890/5708/652 -f 3876/5710/670 3908/6021/684 3913/5702/686 -f 3895/5711/683 3894/5705/688 3862/5706/671 -f 3890/5713/652 3922/6022/656 3920/5700/685 -f 3909/5714/682 3908/6021/684 3876/5710/670 -f 3896/5716/685 3895/5711/683 3863/5712/653 -f 3910/5718/688 3909/5714/682 3877/5715/654 -f 3891/5720/681 3898/6023/656 3866/5721/652 -f 3911/5722/683 3910/5718/688 3878/5719/671 -f 3866/5724/652 3898/6024/656 3896/5716/685 -f 3912/5725/685 3911/5722/683 3879/5723/653 -f 3905/5727/686 3899/5691/681 3867/5693/661 -f 3907/5729/681 3914/6025/656 3882/5730/652 -f 3868/5731/670 3900/6026/684 3905/5727/686 -f 3882/5732/652 3914/6027/656 3912/5725/685 -f 3901/5733/682 3900/6026/684 3868/5731/670 -f 3921/5735/686 3915/5707/681 3883/5709/661 -f 3902/5737/688 3901/5733/682 3869/5734/654 -f 3884/5684/670 3916/6016/684 3921/5735/686 -f 3903/5739/683 3902/5737/688 3870/5738/671 -f 3903/5740/683 3934/5764/693 3933/5741/690 -f 3925/5743/689 3924/5757/692 3892/5744/684 -f 3900/5745/684 3931/5769/692 3936/5746/687 -f 3935/5748/694 3934/5764/693 3903/5740/683 -f 3894/5750/688 3926/5756/690 3925/5743/689 -f 3932/5751/689 3931/5769/692 3900/5745/684 -f 3897/5752/686 3929/5767/687 3923/5753/691 -f 3895/5755/683 3927/5770/693 3926/5756/690 -f 3902/5742/688 3933/5741/690 3932/5751/689 -f 3924/5757/692 3929/5767/687 3897/5752/686 -f 3905/5747/686 3936/5746/687 3930/5758/691 -f 3928/5760/694 3927/5770/693 3895/5755/683 -f 3950/5762/697 3944/5817/699 3930/5758/691 -f 3940/5763/698 3939/5850/700 3925/5743/689 -f 3934/5764/693 3948/5771/695 3947/5765/698 -f 3943/5766/697 3937/5821/699 3923/5753/691 -f 3945/5768/696 3950/5762/697 3936/5746/687 -f 3927/5770/693 3941/5773/695 3940/5763/698 -f 3935/5748/694 3949/5819/701 3948/5771/695 -f 3938/5772/696 3943/5766/697 3929/5767/687 -f 3932/5751/689 3946/5878/700 3945/5768/696 -f 3928/5760/694 3942/5823/701 3941/5773/695 -f 3925/5743/689 3939/5850/700 3938/5772/696 -f 3947/5765/698 3946/5878/700 3932/5751/689 -f 3963/5774/694 3962/5802/693 3919/5775/683 -f 3954/5777/690 3953/5794/689 3909/5714/682 -f 3960/5779/689 3959/5806/692 3916/5780/684 -f 3913/5781/686 3957/5804/687 3951/5782/691 -f 3911/5784/683 3955/5797/693 3954/5777/690 -f 3961/5785/690 3960/5779/689 3917/5683/682 -f 3952/5787/692 3957/5804/687 3913/5781/686 -f 3921/5789/686 3964/5795/687 3958/5790/691 -f 3956/5792/694 3955/5797/693 3911/5784/683 -f 3919/5775/683 3962/5802/693 3961/5785/690 -f 3953/5794/689 3952/5787/692 3908/5788/684 -f 3916/5780/684 3959/5806/692 3964/5795/687 -f 3956/5792/694 3970/5815/701 3969/5796/695 -f 3953/5794/689 3967/5841/700 3966/5798/696 -f 3975/5799/698 3974/5870/700 3960/5779/689 -f 3978/5800/697 3972/5809/699 3958/5790/691 -f 3968/5801/698 3967/5841/700 3953/5794/689 -f 3962/5802/693 3976/5807/695 3975/5799/698 -f 3971/5803/697 3965/5813/699 3951/5782/691 -f 3973/5805/696 3978/5800/697 3964/5795/687 -f 3955/5797/693 3969/5796/695 3968/5801/698 -f 3963/5774/694 3977/5811/701 3976/5807/695 -f 3966/5798/696 3971/5803/697 3957/5804/687 -f 3960/5779/689 3974/5870/700 3973/5805/696 -f 3995/5824/730 3994/5885/671 3948/5825/695 -f 4003/5827/655 3997/6028/662 3965/5828/699 -f 3972/5830/699 4004/6029/734 3982/5831/731 -f 3979/5833/658 3988/5864/664 3942/5834/701 -f 3998/5836/665 4003/5827/655 3971/5829/697 -f 3989/5838/655 3983/5886/662 3937/5839/699 -f 3967/5841/700 3999/6030/659 3998/5836/665 -f 3982/5842/731 4009/6031/730 3977/5843/701 -f 3984/5845/665 3989/5838/655 3943/5840/697 -f 4000/5847/663 3999/6030/659 3967/5841/700 -f 3985/5849/659 3984/5845/665 3938/5846/696 -f 4001/5851/653 4000/5847/663 3968/5848/698 -f 3965/5828/699 3997/6028/662 3981/5853/658 -f 3986/5855/663 3985/5849/659 3939/5850/700 -f 3970/5857/701 4002/6032/664 4001/5851/653 -f 3987/5858/653 3986/5855/663 3940/5856/698 -f 4010/5860/732 4004/6029/734 3972/5830/699 -f 3981/5862/658 4002/6032/664 3970/5857/701 -f 3988/5864/664 3987/5858/653 3941/5859/695 -f 4005/5865/733 4010/5860/732 3978/5861/697 -f 3996/5867/732 3990/5871/734 3944/5868/699 -f 3974/5870/700 4006/6033/736 4005/5865/733 -f 3990/5871/734 3980/6034/731 3906/5872/656 -f 3991/5873/733 3996/5867/732 3950/5869/697 -f 4007/5875/735 4006/6033/736 3974/5870/700 -f 3992/5877/736 3991/5873/733 3945/5874/696 -f 4008/5879/671 4007/5875/735 3975/5876/698 -f 3980/5881/731 3995/5824/730 3949/5826/701 -f 3993/5883/735 3992/5877/736 3946/5878/700 -f 3977/5843/701 4009/6031/730 4008/5879/671 -f 3994/5885/671 3993/5883/735 3947/5884/698 -f 3983/5886/662 3979/6035/658 3898/5887/656 -f 3980/5888/731 4011/5925/741 4017/5889/737 -f 4020/5891/738 4024/5907/661 4010/5860/732 -f 4016/5893/739 4015/5911/742 3992/5894/736 -f 3996/5867/732 4018/5920/661 4013/5896/740 -f 4006/5898/736 4021/5915/742 4020/5891/738 -f 4014/5899/738 4018/5920/661 3996/5867/732 -f 4004/5901/734 4019/5923/740 4012/5902/741 -f 4022/5904/739 4021/5915/742 4006/5898/736 -f 4013/5896/740 4011/5918/741 3980/5906/731 -f 4024/5907/661 4019/5923/740 4004/5901/734 -f 3982/5908/731 4012/5914/741 4023/5909/737 -f 4015/5911/742 4014/5899/738 3991/5900/733 -f 4029/5912/743 4028/6036/745 4014/5899/738 -f 4026/5913/744 4037/5931/749 4023/5909/737 -f 4021/5915/742 4035/6037/743 4034/5916/745 -f 4016/5893/739 4030/5929/747 4029/5912/743 -f 4013/5896/740 4027/6038/748 4025/5917/744 -f 4032/5919/746 4027/6038/748 4013/5896/740 -f 4036/5921/747 4035/6037/743 4021/5915/742 -f 4038/5922/746 4033/5926/748 4019/5923/740 -f 4025/5924/744 4031/5928/749 4017/5889/737 -f 4014/5899/738 4028/6036/745 4032/5919/746 -f 4033/5926/748 4026/6039/744 4012/5902/741 -f 4034/5916/745 4038/5922/746 4024/5907/661 -f 4054/5932/652 4049/5946/656 4033/5933/748 -f 4047/5934/657 4039/5940/654 3994/5935/671 -f 4050/5937/672 4054/5932/652 4038/5922/746 -f 4035/5939/743 4051/6040/659 4050/5937/672 -f 4039/5940/654 4046/5959/689 4030/5941/747 -f 4052/5942/689 4051/6040/659 4035/5939/743 -f 4048/5944/652 4043/5957/656 4027/5945/748 -f 4049/5946/656 4042/6041/658 4026/5947/744 -f 4044/5948/672 4048/5944/652 4032/5919/746 -f 4040/5950/654 4052/5942/689 4036/5943/747 -f 4042/5952/658 4053/5960/657 4037/5953/749 -f 4045/5955/659 4044/5948/672 4028/5949/745 -f 4043/5957/656 4041/6042/658 4025/5958/744 -f 4046/5959/689 4045/5955/659 4029/5956/743 -f 4053/5960/657 4040/5950/654 4008/5951/671 -f 4041/5961/658 4047/5934/657 4031/5936/749 +f 3084/5529/661 3069/5530/652 3076/5531/661 +f 3082/5532/670 3075/5533/655 3074/5534/670 +f 3080/5535/671 3073/5536/654 3072/5537/671 +f 3077/5538/660 3071/5539/653 3070/5540/660 +f 3083/5541/655 3076/5531/661 3075/5533/655 +f 3081/5542/654 3074/5534/670 3073/5543/654 +f 3079/5544/653 3072/5537/671 3071/5539/653 +f 3078/5545/652 3070/5540/660 3069/5530/652 +f 3099/5546/661 3114/5547/673 3098/5548/673 +f 3092/5549/674 3107/5550/671 3091/5551/671 +f 3100/5552/675 3115/5553/661 3099/5546/661 +f 3093/5554/654 3108/5555/674 3092/5549/674 +f 3086/5556/676 3101/5557/652 3085/5558/652 +f 3085/5558/652 3116/5559/675 3100/5552/675 +f 3094/5560/677 3109/5561/654 3093/5562/654 +f 3087/5563/660 3102/5564/676 3086/5556/676 +f 3095/5565/670 3110/5566/677 3094/5560/677 +f 3088/5567/678 3103/5568/660 3087/5563/660 +f 3096/5569/679 3111/5570/670 3095/5565/670 +f 3089/5571/653 3104/5572/678 3088/5567/678 +f 3097/5573/655 3112/5574/679 3096/5569/679 +f 3090/5575/680 3105/5576/653 3089/5571/653 +f 3098/5548/673 3113/5577/655 3097/5573/655 +f 3091/5551/671 3106/5578/680 3090/5575/680 +f 3181/5579/655 3214/5580/681 3182/5581/661 +f 3194/5582/671 3227/5583/682 3195/5584/654 +f 3169/5585/660 3207/5586/683 3175/5587/653 +f 3195/5584/654 3228/5588/684 3196/5589/670 +f 3184/5590/652 3209/5591/685 3177/5592/660 +f 3207/5586/683 3170/5593/671 3175/5587/653 +f 3196/5589/670 3229/5594/686 3197/5595/655 +f 3214/5580/681 3184/5596/652 3182/5581/661 +f 3170/5593/671 3203/5597/682 3171/5598/654 +f 3197/5595/655 3230/5599/681 3198/5600/661 +f 3185/5601/660 3223/5602/683 3191/5603/653 +f 3171/5598/654 3204/5604/684 3172/5605/670 +f 3200/5606/652 3225/5607/685 3193/5608/660 +f 3223/5602/683 3186/5609/671 3191/5603/653 +f 3172/5605/670 3205/5610/686 3173/5611/655 +f 3230/5599/681 3200/5612/652 3198/5600/661 +f 3186/5609/671 3219/5613/682 3187/5614/654 +f 3173/5611/655 3206/5615/681 3174/5616/661 +f 3187/5614/654 3220/5617/684 3188/5618/670 +f 3176/5619/652 3201/5620/685 3169/5585/660 +f 3188/5618/670 3221/5621/686 3189/5622/655 +f 3206/5615/681 3176/5623/652 3174/5616/661 +f 3189/5622/655 3222/5624/681 3190/5625/661 +f 3177/5592/660 3215/5626/683 3183/5627/653 +f 3192/5628/652 3217/5629/685 3185/5601/660 +f 3215/5626/683 3178/5630/671 3183/5627/653 +f 3222/5624/681 3192/5631/652 3190/5625/661 +f 3178/5630/671 3211/5632/682 3179/5633/654 +f 3193/5608/660 3231/5634/683 3199/5635/653 +f 3179/5633/654 3212/5636/684 3180/5637/670 +f 3231/5634/683 3194/5582/671 3199/5635/653 +f 3180/5637/670 3213/5638/686 3181/5579/655 +f 3212/5639/684 3244/5640/687 3213/5641/686 +f 3202/5642/688 3235/5643/689 3203/5597/682 +f 3215/5644/683 3241/5645/690 3210/5646/688 +f 3214/5647/681 3244/5640/687 3245/5648/691 +f 3204/5649/684 3235/5643/689 3236/5650/692 +f 3211/5632/682 3241/5645/690 3242/5651/689 +f 3201/5652/685 3239/5653/693 3207/5654/683 +f 3204/5649/684 3237/5655/687 3205/5656/686 +f 3212/5639/684 3242/5651/689 3243/5657/692 +f 3207/5654/683 3234/5658/690 3202/5642/688 +f 3209/5659/685 3246/5660/693 3215/5644/683 +f 3205/5656/686 3238/5661/691 3206/5662/681 +f 3240/5663/694 3260/5664/695 3246/5660/693 +f 3235/5643/689 3250/5665/696 3236/5650/692 +f 3244/5640/687 3257/5666/696 3258/5667/697 +f 3233/5668/694 3253/5669/695 3239/5653/693 +f 3246/5660/693 3255/5670/698 3241/5645/690 +f 3237/5655/687 3250/5665/696 3251/5671/697 +f 3245/5648/691 3258/5667/697 3259/5672/699 +f 3239/5653/693 3248/5673/698 3234/5658/690 +f 3241/5645/690 3256/5674/700 3242/5651/689 +f 3238/5661/691 3251/5671/697 3252/5675/699 +f 3235/5643/689 3248/5673/698 3249/5676/700 +f 3242/5651/689 3257/5666/696 3243/5657/692 +f 3230/5677/681 3272/5678/687 3273/5679/691 +f 3220/5680/684 3263/5681/689 3264/5682/692 +f 3226/5683/688 3270/5684/689 3227/5583/682 +f 3223/5685/683 3261/5686/694 3267/5687/693 +f 3221/5688/686 3264/5682/692 3265/5689/687 +f 3227/5583/682 3271/5690/692 3228/5691/684 +f 3223/5685/683 3262/5692/690 3218/5693/688 +f 3231/5694/683 3268/5695/694 3274/5696/693 +f 3221/5688/686 3266/5697/691 3222/5698/681 +f 3229/5699/686 3271/5690/692 3272/5678/687 +f 3218/5693/688 3263/5681/689 3219/5613/682 +f 3231/5694/683 3269/5700/690 3226/5683/688 +f 3266/5697/691 3279/5701/697 3280/5702/699 +f 3263/5681/689 3276/5703/698 3277/5704/700 +f 3270/5684/689 3285/5705/696 3271/5690/692 +f 3268/5695/694 3288/5706/695 3274/5696/693 +f 3263/5681/689 3278/5707/696 3264/5682/692 +f 3271/5690/692 3286/5708/697 3272/5678/687 +f 3261/5686/694 3281/5709/695 3267/5687/693 +f 3274/5696/693 3283/5710/698 3269/5700/690 +f 3264/5682/692 3279/5701/697 3265/5689/687 +f 3272/5678/687 3287/5711/699 3273/5679/691 +f 3262/5692/690 3281/5709/695 3276/5703/698 +f 3270/5684/689 3283/5710/698 3284/5712/700 +f 3225/5713/685 3232/5714/656 3268/5695/694 +f 3268/5695/694 3232/5714/656 3282/5715/701 +f 3230/5677/681 3273/5679/691 3232/5716/656 +f 3273/5679/691 3287/5711/699 3232/5716/656 +f 3217/5717/685 3224/5718/656 3261/5686/694 +f 3261/5686/694 3224/5718/656 3275/5719/701 +f 3222/5698/681 3266/5697/691 3224/5720/656 +f 3266/5697/691 3280/5702/699 3224/5720/656 +f 3209/5659/685 3216/5721/656 3240/5663/694 +f 3240/5663/694 3216/5721/656 3254/5722/701 +f 3214/5647/681 3245/5648/691 3216/5723/656 +f 3245/5648/691 3259/5672/699 3216/5723/656 +f 3201/5652/685 3208/5724/656 3233/5668/694 +f 3233/5668/694 3208/5724/656 3247/5725/701 +f 3206/5662/681 3238/5661/691 3208/5726/656 +f 3238/5661/691 3252/5675/699 3208/5726/656 +f 3258/5727/697 3305/5728/702 3259/5729/699 +f 3275/5730/701 3313/5731/653 3281/5732/695 +f 3282/5733/701 3292/5734/703 3314/5735/704 +f 3252/5736/699 3289/5737/658 3208/5738/656 +f 3281/5732/695 3308/5739/663 3276/5740/698 +f 3247/5741/701 3299/5742/653 3253/5743/695 +f 3277/5704/700 3308/5739/663 3309/5744/659 +f 3287/5745/699 3292/5746/703 3232/5747/656 +f 3253/5743/695 3294/5748/663 3248/5749/698 +f 3277/5704/700 3310/5750/665 3278/5751/696 +f 3248/5749/698 3295/5752/659 3249/5676/700 +f 3278/5751/696 3311/5753/655 3279/5754/697 +f 3275/5730/701 3291/5755/658 3307/5756/664 +f 3249/5676/700 3296/5757/665 3250/5758/696 +f 3280/5759/699 3311/5753/655 3312/5760/662 +f 3250/5758/696 3297/5761/655 3251/5762/697 +f 3282/5733/701 3320/5763/705 3288/5764/695 +f 3280/5759/699 3291/5765/658 3224/5766/656 +f 3252/5736/699 3297/5761/655 3298/5767/662 +f 3288/5764/695 3315/5768/706 3283/5769/698 +f 3254/5770/701 3306/5771/705 3260/5772/695 +f 3284/5712/700 3315/5768/706 3316/5773/707 +f 3216/5774/656 3300/5775/704 3254/5770/701 +f 3260/5772/695 3301/5776/706 3255/5777/698 +f 3284/5712/700 3317/5778/708 3285/5779/696 +f 3255/5777/698 3302/5780/707 3256/5674/700 +f 3285/5779/696 3318/5781/670 3286/5782/697 +f 3259/5729/699 3290/5783/703 3216/5784/656 +f 3256/5674/700 3303/5785/708 3257/5786/696 +f 3287/5745/699 3318/5781/670 3319/5787/702 +f 3257/5786/696 3304/5788/670 3258/5727/697 +f 3208/5789/656 3293/5790/664 3247/5741/701 +f 3290/5791/703 3327/5792/709 3321/5793/710 +f 3320/5763/705 3330/5794/711 3315/5795/706 +f 3302/5796/707 3326/5797/712 3303/5798/708 +f 3306/5771/705 3323/5799/713 3328/5800/660 +f 3316/5801/707 3330/5794/711 3331/5802/714 +f 3306/5771/705 3324/5803/711 3301/5804/706 +f 3314/5805/704 3322/5806/710 3329/5807/713 +f 3316/5801/707 3332/5808/712 3317/5809/708 +f 3290/5810/703 3323/5799/713 3300/5811/704 +f 3314/5805/704 3334/5812/660 3320/5763/705 +f 3292/5813/703 3333/5814/709 3322/5815/710 +f 3301/5804/706 3325/5816/714 3302/5796/707 +f 3325/5816/714 3338/5817/715 3339/5818/716 +f 3333/5814/709 3336/5819/717 3322/5815/710 +f 3331/5802/714 3344/5820/715 3345/5821/716 +f 3326/5797/712 3339/5818/716 3340/5822/718 +f 3323/5799/713 3335/5823/717 3337/5824/719 +f 3323/5799/713 3342/5825/720 3328/5800/660 +f 3332/5808/712 3345/5821/716 3346/5826/718 +f 3329/5807/713 3348/5827/720 3334/5812/660 +f 3327/5792/709 3335/5828/717 3321/5793/710 +f 3324/5803/711 3342/5825/720 3338/5817/715 +f 3322/5806/710 3343/5829/719 3329/5807/713 +f 3334/5812/660 3344/5820/715 3330/5794/711 +f 3305/5830/702 3304/5831/670 3327/5792/709 +f 3327/5792/709 3304/5831/670 3341/5832/721 +f 3303/5798/708 3326/5797/712 3304/5831/670 +f 3326/5797/712 3340/5822/718 3304/5831/670 +f 3317/5809/708 3332/5808/712 3318/5833/670 +f 3332/5808/712 3346/5826/718 3318/5833/670 +f 3319/5834/702 3318/5833/670 3333/5814/709 +f 3333/5814/709 3318/5833/670 3347/5835/721 +f 3343/5836/719 3364/5837/652 3348/5827/720 +f 3304/5838/670 3357/5839/657 3341/5840/721 +f 3348/5827/720 3360/5841/672 3344/5842/715 +f 3345/5843/716 3360/5841/672 3361/5844/659 +f 3340/5845/718 3349/5846/654 3304/5838/670 +f 3345/5843/716 3362/5847/689 3346/5848/718 +f 3337/5849/719 3358/5850/652 3342/5825/720 +f 3336/5851/717 3359/5852/656 3343/5836/719 +f 3342/5825/720 3354/5853/672 3338/5854/715 +f 3346/5848/718 3350/5855/654 3318/5856/670 +f 3347/5857/721 3352/5858/658 3336/5859/717 +f 3338/5854/715 3355/5860/659 3339/5861/716 +f 3335/5862/717 3353/5863/656 3337/5849/719 +f 3339/5861/716 3356/5864/689 3340/5845/718 +f 3318/5856/670 3363/5865/657 3347/5857/721 +f 3341/5840/721 3351/5866/658 3335/5867/717 +f 3659/5868/722 3665/5869/664 3658/5870/664 +f 3657/5871/653 3663/5872/663 3656/5873/663 +f 3661/5874/665 3667/5875/723 3660/5876/723 +f 3658/5870/664 3664/5877/653 3657/5871/653 +f 3656/5873/663 3662/5878/659 3655/5879/659 +f 3655/5880/659 3668/5881/665 3661/5874/665 +f 3673/5882/722 3677/5883/664 3672/5884/664 +f 3671/5885/653 3675/5886/663 3670/5887/663 +f 3672/5884/664 3676/5888/653 3671/5885/653 +f 3670/5887/663 3674/5889/724 3669/5890/724 +f 3683/5891/722 3687/5892/664 3682/5893/664 +f 3681/5894/653 3685/5895/663 3680/5896/663 +f 3682/5893/664 3686/5897/653 3681/5894/653 +f 3680/5896/663 3684/5898/724 3679/5899/724 +f 3693/5900/722 3697/5901/664 3692/5902/664 +f 3691/5903/653 3695/5904/663 3690/5905/663 +f 3692/5902/664 3696/5906/653 3691/5903/653 +f 3690/5905/663 3694/5907/724 3689/5908/724 +f 3703/5909/722 3707/5910/664 3702/5911/664 +f 3701/5912/653 3705/5913/663 3700/5914/663 +f 3702/5911/664 3706/5915/653 3701/5912/653 +f 3700/5914/663 3704/5916/724 3699/5917/724 +f 3715/5918/725 3721/5919/662 3714/5920/662 +f 3713/5921/658 3719/5922/664 3712/5923/664 +f 3711/5924/653 3717/5925/663 3710/5926/663 +f 3714/5920/662 3720/5927/658 3713/5921/658 +f 3712/5923/664 3718/5928/653 3711/5924/653 +f 3710/5926/663 3716/5929/724 3709/5930/724 +f 3728/5931/655 3734/5932/662 3727/5933/662 +f 3725/5934/726 3731/5935/663 3724/5936/663 +f 3729/5937/665 3735/5938/655 3728/5931/655 +f 3727/5933/662 3733/5939/727 3726/5940/727 +f 3724/5936/663 3730/5941/659 3723/5942/659 +f 3723/5943/659 3736/5944/665 3729/5937/665 +f 3740/5945/655 3744/5946/662 3739/5947/662 +f 3741/5948/665 3745/5949/655 3740/5945/655 +f 3739/5947/662 3743/5950/727 3738/5951/727 +f 3737/5952/728 3746/5953/665 3741/5948/665 +f 3750/5954/655 3754/5955/662 3749/5956/662 +f 3751/5957/665 3755/5958/655 3750/5954/655 +f 3749/5956/662 3753/5959/727 3748/5960/727 +f 3747/5961/728 3756/5962/665 3751/5957/665 +f 3760/5963/655 3764/5964/662 3759/5965/662 +f 3761/5966/665 3765/5967/655 3760/5963/655 +f 3759/5965/662 3763/5968/727 3758/5969/727 +f 3757/5970/728 3766/5971/665 3761/5966/665 +f 3770/5972/655 3774/5973/662 3769/5974/662 +f 3771/5975/665 3775/5976/655 3770/5972/655 +f 3769/5974/662 3773/5977/727 3768/5978/727 +f 3767/5979/728 3776/5980/665 3771/5975/665 +f 3782/5981/655 3788/5982/662 3781/5983/662 +f 3780/5984/658 3786/5985/664 3779/5986/664 +f 3783/5987/665 3789/5988/655 3782/5981/655 +f 3781/5983/662 3787/5989/658 3780/5984/658 +f 3779/5986/664 3785/5990/729 3778/5991/729 +f 3777/5992/728 3790/5993/665 3783/5987/665 +f 3793/5994/726 3797/5995/663 3792/5996/663 +f 3795/5997/665 3799/5998/723 3794/5999/723 +f 3792/5996/663 3796/6000/659 3791/6001/659 +f 3791/6002/659 3800/6003/665 3795/5997/665 +f 3805/6004/725 3809/6005/662 3804/6006/662 +f 3803/6007/658 3807/6008/664 3802/6009/664 +f 3804/6006/662 3808/6010/658 3803/6007/658 +f 3802/6009/664 3806/6011/729 3801/6012/729 +f 3813/6013/726 3817/6014/663 3812/6015/663 +f 3815/6016/665 3819/6017/723 3814/6018/723 +f 3812/6015/663 3816/6019/659 3811/6020/659 +f 3811/6021/659 3820/6022/665 3815/6016/665 +f 3825/6023/725 3829/6024/662 3824/6025/662 +f 3823/6026/658 3827/6027/664 3822/6028/664 +f 3824/6025/662 3828/6029/658 3823/6026/658 +f 3822/6028/664 3826/6030/729 3821/6031/729 +f 3833/6032/726 3837/6033/663 3832/6034/663 +f 3835/6035/665 3839/6036/723 3834/6037/723 +f 3832/6034/663 3836/6038/659 3831/6039/659 +f 3831/6040/659 3840/6041/665 3835/6035/665 +f 3845/6042/725 3849/6043/662 3844/6044/662 +f 3843/6045/658 3847/6046/664 3842/6047/664 +f 3844/6044/662 3848/6048/658 3843/6045/658 +f 3842/6047/664 3846/6049/729 3841/6050/729 +f 3853/6051/726 3857/6052/663 3852/6053/663 +f 3855/6054/665 3859/6055/723 3854/6056/723 +f 3852/6053/663 3856/6057/659 3851/6058/659 +f 3851/6059/659 3860/6060/665 3855/6054/665 +f 3865/6061/725 3869/6062/662 3864/6063/662 +f 3863/6064/658 3867/6065/664 3862/6066/664 +f 3864/6063/662 3868/6067/658 3863/6064/658 +f 3862/6066/664 3866/6068/729 3861/6069/729 +f 4061/6070/661 4076/6071/673 4060/6072/673 +f 4054/6073/674 4069/6074/671 4053/6075/671 +f 4062/6076/675 4077/6077/661 4061/6070/661 +f 4055/6078/654 4070/6079/674 4054/6073/674 +f 4048/6080/676 4063/6081/652 4047/6082/652 +f 4047/6082/652 4078/6083/675 4062/6076/675 +f 4056/6084/677 4071/6085/654 4055/6086/654 +f 4049/6087/660 4064/6088/676 4048/6080/676 +f 4057/6089/670 4072/6090/677 4056/6084/677 +f 4050/6091/678 4065/6092/660 4049/6087/660 +f 4058/6093/679 4073/6094/670 4057/6089/670 +f 4051/6095/653 4066/6096/678 4050/6091/678 +f 4059/6097/655 4074/6098/679 4058/6093/679 +f 4052/6099/680 4067/6100/653 4051/6095/653 +f 4060/6072/673 4075/6101/655 4059/6097/655 +f 4053/6075/671 4068/6102/680 4052/6099/680 +f 4242/6103/661 4227/6104/652 4234/6105/661 +f 4240/6106/670 4233/6107/655 4232/6108/670 +f 4238/6109/671 4231/6110/654 4230/6111/671 +f 4235/6112/660 4229/6113/653 4228/6114/660 +f 4241/6115/655 4234/6105/661 4233/6107/655 +f 4239/6116/654 4232/6108/670 4231/6117/654 +f 4237/6118/653 4230/6111/671 4229/6113/653 +f 4236/6119/652 4228/6114/660 4227/6104/652 +f 4258/6120/661 4243/6121/652 4250/6122/661 +f 4256/6123/670 4249/6124/655 4248/6125/670 +f 4254/6126/671 4247/6127/654 4246/6128/671 +f 4251/6129/660 4245/6130/653 4244/6131/660 +f 4257/6132/655 4250/6122/661 4249/6124/655 +f 4255/6133/654 4248/6125/670 4247/6134/654 +f 4253/6135/653 4246/6128/671 4245/6130/653 +f 4252/6136/652 4244/6131/660 4243/6121/652 +f 4274/6137/661 4259/6138/652 4266/6139/661 +f 4272/6140/670 4265/6141/655 4264/6142/670 +f 4270/6143/671 4263/6144/654 4262/6145/671 +f 4267/6146/660 4261/6147/653 4260/6148/660 +f 4273/6149/655 4266/6139/661 4265/6141/655 +f 4271/6150/654 4264/6142/670 4263/6151/654 +f 4269/6152/653 4262/6145/671 4261/6147/653 +f 4268/6153/652 4260/6148/660 4259/6138/652 +f 4320/6154/685 4287/6155/653 4288/6156/660 +f 4333/6157/682 4300/6158/670 4301/6159/654 +f 4313/6160/686 4275/6161/661 4281/6162/655 +f 4334/6163/688 4301/6159/654 4302/6164/671 +f 4315/6165/681 4290/6166/652 4283/6167/661 +f 4276/6168/670 4313/6160/686 4281/6162/655 +f 4335/6169/683 4302/6164/671 4303/6170/653 +f 4290/6171/652 4320/6154/685 4288/6156/660 +f 4309/6172/682 4276/6168/670 4277/6173/654 +f 4336/6174/685 4303/6170/653 4304/6175/660 +f 4329/6176/686 4291/6177/661 4297/6178/655 +f 4310/6179/688 4277/6173/654 4278/6180/671 +f 4331/6181/681 4306/6182/652 4299/6183/661 +f 4292/6184/670 4329/6176/686 4297/6178/655 +f 4311/6185/683 4278/6180/671 4279/6186/653 +f 4306/6187/652 4336/6174/685 4304/6175/660 +f 4325/6188/682 4292/6184/670 4293/6189/654 +f 4312/6190/685 4279/6186/653 4280/6191/660 +f 4326/6192/688 4293/6189/654 4294/6193/671 +f 4307/6194/681 4282/6195/652 4275/6161/661 +f 4327/6196/683 4294/6193/671 4295/6197/653 +f 4282/6198/652 4312/6190/685 4280/6191/660 +f 4328/6199/685 4295/6197/653 4296/6200/660 +f 4321/6201/686 4283/6167/661 4289/6202/655 +f 4323/6203/681 4298/6204/652 4291/6177/661 +f 4284/6205/670 4321/6201/686 4289/6202/655 +f 4298/6206/652 4328/6199/685 4296/6200/660 +f 4317/6207/682 4284/6205/670 4285/6208/654 +f 4337/6209/686 4299/6183/661 4305/6210/655 +f 4318/6211/688 4285/6208/654 4286/6212/671 +f 4300/6158/670 4337/6209/686 4305/6210/655 +f 4319/6213/683 4286/6212/671 4287/6155/653 +f 4319/6214/683 4349/6215/690 4318/6216/688 +f 4341/6217/689 4308/6218/684 4309/6172/682 +f 4316/6219/684 4352/6220/687 4321/6221/686 +f 4351/6222/694 4319/6214/683 4320/6223/685 +f 4310/6224/688 4341/6217/689 4309/6172/682 +f 4348/6225/689 4316/6219/684 4317/6207/682 +f 4313/6226/686 4339/6227/691 4307/6228/681 +f 4311/6229/683 4342/6230/690 4310/6224/688 +f 4318/6216/688 4348/6225/689 4317/6207/682 +f 4340/6231/692 4313/6226/686 4308/6218/684 +f 4321/6221/686 4346/6232/691 4315/6233/681 +f 4344/6234/694 4311/6229/683 4312/6235/685 +f 4366/6236/697 4346/6232/691 4352/6220/687 +f 4356/6237/698 4341/6217/689 4342/6230/690 +f 4350/6238/693 4363/6239/698 4349/6215/690 +f 4359/6240/697 4339/6227/691 4345/6241/687 +f 4361/6242/696 4352/6220/687 4347/6243/692 +f 4343/6244/693 4356/6237/698 4342/6230/690 +f 4351/6222/694 4364/6245/695 4350/6238/693 +f 4354/6246/696 4345/6241/687 4340/6231/692 +f 4348/6225/689 4361/6242/696 4347/6243/692 +f 4344/6234/694 4357/6247/695 4343/6244/693 +f 4341/6217/689 4354/6246/696 4340/6231/692 +f 4363/6239/698 4348/6225/689 4349/6215/690 +f 4379/6248/694 4335/6249/683 4336/6250/685 +f 4370/6251/690 4325/6188/682 4326/6252/688 +f 4376/6253/689 4332/6254/684 4333/6157/682 +f 4329/6255/686 4367/6256/691 4323/6257/681 +f 4327/6258/683 4370/6251/690 4326/6252/688 +f 4377/6259/690 4333/6157/682 4334/6260/688 +f 4368/6261/692 4329/6255/686 4324/6262/684 +f 4337/6263/686 4374/6264/691 4331/6265/681 +f 4372/6266/694 4327/6258/683 4328/6267/685 +f 4335/6249/683 4377/6259/690 4334/6260/688 +f 4369/6268/689 4324/6262/684 4325/6188/682 +f 4332/6254/684 4380/6269/687 4337/6263/686 +f 4372/6266/694 4385/6270/695 4371/6271/693 +f 4369/6268/689 4382/6272/696 4368/6261/692 +f 4391/6273/698 4376/6253/689 4377/6259/690 +f 4394/6274/697 4374/6264/691 4380/6269/687 +f 4384/6275/698 4369/6268/689 4370/6251/690 +f 4378/6276/693 4391/6273/698 4377/6259/690 +f 4387/6277/697 4367/6256/691 4373/6278/687 +f 4389/6279/696 4380/6269/687 4375/6280/692 +f 4371/6271/693 4384/6275/698 4370/6251/690 +f 4379/6248/694 4392/6281/695 4378/6276/693 +f 4382/6272/696 4373/6278/687 4368/6261/692 +f 4376/6253/689 4389/6279/696 4375/6280/692 +f 4331/6265/681 4374/6264/691 4338/6282/656 +f 4374/6264/691 4388/6283/699 4338/6282/656 +f 4336/6250/685 4338/6284/656 4379/6248/694 +f 4379/6248/694 4338/6284/656 4393/6285/701 +f 4323/6257/681 4367/6256/691 4330/6286/656 +f 4367/6256/691 4381/6287/699 4330/6286/656 +f 4328/6267/685 4330/6288/656 4372/6266/694 +f 4372/6266/694 4330/6288/656 4386/6289/701 +f 4315/6233/681 4346/6232/691 4322/6290/656 +f 4346/6232/691 4360/6291/699 4322/6290/656 +f 4320/6223/685 4322/6292/656 4351/6222/694 +f 4351/6222/694 4322/6292/656 4365/6293/701 +f 4307/6228/681 4339/6227/691 4314/6294/656 +f 4339/6227/691 4353/6295/699 4314/6294/656 +f 4312/6235/685 4314/6296/656 4344/6234/694 +f 4344/6234/694 4314/6296/656 4358/6297/701 +f 4411/6298/730 4364/6299/695 4365/6300/701 +f 4419/6301/655 4381/6302/699 4387/6303/697 +f 4388/6304/699 4398/6305/731 4338/6306/656 +f 4395/6307/658 4358/6308/701 4314/6309/656 +f 4414/6310/665 4387/6303/697 4382/6311/696 +f 4405/6312/655 4353/6313/699 4359/6314/697 +f 4383/6315/700 4414/6310/665 4382/6311/696 +f 4398/6316/731 4393/6317/701 4338/6318/656 +f 4400/6319/665 4359/6314/697 4354/6320/696 +f 4416/6321/663 4383/6315/700 4384/6322/698 +f 4401/6323/659 4354/6320/696 4355/6324/700 +f 4417/6325/653 4384/6322/698 4385/6326/695 +f 4381/6302/699 4397/6327/658 4330/6328/656 +f 4402/6329/663 4355/6324/700 4356/6330/698 +f 4386/6331/701 4417/6325/653 4385/6326/695 +f 4403/6332/653 4356/6330/698 4357/6333/695 +f 4426/6334/732 4388/6304/699 4394/6335/697 +f 4397/6336/658 4386/6331/701 4330/6337/656 +f 4404/6338/664 4357/6333/695 4358/6308/701 +f 4421/6339/733 4394/6335/697 4389/6340/696 +f 4412/6341/732 4360/6342/699 4366/6343/697 +f 4390/6344/700 4421/6339/733 4389/6340/696 +f 4406/6345/734 4322/6346/656 4360/6342/699 +f 4407/6347/733 4366/6343/697 4361/6348/696 +f 4423/6349/735 4390/6344/700 4391/6350/698 +f 4408/6351/736 4361/6348/696 4362/6352/700 +f 4424/6353/671 4391/6350/698 4392/6354/695 +f 4396/6355/731 4365/6300/701 4322/6356/656 +f 4409/6357/735 4362/6352/700 4363/6358/698 +f 4393/6317/701 4424/6353/671 4392/6354/695 +f 4410/6359/671 4363/6358/698 4364/6299/695 +f 4399/6360/662 4314/6361/656 4353/6313/699 +f 4396/6362/731 4433/6363/737 4411/6364/730 +f 4436/6365/738 4426/6334/732 4421/6366/733 +f 4432/6367/739 4408/6368/736 4409/6369/735 +f 4412/6341/732 4429/6370/740 4406/6371/734 +f 4422/6372/736 4436/6365/738 4421/6366/733 +f 4430/6373/738 4412/6341/732 4407/6374/733 +f 4420/6375/734 4428/6376/741 4398/6377/731 +f 4438/6378/739 4422/6372/736 4423/6379/735 +f 4429/6370/740 4396/6380/731 4406/6371/734 +f 4440/6381/661 4420/6375/734 4426/6334/732 +f 4398/6382/731 4439/6383/737 4425/6384/730 +f 4431/6385/742 4407/6374/733 4408/6368/736 +f 4445/6386/743 4430/6373/738 4431/6385/742 +f 4442/6387/744 4439/6383/737 4428/6388/741 +f 4437/6389/742 4450/6390/745 4436/6365/738 +f 4432/6367/739 4445/6386/743 4431/6385/742 +f 4429/6370/740 4441/6391/744 4427/6392/741 +f 4448/6393/746 4429/6370/740 4434/6394/661 +f 4452/6395/747 4437/6389/742 4438/6378/739 +f 4454/6396/746 4435/6397/740 4440/6381/661 +f 4441/6398/744 4433/6363/737 4427/6399/741 +f 4430/6373/738 4448/6393/746 4434/6394/661 +f 4449/6400/748 4428/6376/741 4435/6397/740 +f 4450/6390/745 4440/6381/661 4436/6365/738 +f 4411/6364/730 4433/6363/737 4410/6401/671 +f 4433/6363/737 4447/6402/749 4410/6401/671 +f 4409/6369/735 4410/6401/671 4432/6367/739 +f 4432/6367/739 4410/6401/671 4446/6403/747 +f 4423/6379/735 4424/6404/671 4438/6378/739 +f 4438/6378/739 4424/6404/671 4452/6395/747 +f 4425/6384/730 4439/6383/737 4424/6404/671 +f 4439/6383/737 4453/6405/749 4424/6404/671 +f 4470/6406/652 4449/6407/748 4454/6396/746 +f 4463/6408/657 4410/6409/671 4447/6410/749 +f 4466/6411/672 4454/6396/746 4450/6412/745 +f 4451/6413/743 4466/6411/672 4450/6412/745 +f 4455/6414/654 4446/6415/747 4410/6409/671 +f 4468/6416/689 4451/6413/743 4452/6417/747 +f 4464/6418/652 4443/6419/748 4448/6393/746 +f 4465/6420/656 4442/6421/744 4449/6407/748 +f 4460/6422/672 4448/6393/746 4444/6423/745 +f 4456/6424/654 4452/6417/747 4424/6425/671 +f 4458/6426/658 4453/6427/749 4442/6428/744 +f 4461/6429/659 4444/6423/745 4445/6430/743 +f 4459/6431/656 4441/6432/744 4443/6419/748 +f 4462/6433/689 4445/6430/743 4446/6415/747 +f 4469/6434/657 4424/6425/671 4453/6427/749 +f 4457/6435/658 4447/6410/749 4441/6436/744 +f 3084/5529/661 3078/5545/652 3069/5530/652 +f 3082/5532/670 3083/5541/655 3075/5533/655 +f 3080/5535/671 3081/6437/654 3073/5536/654 +f 3077/5538/660 3079/5544/653 3071/5539/653 +f 3083/5541/655 3084/5529/661 3076/5531/661 +f 3081/5542/654 3082/5532/670 3074/5534/670 +f 3079/5544/653 3080/5535/671 3072/5537/671 +f 3078/5545/652 3077/5538/660 3070/5540/660 +f 3099/5546/661 3115/5553/661 3114/5547/673 +f 3092/5549/674 3108/5555/674 3107/5550/671 +f 3100/5552/675 3116/5559/675 3115/5553/661 +f 3093/5554/654 3109/6438/654 3108/5555/674 +f 3086/5556/676 3102/5564/676 3101/5557/652 +f 3085/5558/652 3101/5557/652 3116/5559/675 +f 3094/5560/677 3110/5566/677 3109/5561/654 +f 3087/5563/660 3103/5568/660 3102/5564/676 +f 3095/5565/670 3111/5570/670 3110/5566/677 +f 3088/5567/678 3104/5572/678 3103/5568/660 +f 3096/5569/679 3112/5574/679 3111/5570/670 +f 3089/5571/653 3105/5576/653 3104/5572/678 +f 3097/5573/655 3113/5577/655 3112/5574/679 +f 3090/5575/680 3106/5578/680 3105/5576/653 +f 3098/5548/673 3114/5547/673 3113/5577/655 +f 3091/5551/671 3107/5550/671 3106/5578/680 +f 3181/5579/655 3213/5638/686 3214/5580/681 +f 3194/5582/671 3226/6439/688 3227/5583/682 +f 3169/5585/660 3201/5620/685 3207/5586/683 +f 3195/5584/654 3227/5583/682 3228/5588/684 +f 3184/5590/652 3216/6440/656 3209/5591/685 +f 3207/5586/683 3202/6441/688 3170/5593/671 +f 3196/5589/670 3228/5588/684 3229/5594/686 +f 3214/5580/681 3216/6442/656 3184/5596/652 +f 3170/5593/671 3202/6441/688 3203/5597/682 +f 3197/5595/655 3229/5594/686 3230/5599/681 +f 3185/5601/660 3217/5629/685 3223/5602/683 +f 3171/5598/654 3203/5597/682 3204/5604/684 +f 3200/5606/652 3232/6443/656 3225/5607/685 +f 3223/5602/683 3218/6444/688 3186/5609/671 +f 3172/5605/670 3204/5604/684 3205/5610/686 +f 3230/5599/681 3232/6445/656 3200/5612/652 +f 3186/5609/671 3218/6444/688 3219/5613/682 +f 3173/5611/655 3205/5610/686 3206/5615/681 +f 3187/5614/654 3219/5613/682 3220/5617/684 +f 3176/5619/652 3208/6446/656 3201/5620/685 +f 3188/5618/670 3220/5617/684 3221/5621/686 +f 3206/5615/681 3208/6447/656 3176/5623/652 +f 3189/5622/655 3221/5621/686 3222/5624/681 +f 3177/5592/660 3209/5591/685 3215/5626/683 +f 3192/5628/652 3224/6448/656 3217/5629/685 +f 3215/5626/683 3210/6449/688 3178/5630/671 +f 3222/5624/681 3224/6450/656 3192/5631/652 +f 3178/5630/671 3210/6449/688 3211/5632/682 +f 3193/5608/660 3225/5607/685 3231/5634/683 +f 3179/5633/654 3211/5632/682 3212/5636/684 +f 3231/5634/683 3226/6439/688 3194/5582/671 +f 3180/5637/670 3212/5636/684 3213/5638/686 +f 3212/5639/684 3243/5657/692 3244/5640/687 +f 3202/5642/688 3234/5658/690 3235/5643/689 +f 3215/5644/683 3246/5660/693 3241/5645/690 +f 3214/5647/681 3213/5641/686 3244/5640/687 +f 3204/5649/684 3203/5597/682 3235/5643/689 +f 3211/5632/682 3210/5646/688 3241/5645/690 +f 3201/5652/685 3233/5668/694 3239/5653/693 +f 3204/5649/684 3236/5650/692 3237/5655/687 +f 3212/5639/684 3211/5632/682 3242/5651/689 +f 3207/5654/683 3239/5653/693 3234/5658/690 +f 3209/5659/685 3240/5663/694 3246/5660/693 +f 3205/5656/686 3237/5655/687 3238/5661/691 +f 3240/5663/694 3254/5722/701 3260/5664/695 +f 3235/5643/689 3249/5676/700 3250/5665/696 +f 3244/5640/687 3243/5657/692 3257/5666/696 +f 3233/5668/694 3247/5725/701 3253/5669/695 +f 3246/5660/693 3260/5664/695 3255/5670/698 +f 3237/5655/687 3236/5650/692 3250/5665/696 +f 3245/5648/691 3244/5640/687 3258/5667/697 +f 3239/5653/693 3253/5669/695 3248/5673/698 +f 3241/5645/690 3255/5670/698 3256/5674/700 +f 3238/5661/691 3237/5655/687 3251/5671/697 +f 3235/5643/689 3234/5658/690 3248/5673/698 +f 3242/5651/689 3256/5674/700 3257/5666/696 +f 3230/5677/681 3229/5699/686 3272/5678/687 +f 3220/5680/684 3219/5613/682 3263/5681/689 +f 3226/5683/688 3269/5700/690 3270/5684/689 +f 3223/5685/683 3217/5717/685 3261/5686/694 +f 3221/5688/686 3220/5680/684 3264/5682/692 +f 3227/5583/682 3270/5684/689 3271/5690/692 +f 3223/5685/683 3267/5687/693 3262/5692/690 +f 3231/5694/683 3225/5713/685 3268/5695/694 +f 3221/5688/686 3265/5689/687 3266/5697/691 +f 3229/5699/686 3228/5691/684 3271/5690/692 +f 3218/5693/688 3262/5692/690 3263/5681/689 +f 3231/5694/683 3274/5696/693 3269/5700/690 +f 3266/5697/691 3265/5689/687 3279/5701/697 +f 3263/5681/689 3262/5692/690 3276/5703/698 +f 3270/5684/689 3284/5712/700 3285/5705/696 +f 3268/5695/694 3282/5715/701 3288/5706/695 +f 3263/5681/689 3277/5704/700 3278/5707/696 +f 3271/5690/692 3285/5705/696 3286/5708/697 +f 3261/5686/694 3275/5719/701 3281/5709/695 +f 3274/5696/693 3288/5706/695 3283/5710/698 +f 3264/5682/692 3278/5707/696 3279/5701/697 +f 3272/5678/687 3286/5708/697 3287/5711/699 +f 3262/5692/690 3267/5687/693 3281/5709/695 +f 3270/5684/689 3269/5700/690 3283/5710/698 +f 3258/5727/697 3304/5788/670 3305/5728/702 +f 3275/5730/701 3307/5756/664 3313/5731/653 +f 3282/5733/701 3232/6451/656 3292/5734/703 +f 3252/5736/699 3298/5767/662 3289/5737/658 +f 3281/5732/695 3313/5731/653 3308/5739/663 +f 3247/5741/701 3293/5790/664 3299/5742/653 +f 3277/5704/700 3276/5740/698 3308/5739/663 +f 3287/5745/699 3319/5787/702 3292/5746/703 +f 3253/5743/695 3299/5742/653 3294/5748/663 +f 3277/5704/700 3309/5744/659 3310/5750/665 +f 3248/5749/698 3294/5748/663 3295/5752/659 +f 3278/5751/696 3310/5750/665 3311/5753/655 +f 3275/5730/701 3224/6452/656 3291/5755/658 +f 3249/5676/700 3295/5752/659 3296/5757/665 +f 3280/5759/699 3279/5754/697 3311/5753/655 +f 3250/5758/696 3296/5757/665 3297/5761/655 +f 3282/5733/701 3314/5735/704 3320/5763/705 +f 3280/5759/699 3312/5760/662 3291/5765/658 +f 3252/5736/699 3251/5762/697 3297/5761/655 +f 3288/5764/695 3320/5763/705 3315/5768/706 +f 3254/5770/701 3300/5775/704 3306/5771/705 +f 3284/5712/700 3283/5769/698 3315/5768/706 +f 3216/5774/656 3290/6453/703 3300/5775/704 +f 3260/5772/695 3306/5771/705 3301/5776/706 +f 3284/5712/700 3316/5773/707 3317/5778/708 +f 3255/5777/698 3301/5776/706 3302/5780/707 +f 3285/5779/696 3317/5778/708 3318/5781/670 +f 3259/5729/699 3305/5728/702 3290/5783/703 +f 3256/5674/700 3302/5780/707 3303/5785/708 +f 3287/5745/699 3286/5782/697 3318/5781/670 +f 3257/5786/696 3303/5785/708 3304/5788/670 +f 3208/5789/656 3289/6454/658 3293/5790/664 +f 3290/5791/703 3305/5830/702 3327/5792/709 +f 3320/5763/705 3334/5812/660 3330/5794/711 +f 3302/5796/707 3325/5816/714 3326/5797/712 +f 3306/5771/705 3300/5811/704 3323/5799/713 +f 3316/5801/707 3315/5795/706 3330/5794/711 +f 3306/5771/705 3328/5800/660 3324/5803/711 +f 3314/5805/704 3292/6455/703 3322/5806/710 +f 3316/5801/707 3331/5802/714 3332/5808/712 +f 3290/5810/703 3321/6456/710 3323/5799/713 +f 3314/5805/704 3329/5807/713 3334/5812/660 +f 3292/5813/703 3319/5834/702 3333/5814/709 +f 3301/5804/706 3324/5803/711 3325/5816/714 +f 3325/5816/714 3324/5803/711 3338/5817/715 +f 3333/5814/709 3347/5835/721 3336/5819/717 +f 3331/5802/714 3330/5794/711 3344/5820/715 +f 3326/5797/712 3325/5816/714 3339/5818/716 +f 3323/5799/713 3321/6456/710 3335/5823/717 +f 3323/5799/713 3337/5824/719 3342/5825/720 +f 3332/5808/712 3331/5802/714 3345/5821/716 +f 3329/5807/713 3343/5829/719 3348/5827/720 +f 3327/5792/709 3341/5832/721 3335/5828/717 +f 3324/5803/711 3328/5800/660 3342/5825/720 +f 3322/5806/710 3336/6457/717 3343/5829/719 +f 3334/5812/660 3348/5827/720 3344/5820/715 +f 3343/5836/719 3359/5852/656 3364/5837/652 +f 3304/5838/670 3349/5846/654 3357/5839/657 +f 3348/5827/720 3364/5837/652 3360/5841/672 +f 3345/5843/716 3344/5842/715 3360/5841/672 +f 3340/5845/718 3356/5864/689 3349/5846/654 +f 3345/5843/716 3361/5844/659 3362/5847/689 +f 3337/5849/719 3353/5863/656 3358/5850/652 +f 3336/5851/717 3352/6458/658 3359/5852/656 +f 3342/5825/720 3358/5850/652 3354/5853/672 +f 3346/5848/718 3362/5847/689 3350/5855/654 +f 3347/5857/721 3363/5865/657 3352/5858/658 +f 3338/5854/715 3354/5853/672 3355/5860/659 +f 3335/5862/717 3351/6459/658 3353/5863/656 +f 3339/5861/716 3355/5860/659 3356/5864/689 +f 3318/5856/670 3350/5855/654 3363/5865/657 +f 3341/5840/721 3357/5839/657 3351/5866/658 +f 3659/5868/722 3666/6460/722 3665/5869/664 +f 3657/5871/653 3664/5877/653 3663/5872/663 +f 3661/5874/665 3668/5881/665 3667/5875/723 +f 3658/5870/664 3665/5869/664 3664/5877/653 +f 3656/5873/663 3663/5872/663 3662/5878/659 +f 3655/5880/659 3662/6461/659 3668/5881/665 +f 3673/5882/722 3678/6462/722 3677/5883/664 +f 3671/5885/653 3676/5888/653 3675/5886/663 +f 3672/5884/664 3677/5883/664 3676/5888/653 +f 3670/5887/663 3675/5886/663 3674/5889/724 +f 3683/5891/722 3688/6463/722 3687/5892/664 +f 3681/5894/653 3686/5897/653 3685/5895/663 +f 3682/5893/664 3687/5892/664 3686/5897/653 +f 3680/5896/663 3685/5895/663 3684/5898/724 +f 3693/5900/722 3698/6464/722 3697/5901/664 +f 3691/5903/653 3696/5906/653 3695/5904/663 +f 3692/5902/664 3697/5901/664 3696/5906/653 +f 3690/5905/663 3695/5904/663 3694/5907/724 +f 3703/5909/722 3708/6465/722 3707/5910/664 +f 3701/5912/653 3706/5915/653 3705/5913/663 +f 3702/5911/664 3707/5910/664 3706/5915/653 +f 3700/5914/663 3705/5913/663 3704/5916/724 +f 3715/5918/725 3722/6466/725 3721/5919/662 +f 3713/5921/658 3720/5927/658 3719/5922/664 +f 3711/5924/653 3718/5928/653 3717/5925/663 +f 3714/5920/662 3721/5919/662 3720/5927/658 +f 3712/5923/664 3719/5922/664 3718/5928/653 +f 3710/5926/663 3717/5925/663 3716/5929/724 +f 3728/5931/655 3735/5938/655 3734/5932/662 +f 3725/5934/726 3732/6467/726 3731/5935/663 +f 3729/5937/665 3736/5944/665 3735/5938/655 +f 3727/5933/662 3734/5932/662 3733/5939/727 +f 3724/5936/663 3731/5935/663 3730/5941/659 +f 3723/5943/659 3730/6468/659 3736/5944/665 +f 3740/5945/655 3745/5949/655 3744/5946/662 +f 3741/5948/665 3746/5953/665 3745/5949/655 +f 3739/5947/662 3744/5946/662 3743/5950/727 +f 3737/5952/728 3742/6469/728 3746/5953/665 +f 3750/5954/655 3755/5958/655 3754/5955/662 +f 3751/5957/665 3756/5962/665 3755/5958/655 +f 3749/5956/662 3754/5955/662 3753/5959/727 +f 3747/5961/728 3752/6470/728 3756/5962/665 +f 3760/5963/655 3765/5967/655 3764/5964/662 +f 3761/5966/665 3766/5971/665 3765/5967/655 +f 3759/5965/662 3764/5964/662 3763/5968/727 +f 3757/5970/728 3762/6471/728 3766/5971/665 +f 3770/5972/655 3775/5976/655 3774/5973/662 +f 3771/5975/665 3776/5980/665 3775/5976/655 +f 3769/5974/662 3774/5973/662 3773/5977/727 +f 3767/5979/728 3772/6472/728 3776/5980/665 +f 3782/5981/655 3789/5988/655 3788/5982/662 +f 3780/5984/658 3787/5989/658 3786/5985/664 +f 3783/5987/665 3790/5993/665 3789/5988/655 +f 3781/5983/662 3788/5982/662 3787/5989/658 +f 3779/5986/664 3786/5985/664 3785/5990/729 +f 3777/5992/728 3784/6473/728 3790/5993/665 +f 3793/5994/726 3798/6474/726 3797/5995/663 +f 3795/5997/665 3800/6003/665 3799/5998/723 +f 3792/5996/663 3797/5995/663 3796/6000/659 +f 3791/6002/659 3796/6475/659 3800/6003/665 +f 3805/6004/725 3810/6476/725 3809/6005/662 +f 3803/6007/658 3808/6010/658 3807/6008/664 +f 3804/6006/662 3809/6005/662 3808/6010/658 +f 3802/6009/664 3807/6008/664 3806/6011/729 +f 3813/6013/726 3818/6477/726 3817/6014/663 +f 3815/6016/665 3820/6022/665 3819/6017/723 +f 3812/6015/663 3817/6014/663 3816/6019/659 +f 3811/6021/659 3816/6478/659 3820/6022/665 +f 3825/6023/725 3830/6479/725 3829/6024/662 +f 3823/6026/658 3828/6029/658 3827/6027/664 +f 3824/6025/662 3829/6024/662 3828/6029/658 +f 3822/6028/664 3827/6027/664 3826/6030/729 +f 3833/6032/726 3838/6480/726 3837/6033/663 +f 3835/6035/665 3840/6041/665 3839/6036/723 +f 3832/6034/663 3837/6033/663 3836/6038/659 +f 3831/6040/659 3836/6481/659 3840/6041/665 +f 3845/6042/725 3850/6482/725 3849/6043/662 +f 3843/6045/658 3848/6048/658 3847/6046/664 +f 3844/6044/662 3849/6043/662 3848/6048/658 +f 3842/6047/664 3847/6046/664 3846/6049/729 +f 3853/6051/726 3858/6483/726 3857/6052/663 +f 3855/6054/665 3860/6060/665 3859/6055/723 +f 3852/6053/663 3857/6052/663 3856/6057/659 +f 3851/6059/659 3856/6484/659 3860/6060/665 +f 3865/6061/725 3870/6485/725 3869/6062/662 +f 3863/6064/658 3868/6067/658 3867/6065/664 +f 3864/6063/662 3869/6062/662 3868/6067/658 +f 3862/6066/664 3867/6065/664 3866/6068/729 +f 4061/6070/661 4077/6077/661 4076/6071/673 +f 4054/6073/674 4070/6079/674 4069/6074/671 +f 4062/6076/675 4078/6083/675 4077/6077/661 +f 4055/6078/654 4071/6486/654 4070/6079/674 +f 4048/6080/676 4064/6088/676 4063/6081/652 +f 4047/6082/652 4063/6081/652 4078/6083/675 +f 4056/6084/677 4072/6090/677 4071/6085/654 +f 4049/6087/660 4065/6092/660 4064/6088/676 +f 4057/6089/670 4073/6094/670 4072/6090/677 +f 4050/6091/678 4066/6096/678 4065/6092/660 +f 4058/6093/679 4074/6098/679 4073/6094/670 +f 4051/6095/653 4067/6100/653 4066/6096/678 +f 4059/6097/655 4075/6101/655 4074/6098/679 +f 4052/6099/680 4068/6102/680 4067/6100/653 +f 4060/6072/673 4076/6071/673 4075/6101/655 +f 4053/6075/671 4069/6074/671 4068/6102/680 +f 4242/6103/661 4236/6119/652 4227/6104/652 +f 4240/6106/670 4241/6115/655 4233/6107/655 +f 4238/6109/671 4239/6487/654 4231/6110/654 +f 4235/6112/660 4237/6118/653 4229/6113/653 +f 4241/6115/655 4242/6103/661 4234/6105/661 +f 4239/6116/654 4240/6106/670 4232/6108/670 +f 4237/6118/653 4238/6109/671 4230/6111/671 +f 4236/6119/652 4235/6112/660 4228/6114/660 +f 4258/6120/661 4252/6136/652 4243/6121/652 +f 4256/6123/670 4257/6132/655 4249/6124/655 +f 4254/6126/671 4255/6488/654 4247/6127/654 +f 4251/6129/660 4253/6135/653 4245/6130/653 +f 4257/6132/655 4258/6120/661 4250/6122/661 +f 4255/6133/654 4256/6123/670 4248/6125/670 +f 4253/6135/653 4254/6126/671 4246/6128/671 +f 4252/6136/652 4251/6129/660 4244/6131/660 +f 4274/6137/661 4268/6153/652 4259/6138/652 +f 4272/6140/670 4273/6149/655 4265/6141/655 +f 4270/6143/671 4271/6489/654 4263/6144/654 +f 4267/6146/660 4269/6152/653 4261/6147/653 +f 4273/6149/655 4274/6137/661 4266/6139/661 +f 4271/6150/654 4272/6140/670 4264/6142/670 +f 4269/6152/653 4270/6143/671 4262/6145/671 +f 4268/6153/652 4267/6146/660 4260/6148/660 +f 4320/6154/685 4319/6213/683 4287/6155/653 +f 4333/6157/682 4332/6490/684 4300/6158/670 +f 4313/6160/686 4307/6194/681 4275/6161/661 +f 4334/6163/688 4333/6157/682 4301/6159/654 +f 4315/6165/681 4322/6491/656 4290/6166/652 +f 4276/6168/670 4308/6492/684 4313/6160/686 +f 4335/6169/683 4334/6163/688 4302/6164/671 +f 4290/6171/652 4322/6493/656 4320/6154/685 +f 4309/6172/682 4308/6492/684 4276/6168/670 +f 4336/6174/685 4335/6169/683 4303/6170/653 +f 4329/6176/686 4323/6203/681 4291/6177/661 +f 4310/6179/688 4309/6172/682 4277/6173/654 +f 4331/6181/681 4338/6494/656 4306/6182/652 +f 4292/6184/670 4324/6495/684 4329/6176/686 +f 4311/6185/683 4310/6179/688 4278/6180/671 +f 4306/6187/652 4338/6496/656 4336/6174/685 +f 4325/6188/682 4324/6495/684 4292/6184/670 +f 4312/6190/685 4311/6185/683 4279/6186/653 +f 4326/6192/688 4325/6188/682 4293/6189/654 +f 4307/6194/681 4314/6497/656 4282/6195/652 +f 4327/6196/683 4326/6192/688 4294/6193/671 +f 4282/6198/652 4314/6498/656 4312/6190/685 +f 4328/6199/685 4327/6196/683 4295/6197/653 +f 4321/6201/686 4315/6165/681 4283/6167/661 +f 4323/6203/681 4330/6499/656 4298/6204/652 +f 4284/6205/670 4316/6500/684 4321/6201/686 +f 4298/6206/652 4330/6501/656 4328/6199/685 +f 4317/6207/682 4316/6500/684 4284/6205/670 +f 4337/6209/686 4331/6181/681 4299/6183/661 +f 4318/6211/688 4317/6207/682 4285/6208/654 +f 4300/6158/670 4332/6490/684 4337/6209/686 +f 4319/6213/683 4318/6211/688 4286/6212/671 +f 4319/6214/683 4350/6238/693 4349/6215/690 +f 4341/6217/689 4340/6231/692 4308/6218/684 +f 4316/6219/684 4347/6243/692 4352/6220/687 +f 4351/6222/694 4350/6238/693 4319/6214/683 +f 4310/6224/688 4342/6230/690 4341/6217/689 +f 4348/6225/689 4347/6243/692 4316/6219/684 +f 4313/6226/686 4345/6241/687 4339/6227/691 +f 4311/6229/683 4343/6244/693 4342/6230/690 +f 4318/6216/688 4349/6215/690 4348/6225/689 +f 4340/6231/692 4345/6241/687 4313/6226/686 +f 4321/6221/686 4352/6220/687 4346/6232/691 +f 4344/6234/694 4343/6244/693 4311/6229/683 +f 4366/6236/697 4360/6291/699 4346/6232/691 +f 4356/6237/698 4355/6324/700 4341/6217/689 +f 4350/6238/693 4364/6245/695 4363/6239/698 +f 4359/6240/697 4353/6295/699 4339/6227/691 +f 4361/6242/696 4366/6236/697 4352/6220/687 +f 4343/6244/693 4357/6247/695 4356/6237/698 +f 4351/6222/694 4365/6293/701 4364/6245/695 +f 4354/6246/696 4359/6240/697 4345/6241/687 +f 4348/6225/689 4362/6352/700 4361/6242/696 +f 4344/6234/694 4358/6297/701 4357/6247/695 +f 4341/6217/689 4355/6324/700 4354/6246/696 +f 4363/6239/698 4362/6352/700 4348/6225/689 +f 4379/6248/694 4378/6276/693 4335/6249/683 +f 4370/6251/690 4369/6268/689 4325/6188/682 +f 4376/6253/689 4375/6280/692 4332/6254/684 +f 4329/6255/686 4373/6278/687 4367/6256/691 +f 4327/6258/683 4371/6271/693 4370/6251/690 +f 4377/6259/690 4376/6253/689 4333/6157/682 +f 4368/6261/692 4373/6278/687 4329/6255/686 +f 4337/6263/686 4380/6269/687 4374/6264/691 +f 4372/6266/694 4371/6271/693 4327/6258/683 +f 4335/6249/683 4378/6276/693 4377/6259/690 +f 4369/6268/689 4368/6261/692 4324/6262/684 +f 4332/6254/684 4375/6280/692 4380/6269/687 +f 4372/6266/694 4386/6289/701 4385/6270/695 +f 4369/6268/689 4383/6315/700 4382/6272/696 +f 4391/6273/698 4390/6344/700 4376/6253/689 +f 4394/6274/697 4388/6283/699 4374/6264/691 +f 4384/6275/698 4383/6315/700 4369/6268/689 +f 4378/6276/693 4392/6281/695 4391/6273/698 +f 4387/6277/697 4381/6287/699 4367/6256/691 +f 4389/6279/696 4394/6274/697 4380/6269/687 +f 4371/6271/693 4385/6270/695 4384/6275/698 +f 4379/6248/694 4393/6285/701 4392/6281/695 +f 4382/6272/696 4387/6277/697 4373/6278/687 +f 4376/6253/689 4390/6344/700 4389/6279/696 +f 4411/6298/730 4410/6359/671 4364/6299/695 +f 4419/6301/655 4413/6502/662 4381/6302/699 +f 4388/6304/699 4420/6503/734 4398/6305/731 +f 4395/6307/658 4404/6338/664 4358/6308/701 +f 4414/6310/665 4419/6301/655 4387/6303/697 +f 4405/6312/655 4399/6360/662 4353/6313/699 +f 4383/6315/700 4415/6504/659 4414/6310/665 +f 4398/6316/731 4425/6505/730 4393/6317/701 +f 4400/6319/665 4405/6312/655 4359/6314/697 +f 4416/6321/663 4415/6504/659 4383/6315/700 +f 4401/6323/659 4400/6319/665 4354/6320/696 +f 4417/6325/653 4416/6321/663 4384/6322/698 +f 4381/6302/699 4413/6502/662 4397/6327/658 +f 4402/6329/663 4401/6323/659 4355/6324/700 +f 4386/6331/701 4418/6506/664 4417/6325/653 +f 4403/6332/653 4402/6329/663 4356/6330/698 +f 4426/6334/732 4420/6503/734 4388/6304/699 +f 4397/6336/658 4418/6506/664 4386/6331/701 +f 4404/6338/664 4403/6332/653 4357/6333/695 +f 4421/6339/733 4426/6334/732 4394/6335/697 +f 4412/6341/732 4406/6345/734 4360/6342/699 +f 4390/6344/700 4422/6507/736 4421/6339/733 +f 4406/6345/734 4396/6508/731 4322/6346/656 +f 4407/6347/733 4412/6341/732 4366/6343/697 +f 4423/6349/735 4422/6507/736 4390/6344/700 +f 4408/6351/736 4407/6347/733 4361/6348/696 +f 4424/6353/671 4423/6349/735 4391/6350/698 +f 4396/6355/731 4411/6298/730 4365/6300/701 +f 4409/6357/735 4408/6351/736 4362/6352/700 +f 4393/6317/701 4425/6505/730 4424/6353/671 +f 4410/6359/671 4409/6357/735 4363/6358/698 +f 4399/6360/662 4395/6509/658 4314/6361/656 +f 4396/6362/731 4427/6399/741 4433/6363/737 +f 4436/6365/738 4440/6381/661 4426/6334/732 +f 4432/6367/739 4431/6385/742 4408/6368/736 +f 4412/6341/732 4434/6394/661 4429/6370/740 +f 4422/6372/736 4437/6389/742 4436/6365/738 +f 4430/6373/738 4434/6394/661 4412/6341/732 +f 4420/6375/734 4435/6397/740 4428/6376/741 +f 4438/6378/739 4437/6389/742 4422/6372/736 +f 4429/6370/740 4427/6392/741 4396/6380/731 +f 4440/6381/661 4435/6397/740 4420/6375/734 +f 4398/6382/731 4428/6388/741 4439/6383/737 +f 4431/6385/742 4430/6373/738 4407/6374/733 +f 4445/6386/743 4444/6510/745 4430/6373/738 +f 4442/6387/744 4453/6405/749 4439/6383/737 +f 4437/6389/742 4451/6511/743 4450/6390/745 +f 4432/6367/739 4446/6403/747 4445/6386/743 +f 4429/6370/740 4443/6512/748 4441/6391/744 +f 4448/6393/746 4443/6512/748 4429/6370/740 +f 4452/6395/747 4451/6511/743 4437/6389/742 +f 4454/6396/746 4449/6400/748 4435/6397/740 +f 4441/6398/744 4447/6402/749 4433/6363/737 +f 4430/6373/738 4444/6510/745 4448/6393/746 +f 4449/6400/748 4442/6513/744 4428/6376/741 +f 4450/6390/745 4454/6396/746 4440/6381/661 +f 4470/6406/652 4465/6420/656 4449/6407/748 +f 4463/6408/657 4455/6414/654 4410/6409/671 +f 4466/6411/672 4470/6406/652 4454/6396/746 +f 4451/6413/743 4467/6514/659 4466/6411/672 +f 4455/6414/654 4462/6433/689 4446/6415/747 +f 4468/6416/689 4467/6514/659 4451/6413/743 +f 4464/6418/652 4459/6431/656 4443/6419/748 +f 4465/6420/656 4458/6515/658 4442/6421/744 +f 4460/6422/672 4464/6418/652 4448/6393/746 +f 4456/6424/654 4468/6416/689 4452/6417/747 +f 4458/6426/658 4469/6434/657 4453/6427/749 +f 4461/6429/659 4460/6422/672 4444/6423/745 +f 4459/6431/656 4457/6516/658 4441/6432/744 +f 4462/6433/689 4461/6429/659 4445/6430/743 +f 4469/6434/657 4456/6424/654 4424/6425/671 +f 4457/6435/658 4463/6408/657 4447/6410/749 diff --git a/src/main/resources/assets/hbm/models/weapons/maresleg_mk2.obj b/src/main/resources/assets/hbm/models/weapons/maresleg_mk2.obj new file mode 100644 index 000000000..420992dda --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/maresleg_mk2.obj @@ -0,0 +1,2314 @@ +# Blender v2.79 (sub 0) OBJ File: 'maresleg.blend' +# www.blender.org +o Circle +v 0.000000 1.187500 8.000000 +v -0.093750 1.162380 8.000000 +v -0.162380 1.093750 8.000000 +v -0.187500 1.000000 8.000000 +v -0.162380 0.906250 8.000000 +v -0.093750 0.837620 8.000000 +v 0.000000 0.812500 8.000000 +v 0.093750 0.837620 8.000000 +v 0.162380 0.906250 8.000000 +v 0.187500 1.000000 8.000000 +v 0.162380 1.093750 8.000000 +v 0.093750 1.162380 8.000000 +v 0.000000 1.187500 -2.000000 +v -0.093750 1.162380 -2.000000 +v -0.162380 1.093750 -2.000000 +v -0.187500 1.000000 -2.000000 +v -0.162380 0.906250 -2.000000 +v -0.093750 0.837620 -2.000000 +v 0.000000 0.812500 -2.000000 +v 0.093750 0.837620 -2.000000 +v 0.162380 0.906250 -2.000000 +v 0.187500 1.000000 -2.000000 +v 0.162380 1.093750 -2.000000 +v 0.093750 1.162380 -2.000000 +v 0.000000 1.187500 3.750000 +v -0.093750 1.162380 3.750000 +v -0.162380 1.093750 3.750000 +v -0.187500 1.000000 3.750000 +v -0.162380 0.906250 3.750000 +v -0.093750 0.837620 3.750000 +v 0.000000 0.812500 3.750000 +v 0.093750 0.837620 3.750000 +v 0.162380 0.906250 3.750000 +v 0.187500 1.000000 3.750000 +v 0.162380 1.093750 3.750000 +v 0.093750 1.162380 3.750000 +v 0.000000 1.187500 3.750000 +v -0.093750 1.162380 3.750000 +v -0.162380 1.093750 3.750000 +v -0.187500 1.000000 3.750000 +v -0.162380 0.906250 3.750000 +v -0.093750 0.837620 3.750000 +v 0.000000 0.812500 3.750000 +v 0.093750 0.837620 3.750000 +v 0.162380 0.906250 3.750000 +v 0.187500 1.000000 3.750000 +v 0.162380 1.093750 3.750000 +v 0.093750 1.162380 3.750000 +v 0.000000 1.125000 8.000000 +v -0.062500 1.108253 8.000000 +v -0.108253 1.062500 8.000000 +v -0.125000 1.000000 8.000000 +v -0.108253 0.937500 8.000000 +v -0.062500 0.891747 8.000000 +v 0.000000 0.875000 8.000000 +v 0.062500 0.891747 8.000000 +v 0.108253 0.937500 8.000000 +v 0.125000 1.000000 8.000000 +v 0.108253 1.062500 8.000000 +v 0.062500 1.108253 8.000000 +v 0.000000 1.125000 7.000000 +v -0.062500 1.108253 7.000000 +v -0.108253 1.062500 7.000000 +v -0.125000 1.000000 7.000000 +v -0.108253 0.937500 7.000000 +v -0.062500 0.891747 7.000000 +v 0.000000 0.875000 7.000000 +v 0.062500 0.891747 7.000000 +v 0.108253 0.937500 7.000000 +v 0.125000 1.000000 7.000000 +v 0.108253 1.062500 7.000000 +v 0.062500 1.108253 7.000000 +v 0.000000 1.125000 3.750000 +v -0.062500 1.108253 3.750000 +v -0.108253 1.062500 3.750000 +v -0.125000 1.000000 3.750000 +v -0.108253 0.937500 3.750000 +v -0.062500 0.891747 3.750000 +v 0.000000 0.875000 3.750000 +v 0.062500 0.891747 3.750000 +v 0.108253 0.937500 3.750000 +v 0.125000 1.000000 3.750000 +v 0.108253 1.062500 3.750000 +v 0.062500 1.108253 3.750000 +v 0.000000 1.125000 2.750000 +v -0.062500 1.108253 2.750000 +v -0.108253 1.062500 2.750000 +v -0.125000 1.000000 2.750000 +v -0.108253 0.937500 2.750000 +v -0.062500 0.891747 2.750000 +v 0.000000 0.875000 2.750000 +v 0.062500 0.891747 2.750000 +v 0.108253 0.937500 2.750000 +v 0.125000 1.000000 2.750000 +v 0.108253 1.062500 2.750000 +v 0.062500 1.108253 2.750000 +v 0.000000 1.187500 3.000000 +v -0.093750 1.162380 3.000000 +v -0.162380 1.093750 3.000000 +v -0.187500 1.000000 3.000000 +v -0.162380 0.906250 3.000000 +v -0.093750 0.837620 3.000000 +v 0.000000 0.812500 3.000000 +v 0.093750 0.837620 3.000000 +v 0.162380 0.906250 3.000000 +v 0.187500 1.000000 3.000000 +v 0.162380 1.093750 3.000000 +v 0.093750 1.162380 3.000000 +v 0.000000 1.250000 3.000000 +v -0.125000 1.216506 3.000000 +v -0.216506 1.125000 3.000000 +v -0.250000 1.000000 3.000000 +v 0.250000 1.000000 3.000000 +v 0.216506 1.125000 3.000000 +v 0.125000 1.216506 3.000000 +v 0.000000 1.250000 3.250000 +v -0.125000 1.216506 3.250000 +v -0.216506 1.125000 3.250000 +v -0.250000 1.000000 3.250000 +v 0.250000 1.000000 3.250000 +v 0.216506 1.125000 3.250000 +v 0.125000 1.216506 3.250000 +v 0.000000 1.187500 3.250000 +v -0.093750 1.162380 3.250000 +v -0.162380 1.093750 3.250000 +v -0.187500 1.000000 3.250000 +v -0.162380 0.906250 3.250000 +v -0.093750 0.837620 3.250000 +v 0.000000 0.812500 3.250000 +v 0.093750 0.837620 3.250000 +v 0.162380 0.906250 3.250000 +v 0.187500 1.000000 3.250000 +v 0.162380 1.093750 3.250000 +v 0.093750 1.162380 3.250000 +v 0.000000 0.750000 -2.000000 +v -0.093750 0.724880 -2.000000 +v -0.162380 0.656250 -2.000000 +v -0.187500 0.562500 -2.000000 +v -0.162380 0.468750 -2.000000 +v -0.093750 0.400120 -2.000000 +v 0.000000 0.375000 -2.000000 +v 0.093750 0.400120 -2.000000 +v 0.162380 0.468750 -2.000000 +v 0.187500 0.562500 -2.000000 +v 0.162380 0.656250 -2.000000 +v 0.093750 0.724880 -2.000000 +v 0.000000 0.750000 3.000000 +v -0.093750 0.724880 3.000000 +v -0.162380 0.656250 3.000000 +v -0.187500 0.562500 3.000000 +v -0.162380 0.468750 3.000000 +v -0.093750 0.400120 3.000000 +v 0.000000 0.375000 3.000000 +v 0.093750 0.400120 3.000000 +v 0.162380 0.468750 3.000000 +v 0.187500 0.562500 3.000000 +v 0.162380 0.656250 3.000000 +v 0.093750 0.724880 3.000000 +v -0.250000 0.562500 3.000000 +v -0.216506 0.437500 3.000000 +v -0.125000 0.345994 3.000000 +v 0.000000 0.312500 3.000000 +v 0.125000 0.345994 3.000000 +v 0.216506 0.437500 3.000000 +v 0.250000 0.562500 3.000000 +v -0.250000 0.562500 3.250000 +v -0.216506 0.437500 3.250000 +v -0.125000 0.345994 3.250000 +v 0.000000 0.312500 3.250000 +v 0.125000 0.345994 3.250000 +v 0.216506 0.437500 3.250000 +v 0.250000 0.562500 3.250000 +v 0.000000 1.250000 -2.000000 +v -0.125000 1.216506 -2.000000 +v -0.216506 1.125000 -2.000000 +v -0.250000 1.000000 -2.000000 +v 0.250000 1.000000 -2.000000 +v 0.216506 1.125000 -2.000000 +v 0.125000 1.216506 -2.000000 +v -0.250000 0.562500 -2.000000 +v -0.216506 0.437500 -2.000000 +v -0.125000 0.345994 -2.000000 +v 0.000000 0.312500 -2.000000 +v 0.125000 0.345994 -2.000000 +v 0.216506 0.437500 -2.000000 +v 0.250000 0.562500 -2.000000 +v -0.125000 1.216506 -2.375000 +v 0.000000 1.250000 -2.375000 +v -0.216506 1.125000 -2.375000 +v -0.250000 1.000000 -2.375000 +v 0.216506 1.125000 -2.375000 +v 0.250000 1.000000 -2.375000 +v 0.125000 1.216506 -2.375000 +v -0.250000 0.562500 -2.375000 +v 0.250000 0.562500 -2.375000 +v -0.216506 0.437500 -2.375000 +v -0.125000 0.345994 -2.375000 +v 0.000000 0.312500 -2.375000 +v 0.125000 0.345994 -2.375000 +v 0.216506 0.437500 -2.375000 +v 0.000000 1.125000 -2.375000 +v -0.062500 1.108253 -2.375000 +v -0.108253 1.062500 -2.375000 +v -0.125000 1.000000 -2.375000 +v -0.108253 0.937500 -2.375000 +v -0.062500 0.891747 -2.375000 +v 0.000000 0.875000 -2.375000 +v 0.062500 0.891747 -2.375000 +v 0.108253 0.937500 -2.375000 +v 0.125000 1.000000 -2.375000 +v 0.108253 1.062500 -2.375000 +v 0.062500 1.108253 -2.375000 +v 0.000000 0.687500 -2.375000 +v -0.062500 0.670753 -2.375000 +v -0.108253 0.625000 -2.375000 +v -0.125000 0.562500 -2.375000 +v -0.108253 0.500000 -2.375000 +v -0.062500 0.454247 -2.375000 +v 0.000000 0.437500 -2.375000 +v 0.062500 0.454247 -2.375000 +v 0.108253 0.500000 -2.375000 +v 0.125000 0.562500 -2.375000 +v 0.108253 0.625000 -2.375000 +v 0.062500 0.670753 -2.375000 +v 0.000000 1.125000 -1.375000 +v -0.062500 1.108253 -1.375000 +v -0.108253 1.062500 -1.375000 +v -0.125000 1.000000 -1.375000 +v -0.108253 0.937500 -1.375000 +v -0.062500 0.891747 -1.375000 +v 0.000000 0.875000 -1.375000 +v 0.062500 0.891747 -1.375000 +v 0.108253 0.937500 -1.375000 +v 0.125000 1.000000 -1.375000 +v 0.108253 1.062500 -1.375000 +v 0.062500 1.108253 -1.375000 +v 0.000000 0.687500 -1.375000 +v -0.062500 0.670753 -1.375000 +v -0.108253 0.625000 -1.375000 +v -0.125000 0.562500 -1.375000 +v -0.108253 0.500000 -1.375000 +v -0.062500 0.454247 -1.375000 +v 0.000000 0.437500 -1.375000 +v 0.062500 0.454247 -1.375000 +v 0.108253 0.500000 -1.375000 +v 0.125000 0.562500 -1.375000 +v 0.108253 0.625000 -1.375000 +v 0.062500 0.670753 -1.375000 +v 0.312500 1.125000 -2.125000 +v 0.312500 1.125000 -2.500000 +v 0.187500 1.125000 -2.125000 +v 0.187500 1.125000 -2.500000 +v 0.312500 0.437500 -2.125000 +v 0.187500 0.437500 -2.125000 +v 0.312500 0.187500 -2.375000 +v 0.312500 1.000000 -2.625000 +v 0.187500 1.000000 -2.625000 +v 0.312500 1.000000 -3.000000 +v 0.187500 1.000000 -3.000000 +v 0.312500 0.562500 -3.750000 +v 0.312500 0.875000 -3.375000 +v 0.187500 0.875000 -3.375000 +v 0.312500 -0.062500 -2.875000 +v 0.312500 -0.062500 -3.875000 +v -0.187500 1.125000 -2.125000 +v -0.187500 1.125000 -2.500000 +v -0.312500 1.125000 -2.125000 +v -0.312500 1.125000 -2.500000 +v -0.187500 0.437500 -2.125000 +v -0.312500 0.437500 -2.125000 +v -0.312500 0.187500 -2.375000 +v -0.187500 1.000000 -2.625000 +v -0.312500 1.000000 -2.625000 +v -0.187500 1.000000 -3.000000 +v -0.312500 1.000000 -3.000000 +v -0.312500 0.562500 -3.750000 +v -0.187500 0.875000 -3.375000 +v -0.312500 0.875000 -3.375000 +v -0.312500 -0.062500 -2.875000 +v -0.312500 -0.062500 -3.875000 +v -0.187500 0.769607 -3.582107 +v -0.187500 0.445183 -3.798880 +v 0.250000 0.562500 -2.000000 +v -0.250000 0.562500 -2.000000 +v 0.250000 1.000000 -2.000000 +v -0.250000 1.000000 -2.000000 +v 0.250000 0.562500 1.625000 +v -0.250000 0.562500 1.625000 +v 0.250000 1.000000 1.625000 +v -0.250000 1.000000 1.625000 +v 0.250000 0.687500 1.750000 +v -0.250000 0.687500 1.750000 +v 0.250000 0.874000 1.750000 +v -0.250000 0.874000 1.750000 +v 0.187500 0.562500 -2.000000 +v 0.187500 1.000000 -2.000000 +v -0.187500 0.562500 -2.000000 +v -0.187500 1.000000 -2.000000 +v 0.187500 0.562500 -1.375000 +v 0.187500 1.000000 -1.375000 +v -0.187500 0.562500 -1.375000 +v -0.187500 1.000000 -1.375000 +v 0.187500 1.187500 -2.375000 +v -0.187500 1.187500 -2.375000 +v 0.187500 0.437500 -2.375000 +v -0.187500 0.437500 -2.375000 +v -0.187500 0.437500 -2.875000 +v 0.187500 0.437500 -2.875000 +v -0.187500 1.187500 -2.500000 +v 0.187500 1.187500 -2.500000 +v -0.187500 -0.062500 -2.875000 +v 0.187500 -0.062500 -2.875000 +v 0.187500 -0.062500 -2.875000 +v -0.187500 -0.062500 -2.875000 +v -0.187500 0.062500 -3.875000 +v 0.187500 -0.062500 -3.875000 +v -0.187500 -0.062500 -3.875000 +v -0.187500 0.562500 -3.750000 +v 0.187500 0.562500 -3.750000 +v 0.187500 0.062500 -3.875000 +v 0.187500 0.445183 -3.798880 +v 0.187500 0.769607 -3.582107 +v 0.187500 0.986380 -3.257684 +v 0.187500 1.062500 -2.875000 +v -0.187500 0.986380 -3.257684 +v -0.187500 1.062500 -2.875000 +v 0.187500 -0.062500 -3.875000 +v -0.187500 -0.062500 -3.875000 +v -0.187500 1.062500 -2.625000 +v 0.187500 1.062500 -2.625000 +v 0.312500 0.437500 -4.125000 +v -0.312500 0.437500 -4.125000 +v 0.312500 -0.187500 -4.125000 +v -0.312500 -0.187500 -4.125000 +v -0.187500 0.437500 -3.500000 +v 0.187500 0.437500 -3.500000 +v -0.250000 -0.250000 -4.125000 +v 0.250000 -0.250000 -4.125000 +v -0.250000 0.500000 -4.125000 +v 0.250000 0.500000 -4.125000 +v -0.250000 -0.250000 -5.625000 +v -0.250000 -1.000000 -5.250000 +v 0.250000 -1.000000 -5.250000 +v 0.250000 -0.250000 -5.625000 +v 0.375000 -0.125000 -4.125000 +v 0.375000 0.375000 -4.125000 +v 0.375000 -0.875000 -5.312500 +v 0.375000 -0.375000 -5.562500 +v -0.375000 0.375000 -4.125000 +v -0.375000 -0.125000 -4.125000 +v -0.375000 -0.375000 -5.562500 +v -0.375000 -0.875000 -5.312500 +v -0.250000 -0.500000 -5.750000 +v -0.250000 -1.000000 -5.500000 +v 0.250000 -1.000000 -5.500000 +v 0.250000 -0.500000 -5.750000 +v -0.375000 -0.375000 -5.562500 +v -0.375000 -0.625000 -5.437500 +v -0.375000 -1.375000 -8.000000 +v -0.375000 0.000000 -5.562500 +v -0.375000 -0.125000 -8.000000 +v 0.375000 -0.375000 -5.562500 +v 0.375000 -0.625000 -5.437500 +v 0.375000 -1.375000 -8.000000 +v 0.375000 0.000000 -5.562500 +v 0.375000 -0.125000 -8.000000 +v 0.250000 0.000000 -8.000000 +v -0.250000 0.000000 -8.000000 +v -0.250000 -1.500000 -8.000000 +v 0.250000 -1.500000 -8.000000 +v 0.250000 -0.750000 -5.375000 +v -0.250000 -0.750000 -5.375000 +v 0.250000 0.125000 -5.562500 +v -0.250000 0.125000 -5.562500 +v 0.125000 -0.062500 -3.750000 +v -0.125000 -0.062500 -3.750000 +v -0.125000 -0.062500 -3.625000 +v 0.125000 -0.062500 -3.625000 +v 0.125000 -0.812500 -4.875000 +v -0.125000 -0.812500 -4.875000 +v 0.125000 -1.062500 -4.875000 +v -0.125000 -1.062500 -4.875000 +v 0.125000 -1.187500 -4.750000 +v -0.125000 -1.187500 -4.750000 +v 0.125000 -1.187500 -4.500000 +v -0.125000 -1.187500 -4.500000 +v 0.125000 -0.687500 -3.750000 +v -0.125000 -0.687500 -3.750000 +v 0.125000 -0.437500 -3.750000 +v -0.125000 -0.437500 -3.750000 +v 0.125000 -0.437500 -3.250000 +v -0.125000 -0.437500 -3.250000 +v 0.125000 -0.187500 -3.000000 +v -0.125000 -0.187500 -3.000000 +v 0.125000 -0.062500 -3.000000 +v -0.125000 -0.062500 -3.000000 +v 0.125000 -0.187500 -3.062500 +v -0.125000 -0.187500 -3.062500 +v 0.125000 -0.062500 -3.062500 +v -0.125000 -0.062500 -3.062500 +v 0.125000 -0.375000 -3.625000 +v -0.125000 -0.375000 -3.625000 +v 0.125000 -0.375000 -3.250000 +v -0.125000 -0.375000 -3.250000 +v 0.125000 -0.250000 -3.812500 +v -0.125000 -0.250000 -3.812500 +v 0.125000 -1.125000 -4.750000 +v -0.125000 -1.125000 -4.750000 +v 0.125000 -1.125000 -4.500000 +v -0.125000 -1.125000 -4.500000 +v 0.125000 -0.812500 -4.812500 +v -0.125000 -0.812500 -4.812500 +v 0.125000 -1.062500 -4.812500 +v -0.125000 -1.062500 -4.812500 +v 0.125000 -0.750000 -3.937500 +v -0.125000 -0.750000 -3.937500 +v 0.125000 -0.500000 -3.937500 +v -0.125000 -0.500000 -3.937500 +v 0.125000 -0.437500 -4.250000 +v -0.125000 -0.437500 -4.250000 +v 0.125000 -0.437500 -4.000000 +v -0.125000 -0.437500 -4.000000 +v 0.062500 -0.062500 -3.562500 +v -0.062500 -0.062500 -3.562500 +v 0.062500 -0.062500 -3.500000 +v -0.062500 -0.062500 -3.500000 +v 0.062500 -0.187500 -3.562500 +v -0.062500 -0.187500 -3.562500 +v 0.062500 -0.187500 -3.500000 +v -0.062500 -0.187500 -3.500000 +v 0.062500 -0.312500 -3.437500 +v -0.062500 -0.312500 -3.437500 +v 0.000000 1.625000 -2.375000 +v -0.062500 1.608253 -2.375000 +v -0.108253 1.562500 -2.375000 +v -0.125000 1.500000 -2.375000 +v -0.108253 1.437500 -2.375000 +v -0.062500 1.391747 -2.375000 +v 0.000000 1.375000 -2.375000 +v 0.062500 1.391747 -2.375000 +v 0.108253 1.437500 -2.375000 +v 0.125000 1.500000 -2.375000 +v 0.108253 1.562500 -2.375000 +v 0.062500 1.608253 -2.375000 +v 0.000000 1.625000 -1.625000 +v -0.062500 1.608253 -1.625000 +v -0.108253 1.562500 -1.625000 +v -0.125000 1.500000 -1.625000 +v -0.108253 1.437500 -1.625000 +v -0.062500 1.391747 -1.625000 +v 0.000000 1.375000 -1.625000 +v 0.062500 1.391747 -1.625000 +v 0.108253 1.437500 -1.625000 +v 0.125000 1.500000 -1.625000 +v 0.108253 1.562500 -1.625000 +v 0.062500 1.608253 -1.625000 +v 0.000000 1.640625 -2.375000 +v -0.070312 1.621785 -2.375000 +v -0.121785 1.570312 -2.375000 +v -0.140625 1.500000 -2.375000 +v -0.121785 1.429688 -2.375000 +v -0.070312 1.378215 -2.375000 +v 0.000000 1.359375 -2.375000 +v 0.070312 1.378215 -2.375000 +v 0.121785 1.429688 -2.375000 +v 0.140625 1.500000 -2.375000 +v 0.121785 1.570312 -2.375000 +v 0.070312 1.621785 -2.375000 +v 0.000000 1.640625 -2.437500 +v -0.070312 1.621785 -2.437500 +v -0.121785 1.570312 -2.437500 +v -0.140625 1.500000 -2.437500 +v -0.121785 1.429688 -2.437500 +v -0.070312 1.378215 -2.437500 +v 0.000000 1.359375 -2.437500 +v 0.070312 1.378215 -2.437500 +v 0.121785 1.429688 -2.437500 +v 0.140625 1.500000 -2.437500 +v 0.121785 1.570312 -2.437500 +v 0.070312 1.621785 -2.437500 +vt 0.004098 0.224299 +vt 0.000000 0.205607 +vt 0.004098 0.205607 +vt 0.004098 -0.000000 +vt 0.000000 0.009346 +vt 0.000000 -0.000000 +vt 0.004098 0.037383 +vt 0.000000 0.018692 +vt 0.004098 0.018692 +vt 0.004098 0.056075 +vt 0.000000 0.037383 +vt 0.000000 0.065421 +vt 0.000000 0.056075 +vt 0.004098 0.093458 +vt 0.000000 0.074766 +vt 0.004098 0.074766 +vt 0.000000 0.102804 +vt 0.000000 0.093458 +vt 0.004098 0.130841 +vt 0.000000 0.112150 +vt 0.004098 0.112150 +vt 0.000000 0.140187 +vt 0.000000 0.130841 +vt 0.004098 0.168224 +vt 0.000000 0.149533 +vt 0.004098 0.149533 +vt 0.000000 0.177570 +vt 0.000000 0.168224 +vt 0.004098 0.186916 +vt 0.000000 0.196262 +vt 0.000000 0.186916 +vt 0.073770 0.224346 +vt 0.080851 0.233668 +vt 0.073770 0.261635 +vt 0.073770 0.336468 +vt 0.080862 0.345804 +vt 0.073770 0.373812 +vt 0.286885 0.224299 +vt 0.282787 0.205607 +vt 0.286885 0.205607 +vt 0.286885 0.186916 +vt 0.282787 0.196262 +vt 0.282787 0.186916 +vt 0.286885 0.168224 +vt 0.282787 0.177570 +vt 0.282787 0.168224 +vt 0.282787 0.149533 +vt 0.286885 0.149533 +vt 0.286885 0.130841 +vt 0.282787 0.140187 +vt 0.282787 0.130841 +vt 0.282787 0.112150 +vt 0.286885 0.112150 +vt 0.286885 0.093458 +vt 0.282787 0.102804 +vt 0.282787 0.093458 +vt 0.282787 0.074766 +vt 0.286885 0.074766 +vt 0.286885 0.056075 +vt 0.282787 0.065421 +vt 0.282787 0.056075 +vt 0.282787 0.037383 +vt 0.286885 0.037383 +vt 0.282787 0.018692 +vt 0.286885 0.018692 +vt 0.286885 0.000000 +vt 0.282787 0.009346 +vt 0.282787 -0.000000 +vt 0.571329 0.341081 +vt 0.573778 0.359421 +vt 0.567782 0.345750 +vt 0.575825 0.351334 +vt 0.581967 0.364425 +vt 0.581967 0.355087 +vt 0.590157 0.359421 +vt 0.588109 0.351334 +vt 0.596152 0.345750 +vt 0.594252 0.327074 +vt 0.592606 0.341081 +vt 0.588109 0.302814 +vt 0.596152 0.243035 +vt 0.592606 0.313068 +vt 0.569683 0.327074 +vt 0.565588 0.327074 +vt 0.557370 0.359421 +vt 0.559819 0.341081 +vt 0.563365 0.345750 +vt 0.549180 0.364425 +vt 0.555323 0.351334 +vt 0.540991 0.359421 +vt 0.549180 0.355087 +vt 0.534996 0.345750 +vt 0.543038 0.351334 +vt 0.532801 0.327074 +vt 0.538542 0.341081 +vt 0.598346 0.327074 +vt 0.598346 0.261711 +vt 0.565588 0.261711 +vt 0.571329 0.313068 +vt 0.575825 0.302814 +vt 0.567782 0.243035 +vt 0.573778 0.229364 +vt 0.581967 0.299061 +vt 0.581967 0.224360 +vt 0.590157 0.229364 +vt 0.561465 0.327074 +vt 0.565560 0.327074 +vt 0.532801 0.261711 +vt 0.538542 0.313068 +vt 0.559819 0.313068 +vt 0.555323 0.302814 +vt 0.563365 0.243035 +vt 0.549180 0.299061 +vt 0.557370 0.229364 +vt 0.540991 0.229364 +vt 0.543038 0.302814 +vt 0.534996 0.243035 +vt 0.476516 0.252326 +vt 0.483607 0.224321 +vt 0.490697 0.252326 +vt 0.476543 0.364441 +vt 0.483607 0.336542 +vt 0.490670 0.364441 +vt 0.620900 0.302820 +vt 0.625399 0.275706 +vt 0.625399 0.313079 +vt 0.614754 0.299064 +vt 0.620900 0.285965 +vt 0.608608 0.302820 +vt 0.614754 0.289721 +vt 0.604109 0.313079 +vt 0.608608 0.285965 +vt 0.602462 0.327095 +vt 0.604109 0.275706 +vt 0.627046 0.261690 +vt 0.627046 0.327095 +vt 0.631143 0.327095 +vt 0.631143 0.261690 +vt 0.602462 0.261690 +vt 0.598365 0.327095 +vt 0.598365 0.261690 +vt 0.600561 0.345781 +vt 0.604109 0.341110 +vt 0.608608 0.351370 +vt 0.614754 0.355125 +vt 0.606559 0.359461 +vt 0.620900 0.351370 +vt 0.614754 0.364468 +vt 0.625399 0.341110 +vt 0.622949 0.359461 +vt 0.628948 0.345781 +vt 0.628948 0.243004 +vt 0.625399 0.247675 +vt 0.620900 0.237416 +vt 0.614754 0.233660 +vt 0.622949 0.229324 +vt 0.606559 0.229324 +vt 0.608608 0.237416 +vt 0.600561 0.243004 +vt 0.604109 0.247675 +vt 0.643444 0.310911 +vt 0.647541 0.280377 +vt 0.647541 0.308408 +vt 0.651638 0.310911 +vt 0.654638 0.271034 +vt 0.654638 0.317751 +vt 0.655736 0.327095 +vt 0.640444 0.271034 +vt 0.640444 0.317751 +vt 0.639346 0.261690 +vt 0.639346 0.327095 +vt 0.631152 0.327095 +vt 0.631152 0.261690 +vt 0.663930 0.327095 +vt 0.655736 0.261690 +vt 0.663930 0.261690 +vt 0.654638 0.336438 +vt 0.661735 0.345781 +vt 0.651638 0.343278 +vt 0.655736 0.359461 +vt 0.647541 0.345781 +vt 0.647541 0.364468 +vt 0.639346 0.359461 +vt 0.640444 0.336438 +vt 0.633347 0.345781 +vt 0.640444 0.252347 +vt 0.633347 0.243004 +vt 0.643444 0.245507 +vt 0.639346 0.229324 +vt 0.647541 0.224317 +vt 0.651638 0.245507 +vt 0.655736 0.229324 +vt 0.661735 0.243004 +vt 0.654638 0.252347 +vt 0.713115 0.186916 +vt 0.721311 0.289720 +vt 0.713115 0.289720 +vt 0.803279 0.252336 +vt 0.778689 0.271028 +vt 0.770492 0.112150 +vt 0.721311 0.485981 +vt 0.713115 0.383178 +vt 0.721311 0.383178 +vt 0.803279 0.420561 +vt 0.827869 0.467290 +vt 0.770492 0.560748 +vt 0.975410 0.317757 +vt 0.909836 0.261682 +vt 0.975410 0.261682 +vt 0.028689 0.728972 +vt 0.266393 0.663551 +vt 0.266393 0.728972 +vt 0.266393 0.588785 +vt 0.028689 0.523364 +vt 0.266393 0.523364 +vt 0.020492 0.570093 +vt 0.028689 0.588785 +vt 0.020492 0.682243 +vt 0.028689 0.663551 +vt 0.852459 0.504673 +vt 0.877049 0.392523 +vt 0.877049 0.504673 +vt 0.975410 0.635514 +vt 1.000000 0.616822 +vt 1.000000 0.635514 +vt 0.975410 0.598131 +vt 1.000000 0.598131 +vt 0.852459 0.392523 +vt 0.877049 0.317757 +vt 0.836066 0.112150 +vt 0.852459 0.186916 +vt 0.827869 0.205607 +vt 0.836066 0.560748 +vt 0.852459 0.485981 +vt 0.852459 0.579439 +vt 0.852459 0.102804 +vt 0.852459 0.000000 +vt 0.885246 0.018692 +vt 0.959016 0.158879 +vt 0.942623 0.102804 +vt 0.959016 0.102804 +vt 0.959016 0.084112 +vt 0.934426 0.037383 +vt 0.942623 0.158879 +vt 0.909836 0.242991 +vt 0.885246 0.242991 +vt 0.852459 0.158879 +vt 0.885246 0.392523 +vt 0.909836 0.317757 +vt 0.909836 0.392523 +vt 0.934426 0.224299 +vt 0.959016 0.177570 +vt 0.893443 0.485981 +vt 0.909836 0.392523 +vt 0.877049 0.392523 +vt 0.893443 0.485981 +vt 0.885246 0.504673 +vt 0.934942 0.474589 +vt 0.956208 0.442187 +vt 0.970412 0.393687 +vt 0.266393 0.738318 +vt 0.274590 0.644860 +vt 0.315574 0.663551 +vt 0.803279 0.803738 +vt 0.721311 0.803738 +vt 0.803279 0.691589 +vt 0.520492 0.691589 +vt 0.520492 0.803738 +vt 0.495902 0.710280 +vt 0.545082 0.691589 +vt 0.553279 0.710280 +vt 0.336066 0.878505 +vt 0.344262 0.887850 +vt 0.336066 0.887850 +vt 0.344262 0.934579 +vt 0.336066 0.925234 +vt 0.344262 0.925234 +vt 0.368852 0.887850 +vt 0.393443 0.878505 +vt 0.401639 0.887850 +vt 0.393443 0.934579 +vt 0.368852 0.925234 +vt 0.401639 0.925234 +vt 0.364754 0.878505 +vt 0.364754 0.934579 +vt 0.241803 0.738318 +vt 0.258197 0.728972 +vt 0.241803 0.728972 +vt 0.258197 0.738318 +vt 0.241803 0.728972 +vt 0.258197 0.728972 +vt 0.262295 0.747664 +vt 0.266393 0.785047 +vt 0.266393 0.747664 +vt 0.262295 0.785047 +vt 0.266393 0.747664 +vt 0.266393 0.785047 +vt 0.262295 0.747664 +vt 0.204918 0.794393 +vt 0.192623 0.803738 +vt 0.204918 0.831776 +vt 0.204918 0.794393 +vt 0.192623 0.803738 +vt 0.204918 0.831776 +vt 0.192623 0.841121 +vt 0.196721 0.869159 +vt 0.209016 0.841121 +vt 0.209016 0.841121 +vt 0.196721 0.869159 +vt 0.225410 0.841121 +vt 0.192623 0.897196 +vt 0.225410 0.841121 +vt 0.168033 0.785047 +vt 0.172131 0.766355 +vt 0.172131 0.785047 +vt 0.180328 0.803738 +vt 0.184426 0.785047 +vt 0.184426 0.803738 +vt 0.168033 0.803738 +vt 0.172131 0.803738 +vt 0.180328 0.785047 +vt 0.180328 0.766355 +vt 0.778689 0.803764 +vt 0.785777 0.813097 +vt 0.778689 0.841096 +vt 0.762295 0.878505 +vt 0.766393 0.869159 +vt 0.766393 0.878505 +vt 0.762295 0.822430 +vt 0.766393 0.831776 +vt 0.762295 0.831776 +vt 0.762295 0.906542 +vt 0.766393 0.915888 +vt 0.762295 0.915888 +vt 0.766393 0.887850 +vt 0.762295 0.887850 +vt 0.762295 0.841121 +vt 0.766393 0.841121 +vt 0.762295 0.813084 +vt 0.766393 0.803738 +vt 0.766393 0.813084 +vt 0.762295 0.897196 +vt 0.766393 0.897196 +vt 0.766393 0.850467 +vt 0.762295 0.850467 +vt 0.762295 0.859813 +vt 0.762295 0.869159 +vt 0.766393 0.822430 +vt 0.766393 0.906542 +vt 0.766393 0.859813 +vt 0.787992 0.831765 +vt 0.795082 0.803760 +vt 0.802173 0.831765 +vt 0.000000 0.214953 +vt 0.000000 0.028037 +vt 0.000000 0.046729 +vt 0.000000 0.084112 +vt 0.000000 0.121495 +vt 0.000000 0.158879 +vt 0.069682 0.259137 +vt 0.066690 0.233668 +vt 0.066690 0.252313 +vt 0.065594 0.242991 +vt 0.069682 0.226844 +vt 0.077859 0.226844 +vt 0.081947 0.242991 +vt 0.080851 0.252313 +vt 0.077858 0.259137 +vt 0.069676 0.371311 +vt 0.066679 0.345804 +vt 0.066679 0.364476 +vt 0.065582 0.355140 +vt 0.069676 0.338970 +vt 0.077865 0.338970 +vt 0.081959 0.355140 +vt 0.080862 0.364476 +vt 0.077865 0.371311 +vt 0.282787 0.214953 +vt 0.282787 0.158879 +vt 0.282787 0.121495 +vt 0.282787 0.084112 +vt 0.282787 0.046729 +vt 0.282787 0.028037 +vt 0.536896 0.327074 +vt 0.565560 0.261711 +vt 0.549180 0.224360 +vt 0.487700 0.259160 +vt 0.483607 0.261661 +vt 0.479513 0.259160 +vt 0.475419 0.242991 +vt 0.476516 0.233656 +vt 0.479513 0.226822 +vt 0.487700 0.226822 +vt 0.490697 0.233656 +vt 0.491794 0.242991 +vt 0.487685 0.371248 +vt 0.483607 0.373740 +vt 0.479529 0.371248 +vt 0.475451 0.355141 +vt 0.476543 0.345842 +vt 0.479529 0.339034 +vt 0.487685 0.339034 +vt 0.490670 0.345842 +vt 0.491763 0.355141 +vt 0.614754 0.224317 +vt 0.643444 0.277874 +vt 0.651638 0.277874 +vt 0.643444 0.343278 +vt 0.647541 0.243004 +vt 0.721311 0.186916 +vt 0.745902 0.289720 +vt 0.754098 0.271028 +vt 0.737705 0.149533 +vt 0.713115 0.485981 +vt 0.754098 0.401869 +vt 0.745902 0.383178 +vt 0.778689 0.401869 +vt 0.737705 0.523364 +vt 0.020492 0.542056 +vt 0.020492 0.710280 +vt 0.975410 0.616822 +vt 0.852459 0.317757 +vt 0.852459 0.093458 +vt 0.877049 0.000000 +vt 0.909836 0.018692 +vt 0.877049 0.261682 +vt 0.852459 0.261682 +vt 0.885246 0.317757 +vt 0.877049 0.504673 +vt 0.885246 0.504673 +vt 0.909836 0.485981 +vt 0.909836 0.485981 +vt 0.970417 0.393693 +vt 0.975410 0.336449 +vt 0.909836 0.317757 +vt 0.975410 0.317757 +vt 0.975410 0.336449 +vt 0.956204 0.442175 +vt 0.934941 0.474575 +vt 0.315574 0.738318 +vt 0.307377 0.757009 +vt 0.274590 0.757009 +vt 0.266393 0.663551 +vt 0.307377 0.644860 +vt 0.713115 0.785047 +vt 0.713115 0.710280 +vt 0.721311 0.691589 +vt 0.811475 0.710280 +vt 0.811475 0.785047 +vt 0.504098 0.803738 +vt 0.495902 0.785047 +vt 0.504098 0.691589 +vt 0.553279 0.785047 +vt 0.545082 0.803738 +vt 0.344262 0.878505 +vt 0.336066 0.934579 +vt 0.368852 0.878505 +vt 0.368852 0.934579 +vt 0.348361 0.878505 +vt 0.348361 0.934579 +vt 0.258197 0.738318 +vt 0.241803 0.738318 +vt 0.262295 0.785047 +vt 0.192623 0.841121 +vt 0.184426 0.850467 +vt 0.184426 0.850467 +vt 0.192623 0.897196 +vt 0.184426 0.897196 +vt 0.184426 0.897196 +vt 0.774596 0.838595 +vt 0.771600 0.813097 +vt 0.771600 0.831763 +vt 0.770503 0.822430 +vt 0.774596 0.806265 +vt 0.782781 0.806265 +vt 0.786874 0.822430 +vt 0.785777 0.831763 +vt 0.782781 0.838595 +vt 0.762295 0.803738 +vt 0.799176 0.838599 +vt 0.795082 0.841100 +vt 0.790989 0.838599 +vt 0.786895 0.822430 +vt 0.787992 0.813095 +vt 0.790989 0.806261 +vt 0.799176 0.806261 +vt 0.802173 0.813095 +vt 0.803269 0.822430 +vt 0.282787 0.149533 +vt 0.282787 0.130841 +vt 0.282787 0.018692 +vt 0.282787 0.074766 +vt 0.282787 0.205607 +vt 0.282787 0.093458 +vt 0.282787 0.112150 +vt 0.282787 0.168224 +vt 0.282787 -0.000000 +vt 0.282787 0.056075 +vt 0.282787 0.037383 +vt 0.282787 0.186916 +vt 0.663934 0.224299 +vt 0.663934 0.205607 +vt 0.663934 0.186916 +vt 0.663934 0.168224 +vt 0.663934 0.149533 +vt 0.663934 0.130841 +vt 0.663934 0.112150 +vt 0.663934 0.093458 +vt 0.663934 0.074766 +vt 0.663934 0.056075 +vt 0.663934 0.037383 +vt 0.663934 0.018692 +vt 0.663934 0.000000 +vt -0.000000 0.252336 +vt 0.065574 0.261682 +vt -0.000000 0.261682 +vt -0.000000 0.299065 +vt 0.065574 0.308411 +vt -0.000000 0.308411 +vt -0.000000 0.327103 +vt 0.065574 0.336449 +vt -0.000000 0.336449 +vt -0.000000 0.242991 +vt 0.065574 0.252336 +vt -0.000000 0.289720 +vt 0.065574 0.299065 +vt -0.000000 0.271028 +vt 0.065574 0.280374 +vt -0.000000 0.280374 +vt -0.000000 0.317757 +vt 0.065574 0.327103 +vt -0.000000 0.233645 +vt 0.065574 0.242991 +vt 0.065574 0.289720 +vt 0.065574 0.271028 +vt 0.065574 0.317757 +vt -0.000000 0.224299 +vt 0.065574 0.233645 +vt -0.000000 0.364486 +vt 0.065574 0.373832 +vt -0.000000 0.373832 +vt -0.000000 0.411215 +vt 0.065574 0.420561 +vt -0.000000 0.420561 +vt -0.000000 0.439252 +vt 0.065574 0.448598 +vt -0.000000 0.448598 +vt -0.000000 0.355140 +vt 0.065574 0.364486 +vt -0.000000 0.401869 +vt 0.065574 0.411215 +vt -0.000000 0.383178 +vt 0.065574 0.392523 +vt -0.000000 0.392523 +vt -0.000000 0.429907 +vt 0.065574 0.439252 +vt -0.000000 0.345794 +vt 0.065574 0.355140 +vt 0.065574 0.401869 +vt 0.065574 0.383178 +vt 0.065574 0.429907 +vt -0.000000 0.336449 +vt 0.065574 0.345794 +vt 0.688525 0.196262 +vt 0.704918 0.214953 +vt 0.688525 0.214953 +vt 0.688525 0.158879 +vt 0.704918 0.177570 +vt 0.688525 0.177570 +vt 0.704918 0.196262 +vt 0.688525 0.140187 +vt 0.704918 0.158879 +vt 0.688525 0.121495 +vt 0.704918 0.140187 +vt 0.704918 0.233645 +vt 0.688525 0.233645 +vt 0.688525 0.299065 +vt 0.704918 0.299065 +vt 0.409836 0.448598 +vt 0.081967 0.429907 +vt 0.409836 0.429907 +vt 0.081967 0.411215 +vt 0.409836 0.411215 +vt 0.081967 0.392523 +vt 0.409836 0.392523 +vt 0.081967 0.373832 +vt 0.409836 0.373832 +vt 0.081967 0.355140 +vt 0.409836 0.355140 +vt 0.081967 0.336449 +vt 0.409836 0.336449 +vt 0.081967 0.317757 +vt 0.409836 0.317757 +vt 0.081967 0.299065 +vt 0.409836 0.299065 +vt 0.081967 0.280374 +vt 0.409836 0.280374 +vt 0.081967 0.261682 +vt 0.409836 0.261682 +vt 0.081967 0.242991 +vt 0.409836 0.242991 +vt 0.081967 0.224299 +vt 0.409836 0.224299 +vt 0.704918 0.056075 +vt 0.688525 0.056075 +vt 0.688525 0.336449 +vt 0.704918 0.355140 +vt 0.688525 0.355140 +vt 0.688525 0.037383 +vt 0.688525 0.317757 +vt 0.704918 0.336449 +vt 0.688525 0.018692 +vt 0.704918 0.037383 +vt 0.704918 0.317757 +vt 0.688525 -0.000000 +vt 0.704918 0.018692 +vt 0.663934 0.317757 +vt 0.688525 0.336449 +vt 0.663934 0.336449 +vt 0.663934 0.214953 +vt 0.688525 0.233645 +vt 0.663934 0.233645 +vt 0.688525 0.355140 +vt 0.663934 0.355140 +vt 0.663934 0.121495 +vt 0.688525 0.140187 +vt 0.663934 0.140187 +vt 0.663934 -0.000000 +vt 0.688525 0.018692 +vt 0.663934 0.018692 +vt 0.688525 0.158879 +vt 0.663934 0.158879 +vt 0.688525 0.037383 +vt 0.663934 0.037383 +vt 0.688525 0.177570 +vt 0.663934 0.177570 +vt 0.688525 0.056075 +vt 0.663934 0.056075 +vt 0.688525 0.299065 +vt 0.663934 0.299065 +vt 0.688525 0.121495 +vt 0.688525 0.196262 +vt 0.663934 0.196262 +vt 0.688525 0.317757 +vt 0.688525 0.214953 +vt 0.409836 0.401869 +vt 0.475410 0.392523 +vt 0.475410 0.401869 +vt 0.409836 0.355140 +vt 0.475410 0.345794 +vt 0.475410 0.355140 +vt 0.409836 0.327103 +vt 0.475410 0.317757 +vt 0.475410 0.327103 +vt 0.409836 0.280374 +vt 0.475410 0.271028 +vt 0.475410 0.280374 +vt 0.409836 0.345794 +vt 0.475410 0.336449 +vt 0.409836 0.317757 +vt 0.475410 0.308411 +vt 0.409836 0.271028 +vt 0.475410 0.261682 +vt 0.409836 0.448598 +vt 0.475410 0.439252 +vt 0.475410 0.448598 +vt 0.409836 0.308411 +vt 0.475410 0.299065 +vt 0.409836 0.261682 +vt 0.475410 0.252336 +vt 0.409836 0.439252 +vt 0.475410 0.429907 +vt 0.409836 0.299065 +vt 0.475410 0.289720 +vt 0.409836 0.392523 +vt 0.475410 0.383178 +vt 0.409836 0.252336 +vt 0.475410 0.242991 +vt 0.409836 0.429907 +vt 0.475410 0.420561 +vt 0.409836 0.289720 +vt 0.409836 0.383178 +vt 0.475410 0.373832 +vt 0.409836 0.242991 +vt 0.475410 0.233645 +vt 0.409836 0.420561 +vt 0.475410 0.411215 +vt 0.409836 0.373832 +vt 0.475410 0.364486 +vt 0.409836 0.233645 +vt 0.475410 0.224299 +vt 0.409836 0.411215 +vt 0.409836 0.364486 +vt 0.409836 0.336449 +vt 0.475410 0.336449 +vt 0.745902 0.308411 +vt 0.754098 0.289720 +vt 0.778689 0.289720 +vt 0.754098 0.308411 +vt 0.803279 0.289720 +vt 0.778689 0.308411 +vt 0.721311 0.018692 +vt 0.737705 0.093458 +vt 0.721311 0.074766 +vt 0.721311 0.364486 +vt 0.745902 0.364486 +vt 0.754098 0.364486 +vt 0.778689 0.364486 +vt 0.754098 0.383178 +vt 0.803279 0.364486 +vt 0.778689 0.383178 +vt 0.827869 0.383178 +vt 0.827869 0.364486 +vt 0.852459 0.383178 +vt 0.770492 0.093458 +vt 0.836066 0.074766 +vt 0.840164 0.093458 +vt 0.000000 0.588785 +vt 0.008197 0.663551 +vt 0.000000 0.663551 +vt 0.020492 0.588785 +vt 0.020492 0.663551 +vt 0.008197 0.588785 +vt 0.225410 0.514019 +vt 0.028689 0.448598 +vt 0.225410 0.654206 +vt 0.836066 0.018692 +vt 0.770492 0.000000 +vt 0.836066 0.000000 +vt 0.770492 0.074766 +vt 0.827869 0.308411 +vt 0.803279 0.308411 +vt 0.803279 0.383178 +vt 1.000000 0.504673 +vt 0.975410 0.560748 +vt 0.975410 0.504673 +vt 1.000000 0.336449 +vt 0.975410 0.392523 +vt 1.000000 0.317757 +vt 1.000000 0.392523 +vt 0.975410 0.448598 +vt 1.000000 0.560748 +vt 1.000000 0.448598 +vt 0.852459 0.289720 +vt 0.827869 0.289720 +vt 0.852459 -0.000000 +vt 0.426230 0.663551 +vt 0.442623 0.738318 +vt 0.426230 0.738318 +vt 0.336066 0.448598 +vt 0.426230 0.523364 +vt 0.336066 0.523364 +vt 0.319672 0.635514 +vt 0.426230 0.635514 +vt 0.319672 0.766355 +vt 0.331967 0.551402 +vt 0.426230 0.850467 +vt 0.442623 0.766355 +vt 0.442623 0.850467 +vt 0.426230 0.551402 +vt 0.331967 0.850467 +vt 0.426230 0.766355 +vt 0.336066 0.878505 +vt 0.426230 0.878505 +vt 0.475410 0.663551 +vt 0.475410 0.738318 +vt 0.491803 0.738318 +vt 0.491803 0.663551 +vt 0.442623 0.635514 +vt 0.442623 0.551402 +vt 0.553279 0.813084 +vt 0.536885 0.392523 +vt 0.713115 0.364486 +vt 0.713115 0.392523 +vt 0.553279 0.682243 +vt 0.713115 0.682243 +vt 0.536885 0.467290 +vt 0.713115 0.495327 +vt 0.536885 0.495327 +vt 0.713115 1.000000 +vt 0.553279 0.869159 +vt 0.713115 0.813084 +vt 0.553279 0.626168 +vt 0.545082 0.588785 +vt 0.147541 0.897196 +vt 0.057377 0.934579 +vt 0.057377 0.897196 +vt 0.163934 0.897196 +vt 0.147541 0.934579 +vt 0.176230 0.897196 +vt 0.163934 0.934579 +vt 0.192623 0.897196 +vt 0.176230 0.934579 +vt 0.250000 0.897196 +vt 0.192623 0.934579 +vt 0.266393 0.897196 +vt 0.250000 0.934579 +vt 0.336066 0.971963 +vt 0.348361 0.971963 +vt 0.364754 0.971963 +vt 0.368852 0.971963 +vt 0.409836 0.934579 +vt 0.393443 0.971963 +vt 0.409836 0.971963 +vt 0.426230 0.934579 +vt 0.426230 0.971963 +vt 0.077869 0.728972 +vt 0.061475 0.766355 +vt 0.061475 0.728972 +vt 0.077869 0.766355 +vt 0.086066 0.728972 +vt 0.086066 0.766355 +vt 0.102459 0.728972 +vt 0.020492 0.766355 +vt 0.168033 0.766355 +vt 0.184426 0.728972 +vt 0.184426 0.766355 +vt 0.143443 0.728972 +vt 0.102459 0.766355 +vt 0.159836 0.728972 +vt 0.143443 0.766355 +vt 0.159836 0.766355 +vt 0.168033 0.728972 +vt 0.159836 0.803738 +vt 0.159836 0.785047 +vt 0.168033 0.766355 +vt 0.770492 0.018692 +vt 0.737705 0.000000 +vt 0.721311 -0.000000 +vt 0.721311 0.093458 +vt 0.713115 0.850467 +vt 0.713115 0.897196 +vt 0.713115 0.906542 +vt 0.713115 0.803738 +vt 0.713115 0.813084 +vt 0.713115 0.859813 +vt 0.713115 0.822430 +vt 0.713115 0.869159 +vt 0.713115 0.831776 +vt 0.713115 0.878505 +vt 0.713115 0.841121 +vt 0.713115 0.887850 +vt 0.770492 0.813084 +vt 0.770492 0.897196 +vt 0.770492 0.850467 +vt 0.770492 0.869159 +vt 0.770492 0.822430 +vt 0.770492 0.906542 +vt 0.770492 0.859813 +vt 0.770492 0.878505 +vt 0.770492 0.831776 +vt 0.770492 0.915888 +vt 0.770492 0.887850 +vt 0.770492 0.841121 +vt 0.282787 0.224299 +vt 0.065574 0.224299 +vt 0.065574 0.336449 +vt 0.704918 0.121495 +vt 0.081967 0.448598 +vt 0.704918 0.000000 +vt 0.688525 -0.000000 +vt 0.409836 0.336449 +vt 0.409836 0.224299 +vt 0.721311 0.308411 +vt 0.266393 0.448598 +vt 0.225410 0.457944 +vt 0.266393 0.457944 +vt 0.266393 0.514019 +vt 0.225410 0.598131 +vt 0.266393 0.598131 +vt 0.266393 0.654206 +vt 0.442623 0.663551 +vt 0.426230 0.448598 +vt 0.536885 0.364486 +vt 0.713115 0.467290 +vt 0.545082 0.906542 +vt 0.266393 0.934579 +vt 0.344262 0.971963 +vt 0.020492 0.728972 +vt 0.159836 0.766355 +vt 0.713115 0.915888 +vt 0.770492 0.803738 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.8944 0.4472 +vn 0.0000 0.4472 0.8944 +vn -0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.9914 0.1305 0.0000 +vn 0.9914 0.1305 0.0000 +vn 0.9914 -0.1305 0.0000 +vn -0.9914 -0.1305 0.0000 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9871 -0.1602 +vn 0.0000 0.8736 -0.4866 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.8112 0.5847 +vn 0.0000 0.9024 -0.4308 +vn 0.0000 0.9487 -0.3162 +vn 0.0000 -0.9732 0.2298 +vn 0.0000 -0.9522 0.3054 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.9231 0.3845 +vn 0.0000 0.3808 0.9246 +vn 0.0000 0.9952 -0.0980 +vn 0.0000 0.0980 -0.9952 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.8944 0.4472 +vn 0.3702 0.6646 -0.6490 +vn -0.4346 -0.0292 -0.9002 +vn -0.3702 0.6646 -0.6490 +vn 0.3158 0.8487 -0.4243 +vn -0.3158 0.8487 -0.4243 +vn -0.3875 -0.7728 0.5027 +vn 0.3803 -0.8832 0.2744 +vn 0.3875 -0.7728 0.5027 +vn 0.8592 0.4574 -0.2292 +vn 0.9085 0.1932 -0.3706 +vn -0.8592 0.4574 -0.2292 +vn 0.9547 -0.2517 0.1590 +vn -0.9201 -0.3912 -0.0217 +vn -0.4362 -0.7533 -0.4922 +vn 0.9201 -0.3912 -0.0217 +vn -0.9547 -0.2517 0.1590 +vn -0.9085 0.1932 -0.3706 +vn -0.3803 -0.8832 0.2744 +vn 0.4362 -0.7533 -0.4922 +vn 0.4346 -0.0292 -0.9002 +vn -0.3867 0.9210 -0.0472 +vn -0.9193 0.3932 -0.0202 +vn -0.3779 0.9246 -0.0474 +vn -0.3846 -0.8870 0.2557 +vn -0.8923 -0.4340 0.1241 +vn -0.3487 -0.9012 0.2575 +vn 0.3867 0.9210 -0.0472 +vn 0.9193 0.3932 -0.0202 +vn 0.9281 0.3719 -0.0191 +vn 0.3846 -0.8870 0.2557 +vn 0.8923 -0.4340 0.1241 +vn 0.9180 -0.3806 0.1114 +vn 0.3779 0.9246 -0.0474 +vn -0.9281 0.3719 -0.0191 +vn 0.0000 0.4719 -0.8817 +vn 0.0000 0.8321 -0.5547 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.9571 0.2898 +vn 0.0000 -0.4719 0.8817 +vn 0.0000 0.9571 0.2898 +vn 0.0000 0.0985 0.9951 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9571 -0.2898 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.2298 0.9732 +vn 0.0000 -0.7071 -0.7071 +vn -0.9180 -0.3806 0.1114 +vn 0.3487 -0.9012 0.2575 +s off +f 7/1/1 54/2/1 6/3/1 +f 7/4/1 56/5/1 55/6/1 +f 9/7/1 56/8/1 8/9/1 +f 10/10/1 57/11/1 9/7/1 +f 10/10/1 59/12/1 58/13/1 +f 12/14/1 59/15/1 11/16/1 +f 12/14/1 49/17/1 60/18/1 +f 2/19/1 49/20/1 1/21/1 +f 2/19/1 51/22/1 50/23/1 +f 4/24/1 51/25/1 3/26/1 +f 4/24/1 53/27/1 52/28/1 +f 5/29/1 54/30/1 53/31/1 +f 67/32/1 69/33/1 61/34/1 +f 91/35/1 93/36/1 85/37/1 +f 43/38/1 78/39/1 42/40/1 +f 41/41/1 78/42/1 77/43/1 +f 40/44/1 77/45/1 76/46/1 +f 40/44/1 75/47/1 39/48/1 +f 38/49/1 75/50/1 74/51/1 +f 38/49/1 73/52/1 37/53/1 +f 48/54/1 73/55/1 84/56/1 +f 48/54/1 83/57/1 47/58/1 +f 46/59/1 83/60/1 82/61/1 +f 46/59/1 81/62/1 45/63/1 +f 45/63/1 80/64/1 44/65/1 +f 43/66/1 80/67/1 79/68/1 +f 107/69/2 115/70/2 114/71/2 +f 108/72/2 109/73/2 115/70/2 +f 97/74/2 110/75/2 109/73/2 +f 98/76/2 111/77/2 110/75/2 +f 100/78/2 111/77/2 99/79/2 +f 102/80/2 160/81/2 101/82/2 +f 106/83/2 114/71/2 113/84/2 +f 122/85/1 133/86/1 121/87/1 +f 116/88/1 134/89/1 122/85/1 +f 117/90/1 123/91/1 116/88/1 +f 118/92/1 124/93/1 117/90/1 +f 119/94/1 125/95/1 118/92/1 +f 112/96/2 101/82/2 159/97/2 +f 165/98/2 105/99/2 113/84/2 +f 104/100/2 164/101/2 163/102/2 +f 103/103/2 163/102/2 162/104/2 +f 103/103/2 161/105/2 102/80/2 +f 121/87/1 132/106/1 120/107/1 +f 166/108/1 127/109/1 119/94/1 +f 120/107/1 132/106/1 131/110/1 +f 130/111/1 171/112/1 131/110/1 +f 129/113/1 170/114/1 130/111/1 +f 168/115/1 129/113/1 128/116/1 +f 167/117/1 128/116/1 127/109/1 +f 247/118/2 243/119/2 239/120/2 +f 235/121/2 231/122/2 227/123/2 +f 20/124/1 145/125/1 21/126/1 +f 19/127/1 146/128/1 20/124/1 +f 18/129/1 135/130/1 19/127/1 +f 17/131/1 136/132/1 18/129/1 +f 16/133/1 137/134/1 17/131/1 +f 21/126/1 144/135/1 22/136/1 +f 177/137/1 144/135/1 186/138/1 +f 138/139/1 176/140/1 180/141/1 +f 175/142/1 16/133/1 15/143/1 +f 14/144/1 175/142/1 15/143/1 +f 13/145/1 174/146/1 14/144/1 +f 24/147/1 173/148/1 13/145/1 +f 23/149/1 179/150/1 24/147/1 +f 22/136/1 178/151/1 23/149/1 +f 185/152/1 144/135/1 143/153/1 +f 142/154/1 185/152/1 143/153/1 +f 141/155/1 184/156/1 142/154/1 +f 182/157/1 141/155/1 140/158/1 +f 181/159/1 140/158/1 139/160/1 +f 180/141/1 139/160/1 138/139/1 +f 208/161/2 213/162/2 207/163/2 +f 213/162/2 206/164/2 207/163/2 +f 206/164/2 215/165/2 205/166/2 +f 215/165/2 204/167/2 205/166/2 +f 223/168/2 208/161/2 209/169/2 +f 222/170/2 209/169/2 210/171/2 +f 222/170/2 192/172/2 195/173/2 +f 190/174/2 216/175/2 194/176/2 +f 203/177/2 190/174/2 189/178/2 +f 202/179/2 189/178/2 187/180/2 +f 201/181/2 187/180/2 188/182/2 +f 193/183/2 201/181/2 188/182/2 +f 211/184/2 193/183/2 191/185/2 +f 192/172/2 211/184/2 191/185/2 +f 221/186/2 195/173/2 200/187/2 +f 220/188/2 200/187/2 199/189/2 +f 198/190/2 220/188/2 199/189/2 +f 218/191/2 198/190/2 197/192/2 +f 196/193/2 218/191/2 197/192/2 +f 194/176/2 217/194/2 196/193/2 +f 254/195/1 249/196/1 251/197/1 +f 261/198/3 258/199/3 263/200/3 +f 270/201/1 265/202/1 267/203/1 +f 278/204/4 276/205/4 279/206/4 +f 327/207/5 311/208/5 328/209/5 +f 288/210/4 286/211/4 284/212/4 +f 285/213/3 287/214/3 283/215/3 +f 293/216/3 287/214/3 289/217/3 +f 288/210/4 294/218/4 290/219/4 +f 304/220/1 305/221/1 303/222/1 +f 303/223/6 309/224/6 304/225/6 +f 309/224/7 330/226/7 329/227/7 +f 306/228/5 308/229/5 305/221/5 +f 264/230/3 331/231/3 260/232/3 +f 280/233/4 332/234/4 334/235/4 +f 254/236/4 251/237/4 257/238/4 +f 318/239/8 336/240/8 319/241/8 +f 319/242/4 336/240/4 262/243/4 +f 335/244/3 274/245/3 272/246/3 +f 254/236/6 335/244/6 269/247/6 +f 307/248/1 312/249/1 308/250/1 +f 277/251/3 335/244/3 318/252/3 +f 329/253/4 307/254/4 306/255/4 +f 330/256/3 310/257/3 303/222/3 +f 325/258/4 281/259/4 307/254/4 +f 308/250/3 312/249/3 321/260/3 +f 337/261/1 345/262/1 340/263/1 +f 359/264/2 361/265/2 364/266/2 +f 362/267/9 357/268/9 371/269/9 +f 362/267/1 365/270/1 373/271/1 +f 400/272/4 394/273/4 396/274/4 +f 397/275/3 395/276/3 393/277/3 +f 392/278/4 402/279/4 390/280/4 +f 401/281/3 391/282/3 389/283/3 +f 394/273/4 404/284/4 392/278/4 +f 403/285/3 393/277/3 391/282/3 +f 410/286/4 384/287/4 386/288/4 +f 407/289/3 385/290/3 383/291/3 +f 414/292/4 380/293/4 382/294/4 +f 411/295/3 381/296/3 379/297/3 +f 384/287/4 414/292/4 382/294/4 +f 413/298/3 383/291/3 381/296/3 +f 386/288/4 416/299/4 410/286/4 +f 388/300/4 418/301/4 416/299/4 +f 385/290/3 415/302/3 387/303/3 +f 387/303/3 417/304/3 389/305/3 +f 406/306/4 422/307/4 418/301/4 +f 389/305/3 421/308/3 405/309/3 +f 380/293/4 420/310/4 376/311/4 +f 379/297/3 419/312/3 411/295/3 +f 420/310/4 422/307/4 406/306/4 +f 405/309/3 421/308/3 419/312/3 +f 428/313/4 432/314/4 430/315/4 +f 425/316/3 427/317/3 423/318/3 +f 424/319/4 430/315/4 426/320/4 +f 429/321/3 431/322/3 427/317/3 +f 451/323/1 453/324/1 445/325/1 +f 435/326/1 458/327/1 459/328/1 +f 441/329/1 466/330/1 442/331/1 +f 438/332/1 463/333/1 439/334/1 +f 435/326/1 460/335/1 436/336/1 +f 443/337/1 466/330/1 467/338/1 +f 440/339/1 463/340/1 464/341/1 +f 437/342/1 460/335/1 461/343/1 +f 443/337/1 468/344/1 444/345/1 +f 433/346/1 458/327/1 434/347/1 +f 440/339/1 465/348/1 441/329/1 +f 438/332/1 461/343/1 462/349/1 +f 433/346/1 468/344/1 457/350/1 +f 479/351/2 475/352/2 471/353/2 +f 7/1/1 55/354/1 54/2/1 +f 7/4/1 8/9/1 56/5/1 +f 9/7/1 57/355/1 56/8/1 +f 10/10/1 58/356/1 57/11/1 +f 10/10/1 11/16/1 59/12/1 +f 12/14/1 60/357/1 59/15/1 +f 12/14/1 1/21/1 49/17/1 +f 2/19/1 50/358/1 49/20/1 +f 2/19/1 3/26/1 51/22/1 +f 4/24/1 52/359/1 51/25/1 +f 4/24/1 5/29/1 53/27/1 +f 5/29/1 6/3/1 54/30/1 +f 61/34/1 62/360/1 65/361/1 +f 62/360/1 63/362/1 65/361/1 +f 63/362/1 64/363/1 65/361/1 +f 65/361/1 66/364/1 67/32/1 +f 67/32/1 68/365/1 69/33/1 +f 69/33/1 70/366/1 71/367/1 +f 71/367/1 72/368/1 69/33/1 +f 72/368/1 61/34/1 69/33/1 +f 65/361/1 67/32/1 61/34/1 +f 85/37/1 86/369/1 89/370/1 +f 86/369/1 87/371/1 89/370/1 +f 87/371/1 88/372/1 89/370/1 +f 89/370/1 90/373/1 91/35/1 +f 91/35/1 92/374/1 93/36/1 +f 93/36/1 94/375/1 95/376/1 +f 95/376/1 96/377/1 93/36/1 +f 96/377/1 85/37/1 93/36/1 +f 89/370/1 91/35/1 85/37/1 +f 43/38/1 79/378/1 78/39/1 +f 41/41/1 42/40/1 78/42/1 +f 40/44/1 41/41/1 77/45/1 +f 40/44/1 76/379/1 75/47/1 +f 38/49/1 39/48/1 75/50/1 +f 38/49/1 74/380/1 73/52/1 +f 48/54/1 37/53/1 73/55/1 +f 48/54/1 84/381/1 83/57/1 +f 46/59/1 47/58/1 83/60/1 +f 46/59/1 82/382/1 81/62/1 +f 45/63/1 81/383/1 80/64/1 +f 43/66/1 44/65/1 80/67/1 +f 107/69/2 108/72/2 115/70/2 +f 108/72/2 97/74/2 109/73/2 +f 97/74/2 98/76/2 110/75/2 +f 98/76/2 99/79/2 111/77/2 +f 100/78/2 112/96/2 111/77/2 +f 102/80/2 161/105/2 160/81/2 +f 106/83/2 107/69/2 114/71/2 +f 122/85/1 134/89/1 133/86/1 +f 116/88/1 123/91/1 134/89/1 +f 117/90/1 124/93/1 123/91/1 +f 118/92/1 125/95/1 124/93/1 +f 119/94/1 126/384/1 125/95/1 +f 100/78/2 101/82/2 112/96/2 +f 101/82/2 160/81/2 159/97/2 +f 164/101/2 105/99/2 165/98/2 +f 105/99/2 106/83/2 113/84/2 +f 104/100/2 105/99/2 164/101/2 +f 103/103/2 104/100/2 163/102/2 +f 103/103/2 162/104/2 161/105/2 +f 121/87/1 133/86/1 132/106/1 +f 167/117/1 127/109/1 166/108/1 +f 127/109/1 126/384/1 119/94/1 +f 171/112/1 172/385/1 131/110/1 +f 172/385/1 120/107/1 131/110/1 +f 130/111/1 170/114/1 171/112/1 +f 129/113/1 169/386/1 170/114/1 +f 168/115/1 169/386/1 129/113/1 +f 167/117/1 168/115/1 128/116/1 +f 239/120/2 238/387/2 237/388/2 +f 237/388/2 248/389/2 239/120/2 +f 248/389/2 247/118/2 239/120/2 +f 247/118/2 246/390/2 243/119/2 +f 246/390/2 245/391/2 243/119/2 +f 245/391/2 244/392/2 243/119/2 +f 243/119/2 242/393/2 241/394/2 +f 241/394/2 240/395/2 243/119/2 +f 240/395/2 239/120/2 243/119/2 +f 227/123/2 226/396/2 225/397/2 +f 225/397/2 236/398/2 227/123/2 +f 236/398/2 235/121/2 227/123/2 +f 235/121/2 234/399/2 231/122/2 +f 234/399/2 233/400/2 231/122/2 +f 233/400/2 232/401/2 231/122/2 +f 231/122/2 230/402/2 229/403/2 +f 229/403/2 228/404/2 231/122/2 +f 228/404/2 227/123/2 231/122/2 +f 20/124/1 146/128/1 145/125/1 +f 19/127/1 135/130/1 146/128/1 +f 18/129/1 136/132/1 135/130/1 +f 17/131/1 137/134/1 136/132/1 +f 16/133/1 138/139/1 137/134/1 +f 21/126/1 145/125/1 144/135/1 +f 177/137/1 22/136/1 144/135/1 +f 138/139/1 16/133/1 176/140/1 +f 175/142/1 176/140/1 16/133/1 +f 14/144/1 174/146/1 175/142/1 +f 13/145/1 173/148/1 174/146/1 +f 24/147/1 179/150/1 173/148/1 +f 23/149/1 178/151/1 179/150/1 +f 22/136/1 177/137/1 178/151/1 +f 185/152/1 186/138/1 144/135/1 +f 142/154/1 184/156/1 185/152/1 +f 141/155/1 183/405/1 184/156/1 +f 182/157/1 183/405/1 141/155/1 +f 181/159/1 182/157/1 140/158/1 +f 180/141/1 181/159/1 139/160/1 +f 208/161/2 224/406/2 213/162/2 +f 213/162/2 214/407/2 206/164/2 +f 206/164/2 214/407/2 215/165/2 +f 215/165/2 216/175/2 204/167/2 +f 223/168/2 224/406/2 208/161/2 +f 222/170/2 223/168/2 209/169/2 +f 222/170/2 210/171/2 192/172/2 +f 190/174/2 204/167/2 216/175/2 +f 203/177/2 204/167/2 190/174/2 +f 202/179/2 203/177/2 189/178/2 +f 201/181/2 202/179/2 187/180/2 +f 193/183/2 212/408/2 201/181/2 +f 211/184/2 212/408/2 193/183/2 +f 192/172/2 210/171/2 211/184/2 +f 221/186/2 222/170/2 195/173/2 +f 220/188/2 221/186/2 200/187/2 +f 198/190/2 219/409/2 220/188/2 +f 218/191/2 219/409/2 198/190/2 +f 196/193/2 217/194/2 218/191/2 +f 194/176/2 216/175/2 217/194/2 +f 254/195/1 253/410/1 249/196/1 +f 250/411/3 249/196/3 256/412/3 +f 249/196/3 253/410/3 256/412/3 +f 253/410/3 255/413/3 256/412/3 +f 255/413/3 263/200/3 258/199/3 +f 256/412/3 255/413/3 258/199/3 +f 263/200/3 264/230/3 260/232/3 +f 260/232/3 261/198/3 263/200/3 +f 270/201/1 269/414/1 265/202/1 +f 270/201/4 267/203/4 273/415/4 +f 267/203/4 268/416/4 273/415/4 +f 273/415/4 275/417/4 271/418/4 +f 275/417/4 278/204/4 279/206/4 +f 279/206/4 271/418/4 275/417/4 +f 271/418/4 270/201/4 273/415/4 +f 276/205/4 280/233/4 279/206/4 +f 327/207/5 312/249/5 311/208/5 +f 288/210/4 290/219/4 286/211/4 +f 285/213/3 289/217/3 287/214/3 +f 293/216/3 291/419/3 287/214/3 +f 288/210/4 292/420/4 294/218/4 +f 304/220/1 306/228/1 305/221/1 +f 303/223/6 310/421/6 309/224/6 +f 309/224/7 310/421/7 330/226/7 +f 306/228/5 307/422/5 308/229/5 +f 264/230/3 333/423/3 331/231/3 +f 280/233/4 276/205/4 332/234/4 +f 251/237/4 252/424/4 257/238/4 +f 257/238/4 259/425/4 336/240/4 +f 259/425/4 262/243/4 336/240/4 +f 336/240/4 254/236/4 257/238/4 +f 318/239/8 335/244/8 336/240/8 +f 272/246/3 266/426/3 265/427/3 +f 265/427/3 269/247/3 272/246/3 +f 269/247/3 335/244/3 272/246/3 +f 335/244/3 277/251/3 274/245/3 +f 254/236/6 336/240/6 335/244/6 +f 307/248/1 311/428/1 312/249/1 +f 306/255/4 304/429/4 329/253/4 +f 304/429/4 309/430/4 329/253/4 +f 329/253/4 326/431/4 307/254/4 +f 303/222/3 305/221/3 330/256/3 +f 305/221/3 308/250/3 330/256/3 +f 308/250/3 324/432/3 330/256/3 +f 281/259/4 282/433/4 307/254/4 +f 282/433/4 315/434/4 311/435/4 +f 307/254/4 282/433/4 311/435/4 +f 315/434/4 328/436/4 311/435/4 +f 307/254/4 326/431/4 325/258/4 +f 312/249/3 327/207/3 320/437/3 +f 320/437/3 321/260/3 312/249/3 +f 321/260/3 322/438/3 308/250/3 +f 322/438/3 323/439/3 308/250/3 +f 323/439/3 324/432/3 308/250/3 +f 340/263/1 339/440/1 349/441/1 +f 349/441/1 350/442/1 337/261/1 +f 337/261/1 338/443/1 345/262/1 +f 345/262/1 346/444/1 340/263/1 +f 340/263/1 349/441/1 337/261/1 +f 361/265/2 368/445/2 367/446/2 +f 367/446/2 366/447/2 361/265/2 +f 366/447/2 364/266/2 361/265/2 +f 364/266/2 370/448/2 369/449/2 +f 369/449/2 359/264/2 364/266/2 +f 358/450/9 372/451/9 357/268/9 +f 372/451/9 371/269/9 357/268/9 +f 371/269/9 363/452/9 362/267/9 +f 373/271/1 374/453/1 357/268/1 +f 374/453/1 360/454/1 357/268/1 +f 357/268/1 362/267/1 373/271/1 +f 400/272/4 398/455/4 394/273/4 +f 397/275/3 399/456/3 395/276/3 +f 392/278/4 404/457/4 402/279/4 +f 401/281/3 403/458/3 391/282/3 +f 394/273/4 398/459/4 404/284/4 +f 403/285/3 397/460/3 393/277/3 +f 410/286/4 408/461/4 384/287/4 +f 407/289/3 409/462/3 385/290/3 +f 414/292/4 412/463/4 380/293/4 +f 411/295/3 413/298/3 381/296/3 +f 384/287/4 408/461/4 414/292/4 +f 413/298/3 407/289/3 383/291/3 +f 386/288/4 388/300/4 416/299/4 +f 388/300/4 390/464/4 418/301/4 +f 385/290/3 409/462/3 415/302/3 +f 387/303/3 415/302/3 417/304/3 +f 418/301/4 390/464/4 406/306/4 +f 390/464/4 402/465/4 406/306/4 +f 405/309/3 401/466/3 389/305/3 +f 389/305/3 417/304/3 421/308/3 +f 380/293/4 412/463/4 420/310/4 +f 379/297/3 375/467/3 419/312/3 +f 377/468/4 376/311/4 406/306/4 +f 376/311/4 420/310/4 406/306/4 +f 419/312/3 375/467/3 405/309/3 +f 375/467/3 378/469/3 405/309/3 +f 425/316/3 429/321/3 427/317/3 +f 424/319/4 428/313/4 430/315/4 +f 445/325/1 446/470/1 449/471/1 +f 446/470/1 447/472/1 449/471/1 +f 447/472/1 448/473/1 449/471/1 +f 449/471/1 450/474/1 451/323/1 +f 451/323/1 452/475/1 453/324/1 +f 453/324/1 454/476/1 455/477/1 +f 455/477/1 456/478/1 453/324/1 +f 456/478/1 445/325/1 453/324/1 +f 449/471/1 451/323/1 445/325/1 +f 435/326/1 434/347/1 458/327/1 +f 441/329/1 465/348/1 466/330/1 +f 438/332/1 462/349/1 463/333/1 +f 435/326/1 459/328/1 460/335/1 +f 443/337/1 442/331/1 466/330/1 +f 440/339/1 439/479/1 463/340/1 +f 437/342/1 436/336/1 460/335/1 +f 443/337/1 467/338/1 468/344/1 +f 433/346/1 457/350/1 458/327/1 +f 440/339/1 464/341/1 465/348/1 +f 438/332/1 437/342/1 461/343/1 +f 433/346/1 444/345/1 468/344/1 +f 471/353/2 470/480/2 469/481/2 +f 469/481/2 480/482/2 471/353/2 +f 480/482/2 479/351/2 471/353/2 +f 479/351/2 478/483/2 475/352/2 +f 478/483/2 477/484/2 475/352/2 +f 477/484/2 476/485/2 475/352/2 +f 475/352/2 474/486/2 473/487/2 +f 473/487/2 472/488/2 475/352/2 +f 472/488/2 471/353/2 475/352/2 +s 1 +f 27/489/10 4/24/4 3/26/10 +f 26/490/11 3/26/10 2/19/11 +f 32/491/12 9/7/13 8/9/12 +f 35/492/14 12/14/15 11/16/14 +f 30/493/16 7/1/5 6/3/16 +f 36/494/15 1/21/6 12/14/15 +f 25/495/6 2/19/11 1/21/6 +f 28/496/4 5/29/17 4/24/4 +f 31/497/5 8/9/12 7/4/5 +f 34/498/3 11/16/14 10/10/3 +f 33/499/13 10/10/3 9/7/13 +f 29/500/17 6/3/16 5/29/17 +f 19/501/5 42/40/16 18/502/16 +f 18/502/16 41/41/17 17/503/17 +f 17/503/17 40/44/4 16/504/4 +f 16/504/4 39/48/10 15/505/10 +f 15/505/10 38/49/11 14/506/11 +f 14/506/11 37/53/6 13/507/6 +f 13/507/6 48/54/15 24/508/15 +f 24/508/15 47/58/14 23/509/14 +f 23/509/14 46/59/3 22/510/3 +f 22/510/3 45/63/13 21/511/13 +f 21/511/13 44/65/12 20/512/12 +f 20/512/12 43/66/5 19/513/5 +f 52/514/3 63/515/13 51/516/13 +f 59/517/17 70/518/4 58/519/4 +f 56/520/11 67/521/6 55/522/6 +f 53/523/14 64/524/3 52/514/3 +f 60/525/16 71/526/17 59/517/17 +f 50/527/12 61/528/5 49/529/5 +f 57/530/10 68/531/11 56/520/11 +f 54/532/15 65/533/14 53/523/14 +f 49/529/5 72/534/16 60/525/16 +f 51/516/13 62/535/12 50/527/12 +f 58/519/4 69/536/10 57/530/10 +f 55/537/6 66/538/15 54/532/15 +f 76/539/3 87/540/13 75/541/13 +f 83/542/17 94/543/4 82/544/4 +f 80/545/11 91/546/6 79/547/6 +f 77/548/14 88/549/3 76/539/3 +f 84/550/16 95/551/17 83/542/17 +f 74/552/12 85/553/5 73/554/5 +f 81/555/10 92/556/11 80/545/11 +f 78/557/15 89/558/14 77/548/14 +f 73/554/5 96/559/16 84/550/16 +f 75/541/13 86/560/12 74/552/12 +f 82/544/4 93/561/10 81/555/10 +f 79/562/6 90/563/15 78/557/15 +f 115/564/15 121/565/14 114/566/14 +f 110/567/11 116/568/6 109/569/6 +f 109/569/6 122/570/15 115/564/15 +f 111/571/10 117/572/11 110/567/11 +f 112/573/18 118/574/10 111/571/10 +f 114/566/14 120/575/19 113/576/19 +f 165/577/20 120/575/19 172/578/20 +f 141/579/5 152/580/16 140/581/16 +f 140/581/16 151/582/17 139/583/17 +f 139/583/17 150/584/4 138/585/4 +f 138/585/4 149/586/10 137/587/10 +f 137/587/10 148/588/11 136/589/11 +f 136/589/11 147/590/6 135/591/6 +f 135/591/6 158/592/15 146/593/15 +f 146/593/15 157/594/14 145/595/14 +f 145/595/14 156/596/3 144/597/3 +f 144/597/3 155/598/13 143/599/13 +f 143/599/13 154/600/12 142/601/12 +f 142/601/12 153/602/5 141/603/5 +f 166/604/21 112/573/18 159/605/21 +f 163/606/12 169/607/5 162/608/5 +f 160/609/17 166/604/21 159/605/21 +f 164/610/13 170/611/12 163/606/12 +f 161/612/16 167/613/17 160/609/17 +f 165/577/20 171/614/13 164/610/13 +f 162/615/5 168/616/16 161/612/16 +f 181/617/17 197/618/16 182/619/16 +f 175/620/10 190/621/18 176/622/18 +f 182/619/16 198/623/5 183/624/5 +f 177/625/19 191/626/14 178/627/14 +f 183/628/5 199/629/12 184/630/12 +f 178/627/14 193/631/15 179/632/15 +f 184/630/12 200/633/13 185/634/13 +f 179/632/15 188/635/6 173/636/6 +f 185/634/13 195/637/20 186/638/20 +f 176/622/18 194/639/21 180/640/21 +f 186/638/20 192/641/19 177/625/19 +f 173/636/6 187/642/11 174/643/11 +f 180/640/21 196/644/17 181/617/17 +f 174/643/11 189/645/10 175/620/10 +f 236/646/16 201/647/5 212/648/16 +f 229/649/14 206/650/15 205/651/14 +f 244/652/11 221/653/10 220/654/11 +f 237/655/5 214/656/12 213/657/5 +f 230/658/15 207/659/6 206/650/15 +f 245/660/10 222/661/4 221/653/10 +f 238/662/12 215/663/13 214/656/12 +f 231/664/6 208/665/11 207/666/6 +f 246/667/4 223/668/17 222/661/4 +f 239/669/13 216/670/3 215/663/13 +f 232/671/11 209/672/10 208/665/11 +f 247/673/17 224/674/16 223/668/17 +f 225/675/5 202/676/12 201/647/5 +f 240/677/3 217/678/14 216/670/3 +f 233/679/10 210/680/4 209/672/10 +f 248/681/16 213/657/5 224/674/16 +f 226/682/12 203/683/13 202/676/12 +f 241/684/14 218/685/15 217/678/14 +f 234/686/4 211/687/17 210/680/4 +f 227/688/13 204/689/3 203/683/13 +f 242/690/15 219/691/6 218/685/15 +f 235/692/17 212/648/16 211/687/17 +f 228/693/3 205/651/14 204/689/3 +f 243/694/6 220/654/11 219/695/6 +f 252/696/22 249/196/6 250/411/22 +f 256/697/22 252/696/22 250/411/22 +f 258/698/23 257/699/22 256/697/22 +f 261/700/24 259/701/23 258/698/23 +f 269/702/25 255/703/26 254/704/25 +f 268/416/22 265/705/6 266/706/22 +f 272/707/22 268/416/22 266/706/22 +f 274/708/23 273/709/22 272/707/22 +f 277/710/24 275/711/23 274/708/23 +f 276/712/24 318/713/27 332/714/28 +f 263/715/29 316/716/30 264/717/29 +f 287/718/31 292/719/32 288/720/31 +f 290/219/33 293/721/34 289/217/33 +f 294/722/34 291/723/32 293/721/34 +f 299/724/5 287/214/31 288/725/31 +f 290/219/33 289/217/33 302/726/6 +f 317/727/30 279/728/29 280/729/29 +f 263/715/29 255/703/26 313/730/30 +f 261/700/24 319/731/27 262/732/24 +f 318/713/27 278/733/24 277/710/24 +f 325/734/22 324/735/35 323/736/22 +f 315/737/36 321/738/37 320/437/36 +f 320/437/36 328/739/2 315/737/36 +f 282/740/37 322/741/7 321/738/37 +f 326/742/35 330/226/6 324/735/35 +f 281/743/7 323/736/22 322/741/7 +f 318/713/27 331/744/28 332/714/28 +f 264/717/29 316/716/30 333/423/38 +f 331/744/28 319/731/27 260/745/24 +f 316/716/30 334/746/38 333/423/38 +f 334/746/38 317/727/30 280/729/29 +f 344/747/39 353/748/40 341/749/41 +f 340/263/42 341/749/41 339/440/43 +f 337/750/44 343/751/45 338/752/46 +f 344/747/39 346/753/47 348/754/48 +f 341/749/41 349/755/49 339/440/43 +f 345/756/50 348/754/48 346/753/47 +f 352/757/51 353/758/40 354/759/52 +f 338/752/46 347/760/53 345/756/50 +f 350/761/54 351/762/55 352/757/51 +f 337/763/44 352/757/51 342/764/56 +f 351/762/55 341/749/41 353/758/40 +f 353/748/40 355/765/57 354/766/52 +f 342/767/56 355/765/57 343/768/45 +f 354/759/52 342/764/56 352/757/51 +f 347/760/53 356/769/58 348/754/48 +f 344/747/39 348/754/48 356/769/58 +f 343/751/45 355/770/57 347/760/53 +f 368/445/59 360/771/60 374/453/61 +f 372/772/62 359/773/63 369/774/64 +f 367/446/65 365/775/66 366/776/67 +f 371/777/68 364/778/69 363/779/70 +f 373/271/71 368/445/59 374/453/61 +f 369/774/64 371/777/68 372/772/62 +f 359/780/63 357/781/4 361/782/72 +f 364/778/69 362/783/3 363/784/70 +f 362/783/3 366/776/67 365/775/66 +f 361/782/72 357/781/4 360/771/60 +f 379/785/73 376/786/74 375/787/74 +f 381/788/75 380/789/73 379/785/73 +f 383/790/76 382/791/75 381/788/75 +f 385/792/77 384/793/76 383/790/76 +f 387/794/78 386/795/77 385/792/77 +f 389/796/1 388/797/78 387/794/78 +f 391/282/31 390/280/5 389/283/5 +f 393/277/32 392/278/31 391/282/31 +f 395/276/1 394/273/32 393/277/32 +f 397/275/37 400/798/2 399/456/2 +f 398/799/37 403/285/22 404/800/22 +f 401/281/79 404/801/22 403/458/22 +f 405/802/80 402/803/79 401/281/79 +f 406/804/80 378/805/25 377/806/25 +f 407/807/81 410/808/82 409/809/82 +f 408/810/81 413/811/83 414/812/83 +f 411/813/78 414/812/83 413/811/83 +f 416/814/73 409/809/82 410/808/82 +f 418/815/75 415/816/73 416/817/73 +f 419/818/77 412/819/78 411/813/78 +f 421/820/76 420/821/77 419/818/77 +f 422/822/76 417/823/75 418/815/75 +f 426/320/1 429/321/84 425/316/1 +f 423/824/2 428/313/75 424/319/2 +f 430/315/84 431/322/9 429/321/84 +f 427/825/75 432/826/85 428/313/75 +f 314/827/30 271/828/26 279/728/29 +f 255/703/26 314/827/30 313/730/30 +f 271/828/26 269/702/25 270/829/25 +f 255/703/26 253/830/25 254/704/25 +f 433/346/6 456/831/15 444/345/15 +f 438/332/16 449/832/17 437/342/17 +f 439/334/5 450/833/16 438/332/16 +f 440/339/12 451/834/5 439/479/5 +f 441/329/13 452/835/12 440/339/12 +f 434/347/11 445/836/6 433/346/6 +f 442/331/3 453/837/13 441/329/13 +f 435/326/10 446/838/11 434/347/11 +f 443/337/14 454/839/3 442/331/3 +f 436/336/4 447/840/10 435/326/10 +f 444/345/15 455/841/14 443/337/14 +f 437/342/17 448/842/4 436/336/4 +f 463/340/5 476/843/12 464/341/12 +f 460/335/4 473/844/17 461/343/17 +f 467/338/14 480/845/15 468/344/15 +f 457/350/6 470/846/11 458/327/11 +f 464/341/12 477/847/13 465/348/13 +f 461/343/17 474/848/16 462/349/16 +f 468/344/15 469/849/6 457/350/6 +f 458/327/11 471/850/10 459/328/10 +f 465/348/13 478/851/3 466/330/3 +f 462/349/16 475/852/5 463/333/5 +f 459/328/10 472/853/4 460/335/4 +f 466/330/3 479/854/14 467/338/14 +f 27/489/10 28/496/4 4/24/4 +f 26/490/11 27/489/10 3/26/10 +f 32/491/12 33/499/13 9/7/13 +f 35/492/14 36/494/15 12/14/15 +f 30/493/16 31/855/5 7/1/5 +f 36/494/15 25/495/6 1/21/6 +f 25/495/6 26/490/11 2/19/11 +f 28/496/4 29/500/17 5/29/17 +f 31/497/5 32/491/12 8/9/12 +f 34/498/3 35/492/14 11/16/14 +f 33/499/13 34/498/3 10/10/3 +f 29/500/17 30/493/16 6/3/16 +f 19/501/5 43/38/5 42/40/16 +f 18/502/16 42/40/16 41/41/17 +f 17/503/17 41/41/17 40/44/4 +f 16/504/4 40/44/4 39/48/10 +f 15/505/10 39/48/10 38/49/11 +f 14/506/11 38/49/11 37/53/6 +f 13/507/6 37/53/6 48/54/15 +f 24/508/15 48/54/15 47/58/14 +f 23/509/14 47/58/14 46/59/3 +f 22/510/3 46/59/3 45/63/13 +f 21/511/13 45/63/13 44/65/12 +f 20/512/12 44/65/12 43/66/5 +f 52/514/3 64/524/3 63/515/13 +f 59/517/17 71/526/17 70/518/4 +f 56/520/11 68/531/11 67/521/6 +f 53/523/14 65/533/14 64/524/3 +f 60/525/16 72/534/16 71/526/17 +f 50/527/12 62/535/12 61/528/5 +f 57/530/10 69/536/10 68/531/11 +f 54/532/15 66/538/15 65/533/14 +f 49/529/5 61/528/5 72/534/16 +f 51/516/13 63/515/13 62/535/12 +f 58/519/4 70/518/4 69/536/10 +f 55/537/6 67/856/6 66/538/15 +f 76/539/3 88/549/3 87/540/13 +f 83/542/17 95/551/17 94/543/4 +f 80/545/11 92/556/11 91/546/6 +f 77/548/14 89/558/14 88/549/3 +f 84/550/16 96/559/16 95/551/17 +f 74/552/12 86/560/12 85/553/5 +f 81/555/10 93/561/10 92/556/11 +f 78/557/15 90/563/15 89/558/14 +f 73/554/5 85/553/5 96/559/16 +f 75/541/13 87/540/13 86/560/12 +f 82/544/4 94/543/4 93/561/10 +f 79/562/6 91/857/6 90/563/15 +f 115/564/15 122/570/15 121/565/14 +f 110/567/11 117/572/11 116/568/6 +f 109/569/6 116/568/6 122/570/15 +f 111/571/10 118/574/10 117/572/11 +f 112/573/18 119/858/18 118/574/10 +f 114/566/14 121/565/14 120/575/19 +f 165/577/20 113/576/19 120/575/19 +f 141/579/5 153/859/5 152/580/16 +f 140/581/16 152/580/16 151/582/17 +f 139/583/17 151/582/17 150/584/4 +f 138/585/4 150/584/4 149/586/10 +f 137/587/10 149/586/10 148/588/11 +f 136/589/11 148/588/11 147/590/6 +f 135/591/6 147/590/6 158/592/15 +f 146/593/15 158/592/15 157/594/14 +f 145/595/14 157/594/14 156/596/3 +f 144/597/3 156/596/3 155/598/13 +f 143/599/13 155/598/13 154/600/12 +f 142/601/12 154/600/12 153/602/5 +f 166/604/21 119/858/18 112/573/18 +f 163/606/12 170/611/12 169/607/5 +f 160/609/17 167/613/17 166/604/21 +f 164/610/13 171/614/13 170/611/12 +f 161/612/16 168/616/16 167/613/17 +f 165/577/20 172/578/20 171/614/13 +f 162/615/5 169/860/5 168/616/16 +f 181/617/17 196/644/17 197/618/16 +f 175/620/10 189/645/10 190/621/18 +f 182/619/16 197/618/16 198/623/5 +f 177/625/19 192/641/19 191/626/14 +f 183/628/5 198/861/5 199/629/12 +f 178/627/14 191/626/14 193/631/15 +f 184/630/12 199/629/12 200/633/13 +f 179/632/15 193/631/15 188/635/6 +f 185/634/13 200/633/13 195/637/20 +f 176/622/18 190/621/18 194/639/21 +f 186/638/20 195/637/20 192/641/19 +f 173/636/6 188/635/6 187/642/11 +f 180/640/21 194/639/21 196/644/17 +f 174/643/11 187/642/11 189/645/10 +f 236/646/16 225/675/5 201/647/5 +f 229/649/14 230/658/15 206/650/15 +f 244/652/11 245/660/10 221/653/10 +f 237/655/5 238/662/12 214/656/12 +f 230/658/15 231/862/6 207/659/6 +f 245/660/10 246/667/4 222/661/4 +f 238/662/12 239/669/13 215/663/13 +f 231/664/6 232/671/11 208/665/11 +f 246/667/4 247/673/17 223/668/17 +f 239/669/13 240/677/3 216/670/3 +f 232/671/11 233/679/10 209/672/10 +f 247/673/17 248/681/16 224/674/16 +f 225/675/5 226/682/12 202/676/12 +f 240/677/3 241/684/14 217/678/14 +f 233/679/10 234/686/4 210/680/4 +f 248/681/16 237/655/5 213/657/5 +f 226/682/12 227/688/13 203/683/13 +f 241/684/14 242/690/15 218/685/15 +f 234/686/4 235/692/17 211/687/17 +f 227/688/13 228/693/3 204/689/3 +f 242/690/15 243/863/6 219/691/6 +f 235/692/17 236/646/16 212/648/16 +f 228/693/3 229/649/14 205/651/14 +f 243/694/6 244/652/11 220/654/11 +f 252/696/22 251/864/6 249/196/6 +f 256/697/22 257/699/22 252/696/22 +f 258/698/23 259/701/23 257/699/22 +f 261/700/24 262/732/24 259/701/23 +f 269/702/25 271/828/26 255/703/26 +f 268/416/22 267/203/6 265/705/6 +f 272/707/22 273/709/22 268/416/22 +f 274/708/23 275/711/23 273/709/22 +f 277/710/24 278/733/24 275/711/23 +f 263/715/29 313/730/30 316/716/30 +f 287/718/31 291/723/32 292/719/32 +f 290/219/33 294/722/34 293/721/34 +f 294/722/34 292/719/32 291/723/32 +f 288/725/31 284/865/5 301/866/5 +f 284/865/5 297/867/5 301/866/5 +f 295/868/5 283/215/5 299/724/5 +f 283/215/5 287/214/31 299/724/5 +f 288/725/31 301/866/5 299/724/5 +f 289/217/33 285/213/6 300/869/6 +f 285/213/6 296/870/6 300/869/6 +f 298/871/6 286/211/6 302/726/6 +f 286/211/6 290/219/33 302/726/6 +f 289/217/33 300/869/6 302/726/6 +f 317/727/30 314/827/30 279/728/29 +f 261/700/24 260/745/24 319/731/27 +f 318/713/27 276/712/24 278/733/24 +f 325/734/22 326/742/35 324/735/35 +f 315/737/36 282/740/37 321/738/37 +f 320/437/36 327/207/2 328/739/2 +f 282/740/37 281/743/7 322/741/7 +f 326/742/35 329/227/6 330/226/6 +f 281/743/7 325/734/22 323/736/22 +f 318/713/27 319/731/27 331/744/28 +f 316/716/30 317/727/30 334/746/38 +f 344/747/39 356/872/58 353/748/40 +f 340/263/42 344/747/39 341/749/41 +f 337/750/44 342/873/56 343/751/45 +f 344/747/39 340/263/42 346/753/47 +f 341/749/41 351/762/55 349/755/49 +f 345/756/50 347/760/53 348/754/48 +f 352/757/51 351/762/55 353/758/40 +f 338/752/46 343/751/45 347/760/53 +f 350/761/54 349/755/49 351/762/55 +f 337/763/44 350/761/54 352/757/51 +f 353/748/40 356/872/58 355/765/57 +f 342/767/56 354/766/52 355/765/57 +f 347/760/53 355/770/57 356/769/58 +f 368/445/59 361/782/72 360/771/60 +f 372/772/62 358/874/86 359/773/63 +f 367/446/65 373/271/71 365/775/66 +f 371/777/68 370/875/87 364/778/69 +f 373/271/71 367/446/65 368/445/59 +f 369/774/64 370/875/87 371/777/68 +f 359/780/63 358/876/86 357/781/4 +f 364/778/69 366/776/67 362/783/3 +f 379/785/73 380/789/73 376/786/74 +f 381/788/75 382/791/75 380/789/73 +f 383/790/76 384/793/76 382/791/75 +f 385/792/77 386/795/77 384/793/76 +f 387/794/78 388/797/78 386/795/77 +f 389/796/1 390/877/1 388/797/78 +f 391/282/31 392/278/31 390/280/5 +f 393/277/32 394/273/32 392/278/31 +f 395/276/1 396/274/1 394/273/32 +f 397/275/37 398/878/37 400/798/2 +f 398/799/37 397/460/37 403/285/22 +f 401/281/79 402/803/79 404/801/22 +f 405/802/80 406/804/80 402/803/79 +f 406/804/80 405/802/80 378/805/25 +f 407/807/81 408/810/81 410/808/82 +f 408/810/81 407/807/81 413/811/83 +f 411/813/78 412/819/78 414/812/83 +f 416/814/73 415/879/73 409/809/82 +f 418/815/75 417/823/75 415/816/73 +f 419/818/77 420/821/77 412/819/78 +f 421/820/76 422/822/76 420/821/77 +f 422/822/76 421/820/76 417/823/75 +f 426/320/1 430/315/84 429/321/84 +f 423/824/2 427/825/75 428/313/75 +f 430/315/84 432/314/9 431/322/9 +f 427/825/75 431/880/85 432/826/85 +f 255/703/26 271/828/26 314/827/30 +f 433/346/6 445/836/6 456/831/15 +f 438/332/16 450/833/16 449/832/17 +f 439/334/5 451/881/5 450/833/16 +f 440/339/12 452/835/12 451/834/5 +f 441/329/13 453/837/13 452/835/12 +f 434/347/11 446/838/11 445/836/6 +f 442/331/3 454/839/3 453/837/13 +f 435/326/10 447/840/10 446/838/11 +f 443/337/14 455/841/14 454/839/3 +f 436/336/4 448/842/4 447/840/10 +f 444/345/15 456/831/15 455/841/14 +f 437/342/17 449/832/17 448/842/4 +f 463/340/5 475/882/5 476/843/12 +f 460/335/4 472/853/4 473/844/17 +f 467/338/14 479/854/14 480/845/15 +f 457/350/6 469/849/6 470/846/11 +f 464/341/12 476/843/12 477/847/13 +f 461/343/17 473/844/17 474/848/16 +f 468/344/15 480/845/15 469/849/6 +f 458/327/11 470/846/11 471/850/10 +f 465/348/13 477/847/13 478/851/3 +f 462/349/16 474/848/16 475/852/5 +f 459/328/10 471/850/10 472/853/4 +f 466/330/3 478/851/3 479/854/14 diff --git a/src/main/resources/assets/hbm/models/weapons/pepperbox.obj b/src/main/resources/assets/hbm/models/weapons/pepperbox.obj new file mode 100644 index 000000000..a138f7e89 --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/pepperbox.obj @@ -0,0 +1,3645 @@ +# Blender v2.79 (sub 0) OBJ File: 'pepperbox.blend' +# www.blender.org +o Circle +v 0.000000 0.125000 7.000000 +v -0.088388 0.088388 7.000000 +v -0.125000 -0.000000 7.000000 +v -0.088388 -0.088388 7.000000 +v 0.000000 -0.125000 7.000000 +v 0.088388 -0.088388 7.000000 +v 0.125000 0.000000 7.000000 +v 0.088388 0.088388 7.000000 +v 0.000000 0.687500 7.000000 +v -0.132583 0.632583 7.000000 +v -0.187500 0.500000 7.000000 +v -0.132583 0.367417 7.000000 +v 0.000000 0.312500 7.000000 +v 0.132583 0.367418 7.000000 +v 0.187500 0.500000 7.000000 +v 0.132583 0.632582 7.000000 +v 0.000000 -0.687500 7.000000 +v 0.132583 -0.632583 7.000000 +v 0.187500 -0.500000 7.000000 +v 0.132583 -0.367417 7.000000 +v 0.000000 -0.312500 7.000000 +v -0.132583 -0.367418 7.000000 +v -0.187500 -0.500000 7.000000 +v -0.132583 -0.632582 7.000000 +v 0.595392 0.343750 7.000000 +v 0.481541 0.431111 7.000000 +v 0.339263 0.412380 7.000000 +v 0.251902 0.298529 7.000000 +v 0.270633 0.156250 7.000000 +v 0.384484 0.068889 7.000000 +v 0.526763 0.087620 7.000000 +v 0.614124 0.201471 7.000000 +v -0.595392 -0.343750 7.000000 +v -0.481541 -0.431111 7.000000 +v -0.339263 -0.412380 7.000000 +v -0.251902 -0.298529 7.000000 +v -0.270633 -0.156250 7.000000 +v -0.384484 -0.068889 7.000000 +v -0.526763 -0.087620 7.000000 +v -0.614124 -0.201471 7.000000 +v 0.595392 -0.343750 7.000000 +v 0.614124 -0.201472 7.000000 +v 0.526763 -0.087620 7.000000 +v 0.384484 -0.068889 7.000000 +v 0.270633 -0.156250 7.000000 +v 0.251902 -0.298529 7.000000 +v 0.339263 -0.412380 7.000000 +v 0.481541 -0.431111 7.000000 +v -0.595392 0.343750 7.000000 +v -0.614124 0.201472 7.000000 +v -0.526763 0.087620 7.000000 +v -0.384484 0.068889 7.000000 +v -0.270633 0.156250 7.000000 +v -0.251902 0.298529 7.000000 +v -0.339262 0.412380 7.000000 +v -0.481541 0.431111 7.000000 +v -0.088388 0.088388 7.062500 +v 0.000000 0.125000 7.062500 +v -0.125000 -0.000000 7.062500 +v -0.088388 -0.088388 7.062500 +v 0.000000 -0.125000 7.062500 +v 0.088388 -0.088388 7.062500 +v 0.125000 -0.000000 7.062500 +v 0.088388 0.088388 7.062500 +v -0.187500 -0.812500 7.000000 +v 0.187500 -0.812500 7.000000 +v -0.187500 0.812500 7.000000 +v 0.187500 0.812500 7.000000 +v -0.797396 -0.243870 7.000000 +v -0.609896 -0.568630 7.000000 +v 0.609896 0.568630 7.000000 +v 0.797396 0.243870 7.000000 +v -0.609896 0.568630 7.000000 +v -0.797396 0.243870 7.000000 +v 0.797396 -0.243870 7.000000 +v 0.609896 -0.568630 7.000000 +v -0.452003 -0.532892 7.000000 +v -0.235497 -0.657892 7.000000 +v 0.235497 0.657892 7.000000 +v 0.452003 0.532892 7.000000 +v -0.687500 0.125000 7.000000 +v -0.687500 -0.125000 7.000000 +v 0.687500 0.125000 7.000000 +v 0.687500 -0.125000 7.000000 +v -0.235497 0.657892 7.000000 +v -0.452003 0.532892 7.000000 +v 0.452003 -0.532892 7.000000 +v 0.235497 -0.657892 7.000000 +v -0.187500 -0.812500 0.000000 +v 0.187500 -0.812500 0.000000 +v -0.187500 0.812500 0.000000 +v 0.187500 0.812500 0.000000 +v -0.797396 -0.243870 0.000000 +v -0.609896 -0.568630 0.000000 +v 0.609896 0.568630 0.000000 +v 0.797396 0.243870 0.000000 +v -0.609896 0.568630 0.000000 +v -0.797396 0.243870 0.000000 +v 0.797396 -0.243870 0.000000 +v 0.609896 -0.568630 0.000000 +v -0.452003 -0.532892 0.000000 +v -0.235497 -0.657892 0.000000 +v 0.235497 0.657892 0.000000 +v 0.452003 0.532892 0.000000 +v -0.687500 0.125000 0.000000 +v -0.687500 -0.125000 0.000000 +v 0.687500 0.125000 0.000000 +v 0.687500 -0.125000 0.000000 +v -0.235497 0.657892 0.000000 +v -0.452003 0.532892 0.000000 +v 0.452003 -0.532892 0.000000 +v 0.235497 -0.657892 0.000000 +v 0.000000 0.687500 6.000000 +v -0.132583 0.632583 6.000000 +v -0.187500 0.500000 6.000000 +v -0.132583 0.367417 6.000000 +v 0.000000 0.312500 6.000000 +v 0.132583 0.367418 6.000000 +v 0.187500 0.500000 6.000000 +v 0.132583 0.632582 6.000000 +v 0.000000 -0.687500 6.000000 +v 0.132583 -0.632583 6.000000 +v 0.187500 -0.500000 6.000000 +v 0.132583 -0.367417 6.000000 +v 0.000000 -0.312500 6.000000 +v -0.132583 -0.367418 6.000000 +v -0.187500 -0.500000 6.000000 +v -0.132583 -0.632582 6.000000 +v 0.595392 0.343750 6.000000 +v 0.481541 0.431111 6.000000 +v 0.339263 0.412380 6.000000 +v 0.251902 0.298529 6.000000 +v 0.270633 0.156250 6.000000 +v 0.384484 0.068889 6.000000 +v 0.526763 0.087620 6.000000 +v 0.614124 0.201471 6.000000 +v -0.595392 -0.343750 6.000000 +v -0.481541 -0.431111 6.000000 +v -0.339263 -0.412380 6.000000 +v -0.251902 -0.298529 6.000000 +v -0.270633 -0.156250 6.000000 +v -0.384484 -0.068889 6.000000 +v -0.526763 -0.087620 6.000000 +v -0.614124 -0.201471 6.000000 +v 0.595392 -0.343750 6.000000 +v 0.614124 -0.201472 6.000000 +v 0.526763 -0.087620 6.000000 +v 0.384484 -0.068889 6.000000 +v 0.270633 -0.156250 6.000000 +v 0.251902 -0.298529 6.000000 +v 0.339263 -0.412380 6.000000 +v 0.481541 -0.431111 6.000000 +v -0.595392 0.343750 6.000000 +v -0.614124 0.201472 6.000000 +v -0.526763 0.087620 6.000000 +v -0.384484 0.068889 6.000000 +v -0.270633 0.156250 6.000000 +v -0.251902 0.298529 6.000000 +v -0.339262 0.412380 6.000000 +v -0.481541 0.431111 6.000000 +v 0.000000 1.000000 0.000000 +v -0.500000 0.866025 0.000000 +v -0.866025 0.500000 0.000000 +v -1.000000 -0.000000 -0.000000 +v -0.866025 -0.500000 -0.000000 +v -0.500000 -0.866025 -0.000000 +v 0.000000 -1.000000 -0.000000 +v 0.500000 -0.866026 -0.000000 +v 0.866025 -0.500000 -0.000000 +v 1.000000 -0.000000 -0.000000 +v 0.866026 0.499999 0.000000 +v 0.500000 0.866025 0.000000 +v -0.500000 0.866025 -0.500000 +v 0.000000 1.000000 -0.500000 +v -0.866025 0.500000 -0.500000 +v -1.000000 -0.000000 -0.500000 +v -0.866025 -0.500000 -0.500000 +v -0.500000 -0.866025 -0.500000 +v 0.000000 -1.000000 -0.500000 +v 0.500000 -0.866026 -0.500000 +v 0.866025 -0.500000 -0.500000 +v 1.000000 -0.000000 -0.500000 +v 0.866026 0.500000 -0.500000 +v 0.500000 0.866025 -0.500000 +v 0.875000 -0.875000 -0.125000 +v 0.875000 0.125000 -0.125000 +v 0.875000 -0.875000 -0.375000 +v 0.875000 0.125000 -0.375000 +v 1.125000 -0.875000 -0.125000 +v 1.125000 -0.125000 -0.125000 +v 1.125000 -0.875000 -0.375000 +v 1.125000 -0.125000 -0.375000 +v -1.125000 -0.125000 -0.125000 +v 0.875000 -1.125000 -0.125000 +v -1.125000 -0.875000 -0.125000 +v 1.125000 -1.125000 -0.125000 +v 0.875000 -0.875000 6.125000 +v 1.125000 -0.875000 6.125000 +v 0.875000 -1.125000 6.125000 +v 1.125000 -1.125000 6.125000 +v 0.875000 -0.875000 6.375000 +v 1.125000 -0.875000 6.375000 +v -1.125000 -0.125000 -0.375000 +v -1.125000 -0.875000 -0.375000 +v 0.875000 0.625000 6.125000 +v 1.125000 0.625000 6.125000 +v 0.875000 0.625000 6.375000 +v 1.125000 0.625000 6.375000 +v 0.625000 0.875000 6.125000 +v 0.625000 0.875000 6.375000 +v -0.625000 0.875000 6.125000 +v -0.625000 0.875000 6.375000 +v 0.625000 1.125000 6.125000 +v 0.625000 1.125000 6.375000 +v -0.625000 1.125000 6.125000 +v -0.625000 1.125000 6.375000 +v -0.875000 -0.875000 -0.125000 +v -0.875000 0.125000 -0.125000 +v -0.875000 -0.875000 -0.375000 +v -0.875000 0.125000 -0.375000 +v -1.125000 -1.125000 -0.125000 +v -0.875000 -1.125000 -0.125000 +v -1.125000 -0.875000 6.125000 +v -0.875000 -0.875000 6.125000 +v -1.125000 -1.125000 6.125000 +v -0.875000 -1.125000 6.125000 +v -1.125000 -0.875000 6.375000 +v -0.875000 -0.875000 6.375000 +v -1.125000 0.625000 6.125000 +v -0.875000 0.625000 6.125000 +v -1.125000 0.625000 6.375000 +v -0.875000 0.625000 6.375000 +v -0.875000 -0.375000 -0.500000 +v 0.875000 -0.375000 -0.500000 +v -0.875000 0.375000 -0.500000 +v 0.875000 0.375000 -0.500000 +v -0.375000 0.875000 -0.500000 +v -0.375000 -0.875000 -0.500000 +v 0.375000 0.875000 -0.500000 +v 0.375000 -0.875000 -0.500000 +v -0.875000 -0.375000 -3.000000 +v 0.875000 -0.375000 -3.000000 +v -0.875000 0.375000 -3.000000 +v 0.875000 0.375000 -3.000000 +v -0.375000 0.875000 -3.000000 +v -0.375000 -0.875000 -3.000000 +v 0.375000 0.875000 -3.000000 +v 0.375000 -0.875000 -3.000000 +v -0.875000 -1.625000 -4.875000 +v 0.875000 -1.625000 -4.875000 +v -0.875000 -0.875000 -5.250000 +v 0.875000 -0.875000 -5.250000 +v -0.375000 -0.375000 -5.500000 +v -0.375000 -2.125000 -4.625000 +v 0.375000 -0.375000 -5.500000 +v 0.375000 -2.125000 -4.625000 +v -0.875000 -2.875000 -5.750000 +v 0.875000 -2.875000 -5.750000 +v -0.875000 -2.125000 -6.500000 +v 0.875000 -2.125000 -6.500000 +v -0.375000 -1.625000 -7.000000 +v -0.375000 -3.375000 -5.250000 +v 0.375000 -1.625000 -7.000000 +v 0.375000 -3.375000 -5.250000 +v 0.875000 0.250000 -0.500000 +v 1.000000 0.250000 -0.500000 +v 0.875000 0.250000 -1.000000 +v 1.000000 0.250000 -1.000000 +v 0.875000 0.375000 -1.000000 +v 0.875000 0.375000 -0.500000 +v 1.000000 0.375000 -0.500000 +v 1.000000 0.375000 -1.000000 +v 0.625000 0.375000 -2.125000 +v 0.625000 0.551777 -2.051777 +v 0.625000 0.625000 -1.875000 +v 0.625000 0.551777 -1.698223 +v 0.625000 0.375000 -1.625000 +v 0.625000 0.198223 -1.698223 +v 0.625000 0.125000 -1.875000 +v 0.625000 0.198223 -2.051777 +v 1.000000 0.375000 -2.125000 +v 1.000000 0.551777 -2.051777 +v 1.000000 0.625000 -1.875000 +v 1.000000 0.551777 -1.698223 +v 1.000000 0.375000 -1.625000 +v 1.000000 0.198223 -1.698223 +v 1.000000 0.125000 -1.875000 +v 1.000000 0.198223 -2.051777 +v 0.906250 0.500000 -1.750000 +v 0.968750 0.500000 -1.750000 +v 0.906250 0.500000 -2.000000 +v 0.968750 0.500000 -2.000000 +v 0.906250 1.375000 -1.750000 +v 0.968750 1.375000 -1.750000 +v 0.906250 1.375000 -2.000000 +v 0.968750 1.375000 -2.000000 +v 0.906250 1.500000 -2.000000 +v 0.906250 1.500000 -1.625000 +v 0.968750 1.500000 -1.625000 +v 0.968750 1.500000 -2.000000 +v -0.875000 0.250000 -0.500000 +v -1.000000 0.250000 -0.500000 +v -0.875000 0.250000 -1.000000 +v -1.000000 0.250000 -1.000000 +v -0.875000 0.375000 -1.000000 +v -0.875000 0.375000 -0.500000 +v -1.000000 0.375000 -0.500000 +v -1.000000 0.375000 -1.000000 +v -0.125000 -0.875000 -1.250000 +v 0.125000 -0.875000 -1.250000 +v -0.125000 -0.875000 -1.500000 +v 0.125000 -0.875000 -1.500000 +v -0.125000 -1.250000 -1.250000 +v 0.125000 -1.250000 -1.250000 +v -0.125000 -1.250000 -1.500000 +v 0.125000 -1.250000 -1.500000 +v -0.125000 -2.000000 -1.750000 +v 0.125000 -2.000000 -1.750000 +v 0.125000 -1.500000 -1.750000 +v -0.125000 -1.500000 -1.750000 +v 0.125000 -2.000000 -1.000000 +v -0.125000 -2.000000 -1.000000 +v 0.125000 -1.500000 -1.000000 +v -0.125000 -1.500000 -1.000000 +v -0.125000 -1.500000 -0.875000 +v -0.125000 -1.250000 -1.125000 +v 0.125000 -1.250000 -1.125000 +v 0.125000 -1.500000 -0.875000 +v -0.125000 -1.250000 -1.625000 +v -0.125000 -1.500000 -1.875000 +v 0.125000 -1.500000 -1.875000 +v 0.125000 -1.250000 -1.625000 +v -0.125000 -2.250000 -1.125000 +v -0.125000 -2.000000 -0.875000 +v 0.125000 -2.000000 -0.875000 +v 0.125000 -2.250000 -1.125000 +v 0.125000 -2.250000 -1.625000 +v 0.125000 -2.000000 -1.875000 +v -0.125000 -2.000000 -1.875000 +v -0.125000 -2.250000 -1.625000 +v -0.125000 -1.375000 -1.125000 +v 0.125000 -1.375000 -1.125000 +v -0.125000 -1.375000 -1.625000 +v 0.125000 -1.375000 -1.625000 +v -0.125000 -2.125000 -1.125000 +v 0.125000 -2.125000 -1.125000 +v 0.125000 -2.125000 -1.625000 +v -0.125000 -2.125000 -1.625000 +v -0.187500 0.875000 -0.562500 +v 0.187500 0.875000 -0.562500 +v -0.187500 0.875000 -0.937500 +v 0.187500 0.875000 -0.937500 +v -0.187500 1.375000 -0.812500 +v -0.187500 1.375000 -0.687500 +v 0.187500 1.375000 -0.687500 +v 0.187500 1.375000 -0.812500 +v -0.062500 1.375000 -0.687500 +v 0.062500 1.375000 -0.687500 +v 0.062500 1.375000 -0.812500 +v -0.062500 1.375000 -0.812500 +v -0.062500 1.125000 -0.625000 +v 0.062500 1.125000 -0.625000 +v 0.062500 1.125000 -0.875000 +v -0.062500 1.125000 -0.875000 +v 0.000000 0.875000 8.062500 +v -0.437500 0.757773 8.062500 +v -0.757772 0.437500 8.062500 +v -0.875000 -0.000000 8.062500 +v -0.757772 -0.437500 8.062500 +v -0.437500 -0.757773 8.062500 +v 0.000000 -0.875000 8.062500 +v 0.437500 -0.757773 8.062500 +v 0.757772 -0.437500 8.062500 +v 0.875000 -0.000000 8.062500 +v 0.757772 0.437500 8.062500 +v 0.437500 0.757773 8.062500 +v 0.000000 0.875000 8.312500 +v -0.437500 0.757773 8.312500 +v -0.757772 0.437500 8.312500 +v -0.875000 -0.000000 8.312500 +v -0.757772 -0.437500 8.312500 +v -0.437500 -0.757773 8.312500 +v 0.000000 -0.875000 8.312500 +v 0.437500 -0.757773 8.312500 +v 0.757772 -0.437500 8.312500 +v 0.875000 -0.000000 8.312500 +v 0.757772 0.437500 8.312500 +v 0.437500 0.757773 8.312500 +v 0.000000 0.500000 8.187500 +v -0.132583 0.500000 8.132584 +v -0.187500 0.500000 8.000000 +v -0.132583 0.500000 7.867418 +v 0.000000 0.500000 7.812500 +v 0.132583 0.500000 7.867418 +v 0.187500 0.500000 8.000000 +v 0.132583 0.500000 8.132584 +v 0.000000 0.367418 8.132584 +v 0.000000 0.312500 8.000000 +v 0.000000 0.367418 7.867418 +v 0.000000 0.632583 7.867418 +v 0.000000 0.687500 8.000000 +v 0.000000 0.632583 8.132584 +v 0.093750 0.406250 8.132584 +v 0.132583 0.367418 8.000000 +v 0.093750 0.406250 7.867418 +v -0.093750 0.593750 7.867418 +v -0.132583 0.632583 8.000000 +v -0.093750 0.593750 8.132584 +v 0.093750 0.593750 8.132584 +v 0.132583 0.632583 8.000000 +v 0.093750 0.593750 7.867418 +v -0.093750 0.406250 7.867418 +v -0.132583 0.367418 8.000000 +v -0.093750 0.406250 8.132584 +v 0.187500 -0.500000 8.000000 +v -0.187500 -0.500000 8.000000 +v 0.000000 -0.312500 8.000000 +v 0.000000 -0.687500 8.000000 +v -0.132583 -0.367418 8.000000 +v 0.132583 -0.632583 8.000000 +v -0.132583 -0.632583 8.000000 +v 0.132583 -0.367418 8.000000 +v 0.000000 -0.750000 8.000000 +v 0.176776 -0.676777 8.000000 +v 0.250000 -0.500000 8.000000 +v 0.176777 -0.323224 8.000000 +v 0.000000 -0.250000 8.000000 +v -0.176777 -0.323224 8.000000 +v -0.250000 -0.500000 8.000000 +v -0.176777 -0.676777 8.000000 +v 0.000000 -0.312500 8.062500 +v -0.132583 -0.367418 8.062500 +v 0.132583 -0.367418 8.062500 +v 0.187500 -0.500000 8.062500 +v 0.132583 -0.632583 8.062500 +v 0.000000 -0.687500 8.062500 +v -0.132583 -0.632583 8.062500 +v -0.187500 -0.500000 8.062500 +v 0.176776 -0.676777 8.062500 +v 0.000000 -0.750000 8.062500 +v 0.250000 -0.500000 8.062500 +v 0.176777 -0.323224 8.062500 +v 0.000000 -0.250000 8.062500 +v -0.176777 -0.323224 8.062500 +v -0.250000 -0.500000 8.062500 +v -0.176777 -0.676777 8.062500 +v 0.000000 0.250000 8.312500 +v -0.125000 0.216506 8.312500 +v -0.216506 0.125000 8.312500 +v -0.250000 0.000000 8.312500 +v -0.216506 -0.125000 8.312500 +v -0.125000 -0.216506 8.312500 +v 0.000000 -0.250000 8.312500 +v 0.125000 -0.216506 8.312500 +v 0.216506 -0.125000 8.312500 +v 0.250000 0.000000 8.312500 +v 0.216506 0.125000 8.312500 +v 0.125000 0.216506 8.312500 +v 0.000000 0.250000 8.812500 +v -0.125000 0.216506 8.812500 +v -0.216506 0.125000 8.812500 +v -0.250000 0.000000 8.812500 +v -0.216506 -0.125000 8.812500 +v -0.125000 -0.216506 8.812500 +v 0.000000 -0.250000 8.812500 +v 0.125000 -0.216506 8.812500 +v 0.216506 -0.125000 8.812500 +v 0.250000 0.000000 8.812500 +v 0.216506 0.125000 8.812500 +v 0.125000 0.216506 8.812500 +v 0.000000 0.625000 8.812500 +v -0.312500 0.541265 8.812500 +v -0.541266 0.312500 8.812500 +v -0.625000 0.000000 8.812500 +v -0.541266 -0.312500 8.812500 +v -0.312500 -0.541265 8.812500 +v 0.000000 -0.625000 8.812500 +v 0.312500 -0.541265 8.812500 +v 0.541265 -0.312500 8.812500 +v 0.625000 0.000000 8.812500 +v 0.541266 0.312500 8.812500 +v 0.312500 0.541265 8.812500 +v 0.000000 0.625000 9.062500 +v -0.312500 0.541265 9.062500 +v -0.541266 0.312500 9.062500 +v -0.625000 0.000000 9.062500 +v -0.541266 -0.312500 9.062500 +v -0.312500 -0.541265 9.062500 +v 0.000000 -0.625000 9.062500 +v 0.312500 -0.541265 9.062500 +v 0.541265 -0.312500 9.062500 +v 0.625000 0.000000 9.062500 +v 0.541266 0.312500 9.062500 +v 0.312500 0.541265 9.062500 +v -0.625000 0.375000 -2.125000 +v -0.625000 0.551777 -2.051777 +v -0.625000 0.625000 -1.875000 +v -0.625000 0.551777 -1.698223 +v -0.625000 0.375000 -1.625000 +v -0.625000 0.198223 -1.698223 +v -0.625000 0.125000 -1.875000 +v -0.625000 0.198223 -2.051777 +v -1.000000 0.375000 -2.125000 +v -1.000000 0.551777 -2.051777 +v -1.000000 0.625000 -1.875000 +v -1.000000 0.551777 -1.698223 +v -1.000000 0.375000 -1.625000 +v -1.000000 0.198223 -1.698223 +v -1.000000 0.125000 -1.875000 +v -1.000000 0.198223 -2.051777 +v -0.906250 0.500000 -1.750000 +v -0.968750 0.500000 -1.750000 +v -0.906250 0.500000 -2.000000 +v -0.968750 0.500000 -2.000000 +v -0.906250 1.375000 -1.750000 +v -0.968750 1.375000 -1.750000 +v -0.906250 1.375000 -2.000000 +v -0.968750 1.375000 -2.000000 +v -0.906250 1.500000 -2.000000 +v -0.906250 1.500000 -1.625000 +v -0.968750 1.500000 -1.625000 +v -0.968750 1.500000 -2.000000 +v 0.000000 -0.500000 8.187500 +v 0.132583 -0.500000 8.132584 +v 0.187500 -0.500000 8.000000 +v 0.132583 -0.500000 7.867418 +v 0.000000 -0.500000 7.812500 +v -0.132583 -0.500000 7.867418 +v -0.187500 -0.500000 8.000000 +v -0.132583 -0.500000 8.132584 +v 0.000000 -0.367418 8.132584 +v 0.000000 -0.312500 8.000000 +v 0.000000 -0.367418 7.867418 +v 0.000000 -0.632583 7.867418 +v 0.000000 -0.687500 8.000000 +v 0.000000 -0.632583 8.132584 +v -0.093750 -0.406250 8.132584 +v -0.132583 -0.367418 8.000000 +v -0.093750 -0.406250 7.867418 +v 0.093750 -0.593750 7.867418 +v 0.132583 -0.632583 8.000000 +v 0.093750 -0.593750 8.132584 +v -0.093750 -0.593750 8.132584 +v -0.132583 -0.632583 8.000000 +v -0.093750 -0.593750 7.867418 +v 0.093750 -0.406250 7.867418 +v 0.132583 -0.367418 8.000000 +v 0.093750 -0.406250 8.132584 +v -0.187500 0.500000 8.000000 +v 0.187500 0.500000 8.000000 +v 0.000000 0.312500 8.000000 +v 0.000000 0.687500 8.000000 +v 0.132583 0.367418 8.000000 +v -0.132583 0.632583 8.000000 +v 0.132583 0.632583 8.000000 +v -0.132583 0.367418 8.000000 +v 0.000000 0.750000 8.000000 +v -0.176776 0.676777 8.000000 +v -0.250000 0.500000 8.000000 +v -0.176777 0.323224 8.000000 +v 0.000000 0.250000 8.000000 +v 0.176777 0.323224 8.000000 +v 0.250000 0.500000 8.000000 +v 0.176777 0.676777 8.000000 +v 0.000000 0.312500 8.062500 +v 0.132583 0.367418 8.062500 +v -0.132583 0.367418 8.062500 +v -0.187500 0.500000 8.062500 +v -0.132583 0.632583 8.062500 +v 0.000000 0.687500 8.062500 +v 0.132583 0.632583 8.062500 +v 0.187500 0.500000 8.062500 +v -0.176776 0.676777 8.062500 +v 0.000000 0.750000 8.062500 +v -0.250000 0.500000 8.062500 +v -0.176777 0.323224 8.062500 +v 0.000000 0.250000 8.062500 +v 0.176777 0.323224 8.062500 +v 0.250000 0.500000 8.062500 +v 0.176777 0.676777 8.062500 +v 0.433013 0.250000 8.187500 +v 0.366722 0.364820 8.132584 +v 0.339263 0.412380 8.000000 +v 0.366722 0.364820 7.867418 +v 0.433013 0.250000 7.812500 +v 0.499304 0.135180 7.867418 +v 0.526763 0.087620 8.000000 +v 0.499304 0.135180 8.132584 +v 0.318193 0.183709 8.132584 +v 0.270633 0.156250 8.000000 +v 0.318193 0.183709 7.867418 +v 0.547833 0.316292 7.867418 +v 0.595393 0.343750 8.000000 +v 0.547833 0.316292 8.132584 +v 0.398698 0.121935 8.132584 +v 0.384484 0.068889 8.000000 +v 0.398698 0.121935 7.867418 +v 0.467328 0.378065 7.867418 +v 0.481542 0.431112 8.000000 +v 0.467328 0.378065 8.132584 +v 0.561078 0.215685 8.132584 +v 0.614124 0.201472 8.000000 +v 0.561078 0.215685 7.867418 +v 0.304948 0.284315 7.867418 +v 0.251902 0.298529 8.000000 +v 0.304948 0.284315 8.132584 +v -0.339263 -0.412380 8.000000 +v -0.526763 -0.087620 8.000000 +v -0.270633 -0.156250 8.000000 +v -0.595393 -0.343750 8.000000 +v -0.384484 -0.068889 8.000000 +v -0.481542 -0.431112 8.000000 +v -0.614124 -0.201472 8.000000 +v -0.251902 -0.298529 8.000000 +v -0.649519 -0.375000 8.000000 +v -0.497718 -0.491482 8.000000 +v -0.308013 -0.466507 8.000000 +v -0.191531 -0.314705 8.000000 +v -0.216507 -0.125000 8.000000 +v -0.368308 -0.008519 8.000000 +v -0.558013 -0.033494 8.000000 +v -0.674495 -0.185295 8.000000 +v -0.270633 -0.156250 8.062500 +v -0.384484 -0.068889 8.062500 +v -0.251902 -0.298529 8.062500 +v -0.339263 -0.412380 8.062500 +v -0.481542 -0.431112 8.062500 +v -0.595393 -0.343750 8.062500 +v -0.614124 -0.201472 8.062500 +v -0.526763 -0.087620 8.062500 +v -0.497718 -0.491482 8.062500 +v -0.649519 -0.375000 8.062500 +v -0.308013 -0.466507 8.062500 +v -0.191531 -0.314705 8.062500 +v -0.216507 -0.125000 8.062500 +v -0.368308 -0.008519 8.062500 +v -0.558013 -0.033494 8.062500 +v -0.674495 -0.185295 8.062500 +v -0.433013 -0.250000 8.187500 +v -0.366722 -0.364820 8.132584 +v -0.339263 -0.412380 8.000000 +v -0.366722 -0.364820 7.867418 +v -0.433013 -0.250000 7.812500 +v -0.499304 -0.135180 7.867418 +v -0.526763 -0.087620 8.000000 +v -0.499304 -0.135180 8.132584 +v -0.318193 -0.183709 8.132584 +v -0.270633 -0.156250 8.000000 +v -0.318193 -0.183709 7.867418 +v -0.547833 -0.316292 7.867418 +v -0.595393 -0.343750 8.000000 +v -0.547833 -0.316292 8.132584 +v -0.398698 -0.121935 8.132584 +v -0.384484 -0.068889 8.000000 +v -0.398698 -0.121935 7.867418 +v -0.467328 -0.378065 7.867418 +v -0.481542 -0.431112 8.000000 +v -0.467328 -0.378065 8.132584 +v -0.561078 -0.215685 8.132584 +v -0.614124 -0.201472 8.000000 +v -0.561078 -0.215685 7.867418 +v -0.304948 -0.284315 7.867418 +v -0.251902 -0.298529 8.000000 +v -0.304948 -0.284315 8.132584 +v 0.339263 0.412380 8.000000 +v 0.526763 0.087620 8.000000 +v 0.270633 0.156250 8.000000 +v 0.595393 0.343750 8.000000 +v 0.384484 0.068889 8.000000 +v 0.481542 0.431112 8.000000 +v 0.614124 0.201472 8.000000 +v 0.251902 0.298529 8.000000 +v 0.649519 0.375000 8.000000 +v 0.497718 0.491482 8.000000 +v 0.308013 0.466507 8.000000 +v 0.191531 0.314705 8.000000 +v 0.216507 0.125000 8.000000 +v 0.368308 0.008519 8.000000 +v 0.558013 0.033494 8.000000 +v 0.674495 0.185295 8.000000 +v 0.270633 0.156250 8.062500 +v 0.384484 0.068889 8.062500 +v 0.251902 0.298529 8.062500 +v 0.339263 0.412380 8.062500 +v 0.481542 0.431112 8.062500 +v 0.595393 0.343750 8.062500 +v 0.614124 0.201472 8.062500 +v 0.526763 0.087620 8.062500 +v 0.497718 0.491482 8.062500 +v 0.649519 0.375000 8.062500 +v 0.308013 0.466507 8.062500 +v 0.191531 0.314705 8.062500 +v 0.216507 0.125000 8.062500 +v 0.368308 0.008519 8.062500 +v 0.558013 0.033494 8.062500 +v 0.674495 0.185295 8.062500 +v 0.433013 -0.250000 8.187500 +v 0.499304 -0.135180 8.132584 +v 0.526763 -0.087620 8.000000 +v 0.499304 -0.135180 7.867418 +v 0.433013 -0.250000 7.812500 +v 0.366722 -0.364820 7.867418 +v 0.339263 -0.412380 8.000000 +v 0.366722 -0.364820 8.132584 +v 0.318193 -0.183709 8.132584 +v 0.270633 -0.156250 8.000000 +v 0.318193 -0.183709 7.867418 +v 0.547833 -0.316292 7.867418 +v 0.595393 -0.343750 8.000000 +v 0.547833 -0.316292 8.132584 +v 0.304948 -0.284315 8.132584 +v 0.251902 -0.298529 8.000000 +v 0.304948 -0.284315 7.867418 +v 0.561078 -0.215685 7.867418 +v 0.614124 -0.201472 8.000000 +v 0.561078 -0.215685 8.132584 +v 0.467328 -0.378065 8.132584 +v 0.481542 -0.431112 8.000000 +v 0.467328 -0.378065 7.867418 +v 0.398698 -0.121935 7.867418 +v 0.384484 -0.068889 8.000000 +v 0.398698 -0.121935 8.132584 +v -0.526763 0.087620 8.000000 +v -0.339263 0.412380 8.000000 +v -0.270633 0.156250 8.000000 +v -0.595393 0.343750 8.000000 +v -0.251902 0.298529 8.000000 +v -0.614124 0.201472 8.000000 +v -0.481542 0.431112 8.000000 +v -0.384484 0.068889 8.000000 +v -0.649519 0.375000 8.000000 +v -0.674495 0.185296 8.000000 +v -0.558013 0.033494 8.000000 +v -0.368308 0.008518 8.000000 +v -0.216507 0.125000 8.000000 +v -0.191531 0.314705 8.000000 +v -0.308013 0.466507 8.000000 +v -0.497718 0.491482 8.000000 +v -0.270633 0.156250 8.062500 +v -0.251902 0.298529 8.062500 +v -0.384484 0.068889 8.062500 +v -0.526763 0.087620 8.062500 +v -0.614124 0.201472 8.062500 +v -0.595393 0.343750 8.062500 +v -0.481542 0.431112 8.062500 +v -0.339263 0.412380 8.062500 +v -0.674495 0.185296 8.062500 +v -0.649519 0.375000 8.062500 +v -0.558013 0.033494 8.062500 +v -0.368308 0.008518 8.062500 +v -0.216507 0.125000 8.062500 +v -0.191531 0.314705 8.062500 +v -0.308013 0.466507 8.062500 +v -0.497718 0.491482 8.062500 +v -0.433013 0.250000 8.187500 +v -0.499304 0.135180 8.132584 +v -0.526763 0.087620 8.000000 +v -0.499304 0.135180 7.867418 +v -0.433013 0.250000 7.812500 +v -0.366722 0.364820 7.867418 +v -0.339263 0.412380 8.000000 +v -0.366722 0.364820 8.132584 +v -0.318193 0.183709 8.132584 +v -0.270633 0.156250 8.000000 +v -0.318193 0.183709 7.867418 +v -0.547833 0.316292 7.867418 +v -0.595393 0.343750 8.000000 +v -0.547833 0.316292 8.132584 +v -0.304948 0.284315 8.132584 +v -0.251902 0.298529 8.000000 +v -0.304948 0.284315 7.867418 +v -0.561078 0.215685 7.867418 +v -0.614124 0.201472 8.000000 +v -0.561078 0.215685 8.132584 +v -0.467328 0.378065 8.132584 +v -0.481542 0.431112 8.000000 +v -0.467328 0.378065 7.867418 +v -0.398698 0.121935 7.867418 +v -0.384484 0.068889 8.000000 +v -0.398698 0.121935 8.132584 +v 0.526763 -0.087620 8.000000 +v 0.339263 -0.412380 8.000000 +v 0.270633 -0.156250 8.000000 +v 0.595393 -0.343750 8.000000 +v 0.251902 -0.298529 8.000000 +v 0.614124 -0.201472 8.000000 +v 0.481542 -0.431112 8.000000 +v 0.384484 -0.068889 8.000000 +v 0.649519 -0.375000 8.000000 +v 0.674495 -0.185296 8.000000 +v 0.558013 -0.033494 8.000000 +v 0.368308 -0.008518 8.000000 +v 0.216507 -0.125000 8.000000 +v 0.191531 -0.314705 8.000000 +v 0.308013 -0.466507 8.000000 +v 0.497718 -0.491482 8.000000 +v 0.270633 -0.156250 8.062500 +v 0.251902 -0.298529 8.062500 +v 0.384484 -0.068889 8.062500 +v 0.526763 -0.087620 8.062500 +v 0.614124 -0.201472 8.062500 +v 0.595393 -0.343750 8.062500 +v 0.481542 -0.431112 8.062500 +v 0.339263 -0.412380 8.062500 +v 0.674495 -0.185296 8.062500 +v 0.649519 -0.375000 8.062500 +v 0.558013 -0.033494 8.062500 +v 0.368308 -0.008518 8.062500 +v 0.216507 -0.125000 8.062500 +v 0.191531 -0.314705 8.062500 +v 0.308013 -0.466507 8.062500 +v 0.497718 -0.491482 8.062500 +vt 0.241282 0.246079 +vt 0.233209 0.265596 +vt 0.225136 0.246079 +vt 0.660448 0.437693 +vt 0.664133 0.453126 +vt 0.660448 0.468558 +vt 0.215016 0.297589 +vt 0.209423 0.257024 +vt 0.215449 0.269500 +vt 0.238802 0.328051 +vt 0.227616 0.328051 +vt 0.233209 0.312437 +vt 0.256994 0.257024 +vt 0.251401 0.297589 +vt 0.250969 0.269500 +vt 0.251401 0.155536 +vt 0.256994 0.196101 +vt 0.250969 0.183625 +vt 0.227616 0.125074 +vt 0.238802 0.125074 +vt 0.233209 0.140688 +vt 0.209423 0.196101 +vt 0.215016 0.155536 +vt 0.215449 0.183625 +vt 0.212702 0.242176 +vt 0.212702 0.210949 +vt 0.217496 0.215618 +vt 0.227616 0.289017 +vt 0.219726 0.293125 +vt 0.223089 0.278072 +vt 0.246692 0.293125 +vt 0.240234 0.308739 +vt 0.238802 0.289017 +vt 0.253716 0.210949 +vt 0.253716 0.242176 +vt 0.248922 0.237507 +vt 0.238802 0.164108 +vt 0.246692 0.160000 +vt 0.243329 0.175053 +vt 0.219726 0.160000 +vt 0.226184 0.144386 +vt 0.227616 0.164108 +vt 0.221740 0.235167 +vt 0.217496 0.237507 +vt 0.225136 0.207046 +vt 0.221740 0.217958 +vt 0.229254 0.272456 +vt 0.225695 0.263851 +vt 0.237164 0.272456 +vt 0.243329 0.278072 +vt 0.240723 0.263851 +vt 0.244678 0.235167 +vt 0.248922 0.215618 +vt 0.244678 0.217958 +vt 0.240723 0.189274 +vt 0.237164 0.180669 +vt 0.241282 0.207046 +vt 0.233209 0.187529 +vt 0.225695 0.189274 +vt 0.223089 0.175053 +vt 0.229254 0.180669 +vt 0.000000 0.625000 +vt 0.208955 0.671875 +vt 0.000000 0.671875 +vt 0.000000 0.406250 +vt 0.208955 0.453125 +vt 0.000000 0.453125 +vt 0.000000 0.187500 +vt 0.208955 0.234375 +vt 0.000000 0.234375 +vt 0.000000 0.515625 +vt 0.208955 0.562500 +vt 0.000000 0.562500 +vt 0.000000 0.296875 +vt 0.208955 0.343750 +vt 0.000000 0.343750 +vt 0.000000 0.734375 +vt 0.208955 0.781250 +vt 0.000000 0.781250 +vt 0.249994 0.351563 +vt 0.248356 0.368116 +vt 0.244403 0.374973 +vt 0.249994 0.351562 +vt 0.248356 0.368116 +vt 0.244403 0.374973 +vt 0.244403 0.328152 +vt 0.249994 0.351562 +vt 0.244403 0.374973 +vt 0.249994 0.351563 +vt 0.248356 0.368116 +vt 0.244403 0.374973 +vt 0.249994 0.351562 +vt 0.248356 0.368116 +vt 0.244403 0.374973 +vt 0.244403 0.328152 +vt 0.249994 0.351562 +vt 0.244403 0.374973 +vt 0.276412 0.187560 +vt 0.328065 0.187560 +vt 0.302239 0.374880 +vt 0.276412 0.437560 +vt 0.302239 0.375120 +vt 0.328065 0.562440 +vt -0.000000 0.125000 +vt 0.029851 0.093750 +vt 0.029851 0.125000 +vt 0.007463 0.062500 +vt 0.029851 0.062500 +vt 0.029851 0.031250 +vt 0.007463 0.031250 +vt 0.029851 0.000000 +vt 0.037313 0.031250 +vt -0.000000 0.062500 +vt 0.619403 0.031250 +vt 0.597015 0.062500 +vt 0.597015 0.031250 +vt 0.037313 0.093750 +vt 0.223881 0.125000 +vt 0.037313 0.125000 +vt 0.619403 0.062500 +vt 0.597015 0.093750 +vt 0.037313 0.125000 +vt 0.231343 0.000000 +vt 0.276119 0.031250 +vt 0.231343 0.031250 +vt 0.037313 0.031250 +vt 0.223881 0.062500 +vt 0.037313 0.062500 +vt 0.037313 -0.000000 +vt 0.223881 0.031250 +vt 0.223881 0.093750 +vt 0.231343 0.125000 +vt 0.223881 0.125000 +vt 0.231343 0.093750 +vt 0.626866 0.093750 +vt 0.597015 0.125000 +vt 0.223881 0.031250 +vt 0.231343 0.062500 +vt 0.279851 0.093750 +vt 0.291045 0.125000 +vt 0.279851 0.125000 +vt 0.276119 0.125000 +vt 0.276119 0.093750 +vt 0.276119 0.062500 +vt 0.294776 0.093750 +vt 0.332090 0.125000 +vt 0.294776 0.125000 +vt 0.332090 0.062500 +vt 0.332090 0.093750 +vt 0.332090 0.000000 +vt 0.294776 0.031250 +vt 0.294776 0.000000 +vt 0.332090 0.031250 +vt 0.291045 0.000000 +vt 0.279851 0.000000 +vt 0.294776 0.062500 +vt 0.597015 0.000000 +vt 0.589552 0.125000 +vt 0.626866 0.031250 +vt 0.626866 0.062500 +vt 0.589552 0.062500 +vt 0.402985 0.031250 +vt 0.589552 0.031250 +vt 0.589552 0.031250 +vt 0.395522 0.031250 +vt 0.350746 0.000000 +vt 0.395522 0.000000 +vt 0.589552 0.125000 +vt 0.402985 0.093750 +vt 0.589552 0.093750 +vt 0.402985 0.000000 +vt 0.589552 0.000000 +vt 0.402985 0.062500 +vt 0.402985 0.031250 +vt 0.395522 0.062500 +vt 0.402985 0.125000 +vt 0.395522 0.125000 +vt 0.395522 0.093750 +vt 0.350746 0.031250 +vt 0.350746 0.062500 +vt 0.350746 0.093750 +vt 0.335821 0.093750 +vt 0.347015 0.125000 +vt 0.335821 0.125000 +vt 0.347015 0.000000 +vt 0.335821 0.000000 +vt 0.347015 0.093750 +vt 0.570895 0.828125 +vt 0.548507 0.671875 +vt 0.570895 0.609375 +vt 0.656716 0.562500 +vt 0.641791 0.578125 +vt 0.641791 0.562500 +vt 0.641791 0.593750 +vt 0.656716 0.609375 +vt 0.641791 0.609375 +vt 0.660448 0.578125 +vt 0.656716 0.593750 +vt 0.656716 0.578125 +vt 0.638060 0.593750 +vt 0.638060 0.578125 +vt 0.735075 0.187432 +vt 0.727628 0.156250 +vt 0.735075 0.125068 +vt 0.679105 0.421875 +vt 0.690298 0.437500 +vt 0.679105 0.437500 +vt 0.682836 0.406250 +vt 0.690298 0.421875 +vt 0.690298 0.296875 +vt 0.682836 0.296875 +vt 0.701493 0.296875 +vt 0.694030 0.406250 +vt 0.694030 0.296875 +vt 0.690298 0.406250 +vt 0.679105 0.406250 +vt 0.679105 0.296875 +vt 0.701493 0.406250 +vt 0.694030 0.421875 +vt 0.675373 0.421875 +vt 0.675373 0.437500 +vt 0.641791 0.593750 +vt 0.656716 0.609375 +vt 0.641791 0.609375 +vt 0.656716 0.562500 +vt 0.641791 0.578125 +vt 0.641791 0.562500 +vt 0.656716 0.578125 +vt 0.660448 0.593750 +vt 0.656716 0.593750 +vt 0.638060 0.578125 +vt 0.638060 0.593750 +vt 0.119403 0.828125 +vt 0.126866 0.781250 +vt 0.126866 0.828125 +vt 0.104478 0.828125 +vt 0.111940 0.781250 +vt 0.111940 0.828125 +vt 0.119403 0.781250 +vt 0.134328 0.781250 +vt 0.134328 0.828125 +vt 0.041045 0.859375 +vt 0.026119 0.875000 +vt 0.026119 0.859375 +vt 0.078358 0.828125 +vt 0.093284 0.812500 +vt 0.093284 0.828125 +vt 0.026119 0.828125 +vt 0.041045 0.812500 +vt 0.041045 0.828125 +vt 0.093284 0.859375 +vt 0.078358 0.875000 +vt 0.078358 0.859375 +vt 0.067164 0.859375 +vt 0.052239 0.875000 +vt 0.052239 0.859375 +vt 0.052239 0.828125 +vt 0.067164 0.812500 +vt 0.067164 0.828125 +vt 0.000000 0.828125 +vt 0.014925 0.812500 +vt 0.014925 0.828125 +vt 0.014925 0.859375 +vt 0.000000 0.875000 +vt 0.000000 0.859375 +vt 0.018657 0.875000 +vt 0.022388 0.875000 +vt 0.022388 0.812500 +vt 0.044776 0.875000 +vt 0.048507 0.812500 +vt 0.044776 0.812500 +vt 0.070896 0.875000 +vt 0.074627 0.875000 +vt 0.074627 0.812500 +vt 0.104478 0.859375 +vt 0.097015 0.875000 +vt 0.100746 0.812500 +vt 0.097015 0.812500 +vt 0.690298 0.203125 +vt 0.694030 0.187500 +vt 0.694030 0.203125 +vt 0.675373 0.171875 +vt 0.675373 0.218750 +vt 0.716418 0.218750 +vt 0.701493 0.187500 +vt 0.716418 0.171875 +vt 0.697761 0.203125 +vt 0.701493 0.203125 +vt 0.686567 0.281250 +vt 0.694030 0.296875 +vt 0.686567 0.296875 +vt 0.705224 0.296875 +vt 0.697761 0.265625 +vt 0.705224 0.281250 +vt 0.694030 0.234375 +vt 0.697761 0.234375 +vt 0.701493 0.265625 +vt 0.697761 0.156250 +vt 0.697761 0.187500 +vt 0.694030 0.156250 +vt 0.690298 0.187500 +vt 0.690298 0.125000 +vt 0.701493 0.125000 +vt 0.697761 0.296875 +vt 0.694030 0.265625 +vt 0.574405 0.179713 +vt 0.619624 0.179713 +vt 0.597015 0.343699 +vt 0.574406 0.507787 +vt 0.574406 0.398463 +vt 0.597015 0.343801 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.640568 0.398416 +vt 0.656716 0.281294 +vt 0.672865 0.398416 +vt 0.640568 0.164085 +vt 0.672864 0.164085 +vt 0.656716 0.281206 +vt 0.600746 0.609375 +vt 0.623134 0.765625 +vt 0.600746 0.828125 +vt 0.729809 0.178299 +vt 0.735075 0.187432 +vt 0.735075 0.125068 +vt 0.690298 0.437500 +vt 0.679105 0.421875 +vt 0.679105 0.437500 +vt 0.682836 0.406250 +vt 0.690298 0.421875 +vt 0.690298 0.406250 +vt 0.690298 0.296875 +vt 0.682836 0.296875 +vt 0.694030 0.406250 +vt 0.701493 0.296875 +vt 0.694030 0.296875 +vt 0.679105 0.406250 +vt 0.679105 0.296875 +vt 0.694030 0.421875 +vt 0.701493 0.406250 +vt 0.675373 0.421875 +vt 0.675373 0.437500 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.671642 0.484375 +vt 0.667910 0.468750 +vt 0.671642 0.468750 +vt 0.667910 0.500000 +vt 0.667910 0.484375 +vt 0.671642 0.500000 +vt 0.667910 0.515625 +vt 0.671642 0.515625 +vt 0.667910 0.531250 +vt 0.671642 0.546875 +vt 0.671642 0.531250 +vt 0.667910 0.562500 +vt 0.667910 0.546875 +vt 0.671642 0.453125 +vt 0.667910 0.437500 +vt 0.671642 0.437500 +vt 0.667910 0.453125 +vt 0.657842 0.464038 +vt 0.656762 0.453126 +vt 0.657842 0.442213 +vt 0.663054 0.442213 +vt 0.663054 0.464038 +vt 0.214890 0.251728 +vt 0.218845 0.280412 +vt 0.226184 0.308739 +vt 0.229254 0.305577 +vt 0.237164 0.305577 +vt 0.247573 0.280412 +vt 0.251528 0.251728 +vt 0.251528 0.201397 +vt 0.247573 0.172713 +vt 0.240234 0.144386 +vt 0.237164 0.147548 +vt 0.229254 0.147548 +vt 0.218845 0.172713 +vt 0.214890 0.201397 +vt 0.208955 0.625000 +vt 0.208955 0.406250 +vt 0.208955 0.187500 +vt 0.208955 0.515625 +vt 0.208955 0.296875 +vt 0.208955 0.734375 +vt 0.240450 0.368116 +vt 0.238812 0.351563 +vt 0.240450 0.335009 +vt 0.244403 0.328152 +vt 0.248356 0.335009 +vt 0.240450 0.368116 +vt 0.238812 0.351563 +vt 0.240450 0.335009 +vt 0.244403 0.328152 +vt 0.248356 0.335009 +vt 0.240450 0.368116 +vt 0.238812 0.351562 +vt 0.240450 0.335009 +vt 0.248356 0.335009 +vt 0.248356 0.368116 +vt 0.240450 0.368116 +vt 0.238812 0.351562 +vt 0.240450 0.335009 +vt 0.244403 0.328152 +vt 0.248356 0.335009 +vt 0.240450 0.368116 +vt 0.238812 0.351563 +vt 0.240450 0.335009 +vt 0.244403 0.328152 +vt 0.248356 0.335009 +vt 0.240450 0.368116 +vt 0.238812 0.351562 +vt 0.240450 0.335009 +vt 0.248356 0.335009 +vt 0.248356 0.368116 +vt 0.287328 0.358149 +vt 0.276412 0.312440 +vt 0.272417 0.250000 +vt 0.287328 0.141851 +vt 0.302239 0.125120 +vt 0.317150 0.141851 +vt 0.332061 0.250000 +vt 0.328065 0.312440 +vt 0.317150 0.358149 +vt 0.317150 0.608149 +vt 0.302239 0.624880 +vt 0.287328 0.608149 +vt 0.276412 0.562440 +vt 0.272417 0.500000 +vt 0.287328 0.391851 +vt 0.317150 0.391851 +vt 0.328065 0.437560 +vt 0.332061 0.500000 +vt -0.000000 0.093750 +vt -0.000000 0.000000 +vt -0.000000 0.031250 +vt 0.276119 0.000000 +vt 0.223881 0.000000 +vt 0.626866 0.125000 +vt 0.291045 0.093750 +vt 0.626866 0.000000 +vt 0.402985 0.125000 +vt 0.350746 0.125000 +vt 0.548507 0.765625 +vt 0.660448 0.593750 +vt 0.742521 0.156250 +vt 0.740340 0.178299 +vt 0.729809 0.178299 +vt 0.729809 0.134201 +vt 0.740340 0.134201 +vt 0.705224 0.421875 +vt 0.660448 0.578125 +vt 0.104478 0.781250 +vt 0.041045 0.875000 +vt 0.078358 0.812500 +vt 0.026119 0.812500 +vt 0.093284 0.875000 +vt 0.067164 0.875000 +vt 0.052239 0.812500 +vt 0.000000 0.812500 +vt 0.014925 0.875000 +vt 0.018657 0.812500 +vt 0.048507 0.875000 +vt 0.070896 0.812500 +vt 0.100746 0.875000 +vt 0.104478 0.828125 +vt 0.690298 0.265625 +vt 0.583961 0.329052 +vt 0.574405 0.289037 +vt 0.570908 0.234375 +vt 0.583961 0.139698 +vt 0.597015 0.125051 +vt 0.610068 0.139698 +vt 0.623122 0.234375 +vt 0.619624 0.289037 +vt 0.610068 0.329052 +vt 0.619624 0.507787 +vt 0.610068 0.547802 +vt 0.597015 0.562449 +vt 0.583961 0.547802 +vt 0.570908 0.453125 +vt 0.583961 0.358448 +vt 0.610068 0.358448 +vt 0.619624 0.398463 +vt 0.623122 0.453125 +vt 0.671642 0.562500 +vt 0.666040 0.426995 +vt 0.656716 0.437456 +vt 0.647393 0.426995 +vt 0.638070 0.359375 +vt 0.640568 0.320335 +vt 0.647393 0.291755 +vt 0.666040 0.291755 +vt 0.672865 0.320335 +vt 0.675363 0.359375 +vt 0.647393 0.270745 +vt 0.640568 0.242166 +vt 0.638070 0.203125 +vt 0.647393 0.135505 +vt 0.656716 0.125044 +vt 0.666039 0.135505 +vt 0.675363 0.203125 +vt 0.672864 0.242166 +vt 0.666039 0.270745 +vt 0.623134 0.671875 +vt 0.740340 0.178299 +vt 0.742521 0.156250 +vt 0.740340 0.134201 +vt 0.729809 0.134201 +vt 0.727628 0.156250 +vt 0.705224 0.421875 +vt 0.671642 0.562500 +vt 0.671642 0.562500 +vt 0.671642 0.562500 +vt 0.671642 0.562500 +vt 0.671642 0.562500 +vt 0.656716 0.531250 +vt 0.652985 0.515625 +vt 0.656716 0.515625 +vt 0.656716 0.484375 +vt 0.652985 0.468750 +vt 0.656716 0.468750 +vt 0.656716 0.453125 +vt 0.652985 0.437500 +vt 0.656716 0.437500 +vt 0.652985 0.546875 +vt 0.652985 0.531250 +vt 0.652985 0.500000 +vt 0.656716 0.500000 +vt 0.652985 0.484375 +vt 0.652985 0.453125 +vt 0.656716 0.562500 +vt 0.656716 0.546875 +vt 0.000000 0.359375 +vt 0.208955 0.390625 +vt 0.000000 0.390625 +vt 0.000000 0.171875 +vt 0.000000 0.140625 +vt 0.208955 0.171875 +vt 0.000000 0.125000 +vt 0.208955 0.140625 +vt 0.000000 0.468750 +vt 0.208955 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.718750 +vt 0.208955 0.468750 +vt 0.208955 0.687500 +vt 0.000000 0.687500 +vt 0.000000 0.250000 +vt 0.208955 0.281250 +vt 0.000000 0.281250 +vt 0.000000 0.609375 +vt 0.208955 0.359375 +vt 0.208955 0.718750 +vt 0.208955 0.578125 +vt 0.000000 0.578125 +vt 0.208955 0.609375 +vt 0.208955 0.250000 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.343750 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.421875 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.421875 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.375000 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.208955 0.390625 +vt 0.238806 0.406250 +vt 0.208955 0.390625 +vt 0.238806 0.406250 +vt 0.208955 0.343750 +vt 0.238806 0.359375 +vt 0.208955 0.421875 +vt 0.238806 0.437500 +vt 0.208955 0.375000 +vt 0.238806 0.390625 +vt 0.208955 0.390625 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.208955 0.390625 +vt 0.238806 0.406250 +vt 0.208955 0.343750 +vt 0.238806 0.359375 +vt 0.208955 0.421875 +vt 0.238806 0.437500 +vt 0.208955 0.375000 +vt 0.238806 0.390625 +vt 0.208955 0.390625 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.208955 0.390625 +vt 0.238806 0.406250 +vt 0.208955 0.343750 +vt 0.238806 0.359375 +vt 0.208955 0.421875 +vt 0.238806 0.437500 +vt 0.208955 0.375000 +vt 0.238806 0.390625 +vt 0.208955 0.375000 +vt 0.238806 0.390625 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.238806 0.406250 +vt 0.208955 0.343750 +vt 0.238806 0.359375 +vt 0.208955 0.343750 +vt 0.238806 0.359375 +vt 0.208955 0.421875 +vt 0.238806 0.437500 +vt 0.208955 0.375000 +vt 0.238806 0.390625 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.328125 +vt 0.238806 0.343750 +vt 0.208955 0.406250 +vt 0.238806 0.421875 +vt 0.208955 0.359375 +vt 0.238806 0.375000 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.208955 0.437500 +vt 0.238806 0.453125 +vt 0.208955 0.453125 +vt 0.238806 0.406250 +vt 0.238806 0.359375 +vt 0.238806 0.437500 +vt 0.238806 0.437500 +vt 0.238806 0.390625 +vt 0.257463 0.625000 +vt 0.272388 0.687500 +vt 0.257463 0.687500 +vt 0.257463 0.312500 +vt 0.272388 0.375000 +vt 0.257463 0.375000 +vt 0.257463 0.125000 +vt 0.272388 0.187500 +vt 0.257463 0.187500 +vt 0.272388 0.750000 +vt 0.257463 0.750000 +vt 0.272388 0.437500 +vt 0.257463 0.437500 +vt 0.257463 0.500000 +vt 0.272388 0.562500 +vt 0.257463 0.562500 +vt 0.272388 0.250000 +vt 0.257463 0.250000 +vt 0.272388 0.812500 +vt 0.257463 0.812500 +vt 0.272388 0.500000 +vt 0.272388 0.625000 +vt 0.272388 0.312500 +vt 0.272388 0.875000 +vt 0.257463 0.875000 +vt 0.406716 0.406250 +vt 0.332090 0.500000 +vt 0.332090 0.406250 +vt 0.406716 0.125000 +vt 0.332090 0.218750 +vt 0.332090 0.125000 +vt 0.406716 0.500000 +vt 0.332090 0.593750 +vt 0.406716 0.593750 +vt 0.332090 0.687500 +vt 0.406716 0.781250 +vt 0.332090 0.875000 +vt 0.332090 0.781250 +vt 0.332090 0.312500 +vt 0.406716 0.218750 +vt 0.406716 0.609375 +vt 0.414179 0.515625 +vt 0.488806 0.609375 +vt 0.406716 0.703125 +vt 0.488806 0.703125 +vt 0.421642 0.906250 +vt 0.488806 0.796875 +vt 0.488806 0.906250 +vt 0.421642 0.406250 +vt 0.488806 0.312500 +vt 0.488806 0.406250 +vt 0.414179 0.796875 +vt 0.429104 0.312500 +vt 0.488806 0.218750 +vt 0.488806 0.515625 +vt 0.429104 0.218750 +vt 0.421642 0.125000 +vt 0.488806 0.671875 +vt 0.488806 0.765625 +vt 0.496269 0.562500 +vt 0.503731 0.437500 +vt 0.548507 0.578125 +vt 0.507463 0.328125 +vt 0.548507 0.328125 +vt 0.507463 0.234375 +vt 0.503731 0.125000 +vt 0.548507 0.234375 +vt 0.503731 1.000000 +vt 0.548507 0.875000 +vt 0.548507 1.000000 +vt 0.496269 0.875000 +vt 0.727612 0.140625 +vt 0.716418 0.125000 +vt 0.727612 0.125000 +vt 0.727612 0.234375 +vt 0.716418 0.218750 +vt 0.727612 0.218750 +vt 0.727612 0.203125 +vt 0.716418 0.187500 +vt 0.727612 0.187500 +vt 0.727612 0.171875 +vt 0.716418 0.156250 +vt 0.727612 0.156250 +vt 0.716418 0.140625 +vt 0.727612 0.250000 +vt 0.716418 0.234375 +vt 0.716418 0.203125 +vt 0.716418 0.171875 +vt 0.014925 0.781250 +vt 0.000000 0.781250 +vt 0.022388 0.781250 +vt 0.018657 0.781250 +vt 0.026119 0.781250 +vt 0.044776 0.781250 +vt 0.052239 0.781250 +vt 0.070896 0.781250 +vt 0.093284 0.781250 +vt 0.078358 0.781250 +vt 0.100746 0.781250 +vt 0.488806 0.125000 +vt 0.548507 0.437500 +vt 0.548507 0.125000 +vt 0.630597 0.187500 +vt 0.623134 0.125000 +vt 0.630597 0.125000 +vt 0.630597 0.750000 +vt 0.623134 0.687500 +vt 0.630597 0.687500 +vt 0.630597 0.437500 +vt 0.623134 0.375000 +vt 0.630597 0.375000 +vt 0.630597 0.562500 +vt 0.623134 0.500000 +vt 0.630597 0.500000 +vt 0.630597 0.250000 +vt 0.623134 0.187500 +vt 0.630597 0.812500 +vt 0.623134 0.750000 +vt 0.623134 0.437500 +vt 0.630597 0.625000 +vt 0.623134 0.562500 +vt 0.630597 0.312500 +vt 0.623134 0.250000 +vt 0.630597 0.875000 +vt 0.623134 0.812500 +vt 0.623134 0.625000 +vt 0.623134 0.312500 +vt 0.641791 0.437500 +vt 0.645522 0.453125 +vt 0.641791 0.453125 +vt 0.645965 0.438018 +vt 0.649254 0.453125 +vt 0.645522 0.546875 +vt 0.641791 0.562500 +vt 0.641791 0.546875 +vt 0.649254 0.546875 +vt 0.645522 0.562500 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.641791 0.515625 +vt 0.645522 0.515625 +vt 0.641791 0.500000 +vt 0.645522 0.500000 +vt 0.645522 0.484375 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.649254 0.562500 +vt 0.649254 0.437500 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.570895 0.265625 +vt 0.555970 0.250000 +vt 0.570895 0.250000 +vt 0.570895 0.187500 +vt 0.555970 0.171875 +vt 0.570895 0.171875 +vt 0.570895 0.140625 +vt 0.555970 0.125000 +vt 0.570895 0.125000 +vt 0.570895 0.281250 +vt 0.555970 0.265625 +vt 0.570895 0.203125 +vt 0.555970 0.187500 +vt 0.570895 0.234375 +vt 0.555970 0.218750 +vt 0.570895 0.218750 +vt 0.570895 0.156250 +vt 0.555970 0.140625 +vt 0.570895 0.296875 +vt 0.555970 0.281250 +vt 0.555970 0.203125 +vt 0.555970 0.234375 +vt 0.555970 0.156250 +vt 0.570895 0.312500 +vt 0.555970 0.296875 +vt 0.638060 0.359375 +vt 0.630597 0.312500 +vt 0.638060 0.312500 +vt 0.638060 0.453125 +vt 0.630597 0.406250 +vt 0.638060 0.406250 +vt 0.638060 0.218750 +vt 0.630597 0.171875 +vt 0.638060 0.171875 +vt 0.638060 0.640625 +vt 0.630597 0.593750 +vt 0.638060 0.593750 +vt 0.630597 0.359375 +vt 0.638060 0.500000 +vt 0.630597 0.453125 +vt 0.638060 0.265625 +vt 0.630597 0.218750 +vt 0.638060 0.687500 +vt 0.630597 0.640625 +vt 0.638060 0.546875 +vt 0.630597 0.500000 +vt 0.630597 0.265625 +vt 0.630597 0.125000 +vt 0.638060 0.125000 +vt 0.630597 0.546875 +vt 0.716418 0.125000 +vt 0.727612 0.140625 +vt 0.727612 0.125000 +vt 0.716418 0.218750 +vt 0.727612 0.234375 +vt 0.727612 0.218750 +vt 0.716418 0.187500 +vt 0.727612 0.203125 +vt 0.727612 0.187500 +vt 0.716418 0.156250 +vt 0.727612 0.171875 +vt 0.727612 0.156250 +vt 0.716418 0.140625 +vt 0.716418 0.234375 +vt 0.727612 0.250000 +vt 0.716418 0.203125 +vt 0.716418 0.171875 +vt 0.641791 0.437500 +vt 0.645522 0.453125 +vt 0.641791 0.453125 +vt 0.645965 0.438018 +vt 0.649254 0.453125 +vt 0.645522 0.546875 +vt 0.641791 0.562500 +vt 0.641791 0.546875 +vt 0.649254 0.546875 +vt 0.645522 0.562500 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.641791 0.515625 +vt 0.645522 0.515625 +vt 0.641791 0.500000 +vt 0.645522 0.500000 +vt 0.645522 0.484375 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.649254 0.562500 +vt 0.649254 0.437500 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.641791 0.437500 +vt 0.645522 0.453125 +vt 0.641791 0.453125 +vt 0.649254 0.437500 +vt 0.645965 0.438018 +vt 0.641791 0.546875 +vt 0.645522 0.562500 +vt 0.641791 0.562500 +vt 0.649254 0.546875 +vt 0.645522 0.546875 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.645522 0.515625 +vt 0.641791 0.515625 +vt 0.645522 0.500000 +vt 0.641791 0.500000 +vt 0.645522 0.484375 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.649254 0.562500 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.641791 0.437500 +vt 0.645522 0.453125 +vt 0.641791 0.453125 +vt 0.649254 0.437500 +vt 0.645965 0.438018 +vt 0.641791 0.546875 +vt 0.645522 0.562500 +vt 0.641791 0.562500 +vt 0.649254 0.546875 +vt 0.645522 0.546875 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.645522 0.515625 +vt 0.641791 0.515625 +vt 0.645522 0.500000 +vt 0.641791 0.500000 +vt 0.645522 0.484375 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.649254 0.562500 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.645965 0.438018 +vt 0.641791 0.453125 +vt 0.641791 0.437500 +vt 0.649254 0.437500 +vt 0.645522 0.453125 +vt 0.645522 0.546875 +vt 0.641791 0.562500 +vt 0.641791 0.546875 +vt 0.649254 0.562500 +vt 0.649254 0.546875 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.645522 0.515625 +vt 0.641791 0.515625 +vt 0.645522 0.500000 +vt 0.641791 0.500000 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.645522 0.484375 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.645965 0.438018 +vt 0.641791 0.453125 +vt 0.641791 0.437500 +vt 0.649254 0.437500 +vt 0.645522 0.453125 +vt 0.645522 0.546875 +vt 0.641791 0.562500 +vt 0.641791 0.546875 +vt 0.649254 0.562500 +vt 0.649254 0.546875 +vt 0.645522 0.531250 +vt 0.641791 0.531250 +vt 0.649254 0.531250 +vt 0.645522 0.515625 +vt 0.641791 0.515625 +vt 0.645522 0.500000 +vt 0.641791 0.500000 +vt 0.641791 0.484375 +vt 0.645522 0.468750 +vt 0.641791 0.468750 +vt 0.645522 0.484375 +vt 0.638060 0.468750 +vt 0.638060 0.484375 +vt 0.638060 0.500000 +vt 0.638060 0.515625 +vt 0.638060 0.531250 +vt 0.638060 0.546875 +vt 0.638060 0.437500 +vt 0.638060 0.453125 +vt 0.649254 0.453125 +vt 0.649254 0.468750 +vt 0.649254 0.484375 +vt 0.649254 0.500000 +vt 0.652985 0.468750 +vt 0.652985 0.484375 +vt 0.649254 0.515625 +vt 0.652985 0.500000 +vt 0.652985 0.515625 +vt 0.652985 0.531250 +vt 0.652985 0.546875 +vt 0.652985 0.437500 +vt 0.652985 0.453125 +vt 0.664179 0.468750 +vt 0.675373 0.484375 +vt 0.675373 0.453125 +vt 0.664179 0.484375 +vt 0.664179 0.500000 +vt 0.675373 0.562500 +vt 0.664179 0.515625 +vt 0.675373 0.546875 +vt 0.664179 0.531250 +vt 0.675373 0.531250 +vt 0.664179 0.546875 +vt 0.675373 0.515625 +vt 0.664179 0.437500 +vt 0.675373 0.500000 +vt 0.664179 0.453125 +vt 0.675373 0.468750 +vt 0.652985 0.562500 +vt 0.208955 0.125000 +vt 0.238806 0.328125 +vt 0.238806 0.328125 +vt 0.238806 0.328125 +vt 0.238806 0.328125 +vt 0.238806 0.328125 +vt 0.238806 0.328125 +vt 0.272388 0.125000 +vt 0.406716 0.687500 +vt 0.406716 0.875000 +vt 0.406716 0.312500 +vt 0.716418 0.250000 +vt 0.041045 0.781250 +vt 0.048507 0.781250 +vt 0.067164 0.781250 +vt 0.074627 0.781250 +vt 0.097015 0.781250 +vt 0.623134 0.875000 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vt 0.555970 0.312500 +vt 0.630597 0.687500 +vt 0.716418 0.250000 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vt 0.645522 0.562500 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vt 0.645522 0.562500 +vt 0.675373 0.437500 +vt 0.664179 0.562500 +vn 0.0000 0.0000 1.0000 +vn -0.8660 -0.5000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -0.7071 0.7071 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 0.2425 0.9701 +vn 0.0000 0.2425 -0.9701 +vn 0.1499 0.9887 0.0000 +vn 0.7813 0.6242 0.0000 +vn 0.1499 -0.9887 0.0000 +vn -0.2208 -0.9753 0.0000 +vn 0.7813 -0.6242 0.0000 +vn 0.9550 -0.2965 0.0000 +vn -0.7813 0.6242 0.0000 +vn -0.1499 0.9887 0.0000 +vn -0.7813 -0.6242 0.0000 +vn -0.9550 -0.2965 0.0000 +vn -0.9550 0.2965 0.0000 +vn 0.2208 -0.9753 0.0000 +vn -0.1499 -0.9887 0.0000 +vn 0.9550 0.2965 0.0000 +vn 0.9312 0.3645 0.0000 +vn 0.9312 -0.3645 0.0000 +vn -0.9312 0.3645 0.0000 +vn -0.7343 0.6788 0.0000 +vn -0.2208 0.9753 0.0000 +vn -0.7343 -0.6788 0.0000 +vn -0.9312 -0.3645 0.0000 +vn 0.7343 -0.6788 0.0000 +vn 0.2208 0.9753 0.0000 +vn 0.7343 0.6788 0.0000 +vn 0.9659 -0.2588 0.0000 +vn 0.2588 -0.9659 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.9659 -0.2588 0.0000 +vn 0.2588 0.9659 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.9659 0.2588 0.0000 +vn 0.9659 0.2588 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.2588 -0.9659 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.9474 -0.3073 0.0890 +vn 0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.9474 -0.3073 0.0890 +vn -0.3827 -0.9239 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.8995 0.4220 -0.1137 +vn 0.3827 0.9239 0.0000 +vn 0.3595 0.9099 -0.2070 +vn -0.3827 0.9239 0.0000 +vn -0.8995 0.4220 -0.1137 +vn -0.9239 0.3827 0.0000 +vn 0.3827 -0.9239 0.0000 +vn -0.3933 -0.8620 0.3198 +vn 0.3916 0.7677 -0.5072 +vn -0.3595 0.9099 -0.2070 +vn -0.3916 0.7677 -0.5072 +vn -0.9259 0.3078 -0.2189 +vn -0.9481 -0.2244 0.2254 +vn 0.3988 -0.5746 0.7147 +vn 0.9481 -0.2244 0.2254 +vn 0.3933 -0.8620 0.3198 +vn -0.3988 -0.5746 0.7147 +vn 0.9259 0.3078 -0.2189 +vn -0.4348 0.6780 -0.5927 +vn 0.4348 0.6780 -0.5927 +vn 0.9530 0.2142 -0.2142 +vn 0.3909 -0.4393 0.8089 +vn -0.3909 -0.4393 0.8089 +vn -0.9530 0.2142 -0.2142 +vn -0.9414 -0.1935 0.2764 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.9414 -0.1935 0.2764 +vn 0.0000 -0.7486 0.6630 +vn 0.5293 -0.5294 0.6630 +vn 0.5294 -0.5294 -0.6630 +vn -0.5293 -0.5294 0.6630 +vn -0.5294 -0.5294 -0.6630 +vn -0.7486 -0.0000 0.6630 +vn -0.7486 -0.0000 -0.6630 +vn -0.5293 0.5294 0.6630 +vn 0.0000 0.7486 0.6630 +vn 0.5293 0.5294 0.6630 +vn 0.7486 -0.0000 0.6630 +vn 0.7486 -0.0000 -0.6630 +vn 0.5294 0.5294 -0.6630 +vn 0.0000 0.7486 -0.6630 +vn -0.5294 0.5294 -0.6630 +vn 0.0000 -0.7486 -0.6630 +vn -0.6483 -0.3743 0.6630 +vn -0.1938 -0.7231 0.6630 +vn -0.6483 -0.3743 -0.6630 +vn -0.7231 0.1938 0.6630 +vn -0.7231 0.1938 -0.6630 +vn -0.3743 0.6483 0.6630 +vn -0.3743 0.6483 -0.6630 +vn 0.1938 0.7231 0.6630 +vn 0.6483 0.3743 0.6630 +vn 0.7231 -0.1938 0.6630 +vn 0.3743 -0.6483 0.6630 +vn -0.1938 -0.7231 -0.6630 +vn 0.3743 -0.6483 -0.6630 +vn 0.7231 -0.1938 -0.6630 +vn 0.6483 0.3743 -0.6630 +vn 0.1938 0.7231 -0.6630 +vn -0.7231 -0.1938 0.6630 +vn -0.6483 0.3743 0.6630 +vn -0.6483 0.3743 -0.6630 +vn -0.1938 0.7231 0.6630 +vn -0.1938 0.7231 -0.6630 +vn 0.3743 0.6483 0.6630 +vn 0.3743 0.6483 -0.6630 +vn 0.7231 0.1938 0.6630 +vn 0.6483 -0.3743 0.6630 +vn 0.1938 -0.7231 0.6630 +vn -0.3743 -0.6483 0.6630 +vn -0.7231 -0.1938 -0.6630 +vn -0.3743 -0.6483 -0.6630 +vn 0.1938 -0.7231 -0.6630 +vn 0.6483 -0.3743 -0.6630 +vn 0.7231 0.1938 -0.6630 +s off +f 29/1/1 13/2/1 53/3/1 +f 61/4/1 63/5/1 58/6/1 +f 73/7/1 74/8/1 49/9/1 +f 68/10/1 67/11/1 9/12/1 +f 72/13/1 71/14/1 25/15/1 +f 76/16/1 75/17/1 41/18/1 +f 65/19/1 66/20/1 17/21/1 +f 69/22/1 70/23/1 33/24/1 +f 81/25/1 82/26/1 39/27/1 +f 11/28/1 86/29/1 55/30/1 +f 80/31/1 79/32/1 15/33/1 +f 84/34/1 83/35/1 31/36/1 +f 19/37/1 87/38/1 47/39/1 +f 77/40/1 78/41/1 23/42/1 +f 39/27/1 52/43/1 51/44/1 +f 37/45/1 52/43/1 38/46/1 +f 12/47/1 55/30/1 54/48/1 +f 12/47/1 53/3/1 13/2/1 +f 14/49/1 27/50/1 15/33/1 +f 14/49/1 29/1/1 28/51/1 +f 30/52/1 43/53/1 31/36/1 +f 29/1/1 44/54/1 30/52/1 +f 19/37/1 46/55/1 20/56/1 +f 20/56/1 45/57/1 21/58/1 +f 23/42/1 36/59/1 35/60/1 +f 21/58/1 36/59/1 22/61/1 +f 69/62/2 94/63/2 70/64/2 +f 68/65/3 91/66/3 67/67/3 +f 76/68/4 99/69/4 75/70/4 +f 73/71/5 98/72/5 74/73/5 +f 72/74/6 95/75/6 71/76/6 +f 65/77/7 90/78/7 66/79/7 +f 135/80/1 136/81/1 129/82/1 +f 151/83/1 152/84/1 145/85/1 +f 125/86/1 127/87/1 121/88/1 +f 143/89/1 144/90/1 137/91/1 +f 159/92/1 160/93/1 153/94/1 +f 117/95/1 119/96/1 113/97/1 +f 165/98/1 169/99/1 161/100/1 +f 181/101/8 179/102/8 175/103/8 +f 186/104/9 187/105/9 185/106/9 +f 187/105/8 192/107/8 191/108/8 +f 192/107/10 189/109/10 191/108/10 +f 190/110/1 185/111/1 189/109/1 +f 191/108/10 189/109/10 196/112/10 +f 188/113/11 190/110/11 192/107/11 +f 193/114/9 204/115/9 195/116/9 +f 194/117/9 197/118/9 185/119/9 +f 203/120/8 219/121/8 204/115/8 +f 185/106/9 187/105/9 194/122/9 +f 197/123/8 206/124/8 198/125/8 +f 189/126/10 200/127/10 196/128/10 +f 185/129/3 198/130/3 189/126/3 +f 196/128/7 199/131/7 194/117/7 +f 191/108/12 194/117/12 187/105/12 +f 197/132/9 199/133/9 201/134/9 +f 220/135/10 217/136/10 219/121/10 +f 200/137/10 198/125/10 202/138/10 +f 207/139/13 209/140/13 205/141/13 +f 201/134/9 205/142/9 197/132/9 +f 202/138/1 207/143/1 201/134/1 +f 198/125/10 208/144/10 202/138/10 +f 210/145/7 211/146/7 209/147/7 +f 210/145/1 216/148/1 212/149/1 +f 211/150/8 213/151/8 209/152/8 +f 216/148/3 213/151/3 215/153/3 +f 209/154/8 206/124/8 205/155/8 +f 214/156/1 207/139/1 208/144/1 +f 206/124/11 214/156/11 208/144/11 +f 200/127/14 201/134/14 199/131/14 +f 217/157/1 193/114/1 195/116/1 +f 219/121/10 217/136/10 222/158/10 +f 203/120/15 218/159/15 220/160/15 +f 221/161/9 223/162/9 195/163/9 +f 195/116/9 204/115/9 221/164/9 +f 223/165/8 230/166/8 224/167/8 +f 217/168/10 226/169/10 222/170/10 +f 195/163/3 224/171/3 217/172/3 +f 222/170/7 225/173/7 221/161/7 +f 219/121/12 221/161/12 204/115/12 +f 223/165/9 225/174/9 227/175/9 +f 226/176/10 224/177/10 228/178/10 +f 227/175/9 229/179/9 223/165/9 +f 228/178/1 231/180/1 227/175/1 +f 224/177/10 232/181/10 228/178/10 +f 226/169/14 227/175/14 225/173/14 +f 212/182/16 230/183/16 211/184/16 +f 230/185/8 215/153/8 211/186/8 +f 215/153/15 231/180/15 216/148/15 +f 216/148/1 232/187/1 212/182/1 +f 259/188/12 263/189/12 260/190/12 +f 267/191/7 266/192/7 265/193/7 +f 271/194/3 269/195/3 270/196/3 +f 267/197/8 272/198/8 268/199/8 +f 266/192/1 270/200/1 265/201/1 +f 268/199/10 271/194/10 266/192/10 +f 283/202/10 285/203/10 287/204/10 +f 299/205/3 297/206/3 298/207/3 +f 294/208/10 300/209/10 299/205/10 +f 292/210/10 294/208/10 290/211/10 +f 289/212/9 295/213/9 291/214/9 +f 291/214/8 296/215/8 292/210/8 +f 290/211/1 293/216/1 289/217/1 +f 293/218/9 297/219/9 295/213/9 +f 295/213/8 300/209/8 296/215/8 +f 294/220/14 298/207/14 293/221/14 +f 302/222/7 303/223/7 301/224/7 +f 305/225/3 307/226/3 306/227/3 +f 308/228/8 303/229/8 304/230/8 +f 306/231/1 302/222/1 301/232/1 +f 307/226/9 304/230/9 302/222/9 +f 312/233/8 315/234/8 311/235/8 +f 309/236/1 314/237/1 310/238/1 +f 310/238/10 316/239/10 312/233/10 +f 311/235/9 313/240/9 309/241/9 +f 325/242/9 322/243/9 334/244/9 +f 331/245/10 318/246/10 338/247/10 +f 335/248/10 323/249/10 328/250/10 +f 339/251/9 320/252/9 330/253/9 +f 329/254/9 341/255/9 326/256/9 +f 327/257/10 344/258/10 332/259/10 +f 337/260/10 346/261/10 336/262/10 +f 333/263/9 348/264/9 340/265/9 +f 345/266/9 334/244/9 322/267/9 +f 336/262/10 321/268/10 335/248/10 +f 326/256/9 324/269/9 325/242/9 +f 342/270/10 328/250/10 323/271/10 +f 343/272/9 330/253/9 320/273/9 +f 332/259/10 319/274/10 331/245/10 +f 340/275/9 317/276/9 339/251/9 +f 347/277/10 338/247/10 318/278/10 +f 355/279/3 359/280/3 358/281/3 +f 352/282/10 355/279/10 350/283/10 +f 349/284/9 353/285/9 351/286/9 +f 357/287/3 353/285/3 354/288/3 +f 359/289/9 362/290/9 358/291/9 +f 357/292/10 364/293/10 360/294/10 +f 362/295/17 355/279/17 358/281/17 +f 361/296/17 354/288/17 349/297/17 +f 364/298/18 353/285/18 360/299/18 +f 363/300/18 356/301/18 352/302/18 +f 349/297/17 362/295/17 361/296/17 +f 351/303/18 363/300/18 352/302/18 +f 361/304/3 363/305/3 364/293/3 +f 381/306/1 385/307/1 377/308/1 +f 375/309/8 373/310/8 371/311/8 +f 421/312/8 429/313/8 416/314/8 +f 421/312/8 423/315/8 430/316/8 +f 418/317/8 424/318/8 423/315/8 +f 420/319/8 425/320/8 424/318/8 +f 422/321/8 425/320/8 415/322/8 +f 422/321/8 427/323/8 426/324/8 +f 419/325/8 427/326/8 417/327/8 +f 419/325/8 429/313/8 428/328/8 +f 481/329/8 477/330/8 473/331/8 +f 487/332/1 491/333/1 483/334/1 +f 258/335/12 259/188/12 260/190/12 +f 258/335/12 262/336/12 257/337/12 +f 506/338/9 505/339/9 509/340/9 +f 519/341/3 521/342/3 520/343/3 +f 516/344/9 522/345/9 518/346/9 +f 516/344/9 514/347/9 512/348/9 +f 517/349/10 511/350/10 513/351/10 +f 518/346/8 513/351/8 514/347/8 +f 515/352/1 512/348/1 511/353/1 +f 519/354/10 515/355/10 517/349/10 +f 522/345/8 517/349/8 518/346/8 +f 520/343/14 516/356/14 515/357/14 +f 555/358/8 563/359/8 550/360/8 +f 555/358/8 557/361/8 564/362/8 +f 552/363/8 558/364/8 557/361/8 +f 554/365/8 559/366/8 558/364/8 +f 556/367/8 559/366/8 549/368/8 +f 556/367/8 561/369/8 560/370/8 +f 553/371/8 561/372/8 551/373/8 +f 553/371/8 563/359/8 562/374/8 +f 613/375/8 621/376/8 608/377/8 +f 613/375/8 615/378/8 622/379/8 +f 610/380/8 616/381/8 615/378/8 +f 612/382/8 617/383/8 616/381/8 +f 614/384/8 617/383/8 607/385/8 +f 614/384/8 619/386/8 618/387/8 +f 611/388/8 619/389/8 609/390/8 +f 611/388/8 621/376/8 620/391/8 +f 671/392/8 679/393/8 666/394/8 +f 671/392/8 673/395/8 680/396/8 +f 668/397/8 674/398/8 673/395/8 +f 670/399/8 675/400/8 674/398/8 +f 672/401/8 675/400/8 665/402/8 +f 672/401/8 677/403/8 676/404/8 +f 669/405/8 677/406/8 667/407/8 +f 669/405/8 679/393/8 678/408/8 +f 729/409/8 737/410/8 724/411/8 +f 729/409/8 731/412/8 738/413/8 +f 726/414/8 732/415/8 731/412/8 +f 728/416/8 733/417/8 732/415/8 +f 730/418/8 733/417/8 723/419/8 +f 730/418/8 735/420/8 734/421/8 +f 727/422/8 735/423/8 725/424/8 +f 727/422/8 737/410/8 736/425/8 +f 787/426/8 795/427/8 782/428/8 +f 787/426/8 789/429/8 796/430/8 +f 784/431/8 790/432/8 789/429/8 +f 786/433/8 791/434/8 790/432/8 +f 788/435/8 791/434/8 781/436/8 +f 788/435/8 793/437/8 792/438/8 +f 785/439/8 793/440/8 783/441/8 +f 785/439/8 795/427/8 794/442/8 +f 53/3/1 37/45/1 29/1/1 +f 37/45/1 21/58/1 29/1/1 +f 21/58/1 45/57/1 29/1/1 +f 58/6/1 57/443/1 59/444/1 +f 59/444/1 60/445/1 61/4/1 +f 61/4/1 62/446/1 63/5/1 +f 63/5/1 64/447/1 58/6/1 +f 58/6/1 59/444/1 61/4/1 +f 81/25/1 50/448/1 74/8/1 +f 50/448/1 49/9/1 74/8/1 +f 49/9/1 56/449/1 73/7/1 +f 56/449/1 86/29/1 73/7/1 +f 85/450/1 10/451/1 67/11/1 +f 10/451/1 9/12/1 67/11/1 +f 9/12/1 16/452/1 68/10/1 +f 16/452/1 79/32/1 68/10/1 +f 80/31/1 26/453/1 71/14/1 +f 26/453/1 25/15/1 71/14/1 +f 25/15/1 32/454/1 72/13/1 +f 32/454/1 83/35/1 72/13/1 +f 84/34/1 42/455/1 75/17/1 +f 42/455/1 41/18/1 75/17/1 +f 41/18/1 48/456/1 76/16/1 +f 48/456/1 87/38/1 76/16/1 +f 88/457/1 18/458/1 66/20/1 +f 18/458/1 17/21/1 66/20/1 +f 17/21/1 24/459/1 65/19/1 +f 24/459/1 78/41/1 65/19/1 +f 77/40/1 34/460/1 70/23/1 +f 34/460/1 33/24/1 70/23/1 +f 33/24/1 40/461/1 69/22/1 +f 40/461/1 82/26/1 69/22/1 +f 82/26/1 40/461/1 39/27/1 +f 39/27/1 51/44/1 81/25/1 +f 51/44/1 50/448/1 81/25/1 +f 11/28/1 10/451/1 85/450/1 +f 85/450/1 86/29/1 11/28/1 +f 86/29/1 56/449/1 55/30/1 +f 79/32/1 16/452/1 15/33/1 +f 15/33/1 27/50/1 80/31/1 +f 27/50/1 26/453/1 80/31/1 +f 83/35/1 32/454/1 31/36/1 +f 31/36/1 43/53/1 84/34/1 +f 43/53/1 42/455/1 84/34/1 +f 19/37/1 18/458/1 88/457/1 +f 88/457/1 87/38/1 19/37/1 +f 87/38/1 48/456/1 47/39/1 +f 78/41/1 24/459/1 23/42/1 +f 23/42/1 35/60/1 77/40/1 +f 35/60/1 34/460/1 77/40/1 +f 39/27/1 38/46/1 52/43/1 +f 37/45/1 53/3/1 52/43/1 +f 12/47/1 11/28/1 55/30/1 +f 12/47/1 54/48/1 53/3/1 +f 14/49/1 28/51/1 27/50/1 +f 14/49/1 13/2/1 29/1/1 +f 30/52/1 44/54/1 43/53/1 +f 29/1/1 45/57/1 44/54/1 +f 19/37/1 47/39/1 46/55/1 +f 20/56/1 46/55/1 45/57/1 +f 23/42/1 22/61/1 36/59/1 +f 21/58/1 37/45/1 36/59/1 +f 69/62/2 93/462/2 94/63/2 +f 68/65/3 92/463/3 91/66/3 +f 76/68/4 100/464/4 99/69/4 +f 73/71/5 97/465/5 98/72/5 +f 72/74/6 96/466/6 95/75/6 +f 65/77/7 89/467/7 90/78/7 +f 129/82/1 130/468/1 131/469/1 +f 131/469/1 132/470/1 129/82/1 +f 132/470/1 133/471/1 129/82/1 +f 133/471/1 134/472/1 129/82/1 +f 134/472/1 135/80/1 129/82/1 +f 145/85/1 146/473/1 147/474/1 +f 147/474/1 148/475/1 145/85/1 +f 148/475/1 149/476/1 145/85/1 +f 149/476/1 150/477/1 145/85/1 +f 150/477/1 151/83/1 145/85/1 +f 121/88/1 122/478/1 123/479/1 +f 123/479/1 124/480/1 125/86/1 +f 125/86/1 126/481/1 127/87/1 +f 127/87/1 128/482/1 121/88/1 +f 121/88/1 123/479/1 125/86/1 +f 137/91/1 138/483/1 139/484/1 +f 139/484/1 140/485/1 137/91/1 +f 140/485/1 141/486/1 137/91/1 +f 141/486/1 142/487/1 137/91/1 +f 142/487/1 143/89/1 137/91/1 +f 153/94/1 154/488/1 155/489/1 +f 155/489/1 156/490/1 153/94/1 +f 156/490/1 157/491/1 153/94/1 +f 157/491/1 158/492/1 153/94/1 +f 158/492/1 159/92/1 153/94/1 +f 113/97/1 114/493/1 115/494/1 +f 115/494/1 116/495/1 117/95/1 +f 117/95/1 118/496/1 119/96/1 +f 119/96/1 120/497/1 113/97/1 +f 113/97/1 115/494/1 117/95/1 +f 161/100/1 162/498/1 163/499/1 +f 163/499/1 164/500/1 161/100/1 +f 164/500/1 165/98/1 161/100/1 +f 165/98/1 166/501/1 169/99/1 +f 166/501/1 167/502/1 169/99/1 +f 167/502/1 168/503/1 169/99/1 +f 169/99/1 170/504/1 171/505/1 +f 171/505/1 172/506/1 169/99/1 +f 172/506/1 161/100/1 169/99/1 +f 175/103/8 173/507/8 174/508/8 +f 174/508/8 184/509/8 175/103/8 +f 184/509/8 183/510/8 175/103/8 +f 183/510/8 182/511/8 181/101/8 +f 181/101/8 180/512/8 179/102/8 +f 179/102/8 178/513/8 175/103/8 +f 178/513/8 177/514/8 175/103/8 +f 177/514/8 176/515/8 175/103/8 +f 183/510/8 181/101/8 175/103/8 +f 186/104/9 188/516/9 187/105/9 +f 187/105/8 188/516/8 192/107/8 +f 192/107/10 190/110/10 189/109/10 +f 190/110/1 186/517/1 185/111/1 +f 188/113/11 186/518/11 190/110/11 +f 193/114/9 203/120/9 204/115/9 +f 194/117/9 199/131/9 197/118/9 +f 203/120/8 220/135/8 219/121/8 +f 197/123/8 205/519/8 206/124/8 +f 189/126/10 198/130/10 200/127/10 +f 185/129/3 197/520/3 198/130/3 +f 196/128/7 200/127/7 199/131/7 +f 191/108/12 196/128/12 194/117/12 +f 220/135/10 218/521/10 217/136/10 +f 207/139/13 210/522/13 209/140/13 +f 201/134/9 207/143/9 205/142/9 +f 202/138/1 208/144/1 207/143/1 +f 198/125/10 206/124/10 208/144/10 +f 210/145/7 212/149/7 211/146/7 +f 210/145/1 214/156/1 216/148/1 +f 211/150/8 215/153/8 213/151/8 +f 216/148/3 214/156/3 213/151/3 +f 209/154/8 213/151/8 206/124/8 +f 214/156/1 210/522/1 207/139/1 +f 206/124/11 213/151/11 214/156/11 +f 200/127/14 202/138/14 201/134/14 +f 217/157/1 218/523/1 193/114/1 +f 203/120/15 193/114/15 218/159/15 +f 221/161/9 225/173/9 223/162/9 +f 223/165/8 229/179/8 230/166/8 +f 217/168/10 224/524/10 226/169/10 +f 195/163/3 223/162/3 224/171/3 +f 222/170/7 226/169/7 225/173/7 +f 219/121/12 222/170/12 221/161/12 +f 227/175/9 231/180/9 229/179/9 +f 228/178/1 232/181/1 231/180/1 +f 224/177/10 230/525/10 232/181/10 +f 226/169/14 228/178/14 227/175/14 +f 212/182/16 232/187/16 230/183/16 +f 230/185/8 229/179/8 215/153/8 +f 215/153/15 229/179/15 231/180/15 +f 216/148/1 231/180/1 232/187/1 +f 259/188/12 261/526/12 263/189/12 +f 267/191/7 268/199/7 266/192/7 +f 271/194/3 272/198/3 269/195/3 +f 267/197/8 269/527/8 272/198/8 +f 266/192/1 271/194/1 270/200/1 +f 268/199/10 272/198/10 271/194/10 +f 281/528/10 282/529/10 283/202/10 +f 283/202/10 284/530/10 285/203/10 +f 285/203/10 286/531/10 287/204/10 +f 287/204/10 288/532/10 281/528/10 +f 281/528/10 283/202/10 287/204/10 +f 299/205/3 300/209/3 297/206/3 +f 294/208/10 296/215/10 300/209/10 +f 292/210/10 296/215/10 294/208/10 +f 289/212/9 293/218/9 295/213/9 +f 291/214/8 295/213/8 296/215/8 +f 290/211/1 294/208/1 293/216/1 +f 293/218/9 298/533/9 297/219/9 +f 295/213/8 297/219/8 300/209/8 +f 294/220/14 299/205/14 298/207/14 +f 302/222/7 304/230/7 303/223/7 +f 305/225/3 308/228/3 307/226/3 +f 308/228/8 305/534/8 303/229/8 +f 306/231/1 307/226/1 302/222/1 +f 307/226/9 308/228/9 304/230/9 +f 312/233/8 316/239/8 315/234/8 +f 309/236/1 313/535/1 314/237/1 +f 310/238/10 314/237/10 316/239/10 +f 311/235/9 315/234/9 313/240/9 +f 325/242/9 324/536/9 322/243/9 +f 331/245/10 319/537/10 318/246/10 +f 335/248/10 321/538/10 323/249/10 +f 339/251/9 317/539/9 320/252/9 +f 329/254/9 343/540/9 341/255/9 +f 327/257/10 342/541/10 344/258/10 +f 337/260/10 347/542/10 346/261/10 +f 333/263/9 345/543/9 348/264/9 +f 345/266/9 333/263/9 334/244/9 +f 336/262/10 346/544/10 321/268/10 +f 326/256/9 341/545/9 324/269/9 +f 342/270/10 327/257/10 328/250/10 +f 343/272/9 329/254/9 330/253/9 +f 332/259/10 344/546/10 319/274/10 +f 340/275/9 348/547/9 317/276/9 +f 347/277/10 337/548/10 338/247/10 +f 355/279/3 356/301/3 359/280/3 +f 352/282/10 356/301/10 355/279/10 +f 349/284/9 354/288/9 353/285/9 +f 357/287/3 360/299/3 353/285/3 +f 359/289/9 363/305/9 362/290/9 +f 357/292/10 361/304/10 364/293/10 +f 362/295/17 350/549/17 355/279/17 +f 361/296/17 357/287/17 354/288/17 +f 364/298/18 351/303/18 353/285/18 +f 363/300/18 359/280/18 356/301/18 +f 349/297/17 350/549/17 362/295/17 +f 351/303/18 364/298/18 363/300/18 +f 361/304/3 362/290/3 363/305/3 +f 377/308/1 378/550/1 379/551/1 +f 379/551/1 380/552/1 377/308/1 +f 380/552/1 381/306/1 377/308/1 +f 381/306/1 382/553/1 383/554/1 +f 383/554/1 384/555/1 385/307/1 +f 385/307/1 386/556/1 387/557/1 +f 387/557/1 388/558/1 377/308/1 +f 381/306/1 383/554/1 385/307/1 +f 385/307/1 387/557/1 377/308/1 +f 367/559/8 366/560/8 365/561/8 +f 365/561/8 376/562/8 375/309/8 +f 375/309/8 374/563/8 373/310/8 +f 373/310/8 372/564/8 371/311/8 +f 371/311/8 370/565/8 369/566/8 +f 369/566/8 368/567/8 371/311/8 +f 368/567/8 367/559/8 371/311/8 +f 367/559/8 365/561/8 371/311/8 +f 365/561/8 375/309/8 371/311/8 +f 421/312/8 430/316/8 429/313/8 +f 421/312/8 418/317/8 423/315/8 +f 418/317/8 420/319/8 424/318/8 +f 420/319/8 415/322/8 425/320/8 +f 422/321/8 426/324/8 425/320/8 +f 422/321/8 417/568/8 427/323/8 +f 419/325/8 428/328/8 427/326/8 +f 419/325/8 416/314/8 429/313/8 +f 473/331/8 472/569/8 481/329/8 +f 472/569/8 471/570/8 481/329/8 +f 471/570/8 482/571/8 481/329/8 +f 481/329/8 480/572/8 479/573/8 +f 479/573/8 478/574/8 481/329/8 +f 478/574/8 477/330/8 481/329/8 +f 477/330/8 476/575/8 473/331/8 +f 476/575/8 475/576/8 473/331/8 +f 475/576/8 474/577/8 473/331/8 +f 483/334/1 484/578/1 487/332/1 +f 484/578/1 485/579/1 487/332/1 +f 485/579/1 486/580/1 487/332/1 +f 487/332/1 488/581/1 491/333/1 +f 488/581/1 489/582/1 491/333/1 +f 489/582/1 490/583/1 491/333/1 +f 491/333/1 492/584/1 493/585/1 +f 493/585/1 494/586/1 491/333/1 +f 494/586/1 483/334/1 491/333/1 +f 258/335/12 257/337/12 259/188/12 +f 258/335/12 264/587/12 262/336/12 +f 505/339/9 504/588/9 509/340/9 +f 504/588/9 503/589/9 509/340/9 +f 503/589/9 510/590/9 509/340/9 +f 509/340/9 508/591/9 507/592/9 +f 507/592/9 506/338/9 509/340/9 +f 519/341/3 522/345/3 521/342/3 +f 516/344/9 521/342/9 522/345/9 +f 516/344/9 518/346/9 514/347/9 +f 517/349/10 515/355/10 511/350/10 +f 518/346/8 517/349/8 513/351/8 +f 515/352/1 516/344/1 512/348/1 +f 519/354/10 520/593/10 515/355/10 +f 522/345/8 519/354/8 517/349/8 +f 520/343/14 521/342/14 516/356/14 +f 555/358/8 564/362/8 563/359/8 +f 555/358/8 552/363/8 557/361/8 +f 552/363/8 554/365/8 558/364/8 +f 554/365/8 549/368/8 559/366/8 +f 556/367/8 560/370/8 559/366/8 +f 556/367/8 551/594/8 561/369/8 +f 553/371/8 562/374/8 561/372/8 +f 553/371/8 550/360/8 563/359/8 +f 613/375/8 622/379/8 621/376/8 +f 613/375/8 610/380/8 615/378/8 +f 610/380/8 612/382/8 616/381/8 +f 612/382/8 607/385/8 617/383/8 +f 614/384/8 618/387/8 617/383/8 +f 614/384/8 609/595/8 619/386/8 +f 611/388/8 620/391/8 619/389/8 +f 611/388/8 608/377/8 621/376/8 +f 671/392/8 680/396/8 679/393/8 +f 671/392/8 668/397/8 673/395/8 +f 668/397/8 670/399/8 674/398/8 +f 670/399/8 665/402/8 675/400/8 +f 672/401/8 676/404/8 675/400/8 +f 672/401/8 667/596/8 677/403/8 +f 669/405/8 678/408/8 677/406/8 +f 669/405/8 666/394/8 679/393/8 +f 729/409/8 738/413/8 737/410/8 +f 729/409/8 726/414/8 731/412/8 +f 726/414/8 728/416/8 732/415/8 +f 728/416/8 723/419/8 733/417/8 +f 730/418/8 734/421/8 733/417/8 +f 730/418/8 725/597/8 735/420/8 +f 727/422/8 736/425/8 735/423/8 +f 727/422/8 724/411/8 737/410/8 +f 787/426/8 796/430/8 795/427/8 +f 787/426/8 784/431/8 789/429/8 +f 784/431/8 786/433/8 790/432/8 +f 786/433/8 781/436/8 791/434/8 +f 788/435/8 792/438/8 791/434/8 +f 788/435/8 783/598/8 793/437/8 +f 785/439/8 794/442/8 793/440/8 +f 785/439/8 782/428/8 795/427/8 +s 1 +f 3/599/9 57/600/15 2/601/15 +f 8/602/11 63/603/10 7/604/10 +f 6/605/16 61/606/7 5/607/7 +f 3/599/9 60/608/13 59/609/9 +f 2/601/15 58/610/3 1/611/3 +f 1/611/3 64/612/11 8/602/11 +f 7/604/10 62/613/16 6/605/16 +f 5/614/7 60/608/13 4/615/13 +f 80/616/19 103/617/20 79/618/20 +f 87/619/21 100/464/22 76/68/22 +f 88/620/23 111/621/21 87/619/21 +f 66/622/24 112/623/23 88/620/23 +f 85/624/25 110/625/26 86/626/26 +f 78/627/27 89/467/28 65/77/28 +f 67/67/29 109/628/25 85/624/25 +f 70/64/30 101/629/31 77/630/31 +f 79/618/20 92/463/32 68/65/32 +f 84/631/33 107/632/34 83/633/34 +f 82/634/35 93/462/36 69/62/36 +f 71/76/37 104/635/19 80/616/19 +f 77/630/31 102/636/27 78/627/27 +f 74/73/38 105/637/39 81/638/39 +f 83/633/34 96/466/40 72/74/40 +f 81/638/39 106/639/35 82/634/35 +f 86/626/26 97/465/41 73/71/41 +f 75/70/42 108/640/33 84/631/33 +f 29/641/6 132/642/43 28/643/43 +f 56/644/44 159/645/45 55/646/45 +f 16/647/13 119/648/9 15/649/9 +f 43/650/45 146/651/46 42/652/46 +f 30/653/47 133/654/6 29/655/6 +f 49/656/4 160/657/44 56/644/44 +f 9/658/7 120/659/13 16/647/13 +f 44/660/44 147/661/45 43/650/45 +f 31/662/48 134/663/47 30/653/47 +f 18/664/15 121/665/3 17/666/3 +f 45/667/4 148/668/44 44/660/44 +f 32/669/49 135/670/48 31/662/48 +f 19/671/9 122/672/15 18/664/15 +f 46/673/50 149/674/4 45/675/4 +f 25/676/2 136/677/49 32/669/49 +f 20/678/13 123/679/9 19/671/9 +f 47/680/51 150/681/50 46/673/50 +f 34/682/47 137/683/6 33/684/6 +f 21/685/7 124/686/13 20/678/13 +f 48/687/52 151/688/51 47/680/51 +f 35/689/48 138/690/47 34/682/47 +f 22/691/16 125/692/7 21/693/7 +f 41/694/5 152/695/52 48/687/52 +f 36/696/49 139/697/48 35/689/48 +f 23/698/10 126/699/16 22/691/16 +f 50/700/50 153/701/4 49/656/4 +f 10/702/16 113/703/7 9/658/7 +f 37/704/2 140/705/49 36/696/49 +f 24/706/11 127/707/10 23/698/10 +f 51/708/51 154/709/50 50/700/50 +f 11/710/10 114/711/16 10/702/16 +f 38/712/53 141/713/2 37/714/2 +f 17/666/3 128/715/11 24/706/11 +f 52/716/52 155/717/51 51/708/51 +f 12/718/11 115/719/10 11/710/10 +f 39/720/54 142/721/53 38/712/53 +f 26/722/53 129/723/2 25/676/2 +f 53/724/5 156/725/52 52/716/52 +f 13/726/3 116/727/11 12/718/11 +f 40/728/43 143/729/54 39/720/54 +f 27/730/54 130/731/53 26/722/53 +f 54/732/46 157/733/5 53/734/5 +f 14/735/15 117/736/3 13/737/3 +f 33/684/6 144/738/43 40/728/43 +f 28/643/43 131/739/54 27/730/54 +f 55/646/45 158/740/46 54/732/46 +f 15/649/9 118/741/15 14/735/15 +f 42/652/46 145/742/5 41/694/5 +f 163/743/5 176/744/9 164/745/9 +f 170/746/10 183/747/6 171/748/6 +f 167/749/7 180/750/54 168/751/54 +f 164/745/9 177/752/2 165/753/2 +f 171/748/6 184/754/51 172/755/51 +f 161/756/3 173/757/48 162/758/48 +f 168/751/54 181/759/4 169/760/4 +f 165/753/2 178/761/45 166/762/45 +f 172/755/51 174/763/3 161/756/3 +f 162/758/48 175/764/5 163/743/5 +f 169/760/4 182/765/10 170/746/10 +f 166/762/45 179/766/7 167/767/7 +f 242/768/55 236/769/56 234/770/57 +f 241/771/58 238/772/59 233/773/60 +f 244/774/61 239/775/62 236/769/56 +f 247/776/63 237/777/64 239/775/62 +f 243/778/65 233/779/60 235/780/66 +f 240/781/67 242/768/55 234/770/57 +f 237/777/64 243/778/65 235/780/66 +f 246/782/68 240/781/67 238/772/59 +f 247/783/63 244/784/61 255/785/69 +f 245/786/70 255/785/69 253/787/71 +f 241/788/58 251/789/72 249/790/73 +f 242/791/55 256/792/74 250/793/75 +f 243/794/65 253/787/71 251/789/72 +f 248/795/76 254/796/77 256/792/74 +f 242/791/55 252/797/78 244/784/61 +f 246/798/68 241/799/58 254/796/77 +f 255/800/69 261/526/79 253/801/71 +f 255/800/69 252/802/78 263/189/80 +f 250/803/75 260/804/81 252/802/78 +f 256/805/74 264/806/82 250/803/75 +f 254/807/77 264/806/82 256/805/74 +f 254/807/77 249/808/73 262/809/83 +f 249/810/73 259/811/84 257/812/85 +f 253/801/71 261/526/79 251/813/72 +f 280/814/12 287/815/7 279/816/7 +f 278/817/14 285/818/1 277/819/1 +f 276/820/86 283/821/3 275/822/3 +f 274/823/87 281/824/8 273/825/8 +f 273/825/8 288/826/12 280/814/12 +f 279/827/7 286/828/14 278/817/14 +f 277/819/1 284/829/86 276/820/86 +f 275/822/3 282/830/87 274/823/87 +f 332/259/88 326/256/89 327/257/89 +f 331/245/90 339/251/91 330/253/90 +f 333/263/92 337/260/93 336/262/92 +f 328/250/94 326/256/89 325/242/94 +f 330/253/90 332/259/88 331/245/90 +f 336/262/92 334/244/95 333/263/92 +f 340/275/93 338/247/91 337/548/93 +f 325/242/94 335/248/95 328/250/94 +f 345/831/88 347/542/89 348/832/89 +f 322/833/90 346/544/88 345/834/88 +f 322/835/90 323/249/91 321/538/90 +f 324/836/91 342/270/93 323/271/91 +f 341/837/93 344/258/92 342/541/93 +f 343/838/92 319/274/95 344/546/92 +f 317/839/94 319/537/95 320/840/95 +f 318/278/94 348/841/89 347/277/89 +f 255/785/69 244/784/61 252/797/78 +f 253/787/71 243/794/65 245/786/70 +f 263/189/80 252/802/78 260/804/81 +f 251/813/72 261/526/79 259/811/84 +f 254/796/77 241/799/58 249/842/73 +f 256/792/74 242/791/55 248/795/76 +f 250/803/75 264/806/82 258/843/96 +f 262/809/83 249/808/73 257/844/85 +f 372/845/54 383/846/7 371/847/7 +f 369/848/2 380/849/9 368/850/9 +f 376/851/51 387/852/6 375/853/6 +f 366/854/48 377/855/3 365/856/3 +f 373/857/4 384/858/54 372/845/54 +f 370/859/45 381/860/2 369/848/2 +f 365/856/3 388/861/51 376/851/51 +f 367/862/5 378/863/48 366/854/48 +f 374/864/10 385/865/4 373/857/4 +f 371/866/7 382/867/45 370/859/45 +f 368/850/9 379/868/5 367/862/5 +f 375/853/6 386/869/10 374/864/10 +f 397/870/97 404/871/16 403/872/98 +f 398/873/7 405/874/99 404/871/16 +f 413/875/13 397/876/97 414/877/100 +f 412/878/101 398/879/7 413/875/13 +f 391/880/9 414/877/100 390/881/102 +f 412/878/101 391/880/9 392/882/103 +f 408/883/104 391/880/9 390/881/102 +f 407/884/15 402/885/105 401/886/3 +f 410/887/11 402/885/105 409/888/106 +f 403/872/98 395/889/10 396/890/107 +f 395/889/10 409/888/106 396/890/107 +f 396/890/107 409/888/106 389/891/1 +f 409/888/106 402/885/105 389/892/1 +f 408/883/104 389/893/1 402/885/105 +f 389/894/1 408/883/104 390/881/102 +f 389/895/1 390/881/102 414/877/100 +f 414/877/100 397/876/97 389/896/1 +f 403/872/98 389/897/1 397/870/97 +f 389/898/1 403/872/98 396/890/107 +f 404/871/16 394/899/108 395/889/10 +f 410/887/11 394/899/108 411/900/109 +f 401/886/3 411/900/109 400/901/110 +f 393/902/8 411/900/109 394/899/108 +f 411/900/109 393/903/8 400/901/110 +f 406/904/111 401/886/3 400/901/110 +f 391/880/9 406/904/111 392/882/103 +f 393/905/8 406/904/111 400/901/110 +f 392/882/103 406/904/111 393/906/8 +f 392/882/103 393/907/8 412/878/101 +f 412/878/101 393/908/8 399/909/112 +f 405/874/99 399/910/112 393/911/8 +f 393/912/8 394/899/108 405/874/99 +f 430/316/13 445/913/9 429/313/9 +f 416/314/10 437/914/11 421/312/11 +f 417/327/7 432/915/16 419/325/16 +f 423/315/7 446/916/13 430/316/13 +f 424/318/16 440/917/7 423/315/7 +f 422/321/13 431/918/7 417/568/7 +f 425/320/10 439/919/16 424/318/16 +f 415/322/9 433/920/13 422/321/13 +f 426/324/11 441/921/10 425/320/10 +f 420/319/15 434/922/9 415/322/9 +f 427/323/3 442/923/11 426/324/11 +f 418/317/3 435/924/15 420/319/15 +f 428/328/15 443/925/3 427/326/3 +f 421/312/11 436/926/3 418/317/3 +f 429/313/9 444/927/15 428/328/15 +f 419/325/16 438/928/10 416/314/10 +f 450/929/9 461/930/5 449/931/5 +f 457/932/6 468/933/10 456/934/10 +f 454/935/54 465/936/7 453/937/7 +f 451/938/2 462/939/9 450/929/9 +f 458/940/51 469/941/6 457/932/6 +f 448/942/48 459/943/3 447/944/3 +f 455/945/4 466/946/54 454/935/54 +f 452/947/45 463/948/2 451/938/2 +f 447/944/3 470/949/51 458/940/51 +f 449/931/5 460/950/48 448/942/48 +f 456/934/10 467/951/4 455/945/4 +f 453/952/7 464/953/45 452/947/45 +f 482/954/51 493/955/6 481/956/6 +f 472/957/48 483/958/3 471/959/3 +f 479/960/4 490/961/54 478/962/54 +f 476/963/45 487/964/2 475/965/2 +f 471/959/3 494/966/51 482/954/51 +f 473/967/5 484/968/48 472/957/48 +f 480/969/10 491/970/4 479/960/4 +f 477/971/7 488/972/45 476/963/45 +f 474/973/9 485/974/5 473/967/5 +f 481/956/6 492/975/10 480/969/10 +f 478/962/54 489/976/7 477/977/7 +f 475/965/2 486/978/9 474/973/9 +f 509/979/7 502/980/12 501/981/7 +f 507/982/1 500/983/14 499/984/1 +f 505/985/3 498/986/86 497/987/3 +f 503/988/8 496/989/87 495/990/8 +f 510/991/12 495/990/8 502/980/12 +f 508/992/14 501/993/7 500/983/14 +f 506/994/86 499/984/1 498/986/86 +f 504/995/87 497/987/3 496/989/87 +f 531/996/105 538/997/15 537/998/104 +f 532/999/3 539/1000/111 538/997/15 +f 547/1001/11 531/1002/105 548/1003/106 +f 546/1004/109 532/1005/3 547/1001/11 +f 525/1006/10 548/1003/106 524/1007/107 +f 546/1004/109 525/1006/10 526/1008/108 +f 542/1009/98 525/1006/10 524/1007/107 +f 541/1010/16 536/1011/97 535/1012/7 +f 544/1013/13 536/1011/97 543/1014/100 +f 537/998/104 529/1015/9 530/1016/102 +f 529/1015/9 543/1014/100 530/1016/102 +f 530/1016/102 543/1014/100 523/1017/1 +f 543/1014/100 536/1011/97 523/1018/1 +f 542/1009/98 523/1019/1 536/1011/97 +f 523/1020/1 542/1009/98 524/1007/107 +f 523/1021/1 524/1007/107 548/1003/106 +f 548/1003/106 531/1002/105 523/1022/1 +f 537/998/104 523/1023/1 531/996/105 +f 523/1024/1 537/998/104 530/1016/102 +f 538/997/15 528/1025/103 529/1015/9 +f 544/1013/13 528/1025/103 545/1026/101 +f 535/1012/7 545/1026/101 534/1027/112 +f 527/1028/8 545/1026/101 528/1025/103 +f 545/1026/101 527/1029/8 534/1027/112 +f 540/1030/99 535/1012/7 534/1027/112 +f 525/1006/10 540/1030/99 526/1008/108 +f 527/1031/8 540/1030/99 534/1027/112 +f 526/1008/108 540/1030/99 527/1032/8 +f 526/1008/108 527/1033/8 546/1004/109 +f 546/1004/109 527/1034/8 533/1035/110 +f 539/1000/111 533/1036/110 527/1037/8 +f 527/1038/8 528/1025/103 539/1000/111 +f 564/362/11 579/1039/10 563/359/10 +f 550/360/9 571/1040/13 555/358/13 +f 551/373/3 566/1041/15 553/371/15 +f 557/361/3 580/1042/11 564/362/11 +f 558/364/15 574/1043/3 557/361/3 +f 556/367/11 565/1044/3 551/594/3 +f 559/366/9 573/1045/15 558/364/15 +f 549/368/10 567/1046/11 556/367/11 +f 560/370/13 575/1047/9 559/366/9 +f 554/365/16 568/1048/10 549/368/10 +f 561/369/7 576/1049/13 560/370/13 +f 552/363/7 569/1050/16 554/365/16 +f 562/374/16 577/1051/7 561/372/7 +f 555/358/13 570/1052/7 552/363/7 +f 563/359/10 578/1053/16 562/374/16 +f 553/371/15 572/1054/9 550/360/9 +f 589/1055/113 596/1056/53 595/1057/114 +f 591/1058/115 596/1056/53 590/1059/2 +f 606/1060/116 590/1061/2 589/1062/113 +f 604/1063/117 590/1061/2 605/1064/49 +f 583/1065/48 606/1060/116 582/1066/118 +f 604/1063/117 583/1065/48 584/1067/119 +f 599/1068/47 582/1066/118 600/1069/120 +f 593/1070/6 600/1069/120 594/1071/121 +f 602/1072/43 594/1071/121 601/1073/122 +f 595/1057/114 587/1074/54 588/1075/123 +f 588/1075/123 602/1072/43 601/1073/122 +f 588/1075/123 601/1073/122 581/1076/1 +f 601/1073/122 594/1071/121 581/1077/1 +f 600/1069/120 581/1078/1 594/1071/121 +f 581/1079/1 600/1069/120 582/1066/118 +f 581/1080/1 582/1066/118 606/1060/116 +f 606/1060/116 589/1062/113 581/1081/1 +f 595/1057/114 581/1082/1 589/1055/113 +f 581/1083/1 595/1057/114 588/1075/123 +f 587/1074/54 597/1084/124 586/1085/125 +f 603/1086/126 587/1074/54 586/1085/125 +f 593/1070/6 603/1086/126 592/1087/127 +f 585/1088/8 603/1086/126 586/1085/125 +f 603/1086/126 585/1089/8 592/1087/127 +f 598/1090/128 593/1070/6 592/1087/127 +f 584/1067/119 599/1068/47 598/1090/128 +f 585/1091/8 598/1090/128 592/1087/127 +f 584/1067/119 598/1090/128 585/1092/8 +f 584/1067/119 585/1093/8 604/1063/117 +f 604/1063/117 585/1094/8 591/1095/115 +f 597/1084/124 591/1058/115 585/1096/8 +f 585/1097/8 586/1085/125 597/1084/124 +f 622/379/49 637/1098/48 621/376/48 +f 608/377/54 629/1099/43 613/375/43 +f 609/390/2 624/1100/53 611/388/53 +f 615/378/2 638/1101/49 622/379/49 +f 616/381/53 632/1102/2 615/378/2 +f 614/384/49 623/1103/2 609/595/2 +f 617/383/54 631/1104/53 616/381/53 +f 607/385/48 625/1105/49 614/384/49 +f 618/387/43 633/1106/54 617/383/54 +f 612/382/47 626/1107/48 607/385/48 +f 619/386/6 634/1108/43 618/387/43 +f 610/380/6 627/1109/47 612/382/47 +f 620/391/47 635/1110/6 619/389/6 +f 613/375/43 628/1111/6 610/380/6 +f 621/376/48 636/1112/47 620/391/47 +f 611/388/53 630/1113/54 608/377/54 +f 647/1114/121 654/1115/47 653/1116/120 +f 649/1117/127 654/1115/47 648/1118/6 +f 664/1119/122 648/1120/6 647/1121/121 +f 662/1122/126 648/1120/6 663/1123/43 +f 641/1124/54 664/1119/122 640/1125/123 +f 662/1122/126 641/1124/54 642/1126/125 +f 657/1127/53 640/1125/123 658/1128/114 +f 651/1129/2 658/1128/114 652/1130/113 +f 660/1131/49 652/1130/113 659/1132/116 +f 653/1116/120 645/1133/48 646/1134/118 +f 646/1134/118 660/1131/49 659/1132/116 +f 646/1134/118 659/1132/116 639/1135/1 +f 659/1132/116 652/1130/113 639/1136/1 +f 658/1128/114 639/1137/1 652/1130/113 +f 639/1138/1 658/1128/114 640/1125/123 +f 639/1139/1 640/1125/123 664/1119/122 +f 664/1119/122 647/1121/121 639/1140/1 +f 653/1116/120 639/1141/1 647/1114/121 +f 639/1142/1 653/1116/120 646/1134/118 +f 645/1133/48 655/1143/128 644/1144/119 +f 661/1145/117 645/1133/48 644/1144/119 +f 651/1129/2 661/1145/117 650/1146/115 +f 643/1147/8 661/1145/117 644/1144/119 +f 661/1145/117 643/1148/8 650/1146/115 +f 656/1149/124 651/1129/2 650/1146/115 +f 642/1126/125 657/1127/53 656/1149/124 +f 643/1150/8 656/1149/124 650/1146/115 +f 642/1126/125 656/1149/124 643/1151/8 +f 642/1126/125 643/1152/8 662/1122/126 +f 662/1122/126 643/1153/8 649/1154/127 +f 655/1143/128 649/1117/127 643/1155/8 +f 643/1156/8 644/1144/119 655/1143/128 +f 680/396/43 695/1157/54 679/393/54 +f 666/394/48 687/1158/49 671/392/49 +f 667/407/6 682/1159/47 669/405/47 +f 673/395/6 696/1160/43 680/396/43 +f 674/398/47 690/1161/6 673/395/6 +f 672/401/43 681/1162/6 667/596/6 +f 675/400/48 689/1163/47 674/398/47 +f 665/402/54 683/1164/43 672/401/43 +f 676/404/49 691/1165/48 675/400/48 +f 670/399/53 684/1166/54 665/402/54 +f 677/403/2 692/1167/49 676/404/49 +f 668/397/2 685/1168/53 670/399/53 +f 678/408/53 693/1169/2 677/406/2 +f 671/392/49 686/1170/2 668/397/2 +f 679/393/54 694/1171/53 678/408/53 +f 669/405/47 688/1172/48 666/394/48 +f 706/1173/5 711/1174/129 705/1175/130 +f 707/1176/131 712/1177/46 706/1173/5 +f 721/1178/52 705/1179/130 722/1180/132 +f 707/1181/131 721/1178/52 720/1182/133 +f 699/1183/51 722/1180/132 698/1184/134 +f 700/1185/135 721/1178/52 699/1183/51 +f 715/1186/50 698/1184/134 716/1187/136 +f 709/1188/4 716/1187/136 710/1189/137 +f 717/1190/138 709/1188/4 710/1189/137 +f 711/1174/129 703/1191/45 704/1192/139 +f 704/1192/139 718/1193/44 717/1190/138 +f 704/1192/139 717/1190/138 697/1194/1 +f 717/1190/138 710/1189/137 697/1195/1 +f 716/1187/136 697/1196/1 710/1189/137 +f 697/1197/1 716/1187/136 698/1184/134 +f 697/1198/1 698/1184/134 722/1180/132 +f 722/1180/132 705/1179/130 697/1199/1 +f 711/1174/129 697/1200/1 705/1175/130 +f 697/1201/1 711/1174/129 704/1192/139 +f 703/1191/45 713/1202/140 702/1203/141 +f 719/1204/142 703/1191/45 702/1203/141 +f 709/1188/4 719/1204/142 708/1205/143 +f 701/1206/8 719/1204/142 702/1203/141 +f 719/1204/142 701/1207/8 708/1205/143 +f 714/1208/144 709/1188/4 708/1205/143 +f 699/1183/51 714/1208/144 700/1185/135 +f 701/1209/8 714/1208/144 708/1205/143 +f 700/1185/135 714/1208/144 701/1210/8 +f 700/1185/135 701/1211/8 720/1182/133 +f 720/1182/133 701/1212/8 707/1181/131 +f 713/1202/140 707/1176/131 701/1213/8 +f 701/1214/8 702/1203/141 713/1202/140 +f 738/413/52 753/1215/51 737/410/51 +f 724/411/45 745/1216/44 729/409/44 +f 725/424/5 740/1217/46 727/422/46 +f 731/412/5 754/1218/52 738/413/52 +f 732/415/46 748/1219/5 731/412/5 +f 730/418/52 739/1220/5 725/597/5 +f 733/417/45 747/1221/46 732/415/46 +f 723/419/51 741/1222/52 730/418/52 +f 734/421/44 749/1223/45 733/417/45 +f 728/416/50 742/1224/51 723/419/51 +f 735/420/4 750/1225/44 734/421/44 +f 726/414/4 743/1226/50 728/416/50 +f 736/425/50 751/1227/4 735/423/4 +f 729/409/44 744/1228/4 726/414/4 +f 737/410/51 752/1229/50 736/425/50 +f 727/422/46 746/1230/45 724/411/45 +f 764/1231/4 769/1232/136 763/1233/137 +f 765/1234/143 770/1235/50 764/1231/4 +f 779/1236/44 763/1237/137 780/1238/138 +f 765/1239/143 779/1236/44 778/1240/142 +f 757/1241/45 780/1238/138 756/1242/139 +f 758/1243/141 779/1236/44 757/1241/45 +f 773/1244/46 756/1242/139 774/1245/129 +f 767/1246/5 774/1245/129 768/1247/130 +f 775/1248/132 767/1246/5 768/1247/130 +f 769/1232/136 761/1249/51 762/1250/134 +f 762/1250/134 776/1251/52 775/1248/132 +f 762/1250/134 775/1248/132 755/1252/1 +f 775/1248/132 768/1247/130 755/1253/1 +f 774/1245/129 755/1254/1 768/1247/130 +f 755/1255/1 774/1245/129 756/1242/139 +f 755/1256/1 756/1242/139 780/1238/138 +f 780/1238/138 763/1237/137 755/1257/1 +f 769/1232/136 755/1258/1 763/1233/137 +f 755/1259/1 769/1232/136 762/1250/134 +f 761/1249/51 771/1260/144 760/1261/135 +f 777/1262/133 761/1249/51 760/1261/135 +f 767/1246/5 777/1262/133 766/1263/131 +f 759/1264/8 777/1262/133 760/1261/135 +f 777/1262/133 759/1265/8 766/1263/131 +f 772/1266/140 767/1246/5 766/1263/131 +f 757/1241/45 772/1266/140 758/1243/141 +f 759/1267/8 772/1266/140 766/1263/131 +f 758/1243/141 772/1266/140 759/1268/8 +f 758/1243/141 759/1269/8 778/1240/142 +f 778/1240/142 759/1270/8 765/1239/143 +f 771/1260/144 765/1234/143 759/1271/8 +f 759/1272/8 760/1261/135 771/1260/144 +f 796/430/44 811/1273/45 795/427/45 +f 782/428/51 803/1274/52 787/426/52 +f 783/441/4 798/1275/50 785/439/50 +f 789/429/4 812/1276/44 796/430/44 +f 790/432/50 806/1277/4 789/429/4 +f 788/435/44 797/1278/4 783/598/4 +f 791/434/51 805/1279/50 790/432/50 +f 781/436/45 799/1280/44 788/435/44 +f 792/438/52 807/1281/51 791/434/51 +f 786/433/46 800/1282/45 781/436/45 +f 793/437/5 808/1283/52 792/438/52 +f 784/431/5 801/1284/46 786/433/46 +f 794/442/46 809/1285/5 793/440/5 +f 787/426/52 802/1286/5 784/431/5 +f 795/427/45 810/1287/46 794/442/46 +f 785/439/50 804/1288/51 782/428/51 +f 3/599/9 59/609/9 57/600/15 +f 8/602/11 64/612/11 63/603/10 +f 6/605/16 62/613/16 61/606/7 +f 3/599/9 4/615/13 60/608/13 +f 2/601/15 57/600/15 58/610/3 +f 1/611/3 58/610/3 64/612/11 +f 7/604/10 63/603/10 62/613/16 +f 5/614/7 61/1289/7 60/608/13 +f 80/616/19 104/635/19 103/617/20 +f 87/619/21 111/621/21 100/464/22 +f 88/620/23 112/623/23 111/621/21 +f 66/622/24 90/1290/24 112/623/23 +f 85/624/25 109/628/25 110/625/26 +f 78/627/27 102/636/27 89/467/28 +f 67/67/29 91/66/29 109/628/25 +f 70/64/30 94/63/30 101/629/31 +f 79/618/20 103/617/20 92/463/32 +f 84/631/33 108/640/33 107/632/34 +f 82/634/35 106/639/35 93/462/36 +f 71/76/37 95/75/37 104/635/19 +f 77/630/31 101/629/31 102/636/27 +f 74/73/38 98/72/38 105/637/39 +f 83/633/34 107/632/34 96/466/40 +f 81/638/39 105/637/39 106/639/35 +f 86/626/26 110/625/26 97/465/41 +f 75/70/42 99/69/42 108/640/33 +f 29/641/6 133/1291/6 132/642/43 +f 56/644/44 160/657/44 159/645/45 +f 16/647/13 120/659/13 119/648/9 +f 43/650/45 147/661/45 146/651/46 +f 30/653/47 134/663/47 133/654/6 +f 49/656/4 153/701/4 160/657/44 +f 9/658/7 113/703/7 120/659/13 +f 44/660/44 148/668/44 147/661/45 +f 31/662/48 135/670/48 134/663/47 +f 18/664/15 122/672/15 121/665/3 +f 45/667/4 149/1292/4 148/668/44 +f 32/669/49 136/677/49 135/670/48 +f 19/671/9 123/679/9 122/672/15 +f 46/673/50 150/681/50 149/674/4 +f 25/676/2 129/723/2 136/677/49 +f 20/678/13 124/686/13 123/679/9 +f 47/680/51 151/688/51 150/681/50 +f 34/682/47 138/690/47 137/683/6 +f 21/685/7 125/1293/7 124/686/13 +f 48/687/52 152/695/52 151/688/51 +f 35/689/48 139/697/48 138/690/47 +f 22/691/16 126/699/16 125/692/7 +f 41/694/5 145/742/5 152/695/52 +f 36/696/49 140/705/49 139/697/48 +f 23/698/10 127/707/10 126/699/16 +f 50/700/50 154/709/50 153/701/4 +f 10/702/16 114/711/16 113/703/7 +f 37/704/2 141/1294/2 140/705/49 +f 24/706/11 128/715/11 127/707/10 +f 51/708/51 155/717/51 154/709/50 +f 11/710/10 115/719/10 114/711/16 +f 38/712/53 142/721/53 141/713/2 +f 17/666/3 121/665/3 128/715/11 +f 52/716/52 156/725/52 155/717/51 +f 12/718/11 116/727/11 115/719/10 +f 39/720/54 143/729/54 142/721/53 +f 26/722/53 130/731/53 129/723/2 +f 53/724/5 157/1295/5 156/725/52 +f 13/726/3 117/1296/3 116/727/11 +f 40/728/43 144/738/43 143/729/54 +f 27/730/54 131/739/54 130/731/53 +f 54/732/46 158/740/46 157/733/5 +f 14/735/15 118/741/15 117/736/3 +f 33/684/6 137/683/6 144/738/43 +f 28/643/43 132/642/43 131/739/54 +f 55/646/45 159/645/45 158/740/46 +f 15/649/9 119/648/9 118/741/15 +f 42/652/46 146/651/46 145/742/5 +f 163/743/5 175/764/5 176/744/9 +f 170/746/10 182/765/10 183/747/6 +f 167/749/7 179/1297/7 180/750/54 +f 164/745/9 176/744/9 177/752/2 +f 171/748/6 183/747/6 184/754/51 +f 161/756/3 174/763/3 173/757/48 +f 168/751/54 180/750/54 181/759/4 +f 165/753/2 177/752/2 178/761/45 +f 172/755/51 184/754/51 174/763/3 +f 162/758/48 173/757/48 175/764/5 +f 169/760/4 181/759/4 182/765/10 +f 166/762/45 178/761/45 179/766/7 +f 242/768/55 244/774/61 236/769/56 +f 241/771/58 246/782/68 238/772/59 +f 244/774/61 247/776/63 239/775/62 +f 247/776/63 245/1298/70 237/777/64 +f 243/778/65 241/1299/58 233/779/60 +f 240/781/67 248/1300/76 242/768/55 +f 237/777/64 245/1298/70 243/778/65 +f 246/782/68 248/1300/76 240/781/67 +f 245/786/70 247/783/63 255/785/69 +f 241/788/58 243/794/65 251/789/72 +f 248/795/76 246/798/68 254/796/77 +f 242/791/55 250/793/75 252/797/78 +f 255/800/69 263/189/80 261/526/79 +f 250/803/75 258/843/96 260/804/81 +f 254/807/77 262/809/83 264/806/82 +f 249/810/73 251/813/72 259/811/84 +f 280/814/12 288/826/12 287/815/7 +f 278/817/14 286/828/14 285/818/1 +f 276/820/86 284/829/86 283/821/3 +f 274/823/87 282/830/87 281/824/8 +f 273/825/8 281/824/8 288/826/12 +f 279/827/7 287/1301/7 286/828/14 +f 277/819/1 285/818/1 284/829/86 +f 275/822/3 283/821/3 282/830/87 +f 332/259/88 329/254/88 326/256/89 +f 331/245/90 338/247/91 339/251/91 +f 333/263/92 340/265/93 337/260/93 +f 328/250/94 327/257/89 326/256/89 +f 330/253/90 329/254/88 332/259/88 +f 336/262/92 335/248/95 334/244/95 +f 340/275/93 339/251/91 338/247/91 +f 325/242/94 334/244/95 335/248/95 +f 345/831/88 346/261/88 347/542/89 +f 322/833/90 321/268/90 346/544/88 +f 322/835/90 324/1302/91 323/249/91 +f 324/836/91 341/1303/93 342/270/93 +f 341/837/93 343/1304/92 344/258/92 +f 343/838/92 320/1305/95 319/274/95 +f 317/839/94 318/246/94 319/537/95 +f 318/278/94 317/1306/94 348/841/89 +f 372/845/54 384/858/54 383/846/7 +f 369/848/2 381/860/2 380/849/9 +f 376/851/51 388/861/51 387/852/6 +f 366/854/48 378/863/48 377/855/3 +f 373/857/4 385/865/4 384/858/54 +f 370/859/45 382/867/45 381/860/2 +f 365/856/3 377/855/3 388/861/51 +f 367/862/5 379/868/5 378/863/48 +f 374/864/10 386/869/10 385/865/4 +f 371/866/7 383/1307/7 382/867/45 +f 368/850/9 380/849/9 379/868/5 +f 375/853/6 387/852/6 386/869/10 +f 397/870/97 398/873/7 404/871/16 +f 398/873/7 399/910/112 405/874/99 +f 413/875/13 398/879/7 397/876/97 +f 412/878/101 399/909/112 398/879/7 +f 391/880/9 413/875/13 414/877/100 +f 412/878/101 413/875/13 391/880/9 +f 408/883/104 407/884/15 391/880/9 +f 407/884/15 408/883/104 402/885/105 +f 410/887/11 401/886/3 402/885/105 +f 403/872/98 404/871/16 395/889/10 +f 395/889/10 410/887/11 409/888/106 +f 404/871/16 405/874/99 394/899/108 +f 410/887/11 395/889/10 394/899/108 +f 401/886/3 410/887/11 411/900/109 +f 406/904/111 407/884/15 401/886/3 +f 391/880/9 407/884/15 406/904/111 +f 430/316/13 446/916/13 445/913/9 +f 416/314/10 438/928/10 437/914/11 +f 417/327/7 431/1308/7 432/915/16 +f 423/315/7 440/917/7 446/916/13 +f 424/318/16 439/919/16 440/917/7 +f 422/321/13 433/920/13 431/918/7 +f 425/320/10 441/921/10 439/919/16 +f 415/322/9 434/922/9 433/920/13 +f 426/324/11 442/923/11 441/921/10 +f 420/319/15 435/924/15 434/922/9 +f 427/323/3 443/1309/3 442/923/11 +f 418/317/3 436/926/3 435/924/15 +f 428/328/15 444/927/15 443/925/3 +f 421/312/11 437/914/11 436/926/3 +f 429/313/9 445/913/9 444/927/15 +f 419/325/16 432/915/16 438/928/10 +f 450/929/9 462/939/9 461/930/5 +f 457/932/6 469/941/6 468/933/10 +f 454/935/54 466/946/54 465/936/7 +f 451/938/2 463/948/2 462/939/9 +f 458/940/51 470/949/51 469/941/6 +f 448/942/48 460/950/48 459/943/3 +f 455/945/4 467/951/4 466/946/54 +f 452/947/45 464/953/45 463/948/2 +f 447/944/3 459/943/3 470/949/51 +f 449/931/5 461/930/5 460/950/48 +f 456/934/10 468/933/10 467/951/4 +f 453/952/7 465/1310/7 464/953/45 +f 482/954/51 494/966/51 493/955/6 +f 472/957/48 484/968/48 483/958/3 +f 479/960/4 491/970/4 490/961/54 +f 476/963/45 488/972/45 487/964/2 +f 471/959/3 483/958/3 494/966/51 +f 473/967/5 485/974/5 484/968/48 +f 480/969/10 492/975/10 491/970/4 +f 477/971/7 489/1311/7 488/972/45 +f 474/973/9 486/978/9 485/974/5 +f 481/956/6 493/955/6 492/975/10 +f 478/962/54 490/961/54 489/976/7 +f 475/965/2 487/964/2 486/978/9 +f 509/979/7 510/991/12 502/980/12 +f 507/982/1 508/992/14 500/983/14 +f 505/985/3 506/994/86 498/986/86 +f 503/988/8 504/995/87 496/989/87 +f 510/991/12 503/988/8 495/990/8 +f 508/992/14 509/1312/7 501/993/7 +f 506/994/86 507/982/1 499/984/1 +f 504/995/87 505/985/3 497/987/3 +f 531/996/105 532/999/3 538/997/15 +f 532/999/3 533/1036/110 539/1000/111 +f 547/1001/11 532/1005/3 531/1002/105 +f 546/1004/109 533/1035/110 532/1005/3 +f 525/1006/10 547/1001/11 548/1003/106 +f 546/1004/109 547/1001/11 525/1006/10 +f 542/1009/98 541/1010/16 525/1006/10 +f 541/1010/16 542/1009/98 536/1011/97 +f 544/1013/13 535/1012/7 536/1011/97 +f 537/998/104 538/997/15 529/1015/9 +f 529/1015/9 544/1013/13 543/1014/100 +f 538/997/15 539/1000/111 528/1025/103 +f 544/1013/13 529/1015/9 528/1025/103 +f 535/1012/7 544/1013/13 545/1026/101 +f 540/1030/99 541/1010/16 535/1012/7 +f 525/1006/10 541/1010/16 540/1030/99 +f 564/362/11 580/1042/11 579/1039/10 +f 550/360/9 572/1054/9 571/1040/13 +f 551/373/3 565/1313/3 566/1041/15 +f 557/361/3 574/1043/3 580/1042/11 +f 558/364/15 573/1045/15 574/1043/3 +f 556/367/11 567/1046/11 565/1044/3 +f 559/366/9 575/1047/9 573/1045/15 +f 549/368/10 568/1048/10 567/1046/11 +f 560/370/13 576/1049/13 575/1047/9 +f 554/365/16 569/1050/16 568/1048/10 +f 561/369/7 577/1314/7 576/1049/13 +f 552/363/7 570/1052/7 569/1050/16 +f 562/374/16 578/1053/16 577/1051/7 +f 555/358/13 571/1040/13 570/1052/7 +f 563/359/10 579/1039/10 578/1053/16 +f 553/371/15 566/1041/15 572/1054/9 +f 589/1055/113 590/1059/2 596/1056/53 +f 591/1058/115 597/1084/124 596/1056/53 +f 606/1060/116 605/1064/49 590/1061/2 +f 604/1063/117 591/1095/115 590/1061/2 +f 583/1065/48 605/1064/49 606/1060/116 +f 604/1063/117 605/1064/49 583/1065/48 +f 599/1068/47 583/1065/48 582/1066/118 +f 593/1070/6 599/1068/47 600/1069/120 +f 602/1072/43 593/1070/6 594/1071/121 +f 595/1057/114 596/1056/53 587/1074/54 +f 588/1075/123 587/1074/54 602/1072/43 +f 587/1074/54 596/1056/53 597/1084/124 +f 603/1086/126 602/1072/43 587/1074/54 +f 593/1070/6 602/1072/43 603/1086/126 +f 598/1090/128 599/1068/47 593/1070/6 +f 584/1067/119 583/1065/48 599/1068/47 +f 622/379/49 638/1101/49 637/1098/48 +f 608/377/54 630/1113/54 629/1099/43 +f 609/390/2 623/1315/2 624/1100/53 +f 615/378/2 632/1102/2 638/1101/49 +f 616/381/53 631/1104/53 632/1102/2 +f 614/384/49 625/1105/49 623/1103/2 +f 617/383/54 633/1106/54 631/1104/53 +f 607/385/48 626/1107/48 625/1105/49 +f 618/387/43 634/1108/43 633/1106/54 +f 612/382/47 627/1109/47 626/1107/48 +f 619/386/6 635/1316/6 634/1108/43 +f 610/380/6 628/1111/6 627/1109/47 +f 620/391/47 636/1112/47 635/1110/6 +f 613/375/43 629/1099/43 628/1111/6 +f 621/376/48 637/1098/48 636/1112/47 +f 611/388/53 624/1100/53 630/1113/54 +f 647/1114/121 648/1118/6 654/1115/47 +f 649/1117/127 655/1143/128 654/1115/47 +f 664/1119/122 663/1123/43 648/1120/6 +f 662/1122/126 649/1154/127 648/1120/6 +f 641/1124/54 663/1123/43 664/1119/122 +f 662/1122/126 663/1123/43 641/1124/54 +f 657/1127/53 641/1124/54 640/1125/123 +f 651/1129/2 657/1127/53 658/1128/114 +f 660/1131/49 651/1129/2 652/1130/113 +f 653/1116/120 654/1115/47 645/1133/48 +f 646/1134/118 645/1133/48 660/1131/49 +f 645/1133/48 654/1115/47 655/1143/128 +f 661/1145/117 660/1131/49 645/1133/48 +f 651/1129/2 660/1131/49 661/1145/117 +f 656/1149/124 657/1127/53 651/1129/2 +f 642/1126/125 641/1124/54 657/1127/53 +f 680/396/43 696/1160/43 695/1157/54 +f 666/394/48 688/1172/48 687/1158/49 +f 667/407/6 681/1317/6 682/1159/47 +f 673/395/6 690/1161/6 696/1160/43 +f 674/398/47 689/1163/47 690/1161/6 +f 672/401/43 683/1164/43 681/1162/6 +f 675/400/48 691/1165/48 689/1163/47 +f 665/402/54 684/1166/54 683/1164/43 +f 676/404/49 692/1167/49 691/1165/48 +f 670/399/53 685/1168/53 684/1166/54 +f 677/403/2 693/1318/2 692/1167/49 +f 668/397/2 686/1170/2 685/1168/53 +f 678/408/53 694/1171/53 693/1169/2 +f 671/392/49 687/1158/49 686/1170/2 +f 679/393/54 695/1157/54 694/1171/53 +f 669/405/47 682/1159/47 688/1172/48 +f 706/1173/5 712/1177/46 711/1174/129 +f 707/1176/131 713/1202/140 712/1177/46 +f 721/1178/52 706/1319/5 705/1179/130 +f 707/1181/131 706/1319/5 721/1178/52 +f 699/1183/51 721/1178/52 722/1180/132 +f 700/1185/135 720/1182/133 721/1178/52 +f 715/1186/50 699/1183/51 698/1184/134 +f 709/1188/4 715/1186/50 716/1187/136 +f 717/1190/138 718/1193/44 709/1188/4 +f 711/1174/129 712/1177/46 703/1191/45 +f 704/1192/139 703/1191/45 718/1193/44 +f 703/1191/45 712/1177/46 713/1202/140 +f 719/1204/142 718/1193/44 703/1191/45 +f 709/1188/4 718/1193/44 719/1204/142 +f 714/1208/144 715/1186/50 709/1188/4 +f 699/1183/51 715/1186/50 714/1208/144 +f 738/413/52 754/1218/52 753/1215/51 +f 724/411/45 746/1230/45 745/1216/44 +f 725/424/5 739/1320/5 740/1217/46 +f 731/412/5 748/1219/5 754/1218/52 +f 732/415/46 747/1221/46 748/1219/5 +f 730/418/52 741/1222/52 739/1220/5 +f 733/417/45 749/1223/45 747/1221/46 +f 723/419/51 742/1224/51 741/1222/52 +f 734/421/44 750/1225/44 749/1223/45 +f 728/416/50 743/1226/50 742/1224/51 +f 735/420/4 751/1321/4 750/1225/44 +f 726/414/4 744/1228/4 743/1226/50 +f 736/425/50 752/1229/50 751/1227/4 +f 729/409/44 745/1216/44 744/1228/4 +f 737/410/51 753/1215/51 752/1229/50 +f 727/422/46 740/1217/46 746/1230/45 +f 764/1231/4 770/1235/50 769/1232/136 +f 765/1234/143 771/1260/144 770/1235/50 +f 779/1236/44 764/1322/4 763/1237/137 +f 765/1239/143 764/1322/4 779/1236/44 +f 757/1241/45 779/1236/44 780/1238/138 +f 758/1243/141 778/1240/142 779/1236/44 +f 773/1244/46 757/1241/45 756/1242/139 +f 767/1246/5 773/1244/46 774/1245/129 +f 775/1248/132 776/1251/52 767/1246/5 +f 769/1232/136 770/1235/50 761/1249/51 +f 762/1250/134 761/1249/51 776/1251/52 +f 761/1249/51 770/1235/50 771/1260/144 +f 777/1262/133 776/1251/52 761/1249/51 +f 767/1246/5 776/1251/52 777/1262/133 +f 772/1266/140 773/1244/46 767/1246/5 +f 757/1241/45 773/1244/46 772/1266/140 +f 796/430/44 812/1276/44 811/1273/45 +f 782/428/51 804/1288/51 803/1274/52 +f 783/441/4 797/1323/4 798/1275/50 +f 789/429/4 806/1277/4 812/1276/44 +f 790/432/50 805/1279/50 806/1277/4 +f 788/435/44 799/1280/44 797/1278/4 +f 791/434/51 807/1281/51 805/1279/50 +f 781/436/45 800/1282/45 799/1280/44 +f 792/438/52 808/1283/52 807/1281/51 +f 786/433/46 801/1284/46 800/1282/45 +f 793/437/5 809/1324/5 808/1283/52 +f 784/431/5 802/1286/5 801/1284/46 +f 794/442/46 810/1287/46 809/1285/5 +f 787/426/52 803/1274/52 802/1286/5 +f 795/427/45 811/1273/45 810/1287/46 +f 785/439/50 798/1275/50 804/1288/51 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/deco_steel_kit.png b/src/main/resources/assets/hbm/textures/blocks/playground/deco_steel_kit.png index 066efb53e350bc3d3d4565f8fa09bbcaab1088c8..ab24ddc3c7b35353ca7291f8568ae3fd2fd81229 100644 GIT binary patch delta 2304 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png b/src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png deleted file mode 100644 index 7709cf279f7b811835c6c58a0a5625c1744e76e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4498 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 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/maresleg.png b/src/main/resources/assets/hbm/textures/models/weapons/maresleg.png new file mode 100644 index 0000000000000000000000000000000000000000..b520a29b369be3da7cbe58679e0985cf2e99e3b3 GIT binary patch literal 4117 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/pepperbox.png b/src/main/resources/assets/hbm/textures/models/weapons/pepperbox.png new file mode 100644 index 0000000000000000000000000000000000000000..26c6e8c9372f3461edae7665ad9405a3ef15e5ac GIT binary patch literal 3118 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 IM6N<$f-w2ZyZ`_I literal 0 HcmV?d00001