diff --git a/changelog b/changelog index 666ddeaaa..00743753b 100644 --- a/changelog +++ b/changelog @@ -1,19 +1,27 @@ +## Added +* New assembler + * Features a brand new animated model, GUI and the new recipe selection system + * Many recipes have been reworked, with the microcrafting complexity reduced + * The redcoil didn't get a recipe. It's gonna die soon. + * Neither did the schrabidium transmutator + * Balls-o-tron's spawner can now be made without a worm coin, using a silver key instead. This means that, while expensive, it's possible to summon him without finding a jungle dungeon +* Blueprins + * Replace the journals + * Instead of opening them and making a template, they act as a multi template + * Blueprints need to remain in the slot, removing them will disable the recipes again + ## Changed -* The chemistry achievement now requires the new chemical plant -* The new chemical plant can now be used to upgrade the meteorite sword -* Fluid containers are now re-registered when using `/ntmreload` which should correctly generate fluid container items for freshly added custom fluids -* Recipe configs will no longer try to parse null value recipes, meaing that trailing commas in a recipe config will no longer create an error -* Refinery solid byproducts now build up substantially faster - * This means fracking solution from standard oil is now a lot more viable - * This also makes the volume of oil spent consistent with the NEI handler +* Removed levitation unit +* Many of NTM's regular building blocks now have forge microblock support +* RBMK crane models now conform to the dimensions of the room they're in +* Projectile resistance for armor has been renamed to "physical" and now also extends to all direct forms of attack by other entities that don't fall into any other categories (mostly melee attacks) + * This should fix the issue where most armors are quite weak against swords +* Electric attacks (i.e. tesla cannon) are now in the "energy damage" category + * This means that armors that have energy resistance actually properly work against the tesla cannon +* Heavy components are being deprecated ## Fixed -* Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled -* Fixed NTM adding mob spawns to the mushroom island -* Fixed line break not working on the tip of the day -* Fixed an issue where AoE abilities can break bedrock -* Fixed chemical factory not saving its water and steam tanks -* Fixed siphon not working with some newer machines due to using legacy API -* Potentially fixed an incompatibility with Aether due to the loading screen replacement - * The loading screen replacement will only run up to 25 times per session, with a fixed delay of 5 seconds minimum - * The loading screen replacement can be disabled completely in the config \ No newline at end of file +* Fixed gas centrifuge sound persisting when broken or when unloaded +* Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots +* Fixed guns that don't have durability always displaying a condition of 0% +* Fixed GL state leak caused by skeletons \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index aa2189d46..0a6cf6f64 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -34,6 +34,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import cpw.mods.fml.common.Loader; import java.util.ArrayList; @@ -803,6 +804,7 @@ public class ModBlocks { public static Block radio_torch_reader; public static Block radio_torch_controller; public static Block radio_telex; + public static Block oc_cable_paintable; public static Block conveyor; public static Block conveyor_express; @@ -1244,6 +1246,9 @@ public class ModBlocks { public static Block wand_air; public static Block wand_loot; public static Block wand_jigsaw; + public static Block wand_logic; + + public static Block logic_block; public static Material materialGas = new MaterialGas(); @@ -1979,7 +1984,7 @@ public class ModBlocks { ladder_cobalt = new BlockNTMLadder().setBlockName("ladder_cobalt").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_cobalt"); ladder_steel = new BlockNTMLadder().setBlockName("ladder_steel").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_steel"); ladder_tungsten = new BlockNTMLadder().setBlockName("ladder_tungsten").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_tungsten"); - + trapdoor_steel = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_steel").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_steel"); barrel_plastic = new BlockFluidBarrel(Material.iron, 12000).setBlockName("barrel_plastic").setStepSound(Block.soundTypeStone).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_plastic"); @@ -2339,6 +2344,10 @@ public class ModBlocks { absorber_pink = new BlockAbsorber(Material.iron, 10000F).setBlockName("absorber_pink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber_pink"); decon = new BlockDecon(Material.iron).setBlockName("decon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":decon_side"); + if (Loader.isModLoaded("OpenComputers")) { + oc_cable_paintable = new BlockOpenComputersCablePaintable().setBlockName("oc_cable_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + } + volcano_core = new BlockVolcano().setBlockName("volcano_core").setBlockUnbreakable().setResistance(10000.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":volcano_core"); volcano_rad_core = new BlockVolcano().setBlockName("volcano_rad_core").setBlockUnbreakable().setResistance(10000.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":volcano_rad_core"); @@ -2398,6 +2407,10 @@ public class ModBlocks { wand_air = new BlockWand(Blocks.air).setBlockName("wand_air").setBlockTextureName(RefStrings.MODID + ":wand_air"); wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); + wand_logic = new BlockWandLogic().setBlockName("wand_logic").setBlockTextureName(RefStrings.MODID + ":wand_logic"); + + logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); + } private static void registerBlock() { @@ -3528,6 +3541,11 @@ public class ModBlocks { GameRegistry.registerBlock(gas_explosive, gas_explosive.getUnlocalizedName()); GameRegistry.registerBlock(vacuum, vacuum.getUnlocalizedName()); + // OC Compat Items + if (Loader.isModLoaded("OpenComputers")) { + register(oc_cable_paintable); + } + //??? GameRegistry.registerBlock(crystal_virus, crystal_virus.getUnlocalizedName()); GameRegistry.registerBlock(crystal_hardened, crystal_hardened.getUnlocalizedName()); @@ -3545,6 +3563,9 @@ public class ModBlocks { register(wand_air); register(wand_loot); register(wand_jigsaw); + register(wand_logic); + + register(logic_block); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java index 365187ff4..3dfe4814a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java @@ -94,7 +94,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public void addCollisionBoxesToList(World worldIn, int x, int y, int z, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn) { - AxisAlignedBB box = getBoundingBox(worldIn, x, y ,z); + AxisAlignedBB box = getBoundingBox(worldIn, x, y, z, true); box = AxisAlignedBB.getBoundingBox( Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ), Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ)); @@ -113,7 +113,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - AxisAlignedBB aabb = this.getBoundingBox(world, x, y, z); + AxisAlignedBB aabb = this.getBoundingBox(world, x, y, z, true); if(aabb.minX == aabb.maxX && aabb.minY == aabb.maxY && aabb.minZ == aabb.maxZ) return null; return aabb; } @@ -121,7 +121,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { // Enables clicking through the open door @Override public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) { - AxisAlignedBB box = getBoundingBox(world, x, y ,z); + AxisAlignedBB box = getBoundingBox(world, x, y, z, false); box = AxisAlignedBB.getBoundingBox( Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ), Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ) @@ -158,11 +158,11 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { - return getBoundingBox(world, x, y, z); + return getBoundingBox(world, x, y, z, false); //return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); } - public AxisAlignedBB getBoundingBox(World world, int x, int y, int z) { + public AxisAlignedBB getBoundingBox(World world, int x, int y, int z, boolean forCollision) { int meta = world.getBlockMetadata(x, y, z); TileEntity te = world.getTileEntity(x, y, z); int[] core = this.findCore(world, x, y, z); @@ -173,7 +173,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { TileEntity te2 = world.getTileEntity(core[0], core[1], core[2]); ForgeDirection dir = ForgeDirection.getOrientation(te2.getBlockMetadata() - BlockDummyable.offset); BlockPos pos = new BlockPos(x - core[0], y - core[1], z - core[2]).rotate(Rotation.getBlockRotation(dir).add(Rotation.COUNTERCLOCKWISE_90)); - AxisAlignedBB box = type.getBlockBound(pos.getX(), pos.getY(), pos.getZ(), open); + AxisAlignedBB box = type.getBlockBound(pos.getX(), pos.getY(), pos.getZ(), open, forCollision); switch(te2.getBlockMetadata() - offset){ case 2: return AxisAlignedBB.getBoundingBox(x + 1 - box.minX, y + box.minY, z + 1 - box.minZ, x + 1 - box.maxX, y + box.maxY, z + 1 - box.maxZ); diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java new file mode 100644 index 000000000..01d8df298 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -0,0 +1,343 @@ +package com.hbm.blocks.generic; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockSideRotation; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; +import com.hbm.config.StructureConfig; +import com.hbm.interfaces.IBomb; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BufferUtil; +import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.util.LogicBlockActions; +import com.hbm.world.gen.INBTTileEntityTransformable; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; + +public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { + + @SideOnly(Side.CLIENT) protected IIcon iconTop; + + public BlockWandLogic() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_logic"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_logic_top"); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side <= 1) ? iconTop : blockIcon; + } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + if(side == 0) return IBlockSideRotation.topToBottom(world.getBlockMetadata(x, y, z)); + if(side == 1) return world.getBlockMetadata(x, y, z); + return 0; + } + + @Override + public int getRenderType() { + return IBlockSideRotation.getRenderType(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if (i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if (i == 1) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); + if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + + ForgeDirection dir = ForgeDirection.UNKNOWN; + switch(i){ + case 0: dir = ForgeDirection.SOUTH;break; + case 1: dir = ForgeDirection.WEST; break; + case 2: dir = ForgeDirection.NORTH;break; + case 3: dir = ForgeDirection.EAST; break; + } + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TileEntityWandLogic) + ((TileEntityWandLogic)te).placedRotation = dir.ordinal(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if (stack != null && stack.getItem() instanceof ItemBlock && !player.isSneaking()) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if (block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityWandLogic){ + TileEntityWandLogic logic = (TileEntityWandLogic) tile; + logic.disguise = block; + logic.disguiseMeta = stack.getItemDamage() & 15; + return true; + } + } + } + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandLogic)) return false; + + TileEntityWandLogic logic = (TileEntityWandLogic) te; + + switch(tool) { + case SCREWDRIVER: + List actionNames = LogicBlockActions.getActionNames(); + int indexA = actionNames.indexOf(logic.actionID); + + indexA += player.isSneaking() ? -1 : 1; + indexA = MathHelper.clamp_int(indexA, 0, actionNames.size() - 1); + + logic.actionID = actionNames.get(indexA); + return true; + case DEFUSER: + List conditionNames = LogicBlockConditions.getConditionNames(); + int indexC = conditionNames.indexOf(logic.conditionID); + + indexC += player.isSneaking() ? -1 : 1; + indexC = MathHelper.clamp_int(indexC, 0, conditionNames.size() - 1); + + logic.conditionID = conditionNames.get(indexC); + + return true; + case HAND_DRILL: + List interactionNames = LogicBlockInteractions.getInteractionNames(); + int indexI = interactionNames.indexOf(logic.interactionID); + + indexI += player.isSneaking() ? -1 : 1; + indexI = MathHelper.clamp_int(indexI, 0, interactionNames.size() - 1); + + logic.interactionID = interactionNames.get(indexI); + + return true; + + default: return false; + } + } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandLogic)) return; + + TileEntityWandLogic logic = (TileEntityWandLogic) te; + + List text = new ArrayList<>(); + text.add("Action: " + logic.actionID); + text.add("Condition: " + logic.conditionID); + text.add("Interaction: " + (logic.interactionID != null ? logic.interactionID : "None")); + + String block; + + if(logic.disguise != null && logic.disguise != Blocks.air) + block = I18nUtil.resolveKey(logic.disguise.getUnlocalizedName() + ".name"); + else + block = "None"; + + text.add("Disguise Block: " + block); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); + list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); + list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle forwards through the interaction list, shift click to go back"); + list.add(EnumChatFormatting.YELLOW + "Use a detonator to transform"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityWandLogic(); + } + + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandLogic)) return null; + + ((TileEntityWandLogic) te).triggerReplace = true; + + return BombReturnCode.TRIGGERED; + } + + public static class TileEntityWandLogic extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { + private boolean triggerReplace; + + public int placedRotation; + + Block disguise; + int disguiseMeta = -1; + + public String actionID = "FODDER_WAVE"; + public String conditionID = "PLAYER_CUBE_5"; + public String interactionID; + + @Override + public void updateEntity() { + if(!worldObj.isRemote) { + if(triggerReplace) { + // On the first tick of this TE, replace with intended block and fill with loot + replace(); + } else { + networkPackNT(15); + } + } + } + + private void replace() { + if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandLogic)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a logic block but we're doing a TE update as if it is, cancelling!"); + return; + } + worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.logic_block); + + TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); + + if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { + MainRegistry.logger.warn("TE for logic block set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); + te = ModBlocks.wand_logic.createTileEntity(worldObj, 0); + worldObj.setTileEntity(xCoord, yCoord, zCoord, te); + } + + if(te instanceof LogicBlock.TileEntityLogicBlock){ + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) te; + logic.actionID = actionID; + logic.conditionID = conditionID; + logic.interactionID = interactionID; + logic.direction = ForgeDirection.getOrientation(placedRotation); + logic.disguise = disguise; + logic.disguiseMeta = disguiseMeta; + } + + } + + @Override + public void transformTE(World world, int coordBaseMode) { + triggerReplace = !StructureConfig.debugStructures; + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + nbt.setString("interactionID", interactionID); + nbt.setInteger("rotation", placedRotation); + if(disguise != null){ + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); + placedRotation = nbt.getInteger("rotation"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeInt(placedRotation); + BufferUtil.writeString(buf, actionID); + BufferUtil.writeString(buf, conditionID); + BufferUtil.writeString(buf, interactionID); + buf.writeInt(Block.getIdFromBlock(disguise)); + buf.writeInt(disguiseMeta); + } + + @Override + public void deserialize(ByteBuf buf) { + placedRotation = buf.readInt(); + actionID = BufferUtil.readString(buf); + conditionID = BufferUtil.readString(buf); + interactionID = BufferUtil.readString(buf); + disguise = Block.getBlockById(buf.readInt()); + disguiseMeta = buf.readInt(); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); + if(disguise != null){ + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java new file mode 100644 index 000000000..462755811 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -0,0 +1,162 @@ +package com.hbm.blocks.generic; + +import com.hbm.world.gen.util.LogicBlockActions; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class LogicBlock extends BlockContainer { + + public LogicBlock() { + super(Material.rock); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new LogicBlock.TileEntityLogicBlock(); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof LogicBlock.TileEntityLogicBlock){ + LogicBlock.TileEntityLogicBlock logicBlock = (LogicBlock.TileEntityLogicBlock) tile; + if(logicBlock.disguise != null){ + return logicBlock.disguise.getIcon(side, logicBlock.disguiseMeta); + } + } + + return super.getIcon(world, x, y, z, side); + } + + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + TileEntity te = worldIn.getTileEntity(x, y, z); + if(te instanceof LogicBlock.TileEntityLogicBlock && ((LogicBlock.TileEntityLogicBlock) te).interaction != null) { + ((LogicBlock.TileEntityLogicBlock) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); + return true; + } + + return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); + } + + public static class TileEntityLogicBlock extends TileEntity { + + //phase is incremented per condition check, timer counts since last condition check by default + public int phase = 0; + public int timer = 0; + + public Block disguise; + public int disguiseMeta; + + /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ + public String conditionID = "PLAYER_CUBE_5"; + public String actionID = "FODDER_WAVE"; + /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ + public String interactionID; + + public Function condition; + public Consumer action; + /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ + public Consumer interaction; + + public EntityPlayer player; + + public ForgeDirection direction = ForgeDirection.UNKNOWN; + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + if(action == null){ + action = LogicBlockActions.actions.get(actionID); + } + if(condition == null){ + condition = LogicBlockConditions.conditions.get(conditionID); + } + if(interaction == null && interactionID != null){ + interaction = LogicBlockInteractions.interactions.get(interactionID); + } + + if(action == null || condition == null){ + worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); + return; + } + action.accept(this); + if(condition.apply(this)) { + phase++; + timer = 0; + } else { + timer++; + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("phase", phase); + + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); + + nbt.setInteger("direction", direction.ordinal()); + if(disguise != null){ + nbt.setInteger("disguiseMeta", disguiseMeta); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.phase = nbt.getInteger("phase"); + + this.actionID = nbt.getString("actionID"); + this.conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); + + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + + if(nbt.hasKey("disguise")){ + disguiseMeta = nbt.getInteger("disguiseMeta"); + disguise = Block.getBlockFromName(nbt.getString("disguise")); + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + } + +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java index ab91cbb43..ec787564a 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java +++ b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java @@ -35,7 +35,7 @@ public class MachineElectrolyser extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - return this.standardOpenBehavior(world, x, y, z, player, 0); + return this.standardOpenBehavior(world, x, y, z, player, -1); } @Override diff --git a/src/main/java/com/hbm/blocks/machine/PistonInserter.java b/src/main/java/com/hbm/blocks/machine/PistonInserter.java index bb33d205d..4683f1ec6 100644 --- a/src/main/java/com/hbm/blocks/machine/PistonInserter.java +++ b/src/main/java/com/hbm/blocks/machine/PistonInserter.java @@ -282,8 +282,6 @@ public class PistonInserter extends BlockContainerBase implements ITooltipProvid if(this.slot != null) { BufferUtil.writeNBT(buf, slot.stackTagCompound); } - - this.turnProgress = 2; } @Override diff --git a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java new file mode 100644 index 000000000..d40d81595 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java @@ -0,0 +1,344 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.TileEntityLoadedBase; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import li.cil.oc.api.network.Environment; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import li.cil.oc.api.network.Message; +import li.cil.oc.api.network.Node; +import li.cil.oc.api.Network; +import li.cil.oc.api.network.Visibility; +import cpw.mods.fml.common.Optional; +import li.cil.oc.api.network.SidedEnvironment; +import net.minecraftforge.common.util.ForgeDirection; +import li.cil.oc.api.internal.Colored; +import com.hbm.handler.CompatHandler.OCColors; +import net.minecraftforge.oredict.OreDictionary; + +public class BlockOpenComputersCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass { + + @SideOnly(Side.CLIENT) protected IIcon overlay; + @SideOnly(Side.CLIENT) protected IIcon overlayColor; + + public BlockOpenComputersCablePaintable() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityOpenComputersCablePaintable(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":oc_cable_base"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":oc_cable_overlay"); + this.overlayColor = reg.registerIcon(RefStrings.MODID + ":oc_cable_color"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block != null) { + if(RenderBlockMultipass.currentPass == 1) { + return this.overlay; + } else if(RenderBlockMultipass.currentPass == 2) { + return this.overlayColor; + } else { + return pipe.block.getIcon(side, pipe.meta); + } + } + } + + return RenderBlockMultipass.currentPass == 1 ? this.overlay : RenderBlockMultipass.currentPass == 2 ? this.overlayColor : this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(IBlockAccess world, int x, int y, int z) { + if (RenderBlockMultipass.currentPass == 2) { + TileEntityOpenComputersCablePaintable tile = (TileEntityOpenComputersCablePaintable) world.getTileEntity(x, y, z); + if (tile == null) + return 0xffffff; + + return tile.getColor(); + } + + return 0xffffff; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if (stack == null) + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + + if (stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if(block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block == null) { + pipe.block = block; + pipe.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + } + } else { + boolean isDye = false; + int[] dicts = OreDictionary.getOreIDs(stack); + for (int dict : dicts) { + String dictName = OreDictionary.getOreName(dict); + if (dictName.equals("dye")) + isDye = true; + } + + if (isDye) { + TileEntityOpenComputersCablePaintable tile = (TileEntityOpenComputersCablePaintable) world.getTileEntity(x, y, z); + tile.setColor(OCColors.fromDye(stack).getColor()); + world.markBlockForUpdate(x, y, z); + tile.markDirty(); + } + } + + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + + @Override + public int getPasses() { + return 3; + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + @Optional.InterfaceList({ + @Optional.Interface(iface = "li.cil.oc.api.network.Environment", modid = "OpenComputers"), + @Optional.Interface(iface = "li.cil.oc.api.network.SidedEnvironment", modid = "OpenComputers"), + @Optional.Interface(iface = "li.cil.oc.api.network.Colored", modid = "OpenComputers") + }) + public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment, SidedEnvironment, Colored, ICopiable { + + protected Node node; + protected boolean addedToNetwork = false; + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + private OCColors color = OCColors.LIGHTGRAY; + + public TileEntityOpenComputersCablePaintable() { + node = Network.newNode(this, Visibility.None).create(); + } + + @Override + public void updateEntity() { + super.updateEntity(); + + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + + if(!this.getWorldObj().isRemote && !addedToNetwork) { + addedToNetwork = true; + Network.joinOrCreateNetwork(this); + } + + } + + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + + this.color = OCColors.fromInt(nbt.getInteger("dyeColor")); + + if (node != null && node.host() == this) { + node.load(nbt.getCompoundTag("oc:node")); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + + nbt.setInteger("dyeColor", color.getColor()); + + if (node != null && node.host() == this) { + final NBTTagCompound nodeNbt = new NBTTagCompound(); + node.save(nodeNbt); + nbt.setTag("oc:node", nodeNbt); + } + } + + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + this.color = OCColors.fromInt(nbt.getInteger("dyeColor")); + } + } + + // OC Cable Things + @Override + public Node node() { + return node; + } + + public Node sidedNode(ForgeDirection side) { + if (side == ForgeDirection.UNKNOWN) + return null; + + int neighborX = super.xCoord + side.offsetX; + int neighborY = super.yCoord + side.offsetY; + int neighborZ = super.zCoord + side.offsetZ; + TileEntity neighbor = worldObj.getTileEntity(neighborX, neighborY, neighborZ); + + // If a cable does not support colors but is a valid cable block, allow it to connect regardless of color. + if (!(neighbor instanceof Colored)) { + if (neighbor instanceof Environment) + return node; + else + return null; + } + + Colored cable = (Colored) neighbor; + if (cable.getColor() == color.getColor()) + return node; + else + return null; + } + + @Override + public void onConnect(Node node) {} + + @Override + public void onDisconnect(Node node) {} + + @Override + public void onMessage(Message message) {} + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + if (node != null) node.remove(); + } + + public void invalidate() { + super.invalidate(); + if (node != null) node.remove(); + } + + public boolean canConnect(net.minecraftforge.common.util.ForgeDirection side) { + if (side == ForgeDirection.UNKNOWN) + return false; + + int neighborX = super.xCoord + side.offsetX; + int neighborY = super.yCoord + side.offsetY; + int neighborZ = super.zCoord + side.offsetZ; + TileEntity neighbor = worldObj.getTileEntity(neighborX, neighborY, neighborZ); + + // If a cable does not support colors but is a valid cable block, allow it to connect regardless of color. + if (!(neighbor instanceof Colored)) { + return neighbor instanceof Environment; + } + + Colored cable = (Colored) neighbor; + return cable.getColor() == color.getColor(); + } + + public void setColor(int newColor) { + color = OCColors.fromInt(newColor); + } + + public int getColor() { + return color.getColor(); + } + } +} diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 8d867f56e..6c3e6f3b3 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -89,8 +89,6 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.bottle2_empty, 6), new Object[] { " G ", "G G", "G G", 'G', KEY_ANYPANE }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_korl, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, CU.dust() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_fritz, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, W.dust() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_korl_special, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, CU.dust(), ST.dust() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_fritz_special, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, W.dust(), TH232.dust() }); //Syringes CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_empty, 6), new Object[] { "P", "C", "B", 'B', Item.getItemFromBlock(Blocks.iron_bars), 'C', ModItems.cell_empty, 'P', IRON.plate() }); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 39c00cde5..de9dc346f 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -159,7 +159,7 @@ public class ToolRecipes { //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); - + //Carts CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.WOOD, EnumMinecart.EMPTY), new Object[] { "P P", "WPW", 'P',KEY_SLAB, 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java index 91b544fdc..647348883 100644 --- a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java +++ b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java @@ -3,6 +3,7 @@ package com.hbm.entity.mob; import com.hbm.entity.projectile.EntityBullet; import com.hbm.entity.projectile.EntityChopperMine; import com.hbm.handler.threading.PacketThreading; +import com.hbm.interfaces.Spaghetti; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; @@ -26,6 +27,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; +@Spaghetti("this sucks complete donkey shit") public class EntityHunterChopper extends EntityFlying implements IMob, IBossDisplayData, IRadiationImmune { public int courseChangeCooldown; @@ -335,20 +337,6 @@ public class EntityHunterChopper extends EntityFlying implements IMob, IBossDisp * kill this mob. */ protected void dropItems() { - - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_head, 1); - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_torso, 1); - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_wing, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_tail, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_gun, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_blades, 1); - this.dropItem(ModItems.combine_scrap, rand.nextInt(8) + 1); this.dropItem(ModItems.plate_combine_steel, rand.nextInt(5) + 1); } diff --git a/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java index 1a18c36c7..f2b042085 100644 --- a/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java +++ b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java @@ -16,10 +16,11 @@ import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; public class EntityUndeadSoldier extends EntityMob { - + public static final int DW_TYPE = 12; public static final byte TYPE_ZOMBIE = 0; public static final byte TYPE_SKELETON = 1; @@ -66,7 +67,7 @@ public class EntityUndeadSoldier extends EntityMob { this.setCurrentItemOrArmor(3, new ItemStack(ModItems.taurun_plate)); this.setCurrentItemOrArmor(2, new ItemStack(ModItems.taurun_legs)); this.setCurrentItemOrArmor(1, new ItemStack(ModItems.taurun_boots)); - + int gun = rand.nextInt(5); if(gun == 0) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_heavy_revolver)); if(gun == 1) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_light_revolver)); @@ -74,7 +75,7 @@ public class EntityUndeadSoldier extends EntityMob { if(gun == 3) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_maresleg)); if(gun == 4) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_greasegun)); } - + @Override protected String getLivingSound() { byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); @@ -110,7 +111,12 @@ public class EntityUndeadSoldier extends EntityMob { public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEAD; } - + + @Override + public boolean getCanSpawnHere() { + return this.worldObj.difficultySetting != EnumDifficulty.PEACEFUL && this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); + } + @Override protected void dropFewItems(boolean player, int loot) { } @Override protected void dropEquipment(boolean player, int loot) { } } diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index 46ce74fc0..ac4bbe114 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -1,11 +1,13 @@ package com.hbm.handler; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.network.BlockOpenComputersCablePaintable; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.util.ItemStackUtil; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Optional; import li.cil.oc.api.Items; @@ -15,6 +17,7 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.*; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -108,27 +111,66 @@ public class CompatHandler { } } - /** - * Simple enum for mapping OC color ordinals to a nicer format for adding new disks. - */ - public enum OCColors { - BLACK, //0x444444 - RED, //0xB3312C - GREEN, //0x339911 - BROWN, //0x51301A - BLUE, //0x6666FF - PURPLE, //0x7B2FBE - CYAN, //0x66FFFF - LIGHTGRAY, //0xABABAB - GRAY, //0x666666 - PINK, //0xD88198 - LIME, //0x66FF66 - YELLOW, //0xFFFF66 - LIGHTBLUE, //0xAAAAFF - MAGENTA, //0xC354CD - ORANGE, //0xEB8844 - WHITE //0xF0F0F0 - } + /** + * Simple enum for mapping OC color ordinals to a nicer format for adding new disks. + */ + public enum OCColors { + BLACK(0x444444, "dyeBlack"), + RED(0xB3312C, "dyeRed"), + GREEN(0x339911, "dyeGreen"), + BROWN(0x51301A, "dyeBrown"), + BLUE(0x6666FF, "dyeBlue"), + PURPLE(0x7B2FBE, "dyePurple"), + CYAN(0x66FFFF, "dyeCyan"), + LIGHTGRAY(0xABABAB, "dyeLightGray"), + GRAY(0x666666, "dyeGray"), + PINK(0xD88198, "dyePink"), + LIME(0x66FF66, "dyeLime"), + YELLOW(0xFFFF66, "dyeYellow"), + LIGHTBLUE(0xAAAAFF, "dyeLightBlue"), + MAGENTA(0xC354CD, "dyeMagenta"), + ORANGE(0xEB8844, "dyeOrange"), + WHITE(0xF0F0F0, "dyeWhite"), + NONE(0x0, ""); + + private final int color; + private final String dictName; + + OCColors(int color, String dictName) { + this.color = color; + this.dictName = dictName; + } + + public int getColor() { + return color; + } + + public static OCColors fromInt(int intColor) { + for (OCColors iColor : OCColors.values()) { + if (intColor == iColor.getColor()) + return iColor; + } + return OCColors.NONE; + } + + public static OCColors fromDye(ItemStack stack) { + List oreNames = ItemStackUtil.getOreDictNames(stack); + + for(String dict : oreNames) { + if(!(dict.length() > 3) || !dict.startsWith("dye")) + continue; + + for (OCColors color : OCColors.values()) { + if(!color.dictName.equals(dict)) + continue; + + return color; + } + } + + return OCColors.NONE; + } + } // Where all disks are stored with their name and `FloppyDisk` class. public static HashMap disks = new HashMap<>(); diff --git a/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java b/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java new file mode 100644 index 000000000..3abe4eb0d --- /dev/null +++ b/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java @@ -0,0 +1,77 @@ +package com.hbm.handler.microblocks; + +import com.hbm.blocks.ModBlocks; +import cpw.mods.fml.common.event.FMLInterModComms; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class MicroBlocksCompatHandler { + public static void preInit() { + registerMicroBlockCompat(ModBlocks.basalt); + registerMicroBlockCompat(ModBlocks.basalt_smooth); + registerMicroBlockCompat(ModBlocks.basalt_brick); + registerMicroBlockCompat(ModBlocks.basalt_polished); + registerMicroBlockCompat(ModBlocks.basalt_tiles); + + registerMicroBlockCompat(ModBlocks.deco_titanium); + registerMicroBlockCompat(ModBlocks.deco_red_copper); + registerMicroBlockCompat(ModBlocks.deco_tungsten); + registerMicroBlockCompat(ModBlocks.deco_aluminium); + registerMicroBlockCompat(ModBlocks.deco_steel); + registerMicroBlockCompat(ModBlocks.deco_rusty_steel); + registerMicroBlockCompat(ModBlocks.deco_lead); + registerMicroBlockCompat(ModBlocks.deco_beryllium); + registerMicroBlockCompat(ModBlocks.deco_asbestos); + registerMicroBlockCompat(ModBlocks.deco_rbmk); + registerMicroBlockCompat(ModBlocks.deco_rbmk_smooth); + + registerMicroBlockCompat(ModBlocks.asphalt); + registerMicroBlockCompat(ModBlocks.asphalt_light); + + registerMicroBlockCompat(ModBlocks.reinforced_brick); + registerMicroBlockCompat(ModBlocks.reinforced_ducrete); + registerMicroBlockCompat(ModBlocks.reinforced_sand); + + registerMicroBlockCompat(ModBlocks.reinforced_stone); + registerMicroBlockCompat(ModBlocks.concrete_smooth); + registerMicroBlockCompat(ModBlocks.concrete_colored); + registerMicroBlockCompat(ModBlocks.concrete_colored_ext); + registerMicroBlockCompat(ModBlocks.concrete); + registerMicroBlockCompat(ModBlocks.concrete_asbestos); + registerMicroBlockCompat(ModBlocks.concrete_super); + registerMicroBlockCompat(ModBlocks.concrete_super_broken); + registerMicroBlockCompat(ModBlocks.ducrete_smooth); + registerMicroBlockCompat(ModBlocks.ducrete); + registerMicroBlockCompat(ModBlocks.concrete_pillar); + registerMicroBlockCompat(ModBlocks.brick_concrete); + registerMicroBlockCompat(ModBlocks.brick_concrete_mossy); + registerMicroBlockCompat(ModBlocks.brick_concrete_cracked); + registerMicroBlockCompat(ModBlocks.brick_concrete_broken); + registerMicroBlockCompat(ModBlocks.brick_concrete_marked); + registerMicroBlockCompat(ModBlocks.brick_ducrete); + registerMicroBlockCompat(ModBlocks.brick_obsidian); + registerMicroBlockCompat(ModBlocks.brick_light); + registerMicroBlockCompat(ModBlocks.brick_compound); + registerMicroBlockCompat(ModBlocks.brick_asbestos); + registerMicroBlockCompat(ModBlocks.brick_fire); + registerMicroBlockCompat(ModBlocks.lightstone); + + registerMicroBlockCompat(ModBlocks.cmb_brick); + registerMicroBlockCompat(ModBlocks.cmb_brick_reinforced); + registerMicroBlockCompat(ModBlocks.vinyl_tile); + + registerMicroBlockCompat(ModBlocks.tile_lab); + registerMicroBlockCompat(ModBlocks.tile_lab_cracked); + registerMicroBlockCompat(ModBlocks.tile_lab_broken); + } + + private static void registerMicroBlockCompat(Block block) { + for(int meta = 0; meta < 15; meta++) { + registerMicroBlockCompat(block, meta); + } + } + + private static void registerMicroBlockCompat(Block block, int meta) { + FMLInterModComms.sendMessage("ForgeMicroblock", "microMaterial", new ItemStack(block, 1, meta)); + } +} diff --git a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java index 3ae55ae72..fae7ac9ef 100644 --- a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java +++ b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java @@ -31,7 +31,7 @@ public class UpgradeManagerNT { public UpgradeManagerNT(TileEntity te) { this.owner = te; } @Deprecated public UpgradeManagerNT() { } - public void checkSlots(ItemStack[] slots, int start, int end) { checkSlots(owner, slots, start, end); } + public void checkSlots(ItemStack[] slots, int start, int end) { checkSlotsInternal(owner, slots, start, end); } @Deprecated public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { checkSlotsInternal(te, slots, start, end); } private void checkSlotsInternal(TileEntity te, ItemStack[] slots, int start, int end) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java index f7bc0d499..507d41e66 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java @@ -3,7 +3,6 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -51,12 +50,12 @@ public class ContainerMachineAssemblyMachine extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; - } else if(slotOriginal.getItem() instanceof ItemAssemblyTemplate) { + } else if(slotOriginal.getItem() == ModItems.blueprints) { if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; } else { - if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 16, false)) return null; } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java index 8218c4057..d69a8f062 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; @@ -33,8 +34,8 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 115, 34, 16); - assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 115, 34, 16); + assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 99, 52, 16); + assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 99, 52, 16); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); @@ -52,7 +53,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); } @Override @@ -115,7 +116,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { GL11.glDisable(GL11.GL_BLEND); } - assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 34, 16, 1); - assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 34, 16, 1); + assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 52, 16, 1); + assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 52, 16, 1); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index a31917752..567b2e256 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; @@ -57,7 +58,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, this); + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, ItemBlueprints.grabPool(chemplant.slots[4 + i * 7]), this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index 9f02d0adf..78a2e619b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; @@ -54,7 +55,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index eee3c7fad..66a3b7152 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -115,10 +115,13 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - if(turbinegas.powerSliderPos == 0) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Turbine idle"}); - else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {(turbinegas.powerSliderPos) * 100 / 60 + "% power"}); + if(turbinegas.state == 1) { + double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); + } + else { + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); + } if(turbinegas.temp >= 20) this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); @@ -146,6 +149,7 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { if(turbinegas.tanks[0].getFill() < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 32, 16, 16, guiLeft - 8, guiTop + 44 + 16, warning); } + @Override protected void drawGuiContainerBackgroundLayer(float iinterpolation, int x, int y) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 6f101ef29..4a5e3bb83 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -50,16 +50,18 @@ public class GUIScreenRecipeSelector extends GuiScreen { protected int index; protected IControlReceiver tile; protected GuiScreen previousScreen; + protected String installedPool; - public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { - FMLCommonHandler.instance().showGuiScreen(new GUIScreenRecipeSelector(recipeSet, tile, selection, index, previousScreen)); + public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, String installedPool, GuiScreen previousScreen) { + FMLCommonHandler.instance().showGuiScreen(new GUIScreenRecipeSelector(recipeSet, tile, selection, index, installedPool, previousScreen)); } - public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { + public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, String installedPool, GuiScreen previousScreen) { this.recipeSet = recipeSet; this.tile = tile; this.selection = selection; this.index = index; + this.installedPool = installedPool; this.previousScreen = previousScreen; if(this.selection == null) this.selection = NULL_SELECTION; @@ -83,7 +85,11 @@ public class GUIScreenRecipeSelector extends GuiScreen { private void regenerateRecipes() { this.recipes.clear(); - this.recipes.addAll(recipeSet.recipeOrderedList); + + for(Object o : recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + if(!recipe.isPooled() || (this.installedPool != null && recipe.isPartOfPool(installedPool))) this.recipes.add(recipe); + } resetPaging(); } @@ -92,15 +98,17 @@ public class GUIScreenRecipeSelector extends GuiScreen { this.recipes.clear(); if(search.isEmpty()) { - this.recipes.addAll(recipeSet.recipeOrderedList); + regenerateRecipes(); } else { for(Object o : recipeSet.recipeOrderedList) { GenericRecipe recipe = (GenericRecipe) o; - if(recipe.matchesSearch(search)) this.recipes.add(recipe); + if(recipe.matchesSearch(search)) { + if(!recipe.isPooled() || (this.installedPool != null && recipe.isPartOfPool(installedPool))) this.recipes.add(recipe); + } } + + resetPaging(); } - - resetPaging(); } private void resetPaging() { diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 6e810bbcc..5a03bf288 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -136,7 +136,7 @@ public class Mats { //Alloys public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setAutogen(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); - public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, BLOCK).m(); + public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x82A59C, 0x06281E, 0x42665C).setAutogen(BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index e1efbf9db..1960d4dfb 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -23,9 +23,7 @@ import com.hbm.config.GeneralConfig; import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.*; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.material.Mats; -import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumCasingType; @@ -79,7 +77,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.centrifuge_element, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 4), new OreDictStack(TI.plate528(), 4), new ComparableStack(ModItems.motor, 1), }, 100); makeRecipe(new ComparableStack(ModItems.reactor_core, 1), new AStack[] {new OreDictStack(PB.ingot(), 8), new OreDictStack(BE.ingot(), 6), new OreDictStack(STEEL.plate(), 16), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(FIBER.ingot(), 2) },100); makeRecipe(new ComparableStack(ModItems.rtg_unit, 1), new AStack[] {new ComparableStack(ModItems.thermo_element, 2), new OreDictStack(CU.plateCast(), 1), new OreDictStack(PB.ingot(), 2), new OreDictStack(STEEL.plate(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CAPACITOR.ordinal()), },100); - makeRecipe(new ComparableStack(ModItems.levitation_unit, 1), new AStack[] {new ComparableStack(ModItems.coil_copper, 4), new ComparableStack(ModItems.coil_tungsten, 2), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.nugget_schrabidium, 2), },100); makeRecipe(new ComparableStack(ModItems.drill_titanium, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(DURA.ingot(), 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(TI.plate(), 6), },100); makeRecipe(new ComparableStack(ModItems.entanglement_kit, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(DURA.ingot(), 4), new OreDictStack(CU.plate(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(Fluids.XENON.getDict(1_000))},200); makeRecipe(new ComparableStack(ModItems.dysfunctional_reactor, 1), new AStack[] {new OreDictStack(STEEL.plate(), 15), new OreDictStack(PB.ingot(), 5), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack("dyeBrown", 3), },200); @@ -101,12 +98,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()) }, 600); makeRecipe(new ComparableStack(ModItems.missile_stealth, 1), new AStack[] { new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(CU.plate(), 10), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32) },1200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel) },600); - makeRecipe(new ComparableStack(ModItems.chopper_head, 1), new AStack[] {new ComparableStack(ModBlocks.reinforced_glass, 2), new OreDictStack(CMB.ingot(), 22), new OreDictStack(MAGTUNG.wireFine(), 4), },300); - makeRecipe(new ComparableStack(ModItems.chopper_gun, 1), new AStack[] {new OreDictStack(CMB.plate(), 4), new OreDictStack(CMB.ingot(), 2), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 1), new ComparableStack(ModItems.motor, 1), },150); - makeRecipe(new ComparableStack(ModItems.chopper_torso, 1), new AStack[] {new OreDictStack(CMB.ingot(), 26), new OreDictStack(MAGTUNG.wireFine(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.chopper_blades, 2), },350); - makeRecipe(new ComparableStack(ModItems.chopper_tail, 1), new AStack[] {new OreDictStack(CMB.plate(), 8), new OreDictStack(CMB.ingot(), 5), new OreDictStack(MAGTUNG.wireFine(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.chopper_blades, 2), },200); - makeRecipe(new ComparableStack(ModItems.chopper_wing, 1), new AStack[] {new OreDictStack(CMB.plate(), 6), new OreDictStack(CMB.ingot(), 3), new OreDictStack(MAGTUNG.wireFine(), 2), },150); - makeRecipe(new ComparableStack(ModItems.chopper_blades, 1), new AStack[] {new OreDictStack(CMB.plate(), 8), new OreDictStack(STEEL.plate(), 2), new OreDictStack(CMB.ingot(), 2), },200); makeRecipe(new ComparableStack(ModItems.tritium_deuterium_cake, 1), new AStack[] {new ComparableStack(ModItems.cell_deuterium, 6), new ComparableStack(ModItems.cell_tritium, 2), new OreDictStack(LI.ingot(), 4), },150); makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50); makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50); @@ -168,10 +159,9 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.nuke_n2, 1), new AStack[] {new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack("dyeBlack", 8), },300); makeRecipe(new ComparableStack(ModBlocks.nuke_fstbmb, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 8), },600, ModItems.journal_pip, ModItems.journal_bj); makeRecipe(new ComparableStack(ModBlocks.nuke_custom, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 4), },300); - makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.levitation_unit, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireFine(), 6), },250); + makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8), },250); makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); makeRecipe(new ComparableStack(ModBlocks.therm_exo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); - makeRecipe(new ComparableStack(ModItems.spawn_chopper, 1), new AStack[] {new ComparableStack(ModItems.chopper_blades, 5), new ComparableStack(ModItems.chopper_gun, 1), new ComparableStack(ModItems.chopper_head, 1), new ComparableStack(ModItems.chopper_tail, 1), new ComparableStack(ModItems.chopper_torso, 1), new ComparableStack(ModItems.chopper_wing, 2), },300); makeRecipe(new ComparableStack(ModItems.grenade_fire, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new OreDictStack(P_RED.dust(), 1), new OreDictStack(CU.plate(), 2), },150); makeRecipe(new ComparableStack(ModItems.grenade_shrapnel, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_buckshot, 1), new OreDictStack(STEEL.plate(), 2), },150); makeRecipe(new ComparableStack(ModItems.grenade_cluster, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_cluster, 1), new OreDictStack(STEEL.plate(), 2), },200); @@ -205,7 +195,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.solinium_core, 1), new AStack[] {new OreDictStack(SA327.nugget(), 9), new OreDictStack(EUPH.nugget(), 1), },400); makeRecipe(new ComparableStack(ModItems.solinium_propellant, 1), new AStack[] {new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.plate_polymer, 6), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.biomass_compressed, 4), },350); makeRecipe(new ComparableStack(ModItems.schrabidium_hammer, 1), new AStack[] {new OreDictStack(SA326.block(), 35), new ComparableStack(ModItems.billet_yharonite, 128), new ComparableStack(Items.nether_star, 3), new ComparableStack(ModItems.fragment_meteorite, 512), },1000); - makeRecipe(new ComparableStack(ModItems.component_emitter, 1), new AStack[] {new OreDictStack(STEEL.shell(), 3), new OreDictStack(AL.shell(), 2), new OreDictStack(STEEL.plate(), 32), new OreDictStack(PB.plate(), 24), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.pipes_steel, 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new OreDictStack(STAR.ingot(), 26), new ComparableStack(ModItems.powder_magic, 48), new ComparableStack(ModItems.crystal_xen, 1), },2500); makeRecipe(new ComparableStack(ModBlocks.machine_radar, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(ANY_RUBBER.ingot(), 8), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.coil_copper, 12), new ComparableStack(ModItems.crt_display, 4), },300); makeRecipe(new ComparableStack(ModBlocks.machine_radar_large, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 16), new OreDictStack(ANY_RUBBER.ingot(), 16), new ComparableStack(ModItems.magnetron, 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_copper, 32), new ComparableStack(ModItems.crt_display, 4), },600); makeRecipe(new ComparableStack(ModBlocks.machine_forcefield, 1), new AStack[] {new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1), },1000); @@ -851,19 +840,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) }, 400); - makeRecipe(new ComparableStack(ModBlocks.machine_chemfac, 1), new AStack[] { - !exp ? new OreDictStack(STEEL.ingot(), 48) : new OreDictStack(STEEL.heavyComp(), 2), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(NB.ingot(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(STEEL.shell(), 12), - new ComparableStack(ModItems.tank_steel, 8), - new ComparableStack(ModItems.motor_desh, 4), - new ComparableStack(ModItems.coil_tungsten, 24), - new OreDictStack(STEEL.pipe(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - makeRecipe(new ComparableStack(ModBlocks.machine_chemical_factory, 1), new AStack[] { new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), @@ -1319,12 +1295,6 @@ public class AssemblerRecipes extends SerializableRecipe { } } - for(NTMMaterial mat : Mats.orderedList) { - if(mat.autogen.contains(MaterialShapes.CASTPLATE) && mat.autogen.contains(MaterialShapes.HEAVY_COMPONENT)) { - makeRecipe(new ComparableStack(ModItems.heavy_component, 1, mat.id), new AStack[] { new OreDictStack(MaterialShapes.CASTPLATE.name() + mat.names[0], 256) }, 12_000); - } - } - // WarTec compatibility code try { Class wartecmodAssemblerRecipes = ClassLoader.getSystemClassLoader().loadClass("com.wartec.wartecmod.inventory.wartecmodAssemblerRecipes"); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index c018e55c9..c6e98b525 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -5,17 +5,38 @@ import java.util.HashMap; import java.util.List; import static com.hbm.inventory.OreDictManager.*; -import static com.hbm.inventory.material.Mats.*; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockCap.EnumCapBlock; +import com.hbm.blocks.machine.BlockICFLaserComponent.EnumICFPart; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.OreDictManager; +import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumCasingType; +import com.hbm.items.ItemEnums.EnumSecretType; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; +import com.hbm.items.machine.ItemDrillbit.EnumDrillType; +import com.hbm.items.machine.ItemPACoil.EnumCoilType; +import com.hbm.items.machine.ItemPistons.EnumPistonType; +import com.hbm.items.weapon.ItemAmmoHIMARS; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; +import cpw.mods.fml.common.Loader; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; public class AssemblyMachineRecipes extends GenericRecipes { @@ -27,15 +48,747 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public int outputItemLimit() { return 1; } @Override public int outputFluidLimit() { return 1; } - @Override public String getFileName() { return "hbmAsemblyMachine.json"; } + @Override public String getFileName() { return "hbmAssemblyMachine.json"; } @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } @Override public void registerDefaults() { - this.register(new GenericRecipe("ass.test").setup(100, 1_000) - .inputItems(new OreDictStack(STEEL.ingot(), 5)) - .outputItems(new ItemStack(ModItems.plate_welded, 1, MAT_STEEL.id))); + // plates and ingots + this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plategold").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gold, 1)).inputItems(new OreDictStack(GOLD.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platetitanium").setup(60, 100).outputItems(new ItemStack(ModItems.plate_titanium, 1)).inputItems(new OreDictStack(TI.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platealu").setup(60, 100).outputItems(new ItemStack(ModItems.plate_aluminium, 1)).inputItems(new OreDictStack(AL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platesteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_steel, 1)).inputItems(new OreDictStack(STEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platelead").setup(60, 100).outputItems(new ItemStack(ModItems.plate_lead, 1)).inputItems(new OreDictStack(PB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platecopper").setup(60, 100).outputItems(new ItemStack(ModItems.plate_copper, 1)).inputItems(new OreDictStack(CU.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platealloy").setup(60, 100).outputItems(new ItemStack(ModItems.plate_advanced_alloy, 1)).inputItems(new OreDictStack(ALLOY.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plateschrab").setup(60, 100).outputItems(new ItemStack(ModItems.plate_schrabidium, 1)).inputItems(new OreDictStack(SA326.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platecmb").setup(60, 100).outputItems(new ItemStack(ModItems.plate_combine_steel, 1)).inputItems(new OreDictStack(CMB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plategunmetal").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gunmetal, 1)).inputItems(new OreDictStack(GUNMETAL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) + .inputItems(new OreDictStack(ALLOY.plate(), 2), new OreDictStack(OreDictManager.getReflector(), 1), new OreDictStack(BIGMT.plate(), 1))); + this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) + .inputItems(new ComparableStack(ModBlocks.block_meteor, 1))); + this.register(new GenericRecipe("ass.platedesh").setup(200, 100).outputItems(new ItemStack(ModItems.plate_desh, 4)) + .inputItems(new OreDictStack(DESH.ingot(), 4), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(DURA.ingot(), 1))); + this.register(new GenericRecipe("ass.platebismuth").setup(200, 100).outputItems(new ItemStack(ModItems.plate_bismuth, 1)) + .inputItems(new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1))); + this.register(new GenericRecipe("ass.plateeuphemium").setup(600, 100).outputItems(new ItemStack(ModItems.plate_euphemium, 1)) + .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); + this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) + .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); + + // cloth + this.register(new GenericRecipe("ass.hazcloth").setup(50, 100).outputItems(new ItemStack(ModItems.hazmat_cloth, 4)) + .inputItems(new OreDictStack(PB.dust(), 4), new ComparableStack(Items.string, 8))); + this.register(new GenericRecipe("ass.firecloth").setup(50, 100).outputItems(new ItemStack(ModItems.asbestos_cloth, 4)) + .inputItems(new OreDictStack(ASBESTOS.ingot(), 1), new ComparableStack(Items.string, 8))); + this.register(new GenericRecipe("ass.filtercoal").setup(50, 100).outputItems(new ItemStack(ModItems.filter_coal, 1)) + .inputItems(new OreDictStack(COAL.dust(), 4), new ComparableStack(Items.string, 2), new ComparableStack(Items.paper, 1))); + + // machine parts + this.register(new GenericRecipe("ass.centrifugetower").setup(100, 100).outputItems(new ItemStack(ModItems.centrifuge_element, 1)) + .inputItems(new OreDictStack(DURA.plate528(), 4), new OreDictStack(TI.plate528(), 4), new ComparableStack(ModItems.motor, 1))); + this.register(new GenericRecipe("ass.reactorcore").setup(100, 100).outputItems(new ItemStack(ModItems.reactor_core, 1)) + .inputItems(new OreDictStack(PB.plateCast(), 4), new OreDictStack(BE.ingot(), 8), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(ASBESTOS.ingot(), 4))); + this.register(new GenericRecipe("ass.thermoelement").setup(60, 100).outputItems(new ItemStack(ModItems.thermo_element, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(MINGRADE.wireFine(), 2), new OreDictStack(NETHERQUARTZ.dust(), 2))); + this.register(new GenericRecipe("ass.thermoelementsilicon").setup(60, 100).outputItems(new ItemStack(ModItems.thermo_element, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(GOLD.wireFine(), 2), new OreDictStack(SI.billet(), 1))); + this.register(new GenericRecipe("ass.rtgunit").setup(100, 100).outputItems(new ItemStack(ModItems.rtg_unit, 1)) + .inputItems(new OreDictStack(PB.plateCast(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.thermo_element, 2))); + this.register(new GenericRecipe("ass.magnetron").setup(40, 100).outputItems(new ItemStack(ModItems.magnetron, 1)) + .inputItems(new OreDictStack(CU.plate(), 3), new OreDictStack(W.wireFine(), 4))); + this.register(new GenericRecipe("ass.titaniumdrill").setup(100, 100).outputItems(new ItemStack(ModItems.drill_titanium, 1)) + .inputItems(new OreDictStack(DURA.plateCast(), 1), new OreDictStack(TI.plate(), 8))); + this.register(new GenericRecipe("ass.entanglementkit").setup(200, 100).outputItems(new ItemStack(ModItems.entanglement_kit, 1)) + .inputItems(new OreDictStack(DURA.plateCast(), 4), new OreDictStack(CU.plate(), 24), new OreDictStack(GOLD.wireDense(), 16)) + .inputFluids(new FluidStack(Fluids.XENON, 8_000))); + this.register(new GenericRecipe("ass.protoreactor").setup(200, 100).outputItems(new ItemStack(ModItems.dysfunctional_reactor, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(PB.plateCast(), 4), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack(KEY_BROWN, 3))); + + // powders + this.register(new GenericRecipe("ass.partlith").setup(40, 100).outputItems(new ItemStack(ModItems.part_lithium, 8)) + .inputItems(new OreDictStack(LI.dust(), 1))); + this.register(new GenericRecipe("ass.partberyl").setup(40, 100).outputItems(new ItemStack(ModItems.part_beryllium, 8)) + .inputItems(new OreDictStack(BE.dust(), 1))); + this.register(new GenericRecipe("ass.partcoal").setup(40, 100).outputItems(new ItemStack(ModItems.part_carbon, 8)) + .inputItems(new OreDictStack(COAL.dust(), 1))); + this.register(new GenericRecipe("ass.partcop").setup(40, 100).outputItems(new ItemStack(ModItems.part_copper, 8)) + .inputItems(new OreDictStack(CU.dust(), 1))); + this.register(new GenericRecipe("ass.partplut").setup(40, 100).outputItems(new ItemStack(ModItems.part_plutonium, 8)) + .inputItems(new OreDictStack(PU.dust(), 1))); + + // bunker blocks + this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); + this.register(new GenericRecipe("ass.cmbbrick").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick_reinforced, 8)) + .inputItems(new OreDictStack(MAGTUNG.ingot(), 8), new ComparableStack(ModBlocks.ducrete, 4), new ComparableStack(ModBlocks.cmb_brick, 8))); + this.register(new GenericRecipe("ass.sealframe").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); + this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); + + // nuclear door mod + this.register(new GenericRecipe("ass.vaultdoor").setup(600, 100).outputItems(new ItemStack(ModBlocks.vault_door, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 32), new OreDictStack(DURA.ingot(), 32), new OreDictStack(PB.plateCast(), 8), new OreDictStack(ANY_RUBBER.ingot(), 12), new OreDictStack(DURA.bolt(), 32), new ComparableStack(ModItems.motor, 3))); + this.register(new GenericRecipe("ass.blastdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.blast_door, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(PB.plate(), 6), new OreDictStack(ALLOY.plate(), 6), new OreDictStack(ANY_RUBBER.ingot(), 2), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 1))); + this.register(new GenericRecipe("ass.firedoor").setup(300, 100).outputItems(new ItemStack(ModBlocks.fire_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(ALLOY.plate(), 8), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.seal").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.transition_seal, 1)) + .inputItems(new ComparableStack(ModBlocks.cmb_brick_reinforced, 16), new OreDictStack(STEEL.plate(), 64), new OreDictStack(ALLOY.plate(), 40), new OreDictStack(ANY_RUBBER.ingot(), 36), new OreDictStack(STEEL.block(), 24), new ComparableStack(ModItems.motor_desh, 16), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_YELLOW, 4))); + this.register(new GenericRecipe("ass.slidingdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.sliding_blast_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(W.ingot(), 8), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ANY_RUBBER.ingot(), 4), new OreDictStack(DURA.bolt(), 16), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.vehicledoor").setup(400, 100).outputItems(new ItemStack(ModBlocks.large_vehicle_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 16), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.waterdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.water_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_RED, 1))); + this.register(new GenericRecipe("ass.qedoor").setup(400, 100).outputItems(new ItemStack(ModBlocks.qe_containment, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 32), new OreDictStack(KEY_BLACK, 4))); + this.register(new GenericRecipe("ass.queslidingdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.qe_sliding_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_WHITE, 4), new ComparableStack(Blocks.glass, 4))); + this.register(new GenericRecipe("ass.roundairlock").setup(400, 100).outputItems(new ItemStack(ModBlocks.round_airlock_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 8), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.secureaccess").setup(400, 100).outputItems(new ItemStack(ModBlocks.secure_access_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 16), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack(KEY_RED, 8))); + this.register(new GenericRecipe("ass.slidingseal").setup(200, 100).outputItems(new ItemStack(ModBlocks.sliding_seal_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_WHITE, 2))); + this.register(new GenericRecipe("ass.silohatch").setup(200, 100).outputItems(new ItemStack(ModBlocks.silo_hatch, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.silohatchlarge").setup(300, 100).outputItems(new ItemStack(ModBlocks.silo_hatch_large, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 8))); + + // decoration + this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) + .inputItems(new ComparableStack(ModItems.cap_nuka, 128))); + this.register(new GenericRecipe("ass.capquantum").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.QUANTUM)) + .inputItems(new ComparableStack(ModItems.cap_quantum, 128))); + this.register(new GenericRecipe("ass.capsparkle").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.SPARKLE)) + .inputItems(new ComparableStack(ModItems.cap_sparkle, 128))); + this.register(new GenericRecipe("ass.caprad").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.RAD)) + .inputItems(new ComparableStack(ModItems.cap_rad, 128))); + this.register(new GenericRecipe("ass.capfritz").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.FRITZ)) + .inputItems(new ComparableStack(ModItems.cap_fritz, 128))); + this.register(new GenericRecipe("ass.capkorl").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.KORL)) + .inputItems(new ComparableStack(ModItems.cap_korl, 128))); + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ + + // machines + this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.arcfurnace").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_arc_furnace, 1)) + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16),new OreDictStack(STEEL.plateCast(), 8), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()))); + this.register(new GenericRecipe("ass.acidizer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_crystallizer, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.electrolyzer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_electrolyser, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 16), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) + .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1))); + this.register(new GenericRecipe("ass.pumpjack").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_pumpjack, 1)) + .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh), new ComparableStack(ModItems.drill_titanium, 1))); + this.register(new GenericRecipe("ass.fracker").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_fracking_tower, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 24), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModBlocks.concrete_smooth, 64), new ComparableStack(ModItems.drill_titanium), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR))); + this.register(new GenericRecipe("ass.flarestack").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_flare, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.thermo_element, 3))); + this.register(new GenericRecipe("ass.refinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_refinery, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.crackingtower").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_cracker, 1)) + .inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(NB.ingot(), 2), new ComparableStack(ModItems.catalyst_clay, 12))); + this.register(new GenericRecipe("ass.radiolysis").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_radiolysis, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.thermo_element, 8))); + this.register(new GenericRecipe("ass.coker").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_coker, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); + this.register(new GenericRecipe("ass.vaccumrefinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_vacuum_distill, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CHIP_BISMOID))); + this.register(new GenericRecipe("ass.reformer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_reformer, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(CU.plate528(), 8), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 3), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.hydrotreater").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hydrotreater, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(CU.plateCast(), 4), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 2), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.pyrooven").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_pyrooven, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 4), new OreDictStack(CU.pipe(), 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.liquefactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_liquefactor, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 12), new OreDictStack(ANY_TAR.any(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_tungsten, 8))); + this.register(new GenericRecipe("ass.solidifier").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_solidifier, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(AL.plate528(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.compressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.compactcompressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor_compact, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(TI.shell(), 4), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) + .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8))); + this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) + .inputItems(new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(STEEL.ingot(), 8), new OreDictStack(IRON.ingot(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.drillsteel").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal())) + .inputItems(new OreDictStack(STEEL.ingot(), 12), new OreDictStack(W.ingot(), 4))); + this.register(new GenericRecipe("ass.drillsteeldiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal()), new OreDictStack(DIAMOND.dust(), 16))); + this.register(new GenericRecipe("ass.drilldura").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.HSS.ordinal())) + .inputItems(new OreDictStack(DURA.ingot(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 12), new OreDictStack(TI.ingot(), 8))); + this.register(new GenericRecipe("ass.drillduradiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.HSS_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.HSS.ordinal()), new OreDictStack(DIAMOND.dust(), 24))); + this.register(new GenericRecipe("ass.drilldesh").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.DESH.ordinal())) + .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(NB.ingot(), 4))); + this.register(new GenericRecipe("ass.drilldeshdiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.DESH_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.DESH.ordinal()), new OreDictStack(DIAMOND.dust(), 32))); + this.register(new GenericRecipe("ass.drilltc").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.ingot(), 20), new OreDictStack(DESH.ingot(), 12), new OreDictStack(RUBBER.ingot(), 8))); + this.register(new GenericRecipe("ass.drilltcdiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY.ordinal()), new OreDictStack(DIAMOND.dust(), 48))); + this.register(new GenericRecipe("ass.drillferro").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.FERRO.ordinal())) + .inputItems(new OreDictStack(FERRO.ingot(), 24), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 12), new OreDictStack(BI.ingot(), 4))); + this.register(new GenericRecipe("ass.drillferrodiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.FERRO_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.FERRO.ordinal()), new OreDictStack(DIAMOND.dust(), 56))); + this.register(new GenericRecipe("ass.slopper").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_ore_slopper, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(TI.plate(), 8), new OreDictStack(CU.pipe(), 3), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.mininglaser").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_mining_laser, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(TI.shell(), 4), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3))); + this.register(new GenericRecipe("ass.teleporter").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_teleporter, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1))); + this.register(new GenericRecipe("ass.radar").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_radar, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(ANY_RUBBER.ingot(), 12), new ComparableStack(ModItems.magnetron, 5), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.crt_display, 4))); + this.register(new GenericRecipe("ass.radarlarge").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radar_large, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.crt_display, 4))); + this.register(new GenericRecipe("ass.forcefield").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_forcefield, 1)) + .inputItems(new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1))); + this.register(new GenericRecipe("ass.difurnacertg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_difurnace_rtg_off, 1)) + .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(DESH.ingot(), 4), new OreDictStack(PB.plate528(), 6), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(CU.plate(), 12))); + this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) + .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8))); + this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assemfac, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 48), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor, 18), new OreDictStack(W.bolt(), 16), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + + // generators + this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.combustiongen").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_combustion_engine, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.pistonsetsteel").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal())) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), new OreDictStack(W.ingot(), 8), new OreDictStack(W.bolt(), 16))); + this.register(new GenericRecipe("ass.pistonsetdura").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DURA.ordinal())) + .inputItems(new OreDictStack(DURA.ingot(), 24), new OreDictStack(TI.plate(), 8), new OreDictStack(W.ingot(), 8), new OreDictStack(DURA.bolt(), 16))); + this.register(new GenericRecipe("ass.pistonsetdesh").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DESH.ordinal())) + .inputItems(new OreDictStack(DESH.ingot(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new OreDictStack(CU.plate(), 24), new OreDictStack(W.ingot(), 16), new OreDictStack(DURA.pipe(), 4))); + this.register(new GenericRecipe("ass.pistonsetstar").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STARMETAL.ordinal())) + .inputItems(new OreDictStack(STAR.ingot(), 24), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new OreDictStack(NB.ingot(), 16), new OreDictStack(DURA.pipe(), 4))); + this.register(new GenericRecipe("ass.turbofan").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_turbofan, 1)) + .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + this.register(new GenericRecipe("ass.hephaestus").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hephaestus, 1)) + .inputItems(new OreDictStack(STEEL.pipe(), 12), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16))); + this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_large_turbine, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.leviturbine").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_chungus, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate528(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16))); + this.register(new GenericRecipe("ass.radgen").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radgen, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "radgen") + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1))); + + // condensers + this.register(new GenericRecipe("ass.hpcondenser").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_condenser_powered, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4))); + + // batteries + this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); + this.register(new GenericRecipe("ass.batterylithium").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_lithium_battery, 1)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12))); + this.register(new GenericRecipe("ass.batteryschrabidium").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_schrabidium_battery, 1)) + .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); + this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_dineutronium_battery, 1)) + .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); + this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) + .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), + new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), + new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64), + new OreDictStack(DURA.block(), 16), + new OreDictStack(STAR.block(), 64), + new ComparableStack(ModBlocks.machine_transformer_dnt, 8), + new ComparableStack(ModItems.coil_magnetized_tungsten, 24), + new ComparableStack(ModItems.powder_magic, 64), + new ComparableStack(ModItems.plate_dineutronium, 24), + new ComparableStack(ModItems.ingot_u238m2), + new ComparableStack(ModItems.ingot_cft, 128))); + + // fluid tanks + this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4))); + this.register(new GenericRecipe("ass.bat9k").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_bat9000, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16))); + this.register(new GenericRecipe("ass.orbus").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_orbus, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1))); + + // accelerators + this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate528(), 32), new OreDictStack(AL.plate528(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.beamline").setup(200, 100).outputItems(new ItemStack(ModBlocks.pa_beamline, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4))); + this.register(new GenericRecipe("ass.rfc").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_rfc, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16))); + this.register(new GenericRecipe("ass.quadrupole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_quadrupole, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 1), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.dipole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_dipole, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 2), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.source").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_source, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.detector").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_detector, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 128))); + this.register(new GenericRecipe("ass.panbti").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM.ordinal())).inputItems(new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64))); + this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); + this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 128), new ComparableStack(ModItems.powder_chlorophyte, 16))); + this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) + .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16))); + + // reactors + this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) + .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.researchreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.reactor_research, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.cirnox").setup(600, 100).outputItems(new ItemStack(ModBlocks.reactor_zirnox, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(B.ingot(), 8), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.rbmk").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_blank, 1)) + .inputItems(new ComparableStack(ModBlocks.concrete_asbestos, 4), new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.plate_polymer, 4))); + + // fusion reactor + this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 6), new OreDictStack(W.plateWelded(), 6), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.fusionconductor").setup(100, 100).outputItems(new ItemStack(ModBlocks.fusion_conductor, 1)) + .inputItems(new ComparableStack(ModItems.coil_advanced_alloy, 5))); + this.register(new GenericRecipe("ass.fusioncenter").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_center, 1)) + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(ALLOY.wireFine(), 24))); + this.register(new GenericRecipe("ass.fusionmotor").setup(400, 100).outputItems(new ItemStack(ModBlocks.fusion_motor, 1)) + .inputItems(new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4))); + this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) + .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); + this.register(new GenericRecipe("ass.blankettungsten").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_tungsten, 1)) + .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96))); + this.register(new GenericRecipe("ass.blanketdesh").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_desh, 1)) + .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96))); + this.register(new GenericRecipe("ass.blanketchlorophyte").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_chlorophyte, 1)) + .inputItems(new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48))); + + // watz + this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.watzcooler").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_cooler, 3)) + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2))); + this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2))); + + // ICF + this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) + .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))); + this.register(new GenericRecipe("ass.icfemitter").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal())) + .inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16)) + .inputFluids(new FluidStack(Fluids.XENON, 16_000))); + this.register(new GenericRecipe("ass.icfcapacitor").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.ingot(), 2))); + this.register(new GenericRecipe("ass.icfturbo").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.ingot(), 4))); + this.register(new GenericRecipe("ass.icfcasing").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal())) + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))); + this.register(new GenericRecipe("ass.icfport").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal())) + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 4))); + this.register(new GenericRecipe("ass.icfcontroller").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_controller, 1)) + .inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.icfscaffold").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))); + this.register(new GenericRecipe("ass.icfvessel").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1)) + .inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))); + this.register(new GenericRecipe("ass.icfstructural").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))); + this.register(new GenericRecipe("ass.icfcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1)) + .inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1)) + .inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + + // upgrades + this.register(new GenericRecipe("ass.overdrive1").setup(200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_1, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.overdrive2").setup(600, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_2, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD))); + this.register(new GenericRecipe("ass.overdrive3").setup(1_200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_3, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(ANY_BISMOIDBRONZE.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ + + // rancid shit mob spawners + this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) + .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); + this.register(new GenericRecipe("ass.ballsotron").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_worm, 1)) + .inputItems(new OreDictStack(TI.plateWelded(), 32), new OreDictStack(RUBBER.ingot(), 64), new ComparableStack(ModItems.motor, 64), new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(U238.block(), 10), new ComparableStack(ModItems.mech_key, 1))); + + // weapon parts + this.register(new GenericRecipe("ass.clusterpellets").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_cluster, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 1))); + this.register(new GenericRecipe("ass.buckshot").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_buckshot, 1)) + .inputItems(new OreDictStack(PB.nugget(), 6))); + + // bombs + this.register(new GenericRecipe("ass.minenaval").setup(300, 100).outputItems(new ItemStack(ModBlocks.mine_naval, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 24))); + this.register(new GenericRecipe("ass.gadget").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_gadget, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new ComparableStack(ModItems.fins_flat, 2), new ComparableStack(ModItems.pedestal_steel, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.littleboy").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_boy, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_BLUE, 4))); + this.register(new GenericRecipe("ass.fatman").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_man, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_YELLOW, 6))); + this.register(new GenericRecipe("ass.ivymike").setup(600, 100).outputItems(new ItemStack(ModBlocks.nuke_mike, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(AL.shell(), 4), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_LIGHTGRAY, 16))); + this.register(new GenericRecipe("ass.tsarbomba").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.nuke_tsar, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_tri_steel, 1), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_BLACK, 8))); + this.register(new GenericRecipe("ass.ninadidnothingwrong").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_prototype, 1)) + .inputItems(new ComparableStack(ModItems.dysfunctional_reactor, 1), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.ingot_euphemium, 3), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED))); + this.register(new GenericRecipe("ass.fleija").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_fleija, 1)) + .inputItems(new OreDictStack(AL.shell(), 1), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_WHITE, 4))); + this.register(new GenericRecipe("ass.solinium").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_solinium, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.n2mine").setup(200, 100).outputItems(new ItemStack(ModBlocks.nuke_n2, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GREEN, 8))); + this.register(new GenericRecipe("ass.balefirebomb").setup(400, 100).outputItems(new ItemStack(ModBlocks.nuke_fstbmb, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.customnuke").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_custom, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_GRAY, 4))); + this.register(new GenericRecipe("ass.levibomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.float_bomb, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(SA326.nugget(), 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8))); + this.register(new GenericRecipe("ass.endobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_endo, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4))); + this.register(new GenericRecipe("ass.exobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_exo, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) + .inputItems()); + */ + + // bomb parts + this.register(new GenericRecipe("ass.explosivelenses1").setup(400, 100).outputItems(new ItemStack(ModItems.early_explosive_lenses, 1)) + .inputItems(new OreDictStack(AL.plate(), 8), new OreDictStack(GOLD.wireFine(), 16), new ComparableStack(ModBlocks.det_cord, 8), new OreDictStack(CU.plate(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 20), new OreDictStack(ANY_PLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.explosivelenses2").setup(400, 100).outputItems(new ItemStack(ModItems.explosive_lenses, 1)) + .inputItems(new OreDictStack(AL.plate(), 8), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 4), new OreDictStack(CU.plate(), 2), new ComparableStack(ModItems.ball_tatb, 16), new OreDictStack(RUBBER.ingot(), 2))); + this.register(new GenericRecipe("ass.wiring").setup(200, 100).outputItems(new ItemStack(ModItems.gadget_wireing, 1)) + .inputItems(new OreDictStack(IRON.plate(), 1), new OreDictStack(GOLD.wireFine(), 12))); + this.register(new GenericRecipe("ass.core1").setup(1_200, 100).outputItems(new ItemStack(ModItems.gadget_core, 1)) + .inputItems(new OreDictStack(PU239.nugget(), 7), new OreDictStack(U238.nugget(), 3))); + this.register(new GenericRecipe("ass.boyshield").setup(200, 100).outputItems(new ItemStack(ModItems.boy_shielding, 1)) + .inputItems(new OreDictStack(OreDictManager.getReflector(), 12), new OreDictStack(STEEL.plate528(), 4))); + this.register(new GenericRecipe("ass.boytarget").setup(200, 100).outputItems(new ItemStack(ModItems.boy_target, 1)) + .inputItems(new OreDictStack(U235.nugget(), 18))); + this.register(new GenericRecipe("ass.boybullet").setup(200, 100).outputItems(new ItemStack(ModItems.boy_bullet, 1)) + .inputItems(new OreDictStack(U235.nugget(), 9))); + this.register(new GenericRecipe("ass.boypropellant").setup(200, 100).outputItems(new ItemStack(ModItems.boy_propellant, 1)) + .inputItems(new ComparableStack(ModItems.cordite, 8), new OreDictStack(IRON.plate528(), 8), new OreDictStack(AL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 4))); + this.register(new GenericRecipe("ass.boyigniter").setup(200, 100).outputItems(new ItemStack(ModItems.boy_igniter, 1)) + .inputItems(new OreDictStack(AL.shell(), 3), new OreDictStack(DURA.plateCast(), 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(MINGRADE.wireFine(), 16))); + this.register(new GenericRecipe("ass.manigniter").setup(200, 100).outputItems(new ItemStack(ModItems.man_igniter, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 6), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(MINGRADE.wireFine(), 9))); + this.register(new GenericRecipe("ass.mancore").setup(1_200, 100).outputItems(new ItemStack(ModItems.man_core, 1)) + .inputItems(new OreDictStack(PU239.nugget(), 8), new OreDictStack(BE.nugget(), 2))); + this.register(new GenericRecipe("ass.mikecore").setup(1_200, 100).outputItems(new ItemStack(ModItems.mike_core, 1)) + .inputItems(new OreDictStack(U238.nugget(), 24), new OreDictStack(PB.ingot(), 6))); + this.register(new GenericRecipe("ass.mikedeut").setup(600, 100).outputItems(new ItemStack(ModItems.mike_deut, 1)) + .inputItems(new OreDictStack(IRON.plate528(), 12), new OreDictStack(STEEL.plate528(), 16)) + .inputFluids(new FluidStack(Fluids.DEUTERIUM, 10_000))); + this.register(new GenericRecipe("ass.mikecooler").setup(300, 100).outputItems(new ItemStack(ModItems.mike_cooling_unit, 1)) + .inputItems(new OreDictStack(IRON.plate528(), 8), new ComparableStack(ModItems.coil_copper, 5), new ComparableStack(ModItems.coil_tungsten, 5), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.fleijaigniter").setup(200, 100).outputItems(new ItemStack(ModItems.fleija_igniter, 1)) + .inputItems(new OreDictStack(TI.plate528(), 6), new OreDictStack(SA326.wireFine(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.fleijacore").setup(600, 100).outputItems(new ItemStack(ModItems.fleija_core, 1)) + .inputItems(new OreDictStack(U235.nugget(), 8), new OreDictStack(NP237.nugget(), 2), new OreDictStack(BE.nugget(), 4), new ComparableStack(ModItems.coil_copper, 2))); + this.register(new GenericRecipe("ass.fleijacharge").setup(300, 100).outputItems(new ItemStack(ModItems.fleija_propellant, 1)) + .inputItems(new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(SA326.plate(), 8))); + this.register(new GenericRecipe("ass.soliniumigniter").setup(200, 100).outputItems(new ItemStack(ModItems.solinium_igniter, 1)) + .inputItems(new OreDictStack(TI.plate528(), 4), new OreDictStack(ALLOY.wireFine(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new ComparableStack(ModItems.coil_gold, 1))); + this.register(new GenericRecipe("ass.soliniumcore").setup(600, 100).outputItems(new ItemStack(ModItems.solinium_core, 1)) + .inputItems(new OreDictStack(SA327.nugget(), 9), new OreDictStack(EUPH.nugget(), 1))); + this.register(new GenericRecipe("ass.soliniumcharge").setup(300, 100).outputItems(new ItemStack(ModItems.solinium_propellant, 1)) + .inputItems(new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.plate_polymer, 6), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.biomass_compressed, 4))); + + // grenades + this.register(new GenericRecipe("ass.incgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_fire, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new OreDictStack(P_RED.dust(), 1), new OreDictStack(CU.plate(), 2))); + this.register(new GenericRecipe("ass.shrapgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_shrapnel, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_buckshot, 1), new OreDictStack(STEEL.plate(), 2))); + this.register(new GenericRecipe("ass.clustergrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_cluster, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_cluster, 1), new OreDictStack(STEEL.plate(), 2))); + this.register(new GenericRecipe("ass.signalflare").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_flare, 1)) + .inputItems(new ComparableStack(ModItems.grenade_generic, 1), new ComparableStack(Items.glowstone_dust, 1), new OreDictStack(AL.plate(), 2))); + this.register(new GenericRecipe("ass.electricgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_electric, 1)) + .inputItems(new ComparableStack(ModItems.grenade_generic, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CAPACITOR.ordinal()), new OreDictStack(GOLD.plate(), 2))); + this.register(new GenericRecipe("ass.pulsegrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_pulse, 4)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(IRON.plate(), 3), new OreDictStack(MINGRADE.wireFine(), 6), new ComparableStack(Items.diamond, 1))); + this.register(new GenericRecipe("ass.plasmagrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_plasma, 2)) + .inputItems(new OreDictStack(STEEL.plate(), 3), new OreDictStack(ALLOY.plate(), 1), new ComparableStack(ModItems.coil_advanced_torus, 1), new ComparableStack(ModItems.cell_deuterium, 1), new ComparableStack(ModItems.cell_tritium, 1))); + this.register(new GenericRecipe("ass.taugrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_tau, 2)) + .inputItems(new OreDictStack(PB.plate(), 3), new OreDictStack(ALLOY.plate(), 1), new ComparableStack(ModItems.coil_advanced_torus, 1), new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.TAU_URANIUM))); + this.register(new GenericRecipe("ass.schrabgrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_schrabidium, 1)) + .inputItems(new ComparableStack(ModItems.grenade_flare, 1), new OreDictStack(SA326.dust(), 1), new OreDictStack(OreDictManager.getReflector(), 2))); + this.register(new GenericRecipe("ass.nukagrenade").setup(600, 100).outputItems(new ItemStack(ModItems.grenade_nuclear, 1)) + .inputItems(new OreDictStack(IRON.plate(), 1), new OreDictStack(STEEL.plate(), 1), new OreDictStack(PU239.nugget(), 2), new OreDictStack(MINGRADE.wireFine(), 2))); + this.register(new GenericRecipe("ass.zomggrenade").setup(600, 100).outputItems(new ItemStack(ModItems.grenade_zomg, 1)) + .inputItems(new ComparableStack(ModItems.plate_paa, 3), new OreDictStack(OreDictManager.getReflector(), 1), new ComparableStack(ModItems.coil_magnetized_tungsten, 3), new ComparableStack(ModItems.powder_power, 3))); + this.register(new GenericRecipe("ass.bholegrenade").setup(1_200, 100).outputItems(new ItemStack(ModItems.grenade_black_hole, 1)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(OreDictManager.getReflector(), 3), new ComparableStack(ModItems.coil_magnetized_tungsten, 2), new ComparableStack(ModItems.black_hole, 1))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ + + // turrets + this.register(new GenericRecipe("ass.turretchekhov").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_chekhov, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretfriendly").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_friendly, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 1), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretjeremy").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_jeremy, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turrettauon").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_tauon, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretrichard").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_richard, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turrethoward").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_howard, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.maxwell").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_maxwell, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel))); + this.register(new GenericRecipe("ass.arty").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_arty, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.himars").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_himars, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.himarssmall").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallhe").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_HE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 18), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallwp").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_WP)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(P_WHITE.ingot(), 18), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmalltb").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_TB)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new ComparableStack(ModItems.ball_tatb, 32), new OreDictStack(Fluids.KEROSENE_REFORM.getDict(1_000), 12), new OreDictStack(Fluids.PEROXIDE.getDict(1_000), 12), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallnuke").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_MINI_NUKE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new ComparableStack(ModItems.ball_tatb, 6), new OreDictStack(PU239.nugget(), 12), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmalllava").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_LAVA)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 32), new ComparableStack(ModItems.ball_tatb, 4), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarslarge").setup(200, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.LARGE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 36), new ComparableStack(ModItems.ball_tatb, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.himarslargetb").setup(200, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.LARGE_TB)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 36), new ComparableStack(ModItems.ball_tatb, 24), new OreDictStack(Fluids.KEROSENE_REFORM.getDict(1_000), 16), new OreDictStack(Fluids.PEROXIDE.getDict(1_000), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + + // missile parts + this.register(new GenericRecipe("ass.missileassembly").setup(200, 100).outputItems(new ItemStack(ModItems.missile_assembly, 1)) + .inputItems(new OreDictStack(AL.shell(), 2), new OreDictStack(TI.shell(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.rocket_fuel, 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.warheadhe1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_generic_small, 1)) + .inputItems(new OreDictStack(TI.plate(), 4), new ComparableStack(ModItems.ball_dynamite, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CHIP))); + this.register(new GenericRecipe("ass.warheadhe2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_generic_medium, 1)) + .inputItems(new OreDictStack(TI.plate(), 8), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.warheadhe3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_generic_large, 1)) + .inputItems(new OreDictStack(TI.plate(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.warheadinc1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new OreDictStack(P_RED.dust(), 2))); + this.register(new GenericRecipe("ass.warheadinc2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new OreDictStack(P_RED.dust(), 4))); + this.register(new GenericRecipe("ass.warheadinc3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new OreDictStack(P_RED.dust(), 8))); + this.register(new GenericRecipe("ass.warheadcl1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_cluster_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new ComparableStack(ModItems.pellet_cluster, 2))); + this.register(new GenericRecipe("ass.warheadcl2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_cluster_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModItems.pellet_cluster, 4))); + this.register(new GenericRecipe("ass.warheadcl3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_cluster_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModItems.pellet_cluster, 8))); + this.register(new GenericRecipe("ass.warheadbb1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_buster_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 2))); + this.register(new GenericRecipe("ass.warheadbb2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_buster_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4))); + this.register(new GenericRecipe("ass.warheadbb3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_buster_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8))); + this.register(new GenericRecipe("ass.warheadnuke").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_nuclear, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(PB.plateCast(), 6), new OreDictStack(U235.billet(), 6), new ComparableStack(ModItems.cordite, 12), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER))); + this.register(new GenericRecipe("ass.warheadthermonuke").setup(600, 100).outputItems(new ItemStack(ModItems.warhead_mirv, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(PB.plateCast(), 6), new OreDictStack(PU239.billet(), 8), new ComparableStack(ModItems.ball_tatb, 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER_ADVANCED)) + .inputFluids(new FluidStack(Fluids.DEUTERIUM, 4_000))); + this.register(new GenericRecipe("ass.warheadvolcano").setup(600, 100).outputItems(new ItemStack(ModItems.warhead_volcano, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(STEEL.plateCast(), 6), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()))); + this.register(new GenericRecipe("ass.thrusternerva").setup(600, 100).outputItems(new ItemStack(ModItems.thruster_nuclear, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new OreDictStack(STEEL.pipe(), 4))); + this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) + .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); + this.register(new GenericRecipe("ass.shuttlemissile").setup(200, 100).outputItems(new ItemStack(ModItems.missile_shuttle, 1)) + .inputItems(new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), new OreDictStack(KEY_ORANGE, 5), new ComparableStack(ModItems.canister_full, 24, Fluids.GASOLINE_LEADED.getID()), new OreDictStack(FIBER.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 8), new OreDictStack(KEY_ANYPANE, 6), new OreDictStack(STEEL.plate(), 4))); + this.register(new GenericRecipe("ass.launchpad").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad_large, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(ANY_CONCRETE.any(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModBlocks.steel_scaffold, 24), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.launchpadsilo").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_CONCRETE.any(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED))); + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) + .inputItems()); + */ + + // weapons + this.register(new GenericRecipe("ass.schrabhammer").setup(6_000, 100).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1)) + .inputItems( + new OreDictStack(SA326.block(), 35), + new ComparableStack(ModItems.billet_yharonite, 64), + new ComparableStack(ModItems.billet_yharonite, 64), + new ComparableStack(ModItems.coin_ufo, 1), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64))); + + // ammo + this.register(new GenericRecipe("ass.50bmgsm").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM.ordinal())) + .inputItems(new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 6), new OreDictStack(STAR.ingot(), 3)) + .setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "silverstorm")); + this.register(new GenericRecipe("ass.50bmgbypass").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK.ordinal())) + .inputItems(new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond)) + .setPools(GenericRecipes.POOL_PREFIX_SECRET + "psalm")); + + // tools + this.register(new GenericRecipe("ass.multitool").setup(100, 100).outputItems(new ItemStack(ModItems.multitool_hit, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.plate(), 4), new OreDictStack(GOLD.wireFine(), 12), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD))); + + // space + this.register(new GenericRecipe("ass.soyuz").setup(6_000, 100).outputItems(new ItemStack(ModItems.missile_soyuz, 1)) + .inputItems(new OreDictStack(TI.shell(), 32), + new OreDictStack(RUBBER.ingot(), 64), + new ComparableStack(ModItems.rocket_fuel, 64), + new ComparableStack(ModItems.thruster_small, 12), + new ComparableStack(ModItems.thruster_medium, 12), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER), + new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz")); + this.register(new GenericRecipe("ass.lander").setup(2_400, 100).outputItems(new ItemStack(ModItems.missile_soyuz_lander, 1)) + .inputItems(new OreDictStack(AL.shell(), 4), + new OreDictStack(RUBBER.ingot(), 16), + new ComparableStack(ModItems.rocket_fuel, 16), + new ComparableStack(ModItems.thruster_small, 3), + new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED), + new ComparableStack(ModItems.part_generic, 12, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz")); + this.register(new GenericRecipe("ass.satellitebase").setup(600, 100).outputItems(new ItemStack(ModItems.sat_base, 1)) + .inputItems(new OreDictStack(RUBBER.ingot(), 12), + new OreDictStack(TI.shell(), 3), + new ComparableStack(ModItems.thruster_large, 1), + new ComparableStack(ModItems.part_generic, 8, EnumPartType.LDE), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.photo_panel, 24), + new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satellitemapper").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_mapper, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), + new ComparableStack(ModBlocks.glass_quartz, 8))); + this.register(new GenericRecipe("ass.satellitescanner").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_scanner, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new OreDictStack(TI.plateCast(), 8), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.magnetron, 8), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.satelliteradar").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_radar, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new OreDictStack(TI.plateCast(), 12), + new ComparableStack(ModItems.magnetron, 12), + new ComparableStack(ModItems.coil_gold, 16), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.satellitelaser").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_laser, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), + new OreDictStack(CU.plateCast(), 24), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD), + new ComparableStack(ModItems.crystal_diamond, 8), + new ComparableStack(ModBlocks.glass_quartz, 8))); + this.register(new GenericRecipe("ass.satelliteresonator").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_resonator, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), + new OreDictStack(STAR.ingot(), 12), + new OreDictStack(ANY_PLASTIC.ingot(), 48), + new ComparableStack(ModItems.crystal_xen, 1), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.satelliterelay").setup(600, 100).outputItems(new ItemStack(ModItems.sat_foeq, 1)) + .inputItems(new OreDictStack(TI.shell(), 3), + new ComparableStack(ModItems.plate_desh, 8), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.getID()), + new ComparableStack(ModItems.photo_panel, 16), + new ComparableStack(ModItems.thruster_nuclear, 1), + new ComparableStack(ModItems.ingot_uranium_fuel, 6), + new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BASIC), + new ComparableStack(ModItems.magnetron, 3), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satelliteasteroidminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_miner, 1)) + .inputItems(new OreDictStack(BIGMT.plate(), 24), + new ComparableStack(ModItems.motor_desh, 2), + new ComparableStack(ModItems.drill_titanium, 2), + new ComparableStack(ModItems.circuit, 12, EnumCircuitType.ADVANCED), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.thruster_small, 1), + new ComparableStack(ModItems.photo_panel, 12), + new ComparableStack(ModItems.centrifuge_element, 4), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satellitelunarminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_lunar_miner, 1)) + .inputItems(new ComparableStack(ModItems.ingot_meteorite, 4), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.motor, 2), + new ComparableStack(ModItems.drill_titanium, 2), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.thruster_small, 1), + new ComparableStack(ModItems.photo_panel, 12), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1)) + .inputItems(new OreDictStack(SBD.plateCast(), 64), + new OreDictStack(SBD.plateCast(), 64), + new OreDictStack(BSCCO.wireDense(), 64), + new OreDictStack(BSCCO.wireDense(), 64), + new ComparableStack(ModBlocks.det_nuke, 64), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), + new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald")); + + if(GeneralConfig.enableMekanismChanges && Loader.isModLoaded("Mekanism")) { + Block mb = (Block) Block.blockRegistry.getObject("Mekanism:MachineBlock"); + if(mb != null) { + + this.register(new GenericRecipe("ass.digimemer").setup(1_200, 100).outputItems(new ItemStack(mb, 1, 4)) + .inputItems(new OreDictStack(BIGMT.plateCast(), 16), + new OreDictStack(CU.plateWelded(), 12), + new OreDictStack("alloyUltimate", 32), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID), + new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CAPACITOR_BOARD), + new ComparableStack(ModItems.wire_dense, 32, Mats.MAT_GOLD.id), + new ComparableStack(ModItems.motor_bismuth, 3))); + } + } + } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index f2c8dfd42..eff9d27a8 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -31,11 +31,22 @@ public class GenericRecipe { protected ItemStack icon; public boolean writeIcon = false; public boolean customLocalization = false; + protected String[] blueprintPools = null; public GenericRecipe(String name) { this.name = name; } + public boolean isPooled() { + return blueprintPools != null; + } + + public boolean isPartOfPool(String lookingFor) { + if(!isPooled()) return false; + for(String pool : blueprintPools) if (pool.equals(lookingFor)) return true; + return false; + } + public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } @@ -45,6 +56,7 @@ public class GenericRecipe { public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } public GenericRecipe setIcon(Block block) { return this.setIcon(new ItemStack(block)); } public GenericRecipe setNamed() { this.customLocalization = true; return this; } + public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 6cb020bd6..1cb5cadb2 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -32,8 +32,20 @@ public abstract class GenericRecipes extends Serializab public static final Random RNG = new Random(); + /** Alternate recipes, i.e. obtainable otherwise */ + public static final String POOL_PREFIX_ALT = "alt."; + /** Discoverable recipes, i.e. not obtainable otherwise */ + public static final String POOL_PREFIX_DISCOVER = "discover."; + /** Secret recipes, self-explantory. Why even have this comment? */ + public static final String POOL_PREFIX_SECRET = "secret."; + public List recipeOrderedList = new ArrayList(); public HashMap recipeNameMap = new HashMap(); + + /** Blueprint pool name to list of recipe names that are part of this pool */ + public static HashMap> blueprintPools = new HashMap(); + /** Name to recipe map for all recipes that are part of pools for lookup */ + public static HashMap pooledBlueprints = new HashMap(); public abstract int inputItemLimit(); public abstract int inputFluidLimit(); @@ -41,6 +53,21 @@ public abstract class GenericRecipes extends Serializab public abstract int outputFluidLimit(); public boolean hasDuration() { return true; } public boolean hasPower() { return true; } + + public static void addToPool(String pool, GenericRecipe recipe) { + List list = blueprintPools.get(pool); + if(list == null) { + list = new ArrayList(); + blueprintPools.put(pool, list); + } + list.add(recipe.name); + pooledBlueprints.put(recipe.name, recipe); + } + + public static void clearPools() { + blueprintPools.clear(); + pooledBlueprints.clear(); + } @Override public Object getRecipeObject() { @@ -55,7 +82,7 @@ public abstract class GenericRecipes extends Serializab public void register(T recipe) { this.recipeOrderedList.add(recipe); - if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been reciped with a duplicate ID!"); + if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been registered with a duplicate ID!"); this.recipeNameMap.put(recipe.name, recipe); } @@ -75,6 +102,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); + if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); readExtraData(element, recipe); @@ -123,6 +151,7 @@ public abstract class GenericRecipes extends Serializab } if(recipe.customLocalization) writer.name("named").value(true); + if(recipe.blueprintPools != null && recipe.blueprintPools.length > 0) writer.name("blueprintpool").value(String.join(":", recipe.blueprintPools)); writeExtraData(recipe, writer); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index f633298f1..8fa127907 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -106,6 +106,8 @@ public abstract class SerializableRecipe { MainRegistry.logger.info("Starting recipe init!"); + GenericRecipes.clearPools(); + for(SerializableRecipe recipe : recipeHandlers) { recipe.deleteRecipes(); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 7387de265..3ded60786 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -322,7 +322,7 @@ public class ModItems { public static Item plate_combine_steel; public static Item plate_mixed; public static Item plate_paa; - public static Item pipes_steel; + @Deprecated public static Item pipes_steel; public static Item drill_titanium; public static Item plate_dalekanium; public static Item plate_euphemium; @@ -553,22 +553,19 @@ public class ModItems { public static Item coil_copper; public static Item coil_copper_torus; public static Item coil_tungsten; - public static Item tank_steel; + @Deprecated public static Item tank_steel; public static Item motor; public static Item motor_desh; public static Item motor_bismuth; public static Item centrifuge_element; public static Item reactor_core; public static Item rtg_unit; - public static Item levitation_unit; public static Item coil_advanced_alloy; public static Item coil_advanced_torus; public static Item coil_magnetized_tungsten; public static Item coil_gold; public static Item coil_gold_torus; - public static Item component_limiter; - public static Item component_emitter; public static Item chlorine_pinwheel; public static Item deuterium_filter; @@ -643,13 +640,7 @@ public class ModItems { public static Item seg_10; public static Item seg_15; public static Item seg_20; - - public static Item chopper_head; - public static Item chopper_gun; - public static Item chopper_torso; - public static Item chopper_tail; - public static Item chopper_wing; - public static Item chopper_blades; + public static Item combine_scrap; public static Item shimmer_head; @@ -747,15 +738,12 @@ public class ModItems { public static Item pellet_rtg_gold; public static Item pellet_rtg_lead; - public static Item tritium_deuterium_cake; + @Deprecated public static Item tritium_deuterium_cake; public static Item piston_selenium; public static Item piston_set; public static Item drillbit; - //public static Item crystal_energy; - //public static Item pellet_coolant; - public static Item rune_blank; public static Item rune_isa; public static Item rune_dagaz; @@ -926,8 +914,6 @@ public class ModItems { public static Item bottle2_empty; public static Item bottle2_korl; public static Item bottle2_fritz; - public static Item bottle2_korl_special; - public static Item bottle2_fritz_special; public static Item flask_empty; public static Item flask_infusion; public static Item chocolate_milk; @@ -1193,6 +1179,7 @@ public class ModItems { public static Item radar_linker; public static Item settings_tool; + public static Item blueprints; public static Item template_folder; public static Item journal_pip; public static Item journal_bj; @@ -2192,7 +2179,6 @@ public class ModItems { public static Item polaroid; public static Item glitch; - public static Item letter; public static Item book_secret; public static Item book_of_; public static Item page_of_; @@ -2724,12 +2710,9 @@ public class ModItems { centrifuge_element = new Item().setUnlocalizedName("centrifuge_element").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_element"); reactor_core = new Item().setUnlocalizedName("reactor_core").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":reactor_core"); rtg_unit = new Item().setUnlocalizedName("rtg_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rtg_unit"); - levitation_unit = new Item().setUnlocalizedName("levitation_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":levitation_unit"); coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); - component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter"); - component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter"); chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel"); FluidTank.noDualUnload.add(chlorine_pinwheel); ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal"); @@ -2793,12 +2776,6 @@ public class ModItems { seg_15 = new Item().setUnlocalizedName("seg_15").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_15"); seg_20 = new Item().setUnlocalizedName("seg_20").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_20"); - chopper_head = new Item().setUnlocalizedName("chopper_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_head"); - chopper_gun = new Item().setUnlocalizedName("chopper_gun").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_gun"); - chopper_torso = new Item().setUnlocalizedName("chopper_torso").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_torso"); - chopper_tail = new Item().setUnlocalizedName("chopper_tail").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_tail"); - chopper_wing = new Item().setUnlocalizedName("chopper_wing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_wing"); - chopper_blades = new Item().setUnlocalizedName("chopper_blades").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_blades"); combine_scrap = new Item().setUnlocalizedName("combine_scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":combine_scrap"); shimmer_head = new Item().setUnlocalizedName("shimmer_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_head_original"); @@ -2946,7 +2923,7 @@ public class ModItems { ingot_raw = new ItemAutogen(MaterialShapes.INGOT).setUnlocalizedName("ingot_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_raw"); plate_cast = new ItemAutogen(MaterialShapes.CASTPLATE).aot(Mats.MAT_BISMUTH, "plate_cast_bismuth").setUnlocalizedName("plate_cast").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_cast"); plate_welded = new ItemAutogen(MaterialShapes.WELDEDPLATE).setUnlocalizedName("plate_welded").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_welded"); - heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":heavy_component"); + heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(null).setTextureName(RefStrings.MODID + ":heavy_component"); wire_fine = new ItemAutogen(MaterialShapes.WIRE) .aot(Mats.MAT_ALUMINIUM, "wire_aluminium").aot(Mats.MAT_COPPER, "wire_copper") .aot(Mats.MAT_MINGRADE, "wire_red_copper").aot(Mats.MAT_GOLD, "wire_gold") @@ -3114,8 +3091,6 @@ public class ModItems { bottle2_empty = new Item().setUnlocalizedName("bottle2_empty").setTextureName(RefStrings.MODID + ":bottle2_empty"); bottle2_korl = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); bottle2_fritz = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); - bottle2_korl_special = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); - bottle2_fritz_special = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); flask_infusion = new ItemFlask().setUnlocalizedName("flask_infusion").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":flask"); chocolate_milk = new ItemEnergy().setUnlocalizedName("chocolate_milk").setTextureName(RefStrings.MODID + ":chocolate_milk"); coffee = new ItemEnergy().setUnlocalizedName("coffee").setTextureName(RefStrings.MODID + ":coffee"); @@ -4121,6 +4096,7 @@ public class ModItems { mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); + blueprints = new ItemBlueprints().setUnlocalizedName("blueprints").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprints"); template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); @@ -4935,7 +4911,6 @@ public class ModItems { polaroid = new ItemPolaroid().setUnlocalizedName("polaroid").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":polaroid_" + MainRegistry.polaroidID); glitch = new ItemGlitch().setUnlocalizedName("glitch").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glitch_" + MainRegistry.polaroidID); - letter = new ItemStarterKit().setUnlocalizedName("letter").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":letter"); book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); @@ -5511,7 +5486,6 @@ public class ModItems { GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); - GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); GameRegistry.registerItem(pipes_steel, pipes_steel.getUnlocalizedName()); GameRegistry.registerItem(drill_titanium, drill_titanium.getUnlocalizedName()); GameRegistry.registerItem(photo_panel, photo_panel.getUnlocalizedName()); @@ -5541,10 +5515,6 @@ public class ModItems { //GameRegistry.registerItem(telepad, telepad.getUnlocalizedName()); GameRegistry.registerItem(entanglement_kit, entanglement_kit.getUnlocalizedName()); - //AMS Parts - GameRegistry.registerItem(component_limiter, component_limiter.getUnlocalizedName()); - GameRegistry.registerItem(component_emitter, component_emitter.getUnlocalizedName()); - //Bomb Parts GameRegistry.registerItem(fins_flat, fins_flat.getUnlocalizedName()); GameRegistry.registerItem(fins_small_steel, fins_small_steel.getUnlocalizedName()); @@ -5596,12 +5566,6 @@ public class ModItems { GameRegistry.registerItem(seg_20, seg_20.getUnlocalizedName()); //Chopper parts - GameRegistry.registerItem(chopper_head, chopper_head.getUnlocalizedName()); - GameRegistry.registerItem(chopper_gun, chopper_gun.getUnlocalizedName()); - GameRegistry.registerItem(chopper_torso, chopper_torso.getUnlocalizedName()); - GameRegistry.registerItem(chopper_tail, chopper_tail.getUnlocalizedName()); - GameRegistry.registerItem(chopper_wing, chopper_wing.getUnlocalizedName()); - GameRegistry.registerItem(chopper_blades, chopper_blades.getUnlocalizedName()); GameRegistry.registerItem(combine_scrap, combine_scrap.getUnlocalizedName()); //Hammer Parts @@ -5774,6 +5738,7 @@ public class ModItems { GameRegistry.registerItem(fusion_core_infinite, fusion_core_infinite.getUnlocalizedName()); //Folders + GameRegistry.registerItem(blueprints, blueprints.getUnlocalizedName()); GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); @@ -6736,8 +6701,6 @@ public class ModItems { GameRegistry.registerItem(bottle2_empty, bottle2_empty.getUnlocalizedName()); GameRegistry.registerItem(bottle2_korl, bottle2_korl.getUnlocalizedName()); GameRegistry.registerItem(bottle2_fritz, bottle2_fritz.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_korl_special, bottle2_korl_special.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_fritz_special, bottle2_fritz_special.getUnlocalizedName()); GameRegistry.registerItem(bottle_opener, bottle_opener.getUnlocalizedName()); //Flasks @@ -7119,7 +7082,6 @@ public class ModItems { GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName()); GameRegistry.registerItem(legacy_toolbox, legacy_toolbox.getUnlocalizedName()); GameRegistry.registerItem(toolbox, toolbox.getUnlocalizedName()); - GameRegistry.registerItem(letter, letter.getUnlocalizedName()); //Misile Loot Boxes GameRegistry.registerItem(loot_10, loot_10.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/food/ItemEnergy.java b/src/main/java/com/hbm/items/food/ItemEnergy.java index b01195ad9..caa47fc5c 100644 --- a/src/main/java/com/hbm/items/food/ItemEnergy.java +++ b/src/main/java/com/hbm/items/food/ItemEnergy.java @@ -23,6 +23,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; +@Spaghetti("wtf is this shit") public class ItemEnergy extends Item { private Item container = null; @@ -142,18 +143,6 @@ public class ItemEnergy extends Item { player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2)); player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 2)); } - if(this == ModItems.bottle2_korl_special) { - player.heal(16); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); - player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 120 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 120 * 20, 2)); - } - if(this == ModItems.bottle2_fritz_special) { - player.heal(16); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); - player.addPotionEffect(new PotionEffect(Potion.resistance.id, 120 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.jump.id, 120 * 20, 2)); - } if(this == ModItems.bottle_sparkle) { player.heal(10F); player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); @@ -202,28 +191,24 @@ public class ItemEnergy extends Item { } @Override - public int getMaxItemUseDuration(ItemStack p_77626_1_) { + public int getMaxItemUseDuration(ItemStack stack) { return 32; } @Override - public EnumAction getItemUseAction(ItemStack p_77661_1_) { + public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.drink; } @Spaghetti("cover yourself in oil") @Override - public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(VersatileConfig.hasPotionSickness(player)) return stack; + if(this.requiresOpener && !player.inventory.hasItem(ModItems.bottle_opener)) return stack; - if(VersatileConfig.hasPotionSickness(p_77659_3_)) - return p_77659_1_; - - if(this.requiresOpener && !p_77659_3_.inventory.hasItem(ModItems.bottle_opener)) - return p_77659_1_; + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_)); - - return p_77659_1_; + return stack; } @Override @@ -260,51 +245,32 @@ public class ItemEnergy extends Item { } if(this == ModItems.bottle_nuka) { list.add("Contains about 210 kcal and 1500 mSv."); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_cherry) { list.add("Now with severe radiation poisoning in every seventh bottle!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_quantum) { list.add("Comes with a colorful mix of over 70 isotopes!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle2_korl) { list.add("Contains actual orange juice!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle2_fritz) { list.add("moremore caffeine"); - list.add("[Requires bottle opener]"); - } - if(this == ModItems.bottle2_korl_special) { - if(MainRegistry.polaroidID == 11) - list.add("shgehgev u rguer"); - else - list.add("Contains actual orange juice!"); - list.add("[Requires bottle opener]"); - } - if(this == ModItems.bottle2_fritz_special) { - if(MainRegistry.polaroidID == 11) - list.add("ygrogr fgrof bf"); - else - list.add("moremore caffeine"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_sparkle) { if(MainRegistry.polaroidID == 11) list.add("Contains trace amounts of taint."); else list.add("The most delicious beverage in the wasteland!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_rad) { if(MainRegistry.polaroidID == 11) list.add("Now with 400% more radiation!"); else list.add("Tastes like radish and radiation."); - list.add("[Requires bottle opener]"); } + + if(this.requiresOpener) list.add("[Requires bottle opener]"); } } diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java new file mode 100644 index 000000000..84976e8c5 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -0,0 +1,132 @@ +package com.hbm.items.machine; + +import java.util.List; +import java.util.Map.Entry; + +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemBlueprints extends Item { + + @SideOnly(Side.CLIENT) protected IIcon iconDiscover; + @SideOnly(Side.CLIENT) protected IIcon iconSecret; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + this.iconDiscover = reg.registerIcon(this.getIconString() + "_discover"); + this.iconSecret = reg.registerIcon(this.getIconString() + "_secret"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconIndex(ItemStack stack) { + return this.getIcon(stack, 0); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + + if(stack.hasTagCompound()) { + String poolName = stack.stackTagCompound.getString("pool"); + if(poolName == null) return this.itemIcon; + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) return this.iconDiscover; + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return this.iconSecret; + } + + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(Entry> pool : GenericRecipes.blueprintPools.entrySet()) { + list.add(make(pool.getKey())); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(world.isRemote) return stack; + if(!player.inventory.hasItem(Items.paper)) return stack; + + player.inventory.consumeInventoryItem(Items.paper); + player.swingItem(); + + ItemStack copy = stack.copy(); + copy.stackSize = 1; + + if(!player.capabilities.isCreativeMode) { + if(stack.stackSize < stack.getMaxStackSize()) { + stack.stackSize++; + return stack; + } + + if(!player.inventory.addItemStackToInventory(copy)) { + copy = stack.copy(); + copy.stackSize = 1; + player.dropPlayerItemWithRandomChoice(copy, false); + } + + player.inventoryContainer.detectAndSendChanges(); + } else { + player.dropPlayerItemWithRandomChoice(copy, false); + } + + return stack; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.RED + "Right-click to copy (requires paper)"); + + if(!stack.hasTagCompound()) { + return; + } + + String poolName = stack.stackTagCompound.getString("pool"); + List pool = GenericRecipes.blueprintPools.get(poolName); + + if(pool == null || pool.isEmpty()) { + return; + } + + for(String name : pool) { + GenericRecipe recipe = GenericRecipes.pooledBlueprints.get(name); + if(recipe != null) { + list.add(recipe.getLocalizedName()); + } + } + } + + public static String grabPool(ItemStack stack) { + if(stack == null) return null; + if(stack.getItem() != ModItems.blueprints) return null; + if(!stack.hasTagCompound()) return null; + if(!stack.stackTagCompound.hasKey("pool")) return null; + return stack.stackTagCompound.getString("pool"); + } + + public ItemStack make(String pool) { + ItemStack stack = new ItemStack(ModItems.blueprints); + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setString("pool", pool); + return stack; + } +} diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 4e70ed205..ba8bf97b4 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -10,7 +10,6 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; -import com.hbm.util.ShadyUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -22,10 +21,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; -@Deprecated //not deprecated per se but please stop using it wherever possible +@Deprecated @Spaghetti("i do not care how much 'optimization' you want to throw at this dumpster fire but there's no saving grace here") public class ItemStarterKit extends Item { @@ -75,8 +73,8 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_difurnace_off, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_gascent, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_reactor_breeding, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembler, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemplant, 1)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembly_machine, 1)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemical_plant, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.reactor_research, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_turbine, 2)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.radaway, 8)); @@ -95,7 +93,6 @@ public class ItemStarterKit extends Item { if(this == ModItems.nuke_advanced_kit) { - player.inventory.addItemStackToInventory(new ItemStack(ModItems.powder_yellowcake, 64)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.powder_plutonium, 64)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.ingot_steel, 64)); @@ -113,8 +110,8 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_turbine, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_radgen, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_rtg_grey, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembler, 3)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemplant, 2)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembly_machine, 3)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemical_plant, 2)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_fluidtank, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pellet_rtg, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pellet_rtg, 1)); @@ -128,7 +125,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.radaway_strong, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.radx, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pill_iodine, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.tritium_deuterium_cake, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.geiger_counter, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.survey_scanner, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.gas_mask_m65, 1)); @@ -440,29 +436,17 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(Item.getItemFromBlock(ModBlocks.statue_elb_f), 1)); } - if(this == ModItems.hazmat_kit) - { + if(this == ModItems.hazmat_kit) { giveHaz(world, player, 0); } - - if(this == ModItems.hazmat_red_kit) - { + + if(this == ModItems.hazmat_red_kit) { giveHaz(world, player, 1); } - - if(this == ModItems.hazmat_grey_kit) - { + + if(this == ModItems.hazmat_grey_kit) { giveHaz(world, player, 2); } - - if(this == ModItems.letter && world.isRemote) - { - if(player.getUniqueID().toString().equals(ShadyUtil.a20)) { - player.addChatMessage(new ChatComponentText("Error: null reference @ com.hbm.items.ItemStarterKit.class, please report this to the modder!")); - } else { - player.addChatMessage(new ChatComponentText("You rip the letter in half; nothing happens.")); - } - } world.playSoundAtEntity(player, "hbm:item.unpack", 1.0F, 1.0F); stack.stackSize--; @@ -470,42 +454,42 @@ public class ItemStarterKit extends Item { } - @SideOnly(Side.CLIENT) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { - if(this == ModItems.nuke_starter_kit || - this == ModItems.nuke_advanced_kit || - this == ModItems.nuke_commercially_kit || - this == ModItems.nuke_electric_kit || - this == ModItems.gadget_kit || - this == ModItems.boy_kit || - this == ModItems.man_kit || - this == ModItems.mike_kit || - this == ModItems.tsar_kit || - this == ModItems.prototype_kit || - this == ModItems.fleija_kit || - this == ModItems.solinium_kit || - this == ModItems.t45_kit || - this == ModItems.grenade_kit || - this == ModItems.missile_kit || - this == ModItems.multi_kit) { - list.add("Please empty inventory before opening!"); - } - if(this == ModItems.nuke_starter_kit || - this == ModItems.nuke_advanced_kit || - this == ModItems.nuke_commercially_kit || - this == ModItems.gadget_kit || - this == ModItems.boy_kit || - this == ModItems.man_kit || - this == ModItems.mike_kit || - this == ModItems.tsar_kit || - this == ModItems.prototype_kit || - this == ModItems.fleija_kit || - this == ModItems.solinium_kit || - this == ModItems.hazmat_kit) { - list.add("Armor will be displaced by hazmat suit."); - } - } + if(this == ModItems.nuke_starter_kit || + this == ModItems.nuke_advanced_kit || + this == ModItems.nuke_commercially_kit || + this == ModItems.nuke_electric_kit || + this == ModItems.gadget_kit || + this == ModItems.boy_kit || + this == ModItems.man_kit || + this == ModItems.mike_kit || + this == ModItems.tsar_kit || + this == ModItems.prototype_kit || + this == ModItems.fleija_kit || + this == ModItems.solinium_kit || + this == ModItems.t45_kit || + this == ModItems.grenade_kit || + this == ModItems.missile_kit || + this == ModItems.multi_kit) { + list.add("Please empty inventory before opening!"); + } + if(this == ModItems.nuke_starter_kit || + this == ModItems.nuke_advanced_kit || + this == ModItems.nuke_commercially_kit || + this == ModItems.gadget_kit || + this == ModItems.boy_kit || + this == ModItems.man_kit || + this == ModItems.mike_kit || + this == ModItems.tsar_kit || + this == ModItems.prototype_kit || + this == ModItems.fleija_kit || + this == ModItems.solinium_kit || + this == ModItems.hazmat_kit) { + list.add("Armor will be displaced by hazmat suit."); + } + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 3539a712b..66cb14695 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -184,8 +184,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I } float maxDura = config.getDurability(stack); - int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); - list.add("Condition: " + dura + "%"); + if(maxDura > 0) { + int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); + list.add("Condition: " + dura + "%"); + } for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) { list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index 9ed290110..85e0d1b47 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -157,7 +157,6 @@ public class XFactory762mm { @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); - boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= ammo; switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); @@ -170,7 +169,7 @@ public class XFactory762mm { case RELOAD: return new BusAnimation() .addBus("MAG", new BusAnimationSequence().addPos(0, -4, 0, 250, IType.SIN_UP).addPos(0, -4, 0, 750).addPos(0, 0, 0, 500, IType.SIN_DOWN)) .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1000)) - .addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000)); + .addBus("BULLET", new BusAnimationSequence().addPos(ammo == 0 ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000)); case RELOAD_END: return new BusAnimation() .addBus("LIFT", new BusAnimationSequence().addPos(-25, 0, 0, 0).addPos(-25, 0, 0, 750).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -1, 100, IType.SIN_DOWN).addPos(0, 0, -1, 50).addPos(0, 0, 0, 100, IType.SIN_UP)) @@ -182,7 +181,7 @@ public class XFactory762mm { case INSPECT: return new BusAnimation() .addBus("LIFT", new BusAnimationSequence().addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1500).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, -0.75, 150, IType.SIN_DOWN).addPos(0, 0, -0.75, 1000).addPos(0, 0, 0, 100, IType.SIN_UP)) - .addBus(empty ? "NULL" : "REL", new BusAnimationSequence().addPos(0, 0.125, 1.25, 0).addPos(0, 0.125, 1.25, 500).addPos(0, 0.125, 0.5, 150, IType.SIN_DOWN).addPos(0, 0.125, 0.5, 1000).addPos(0, 0.125, 1.25, 100, IType.SIN_UP)); + .addBus(ammo == 0 ? "NULL" : "REL", new BusAnimationSequence().addPos(0, 0.125, 1.25, 0).addPos(0, 0.125, 1.25, 500).addPos(0, 0.125, 0.5, 150, IType.SIN_DOWN).addPos(0, 0.125, 0.5, 1000).addPos(0, 0.125, 1.25, 100, IType.SIN_UP)); } return null; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 91cb0f688..6800ea13f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -242,7 +242,7 @@ public class XFactoryTool { .setOnUpdate(LAMBDA_FOAM_UPDATE) .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) .setOnRicochet(LAMBDA_FOAM_HIT); - fext_sand = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 1)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) + fext_sand = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 2)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) .setOnUpdate(LAMBDA_SAND_UPDATE) .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) .setOnRicochet(LAMBDA_SAND_HIT); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 70f14d039..d2262372e 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -237,6 +237,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 1), new Object[] { "BBB", "WFW", "RRR", 'B', BE.ingot(), 'R', ModItems.coil_tungsten, 'W', CU.plateCast(), 'F', Item.getItemFromBlock(Blocks.furnace) }); addRecipeAuto(new ItemStack(ModBlocks.red_wire_coated, 16), new Object[] { "WRW", "RIR", "WRW", 'W', ModItems.plate_polymer, 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.red_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); + if (ModBlocks.oc_cable_paintable != null) + addRecipeAuto(new ItemStack(ModBlocks.oc_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', REDSTONE.dust(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.cable_switch, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_detector, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_diode, 1), new Object[] { " Q ", "CAC", " Q ", 'Q', SI.nugget(), 'C', ModBlocks.red_cable, 'A', AL.ingot() }); @@ -258,7 +260,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.capacitor_niobium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', RUBBER.ingot(), 'C', NB.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.capacitor_tantalium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', TA.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.capacitor_schrabidate, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', SBD.block(), 'W', STEEL.ingot() }); - //addRecipeAuto(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CFC", "I I" , 'P', STEEL.plate528(), 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'F', Blocks.furnace}); addRecipeAuto(new ItemStack(ModBlocks.machine_turbine, 1), new Object[] { "SMS", "PTP", "SMS", 'S', STEEL.ingot(), 'T', ModItems.turbine_titanium, 'M', ModItems.coil_copper, 'P', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_converter_he_rf, 1), new Object[] { "RRR", "WWW", "III", 'R', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'W', REDSTONE.dust(), 'I', STEEL.ingot() }); @@ -410,7 +411,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.basalt_polished, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_smooth }); addRecipeAuto(new ItemStack(ModBlocks.basalt_brick, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_polished }); addRecipeAuto(new ItemStack(ModBlocks.basalt_tiles, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_brick }); - + addShapelessAuto(new ItemStack(ModBlocks.lightstone, 4), new Object[] { Blocks.stone, Blocks.stone, Blocks.stone, ModItems.powder_limestone }); addRecipeAuto(new ItemStack(ModBlocks.lightstone, 4, LightstoneType.TILE.ordinal()), new Object[] { "CC", "CC", 'C', new ItemStack(ModBlocks.lightstone, 1, 0) }); addRecipeAuto(new ItemStack(ModBlocks.lightstone, 4, LightstoneType.BRICKS.ordinal()), new Object[] { "CC", "CC", 'C', new ItemStack(ModBlocks.lightstone, 1, LightstoneType.TILE.ordinal()) }); @@ -442,7 +443,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.barbed_wire_ultradeath, 4), new Object[] { "BCB", "CIC", "BCB", 'B', ModBlocks.barbed_wire, 'C', ModItems.powder_yellowcake, 'I', ModItems.nuclear_waste }); addShapelessAuto(new ItemStack(ModBlocks.sandbags, 4), new Object[] { ModItems.plate_polymer, KEY_SAND, KEY_SAND, KEY_SAND }); - + addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.tape_recorder), 4), new Object[] { "TST", "SSS", 'T', W.ingot(), 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_poles), 16), new Object[] { "S S", "SSS", "S S", 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.pole_top), 1), new Object[] { "T T", "TRT", "BBB", 'T', W.ingot(), 'B', BE.ingot(), 'R', MINGRADE.ingot() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0d64ee670..8588f66c2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -18,6 +18,7 @@ import com.hbm.handler.imc.IMCBlastFurnace; import com.hbm.handler.imc.IMCCentrifuge; import com.hbm.handler.imc.IMCCrystallizer; import com.hbm.handler.imc.IMCHandler; +import com.hbm.handler.microblocks.MicroBlocksCompatHandler; import com.hbm.handler.neutron.NeutronHandler; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.radiation.ChunkRadiationManager; @@ -661,6 +662,8 @@ public class MainRegistry { } } }); + + MicroBlocksCompatHandler.preInit(); } @EventHandler @@ -877,6 +880,8 @@ public class MainRegistry { BlockToolConversion.registerRecipes(); AchievementHandler.register(); + MobUtil.intializeMobPools(); + proxy.registerMissileItems(); // Load compatibility for OC. @@ -903,14 +908,14 @@ public class MainRegistry { Compat.handleRailcraftNonsense(); SuicideThreadDump.register(); CommandReloadClient.register(); - + // to make sure that foreign registered fluids are accounted for, // even when the reload listener is registered too late due to load order Fluids.reloadFluids(); //ExplosionTests.runTest(); } - + @EventHandler public void preInit(FMLPreInitializationEvent event) { if(logger == null) @@ -1701,6 +1706,18 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.hadron_cooler"); ignoreMappings.add("hbm:tile.machine_transformer_20"); ignoreMappings.add("hbm:tile.machine_transformer_dnt_20"); + ignoreMappings.add("hbm:item.levitation_unit"); + ignoreMappings.add("hbm:item.letter"); + ignoreMappings.add("hbm:item.chopper_head"); + ignoreMappings.add("hbm:item.chopper_gun"); + ignoreMappings.add("hbm:item.chopper_torso"); + ignoreMappings.add("hbm:item.chopper_tail"); + ignoreMappings.add("hbm:item.chopper_wing"); + ignoreMappings.add("hbm:item.chopper_blades"); + ignoreMappings.add("hbm:item.component_emitter"); + ignoreMappings.add("hbm:item.component_limiter"); + ignoreMappings.add("hbm:item.bottle2_korl_special"); + ignoreMappings.add("hbm:item.bottle2_fritz_special"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index cd368b165..1f0be79bf 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -10,7 +10,6 @@ import com.hbm.config.MobConfig; import com.hbm.config.RadiationConfig; import com.hbm.config.ServerConfig; import com.hbm.entity.mob.*; -import com.hbm.entity.mob.ai.EntityAIFireGun; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.entity.train.EntityRailCarBase; @@ -76,7 +75,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAITasks; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.*; @@ -387,74 +385,18 @@ public class ModEventHandler { if(entity instanceof EntityZombie) { if(world.rand.nextFloat() < 0.005F && soot > 2) { // full hazmat zombine - equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); + MobUtil.equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); return; } - - if(world.rand.nextFloat() < 0.005F && soot > 20) { // full security zombine - equipFullSet(entity, ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots); - return; - } - - slotPools.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(7000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, - {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, - {ModItems.steel_plate, 2} - })); - slotPools.put(2, createSlotPool(7000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} - })); - slotPools.put(1, createSlotPool(7000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} - })); - slotPools.put(0, createSlotPool(10000, new Object[][]{ - {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, - {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, - {ModItems.alloy_axe, 5}, {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, - {ModItems.wrench, 20}, {ModItems.cobalt_decorated_sword, 2}, {ModItems.detonator_de, 1} - })); + slotPools = MobUtil.slotPoolCommon; } else if(entity instanceof EntitySkeleton) { - - slotPools.put(4, createSlotPool(12000, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(10000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it - {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} - })); - slotPools.put(2, createSlotPool(10000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, - })); - slotPools.put(1, createSlotPool(10000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, - {ModItems.titanium_boots, 6} - })); - + slotPools = MobUtil.slotPoolRanged; ItemStack bowReplacement = getSkelegun(soot, world.rand); slotPools.put(0, createSlotPool(50, bowReplacement != null ? new Object[][]{{bowReplacement, 1}} : new Object[][]{})); } - assignItemsToEntity(entity, slotPools); - } - - private void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works - entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number - entity.setCurrentItemOrArmor(3, new ItemStack(chest)); - entity.setCurrentItemOrArmor(2, new ItemStack(legs)); - entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + MobUtil.assignItemsToEntity(entity, slotPools, rand); } private List createSlotPool(int nullWeight, Object[][] items) { @@ -473,74 +415,30 @@ public class ModEventHandler { return pool; } - - public void assignItemsToEntity(EntityLivingBase entity, Map> slotPools) { - for (Map.Entry> entry : slotPools.entrySet()) { - int slot = entry.getKey(); - List pool = entry.getValue(); - - WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix - if (choice == null) { - continue; - } - - ItemStack stack = choice.asStack(); - if (stack == null || stack.getItem() == null) { - continue; - } - - if (stack.getItem() == ModItems.gas_mask_m65 //eyesore - || stack.getItem() == ModItems.gas_mask_olde - || stack.getItem() == ModItems.gas_mask_mono) { - ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); - } - - entity.setCurrentItemOrArmor(slot, stack); - - //Give skeleton AI if it has a gun - if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { - addFireTask((EntityLiving) entity); - } - } - } - private static ItemStack getSkelegun(float soot, Random rand) { - if(!MobConfig.enableMobWeapons) return null; - if(rand.nextDouble() > Math.log(soot) * 0.25) return null; + if (!MobConfig.enableMobWeapons) return null; + if (rand.nextDouble() > Math.log(soot) * 0.25) return null; - ArrayList pool = new ArrayList(); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_light_revolver), 12)); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_heavy_revolver), 8)); + ArrayList pool = new ArrayList<>(); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 10)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_henry), 8)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_greasegun), 6)); - - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_maresleg), 4)); - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_uzi), 6)); - - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_spas12), 3)); - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_am180), 4)); - - if(soot > 12) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_congolake), 1)); + if(soot < 0.3){ + pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 5)); + pool.add(new WeightedRandomObject(null, 20)); + } else if(soot > 0.3 && soot < 1) { + pool.addAll(MobUtil.slotPoolGuns.get(0.3)); + } else if (soot < 3) { + pool.addAll(MobUtil.slotPoolGuns.get(1D)); + } else if (soot < 5) { + pool.addAll(MobUtil.slotPoolGuns.get(3D)); + } else { + pool.addAll(MobUtil.slotPoolGuns.get(5D)); + } WeightedRandomObject selected = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); return selected.asStack(); } - // these fucking tasks keep stacking on top of themselves - private static void addFireTask(EntityLiving entity) { - entity.setEquipmentDropChance(0, 0); // Prevent dropping guns - - for(Object entry : entity.tasks.taskEntries) { - EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; - if(task.action instanceof EntityAIFireGun) return; - } - - entity.tasks.addTask(3, new EntityAIFireGun(entity)); - } - @SubscribeEvent public void addAITasks(EntityJoinWorldEvent event) { if(event.world.isRemote || !(event.entity instanceof EntityLiving)) return; @@ -549,7 +447,7 @@ public class ModEventHandler { ItemStack held = living.getHeldItem(); if(held != null && held.getItem() instanceof ItemGunBaseNT) { - addFireTask(living); + MobUtil.addFireTask(living); } } diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java index 7787b4fbd..9815c0803 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -3,6 +3,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.machine.ItemBlueprints; import api.hbm.energymk2.IEnergyHandlerMK2; import cpw.mods.fml.common.network.ByteBufUtils; @@ -130,8 +131,16 @@ public abstract class ModuleMachineBase { public abstract GenericRecipe getRecipe(); - public void update(double speed, double power, boolean extraCondition) { + public void update(double speed, double power, boolean extraCondition, ItemStack blueprint) { GenericRecipe recipe = getRecipe(); + + if(recipe != null && recipe.isPooled() && !recipe.isPartOfPool(ItemBlueprints.grabPool(blueprint))) { + this.didProcess = false; + this.progress = 0F; + this.recipe = "null"; + return; + } + this.setupTanks(recipe); this.didProcess = false; diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java index 6bb9a7f21..1111a998a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -111,8 +111,16 @@ public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack stack = recipe.getIcon(); + stack.stackSize = 1; - if(!(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType()))) { + if(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock) { + if(RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType())) { + GL11.glTranslated(0, -0.0625, 0); + } else { + GL11.glTranslated(0, -0.125, 0); + GL11.glScaled(0.5, 0.5, 0.5); + } + } else { GL11.glRotated(-90, 1, 0, 0); GL11.glTranslated(0, -0.25, 0); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java index f25ef7f0e..87fc5309e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java @@ -22,12 +22,14 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { GL11.glDisable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_LIGHTING); + int teFacing = 0; switch(te.getBlockMetadata() - BlockDummyable.offset) { - case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: teFacing = 90; break; + case 4: teFacing = 180; break; + case 3: teFacing = 270; break; + case 5: teFacing = 0; break; } + GL11.glRotatef(teFacing, 0F, 1F, 0F); TileEntityCraneConsole console = (TileEntityCraneConsole) te; @@ -99,12 +101,7 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { double cranePosZ = (-te.zCoord + console.centerZ); GL11.glTranslated(cranePosX, cranePosY, cranePosZ); - switch(te.getBlockMetadata() - BlockDummyable.offset) { - case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glRotatef(teFacing, 0F, 1F, 0F); double posX = (console.lastPosFront + (console.posFront - console.lastPosFront) * interp); double posZ = (console.lastPosLeft + (console.posLeft - console.lastPosLeft) * interp); @@ -118,27 +115,27 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { GL11.glRotatef(-craneRotationOffset, 0F, 1F, 0F); switch(craneRotationOffset) { case 0: - girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(posX - console.spanL, 0, 0); + girderSpan = console.spanF + console.spanB + 1; + GL11.glTranslated(posX + console.spanB, 0, 0); break; case 90: - girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(0, 0, -posZ + console.spanB); + girderSpan = console.spanL + console.spanR + 1; + GL11.glTranslated(0, 0, -posZ - console.spanR); break; case 180: - girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(posX + console.spanR, 0, 0); + girderSpan = console.spanF + console.spanB + 1; + GL11.glTranslated(posX - console.spanF, 0, 0); break; case 270: - girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(0, 0, -posZ - console.spanF); + girderSpan = console.spanL + console.spanR + 1; + GL11.glTranslated(0, 0, -posZ + console.spanL); break; } GL11.glRotatef(craneRotationOffset, 0F, 1F, 0F); for(int i = 0; i < girderSpan; i++) { ResourceManager.rbmk_crane.renderPart("Girder"); - GL11.glTranslated(1, 0, 0); + GL11.glTranslated(-1, 0, 0); } GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java index adcbea5e9..45401d406 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java @@ -23,6 +23,10 @@ public class RenderSkeletonHolder extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + RenderHelper.enableStandardItemLighting(); + switch(te.getBlockMetadata()) { case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; @@ -30,10 +34,6 @@ public class RenderSkeletonHolder extends TileEntitySpecialRenderer { case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; } //why the FUCK did this not commit properl;y - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_CULL_FACE); - RenderHelper.enableStandardItemLighting(); - bindTexture(ResourceManager.skeleton_holder_tex); ResourceManager.skeleton_holder.renderPart("Holder1"); diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index d28ae1e22..e7cf6981f 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -67,8 +67,8 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { - return super.getBlockBound(x, y, z, open); + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { + return super.getBlockBound(x, y, z, open, forCollision); } @Override @@ -156,7 +156,7 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); if(z == 1) { @@ -166,9 +166,9 @@ public abstract class DoorDecl { } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.1, 1); } else { - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); } } @@ -240,15 +240,15 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(open) { if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.08, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.08, 1); } } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); } @Override @@ -327,10 +327,9 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { - if(open) { - if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0, 1); - return AxisAlignedBB.getBoundingBox(0, 0.9375, 1 - 0.25, 1, 1, 1); + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { + if(forCollision && open) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); } else { return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); } @@ -429,7 +428,7 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) { if(y > 0) { return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, 1, 0.625); @@ -437,11 +436,13 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } if(y == 1) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } else if(y == 4) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); - } else { - return super.getBlockBound(x, y, z, open); + } else if(y == 0) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); + }else { + return super.getBlockBound(x, y, z, open, forCollision); } } @@ -504,9 +505,9 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); if(z == 1) { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -2) { @@ -514,9 +515,9 @@ public abstract class DoorDecl { } else if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -586,7 +587,7 @@ public abstract class DoorDecl { @Override @SideOnly(Side.CLIENT) public void doOffsetTransform() { - GL11.glTranslated(0.4375, 0, 0.5); + GL11.glTranslated(0.40625, 0, 0.5); }; @Override @@ -595,15 +596,15 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { - if(open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { + if(forCollision && open) { if(z == 0) { - return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.125, 1, 1, 1); + return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.125, 0.125, 1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 0.125, 1, 1); } } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.125, 1, 1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 1, 1, 1); } }; @@ -691,14 +692,14 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 1, 1); if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.5, 0.5, 1, 1, 1); else if(y == 0) - return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 0.1, 1); - return super.getBlockBound(x, y, z, open); + return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, forCollision ? 0 : 0.1, 1); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -814,15 +815,15 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) { return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 1, 1); } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.85, 0.75, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 0.15, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, forCollision ? 0 : 0.15, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -1018,15 +1019,17 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); if(z == 3) { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -3) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); + } else if(y == 0) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -1159,7 +1162,7 @@ public abstract class DoorDecl { public void doOffsetTransform() { } - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { return open ? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index 9b8751d05..e460bc08b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -21,7 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDoorGeneric extends TileEntityLockableBase { +public class TileEntityDoorGeneric extends TileEntityLockableBase { //0: closed, 1: open, 2: closing, 3: opening public byte state = 0; @@ -318,6 +318,15 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { return true; } + /**Useful for logic block interactions, as a way to close/open doors**/ + public void open(){ + if(state == 0) state = 3; + } + + public void close() { + if(state == 1) state = 2; + } + @Override public AxisAlignedBB getRenderBoundingBox() { return INFINITE_EXTENT_AABB; @@ -404,4 +413,4 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index c26b87500..1337d34c0 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -19,7 +19,9 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; +import com.hbm.blocks.generic.BlockWandLogic.TileEntityWandLogic; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; +import com.hbm.blocks.generic.LogicBlock; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; import com.hbm.blocks.machine.BlockPWR.TileEntityBlockPWR; @@ -39,6 +41,7 @@ import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhau import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.blocks.network.PneumoTubePaintableBlock.TileEntityPneumoTubePaintable; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; +import com.hbm.blocks.network.BlockOpenComputersCablePaintable.TileEntityOpenComputersCablePaintable; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.deco.*; import com.hbm.tileentity.machine.*; @@ -49,6 +52,7 @@ import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; import com.hbm.tileentity.turret.*; +import cpw.mods.fml.common.Loader; import net.minecraft.tileentity.TileEntity; @@ -209,6 +213,7 @@ public class TileMappings { put(TileEntityPedestal.class, "tileentity_ntm_pedestal"); put(TileEntitySkeletonHolder.class, "tileentity_ntm_skeleton"); put(TileEntityDungeonSpawner.class, "tileentity_ntm_dungeon_spawner"); + put(LogicBlock.TileEntityLogicBlock.class, "tileentity_ntm_logic_block"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); put(TileEntitySnowglobe.class, "tileentity_ntm_snowglobe"); put(TileEntityPlushie.class, "tileentity_ntm_plushie"); @@ -237,6 +242,7 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); + put(TileEntityWandLogic.class, "tileentity_wand_spawner"); putNetwork(); putBombs(); @@ -449,6 +455,13 @@ public class TileMappings { put(TileEntityDroneRequester.class, "tileentity_drone_requester"); put(TileEntityRailSwitch.class, "tileentity_rail_switch"); + + // OC Compat items + boolean ocPresent = Loader.isModLoaded("OpenComputers"); + + if (ocPresent) { + put(TileEntityOpenComputersCablePaintable.class, "tileentity_oc_cable_paintable"); + } } private static void put(Class clazz, String... names) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 084aa7859..403e516f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -66,6 +66,8 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn public MaterialStack leftStack; public MaterialStack rightStack; public int maxMaterial = MaterialShapes.BLOCK.q(16); + + private int lastSelectedGUI = 0; public FluidTank[] tanks; @@ -248,6 +250,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn buf.writeInt(rightStack.material.id); buf.writeInt(rightStack.amount); } + buf.writeInt(lastSelectedGUI); } @Override @@ -269,6 +272,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(right) { this.rightStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); } + this.lastSelectedGUI = buf.readInt(); } public boolean canProcessFluid() { @@ -423,6 +427,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(nbt.hasKey("rightType")) this.rightStack = new MaterialStack(Mats.matById.get(nbt.getInteger("rightType")), nbt.getInteger("rightAmount")); else this.rightStack = null; for(int i = 0; i < 4; i++) tanks[i].readFromNBT(nbt, "t" + i); + this.lastSelectedGUI = nbt.getInteger("lastSelectedGUI"); } @Override @@ -443,7 +448,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn nbt.setInteger("rightAmount", rightStack.amount); } for(int i = 0; i < 4; i++) tanks[i].writeToNBT(nbt, "t" + i); - + nbt.setInteger("lastSelectedGUI", this.lastSelectedGUI); } AxisAlignedBB bb = null; @@ -503,6 +508,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + if(ID == -1) ID = lastSelectedGUI; if(ID == 0) return new ContainerElectrolyserFluid(player.inventory, this); return new ContainerElectrolyserMetal(player.inventory, this); } @@ -510,6 +516,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + if(ID == -1) ID = lastSelectedGUI; if(ID == 0) return new GUIElectrolyserFluid(player.inventory, this); return new GUIElectrolyserMetal(player.inventory, this); } @@ -520,8 +527,10 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override public void receiveControl(EntityPlayer player, NBTTagCompound data) { - if(data.hasKey("sgm")) FMLNetworkHandler.openGui(player, MainRegistry.instance, 1, worldObj, xCoord, yCoord, zCoord); - if(data.hasKey("sgf")) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, worldObj, xCoord, yCoord, zCoord); + if(data.hasKey("sgm")) lastSelectedGUI = 1; + if(data.hasKey("sgf")) lastSelectedGUI = 0; + + FMLNetworkHandler.openGui(player, MainRegistry.instance, lastSelectedGUI, worldObj, xCoord, yCoord, zCoord); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 7007e54e5..2ad98b8c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -104,7 +104,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.assemblerModule.update(speed, pow, true); + this.assemblerModule.update(speed, pow, true, slots[1]); this.didProcess = this.assemblerModule.didProcess; if(this.assemblerModule.markDirty) this.markDirty(); @@ -129,7 +129,8 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl audio = rebootAudio(audio); } audio.keepAlive(); - audio.updateVolume(this.getVolume(1F)); + audio.updatePitch(0.75F); + audio.updateVolume(this.getVolume(0.5F)); } else { if(audio != null) { @@ -145,6 +146,10 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl } else{ arm.returnToNullPos(); } + + if(!this.muffled && arm.prevAngles[3] != arm.angles[3] && arm.angles[3] == -0.75) { + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStrike", this.getVolume(0.5F), 1F); + } } this.prevRing = this.ring; @@ -167,12 +172,14 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl this.prevRing += 360D; } this.ringDelay = 20 + worldObj.rand.nextInt(21); + //MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); } } else { if(this.ringDelay > 0) this.ringDelay--; if(this.ringDelay <= 0) { this.ringTarget += (worldObj.rand.nextDouble() * 2 - 1) * 135; this.ringSpeed = 10D + worldObj.rand.nextDouble() * 5D; + if(!this.muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStart", this.getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F); } } } @@ -180,7 +187,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl } @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.chemicalPlant", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + return MainRegistry.proxy.getLoopedSound("hbm:block.motor", xCoord, yCoord, zCoord, 0.5F, 15F, 0.75F, 20); } @Override public void onChunkUnload() { @@ -223,12 +230,17 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl @Override public void deserialize(ByteBuf buf) { super.deserialize(buf); + boolean wasProcessing = this.didProcess; this.inputTank.deserialize(buf); this.outputTank.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); this.didProcess = buf.readBoolean(); this.assemblerModule.deserialize(buf); + + if(wasProcessing && !didProcess) { + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); + } } @Override @@ -254,6 +266,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades if(this.assemblerModule.isItemValid(slot, stack)) return true; // recipe input crap return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index 07c5ea852..c5b5e9da6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -236,7 +236,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement audioDuration = MathHelper.clamp_int(audioDuration, 0, 60); - if(audioDuration > 10) { + if(audioDuration > 10 && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 25) { if(audio == null) { audio = createAudioLoop(); @@ -247,6 +247,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement audio.updateVolume(getVolume(1F)); audio.updatePitch((audioDuration - 10) / 100F + 0.5F); + audio.keepAlive(); } else { @@ -276,7 +277,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); + return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 62b9f0a68..dfcd1c50d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -10,6 +10,7 @@ import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalFactory; +import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; @@ -101,6 +102,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + for(int i = 0; i < 4; i++) if(slot == 4 + i * 7 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 1 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades for(int i = 0; i < 4; i++) if(this.chemplantModule[i].isItemValid(slot, stack)) return true; // recipe input crap return false; @@ -163,7 +165,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl boolean markDirty = false; for(int i = 0; i < 4; i++) { - this.chemplantModule[i].update(speed * 2D, pow * 2D, canCool()); + this.chemplantModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 7]); this.didProcess[i] = this.chemplantModule[i].didProcess; markDirty |= this.chemplantModule[i].markDirty; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 47e0a7d62..6a21f07de 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -110,7 +110,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.chemplantModule.update(speed, pow, true); + this.chemplantModule.update(speed, pow, true, slots[1]); this.didProcess = this.chemplantModule.didProcess; if(this.chemplantModule.markDirty) this.markDirty(); @@ -232,6 +232,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades if(slot >= 10 && slot <= 12) return true; // input fluid if(slot >= 16 && slot <= 18) return true; // output fluid diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index a72d1996e..1c1a940e9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -31,7 +31,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; @@ -51,7 +50,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme public FluidTank tank; - public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(); + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); public TileEntityMachineCrystallizer() { super(8); @@ -76,7 +75,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme tank.setType(7, slots); tank.loadTank(3, 4, slots); - upgradeManager.checkSlots(this, slots, 5, 6); + upgradeManager.checkSlots(slots, 5, 6); for(int i = 0; i < getCycleCount(); i++) { @@ -299,14 +298,8 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - - CrystallizerRecipe recipe = CrystallizerRecipes.getOutput(itemStack, tank.getTankType()); - if(i == 0 && recipe != null) { - return true; - } - - if(i == 1 && itemStack.getItem() instanceof IBatteryItem) - return true; + if(i == 0 && CrystallizerRecipes.getOutput(itemStack, tank.getTankType()) != null) return true; + if(i == 1 && itemStack.getItem() instanceof IBatteryItem) return true; return false; } @@ -318,13 +311,26 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override public int[] getAccessibleSlotsFromSide(int side) { - - return side == 0 ? new int[] { 2 } : new int[] { 0, 2 }; + return new int[] { 0, 2 }; } + AxisAlignedBB bb = null; + @Override public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 10, + zCoord + 2 + ); + } + + return bb; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index 62e76ae0e..7a63ee4d7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -151,7 +151,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I if(te instanceof TileEntityMachineGasCent) { TileEntityMachineGasCent cent = (TileEntityMachineGasCent) te; - if(cent.tank.getFill() == 0 && cent.tank.getTankType() == tank.getTankType()) { + if(cent.tank.getTankType() == tank.getTankType()) { if(cent.inputTank.getTankType() != outputTank.getTankType() && outputTank.getTankType() != PseudoFluidType.NONE) { cent.inputTank.setTankType(outputTank.getTankType()); cent.outputTank.setTankType(outputTank.getTankType().getOutputType()); @@ -237,7 +237,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I audioDuration = MathHelper.clamp_int(audioDuration, 0, 60); - if(audioDuration > 10) { + if(audioDuration > 10 && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 25) { if(audio == null) { audio = createAudioLoop(); @@ -248,6 +248,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I audio.updateVolume(getVolume(1F)); audio.updatePitch((audioDuration - 10) / 100F + 0.5F); + audio.keepAlive(); } else { @@ -261,7 +262,27 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); + return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); + } + + @Override + public void onChunkUnload() { + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + + super.invalidate(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } } @Override @@ -314,21 +335,9 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I }; } - @Override - public void setPower(long i) { - power = i; - } - - @Override - public long getPower() { - return power; - - } - - @Override - public long getMaxPower() { - return maxPower; - } + @Override public void setPower(long i) { power = i; } + @Override public long getPower() { return power; } + @Override public long getMaxPower() { return maxPower; } public int getProcessingSpeed() { if(slots[6] != null && slots[6].getItem() == ModItems.upgrade_gc_speed) { @@ -352,7 +361,6 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I tank.setTankType(newType); } } - } } @@ -374,7 +382,6 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I if(bb == null) { bb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 5, zCoord + 1); } - return bb; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 26a44455f..b0705734c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -105,12 +105,19 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement tanks[0].setTankType(fluid); } } - - if(autoMode) { //power production depending on power requirement - - //scales the slider proportionally to the power gauge - int powerSliderTarget = 60 - (int) (60 * power / maxPower); - + + if(autoMode) { //power production depending on power requirement and fuel level + + int powerSliderTarget; + + //when low on fuel, decrease consumption linearly + if(tanks[0].getFill() * 10 > tanks[0].getMaxFill()) { + powerSliderTarget = 60 - (int) (60 * power / maxPower); //scales the slider proportionally to the power gauge + } + else { + powerSliderTarget = (int) ( tanks[0].getFill() * 0.0001 * (60 - (int) (60 * power / maxPower)) ); + } + if(powerSliderTarget > powerSliderPos) { //makes the auto slider slide instead of snapping into position powerSliderPos++; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index 120efd4f5..2c3b4ebb4 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -275,10 +275,16 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.centerY = y + RBMKDials.getColumnHeight(worldObj) + 1; this.centerZ = z; - this.spanF = 7; - this.spanB = 7; - this.spanL = 7; - this.spanR = 7; + int girderY = centerY + 6; + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + this.spanF = this.findRoomExtent(x, girderY, z, dir, 16); + dir = dir.getRotation(ForgeDirection.UP); + this.spanR = this.findRoomExtent(x, girderY, z, dir, 16); + dir = dir.getRotation(ForgeDirection.UP); + this.spanB = this.findRoomExtent(x, girderY, z, dir, 16); + dir = dir.getRotation(ForgeDirection.UP); + this.spanL = this.findRoomExtent(x, girderY, z, dir, 16); this.height = 7; @@ -287,6 +293,16 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.markDirty(); } + private int findRoomExtent(int x, int y, int z, ForgeDirection dir, int max) { + for (int i = 1; i < max; i++) { + if (!worldObj.isAirBlock(x + dir.offsetX * i, y, z + dir.offsetZ * i)) { + return i - 1; + } + } + + return max; + } + public void cycleCraneRotation() { this.craneRotationOffset = (this.craneRotationOffset + 90) % 360; } diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index d5e475de9..154891677 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -28,6 +28,7 @@ import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -48,7 +49,7 @@ public class DamageResistanceHandler { public static final String CATEGORY_EXPLOSION = "EXPL"; public static final String CATEGORY_FIRE = "FIRE"; - public static final String CATEGORY_PROJECTILE = "PROJ"; + public static final String CATEGORY_PHYSICAL = "PHYS"; public static final String CATEGORY_ENERGY = "EN"; public static final Gson gson = new Gson(); @@ -121,70 +122,70 @@ public class DamageResistanceHandler { entityStats.put(EntityCreeper.class, new ResistanceStats().addCategory(CATEGORY_EXPLOSION, 2F, 0.25F)); itemStats.put(ModItems.jackt, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F)); itemStats.put(ModItems.jackt2, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F)); registerSet(ModItems.steel_helmet, ModItems.steel_plate, ModItems.steel_legs, ModItems.steel_boots, new ResistanceStats()); registerSet(ModItems.titanium_helmet, ModItems.titanium_plate, ModItems.titanium_legs, ModItems.titanium_boots, new ResistanceStats()); registerSet(ModItems.alloy_helmet, ModItems.alloy_plate, ModItems.alloy_legs, ModItems.alloy_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); + .addCategory(CATEGORY_PHYSICAL, 2F, 0.1F)); registerSet(ModItems.cobalt_helmet, ModItems.cobalt_plate, ModItems.cobalt_legs, ModItems.cobalt_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); + .addCategory(CATEGORY_PHYSICAL, 2F, 0.1F)); registerSet(ModItems.starmetal_helmet, ModItems.starmetal_plate, ModItems.starmetal_legs, ModItems.starmetal_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 3F, 0.25F) + .addCategory(CATEGORY_PHYSICAL, 3F, 0.25F) .setOther(1F, 0.1F)); registerSet(ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, new ResistanceStats() .setOther(0F, 1F)); registerSet(ModItems.dnt_helmet, ModItems.dnt_plate, ModItems.dnt_legs, ModItems.dnt_boots, new ResistanceStats()); registerSet(ModItems.cmb_helmet, ModItems.cmb_plate, ModItems.cmb_legs, ModItems.cmb_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .setOther(5F, 0.25F)); registerSet(ModItems.schrabidium_helmet, ModItems.schrabidium_plate, ModItems.schrabidium_legs, ModItems.schrabidium_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 10F, 0.65F) + .addCategory(CATEGORY_PHYSICAL, 10F, 0.65F) .setOther(5F, 0.5F)); registerSet(ModItems.robes_helmet, ModItems.robes_plate, ModItems.robes_legs, ModItems.robes_boots, new ResistanceStats()); registerSet(ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 2F, 0.25F)); registerSet(ModItems.steamsuit_helmet, ModItems.steamsuit_plate, ModItems.steamsuit_legs, ModItems.steamsuit_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.25F) .addExact(DamageSource.fall.damageType, 5F, 0.25F) .setOther(0F, 0.1F)); registerSet(ModItems.dieselsuit_helmet, ModItems.dieselsuit_plate, ModItems.dieselsuit_legs, ModItems.dieselsuit_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 1F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 1F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 2F, 0.15F) .setOther(0F, 0.1F)); registerSet(ModItems.t45_helmet, ModItems.t45_plate, ModItems.t45_legs, ModItems.t45_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.1F)); registerSet(ModItems.ajr_helmet, ModItems.ajr_plate, ModItems.ajr_legs, ModItems.ajr_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 4F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 4F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 7.5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.15F)); registerSet(ModItems.ajro_helmet, ModItems.ajro_plate, ModItems.ajro_legs, ModItems.ajro_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 4F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 4F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 7.5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.15F)); registerSet(ModItems.rpa_helmet, ModItems.rpa_plate, ModItems.rpa_legs, ModItems.rpa_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 25F, 0.65F) + .addCategory(CATEGORY_PHYSICAL, 25F, 0.65F) .addCategory(CATEGORY_FIRE, 10F, 0.9F) .addCategory(CATEGORY_EXPLOSION, 15F, 0.25F) .addCategory(CATEGORY_ENERGY, 25F, 0.75F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(15F, 0.3F)); ResistanceStats bj = new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 2.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 10F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) @@ -197,14 +198,14 @@ public class DamageResistanceHandler { .addExact(DamageSource.fall.damageType, 5F, 0.75F) .setOther(0F, 0.1F)); registerSet(ModItems.hev_helmet, ModItems.hev_plate, ModItems.hev_legs, ModItems.hev_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.25F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.25F) .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.onFire.damageType, 0F, 1F) .addExact(DamageSource.fall.damageType, 10F, 0F) .setOther(2F, 0.25F)); registerSet(ModItems.bismuth_helmet, ModItems.bismuth_plate, ModItems.bismuth_legs, ModItems.bismuth_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) @@ -220,13 +221,13 @@ public class DamageResistanceHandler { .addCategory(CATEGORY_FIRE, 0F, 1F) .setOther(1000F, 1F)); registerSet(ModItems.taurun_helmet, ModItems.taurun_plate, ModItems.taurun_legs, ModItems.taurun_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0F, 0.25F) .addCategory(CATEGORY_EXPLOSION, 0F, 0.25F) .addExact(DamageSource.fall.damageType, 4F, 0.5F) .setOther(2F, 0.1F)); registerSet(ModItems.trenchmaster_helmet, ModItems.trenchmaster_plate, ModItems.trenchmaster_legs, ModItems.trenchmaster_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageClass.LASER.name(), 15F, 0.9F) @@ -443,10 +444,13 @@ public class DamageResistanceHandler { public static String typeToCategory(DamageSource source) { if(source.isExplosion()) return CATEGORY_EXPLOSION; if(source.isFireDamage()) return CATEGORY_FIRE; - if(source.isProjectile()) return CATEGORY_PROJECTILE; + if(source.isProjectile()) return CATEGORY_PHYSICAL; if(source.damageType.equals(DamageClass.LASER.name())) return CATEGORY_ENERGY; if(source.damageType.equals(DamageClass.MICROWAVE.name())) return CATEGORY_ENERGY; if(source.damageType.equals(DamageClass.SUBATOMIC.name())) return CATEGORY_ENERGY; + if(source.damageType.equals(DamageClass.ELECTRIC.name())) return CATEGORY_ENERGY; + if(source == DamageSource.cactus) return CATEGORY_PHYSICAL; + if(source instanceof EntityDamageSource) return CATEGORY_PHYSICAL; return source.damageType; } diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java new file mode 100644 index 000000000..8779c1ed2 --- /dev/null +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -0,0 +1,197 @@ +package com.hbm.util; + +import com.hbm.entity.mob.ai.EntityAIFireGun; +import com.hbm.items.ModItems; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandom; + +import java.util.*; + +public class MobUtil { + + + public static Map> slotPoolCommon = new HashMap<>(); + public static Map> slotPoolRanged = new HashMap<>(); + + public static Map> slotPoolAdv = new HashMap<>(); + public static Map> slotPoolAdvRanged; + /**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/ + public static HashMap> slotPoolGuns = new HashMap<>(); + + + public static void intializeMobPools(){ + slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolCommon.put(3, createSlotPool(7000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, + {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, + {ModItems.steel_plate, 2} + })); + slotPoolCommon.put(2, createSlotPool(7000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} + })); + slotPoolCommon.put(1, createSlotPool(7000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} + })); + slotPoolCommon.put(0, createSlotPool(10000, new Object[][]{ + {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, + {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, {ModItems.wrench_flipped, 2}, + {ModItems.wrench, 20} + })); + + slotPoolRanged.put(4, createSlotPool(12000, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolRanged.put(3, createSlotPool(10000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it + {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} + })); + slotPoolRanged.put(2, createSlotPool(10000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, + })); + slotPoolRanged.put(1, createSlotPool(10000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, + {ModItems.titanium_boots, 6} + })); + + slotPoolGuns.put(0.3, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} + })); + slotPoolGuns.put(1D, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 6}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 4}, {ModItems.gun_henry, 6} + })); + slotPoolGuns.put(3D, createSlotPool(new Object[][]{ + {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 2} + })); + slotPoolGuns.put(5D, createSlotPool(new Object[][]{ + {ModItems.gun_am180, 6}, {ModItems.gun_uzi, 10}, {ModItems.gun_spas12, 8}, {ModItems.gun_henry_lincoln, 2}, {ModItems.gun_heavy_revolver, 12}, {ModItems.gun_flaregun, 4}, {ModItems.gun_flamer, 2} + })); + + slotPoolAdv.put(4, createSlotPool(new Object[][]{ + {ModItems.security_helmet, 10}, {ModItems.t45_helmet, 4}, {ModItems.asbestos_helmet, 12}, + {ModItems.liquidator_helmet, 4}, {ModItems.no9, 12}, + {ModItems.hazmat_helmet, 6} + })); + slotPoolAdv.put(3, createSlotPool(new Object[][]{ + {ModItems.liquidator_plate, 4}, {ModItems.security_plate, 8}, {ModItems.asbestos_plate, 12}, + {ModItems.t45_plate, 4}, {ModItems.hazmat_plate, 6}, + {ModItems.steel_plate, 8} + })); + slotPoolAdv.put(2, createSlotPool(new Object[][]{ + {ModItems.liquidator_legs, 4}, {ModItems.security_legs, 8}, {ModItems.asbestos_legs, 12}, + {ModItems.t45_legs, 4}, {ModItems.hazmat_legs, 6}, + {ModItems.steel_legs, 8} + })); + slotPoolAdv.put(1, createSlotPool(new Object[][]{ + {ModItems.liquidator_boots, 4}, {ModItems.security_boots, 8}, {ModItems.asbestos_boots, 12}, + {ModItems.t45_boots, 4}, {ModItems.hazmat_boots, 6}, + {ModItems.robes_boots, 8} + })); + slotPoolAdv.put(0, createSlotPool(new Object[][]{ + {ModItems.pipe_lead, 20}, {ModItems.crowbar, 30}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 12}, {ModItems.stopsign, 16}, + {ModItems.sopsign, 4}, {ModItems.chernobylsign, 16}, + {ModItems.titanium_sword, 18}, {ModItems.lead_gavel, 8}, + {ModItems.wrench, 20} + })); + + slotPoolAdvRanged = new HashMap<>(slotPoolAdv); + slotPoolAdvRanged.remove(0); + + } + + public static List createSlotPool(int nullWeight, Object[][] items) { + List pool = new ArrayList<>(); + pool.add(new WeightedRandomObject(null, nullWeight)); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + public static List createSlotPool(Object[][] items) { + List pool = new ArrayList<>(); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + + public static void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works + entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number + entity.setCurrentItemOrArmor(3, new ItemStack(chest)); + entity.setCurrentItemOrArmor(2, new ItemStack(legs)); + entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + } + + public static void assignItemsToEntity(EntityLivingBase entity, Map> slotPools, Random rand) { + for (Map.Entry> entry : slotPools.entrySet()) { + int slot = entry.getKey(); + List pool = entry.getValue(); + + WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix + if (choice == null) { + continue; + } + + ItemStack stack = choice.asStack(); + if (stack == null || stack.getItem() == null) { + continue; + } + + if (stack.getItem() == ModItems.gas_mask_m65 //eyesore + || stack.getItem() == ModItems.gas_mask_olde + || stack.getItem() == ModItems.gas_mask_mono) { + ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); + } + + entity.setCurrentItemOrArmor(slot, stack); + + //Give skeleton AI if it has a gun + if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { + addFireTask((EntityLiving) entity); + } + } + } + + // these fucking tasks keep stacking on top of themselves + public static void addFireTask(EntityLiving entity) { + entity.setEquipmentDropChance(0, 0); // Prevent dropping guns + + for(Object entry : entity.tasks.taskEntries) { + EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; + if(task.action instanceof EntityAIFireGun) return; + } + + entity.tasks.addTask(3, new EntityAIFireGun(entity)); + } +} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java new file mode 100644 index 000000000..af2c41356 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -0,0 +1,268 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockSkeletonHolder; +import com.hbm.blocks.generic.LogicBlock; +import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.missile.EntityMissileTier2; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ItemEnums; +import com.hbm.items.ModItems; +import com.hbm.tileentity.TileEntityDoorGeneric; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.MobUtil; +import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.*; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.*; +import java.util.function.Consumer; + +public class LogicBlockActions { + + public static LinkedHashMap> actions = new LinkedHashMap<>(); + + public static Consumer PHASE_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1 || tile.phase == 2) { + tile.player = world.getClosestPlayer(x,y,z, 25); + if (tile.timer == 0) { + Vec3NT vec = new Vec3NT(20, 0, 0); + for (int i = 0; i < 10; i++) { + + if(vec.xCoord > 8) vec.xCoord += world.rand.nextInt(10) - 5; + + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); + for (int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue((int) (x + 0.5 + vec.xCoord),(int) (z + 0.5 + vec.zCoord)), z + 0.5 + vec.zCoord, i * 36F, 0); + if (mob.getCanSpawnHere()) { + mob.onSpawnWithEgg(null); + if(tile.player != null){ + mob.setTarget(tile.player); + } + world.spawnEntityInWorld(mob); + break; + } + } + vec.rotateAroundYDeg(36D); + } + } + } + if (tile.phase > 2) { + TileEntity te = world.getTileEntity(x, y + 18, z); + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + if (world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, ItemEnums.EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y + 18, z); + } + world.setBlock(x, y, z, Blocks.obsidian); + } + }; + + public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0) return; + + //from explosionChaos because i cannot be assed + int r = 4; + int r2 = r * r; + int r22 = r2 / 2; + + for (int xx = -r; xx < r; xx++) { + int X = xx + x; + int XX = xx * xx; + for (int yy = -r; yy < r; yy++) { + int Y = yy + y; + int YY = XX + yy * yy; + for (int zz = -r; zz < r; zz++) { + int Z = zz + z; + int ZZ = YY + zz * zz; + if (ZZ < r22) { + + if (world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { + EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); + world.spawnEntityInWorld(entityfallingblock); + } + } + } + } + } + world.setBlock(x, y, z, ModBlocks.block_steel); + + }; + + public static Consumer FODDER_WAVE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(5, 0, 0); + for (int i = 0; i < 10; i++) { + EntityZombie mob = new EntityZombie(world); + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); + world.spawnEntityInWorld(mob); + + vec.rotateAroundYDeg(36D); + } + world.setBlock(x, y, z, ModBlocks.block_steel); + } + }; + + public static Consumer PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 2){ + world.setBlock(x,y,z, ModBlocks.crate_steel); + + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 2, z); + world.spawnEntityInWorld(blitz); + + TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); + ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.gun_bolter)); + } + }; + + public static Consumer MISSILE_STRIKE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase != 1) return; + + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[COMMAND UNIT]"+ EnumChatFormatting.RESET + " Missile Fired")); + + ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); + + EntityMissileTier2.EntityMissileStrong missile = + new EntityMissileTier2.EntityMissileStrong( + world, + x + tile.direction.offsetX * 300, + 200, + z + tile.direction.offsetZ * 300, + x + parallel.offsetX * 30 + tile.direction.offsetX * 30, + z + parallel.offsetZ * 30 + tile.direction.offsetZ * 30); + WorldUtil.loadAndSpawnEntityInWorld(missile); + + world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); + }; + + public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection direction = tile.direction.getOpposite(); + ForgeDirection rot = direction.getRotation(ForgeDirection.UP); + + AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(x - rot.offsetX, y - 1, z - rot.offsetZ, x + rot.offsetX + direction.offsetX * 15, y + 1, z + rot.offsetZ + direction.offsetZ * 15).expand(2,2,2); + + List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, bb); + + for(EntityLivingBase e : entities) { + + Vec3 vec = Vec3.createVectorHelper(e.posX - (x + 0.5), (e.posY + e.getEyeHeight()) - (y + 0.5), e.posZ - (z + 0.5)); + double len = vec.lengthVector(); + vec = vec.normalize(); + + len = Math.max(len,1D); + + float res = 0; + + for(int i = 1; i < len; i++) { + + int ix = (int)Math.floor(x + 0.5 + vec.xCoord * i); + int iy = (int)Math.floor(y + 0.5 + vec.yCoord * i); + int iz = (int)Math.floor(z + 0.5 + vec.zCoord * i); + + res += world.getBlock(ix, iy, iz).getExplosionResistance(null); + } + + if(res < 1) + res = 1; + + float eRads = 100F; + eRads /= (float)res; + eRads /= (float)(len * len); + + ContaminationUtil.contaminate(e, ContaminationUtil.HazardType.RADIATION, ContaminationUtil.ContaminationType.HAZMAT2, eRads); + } + + if (tile.phase == 2 && tile.timer > 40){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Diagnostics found containment failure, commencing lockdown")); + + for(int i = 1; i < 20; i++) { + int checkX, checkY, checkZ; + checkX = x + direction.offsetX * i; + checkY = y + 1; + checkZ = z + direction.offsetZ * i; + Block block = world.getBlock(checkX, checkY,checkZ); + TileEntity te = null; + if(block instanceof BlockDummyable){ + int[] coreCoords = ((BlockDummyable) block).findCore(world,checkX,checkY,checkZ); + te = world.getTileEntity(coreCoords[0], coreCoords[1], coreCoords[2]); + } + + if (te instanceof TileEntityDoorGeneric) { + TileEntityDoorGeneric door = (TileEntityDoorGeneric) te; + door.setPins(456); + door.close(); + door.lock(); + break; + } + } + + tile.phase = 3; + } + }; + + public static List getActionNames(){ + return new ArrayList<>(actions.keySet()); + } + + //register new actions here + static{ + //example actions + actions.put("FODDER_WAVE", FODDER_WAVE); + actions.put("ABERRATOR", PHASE_ABERRATOR); + actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); + actions.put("PUZZLE_TEST", PUZZLE_TEST); + actions.put("MISSILE_STRIKE", MISSILE_STRIKE); + actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); + } + + + +} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java new file mode 100644 index 000000000..b51b96c23 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -0,0 +1,97 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.LogicBlock; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ModItems; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Function; + +public class LogicBlockConditions { + + public static LinkedHashMap> conditions = new LinkedHashMap<>(); + + /**For use with interactions, for having them handle all conditional tasks*/ + public static Function EMPTY = (tile) -> false; + + public static Function ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + boolean aoeCheck = !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(10, 10, 10)).isEmpty(); + if(tile.phase == 0) { + if(world.getTotalWorldTime() % 20 != 0) return false; + return aoeCheck; + } + if(tile.phase < 3) { + if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty() && aoeCheck; + } + return false; + }; + + public static Function PLAYER_CUBE_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); + }; + + public static Function REDSTONE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + return world.isBlockIndirectlyGettingPowered(x,y,z); + }; + + public static Function PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0 && world.isBlockIndirectlyGettingPowered(x,y,z)){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText("Find a " + EnumChatFormatting.GOLD + "great" + EnumChatFormatting.RESET + " ancient weapon, of questionable use in the modern age")); + world.setBlock(x,y + 1,z, ModBlocks.pedestal); + return true; + } + + TileEntity pedestal = world.getTileEntity(x,y + 1,z); + + return tile.phase == 1 + && pedestal instanceof BlockPedestal.TileEntityPedestal + && ((BlockPedestal.TileEntityPedestal) pedestal).item != null + && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; + }; + + public static List getConditionNames(){ + return new ArrayList<>(conditions.keySet()); + } + + //register new conditions here + static { + //example conditions + conditions.put("EMPTY", EMPTY); + conditions.put("ABERRATOR", ABERRATOR); + conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); + conditions.put("REDSTONE", REDSTONE); + conditions.put("PUZZLE_TEST", PUZZLE_TEST); + } + +} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java new file mode 100644 index 000000000..bf3bc47eb --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -0,0 +1,71 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.generic.LogicBlock; +import com.hbm.items.ModItems; +import com.hbm.potion.HbmPotion; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Consumer; + +/**Interactions are called when the player right-clicks the block**/ +public class LogicBlockInteractions { + + /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, + * in that order **/ + public static LinkedHashMap> interactions = new LinkedHashMap<>(); + + public static Consumer TEST = (array) -> { + World world = (World) array[0]; + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; + int x = (int) array[2]; + int y = (int) array[3]; + int z = (int) array[4]; + EntityPlayer player = (EntityPlayer) array[5]; + int side = (int) array[6]; + + if(logic.phase > 1) return; + + if(player.getHeldItem() != null) + player.getHeldItem().stackSize--; + + logic.phase++; + }; + + public static Consumer RAD_CONTAINMENT_SYSTEM = (array) -> { + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; + EntityPlayer player = (EntityPlayer) array[5]; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key){ + player.getHeldItem().stackSize--; + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Radiation treatment administered")); + player.addPotionEffect(new PotionEffect(HbmPotion.radaway.getId(), 3 * 60 * 20, 4)); + player.addPotionEffect(new PotionEffect(HbmPotion.radx.getId(), 3 * 60 * 20, 4)); + logic.phase = 2; + logic.timer = 0; + } + }; + + + + public static List getInteractionNames(){ + return new ArrayList<>(interactions.keySet()); + } + + //register new interactions here + static{ + interactions.put("TEST", TEST); + interactions.put("RADAWAY_INJECTOR", RAD_CONTAINMENT_SYSTEM); + } + + + +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 913b513bf..1e54344ec 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -371,6 +371,7 @@ container.leadBox=Sicherheitsbehälter container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen +container.machineAssemblyMachine=Montagemaschine container.machineBoiler=Ölwärmer container.machineChemicalFactory=Chemiefabrik container.machineChemicalPlant=Chemiewerk @@ -509,7 +510,7 @@ damage.item=Resistenz wenn getragen: damage.category.EN=Energie damage.category.EXPL=Explosion damage.category.FIRE=Feuer -damage.category.PROJ=Projektil +damage.category.PHYS=Physisch damage.exact.drown=Ertrinken damage.exact.fall=Fallschaden damage.exact.LASER=Laser @@ -1416,6 +1417,7 @@ item.blades_schrabidium.name=Schrabidiumsägeblatt item.blades_steel.name=Stahlsägeblatt item.blades_titanium.name=Titansägeblatt item.blowtorch.name=Lötlampe +item.blueprints.name=Blaupausen item.board_copper.name=Kupfertafel item.boat_rubber.name=Schlauchboot item.bobmazon.name=Bobmazon @@ -4346,8 +4348,9 @@ tile.machine_arc_welder.name=Lichtbogenschweißer tile.machine_armor_table.name=Rüstungsmodifikationstisch tile.machine_ashpit.name=Aschekasten tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen -tile.machine_assembler.name=Fertigungsmaschine +tile.machine_assembler.name=Fertigungsmaschine (Legacy) tile.machine_assemfac.name=Fertigungsfabrik +tile.machine_assembly_machine.name=Montagemaschine tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 08a834b03..fb3f37c9a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -773,6 +773,7 @@ container.leadBox=Containment Box container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace +container.machineAssemblyMachine=Assembly Machine container.machineBoiler=Oil Heater container.machineChemicalFactory=Chemical Factory container.machineChemicalPlant=Chemical Plant @@ -925,7 +926,7 @@ damage.item=Resistances when worn: damage.category.EN=Energy damage.category.EXPL=Explosion damage.category.FIRE=Fire -damage.category.PROJ=Projectile +damage.category.PHYS=Physical damage.exact.drown=Drowning damage.exact.fall=Fall damage damage.exact.LASER=Laser @@ -1033,7 +1034,7 @@ desc.gui.rtg.pellets=Accepted Pellets: desc.gui.rtg.pelletHeat=%s (%s heat) desc.gui.rtg.pelletPower=%s (%s HE/tick) desc.gui.template=§9Templates§r$Templates can be made by$using the Machine Template Folder. -desc.gui.turbinegas.automode=§2Automatic Turbine Throttling Mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the power production$based on the power required from the network +desc.gui.turbinegas.automode=§2Automatic turbine throttling mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the throttle position$based on the power required from the network$and the fuel level in the internal tank desc.gui.turbinegas.fuels=§6Accepted fuels:§r desc.gui.turbinegas.warning=§cFuel or lubricant level low!§r desc.gui.zirnox.coolant=§3Coolant§r$CO2 transfers heat from the core to the water.$This will boil it into super dense steam.$The efficiency of cooling and steam production$is based on pressure. @@ -2160,6 +2161,7 @@ item.blades_desh.name=Desh Shredder Blades item.blades_steel.name=Steel Shredder Blades item.blades_titanium.name=Titanium Shredder Blades item.blowtorch.name=Blowtorch +item.blueprints.name=Blueprints item.board_copper.name=Copper Panel item.boat_rubber.name=Rubber Boat item.bobmazon.name=Bobmazon @@ -5279,6 +5281,7 @@ tile.ducrete_smooth_stairs.name=Ducrete Stairs tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Metal Chain +tile.logic_block.name=Dungeon Action Block tile.dynamite.name=Dynamite tile.emp_bomb.name=EMP Device tile.factory_advanced_conductor.name=Advanced Factory Electricity Port @@ -5478,8 +5481,9 @@ tile.machine_arc_welder.name=Arc Welder tile.machine_armor_table.name=Armor Modification Table tile.machine_ashpit.name=Ashpit tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens -tile.machine_assembler.name=Assembly Machine +tile.machine_assembler.name=Assembly Machine (Legacy) tile.machine_assemfac.name=Assembly Factory +tile.machine_assembly_machine.name=Assembly Machine tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil @@ -6062,6 +6066,7 @@ tile.volcano_rad_core.name=Rad Volcano Core tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.wand_logic.name=Structure Wand Block (Logic) tile.waste_earth.name=Dead Grass tile.waste_leaves.name=Dead Leaves tile.waste_log.name=Charred Log @@ -6226,3 +6231,5 @@ desc.gui.upgrade.effectiveness= * §aEffectiveness§r: Stacks to level 3 desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 + +tile.oc_cable_paintable.name=Paintable Network Cable diff --git a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj index 52d865f16..1b79436d5 100644 --- a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj +++ b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj @@ -1,5 +1,302 @@ # Blender v2.79 (sub 0) OBJ File: 'assembler.blend' # www.blender.org +o Head2 +v -0.125000 2.750000 0.000000 +v 0.125000 2.750000 -0.000000 +v -0.125000 2.750000 -0.250000 +v 0.125000 2.750000 -0.250000 +v -0.125000 1.750000 -0.250000 +v -0.125000 1.750000 0.000000 +v 0.125000 1.750000 -0.000000 +v 0.125000 1.750000 -0.250000 +v -0.062500 2.500000 -0.250000 +v 0.062500 2.500000 -0.250000 +v -0.062500 2.500000 -0.437500 +v 0.062500 2.500000 -0.437500 +v -0.062500 2.250000 -0.437500 +v 0.062500 2.250000 -0.437500 +v -0.062500 2.250000 -0.250000 +v 0.062500 2.250000 -0.250000 +v 0.250000 2.625000 -0.093750 +v 0.250000 1.875000 -0.093750 +v 0.250000 2.625000 -0.156250 +v 0.250000 1.875000 -0.156250 +v 0.125000 2.625000 -0.093750 +v 0.125000 1.875000 -0.093750 +v 0.125000 2.625000 -0.156250 +v 0.125000 1.875000 -0.156250 +v 0.187500 2.562500 -0.093750 +v 0.187500 1.937500 -0.093750 +v 0.187500 2.562500 -0.156250 +v 0.187500 1.937500 -0.156250 +v 0.125000 2.562500 -0.093750 +v 0.125000 1.937500 -0.093750 +v 0.125000 2.562500 -0.156250 +v 0.125000 1.937500 -0.156250 +v -0.250001 2.625000 -0.156250 +v -0.250001 1.875000 -0.156250 +v -0.250001 2.625000 -0.093750 +v -0.250001 1.875000 -0.093750 +v -0.125001 2.625000 -0.156250 +v -0.125001 1.875000 -0.156250 +v -0.125001 2.625000 -0.093750 +v -0.125001 1.875000 -0.093750 +v -0.187501 2.562500 -0.156250 +v -0.187501 1.937500 -0.156250 +v -0.187501 2.562500 -0.093750 +v -0.187501 1.937500 -0.093750 +v -0.125001 2.562500 -0.156250 +v -0.125001 1.937500 -0.156250 +v -0.125001 2.562500 -0.093750 +v -0.125001 1.937500 -0.093750 +v -0.125000 2.375000 -0.562500 +v -0.000000 2.375000 -0.562500 +v -0.125000 2.286612 -0.525888 +v -0.000000 2.286612 -0.525888 +v -0.125000 2.250000 -0.437500 +v -0.000000 2.250000 -0.437500 +v -0.125000 2.286612 -0.349112 +v -0.000000 2.286612 -0.349112 +v -0.125000 2.375000 -0.312500 +v -0.000000 2.375000 -0.312500 +v -0.125000 2.463388 -0.349112 +v -0.000000 2.463388 -0.349112 +v -0.125000 2.500000 -0.437500 +v -0.000000 2.500000 -0.437500 +v -0.125000 2.463388 -0.525888 +v -0.000000 2.463388 -0.525888 +v -0.130000 1.875000 -0.234375 +v -0.130000 1.875000 -0.171875 +v -0.130000 2.062500 -0.234375 +v -0.130000 2.062500 -0.171875 +vt 0.750000 0.907407 +vt 0.723684 0.870370 +vt 0.750000 0.870370 +vt 0.750000 0.685185 +vt 0.723684 0.722222 +vt 0.723684 0.685185 +vt 0.802632 0.870370 +vt 0.828947 0.722222 +vt 0.828947 0.870370 +vt 0.776316 0.722222 +vt 0.776316 0.870370 +vt 0.750000 0.722222 +vt 0.802632 0.722222 +vt 0.875000 0.574074 +vt 0.861842 0.601852 +vt 0.861842 0.574074 +vt 0.875000 0.601852 +vt 0.901316 0.620370 +vt 0.875000 0.620370 +vt 0.901316 0.601852 +vt 0.914474 0.574074 +vt 0.914474 0.601852 +vt 0.901316 0.574074 +vt 0.940789 0.574074 +vt 0.940789 0.601852 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.694444 +vt 0.723684 0.685185 +vt 0.723684 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.710526 0.833333 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.710526 0.833333 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.685185 +vt 0.723684 0.694444 +vt 0.717105 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.559211 0.944444 +vt 0.460526 0.898148 +vt 0.559211 0.898148 +vt 0.723684 0.907407 +vt 0.717105 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.723684 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.460526 0.944444 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn -0.0000 0.7071 -0.7071 +s off +f 1/1/1 4/2/1 3/3/1 +f 6/4/2 8/5/2 7/6/2 +f 2/7/3 8/8/3 4/9/3 +f 3/3/4 6/10/4 1/11/4 +f 4/2/5 5/12/5 3/3/5 +f 1/11/6 7/13/6 2/7/6 +f 10/14/1 11/15/1 9/16/1 +f 12/17/5 13/18/5 11/19/5 +f 14/20/2 15/21/2 13/22/2 +f 16/23/3 12/17/3 10/14/3 +f 13/22/4 9/24/4 11/25/4 +f 18/26/3 19/27/3 17/28/3 +f 18/26/2 24/29/2 20/30/2 +f 19/27/1 21/31/1 17/28/1 +f 25/32/4 28/33/4 26/34/4 +f 28/35/1 30/36/1 26/37/1 +f 29/38/2 27/39/2 25/40/2 +f 21/31/6 25/41/6 17/28/6 +f 23/42/5 27/39/5 31/43/5 +f 20/30/5 27/44/5 19/27/5 +f 24/29/5 28/35/5 20/30/5 +f 17/28/6 26/45/6 18/26/6 +f 22/46/6 26/47/6 30/48/6 +f 34/49/4 35/50/4 33/51/4 +f 34/49/2 40/52/2 36/53/2 +f 33/51/1 39/54/1 37/55/1 +f 41/56/3 44/57/3 42/58/3 +f 48/59/1 42/60/1 44/61/1 +f 45/62/2 43/63/2 41/64/2 +f 37/55/5 41/65/5 33/51/5 +f 39/54/6 43/63/6 47/66/6 +f 36/53/6 43/67/6 35/50/6 +f 40/52/6 44/61/6 36/53/6 +f 33/51/5 42/68/5 34/49/5 +f 38/69/5 42/70/5 46/71/5 +f 62/72/3 58/73/3 54/74/3 +f 59/75/4 61/76/4 63/77/4 +f 66/78/4 67/79/4 65/80/4 +f 1/1/1 2/81/1 4/2/1 +f 6/4/2 5/12/2 8/5/2 +f 2/7/3 7/13/3 8/8/3 +f 3/3/4 5/12/4 6/10/4 +f 4/2/5 8/5/5 5/12/5 +f 1/11/6 6/10/6 7/13/6 +f 10/14/1 12/17/1 11/15/1 +f 12/17/5 14/20/5 13/18/5 +f 14/20/2 16/23/2 15/21/2 +f 16/23/3 14/20/3 12/17/3 +f 13/22/4 15/21/4 9/24/4 +f 18/26/3 20/30/3 19/27/3 +f 18/26/2 22/46/2 24/29/2 +f 19/27/1 23/42/1 21/31/1 +f 25/32/4 27/44/4 28/33/4 +f 28/35/1 32/82/1 30/36/1 +f 29/38/2 31/43/2 27/39/2 +f 21/31/6 29/83/6 25/41/6 +f 23/42/5 19/27/5 27/39/5 +f 20/30/5 28/33/5 27/44/5 +f 24/29/5 32/82/5 28/35/5 +f 17/28/6 25/84/6 26/45/6 +f 22/46/6 18/26/6 26/47/6 +f 34/49/4 36/53/4 35/50/4 +f 34/49/2 38/69/2 40/52/2 +f 33/51/1 35/50/1 39/54/1 +f 41/56/3 43/67/3 44/57/3 +f 48/59/1 46/85/1 42/60/1 +f 45/62/2 47/66/2 43/63/2 +f 37/55/5 45/86/5 41/65/5 +f 39/54/6 35/50/6 43/63/6 +f 36/53/6 44/57/6 43/67/6 +f 40/52/6 48/59/6 44/61/6 +f 33/51/5 41/87/5 42/68/5 +f 38/69/5 34/49/5 42/70/5 +f 54/74/3 52/88/3 50/89/3 +f 50/89/3 64/90/3 62/72/3 +f 62/72/3 60/91/3 58/73/3 +f 58/73/3 56/92/3 54/74/3 +f 54/74/3 50/89/3 62/72/3 +f 63/77/4 49/93/4 51/94/4 +f 51/94/4 53/95/4 63/77/4 +f 53/95/4 55/96/4 63/77/4 +f 55/96/4 57/97/4 63/77/4 +f 57/97/4 59/75/4 63/77/4 +f 66/78/4 68/98/4 67/79/4 +s 1 +f 50/99/5 51/100/7 49/101/5 +f 52/102/7 53/103/2 51/100/7 +f 54/104/2 55/105/8 53/106/2 +f 56/107/8 57/108/6 55/105/8 +f 58/109/6 59/110/9 57/108/6 +f 60/111/9 61/112/1 59/110/9 +f 62/113/1 63/114/10 61/112/1 +f 64/115/10 49/101/5 63/114/10 +f 50/99/5 52/102/7 51/100/7 +f 52/102/7 54/116/2 53/103/2 +f 54/104/2 56/107/8 55/105/8 +f 56/107/8 58/109/6 57/108/6 +f 58/109/6 60/111/9 59/110/9 +f 60/111/9 62/113/1 61/112/1 +f 62/113/1 64/115/10 63/114/10 +f 64/115/10 50/99/5 49/101/5 o Ring v -0.000000 1.250000 -1.375000 v -0.526190 1.250000 -1.270334 @@ -195,79 +492,79 @@ vt 0.210526 0.222222 vt 0.263158 0.240741 vt 0.263158 0.222222 vt 0.210526 0.259259 -vt 0.263158 0.277778 -vt 0.217105 0.277778 +vt 0.259868 0.277778 +vt 0.213816 0.277778 vt 0.157895 0.259259 -vt 0.210526 0.277778 -vt 0.164474 0.277778 +vt 0.207237 0.277778 +vt 0.161184 0.277778 vt 0.105263 0.259259 -vt 0.157895 0.277778 -vt 0.111842 0.277778 +vt 0.154605 0.277778 +vt 0.108553 0.277778 vt 0.052632 0.259259 -vt 0.105263 0.277778 -vt 0.059211 0.277778 +vt 0.101974 0.277778 +vt 0.055921 0.277778 vt -0.000000 0.259259 -vt 0.052632 0.277778 -vt 0.006579 0.277778 +vt 0.049342 0.277778 +vt 0.003289 0.277778 vt 0.842105 0.259259 -vt 0.796053 0.277778 +vt 0.792763 0.277778 vt 0.789474 0.259259 vt 0.736842 0.259259 -vt 0.789474 0.277778 -vt 0.743421 0.277778 -vt 0.690789 0.277778 +vt 0.786184 0.277778 +vt 0.740132 0.277778 +vt 0.687500 0.277778 vt 0.684211 0.259259 -vt 0.638158 0.277778 +vt 0.634869 0.277778 vt 0.631579 0.259259 -vt 0.585526 0.277778 +vt 0.582237 0.277778 vt 0.578947 0.259259 -vt 0.532895 0.277778 +vt 0.529605 0.277778 vt 0.526316 0.259259 -vt 0.480263 0.277778 +vt 0.476974 0.277778 vt 0.473684 0.259259 -vt 0.427632 0.277778 +vt 0.424342 0.277778 vt 0.421053 0.259259 -vt 0.375000 0.277778 +vt 0.371711 0.277778 vt 0.368421 0.259259 vt 0.315789 0.259259 -vt 0.368421 0.277778 -vt 0.322368 0.277778 +vt 0.365132 0.277778 +vt 0.319079 0.277778 vt 0.263158 0.259259 -vt 0.315789 0.277778 -vt 0.269737 0.277778 +vt 0.312500 0.277778 +vt 0.266447 0.277778 vt 0.263158 0.185185 -vt 0.315789 0.148148 +vt 0.312500 0.148148 vt 0.315789 0.185185 vt 0.210526 0.185185 -vt 0.263158 0.148148 +vt 0.259868 0.148148 vt 0.157895 0.185185 -vt 0.210526 0.148148 +vt 0.207237 0.148148 vt 0.105263 0.185185 -vt 0.157895 0.148148 +vt 0.154605 0.148148 vt 0.052632 0.185185 -vt 0.105263 0.148148 +vt 0.101974 0.148148 vt 0.000000 0.185185 -vt 0.052632 0.148148 -vt 0.796053 0.148148 +vt 0.049342 0.148148 +vt 0.792763 0.148148 vt 0.842105 0.185185 vt 0.789474 0.185185 -vt 0.743421 0.148148 +vt 0.740132 0.148148 vt 0.736842 0.185185 -vt 0.690789 0.148148 +vt 0.687500 0.148148 vt 0.684211 0.185185 -vt 0.638158 0.148148 +vt 0.634869 0.148148 vt 0.631579 0.185185 -vt 0.585526 0.148148 +vt 0.582237 0.148148 vt 0.578947 0.185185 -vt 0.532895 0.148148 +vt 0.529605 0.148148 vt 0.526316 0.185185 -vt 0.480263 0.148148 +vt 0.476974 0.148148 vt 0.473684 0.185185 -vt 0.427632 0.148148 +vt 0.424342 0.148148 vt 0.421053 0.185185 -vt 0.375000 0.148148 +vt 0.371711 0.148148 vt 0.368421 0.185185 -vt 0.368421 0.148148 +vt 0.365132 0.148148 vt 0.861842 0.490741 vt 0.796053 0.518519 vt 0.796053 0.490741 @@ -327,72 +624,72 @@ vt 0.894737 0.444444 vt 0.947368 0.444444 vt 0.934211 0.462963 vt 0.842105 0.240741 -vt 0.842105 0.277778 -vt 0.736842 0.277778 -vt 0.684211 0.277778 -vt 0.631579 0.277778 -vt 0.578947 0.277778 -vt 0.526316 0.277778 -vt 0.473684 0.277778 -vt 0.421053 0.277778 -vt 0.269737 0.148148 -vt 0.217105 0.148148 -vt 0.164474 0.148148 -vt 0.111842 0.148148 -vt 0.059211 0.148148 -vt 0.006579 0.148148 -vt 0.842105 0.148148 -vt 0.789474 0.148148 -vt 0.736842 0.148148 -vt 0.684211 0.148148 -vt 0.631579 0.148148 -vt 0.578947 0.148148 -vt 0.526316 0.148148 -vt 0.473684 0.148148 -vt 0.421053 0.148148 -vt 0.322368 0.148148 +vt 0.838816 0.277778 +vt 0.733553 0.277778 +vt 0.680921 0.277778 +vt 0.628289 0.277778 +vt 0.575658 0.277778 +vt 0.523026 0.277778 +vt 0.470395 0.277778 +vt 0.417763 0.277778 +vt 0.266447 0.148148 +vt 0.213816 0.148148 +vt 0.161184 0.148148 +vt 0.108553 0.148148 +vt 0.055921 0.148148 +vt 0.003289 0.148148 +vt 0.838816 0.148148 +vt 0.786184 0.148148 +vt 0.733553 0.148148 +vt 0.680921 0.148148 +vt 0.628289 0.148148 +vt 0.575658 0.148148 +vt 0.523026 0.148148 +vt 0.470395 0.148148 +vt 0.417763 0.148148 +vt 0.319079 0.148148 vt 0.947368 0.574074 -vt 0.732956 0.598061 +vt 0.732957 0.598061 vt 0.736797 0.611111 vt 0.732957 0.624161 vt 0.714412 0.624161 vt 0.714412 0.598061 vt 0.684256 0.611111 vt 0.697369 0.592656 -vt 0.710481 0.611111 +vt 0.710482 0.611111 vt 0.706641 0.624161 vt 0.697369 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 vt 0.947368 0.574074 -vt 0.732956 0.598061 +vt 0.732957 0.598061 vt 0.736797 0.611111 vt 0.732957 0.624161 vt 0.714412 0.624161 vt 0.714412 0.598061 vt 0.684256 0.611111 vt 0.697369 0.592656 -vt 0.710481 0.611111 +vt 0.710482 0.611111 vt 0.706641 0.624161 vt 0.697369 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 -vt 0.322368 0.296296 -vt 0.796053 0.296296 -vt 0.375000 0.296296 -vt 0.006579 0.296296 -vt 0.427632 0.296296 -vt 0.059211 0.296296 -vt 0.480263 0.296296 -vt 0.111842 0.296296 -vt 0.532895 0.296296 -vt 0.164474 0.296296 -vt 0.638158 0.296296 -vt 0.585526 0.296296 -vt 0.217105 0.296296 -vt 0.690789 0.296296 -vt 0.269737 0.296296 -vt 0.743421 0.296296 +vt 0.319079 0.296296 +vt 0.792763 0.296296 +vt 0.371711 0.296296 +vt 0.003289 0.296296 +vt 0.424342 0.296296 +vt 0.055921 0.296296 +vt 0.476974 0.296296 +vt 0.108553 0.296296 +vt 0.529605 0.296296 +vt 0.161184 0.296296 +vt 0.634869 0.296296 +vt 0.582237 0.296296 +vt 0.213816 0.296296 +vt 0.687500 0.296296 +vt 0.266447 0.296296 +vt 0.740132 0.296296 vt 0.763158 0.574074 vt 0.776316 0.592593 vt 0.763158 0.592593 @@ -427,22 +724,22 @@ vt 0.736842 0.592593 vt 0.736842 0.574074 vt 0.750000 0.592593 vt 0.750000 0.574074 -vt 0.368421 0.296296 -vt 0.842105 0.296296 -vt 0.421053 0.296296 -vt 0.052632 0.296296 -vt 0.473684 0.296296 -vt 0.105263 0.296296 -vt 0.526316 0.296296 -vt 0.157895 0.296296 -vt 0.578947 0.296296 -vt 0.210526 0.296296 -vt 0.684211 0.296296 -vt 0.631579 0.296296 -vt 0.263158 0.296296 -vt 0.736842 0.296296 -vt 0.315789 0.296296 -vt 0.789474 0.296296 +vt 0.365132 0.296296 +vt 0.838816 0.296296 +vt 0.417763 0.296296 +vt 0.049342 0.296296 +vt 0.470395 0.296296 +vt 0.101974 0.296296 +vt 0.523026 0.296296 +vt 0.154605 0.296296 +vt 0.575658 0.296296 +vt 0.207237 0.296296 +vt 0.680921 0.296296 +vt 0.628289 0.296296 +vt 0.259868 0.296296 +vt 0.733553 0.296296 +vt 0.312500 0.296296 +vt 0.786184 0.296296 vt 0.789474 0.574074 vt 0.776316 0.574074 vn 0.0000 1.0000 0.0000 @@ -468,299 +765,299 @@ vn 0.0000 -0.7071 0.7071 vn 0.0000 0.7071 0.7071 vn 0.0000 0.7071 -0.7071 s off -f 27/1/1 44/2/1 43/3/1 -f 28/4/1 45/5/1 44/2/1 -f 30/6/1 45/5/1 29/7/1 -f 31/8/1 46/9/1 30/6/1 -f 32/10/1 47/11/1 31/8/1 -f 17/12/1 48/13/1 32/10/1 -f 18/14/1 33/15/1 17/12/1 -f 19/16/1 34/17/1 18/14/1 -f 20/18/1 35/19/1 19/16/1 -f 21/20/1 36/21/1 20/18/1 -f 22/22/1 37/23/1 21/24/1 -f 22/22/1 39/25/1 38/26/1 -f 23/27/1 40/28/1 39/25/1 -f 24/29/1 41/30/1 40/28/1 -f 25/31/1 42/32/1 41/30/1 -f 26/33/1 43/3/1 42/32/1 -f 57/34/1 74/35/1 73/36/1 -f 56/37/1 73/38/1 72/39/1 -f 55/40/1 72/41/1 71/42/1 -f 54/43/1 71/44/1 70/45/1 -f 53/46/1 70/47/1 69/48/1 -f 53/49/1 68/50/1 52/51/1 -f 51/52/1 68/53/1 67/54/1 -f 51/52/1 66/55/1 50/56/1 -f 50/56/1 65/57/1 49/58/1 -f 49/58/1 80/59/1 64/60/1 -f 64/60/1 79/61/1 63/62/1 -f 63/62/1 78/63/1 62/64/1 -f 62/64/1 77/65/1 61/66/1 -f 61/66/1 76/67/1 60/68/1 -f 59/69/1 76/70/1 75/71/1 -f 58/72/1 75/73/1 74/74/1 -f 10/75/2 91/76/2 11/77/2 -f 9/78/2 90/79/2 10/75/2 -f 8/80/2 89/81/2 9/78/2 -f 7/82/2 88/83/2 8/80/2 -f 6/84/2 87/85/2 7/82/2 -f 5/86/2 86/87/2 6/84/2 -f 84/88/2 5/89/2 4/90/2 -f 83/91/2 4/90/2 3/92/2 -f 82/93/2 3/92/2 2/94/2 -f 81/95/2 2/94/2 1/96/2 -f 96/97/2 1/96/2 16/98/2 -f 95/99/2 16/98/2 15/100/2 -f 94/101/2 15/100/2 14/102/2 -f 93/103/2 14/102/2 13/104/2 -f 92/105/2 13/104/2 12/106/2 -f 11/77/2 92/107/2 12/106/2 -f 99/108/2 98/109/2 97/110/2 -f 103/111/1 101/112/1 102/113/1 -f 98/109/3 102/114/3 97/115/3 -f 100/116/4 103/111/4 98/109/4 -f 97/117/5 101/118/5 99/119/5 -f 99/119/6 104/120/6 100/116/6 -f 118/121/4 114/122/4 110/123/4 -f 119/124/5 107/125/5 111/126/5 -f 127/127/1 125/128/1 126/129/1 -f 122/130/6 126/129/6 121/131/6 -f 124/132/5 127/133/5 122/130/5 -f 121/131/4 125/128/4 123/134/4 -f 123/135/3 128/136/3 124/132/3 -f 131/137/2 130/138/2 129/139/2 -f 135/140/1 133/141/1 134/142/1 -f 130/138/6 134/143/6 129/144/6 -f 132/145/5 135/140/5 130/138/5 -f 129/146/4 133/147/4 131/148/4 -f 131/148/3 136/149/3 132/145/3 -f 150/150/5 146/151/5 142/152/5 -f 151/153/4 139/154/4 143/155/4 -f 159/156/1 157/157/1 158/158/1 -f 154/159/3 158/158/3 153/160/3 -f 156/161/4 159/162/4 154/159/4 -f 153/160/5 157/157/5 155/163/5 -f 155/164/6 160/165/6 156/161/6 -f 27/1/1 28/4/1 44/2/1 -f 28/4/1 29/7/1 45/5/1 -f 30/6/1 46/9/1 45/5/1 -f 31/8/1 47/11/1 46/9/1 -f 32/10/1 48/13/1 47/11/1 -f 17/12/1 33/15/1 48/13/1 -f 18/14/1 34/17/1 33/15/1 -f 19/16/1 35/19/1 34/17/1 -f 20/18/1 36/21/1 35/19/1 -f 21/20/1 37/166/1 36/21/1 -f 22/22/1 38/26/1 37/23/1 -f 22/22/1 23/27/1 39/25/1 -f 23/27/1 24/29/1 40/28/1 -f 24/29/1 25/31/1 41/30/1 -f 25/31/1 26/33/1 42/32/1 -f 26/33/1 27/1/1 43/3/1 -f 57/34/1 58/72/1 74/35/1 -f 56/37/1 57/34/1 73/38/1 -f 55/40/1 56/37/1 72/41/1 -f 54/43/1 55/40/1 71/44/1 -f 53/46/1 54/43/1 70/47/1 -f 53/49/1 69/167/1 68/50/1 -f 51/52/1 52/51/1 68/53/1 -f 51/52/1 67/168/1 66/55/1 -f 50/56/1 66/169/1 65/57/1 -f 49/58/1 65/170/1 80/59/1 -f 64/60/1 80/171/1 79/61/1 -f 63/62/1 79/172/1 78/63/1 -f 62/64/1 78/173/1 77/65/1 -f 61/66/1 77/174/1 76/67/1 -f 59/69/1 60/68/1 76/70/1 -f 58/72/1 59/69/1 75/73/1 -f 10/75/2 90/175/2 91/76/2 -f 9/78/2 89/176/2 90/79/2 -f 8/80/2 88/177/2 89/81/2 -f 7/82/2 87/178/2 88/83/2 -f 6/84/2 86/179/2 87/85/2 -f 5/86/2 85/180/2 86/87/2 -f 84/88/2 85/181/2 5/89/2 -f 83/91/2 84/182/2 4/90/2 -f 82/93/2 83/183/2 3/92/2 -f 81/95/2 82/184/2 2/94/2 -f 96/97/2 81/185/2 1/96/2 -f 95/99/2 96/186/2 16/98/2 -f 94/101/2 95/187/2 15/100/2 -f 93/103/2 94/188/2 14/102/2 -f 92/105/2 93/189/2 13/104/2 -f 11/77/2 91/190/2 92/107/2 -f 99/108/2 100/116/2 98/109/2 -f 103/111/1 104/120/1 101/112/1 -f 98/109/3 103/111/3 102/114/3 -f 100/116/4 104/120/4 103/111/4 -f 97/117/5 102/191/5 101/118/5 -f 99/119/6 101/118/6 104/120/6 -f 110/123/4 108/192/4 106/193/4 -f 106/193/4 120/194/4 110/123/4 -f 120/194/4 118/121/4 110/123/4 -f 118/121/4 116/195/4 114/122/4 -f 114/122/4 112/196/4 110/123/4 -f 119/124/5 105/197/5 107/125/5 -f 107/125/5 109/198/5 111/126/5 -f 111/126/5 113/199/5 119/124/5 -f 113/199/5 115/200/5 119/124/5 -f 115/200/5 117/201/5 119/124/5 -f 127/127/1 128/202/1 125/128/1 -f 122/130/6 127/133/6 126/129/6 -f 124/132/5 128/136/5 127/133/5 -f 121/131/4 126/129/4 125/128/4 -f 123/135/3 125/203/3 128/136/3 -f 131/137/2 132/145/2 130/138/2 -f 135/140/1 136/149/1 133/141/1 -f 130/138/6 135/140/6 134/143/6 -f 132/145/5 136/149/5 135/140/5 -f 129/146/4 134/204/4 133/147/4 -f 131/148/3 133/147/3 136/149/3 -f 142/152/5 140/205/5 138/206/5 -f 138/206/5 152/207/5 142/152/5 -f 152/207/5 150/150/5 142/152/5 -f 150/150/5 148/208/5 146/151/5 -f 146/151/5 144/209/5 142/152/5 -f 151/153/4 137/210/4 139/154/4 -f 139/154/4 141/211/4 143/155/4 -f 143/155/4 145/212/4 151/153/4 -f 145/212/4 147/213/4 151/153/4 -f 147/213/4 149/214/4 151/153/4 -f 159/156/1 160/215/1 157/157/1 -f 154/159/3 159/162/3 158/158/3 -f 156/161/4 160/165/4 159/162/4 -f 153/160/5 158/158/5 157/157/5 -f 155/164/6 157/216/6 160/165/6 +f 95/117/11 112/118/11 111/119/11 +f 96/120/11 113/121/11 112/118/11 +f 98/122/11 113/121/11 97/123/11 +f 99/124/11 114/125/11 98/122/11 +f 100/126/11 115/127/11 99/124/11 +f 85/128/11 116/129/11 100/126/11 +f 86/130/11 101/131/11 85/128/11 +f 87/132/11 102/133/11 86/130/11 +f 88/134/11 103/135/11 87/132/11 +f 89/136/11 104/137/11 88/134/11 +f 90/138/11 105/139/11 89/140/11 +f 90/138/11 107/141/11 106/142/11 +f 91/143/11 108/144/11 107/141/11 +f 92/145/11 109/146/11 108/144/11 +f 93/147/11 110/148/11 109/146/11 +f 94/149/11 111/119/11 110/148/11 +f 125/150/11 142/151/11 141/152/11 +f 124/153/11 141/154/11 140/155/11 +f 123/156/11 140/157/11 139/158/11 +f 122/159/11 139/160/11 138/161/11 +f 121/162/11 138/163/11 137/164/11 +f 121/165/11 136/166/11 120/167/11 +f 119/168/11 136/169/11 135/170/11 +f 119/168/11 134/171/11 118/172/11 +f 118/172/11 133/173/11 117/174/11 +f 117/174/11 148/175/11 132/176/11 +f 132/176/11 147/177/11 131/178/11 +f 131/178/11 146/179/11 130/180/11 +f 130/180/11 145/181/11 129/182/11 +f 129/182/11 144/183/11 128/184/11 +f 127/185/11 144/186/11 143/187/11 +f 126/188/11 143/189/11 142/190/11 +f 78/191/12 159/192/12 79/193/12 +f 77/194/12 158/195/12 78/191/12 +f 76/196/12 157/197/12 77/194/12 +f 75/198/12 156/199/12 76/196/12 +f 74/200/12 155/201/12 75/198/12 +f 73/202/12 154/203/12 74/200/12 +f 152/204/12 73/205/12 72/206/12 +f 151/207/12 72/206/12 71/208/12 +f 150/209/12 71/208/12 70/210/12 +f 149/211/12 70/210/12 69/212/12 +f 164/213/12 69/212/12 84/214/12 +f 163/215/12 84/214/12 83/216/12 +f 162/217/12 83/216/12 82/218/12 +f 161/219/12 82/218/12 81/220/12 +f 160/221/12 81/220/12 80/222/12 +f 79/193/12 160/223/12 80/222/12 +f 167/224/12 166/225/12 165/226/12 +f 171/227/11 169/228/11 170/229/11 +f 166/225/13 170/230/13 165/231/13 +f 168/232/14 171/227/14 166/225/14 +f 165/233/15 169/234/15 167/235/15 +f 167/235/16 172/236/16 168/232/16 +f 186/237/14 182/238/14 178/239/14 +f 187/240/15 175/241/15 179/242/15 +f 195/243/11 193/244/11 194/245/11 +f 190/246/16 194/245/16 189/247/16 +f 192/248/15 195/249/15 190/246/15 +f 189/247/14 193/244/14 191/250/14 +f 191/251/13 196/252/13 192/248/13 +f 199/253/12 198/254/12 197/255/12 +f 203/256/11 201/257/11 202/258/11 +f 198/254/16 202/259/16 197/260/16 +f 200/261/15 203/256/15 198/254/15 +f 197/262/14 201/263/14 199/264/14 +f 199/264/13 204/265/13 200/261/13 +f 218/266/15 214/267/15 210/268/15 +f 219/269/14 207/270/14 211/271/14 +f 227/272/11 225/273/11 226/274/11 +f 222/275/13 226/274/13 221/276/13 +f 224/277/14 227/278/14 222/275/14 +f 221/276/15 225/273/15 223/279/15 +f 223/280/16 228/281/16 224/277/16 +f 95/117/11 96/120/11 112/118/11 +f 96/120/11 97/123/11 113/121/11 +f 98/122/11 114/125/11 113/121/11 +f 99/124/11 115/127/11 114/125/11 +f 100/126/11 116/129/11 115/127/11 +f 85/128/11 101/131/11 116/129/11 +f 86/130/11 102/133/11 101/131/11 +f 87/132/11 103/135/11 102/133/11 +f 88/134/11 104/137/11 103/135/11 +f 89/136/11 105/282/11 104/137/11 +f 90/138/11 106/142/11 105/139/11 +f 90/138/11 91/143/11 107/141/11 +f 91/143/11 92/145/11 108/144/11 +f 92/145/11 93/147/11 109/146/11 +f 93/147/11 94/149/11 110/148/11 +f 94/149/11 95/117/11 111/119/11 +f 125/150/11 126/188/11 142/151/11 +f 124/153/11 125/150/11 141/154/11 +f 123/156/11 124/153/11 140/157/11 +f 122/159/11 123/156/11 139/160/11 +f 121/162/11 122/159/11 138/163/11 +f 121/165/11 137/283/11 136/166/11 +f 119/168/11 120/167/11 136/169/11 +f 119/168/11 135/284/11 134/171/11 +f 118/172/11 134/285/11 133/173/11 +f 117/174/11 133/286/11 148/175/11 +f 132/176/11 148/287/11 147/177/11 +f 131/178/11 147/288/11 146/179/11 +f 130/180/11 146/289/11 145/181/11 +f 129/182/11 145/290/11 144/183/11 +f 127/185/11 128/184/11 144/186/11 +f 126/188/11 127/185/11 143/189/11 +f 78/191/12 158/291/12 159/192/12 +f 77/194/12 157/292/12 158/195/12 +f 76/196/12 156/293/12 157/197/12 +f 75/198/12 155/294/12 156/199/12 +f 74/200/12 154/295/12 155/201/12 +f 73/202/12 153/296/12 154/203/12 +f 152/204/12 153/297/12 73/205/12 +f 151/207/12 152/298/12 72/206/12 +f 150/209/12 151/299/12 71/208/12 +f 149/211/12 150/300/12 70/210/12 +f 164/213/12 149/301/12 69/212/12 +f 163/215/12 164/302/12 84/214/12 +f 162/217/12 163/303/12 83/216/12 +f 161/219/12 162/304/12 82/218/12 +f 160/221/12 161/305/12 81/220/12 +f 79/193/12 159/306/12 160/223/12 +f 167/224/12 168/232/12 166/225/12 +f 171/227/11 172/236/11 169/228/11 +f 166/225/13 171/227/13 170/230/13 +f 168/232/14 172/236/14 171/227/14 +f 165/233/15 170/307/15 169/234/15 +f 167/235/16 169/234/16 172/236/16 +f 178/239/14 176/308/14 174/309/14 +f 174/309/14 188/310/14 178/239/14 +f 188/310/14 186/237/14 178/239/14 +f 186/237/14 184/311/14 182/238/14 +f 182/238/14 180/312/14 178/239/14 +f 187/240/15 173/313/15 175/241/15 +f 175/241/15 177/314/15 179/242/15 +f 179/242/15 181/315/15 187/240/15 +f 181/315/15 183/316/15 187/240/15 +f 183/316/15 185/317/15 187/240/15 +f 195/243/11 196/318/11 193/244/11 +f 190/246/16 195/249/16 194/245/16 +f 192/248/15 196/252/15 195/249/15 +f 189/247/14 194/245/14 193/244/14 +f 191/251/13 193/319/13 196/252/13 +f 199/253/12 200/261/12 198/254/12 +f 203/256/11 204/265/11 201/257/11 +f 198/254/16 203/256/16 202/259/16 +f 200/261/15 204/265/15 203/256/15 +f 197/262/14 202/320/14 201/263/14 +f 199/264/13 201/263/13 204/265/13 +f 210/268/15 208/321/15 206/322/15 +f 206/322/15 220/323/15 210/268/15 +f 220/323/15 218/266/15 210/268/15 +f 218/266/15 216/324/15 214/267/15 +f 214/267/15 212/325/15 210/268/15 +f 219/269/14 205/326/14 207/270/14 +f 207/270/14 209/327/14 211/271/14 +f 211/271/14 213/328/14 219/269/14 +f 213/328/14 215/329/14 219/269/14 +f 215/329/14 217/330/14 219/269/14 +f 227/272/11 228/331/11 225/273/11 +f 222/275/13 227/278/13 226/274/13 +f 224/277/14 228/281/14 227/278/14 +f 221/276/15 226/274/15 225/273/15 +f 223/280/16 225/332/16 228/281/16 s 1 -f 13/104/4 28/4/7 12/106/7 -f 6/84/8 21/24/5 5/86/5 -f 14/102/9 29/7/4 13/104/4 -f 7/82/10 22/22/8 6/84/8 -f 15/100/11 30/6/9 14/102/9 -f 8/80/12 23/27/10 7/82/10 -f 16/98/13 31/8/11 15/100/11 -f 9/78/3 24/29/12 8/80/12 -f 2/94/14 17/12/6 1/96/6 -f 1/96/6 32/10/13 16/98/13 -f 10/75/15 25/31/3 9/78/3 -f 3/92/16 18/14/14 2/94/14 -f 11/77/17 26/33/15 10/75/15 -f 4/90/18 19/16/16 3/92/16 -f 12/106/7 27/1/17 11/77/17 -f 5/89/5 20/18/18 4/90/18 -f 34/17/15 49/58/3 33/15/3 -f 33/15/3 64/60/12 48/13/12 -f 42/32/14 57/34/6 41/30/6 -f 35/19/17 50/56/15 34/17/15 -f 43/3/16 58/72/14 42/32/14 -f 36/21/7 51/52/17 35/19/17 -f 44/2/18 59/69/16 43/3/16 -f 37/166/4 52/51/7 36/21/7 -f 45/5/5 60/68/18 44/2/18 -f 38/26/9 53/46/4 37/23/4 -f 46/9/8 61/66/5 45/5/5 -f 39/25/11 54/43/9 38/26/9 -f 47/11/10 62/64/8 46/9/8 -f 40/28/13 55/40/11 39/25/11 -f 48/13/12 63/62/10 47/11/10 -f 41/30/6 56/37/13 40/28/13 -f 76/70/18 91/217/16 75/71/16 -f 69/167/4 84/218/7 68/50/7 -f 77/174/5 92/219/18 76/67/18 -f 70/47/9 85/220/4 69/48/4 -f 78/173/8 93/221/5 77/65/5 -f 71/44/11 86/222/9 70/45/9 -f 79/172/10 94/223/8 78/63/8 -f 72/41/13 87/224/11 71/42/11 -f 80/171/12 95/225/10 79/61/10 -f 73/38/6 88/226/13 72/39/13 -f 66/169/15 81/227/3 65/57/3 -f 65/170/3 96/228/12 80/59/12 -f 74/35/14 89/229/6 73/36/6 -f 67/168/17 82/230/15 66/55/15 -f 75/73/16 90/231/14 74/74/14 -f 68/53/7 83/232/17 67/54/17 -f 106/233/6 107/234/19 105/235/6 -f 108/236/19 109/237/2 107/234/19 -f 110/238/2 111/239/20 109/240/2 -f 112/241/20 113/242/3 111/239/20 -f 114/243/3 115/244/21 113/242/3 -f 116/245/21 117/246/1 115/244/21 -f 118/247/1 119/248/22 117/246/1 -f 120/249/22 105/235/6 119/248/22 -f 138/250/3 139/251/20 137/252/3 -f 139/251/20 142/253/2 141/254/2 -f 142/255/2 143/256/19 141/257/2 -f 144/258/19 145/259/6 143/256/19 -f 146/260/6 147/261/22 145/259/6 -f 148/262/22 149/263/1 147/261/22 -f 150/264/1 151/265/21 149/263/1 -f 152/266/21 137/252/3 151/265/21 -f 13/104/4 29/7/4 28/4/7 -f 6/84/8 22/22/8 21/24/5 -f 14/102/9 30/6/9 29/7/4 -f 7/82/10 23/27/10 22/22/8 -f 15/100/11 31/8/11 30/6/9 -f 8/80/12 24/29/12 23/27/10 -f 16/98/13 32/10/13 31/8/11 -f 9/78/3 25/31/3 24/29/12 -f 2/94/14 18/14/14 17/12/6 -f 1/96/6 17/12/6 32/10/13 -f 10/75/15 26/33/15 25/31/3 -f 3/92/16 19/16/16 18/14/14 -f 11/77/17 27/1/17 26/33/15 -f 4/90/18 20/18/18 19/16/16 -f 12/106/7 28/4/7 27/1/17 -f 5/89/5 21/20/5 20/18/18 -f 34/17/15 50/56/15 49/58/3 -f 33/15/3 49/58/3 64/60/12 -f 42/32/14 58/72/14 57/34/6 -f 35/19/17 51/52/17 50/56/15 -f 43/3/16 59/69/16 58/72/14 -f 36/21/7 52/51/7 51/52/17 -f 44/2/18 60/68/18 59/69/16 -f 37/166/4 53/49/4 52/51/7 -f 45/5/5 61/66/5 60/68/18 -f 38/26/9 54/43/9 53/46/4 -f 46/9/8 62/64/8 61/66/5 -f 39/25/11 55/40/11 54/43/9 -f 47/11/10 63/62/10 62/64/8 -f 40/28/13 56/37/13 55/40/11 -f 48/13/12 64/60/12 63/62/10 -f 41/30/6 57/34/6 56/37/13 -f 76/70/18 92/267/18 91/217/16 -f 69/167/4 85/268/4 84/218/7 -f 77/174/5 93/269/5 92/219/18 -f 70/47/9 86/270/9 85/220/4 -f 78/173/8 94/271/8 93/221/5 -f 71/44/11 87/272/11 86/222/9 -f 79/172/10 95/273/10 94/223/8 -f 72/41/13 88/274/13 87/224/11 -f 80/171/12 96/275/12 95/225/10 -f 73/38/6 89/276/6 88/226/13 -f 66/169/15 82/277/15 81/227/3 -f 65/170/3 81/278/3 96/228/12 -f 74/35/14 90/279/14 89/229/6 -f 67/168/17 83/280/17 82/230/15 -f 75/73/16 91/281/16 90/231/14 -f 68/53/7 84/282/7 83/232/17 -f 106/233/6 108/236/19 107/234/19 -f 108/236/19 110/283/2 109/237/2 -f 110/238/2 112/241/20 111/239/20 -f 112/241/20 114/243/3 113/242/3 -f 114/243/3 116/245/21 115/244/21 -f 116/245/21 118/247/1 117/246/1 -f 118/247/1 120/249/22 119/248/22 -f 120/249/22 106/233/6 105/235/6 -f 138/250/3 140/284/20 139/251/20 -f 139/251/20 140/284/20 142/253/2 -f 142/255/2 144/258/19 143/256/19 -f 144/258/19 146/260/6 145/259/6 -f 146/260/6 148/262/22 147/261/22 -f 148/262/22 150/264/1 149/263/1 -f 150/264/1 152/266/21 151/265/21 -f 152/266/21 138/250/3 137/252/3 +f 81/220/14 96/120/17 80/222/17 +f 74/200/18 89/140/15 73/202/15 +f 82/218/19 97/123/14 81/220/14 +f 75/198/20 90/138/18 74/200/18 +f 83/216/21 98/122/19 82/218/19 +f 76/196/22 91/143/20 75/198/20 +f 84/214/23 99/124/21 83/216/21 +f 77/194/13 92/145/22 76/196/22 +f 70/210/24 85/128/16 69/212/16 +f 69/212/16 100/126/23 84/214/23 +f 78/191/25 93/147/13 77/194/13 +f 71/208/26 86/130/24 70/210/24 +f 79/193/27 94/149/25 78/191/25 +f 72/206/28 87/132/26 71/208/26 +f 80/222/17 95/117/27 79/193/27 +f 73/205/15 88/134/28 72/206/28 +f 102/133/25 117/174/13 101/131/13 +f 101/131/13 132/176/22 116/129/22 +f 110/148/24 125/150/16 109/146/16 +f 103/135/27 118/172/25 102/133/25 +f 111/119/26 126/188/24 110/148/24 +f 104/137/17 119/168/27 103/135/27 +f 112/118/28 127/185/26 111/119/26 +f 105/282/14 120/167/17 104/137/17 +f 113/121/15 128/184/28 112/118/28 +f 106/142/19 121/162/14 105/139/14 +f 114/125/18 129/182/15 113/121/15 +f 107/141/21 122/159/19 106/142/19 +f 115/127/20 130/180/18 114/125/18 +f 108/144/23 123/156/21 107/141/21 +f 116/129/22 131/178/20 115/127/20 +f 109/146/16 124/153/23 108/144/23 +f 144/186/28 159/333/26 143/187/26 +f 137/283/14 152/334/17 136/166/17 +f 145/290/15 160/335/28 144/183/28 +f 138/163/19 153/336/14 137/164/14 +f 146/289/18 161/337/15 145/181/15 +f 139/160/21 154/338/19 138/161/19 +f 147/288/20 162/339/18 146/179/18 +f 140/157/23 155/340/21 139/158/21 +f 148/287/22 163/341/20 147/177/20 +f 141/154/16 156/342/23 140/155/23 +f 134/285/25 149/343/13 133/173/13 +f 133/286/13 164/344/22 148/175/22 +f 142/151/24 157/345/16 141/152/16 +f 135/284/27 150/346/25 134/171/25 +f 143/189/26 158/347/24 142/190/24 +f 136/169/17 151/348/27 135/170/27 +f 174/349/16 175/350/29 173/351/16 +f 176/352/29 177/353/12 175/350/29 +f 178/354/12 179/355/30 177/356/12 +f 180/357/30 181/358/13 179/355/30 +f 182/359/13 183/360/31 181/358/13 +f 184/361/31 185/362/11 183/360/31 +f 186/363/11 187/364/32 185/362/11 +f 188/365/32 173/351/16 187/364/32 +f 206/366/13 207/367/30 205/368/13 +f 207/367/30 210/369/12 209/370/12 +f 210/371/12 211/372/29 209/373/12 +f 212/374/29 213/375/16 211/372/29 +f 214/376/16 215/377/32 213/375/16 +f 216/378/32 217/379/11 215/377/32 +f 218/380/11 219/381/31 217/379/11 +f 220/382/31 205/368/13 219/381/31 +f 81/220/14 97/123/14 96/120/17 +f 74/200/18 90/138/18 89/140/15 +f 82/218/19 98/122/19 97/123/14 +f 75/198/20 91/143/20 90/138/18 +f 83/216/21 99/124/21 98/122/19 +f 76/196/22 92/145/22 91/143/20 +f 84/214/23 100/126/23 99/124/21 +f 77/194/13 93/147/13 92/145/22 +f 70/210/24 86/130/24 85/128/16 +f 69/212/16 85/128/16 100/126/23 +f 78/191/25 94/149/25 93/147/13 +f 71/208/26 87/132/26 86/130/24 +f 79/193/27 95/117/27 94/149/25 +f 72/206/28 88/134/28 87/132/26 +f 80/222/17 96/120/17 95/117/27 +f 73/205/15 89/136/15 88/134/28 +f 102/133/25 118/172/25 117/174/13 +f 101/131/13 117/174/13 132/176/22 +f 110/148/24 126/188/24 125/150/16 +f 103/135/27 119/168/27 118/172/25 +f 111/119/26 127/185/26 126/188/24 +f 104/137/17 120/167/17 119/168/27 +f 112/118/28 128/184/28 127/185/26 +f 105/282/14 121/165/14 120/167/17 +f 113/121/15 129/182/15 128/184/28 +f 106/142/19 122/159/19 121/162/14 +f 114/125/18 130/180/18 129/182/15 +f 107/141/21 123/156/21 122/159/19 +f 115/127/20 131/178/20 130/180/18 +f 108/144/23 124/153/23 123/156/21 +f 116/129/22 132/176/22 131/178/20 +f 109/146/16 125/150/16 124/153/23 +f 144/186/28 160/383/28 159/333/26 +f 137/283/14 153/384/14 152/334/17 +f 145/290/15 161/385/15 160/335/28 +f 138/163/19 154/386/19 153/336/14 +f 146/289/18 162/387/18 161/337/15 +f 139/160/21 155/388/21 154/338/19 +f 147/288/20 163/389/20 162/339/18 +f 140/157/23 156/390/23 155/340/21 +f 148/287/22 164/391/22 163/341/20 +f 141/154/16 157/392/16 156/342/23 +f 134/285/25 150/393/25 149/343/13 +f 133/286/13 149/394/13 164/344/22 +f 142/151/24 158/395/24 157/345/16 +f 135/284/27 151/396/27 150/346/25 +f 143/189/26 159/397/26 158/347/24 +f 136/169/17 152/398/17 151/348/27 +f 174/349/16 176/352/29 175/350/29 +f 176/352/29 178/399/12 177/353/12 +f 178/354/12 180/357/30 179/355/30 +f 180/357/30 182/359/13 181/358/13 +f 182/359/13 184/361/31 183/360/31 +f 184/361/31 186/363/11 185/362/11 +f 186/363/11 188/365/32 187/364/32 +f 188/365/32 174/349/16 173/351/16 +f 206/366/13 208/400/30 207/367/30 +f 207/367/30 208/400/30 210/369/12 +f 210/371/12 212/374/29 211/372/29 +f 212/374/29 214/376/16 213/375/16 +f 214/376/16 216/378/32 215/377/32 +f 216/378/32 218/380/11 217/379/11 +f 218/380/11 220/382/31 219/381/31 +f 220/382/31 206/366/13 205/368/13 o ArmLower1 v 0.031250 1.625000 0.875000 v 0.093750 1.625000 0.875000 @@ -891,71 +1188,71 @@ vn 0.0000 0.7071 -0.7071 vn 0.0000 1.0000 -0.0000 vn 0.0000 0.7071 0.7071 s off -f 163/285/23 165/286/23 164/287/23 -f 162/288/24 166/289/24 163/285/24 -f 161/290/25 168/291/25 162/292/25 -f 164/287/26 167/293/26 161/290/26 -f 182/294/26 178/295/26 174/296/26 -f 183/297/24 171/298/24 175/299/24 -f 198/300/26 194/301/26 190/302/26 -f 195/303/24 197/304/24 199/305/24 -f 163/285/23 166/289/23 165/286/23 -f 162/288/24 168/306/24 166/289/24 -f 161/290/25 167/293/25 168/291/25 -f 164/287/26 165/286/26 167/293/26 -f 174/296/26 172/307/26 170/308/26 -f 170/308/26 184/309/26 174/296/26 -f 184/309/26 182/294/26 174/296/26 -f 182/294/26 180/310/26 178/295/26 -f 178/295/26 176/311/26 174/296/26 -f 183/297/24 169/312/24 171/298/24 -f 171/298/24 173/313/24 175/299/24 -f 175/299/24 177/314/24 183/297/24 -f 177/314/24 179/315/24 183/297/24 -f 179/315/24 181/316/24 183/297/24 -f 190/302/26 188/317/26 186/318/26 -f 186/318/26 200/319/26 198/300/26 -f 198/300/26 196/320/26 194/301/26 -f 194/301/26 192/321/26 190/302/26 -f 190/302/26 186/318/26 198/300/26 -f 199/305/24 185/322/24 187/323/24 -f 187/323/24 189/324/24 199/305/24 -f 189/324/24 191/325/24 199/305/24 -f 191/325/24 193/326/24 199/305/24 -f 193/326/24 195/303/24 199/305/24 +f 231/401/33 233/402/33 232/403/33 +f 230/404/34 234/405/34 231/401/34 +f 229/406/35 236/407/35 230/408/35 +f 232/403/36 235/409/36 229/406/36 +f 250/410/36 246/411/36 242/412/36 +f 251/413/34 239/414/34 243/415/34 +f 266/416/36 262/417/36 258/418/36 +f 263/419/34 265/420/34 267/421/34 +f 231/401/33 234/405/33 233/402/33 +f 230/404/34 236/422/34 234/405/34 +f 229/406/35 235/409/35 236/407/35 +f 232/403/36 233/402/36 235/409/36 +f 242/412/36 240/423/36 238/424/36 +f 238/424/36 252/425/36 242/412/36 +f 252/425/36 250/410/36 242/412/36 +f 250/410/36 248/426/36 246/411/36 +f 246/411/36 244/427/36 242/412/36 +f 251/413/34 237/428/34 239/414/34 +f 239/414/34 241/429/34 243/415/34 +f 243/415/34 245/430/34 251/413/34 +f 245/430/34 247/431/34 251/413/34 +f 247/431/34 249/432/34 251/413/34 +f 258/418/36 256/433/36 254/434/36 +f 254/434/36 268/435/36 266/416/36 +f 266/416/36 264/436/36 262/417/36 +f 262/417/36 260/437/36 258/418/36 +f 258/418/36 254/434/36 266/416/36 +f 267/421/34 253/438/34 255/439/34 +f 255/439/34 257/440/34 267/421/34 +f 257/440/34 259/441/34 267/421/34 +f 259/441/34 261/442/34 267/421/34 +f 261/442/34 263/419/34 267/421/34 s 1 -f 170/327/23 171/328/27 169/329/23 -f 172/330/27 173/331/28 171/328/27 -f 174/332/28 175/333/29 173/334/28 -f 176/335/29 177/336/25 175/333/29 -f 178/337/25 179/338/30 177/336/25 -f 180/339/30 181/340/31 179/338/30 -f 182/341/31 183/342/32 181/340/31 -f 184/343/32 169/329/23 183/342/32 -f 186/344/23 187/345/27 185/346/23 -f 188/347/27 189/348/28 187/345/27 -f 190/349/28 191/350/29 189/351/28 -f 192/352/29 193/353/25 191/350/29 -f 194/354/25 195/355/30 193/353/25 -f 195/355/30 198/356/31 197/357/31 -f 198/356/31 199/358/32 197/357/31 -f 200/359/32 185/346/23 199/358/32 -f 170/327/23 172/330/27 171/328/27 -f 172/330/27 174/360/28 173/331/28 -f 174/332/28 176/335/29 175/333/29 -f 176/335/29 178/337/25 177/336/25 -f 178/337/25 180/339/30 179/338/30 -f 180/339/30 182/341/31 181/340/31 -f 182/341/31 184/343/32 183/342/32 -f 184/343/32 170/327/23 169/329/23 -f 186/344/23 188/347/27 187/345/27 -f 188/347/27 190/361/28 189/348/28 -f 190/349/28 192/352/29 191/350/29 -f 192/352/29 194/354/25 193/353/25 -f 194/354/25 196/362/30 195/355/30 -f 195/355/30 196/362/30 198/356/31 -f 198/356/31 200/359/32 199/358/32 -f 200/359/32 186/344/23 185/346/23 +f 238/443/33 239/444/37 237/445/33 +f 240/446/37 241/447/38 239/444/37 +f 242/448/38 243/449/39 241/450/38 +f 244/451/39 245/452/35 243/449/39 +f 246/453/35 247/454/40 245/452/35 +f 248/455/40 249/456/41 247/454/40 +f 250/457/41 251/458/42 249/456/41 +f 252/459/42 237/445/33 251/458/42 +f 254/460/33 255/461/37 253/462/33 +f 256/463/37 257/464/38 255/461/37 +f 258/465/38 259/466/39 257/467/38 +f 260/468/39 261/469/35 259/466/39 +f 262/470/35 263/471/40 261/469/35 +f 263/471/40 266/472/41 265/473/41 +f 266/472/41 267/474/42 265/473/41 +f 268/475/42 253/462/33 267/474/42 +f 238/443/33 240/446/37 239/444/37 +f 240/446/37 242/476/38 241/447/38 +f 242/448/38 244/451/39 243/449/39 +f 244/451/39 246/453/35 245/452/35 +f 246/453/35 248/455/40 247/454/40 +f 248/455/40 250/457/41 249/456/41 +f 250/457/41 252/459/42 251/458/42 +f 252/459/42 238/443/33 237/445/33 +f 254/460/33 256/463/37 255/461/37 +f 256/463/37 258/477/38 257/464/38 +f 258/465/38 260/468/39 259/466/39 +f 260/468/39 262/470/35 261/469/35 +f 262/470/35 264/478/40 263/471/40 +f 263/471/40 264/478/40 266/472/41 +f 266/472/41 268/475/42 267/474/42 +f 268/475/42 254/460/33 253/462/33 o ArmLower2 v -0.031250 1.625000 -0.875000 v -0.093750 1.625000 -0.875000 @@ -1086,71 +1383,71 @@ vn 0.0000 0.7071 0.7071 vn 0.0000 1.0000 0.0000 vn 0.0000 0.7071 -0.7071 s off -f 203/363/33 205/364/33 204/365/33 -f 202/366/34 206/367/34 203/363/34 -f 201/368/35 208/369/35 202/370/35 -f 204/365/36 207/371/36 201/368/36 -f 222/372/36 218/373/36 214/374/36 -f 223/375/34 211/376/34 215/377/34 -f 238/378/36 234/379/36 230/380/36 -f 235/381/34 237/382/34 239/383/34 -f 203/363/33 206/367/33 205/364/33 -f 202/366/34 208/384/34 206/367/34 -f 201/368/35 207/371/35 208/369/35 -f 204/365/36 205/364/36 207/371/36 -f 214/374/36 212/385/36 210/386/36 -f 210/386/36 224/387/36 214/374/36 -f 224/387/36 222/372/36 214/374/36 -f 222/372/36 220/388/36 218/373/36 -f 218/373/36 216/389/36 214/374/36 -f 223/375/34 209/390/34 211/376/34 -f 211/376/34 213/391/34 215/377/34 -f 215/377/34 217/392/34 223/375/34 -f 217/392/34 219/393/34 223/375/34 -f 219/393/34 221/394/34 223/375/34 -f 230/380/36 228/395/36 226/396/36 -f 226/396/36 240/397/36 238/378/36 -f 238/378/36 236/398/36 234/379/36 -f 234/379/36 232/399/36 230/380/36 -f 230/380/36 226/396/36 238/378/36 -f 239/383/34 225/400/34 227/401/34 -f 227/401/34 229/402/34 239/383/34 -f 229/402/34 231/403/34 239/383/34 -f 231/403/34 233/404/34 239/383/34 -f 233/404/34 235/381/34 239/383/34 +f 271/479/43 273/480/43 272/481/43 +f 270/482/44 274/483/44 271/479/44 +f 269/484/45 276/485/45 270/486/45 +f 272/481/46 275/487/46 269/484/46 +f 290/488/46 286/489/46 282/490/46 +f 291/491/44 279/492/44 283/493/44 +f 306/494/46 302/495/46 298/496/46 +f 303/497/44 305/498/44 307/499/44 +f 271/479/43 274/483/43 273/480/43 +f 270/482/44 276/500/44 274/483/44 +f 269/484/45 275/487/45 276/485/45 +f 272/481/46 273/480/46 275/487/46 +f 282/490/46 280/501/46 278/502/46 +f 278/502/46 292/503/46 282/490/46 +f 292/503/46 290/488/46 282/490/46 +f 290/488/46 288/504/46 286/489/46 +f 286/489/46 284/505/46 282/490/46 +f 291/491/44 277/506/44 279/492/44 +f 279/492/44 281/507/44 283/493/44 +f 283/493/44 285/508/44 291/491/44 +f 285/508/44 287/509/44 291/491/44 +f 287/509/44 289/510/44 291/491/44 +f 298/496/46 296/511/46 294/512/46 +f 294/512/46 308/513/46 306/494/46 +f 306/494/46 304/514/46 302/495/46 +f 302/495/46 300/515/46 298/496/46 +f 298/496/46 294/512/46 306/494/46 +f 307/499/44 293/516/44 295/517/44 +f 295/517/44 297/518/44 307/499/44 +f 297/518/44 299/519/44 307/499/44 +f 299/519/44 301/520/44 307/499/44 +f 301/520/44 303/497/44 307/499/44 s 1 -f 210/405/33 211/406/37 209/407/33 -f 212/408/37 213/409/38 211/406/37 -f 214/410/38 215/411/39 213/412/38 -f 216/413/39 217/414/35 215/411/39 -f 218/415/35 219/416/40 217/414/35 -f 220/417/40 221/418/41 219/416/40 -f 222/419/41 223/420/42 221/418/41 -f 224/421/42 209/407/33 223/420/42 -f 226/422/33 227/423/37 225/424/33 -f 228/425/37 229/426/38 227/423/37 -f 230/427/38 231/428/39 229/429/38 -f 232/430/39 233/431/35 231/428/39 -f 234/432/35 235/433/40 233/431/35 -f 236/434/40 237/435/41 235/433/40 -f 238/436/41 239/437/42 237/435/41 -f 240/438/42 225/424/33 239/437/42 -f 210/405/33 212/408/37 211/406/37 -f 212/408/37 214/439/38 213/409/38 -f 214/410/38 216/413/39 215/411/39 -f 216/413/39 218/415/35 217/414/35 -f 218/415/35 220/417/40 219/416/40 -f 220/417/40 222/419/41 221/418/41 -f 222/419/41 224/421/42 223/420/42 -f 224/421/42 210/405/33 209/407/33 -f 226/422/33 228/425/37 227/423/37 -f 228/425/37 230/440/38 229/426/38 -f 230/427/38 232/430/39 231/428/39 -f 232/430/39 234/432/35 233/431/35 -f 234/432/35 236/434/40 235/433/40 -f 236/434/40 238/436/41 237/435/41 -f 238/436/41 240/438/42 239/437/42 -f 240/438/42 226/422/33 225/424/33 +f 278/521/43 279/522/47 277/523/43 +f 280/524/47 281/525/48 279/522/47 +f 282/526/48 283/527/49 281/528/48 +f 284/529/49 285/530/45 283/527/49 +f 286/531/45 287/532/50 285/530/45 +f 288/533/50 289/534/51 287/532/50 +f 290/535/51 291/536/52 289/534/51 +f 292/537/52 277/523/43 291/536/52 +f 294/538/43 295/539/47 293/540/43 +f 296/541/47 297/542/48 295/539/47 +f 298/543/48 299/544/49 297/545/48 +f 300/546/49 301/547/45 299/544/49 +f 302/548/45 303/549/50 301/547/45 +f 304/550/50 305/551/51 303/549/50 +f 306/552/51 307/553/52 305/551/51 +f 308/554/52 293/540/43 307/553/52 +f 278/521/43 280/524/47 279/522/47 +f 280/524/47 282/555/48 281/525/48 +f 282/526/48 284/529/49 283/527/49 +f 284/529/49 286/531/45 285/530/45 +f 286/531/45 288/533/50 287/532/50 +f 288/533/50 290/535/51 289/534/51 +f 290/535/51 292/537/52 291/536/52 +f 292/537/52 278/521/43 277/523/43 +f 294/538/43 296/541/47 295/539/47 +f 296/541/47 298/556/48 297/542/48 +f 298/543/48 300/546/49 299/544/49 +f 300/546/49 302/548/45 301/547/45 +f 302/548/45 304/550/50 303/549/50 +f 304/550/50 306/552/51 305/551/51 +f 306/552/51 308/554/52 307/553/52 +f 308/554/52 294/538/43 293/540/43 o ArmUpper2 v 0.031250 2.312500 -0.937500 v 0.093750 2.312500 -0.937500 @@ -1281,71 +1578,71 @@ vn 0.0000 0.0000 1.0000 vn 0.0000 0.7071 0.7071 vn 0.0000 0.7071 -0.7071 s off -f 243/441/43 248/442/43 244/443/43 -f 242/444/44 246/445/44 241/446/44 -f 244/443/45 247/447/45 242/444/45 -f 241/448/46 245/449/46 243/441/46 -f 262/450/45 258/451/45 254/452/45 -f 259/453/46 261/454/46 263/455/46 -f 278/456/45 274/457/45 270/458/45 -f 275/459/46 277/460/46 279/461/46 -f 243/441/43 245/449/43 248/442/43 -f 242/444/44 247/447/44 246/445/44 -f 244/443/45 248/442/45 247/447/45 -f 241/448/46 246/462/46 245/449/46 -f 254/452/45 252/463/45 250/464/45 -f 250/464/45 264/465/45 262/450/45 -f 262/450/45 260/466/45 258/451/45 -f 258/451/45 256/467/45 254/452/45 -f 254/452/45 250/464/45 262/450/45 -f 263/455/46 249/468/46 251/469/46 -f 251/469/46 253/470/46 263/455/46 -f 253/470/46 255/471/46 263/455/46 -f 255/471/46 257/472/46 263/455/46 -f 257/472/46 259/453/46 263/455/46 -f 270/458/45 268/473/45 266/474/45 -f 266/474/45 280/475/45 278/456/45 -f 278/456/45 276/476/45 274/457/45 -f 274/457/45 272/477/45 270/458/45 -f 270/458/45 266/474/45 278/456/45 -f 279/461/46 265/478/46 267/479/46 -f 267/479/46 269/480/46 279/461/46 -f 269/480/46 271/481/46 279/461/46 -f 271/481/46 273/482/46 279/461/46 -f 273/482/46 275/459/46 279/461/46 +f 311/557/53 316/558/53 312/559/53 +f 310/560/54 314/561/54 309/562/54 +f 312/559/55 315/563/55 310/560/55 +f 309/564/56 313/565/56 311/557/56 +f 330/566/55 326/567/55 322/568/55 +f 327/569/56 329/570/56 331/571/56 +f 346/572/55 342/573/55 338/574/55 +f 343/575/56 345/576/56 347/577/56 +f 311/557/53 313/565/53 316/558/53 +f 310/560/54 315/563/54 314/561/54 +f 312/559/55 316/558/55 315/563/55 +f 309/564/56 314/578/56 313/565/56 +f 322/568/55 320/579/55 318/580/55 +f 318/580/55 332/581/55 330/566/55 +f 330/566/55 328/582/55 326/567/55 +f 326/567/55 324/583/55 322/568/55 +f 322/568/55 318/580/55 330/566/55 +f 331/571/56 317/584/56 319/585/56 +f 319/585/56 321/586/56 331/571/56 +f 321/586/56 323/587/56 331/571/56 +f 323/587/56 325/588/56 331/571/56 +f 325/588/56 327/569/56 331/571/56 +f 338/574/55 336/589/55 334/590/55 +f 334/590/55 348/591/55 346/572/55 +f 346/572/55 344/592/55 342/573/55 +f 342/573/55 340/593/55 338/574/55 +f 338/574/55 334/590/55 346/572/55 +f 347/577/56 333/594/56 335/595/56 +f 335/595/56 337/596/56 347/577/56 +f 337/596/56 339/597/56 347/577/56 +f 339/597/56 341/598/56 347/577/56 +f 341/598/56 343/575/56 347/577/56 s 1 -f 250/483/47 251/484/48 249/485/47 -f 252/486/48 253/487/44 251/484/48 -f 254/488/44 255/489/49 253/490/44 -f 256/491/49 257/492/50 255/489/49 -f 258/493/50 259/494/51 257/492/50 -f 260/495/51 261/496/43 259/494/51 -f 262/497/43 263/498/52 261/496/43 -f 264/499/52 249/485/47 263/498/52 -f 266/500/47 267/501/48 265/502/47 -f 268/503/48 269/504/44 267/501/48 -f 270/505/44 271/506/49 269/507/44 -f 272/508/49 273/509/50 271/506/49 -f 274/510/50 275/511/51 273/509/50 -f 276/512/51 277/513/43 275/511/51 -f 278/514/43 279/515/52 277/513/43 -f 280/516/52 265/502/47 279/515/52 -f 250/483/47 252/486/48 251/484/48 -f 252/486/48 254/517/44 253/487/44 -f 254/488/44 256/491/49 255/489/49 -f 256/491/49 258/493/50 257/492/50 -f 258/493/50 260/495/51 259/494/51 -f 260/495/51 262/497/43 261/496/43 -f 262/497/43 264/499/52 263/498/52 -f 264/499/52 250/483/47 249/485/47 -f 266/500/47 268/503/48 267/501/48 -f 268/503/48 270/518/44 269/504/44 -f 270/505/44 272/508/49 271/506/49 -f 272/508/49 274/510/50 273/509/50 -f 274/510/50 276/512/51 275/511/51 -f 276/512/51 278/514/43 277/513/43 -f 278/514/43 280/516/52 279/515/52 -f 280/516/52 266/500/47 265/502/47 +f 318/599/57 319/600/58 317/601/57 +f 320/602/58 321/603/54 319/600/58 +f 322/604/54 323/605/59 321/606/54 +f 324/607/59 325/608/60 323/605/59 +f 326/609/60 327/610/61 325/608/60 +f 328/611/61 329/612/53 327/610/61 +f 330/613/53 331/614/62 329/612/53 +f 332/615/62 317/601/57 331/614/62 +f 334/616/57 335/617/58 333/618/57 +f 336/619/58 337/620/54 335/617/58 +f 338/621/54 339/622/59 337/623/54 +f 340/624/59 341/625/60 339/622/59 +f 342/626/60 343/627/61 341/625/60 +f 344/628/61 345/629/53 343/627/61 +f 346/630/53 347/631/62 345/629/53 +f 348/632/62 333/618/57 347/631/62 +f 318/599/57 320/602/58 319/600/58 +f 320/602/58 322/633/54 321/603/54 +f 322/604/54 324/607/59 323/605/59 +f 324/607/59 326/609/60 325/608/60 +f 326/609/60 328/611/61 327/610/61 +f 328/611/61 330/613/53 329/612/53 +f 330/613/53 332/615/62 331/614/62 +f 332/615/62 318/599/57 317/601/57 +f 334/616/57 336/619/58 335/617/58 +f 336/619/58 338/634/54 337/620/54 +f 338/621/54 340/624/59 339/622/59 +f 340/624/59 342/626/60 341/625/60 +f 342/626/60 344/628/61 343/627/61 +f 344/628/61 346/630/53 345/629/53 +f 346/630/53 348/632/62 347/631/62 +f 348/632/62 334/616/57 333/618/57 o ArmUpper1 v -0.031250 2.312500 0.937500 v -0.093750 2.312500 0.937500 @@ -1476,358 +1773,71 @@ vn 0.0000 0.0000 -1.0000 vn 0.0000 0.7071 -0.7071 vn 0.0000 0.7071 0.7071 s off -f 283/519/53 288/520/53 284/521/53 -f 282/522/54 286/523/54 281/524/54 -f 284/521/55 287/525/55 282/522/55 -f 281/526/56 285/527/56 283/519/56 -f 302/528/55 298/529/55 294/530/55 -f 299/531/56 301/532/56 303/533/56 -f 318/534/55 314/535/55 310/536/55 -f 315/537/56 317/538/56 319/539/56 -f 283/519/53 285/527/53 288/520/53 -f 282/522/54 287/525/54 286/523/54 -f 284/521/55 288/520/55 287/525/55 -f 281/526/56 286/540/56 285/527/56 -f 294/530/55 292/541/55 290/542/55 -f 290/542/55 304/543/55 302/528/55 -f 302/528/55 300/544/55 298/529/55 -f 298/529/55 296/545/55 294/530/55 -f 294/530/55 290/542/55 302/528/55 -f 303/533/56 289/546/56 291/547/56 -f 291/547/56 293/548/56 303/533/56 -f 293/548/56 295/549/56 303/533/56 -f 295/549/56 297/550/56 303/533/56 -f 297/550/56 299/531/56 303/533/56 -f 310/536/55 308/551/55 306/552/55 -f 306/552/55 320/553/55 318/534/55 -f 318/534/55 316/554/55 314/535/55 -f 314/535/55 312/555/55 310/536/55 -f 310/536/55 306/552/55 318/534/55 -f 319/539/56 305/556/56 307/557/56 -f 307/557/56 309/558/56 319/539/56 -f 309/558/56 311/559/56 319/539/56 -f 311/559/56 313/560/56 319/539/56 -f 313/560/56 315/537/56 319/539/56 +f 351/635/63 356/636/63 352/637/63 +f 350/638/64 354/639/64 349/640/64 +f 352/637/65 355/641/65 350/638/65 +f 349/642/66 353/643/66 351/635/66 +f 370/644/65 366/645/65 362/646/65 +f 367/647/66 369/648/66 371/649/66 +f 386/650/65 382/651/65 378/652/65 +f 383/653/66 385/654/66 387/655/66 +f 351/635/63 353/643/63 356/636/63 +f 350/638/64 355/641/64 354/639/64 +f 352/637/65 356/636/65 355/641/65 +f 349/642/66 354/656/66 353/643/66 +f 362/646/65 360/657/65 358/658/65 +f 358/658/65 372/659/65 370/644/65 +f 370/644/65 368/660/65 366/645/65 +f 366/645/65 364/661/65 362/646/65 +f 362/646/65 358/658/65 370/644/65 +f 371/649/66 357/662/66 359/663/66 +f 359/663/66 361/664/66 371/649/66 +f 361/664/66 363/665/66 371/649/66 +f 363/665/66 365/666/66 371/649/66 +f 365/666/66 367/647/66 371/649/66 +f 378/652/65 376/667/65 374/668/65 +f 374/668/65 388/669/65 386/650/65 +f 386/650/65 384/670/65 382/651/65 +f 382/651/65 380/671/65 378/652/65 +f 378/652/65 374/668/65 386/650/65 +f 387/655/66 373/672/66 375/673/66 +f 375/673/66 377/674/66 387/655/66 +f 377/674/66 379/675/66 387/655/66 +f 379/675/66 381/676/66 387/655/66 +f 381/676/66 383/653/66 387/655/66 s 1 -f 290/561/57 291/562/58 289/563/57 -f 291/562/58 294/564/54 293/565/54 -f 294/566/54 295/567/59 293/568/54 -f 296/569/59 297/570/60 295/567/59 -f 298/571/60 299/572/61 297/570/60 -f 300/573/61 301/574/53 299/572/61 -f 302/575/53 303/576/62 301/574/53 -f 304/577/62 289/563/57 303/576/62 -f 306/578/57 307/579/58 305/580/57 -f 308/581/58 309/582/54 307/579/58 -f 310/583/54 311/584/59 309/585/54 -f 311/584/59 314/586/60 313/587/60 -f 314/586/60 315/588/61 313/587/60 -f 315/588/61 318/589/53 317/590/53 -f 318/589/53 319/591/62 317/590/53 -f 320/592/62 305/580/57 319/591/62 -f 290/561/57 292/593/58 291/562/58 -f 291/562/58 292/593/58 294/564/54 -f 294/566/54 296/569/59 295/567/59 -f 296/569/59 298/571/60 297/570/60 -f 298/571/60 300/573/61 299/572/61 -f 300/573/61 302/575/53 301/574/53 -f 302/575/53 304/577/62 303/576/62 -f 304/577/62 290/561/57 289/563/57 -f 306/578/57 308/581/58 307/579/58 -f 308/581/58 310/594/54 309/582/54 -f 310/583/54 312/595/59 311/584/59 -f 311/584/59 312/595/59 314/586/60 -f 314/586/60 316/596/61 315/588/61 -f 315/588/61 316/596/61 318/589/53 -f 318/589/53 320/592/62 319/591/62 -f 320/592/62 306/578/57 305/580/57 -o Head2 -v -0.125000 2.750000 0.000000 -v 0.125000 2.750000 0.000000 -v -0.125000 2.750000 -0.250000 -v 0.125000 2.750000 -0.250000 -v -0.125000 1.750000 -0.250000 -v -0.125000 1.750000 0.000000 -v 0.125000 1.750000 0.000000 -v 0.125000 1.750000 -0.250000 -v -0.062500 2.500000 -0.250000 -v 0.062500 2.500000 -0.250000 -v -0.062500 2.500000 -0.437500 -v 0.062500 2.500000 -0.437500 -v -0.062500 2.250000 -0.437500 -v 0.062500 2.250000 -0.437500 -v -0.062500 2.250000 -0.250000 -v 0.062500 2.250000 -0.250000 -v 0.250000 2.625000 -0.093750 -v 0.250000 1.875000 -0.093750 -v 0.250000 2.625000 -0.156250 -v 0.250000 1.875000 -0.156250 -v 0.125000 2.625000 -0.093750 -v 0.125000 1.875000 -0.093750 -v 0.125000 2.625000 -0.156250 -v 0.125000 1.875000 -0.156250 -v 0.187500 2.562500 -0.093750 -v 0.187500 1.937500 -0.093750 -v 0.187500 2.562500 -0.156250 -v 0.187500 1.937500 -0.156250 -v 0.125000 2.562500 -0.093750 -v 0.125000 1.937500 -0.093750 -v 0.125000 2.562500 -0.156250 -v 0.125000 1.937500 -0.156250 -v -0.250001 2.625000 -0.156250 -v -0.250001 1.875000 -0.156250 -v -0.250001 2.625000 -0.093750 -v -0.250001 1.875000 -0.093750 -v -0.125001 2.625000 -0.156250 -v -0.125001 1.875000 -0.156250 -v -0.125001 2.625000 -0.093750 -v -0.125001 1.875000 -0.093750 -v -0.187501 2.562500 -0.156250 -v -0.187501 1.937500 -0.156250 -v -0.187501 2.562500 -0.093750 -v -0.187501 1.937500 -0.093750 -v -0.125001 2.562500 -0.156250 -v -0.125001 1.937500 -0.156250 -v -0.125001 2.562500 -0.093750 -v -0.125001 1.937500 -0.093750 -v -0.125000 2.375000 -0.562500 -v -0.000000 2.375000 -0.562500 -v -0.125000 2.286612 -0.525888 -v -0.000000 2.286612 -0.525888 -v -0.125000 2.250000 -0.437500 -v -0.000000 2.250000 -0.437500 -v -0.125000 2.286612 -0.349112 -v -0.000000 2.286612 -0.349112 -v -0.125000 2.375000 -0.312500 -v -0.000000 2.375000 -0.312500 -v -0.125000 2.463388 -0.349112 -v -0.000000 2.463388 -0.349112 -v -0.125000 2.500000 -0.437500 -v -0.000000 2.500000 -0.437500 -v -0.125000 2.463388 -0.525888 -v -0.000000 2.463388 -0.525888 -vt 0.723684 0.907407 -vt 0.750000 0.870370 -vt 0.750000 0.907407 -vt 0.750000 0.722222 -vt 0.723684 0.685185 -vt 0.750000 0.685185 -vt 0.802632 0.870370 -vt 0.828947 0.722222 -vt 0.828947 0.870370 -vt 0.776316 0.722222 -vt 0.776316 0.870370 -vt 0.723684 0.870370 -vt 0.802632 0.722222 -vt 0.875000 0.574074 -vt 0.861842 0.601852 -vt 0.861842 0.574074 -vt 0.875000 0.601852 -vt 0.901316 0.620370 -vt 0.875000 0.620370 -vt 0.901316 0.601852 -vt 0.914474 0.574074 -vt 0.914474 0.601852 -vt 0.901316 0.574074 -vt 0.940789 0.574074 -vt 0.940789 0.601852 -vt 0.703947 0.703704 -vt 0.710526 0.814815 -vt 0.703947 0.814815 -vt 0.710526 0.685185 -vt 0.710526 0.703704 -vt 0.703947 0.833333 -vt 0.723684 0.805556 -vt 0.717105 0.712963 -vt 0.723684 0.712963 -vt 0.717105 0.685185 -vt 0.723684 0.694444 -vt 0.717105 0.694444 -vt 0.723684 0.833333 -vt 0.717105 0.824074 -vt 0.723684 0.824074 -vt 0.697368 0.824074 -vt 0.710526 0.833333 -vt 0.717105 0.833333 -vt 0.717105 0.805556 -vt 0.697368 0.712963 -vt 0.703947 0.685185 -vt 0.697368 0.694444 -vt 0.697368 0.685185 -vt 0.703947 0.703704 -vt 0.710526 0.814815 -vt 0.703947 0.814815 -vt 0.710526 0.685185 -vt 0.710526 0.703704 -vt 0.703947 0.833333 -vt 0.723684 0.805556 -vt 0.717105 0.712963 -vt 0.723684 0.712963 -vt 0.717105 0.685185 -vt 0.723684 0.694444 -vt 0.717105 0.694444 -vt 0.723684 0.833333 -vt 0.717105 0.824074 -vt 0.723684 0.824074 -vt 0.697368 0.824074 -vt 0.710526 0.833333 -vt 0.717105 0.833333 -vt 0.717105 0.805556 -vt 0.697368 0.712963 -vt 0.703947 0.685185 -vt 0.697368 0.694444 -vt 0.697368 0.685185 -vt 0.723684 0.629566 -vt 0.710572 0.611111 -vt 0.723684 0.592656 -vt 0.706641 0.624161 -vt 0.697369 0.629566 -vt 0.688096 0.624161 -vt 0.723684 0.722222 -vt 0.723684 0.685185 -vt 0.697368 0.833333 -vt 0.697368 0.805556 -vt 0.723684 0.685185 -vt 0.697368 0.833333 -vt 0.697368 0.805556 -vt 0.732956 0.598061 -vt 0.736797 0.611111 -vt 0.732957 0.624161 -vt 0.714412 0.624161 -vt 0.714412 0.598061 -vt 0.684256 0.611111 -vt 0.688096 0.598061 -vt 0.697369 0.592656 -vt 0.706641 0.598061 -vt 0.710481 0.611111 -vt 0.763158 0.574074 -vt 0.776316 0.592593 -vt 0.763158 0.592593 -vt 0.776316 0.574074 -vt 0.789474 0.592593 -vt 0.684211 0.574074 -vt 0.697368 0.592593 -vt 0.684211 0.592593 -vt 0.697368 0.574074 -vt 0.710526 0.592593 -vt 0.710526 0.574074 -vt 0.723684 0.592593 -vt 0.723684 0.574074 -vt 0.736842 0.592593 -vt 0.736842 0.574074 -vt 0.750000 0.592593 -vt 0.750000 0.574074 -vt 0.789474 0.574074 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.7071 0.7071 -vn 0.0000 0.7071 -0.7071 -s off -f 322/597/63 323/598/63 321/599/63 -f 325/600/64 327/601/64 326/602/64 -f 322/603/65 328/604/65 324/605/65 -f 323/598/66 326/606/66 321/607/66 -f 324/608/67 325/600/67 323/598/67 -f 321/607/68 327/609/68 322/603/68 -f 330/610/63 331/611/63 329/612/63 -f 332/613/67 333/614/67 331/615/67 -f 334/616/64 335/617/64 333/618/64 -f 336/619/65 332/613/65 330/610/65 -f 333/618/66 329/620/66 331/621/66 -f 338/622/65 339/623/65 337/624/65 -f 338/622/64 344/625/64 340/626/64 -f 339/623/63 341/627/63 337/624/63 -f 345/628/66 348/629/66 346/630/66 -f 352/631/63 346/632/63 348/633/63 -f 349/634/64 347/635/64 345/636/64 -f 341/627/68 345/637/68 337/624/68 -f 343/638/67 347/635/67 351/639/67 -f 340/626/67 347/640/67 339/623/67 -f 344/625/67 348/633/67 340/626/67 -f 337/624/68 346/641/68 338/622/68 -f 342/642/68 346/643/68 350/644/68 -f 354/645/66 355/646/66 353/647/66 -f 354/645/64 360/648/64 356/649/64 -f 355/646/63 357/650/63 353/647/63 -f 361/651/65 364/652/65 362/653/65 -f 368/654/63 362/655/63 364/656/63 -f 365/657/64 363/658/64 361/659/64 -f 357/650/67 361/660/67 353/647/67 -f 359/661/68 363/658/68 367/662/68 -f 356/649/68 363/663/68 355/646/68 -f 360/648/68 364/656/68 356/649/68 -f 353/647/67 362/664/67 354/645/67 -f 358/665/67 362/666/67 366/667/67 -f 382/668/65 378/669/65 374/670/65 -f 379/671/66 381/672/66 383/673/66 -f 322/597/63 324/608/63 323/598/63 -f 325/600/64 328/674/64 327/601/64 -f 322/603/65 327/609/65 328/604/65 -f 323/598/66 325/600/66 326/606/66 -f 324/608/67 328/674/67 325/600/67 -f 321/607/68 326/606/68 327/609/68 -f 330/610/63 332/613/63 331/611/63 -f 332/613/67 334/616/67 333/614/67 -f 334/616/64 336/619/64 335/617/64 -f 336/619/65 334/616/65 332/613/65 -f 333/618/66 335/617/66 329/620/66 -f 338/622/65 340/626/65 339/623/65 -f 338/622/64 342/642/64 344/625/64 -f 339/623/63 343/638/63 341/627/63 -f 345/628/66 347/640/66 348/629/66 -f 352/631/63 350/675/63 346/632/63 -f 349/634/64 351/639/64 347/635/64 -f 341/627/68 349/676/68 345/637/68 -f 343/638/67 339/623/67 347/635/67 -f 340/626/67 348/629/67 347/640/67 -f 344/625/67 352/631/67 348/633/67 -f 337/624/68 345/677/68 346/641/68 -f 342/642/68 338/622/68 346/643/68 -f 354/645/66 356/649/66 355/646/66 -f 354/645/64 358/665/64 360/648/64 -f 355/646/63 359/661/63 357/650/63 -f 361/651/65 363/663/65 364/652/65 -f 368/654/63 366/678/63 362/655/63 -f 365/657/64 367/662/64 363/658/64 -f 357/650/67 365/679/67 361/660/67 -f 359/661/68 355/646/68 363/658/68 -f 356/649/68 364/652/68 363/663/68 -f 360/648/68 368/654/68 364/656/68 -f 353/647/67 361/680/67 362/664/67 -f 358/665/67 354/645/67 362/666/67 -f 374/670/65 372/681/65 370/682/65 -f 370/682/65 384/683/65 382/668/65 -f 382/668/65 380/684/65 378/669/65 -f 378/669/65 376/685/65 374/670/65 -f 374/670/65 370/682/65 382/668/65 -f 383/673/66 369/686/66 371/687/66 -f 371/687/66 373/688/66 383/673/66 -f 373/688/66 375/689/66 383/673/66 -f 375/689/66 377/690/66 383/673/66 -f 377/690/66 379/671/66 383/673/66 -s 1 -f 370/691/67 371/692/69 369/693/67 -f 372/694/69 373/695/64 371/692/69 -f 374/696/64 375/697/70 373/698/64 -f 376/699/70 377/700/68 375/697/70 -f 378/701/68 379/702/71 377/700/68 -f 380/703/71 381/704/63 379/702/71 -f 382/705/63 383/706/72 381/704/63 -f 384/707/72 369/693/67 383/706/72 -f 370/691/67 372/694/69 371/692/69 -f 372/694/69 374/708/64 373/695/64 -f 374/696/64 376/699/70 375/697/70 -f 376/699/70 378/701/68 377/700/68 -f 378/701/68 380/703/71 379/702/71 -f 380/703/71 382/705/63 381/704/63 -f 382/705/63 384/707/72 383/706/72 -f 384/707/72 370/691/67 369/693/67 +f 358/677/67 359/678/68 357/679/67 +f 359/678/68 362/680/64 361/681/64 +f 362/682/64 363/683/69 361/684/64 +f 364/685/69 365/686/70 363/683/69 +f 366/687/70 367/688/71 365/686/70 +f 368/689/71 369/690/63 367/688/71 +f 370/691/63 371/692/72 369/690/63 +f 372/693/72 357/679/67 371/692/72 +f 374/694/67 375/695/68 373/696/67 +f 376/697/68 377/698/64 375/695/68 +f 378/699/64 379/700/69 377/701/64 +f 379/700/69 382/702/70 381/703/70 +f 382/702/70 383/704/71 381/703/70 +f 383/704/71 386/705/63 385/706/63 +f 386/705/63 387/707/72 385/706/63 +f 388/708/72 373/696/67 387/707/72 +f 358/677/67 360/709/68 359/678/68 +f 359/678/68 360/709/68 362/680/64 +f 362/682/64 364/685/69 363/683/69 +f 364/685/69 366/687/70 365/686/70 +f 366/687/70 368/689/71 367/688/71 +f 368/689/71 370/691/63 369/690/63 +f 370/691/63 372/693/72 371/692/72 +f 372/693/72 358/677/67 357/679/67 +f 374/694/67 376/697/68 375/695/68 +f 376/697/68 378/710/64 377/698/64 +f 378/699/64 380/711/69 379/700/69 +f 379/700/69 380/711/69 382/702/70 +f 382/702/70 384/712/71 383/704/71 +f 383/704/71 384/712/71 386/705/63 +f 386/705/63 388/708/72 387/707/72 +f 388/708/72 374/694/67 373/696/67 o Head1 v 0.125000 2.750000 -0.000000 v -0.125000 2.750000 0.000000 @@ -1893,6 +1903,10 @@ v 0.125000 2.500000 0.437500 v 0.000000 2.500000 0.437500 v 0.125000 2.463388 0.525888 v 0.000000 2.463388 0.525888 +v 0.130000 1.875000 0.234375 +v 0.130000 1.875000 0.171875 +v 0.130000 2.062500 0.234375 +v 0.130000 2.062500 0.171875 vt 0.750000 0.907407 vt 0.723684 0.870370 vt 0.750000 0.870370 @@ -1970,6 +1984,9 @@ vt 0.723684 0.592656 vt 0.706641 0.624161 vt 0.697369 0.629566 vt 0.688096 0.624161 +vt 0.559211 1.000000 +vt 0.460526 0.953704 +vt 0.559211 0.953704 vt 0.723684 0.907407 vt 0.717105 0.685185 vt 0.697368 0.833333 @@ -1987,6 +2004,7 @@ vt 0.688096 0.598061 vt 0.697369 0.592656 vt 0.706641 0.598061 vt 0.710481 0.611111 +vt 0.460526 1.000000 vt 0.763158 0.574074 vt 0.776316 0.592593 vt 0.763158 0.592593 @@ -2016,105 +2034,107 @@ vn 0.0000 -0.7071 -0.7071 vn 0.0000 0.7071 -0.7071 vn 0.0000 0.7071 0.7071 s off -f 385/709/73 388/710/73 387/711/73 -f 390/712/74 392/713/74 391/714/74 -f 386/715/75 392/716/75 388/717/75 -f 387/711/76 390/718/76 385/719/76 -f 388/710/77 389/720/77 387/711/77 -f 385/719/78 391/721/78 386/715/78 -f 394/722/73 395/723/73 393/724/73 -f 396/725/77 397/726/77 395/727/77 -f 398/728/74 399/729/74 397/730/74 -f 400/731/75 396/725/75 394/722/75 -f 397/730/76 393/732/76 395/733/76 -f 402/734/75 403/735/75 401/736/75 -f 402/734/74 408/737/74 404/738/74 -f 403/735/73 405/739/73 401/736/73 -f 409/740/76 412/741/76 410/742/76 -f 412/743/73 414/744/73 410/745/73 -f 413/746/74 411/747/74 409/748/74 -f 405/739/78 409/749/78 401/736/78 -f 407/750/77 411/747/77 415/751/77 -f 404/738/77 411/752/77 403/735/77 -f 408/737/77 412/743/77 404/738/77 -f 401/736/78 410/753/78 402/734/78 -f 406/754/78 410/755/78 414/756/78 -f 418/757/76 419/758/76 417/759/76 -f 418/757/74 424/760/74 420/761/74 -f 417/759/73 423/762/73 421/763/73 -f 425/764/75 428/765/75 426/766/75 -f 432/767/73 426/768/73 428/769/73 -f 429/770/74 427/771/74 425/772/74 -f 421/763/77 425/773/77 417/759/77 -f 423/762/78 427/771/78 431/774/78 -f 420/761/78 427/775/78 419/758/78 -f 424/760/78 428/769/78 420/761/78 -f 417/759/77 426/776/77 418/757/77 -f 422/777/77 426/778/77 430/779/77 -f 446/780/75 442/781/75 438/782/75 -f 443/783/76 445/784/76 447/785/76 -f 385/709/73 386/786/73 388/710/73 -f 390/712/74 389/720/74 392/713/74 -f 386/715/75 391/721/75 392/716/75 -f 387/711/76 389/720/76 390/718/76 -f 388/710/77 392/713/77 389/720/77 -f 385/719/78 390/718/78 391/721/78 -f 394/722/73 396/725/73 395/723/73 -f 396/725/77 398/728/77 397/726/77 -f 398/728/74 400/731/74 399/729/74 -f 400/731/75 398/728/75 396/725/75 -f 397/730/76 399/729/76 393/732/76 -f 402/734/75 404/738/75 403/735/75 -f 402/734/74 406/754/74 408/737/74 -f 403/735/73 407/750/73 405/739/73 -f 409/740/76 411/752/76 412/741/76 -f 412/743/73 416/787/73 414/744/73 -f 413/746/74 415/751/74 411/747/74 -f 405/739/78 413/788/78 409/749/78 -f 407/750/77 403/735/77 411/747/77 -f 404/738/77 412/741/77 411/752/77 -f 408/737/77 416/787/77 412/743/77 -f 401/736/78 409/789/78 410/753/78 -f 406/754/78 402/734/78 410/755/78 -f 418/757/76 420/761/76 419/758/76 -f 418/757/74 422/777/74 424/760/74 -f 417/759/73 419/758/73 423/762/73 -f 425/764/75 427/775/75 428/765/75 -f 432/767/73 430/790/73 426/768/73 -f 429/770/74 431/774/74 427/771/74 -f 421/763/77 429/791/77 425/773/77 -f 423/762/78 419/758/78 427/771/78 -f 420/761/78 428/765/78 427/775/78 -f 424/760/78 432/767/78 428/769/78 -f 417/759/77 425/792/77 426/776/77 -f 422/777/77 418/757/77 426/778/77 -f 438/782/75 436/793/75 434/794/75 -f 434/794/75 448/795/75 446/780/75 -f 446/780/75 444/796/75 442/781/75 -f 442/781/75 440/797/75 438/782/75 -f 438/782/75 434/794/75 446/780/75 -f 447/785/76 433/798/76 435/799/76 -f 435/799/76 437/800/76 447/785/76 -f 437/800/76 439/801/76 447/785/76 -f 439/801/76 441/802/76 447/785/76 -f 441/802/76 443/783/76 447/785/76 +f 389/713/73 392/714/73 391/715/73 +f 394/716/74 396/717/74 395/718/74 +f 390/719/75 396/720/75 392/721/75 +f 391/715/76 394/722/76 389/723/76 +f 392/714/77 393/724/77 391/715/77 +f 389/723/78 395/725/78 390/719/78 +f 398/726/73 399/727/73 397/728/73 +f 400/729/77 401/730/77 399/731/77 +f 402/732/74 403/733/74 401/734/74 +f 404/735/75 400/729/75 398/726/75 +f 401/734/76 397/736/76 399/737/76 +f 406/738/75 407/739/75 405/740/75 +f 406/738/74 412/741/74 408/742/74 +f 407/739/73 409/743/73 405/740/73 +f 413/744/76 416/745/76 414/746/76 +f 416/747/73 418/748/73 414/749/73 +f 417/750/74 415/751/74 413/752/74 +f 409/743/78 413/753/78 405/740/78 +f 411/754/77 415/751/77 419/755/77 +f 408/742/77 415/756/77 407/739/77 +f 412/741/77 416/747/77 408/742/77 +f 405/740/78 414/757/78 406/738/78 +f 410/758/78 414/759/78 418/760/78 +f 422/761/76 423/762/76 421/763/76 +f 422/761/74 428/764/74 424/765/74 +f 421/763/73 427/766/73 425/767/73 +f 429/768/75 432/769/75 430/770/75 +f 436/771/73 430/772/73 432/773/73 +f 433/774/74 431/775/74 429/776/74 +f 425/767/77 429/777/77 421/763/77 +f 427/766/78 431/775/78 435/778/78 +f 424/765/78 431/779/78 423/762/78 +f 428/764/78 432/773/78 424/765/78 +f 421/763/77 430/780/77 422/761/77 +f 426/781/77 430/782/77 434/783/77 +f 450/784/75 446/785/75 442/786/75 +f 447/787/76 449/788/76 451/789/76 +f 454/790/76 455/791/76 453/792/76 +f 389/713/73 390/793/73 392/714/73 +f 394/716/74 393/724/74 396/717/74 +f 390/719/75 395/725/75 396/720/75 +f 391/715/76 393/724/76 394/722/76 +f 392/714/77 396/717/77 393/724/77 +f 389/723/78 394/722/78 395/725/78 +f 398/726/73 400/729/73 399/727/73 +f 400/729/77 402/732/77 401/730/77 +f 402/732/74 404/735/74 403/733/74 +f 404/735/75 402/732/75 400/729/75 +f 401/734/76 403/733/76 397/736/76 +f 406/738/75 408/742/75 407/739/75 +f 406/738/74 410/758/74 412/741/74 +f 407/739/73 411/754/73 409/743/73 +f 413/744/76 415/756/76 416/745/76 +f 416/747/73 420/794/73 418/748/73 +f 417/750/74 419/755/74 415/751/74 +f 409/743/78 417/795/78 413/753/78 +f 411/754/77 407/739/77 415/751/77 +f 408/742/77 416/745/77 415/756/77 +f 412/741/77 420/794/77 416/747/77 +f 405/740/78 413/796/78 414/757/78 +f 410/758/78 406/738/78 414/759/78 +f 422/761/76 424/765/76 423/762/76 +f 422/761/74 426/781/74 428/764/74 +f 421/763/73 423/762/73 427/766/73 +f 429/768/75 431/779/75 432/769/75 +f 436/771/73 434/797/73 430/772/73 +f 433/774/74 435/778/74 431/775/74 +f 425/767/77 433/798/77 429/777/77 +f 427/766/78 423/762/78 431/775/78 +f 424/765/78 432/769/78 431/779/78 +f 428/764/78 436/771/78 432/773/78 +f 421/763/77 429/799/77 430/780/77 +f 426/781/77 422/761/77 430/782/77 +f 442/786/75 440/800/75 438/801/75 +f 438/801/75 452/802/75 450/784/75 +f 450/784/75 448/803/75 446/785/75 +f 446/785/75 444/804/75 442/786/75 +f 442/786/75 438/801/75 450/784/75 +f 451/789/76 437/805/76 439/806/76 +f 439/806/76 441/807/76 451/789/76 +f 441/807/76 443/808/76 451/789/76 +f 443/808/76 445/809/76 451/789/76 +f 445/809/76 447/787/76 451/789/76 +f 454/790/76 456/810/76 455/791/76 s 1 -f 434/803/77 435/804/79 433/805/77 -f 436/806/79 437/807/74 435/804/79 -f 438/808/74 439/809/80 437/810/74 -f 440/811/80 441/812/78 439/809/80 -f 442/813/78 443/814/81 441/812/78 -f 444/815/81 445/816/73 443/814/81 -f 446/817/73 447/818/82 445/816/73 -f 448/819/82 433/805/77 447/818/82 -f 434/803/77 436/806/79 435/804/79 -f 436/806/79 438/820/74 437/807/74 -f 438/808/74 440/811/80 439/809/80 -f 440/811/80 442/813/78 441/812/78 -f 442/813/78 444/815/81 443/814/81 -f 444/815/81 446/817/73 445/816/73 -f 446/817/73 448/819/82 447/818/82 -f 448/819/82 434/803/77 433/805/77 +f 438/811/77 439/812/79 437/813/77 +f 440/814/79 441/815/74 439/812/79 +f 442/816/74 443/817/80 441/818/74 +f 444/819/80 445/820/78 443/817/80 +f 446/821/78 447/822/81 445/820/78 +f 448/823/81 449/824/73 447/822/81 +f 450/825/73 451/826/82 449/824/73 +f 452/827/82 437/813/77 451/826/82 +f 438/811/77 440/814/79 439/812/79 +f 440/814/79 442/828/74 441/815/74 +f 442/816/74 444/819/80 443/817/80 +f 444/819/80 446/821/78 445/820/78 +f 446/821/78 448/823/81 447/822/81 +f 448/823/81 450/825/73 449/824/73 +f 450/825/73 452/827/82 451/826/82 +f 452/827/82 438/811/77 437/813/77 o Spike2 v -0.062500 2.875000 -0.062500 v 0.062500 2.875000 -0.062500 @@ -2151,20 +2171,20 @@ vn 0.0000 -0.2425 -0.9701 vn 0.9701 -0.2425 0.0000 vn 0.0000 -0.2425 0.9701 s off -f 450/821/83 451/822/83 449/823/83 -f 450/824/84 456/825/84 452/826/84 -f 451/822/85 454/827/85 449/828/85 -f 452/829/86 453/830/86 451/822/86 -f 449/828/87 455/831/87 450/824/87 -f 454/827/88 453/830/88 457/832/88 -f 453/830/89 456/833/89 457/834/89 -f 456/825/90 455/831/90 457/835/90 -f 455/831/91 454/827/91 457/836/91 -f 450/821/83 452/829/83 451/822/83 -f 450/824/84 455/831/84 456/825/84 -f 451/822/85 453/830/85 454/827/85 -f 452/829/86 456/833/86 453/830/86 -f 449/828/87 454/827/87 455/831/87 +f 458/829/83 459/830/83 457/831/83 +f 458/832/84 464/833/84 460/834/84 +f 459/830/85 462/835/85 457/836/85 +f 460/837/86 461/838/86 459/830/86 +f 457/836/87 463/839/87 458/832/87 +f 462/835/88 461/838/88 465/840/88 +f 461/838/89 464/841/89 465/842/89 +f 464/833/90 463/839/90 465/843/90 +f 463/839/91 462/835/91 465/844/91 +f 458/829/83 460/837/83 459/830/83 +f 458/832/84 463/839/84 464/833/84 +f 459/830/85 461/838/85 462/835/85 +f 460/837/86 464/841/86 461/838/86 +f 457/836/87 462/835/87 463/839/87 o Spike1 v 0.062500 2.875000 0.062500 v -0.062500 2.875000 0.062500 @@ -2201,20 +2221,20 @@ vn 0.0000 -0.2425 0.9701 vn -0.9701 -0.2425 0.0000 vn 0.0000 -0.2425 -0.9701 s off -f 458/837/92 461/838/92 460/839/92 -f 459/840/93 465/841/93 461/842/93 -f 460/839/94 463/843/94 458/844/94 -f 461/838/95 462/845/95 460/839/95 -f 458/844/96 464/846/96 459/840/96 -f 463/843/97 462/845/97 466/847/97 -f 462/845/98 465/848/98 466/849/98 -f 465/841/99 464/846/99 466/850/99 -f 464/846/100 463/843/100 466/851/100 -f 458/837/92 459/852/92 461/838/92 -f 459/840/93 464/846/93 465/841/93 -f 460/839/94 462/845/94 463/843/94 -f 461/838/95 465/848/95 462/845/95 -f 458/844/96 463/843/96 464/846/96 +f 466/845/92 469/846/92 468/847/92 +f 467/848/93 473/849/93 469/850/93 +f 468/847/94 471/851/94 466/852/94 +f 469/846/95 470/853/95 468/847/95 +f 466/852/96 472/854/96 467/848/96 +f 471/851/97 470/853/97 474/855/97 +f 470/853/98 473/856/98 474/857/98 +f 473/849/99 472/854/99 474/858/99 +f 472/854/100 471/851/100 474/859/100 +f 466/845/92 467/860/92 469/846/92 +f 467/848/93 472/854/93 473/849/93 +f 468/847/94 470/853/94 471/851/94 +f 469/846/95 473/856/95 470/853/95 +f 466/852/96 471/851/96 472/854/96 o Frame v 1.250000 2.750000 -1.250000 v 1.250000 3.000000 -1.250000 @@ -2455,118 +2475,118 @@ vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 1.0000 0.0000 s off -f 468/853/101 469/854/101 467/855/101 -f 470/856/102 473/857/102 469/854/102 -f 474/858/103 471/859/103 473/857/103 -f 472/860/104 467/855/104 471/861/104 -f 473/857/105 467/862/105 469/863/105 -f 470/864/106 472/865/106 474/858/106 -f 476/866/101 477/867/101 475/868/101 -f 478/869/102 481/870/102 477/867/102 -f 482/871/103 479/872/103 481/870/103 -f 480/873/104 475/868/104 479/874/104 -f 481/870/105 475/875/105 477/876/105 -f 478/877/106 480/878/106 482/871/106 -f 484/879/101 485/880/101 483/881/101 -f 486/882/102 489/883/102 485/880/102 -f 490/884/103 487/885/103 489/883/103 -f 488/886/104 483/881/104 487/887/104 -f 489/883/105 483/888/105 485/889/105 -f 486/890/106 488/891/106 490/884/106 -f 492/892/101 493/893/101 491/894/101 -f 494/895/102 497/896/102 493/893/102 -f 498/897/103 495/898/103 497/896/103 -f 496/899/104 491/894/104 495/900/104 -f 497/896/105 491/901/105 493/902/105 -f 494/903/106 496/904/106 498/897/106 -f 502/905/103 500/906/103 501/907/103 -f 501/907/105 506/908/105 502/905/105 -f 499/909/106 504/910/106 500/906/106 -f 506/911/101 504/910/101 503/912/101 +f 476/861/101 477/862/101 475/863/101 +f 478/864/102 481/865/102 477/862/102 +f 482/866/103 479/867/103 481/865/103 +f 480/868/104 475/863/104 479/869/104 +f 481/865/105 475/870/105 477/871/105 +f 478/872/106 480/873/106 482/866/106 +f 484/874/101 485/875/101 483/876/101 +f 486/877/102 489/878/102 485/875/102 +f 490/879/103 487/880/103 489/878/103 +f 488/881/104 483/876/104 487/882/104 +f 489/878/105 483/883/105 485/884/105 +f 486/885/106 488/886/106 490/879/106 +f 492/887/101 493/888/101 491/889/101 +f 494/890/102 497/891/102 493/888/102 +f 498/892/103 495/893/103 497/891/103 +f 496/894/104 491/889/104 495/895/104 +f 497/891/105 491/896/105 493/897/105 +f 494/898/106 496/899/106 498/892/106 +f 500/900/101 501/901/101 499/902/101 +f 502/903/102 505/904/102 501/901/102 +f 506/905/103 503/906/103 505/904/103 +f 504/907/104 499/902/104 503/908/104 +f 505/904/105 499/909/105 501/910/105 +f 502/911/106 504/912/106 506/905/106 f 510/913/103 508/914/103 509/915/103 -f 509/916/105 514/917/105 510/918/105 -f 507/919/106 512/920/106 508/914/106 -f 514/917/101 512/920/101 511/921/101 -f 518/922/102 516/923/102 517/924/102 -f 517/924/105 522/925/105 518/922/105 -f 515/926/106 520/927/106 516/923/106 -f 522/928/104 520/927/104 519/929/104 +f 509/915/105 514/916/105 510/913/105 +f 507/917/106 512/918/106 508/914/106 +f 514/919/101 512/918/101 511/920/101 +f 518/921/103 516/922/103 517/923/103 +f 517/924/105 522/925/105 518/926/105 +f 515/927/106 520/928/106 516/922/106 +f 522/925/101 520/928/101 519/929/101 f 526/930/102 524/931/102 525/932/102 -f 525/933/105 530/934/105 526/935/105 -f 523/936/106 528/937/106 524/931/106 -f 530/934/104 528/937/104 527/938/104 -f 534/939/102 532/940/102 533/941/102 -f 533/941/101 538/942/101 534/939/101 -f 531/943/103 536/944/103 532/940/103 +f 525/932/105 530/933/105 526/930/105 +f 523/934/106 528/935/106 524/931/106 +f 530/936/104 528/935/104 527/937/104 +f 534/938/102 532/939/102 533/940/102 +f 533/941/105 538/942/105 534/943/105 +f 531/944/106 536/945/106 532/939/106 f 538/942/104 536/945/104 535/946/104 f 542/947/102 540/948/102 541/949/102 f 541/949/101 546/950/101 542/947/101 -f 539/951/103 544/952/103 540/953/103 -f 546/950/104 544/952/104 543/954/104 +f 539/951/103 544/952/103 540/948/103 +f 546/950/104 544/953/104 543/954/104 f 550/955/102 548/956/102 549/957/102 f 549/957/101 554/958/101 550/955/101 -f 547/959/103 552/960/103 548/956/103 -f 554/961/104 552/960/104 551/962/104 +f 547/959/103 552/960/103 548/961/103 +f 554/958/104 552/960/104 551/962/104 f 558/963/102 556/964/102 557/965/102 -f 557/966/101 562/967/101 558/968/101 -f 555/969/103 560/970/103 556/964/103 -f 562/967/104 560/970/104 559/971/104 -f 468/853/101 470/856/101 469/854/101 -f 470/856/102 474/858/102 473/857/102 -f 474/858/103 472/865/103 471/859/103 -f 472/860/104 468/853/104 467/855/104 -f 473/857/105 471/859/105 467/862/105 -f 470/864/106 468/972/106 472/865/106 -f 476/866/101 478/869/101 477/867/101 -f 478/869/102 482/871/102 481/870/102 -f 482/871/103 480/878/103 479/872/103 -f 480/873/104 476/866/104 475/868/104 -f 481/870/105 479/872/105 475/875/105 -f 478/877/106 476/973/106 480/878/106 -f 484/879/101 486/882/101 485/880/101 -f 486/882/102 490/884/102 489/883/102 -f 490/884/103 488/891/103 487/885/103 -f 488/886/104 484/879/104 483/881/104 -f 489/883/105 487/885/105 483/888/105 -f 486/890/106 484/974/106 488/891/106 -f 492/892/101 494/895/101 493/893/101 -f 494/895/102 498/897/102 497/896/102 -f 498/897/103 496/904/103 495/898/103 -f 496/899/104 492/892/104 491/894/104 -f 497/896/105 495/898/105 491/901/105 -f 494/903/106 492/975/106 496/904/106 -f 502/905/103 499/909/103 500/906/103 -f 501/907/105 505/976/105 506/908/105 -f 499/909/106 503/912/106 504/910/106 -f 506/911/101 505/977/101 504/910/101 -f 510/913/103 507/919/103 508/914/103 -f 509/916/105 513/978/105 514/917/105 -f 507/919/106 511/921/106 512/920/106 -f 514/917/101 513/978/101 512/920/101 -f 518/922/102 515/926/102 516/923/102 -f 517/924/105 521/979/105 522/925/105 -f 515/926/106 519/929/106 520/927/106 -f 522/928/104 521/980/104 520/927/104 -f 526/930/102 523/936/102 524/931/102 -f 525/933/105 529/981/105 530/934/105 -f 523/936/106 527/938/106 528/937/106 -f 530/934/104 529/981/104 528/937/104 -f 534/939/102 531/943/102 532/940/102 -f 533/941/101 537/982/101 538/942/101 -f 531/943/103 535/983/103 536/944/103 -f 538/942/104 537/982/104 536/945/104 -f 542/947/102 539/984/102 540/948/102 -f 541/949/101 545/985/101 546/950/101 -f 539/951/103 543/954/103 544/952/103 -f 546/950/104 545/985/104 544/952/104 -f 550/955/102 547/959/102 548/956/102 -f 549/957/101 553/986/101 554/958/101 +f 557/965/101 562/966/101 558/963/101 +f 555/967/103 560/968/103 556/964/103 +f 562/969/104 560/968/104 559/970/104 +f 566/971/102 564/972/102 565/973/102 +f 565/974/101 570/975/101 566/976/101 +f 563/977/103 568/978/103 564/972/103 +f 570/975/104 568/978/104 567/979/104 +f 476/861/101 478/864/101 477/862/101 +f 478/864/102 482/866/102 481/865/102 +f 482/866/103 480/873/103 479/867/103 +f 480/868/104 476/861/104 475/863/104 +f 481/865/105 479/867/105 475/870/105 +f 478/872/106 476/980/106 480/873/106 +f 484/874/101 486/877/101 485/875/101 +f 486/877/102 490/879/102 489/878/102 +f 490/879/103 488/886/103 487/880/103 +f 488/881/104 484/874/104 483/876/104 +f 489/878/105 487/880/105 483/883/105 +f 486/885/106 484/981/106 488/886/106 +f 492/887/101 494/890/101 493/888/101 +f 494/890/102 498/892/102 497/891/102 +f 498/892/103 496/899/103 495/893/103 +f 496/894/104 492/887/104 491/889/104 +f 497/891/105 495/893/105 491/896/105 +f 494/898/106 492/982/106 496/899/106 +f 500/900/101 502/903/101 501/901/101 +f 502/903/102 506/905/102 505/904/102 +f 506/905/103 504/912/103 503/906/103 +f 504/907/104 500/900/104 499/902/104 +f 505/904/105 503/906/105 499/909/105 +f 502/911/106 500/983/106 504/912/106 +f 510/913/103 507/917/103 508/914/103 +f 509/915/105 513/984/105 514/916/105 +f 507/917/106 511/920/106 512/918/106 +f 514/919/101 513/985/101 512/918/101 +f 518/921/103 515/927/103 516/922/103 +f 517/924/105 521/986/105 522/925/105 +f 515/927/106 519/929/106 520/928/106 +f 522/925/101 521/986/101 520/928/101 +f 526/930/102 523/934/102 524/931/102 +f 525/932/105 529/987/105 530/933/105 +f 523/934/106 527/937/106 528/935/106 +f 530/936/104 529/988/104 528/935/104 +f 534/938/102 531/944/102 532/939/102 +f 533/941/105 537/989/105 538/942/105 +f 531/944/106 535/946/106 536/945/106 +f 538/942/104 537/989/104 536/945/104 +f 542/947/102 539/951/102 540/948/102 +f 541/949/101 545/990/101 546/950/101 +f 539/951/103 543/991/103 544/952/103 +f 546/950/104 545/990/104 544/953/104 +f 550/955/102 547/992/102 548/956/102 +f 549/957/101 553/993/101 554/958/101 f 547/959/103 551/962/103 552/960/103 -f 554/961/104 553/987/104 552/960/104 -f 558/963/102 555/969/102 556/964/102 -f 557/966/101 561/988/101 562/967/101 -f 555/969/103 559/971/103 560/970/103 -f 562/967/104 561/988/104 560/970/104 +f 554/958/104 553/993/104 552/960/104 +f 558/963/102 555/967/102 556/964/102 +f 557/965/101 561/994/101 562/966/101 +f 555/967/103 559/970/103 560/968/103 +f 562/969/104 561/995/104 560/968/104 +f 566/971/102 563/977/102 564/972/102 +f 565/974/101 569/996/101 570/975/101 +f 563/977/103 567/979/103 568/978/103 +f 570/975/104 569/996/104 568/978/104 o Base v 1.500000 0.125000 -1.250000 v 1.500000 0.125000 1.250000 @@ -3233,78 +3253,78 @@ vt 0.052632 0.296296 vt 0.210526 0.296296 vt 0.052632 0.518519 vt 0.263158 0.074074 -vt 0.315789 0.111111 -vt 0.269737 0.111111 +vt 0.312500 0.111111 +vt 0.266447 0.111111 vt 0.210526 0.074074 -vt 0.263158 0.111111 -vt 0.217105 0.111111 +vt 0.259868 0.111111 +vt 0.213816 0.111111 vt 0.157895 0.074074 -vt 0.210526 0.111111 -vt 0.164474 0.111111 +vt 0.207237 0.111111 +vt 0.161184 0.111111 vt 0.105263 0.074074 -vt 0.157895 0.111111 -vt 0.111842 0.111111 +vt 0.154605 0.111111 +vt 0.108553 0.111111 vt 0.052632 0.074074 -vt 0.105263 0.111111 -vt 0.059211 0.111111 +vt 0.101974 0.111111 +vt 0.055921 0.111111 vt -0.000000 0.074074 -vt 0.052632 0.111111 -vt 0.006579 0.111111 +vt 0.049342 0.111111 +vt 0.003289 0.111111 vt 0.842105 0.074074 -vt 0.796053 0.111111 +vt 0.792763 0.111111 vt 0.789474 0.074074 -vt 0.743421 0.111111 +vt 0.740132 0.111111 vt 0.736842 0.074074 -vt 0.690789 0.111111 +vt 0.687500 0.111111 vt 0.684211 0.074074 -vt 0.638158 0.111111 +vt 0.634869 0.111111 vt 0.631579 0.074074 -vt 0.585526 0.111111 +vt 0.582237 0.111111 vt 0.578947 0.074074 -vt 0.532895 0.111111 +vt 0.529605 0.111111 vt 0.526316 0.074074 -vt 0.480263 0.111111 +vt 0.476974 0.111111 vt 0.473684 0.074074 -vt 0.427632 0.111111 +vt 0.424342 0.111111 vt 0.421053 0.074074 -vt 0.375000 0.111111 +vt 0.371711 0.111111 vt 0.368421 0.074074 vt 0.315789 0.074074 -vt 0.368421 0.111111 -vt 0.322368 0.111111 +vt 0.365132 0.111111 +vt 0.319079 0.111111 vt 0.263158 0.037037 -vt 0.315789 0.000000 +vt 0.312500 0.000000 vt 0.315789 0.037037 vt 0.210526 0.037037 -vt 0.263158 0.000000 +vt 0.259868 0.000000 vt 0.157895 0.037037 -vt 0.210526 0.000000 +vt 0.207237 0.000000 vt 0.105263 0.037037 -vt 0.157895 0.000000 +vt 0.154605 0.000000 vt 0.052632 0.037037 -vt 0.105263 0.000000 +vt 0.101974 0.000000 vt -0.000000 0.037037 -vt 0.052632 0.000000 -vt 0.802632 0.000000 +vt 0.049342 0.000000 +vt 0.799342 0.000000 vt 0.842105 0.037037 vt 0.789474 0.037037 -vt 0.750000 0.000000 +vt 0.746711 0.000000 vt 0.736842 0.037037 -vt 0.697368 0.000000 +vt 0.694079 0.000000 vt 0.684211 0.037037 -vt 0.644737 0.000000 +vt 0.641447 0.000000 vt 0.631579 0.037037 -vt 0.592105 0.000000 +vt 0.588816 0.000000 vt 0.578947 0.037037 -vt 0.539474 0.000000 +vt 0.536184 0.000000 vt 0.526316 0.037037 -vt 0.480263 0.000000 +vt 0.476974 0.000000 vt 0.473684 0.037037 -vt 0.427632 0.000000 +vt 0.424342 0.000000 vt 0.421053 0.037037 -vt 0.375000 0.000000 +vt 0.371711 0.000000 vt 0.368421 0.037037 -vt 0.368421 0.000000 +vt 0.365132 0.000000 vt 0.578947 0.722222 vt 0.657895 0.833333 vt 0.578947 0.833333 @@ -3739,31 +3759,31 @@ vt 0.263158 0.740741 vt 0.368421 0.296296 vt 0.526316 0.592593 vt 0.052632 0.888889 -vt 0.842105 0.111111 -vt 0.789474 0.111111 -vt 0.736842 0.111111 -vt 0.684211 0.111111 -vt 0.631579 0.111111 -vt 0.578947 0.111111 -vt 0.526316 0.111111 -vt 0.473684 0.111111 -vt 0.421053 0.111111 -vt 0.269737 0.000000 -vt 0.217105 0.000000 -vt 0.164474 0.000000 -vt 0.111842 0.000000 -vt 0.059211 0.000000 -vt 0.006579 0.000000 -vt 0.842105 0.000000 -vt 0.789474 0.000000 -vt 0.736842 0.000000 -vt 0.684211 0.000000 -vt 0.631579 0.000000 -vt 0.578947 0.000000 -vt 0.526316 0.000000 -vt 0.473684 0.000000 -vt 0.421053 0.000000 -vt 0.322368 0.000000 +vt 0.838816 0.111111 +vt 0.786184 0.111111 +vt 0.733553 0.111111 +vt 0.680921 0.111111 +vt 0.628289 0.111111 +vt 0.575658 0.111111 +vt 0.523026 0.111111 +vt 0.470395 0.111111 +vt 0.417763 0.111111 +vt 0.266447 0.000000 +vt 0.213816 0.000000 +vt 0.161184 0.000000 +vt 0.108553 0.000000 +vt 0.055921 0.000000 +vt 0.003289 0.000000 +vt 0.838816 0.000000 +vt 0.786184 0.000000 +vt 0.733553 0.000000 +vt 0.680921 0.000000 +vt 0.628289 0.000000 +vt 0.575658 0.000000 +vt 0.523026 0.000000 +vt 0.470395 0.000000 +vt 0.417763 0.000000 +vt 0.319079 0.000000 vt 0.644737 0.888889 vt 0.697368 0.740741 vt 0.539474 0.814815 @@ -3824,22 +3844,22 @@ vt 0.473684 0.685185 vt 0.513158 0.592593 vt 0.578947 0.648148 vt 0.473684 0.685185 -vt 0.059211 0.148148 -vt 0.111842 0.148148 -vt 0.164474 0.148148 -vt 0.217105 0.148148 -vt 0.269737 0.148148 -vt 0.322368 0.148148 -vt 0.375000 0.148148 -vt 0.427632 0.148148 -vt 0.480263 0.148148 -vt 0.638158 0.148148 -vt 0.532895 0.148148 -vt 0.690789 0.148148 -vt 0.585526 0.148148 -vt 0.743421 0.148148 -vt 0.796053 0.148148 -vt 0.006579 0.148148 +vt 0.055921 0.148148 +vt 0.108553 0.148148 +vt 0.161184 0.148148 +vt 0.213816 0.148148 +vt 0.266447 0.148148 +vt 0.319079 0.148148 +vt 0.371711 0.148148 +vt 0.424342 0.148148 +vt 0.476974 0.148148 +vt 0.634869 0.148148 +vt 0.529605 0.148148 +vt 0.687500 0.148148 +vt 0.582237 0.148148 +vt 0.740132 0.148148 +vt 0.792763 0.148148 +vt 0.003289 0.148148 vt 0.960526 0.000000 vt 0.980263 0.370370 vt 0.960526 0.370370 @@ -3857,22 +3877,22 @@ vt 0.921053 0.370370 vt 0.921053 0.000000 vt 0.940789 0.370370 vt 0.940789 0.000000 -vt 0.105263 0.148148 -vt 0.157895 0.148148 -vt 0.210526 0.148148 -vt 0.263158 0.148148 -vt 0.315789 0.148148 -vt 0.368421 0.148148 -vt 0.421053 0.148148 -vt 0.473684 0.148148 -vt 0.526316 0.148148 -vt 0.684211 0.148148 -vt 0.578947 0.148148 -vt 0.736842 0.148148 -vt 0.631579 0.148148 -vt 0.789474 0.148148 -vt 0.842105 0.148148 -vt 0.052632 0.148148 +vt 0.101974 0.148148 +vt 0.154605 0.148148 +vt 0.207237 0.148148 +vt 0.259868 0.148148 +vt 0.312500 0.148148 +vt 0.365132 0.148148 +vt 0.417763 0.148148 +vt 0.470395 0.148148 +vt 0.523026 0.148148 +vt 0.680921 0.148148 +vt 0.575658 0.148148 +vt 0.733553 0.148148 +vt 0.628289 0.148148 +vt 0.786184 0.148148 +vt 0.838816 0.148148 +vt 0.049342 0.148148 vt 1.000000 0.000000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 @@ -3899,752 +3919,752 @@ vn -0.9239 0.0000 0.3827 vn -0.0000 -0.7071 -0.7071 vn -0.0000 -0.7071 0.7071 s off -f 566/989/107 564/990/107 565/991/107 -f 568/992/108 569/993/108 567/994/108 -f 570/995/109 573/996/109 569/993/109 -f 574/997/107 571/998/107 573/996/107 -f 572/999/110 567/994/110 571/1000/110 -f 573/996/111 567/1001/111 569/1002/111 -f 570/1003/112 572/1004/112 574/997/112 -f 576/1005/108 577/1006/108 575/1007/108 -f 578/1008/109 581/1009/109 577/1006/109 -f 582/1010/107 579/1011/107 581/1009/107 -f 580/1012/110 575/1007/110 579/1013/110 -f 581/1009/111 575/1014/111 577/1015/111 -f 578/1016/112 580/1017/112 582/1010/112 -f 584/1018/108 585/1019/108 583/1020/108 -f 586/1021/109 589/1022/109 585/1019/109 -f 590/1023/107 587/1024/107 589/1022/107 -f 588/1025/110 583/1020/110 587/1026/110 -f 589/1022/111 583/1027/111 585/1028/111 -f 586/1029/112 588/1030/112 590/1023/112 -f 592/1031/108 593/1032/108 591/1033/108 -f 594/1034/109 597/1035/109 593/1032/109 -f 598/1036/107 595/1037/107 597/1035/107 -f 596/1038/110 591/1033/110 595/1039/110 -f 597/1035/111 591/1040/111 593/1041/111 -f 594/1042/112 596/1043/112 598/1036/112 -f 565/991/111 602/1044/111 566/989/111 -f 563/1045/112 600/1046/112 564/990/112 -f 602/1044/108 600/1047/108 599/1048/108 -f 606/1049/107 604/1050/107 605/1051/107 -f 605/1051/111 610/1052/111 606/1049/111 -f 603/1053/112 608/1054/112 604/1055/112 -f 610/1052/108 608/1054/108 607/1056/108 -f 614/1057/109 612/1058/109 613/1059/109 +f 574/997/107 572/998/107 573/999/107 +f 576/1000/108 577/1001/108 575/1002/108 +f 578/1003/109 581/1004/109 577/1001/109 +f 582/1005/107 579/1006/107 581/1004/107 +f 580/1007/110 575/1002/110 579/1008/110 +f 581/1004/111 575/1009/111 577/1010/111 +f 578/1011/112 580/1012/112 582/1005/112 +f 584/1013/108 585/1014/108 583/1015/108 +f 586/1016/109 589/1017/109 585/1014/109 +f 590/1018/107 587/1019/107 589/1017/107 +f 588/1020/110 583/1015/110 587/1021/110 +f 589/1017/111 583/1022/111 585/1023/111 +f 586/1024/112 588/1025/112 590/1018/112 +f 592/1026/108 593/1027/108 591/1028/108 +f 594/1029/109 597/1030/109 593/1027/109 +f 598/1031/107 595/1032/107 597/1030/107 +f 596/1033/110 591/1028/110 595/1034/110 +f 597/1030/111 591/1035/111 593/1036/111 +f 594/1037/112 596/1038/112 598/1031/112 +f 600/1039/108 601/1040/108 599/1041/108 +f 602/1042/109 605/1043/109 601/1040/109 +f 606/1044/107 603/1045/107 605/1043/107 +f 604/1046/110 599/1041/110 603/1047/110 +f 605/1043/111 599/1048/111 601/1049/111 +f 602/1050/112 604/1051/112 606/1044/112 +f 573/999/111 610/1052/111 574/997/111 +f 571/1053/112 608/1054/112 572/998/112 +f 610/1052/108 608/1055/108 607/1056/108 +f 614/1057/107 612/1058/107 613/1059/107 f 613/1059/111 618/1060/111 614/1057/111 -f 611/1061/112 616/1062/112 612/1058/112 -f 618/1060/110 616/1063/110 615/1064/110 +f 611/1061/112 616/1062/112 612/1063/112 +f 618/1060/108 616/1062/108 615/1064/108 f 622/1065/109 620/1066/109 621/1067/109 f 621/1067/111 626/1068/111 622/1065/111 -f 619/1069/112 624/1070/112 620/1071/112 -f 626/1068/110 624/1070/110 623/1072/110 -f 628/1073/107 629/1074/107 627/1075/107 -f 633/1076/111 642/1077/111 634/1078/111 -f 630/1079/109 635/1080/109 629/1074/109 -f 627/1075/110 637/1081/110 628/1073/110 -f 628/1073/111 638/1082/111 630/1079/111 -f 629/1074/112 636/1083/112 627/1075/112 -f 632/1084/108 635/1085/108 631/1086/108 -f 633/1087/108 636/1088/108 632/1089/108 -f 634/1078/108 637/1090/108 633/1076/108 -f 631/1091/108 638/1092/108 634/1093/108 -f 631/1086/112 640/1094/112 632/1084/112 -f 634/1093/109 639/1095/109 631/1091/109 -f 632/1089/110 641/1096/110 633/1087/110 -f 645/1097/111 644/1098/111 643/1099/111 -f 649/1100/112 647/1101/112 648/1102/112 -f 645/1103/108 650/1104/108 646/1105/108 -f 644/1098/107 648/1102/107 643/1099/107 -f 646/1106/109 649/1100/109 644/1107/109 -f 643/1108/110 647/1101/110 645/1109/110 -f 653/1110/111 652/1111/111 651/1112/111 -f 657/1113/112 655/1114/112 656/1115/112 -f 653/1116/108 658/1117/108 654/1118/108 -f 652/1111/107 656/1115/107 651/1112/107 -f 654/1119/109 657/1113/109 652/1120/109 -f 651/1121/110 655/1114/110 653/1122/110 -f 661/1123/111 660/1124/111 659/1125/111 -f 665/1126/112 663/1127/112 664/1128/112 -f 661/1129/108 666/1130/108 662/1131/108 -f 660/1124/107 664/1128/107 659/1125/107 -f 662/1132/109 665/1126/109 660/1133/109 -f 659/1134/110 663/1127/110 661/1135/110 -f 667/1136/111 676/1137/111 668/1138/111 -f 673/1139/112 677/1140/112 672/1141/112 -f 668/1138/107 678/1142/107 673/1143/107 -f 669/1144/109 674/1145/109 670/1146/109 -f 668/1138/110 672/1147/110 667/1136/110 -f 677/1140/109 676/1137/109 675/1148/109 -f 672/1149/108 675/1148/108 667/1136/108 -f 680/1150/109 681/1151/109 679/1152/109 -f 686/1153/110 683/1154/110 684/1155/110 -f 681/1156/111 684/1157/111 679/1158/111 -f 679/1159/108 683/1154/108 680/1150/108 -f 680/1150/112 685/1160/112 682/1161/112 -f 682/1161/107 686/1162/107 681/1156/107 -f 689/1163/110 688/1164/110 687/1165/110 -f 669/1166/108 690/1167/108 671/1168/108 -f 671/1168/112 689/1163/112 674/1145/112 -f 670/1169/111 688/1170/111 669/1171/111 -f 674/1145/107 687/1172/107 670/1169/107 -f 700/1173/112 717/1174/112 716/1175/112 -f 699/1176/112 716/1177/112 715/1178/112 -f 698/1179/112 715/1180/112 714/1181/112 -f 697/1182/112 714/1183/112 713/1184/112 -f 696/1185/112 713/1186/112 712/1187/112 -f 695/1188/112 712/1189/112 711/1190/112 -f 695/1191/112 710/1192/112 694/1193/112 -f 694/1193/112 709/1194/112 693/1195/112 -f 693/1195/112 708/1196/112 692/1197/112 -f 692/1197/112 707/1198/112 691/1199/112 -f 691/1199/112 722/1200/112 706/1201/112 -f 706/1201/112 721/1202/112 705/1203/112 -f 705/1203/112 720/1204/112 704/1205/112 -f 704/1205/112 719/1206/112 703/1207/112 -f 703/1207/112 718/1208/112 702/1209/112 -f 701/1210/112 718/1211/112 717/1212/112 -f 732/1213/111 749/1214/111 733/1215/111 -f 731/1216/111 748/1217/111 732/1213/111 -f 730/1218/111 747/1219/111 731/1216/111 -f 729/1220/111 746/1221/111 730/1218/111 -f 728/1222/111 745/1223/111 729/1220/111 -f 727/1224/111 744/1225/111 728/1222/111 -f 742/1226/111 727/1227/111 726/1228/111 -f 741/1229/111 726/1228/111 725/1230/111 -f 739/1231/111 725/1230/111 723/1232/111 -f 740/1233/111 723/1232/111 724/1234/111 -f 754/1235/111 724/1234/111 738/1236/111 -f 753/1237/111 738/1236/111 737/1238/111 -f 752/1239/111 737/1238/111 736/1240/111 -f 751/1241/111 736/1240/111 735/1242/111 -f 750/1243/111 735/1242/111 734/1244/111 -f 733/1215/111 750/1245/111 734/1244/111 -f 756/1246/112 757/1247/112 755/1248/112 -f 761/1249/107 802/1250/107 762/1251/107 -f 757/1247/108 796/1252/108 755/1248/108 -f 758/1253/109 795/1254/109 757/1247/109 -f 755/1248/110 797/1255/110 756/1246/110 -f 756/1246/107 798/1256/107 758/1253/107 -f 794/1257/108 863/1258/108 792/1259/108 -f 791/1260/107 865/1261/107 793/1262/107 -f 779/1263/108 851/1264/108 781/1265/108 -f 781/1265/109 854/1266/109 782/1267/109 -f 780/1268/110 852/1269/110 779/1263/110 -f 785/1270/112 784/1271/112 786/1272/112 -f 769/1273/112 768/1274/112 770/1275/112 -f 764/1276/110 858/1277/110 763/1278/110 -f 765/1279/109 855/1280/109 766/1281/109 -f 763/1278/108 856/1282/108 765/1279/108 -f 775/1283/107 861/1284/107 777/1285/107 -f 778/1286/108 859/1287/108 776/1288/108 -f 776/1288/109 862/1289/109 775/1283/109 -f 777/1290/110 860/1291/110 778/1286/110 -f 772/1292/112 773/1293/112 771/1294/112 -f 766/1281/107 857/1295/107 764/1296/107 -f 792/1259/109 866/1297/109 791/1260/109 -f 793/1298/110 864/1299/110 794/1257/110 -f 788/1300/112 789/1301/112 787/1302/112 -f 782/1267/107 853/1303/107 780/1304/107 -f 760/1305/111 795/1306/111 759/1307/111 -f 761/1308/111 796/1309/111 760/1310/111 -f 762/1251/111 797/1311/111 761/1249/111 -f 759/1312/111 798/1313/111 762/1314/111 -f 799/1315/111 801/1316/111 800/1317/111 -f 759/1307/108 800/1318/108 760/1305/108 -f 762/1314/109 799/1319/109 759/1312/109 -f 760/1310/110 801/1320/110 761/1308/110 -f 805/1321/111 804/1322/111 803/1323/111 -f 808/1324/112 810/1325/112 807/1326/112 -f 804/1322/113 808/1324/113 803/1323/113 -f 805/1327/114 810/1325/114 806/1328/114 +f 619/1069/112 624/1070/112 620/1066/112 +f 626/1068/110 624/1071/110 623/1072/110 +f 630/1073/109 628/1074/109 629/1075/109 +f 629/1075/111 634/1076/111 630/1073/111 +f 627/1077/112 632/1078/112 628/1079/112 +f 634/1076/110 632/1078/110 631/1080/110 +f 636/1081/107 637/1082/107 635/1083/107 +f 641/1084/111 650/1085/111 642/1086/111 +f 638/1087/109 643/1088/109 637/1082/109 +f 635/1083/110 645/1089/110 636/1081/110 +f 636/1081/111 646/1090/111 638/1087/111 +f 637/1082/112 644/1091/112 635/1083/112 +f 640/1092/108 643/1093/108 639/1094/108 +f 641/1095/108 644/1096/108 640/1097/108 +f 642/1086/108 645/1098/108 641/1084/108 +f 639/1099/108 646/1100/108 642/1101/108 +f 639/1094/112 648/1102/112 640/1092/112 +f 642/1101/109 647/1103/109 639/1099/109 +f 640/1097/110 649/1104/110 641/1095/110 +f 653/1105/111 652/1106/111 651/1107/111 +f 657/1108/112 655/1109/112 656/1110/112 +f 653/1111/108 658/1112/108 654/1113/108 +f 652/1106/107 656/1110/107 651/1107/107 +f 654/1114/109 657/1108/109 652/1115/109 +f 651/1116/110 655/1109/110 653/1117/110 +f 661/1118/111 660/1119/111 659/1120/111 +f 665/1121/112 663/1122/112 664/1123/112 +f 661/1124/108 666/1125/108 662/1126/108 +f 660/1119/107 664/1123/107 659/1120/107 +f 662/1127/109 665/1121/109 660/1128/109 +f 659/1129/110 663/1122/110 661/1130/110 +f 669/1131/111 668/1132/111 667/1133/111 +f 673/1134/112 671/1135/112 672/1136/112 +f 669/1137/108 674/1138/108 670/1139/108 +f 668/1132/107 672/1136/107 667/1133/107 +f 670/1140/109 673/1134/109 668/1141/109 +f 667/1142/110 671/1135/110 669/1143/110 +f 675/1144/111 684/1145/111 676/1146/111 +f 681/1147/112 685/1148/112 680/1149/112 +f 676/1146/107 686/1150/107 681/1151/107 +f 677/1152/109 682/1153/109 678/1154/109 +f 676/1146/110 680/1155/110 675/1144/110 +f 685/1148/109 684/1145/109 683/1156/109 +f 680/1157/108 683/1156/108 675/1144/108 +f 688/1158/109 689/1159/109 687/1160/109 +f 694/1161/110 691/1162/110 692/1163/110 +f 689/1164/111 692/1165/111 687/1166/111 +f 687/1167/108 691/1162/108 688/1158/108 +f 688/1158/112 693/1168/112 690/1169/112 +f 690/1169/107 694/1170/107 689/1164/107 +f 697/1171/110 696/1172/110 695/1173/110 +f 677/1174/108 698/1175/108 679/1176/108 +f 679/1176/112 697/1171/112 682/1153/112 +f 678/1177/111 696/1178/111 677/1179/111 +f 682/1153/107 695/1180/107 678/1177/107 +f 708/1181/112 725/1182/112 724/1183/112 +f 707/1184/112 724/1185/112 723/1186/112 +f 706/1187/112 723/1188/112 722/1189/112 +f 705/1190/112 722/1191/112 721/1192/112 +f 704/1193/112 721/1194/112 720/1195/112 +f 703/1196/112 720/1197/112 719/1198/112 +f 703/1199/112 718/1200/112 702/1201/112 +f 702/1201/112 717/1202/112 701/1203/112 +f 701/1203/112 716/1204/112 700/1205/112 +f 700/1205/112 715/1206/112 699/1207/112 +f 699/1207/112 730/1208/112 714/1209/112 +f 714/1209/112 729/1210/112 713/1211/112 +f 713/1211/112 728/1212/112 712/1213/112 +f 712/1213/112 727/1214/112 711/1215/112 +f 711/1215/112 726/1216/112 710/1217/112 +f 709/1218/112 726/1219/112 725/1220/112 +f 740/1221/111 757/1222/111 741/1223/111 +f 739/1224/111 756/1225/111 740/1221/111 +f 738/1226/111 755/1227/111 739/1224/111 +f 737/1228/111 754/1229/111 738/1226/111 +f 736/1230/111 753/1231/111 737/1228/111 +f 735/1232/111 752/1233/111 736/1230/111 +f 750/1234/111 735/1235/111 734/1236/111 +f 749/1237/111 734/1236/111 733/1238/111 +f 747/1239/111 733/1238/111 731/1240/111 +f 748/1241/111 731/1240/111 732/1242/111 +f 762/1243/111 732/1242/111 746/1244/111 +f 761/1245/111 746/1244/111 745/1246/111 +f 760/1247/111 745/1246/111 744/1248/111 +f 759/1249/111 744/1248/111 743/1250/111 +f 758/1251/111 743/1250/111 742/1252/111 +f 741/1223/111 758/1253/111 742/1252/111 +f 764/1254/112 765/1255/112 763/1256/112 +f 769/1257/107 810/1258/107 770/1259/107 +f 765/1255/108 804/1260/108 763/1256/108 +f 766/1261/109 803/1262/109 765/1255/109 +f 763/1256/110 805/1263/110 764/1254/110 +f 764/1254/107 806/1264/107 766/1261/107 +f 802/1265/108 871/1266/108 800/1267/108 +f 799/1268/107 873/1269/107 801/1270/107 +f 787/1271/108 859/1272/108 789/1273/108 +f 789/1273/109 862/1274/109 790/1275/109 +f 788/1276/110 860/1277/110 787/1271/110 +f 793/1278/112 792/1279/112 794/1280/112 +f 777/1281/112 776/1282/112 778/1283/112 +f 772/1284/110 866/1285/110 771/1286/110 +f 773/1287/109 863/1288/109 774/1289/109 +f 771/1286/108 864/1290/108 773/1287/108 +f 783/1291/107 869/1292/107 785/1293/107 +f 786/1294/108 867/1295/108 784/1296/108 +f 784/1296/109 870/1297/109 783/1291/109 +f 785/1298/110 868/1299/110 786/1294/110 +f 780/1300/112 781/1301/112 779/1302/112 +f 774/1289/107 865/1303/107 772/1304/107 +f 800/1267/109 874/1305/109 799/1268/109 +f 801/1306/110 872/1307/110 802/1265/110 +f 796/1308/112 797/1309/112 795/1310/112 +f 790/1275/107 861/1311/107 788/1312/107 +f 768/1313/111 803/1314/111 767/1315/111 +f 769/1316/111 804/1317/111 768/1318/111 +f 770/1259/111 805/1319/111 769/1257/111 +f 767/1320/111 806/1321/111 770/1322/111 +f 807/1323/111 809/1324/111 808/1325/111 +f 767/1315/108 808/1326/108 768/1313/108 +f 770/1322/109 807/1327/109 767/1320/109 +f 768/1318/110 809/1328/110 769/1316/110 f 813/1329/111 812/1330/111 811/1331/111 f 816/1332/112 818/1333/112 815/1334/112 -f 812/1330/115 816/1332/115 811/1331/115 -f 813/1335/116 818/1333/116 814/1336/116 -f 820/1337/112 840/1338/112 837/1339/112 -f 849/1340/108 848/1341/108 850/1342/108 -f 838/1343/111 841/1344/111 819/1345/111 -f 846/1346/111 849/1340/111 843/1347/111 -f 841/1344/107 840/1338/107 842/1348/107 -f 830/1349/107 828/1350/107 826/1351/107 -f 844/1352/112 848/1341/112 845/1353/112 -f 827/1354/108 831/1355/108 835/1356/108 -f 784/1357/117 852/1269/117 786/1358/117 -f 786/1359/118 853/1360/118 785/1361/118 -f 785/1270/119 854/1266/119 783/1362/119 -f 783/1363/120 851/1264/120 784/1364/120 -f 767/1365/120 856/1282/120 768/1366/120 -f 769/1273/119 855/1280/119 767/1367/119 -f 770/1368/118 857/1369/118 769/1370/118 -f 768/1371/117 858/1277/117 770/1372/117 -f 773/1373/117 860/1291/117 771/1374/117 -f 771/1375/118 861/1376/118 772/1377/118 -f 772/1292/119 862/1289/119 774/1378/119 -f 774/1379/120 859/1287/120 773/1380/120 -f 789/1381/117 864/1299/117 787/1382/117 -f 787/1383/118 865/1384/118 788/1385/118 -f 788/1300/119 866/1297/119 790/1386/119 -f 790/1387/120 863/1258/120 789/1388/120 -f 868/1389/107 869/1390/107 867/1391/107 -f 873/1392/111 882/1393/111 874/1394/111 -f 870/1395/109 875/1396/109 869/1390/109 -f 867/1391/110 877/1397/110 868/1389/110 -f 868/1389/111 878/1398/111 870/1395/111 -f 869/1390/112 876/1399/112 867/1391/112 -f 872/1400/108 875/1401/108 871/1402/108 -f 873/1403/108 876/1404/108 872/1405/108 -f 874/1394/108 877/1406/108 873/1392/108 -f 871/1407/108 878/1408/108 874/1409/108 -f 871/1402/112 880/1410/112 872/1400/112 -f 874/1409/109 879/1411/109 871/1407/109 -f 872/1405/110 881/1412/110 873/1403/110 -f 884/1413/107 885/1414/107 883/1415/107 -f 889/1416/111 898/1417/111 890/1418/111 -f 886/1419/109 891/1420/109 885/1414/109 -f 883/1415/110 893/1421/110 884/1413/110 -f 884/1413/111 894/1422/111 886/1419/111 -f 885/1414/112 892/1423/112 883/1415/112 -f 888/1424/108 891/1425/108 887/1426/108 -f 889/1427/108 892/1428/108 888/1429/108 -f 890/1418/108 893/1430/108 889/1416/108 -f 887/1431/108 894/1432/108 890/1433/108 -f 887/1426/112 896/1434/112 888/1424/112 -f 890/1433/109 895/1435/109 887/1431/109 -f 888/1429/110 897/1436/110 889/1427/110 -f 900/1437/108 901/1438/108 899/1439/108 -f 905/1440/111 914/1441/111 906/1442/111 -f 902/1443/110 907/1444/110 901/1438/110 -f 899/1439/109 909/1445/109 900/1437/109 -f 900/1437/111 910/1446/111 902/1443/111 -f 901/1438/112 908/1447/112 899/1439/112 -f 904/1448/107 907/1449/107 903/1450/107 -f 905/1451/107 908/1452/107 904/1453/107 -f 906/1442/107 909/1454/107 905/1440/107 -f 903/1455/107 910/1456/107 906/1457/107 -f 903/1450/112 912/1458/112 904/1448/112 -f 906/1457/110 911/1459/110 903/1455/110 -f 904/1453/109 913/1460/109 905/1451/109 -f 916/1461/108 917/1462/108 915/1463/108 -f 921/1464/111 930/1465/111 922/1466/111 -f 918/1467/110 923/1468/110 917/1462/110 -f 915/1463/109 925/1469/109 916/1461/109 -f 916/1461/111 926/1470/111 918/1467/111 -f 917/1462/112 924/1471/112 915/1463/112 -f 920/1472/107 923/1473/107 919/1474/107 -f 921/1475/107 924/1476/107 920/1477/107 -f 922/1466/107 925/1478/107 921/1464/107 -f 919/1479/107 926/1480/107 922/1481/107 -f 919/1474/112 928/1482/112 920/1472/112 -f 922/1481/110 927/1483/110 919/1479/110 -f 920/1477/109 929/1484/109 921/1475/109 -f 932/1485/108 933/1486/108 931/1487/108 -f 937/1488/111 946/1489/111 938/1490/111 -f 934/1491/110 939/1492/110 933/1486/110 -f 931/1487/109 941/1493/109 932/1485/109 -f 932/1485/111 942/1494/111 934/1491/111 -f 933/1486/112 940/1495/112 931/1487/112 -f 936/1496/107 939/1497/107 935/1498/107 -f 937/1499/107 940/1500/107 936/1501/107 -f 938/1490/107 941/1502/107 937/1488/107 -f 935/1503/107 942/1504/107 938/1505/107 -f 935/1498/112 944/1506/112 936/1496/112 -f 938/1505/110 943/1507/110 935/1503/110 -f 936/1501/109 945/1508/109 937/1499/109 -f 948/1509/109 949/1510/109 947/1511/109 -f 953/1512/111 962/1513/111 954/1514/111 -f 950/1515/108 955/1516/108 949/1510/108 -f 947/1511/107 957/1517/107 948/1509/107 -f 948/1509/111 958/1518/111 950/1515/111 -f 949/1510/112 956/1519/112 947/1511/112 -f 952/1520/110 955/1521/110 951/1522/110 -f 953/1523/110 956/1524/110 952/1525/110 -f 954/1514/110 957/1526/110 953/1512/110 -f 951/1527/110 958/1528/110 954/1529/110 -f 951/1522/112 960/1530/112 952/1520/112 -f 954/1529/108 959/1531/108 951/1527/108 -f 952/1525/107 961/1532/107 953/1523/107 -f 964/1533/109 965/1534/109 963/1535/109 -f 969/1536/111 978/1537/111 970/1538/111 -f 966/1539/108 971/1540/108 965/1534/108 -f 963/1535/107 973/1541/107 964/1533/107 -f 964/1533/111 974/1542/111 966/1539/111 -f 965/1534/112 972/1543/112 963/1535/112 -f 968/1544/110 971/1545/110 967/1546/110 -f 969/1547/110 972/1548/110 968/1549/110 -f 970/1538/110 973/1550/110 969/1536/110 -f 967/1551/110 974/1552/110 970/1553/110 -f 967/1546/112 976/1554/112 968/1544/112 -f 970/1553/108 975/1555/108 967/1551/108 -f 968/1549/107 977/1556/107 969/1547/107 -f 980/1557/109 981/1558/109 979/1559/109 -f 985/1560/111 994/1561/111 986/1562/111 -f 982/1563/108 987/1564/108 981/1558/108 -f 979/1559/107 989/1565/107 980/1557/107 -f 980/1557/111 990/1566/111 982/1563/111 -f 981/1558/112 988/1567/112 979/1559/112 -f 984/1568/110 987/1569/110 983/1570/110 -f 985/1571/110 988/1572/110 984/1573/110 -f 986/1562/110 989/1574/110 985/1560/110 -f 983/1575/110 990/1576/110 986/1577/110 -f 984/1568/112 991/1578/112 992/1579/112 -f 986/1577/108 991/1580/108 983/1575/108 -f 984/1573/107 993/1581/107 985/1571/107 -f 996/1582/110 997/1583/110 995/1584/110 -f 1001/1585/111 1010/1586/111 1002/1587/111 -f 998/1588/107 1003/1589/107 997/1583/107 -f 995/1584/108 1005/1590/108 996/1582/108 -f 996/1582/111 1006/1591/111 998/1588/111 -f 997/1583/112 1004/1592/112 995/1584/112 -f 1000/1593/109 1003/1594/109 999/1595/109 -f 1001/1596/109 1004/1597/109 1000/1598/109 -f 1002/1587/109 1005/1599/109 1001/1585/109 -f 999/1600/109 1006/1601/109 1002/1602/109 -f 1000/1593/112 1007/1603/112 1008/1604/112 -f 1002/1602/107 1007/1605/107 999/1600/107 -f 1000/1598/108 1009/1606/108 1001/1596/108 -f 1012/1607/110 1013/1608/110 1011/1609/110 -f 1017/1610/111 1026/1611/111 1018/1612/111 -f 1014/1613/107 1019/1614/107 1013/1608/107 -f 1011/1609/108 1021/1615/108 1012/1607/108 -f 1012/1607/111 1022/1616/111 1014/1613/111 -f 1013/1608/112 1020/1617/112 1011/1609/112 -f 1016/1618/109 1019/1619/109 1015/1620/109 -f 1017/1621/109 1020/1622/109 1016/1623/109 -f 1018/1612/109 1021/1624/109 1017/1610/109 -f 1015/1625/109 1022/1626/109 1018/1627/109 -f 1015/1620/112 1024/1628/112 1016/1618/112 -f 1018/1627/107 1023/1629/107 1015/1625/107 -f 1016/1623/108 1025/1630/108 1017/1621/108 -f 1028/1631/110 1029/1632/110 1027/1633/110 -f 1033/1634/111 1042/1635/111 1034/1636/111 -f 1030/1637/107 1035/1638/107 1029/1632/107 -f 1027/1633/108 1037/1639/108 1028/1631/108 -f 1028/1631/111 1038/1640/111 1030/1637/111 -f 1027/1633/112 1035/1641/112 1036/1642/112 -f 1032/1643/109 1035/1641/109 1031/1644/109 -f 1033/1645/109 1036/1646/109 1032/1647/109 -f 1034/1636/109 1037/1648/109 1033/1634/109 -f 1031/1649/109 1038/1650/109 1034/1651/109 -f 1032/1643/112 1039/1652/112 1040/1653/112 -f 1034/1651/107 1039/1654/107 1031/1649/107 -f 1032/1647/108 1041/1655/108 1033/1645/108 -f 566/989/107 563/1045/107 564/990/107 -f 568/992/108 570/995/108 569/993/108 -f 570/995/109 574/997/109 573/996/109 -f 574/997/107 572/1004/107 571/998/107 -f 572/999/110 568/992/110 567/994/110 -f 573/996/111 571/998/111 567/1001/111 -f 570/1003/112 568/1656/112 572/1004/112 -f 576/1005/108 578/1008/108 577/1006/108 -f 578/1008/109 582/1010/109 581/1009/109 -f 582/1010/107 580/1017/107 579/1011/107 -f 580/1012/110 576/1005/110 575/1007/110 -f 581/1009/111 579/1011/111 575/1014/111 -f 578/1016/112 576/1657/112 580/1017/112 -f 584/1018/108 586/1021/108 585/1019/108 -f 586/1021/109 590/1023/109 589/1022/109 -f 590/1023/107 588/1030/107 587/1024/107 -f 588/1025/110 584/1018/110 583/1020/110 -f 589/1022/111 587/1024/111 583/1027/111 -f 586/1029/112 584/1658/112 588/1030/112 -f 592/1031/108 594/1034/108 593/1032/108 -f 594/1034/109 598/1036/109 597/1035/109 -f 598/1036/107 596/1043/107 595/1037/107 -f 596/1038/110 592/1031/110 591/1033/110 -f 597/1035/111 595/1037/111 591/1040/111 -f 594/1042/112 592/1659/112 596/1043/112 -f 565/991/111 601/1660/111 602/1044/111 -f 563/1045/112 599/1661/112 600/1046/112 -f 602/1044/108 601/1660/108 600/1047/108 -f 606/1049/107 603/1662/107 604/1050/107 -f 605/1051/111 609/1663/111 610/1052/111 -f 603/1053/112 607/1056/112 608/1054/112 -f 610/1052/108 609/1663/108 608/1054/108 -f 614/1057/109 611/1061/109 612/1058/109 -f 613/1059/111 617/1664/111 618/1060/111 -f 611/1061/112 615/1665/112 616/1062/112 -f 618/1060/110 617/1664/110 616/1063/110 -f 622/1065/109 619/1666/109 620/1066/109 -f 621/1067/111 625/1667/111 626/1068/111 -f 619/1069/112 623/1072/112 624/1070/112 -f 626/1068/110 625/1667/110 624/1070/110 -f 628/1073/107 630/1079/107 629/1074/107 -f 633/1076/111 641/1668/111 642/1077/111 -f 630/1079/109 638/1092/109 635/1080/109 -f 627/1075/110 636/1088/110 637/1081/110 -f 628/1073/111 637/1090/111 638/1082/111 -f 629/1074/112 635/1085/112 636/1083/112 -f 632/1084/108 636/1083/108 635/1085/108 -f 633/1087/108 637/1081/108 636/1088/108 -f 634/1078/108 638/1082/108 637/1090/108 -f 631/1091/108 635/1080/108 638/1092/108 -f 631/1086/112 639/1669/112 640/1094/112 -f 634/1093/109 642/1670/109 639/1095/109 -f 632/1089/110 640/1671/110 641/1096/110 -f 645/1097/111 646/1672/111 644/1098/111 -f 649/1100/112 650/1104/112 647/1101/112 -f 645/1103/108 647/1101/108 650/1104/108 -f 644/1098/107 649/1100/107 648/1102/107 -f 646/1106/109 650/1104/109 649/1100/109 -f 643/1108/110 648/1102/110 647/1101/110 -f 653/1110/111 654/1673/111 652/1111/111 -f 657/1113/112 658/1117/112 655/1114/112 -f 653/1116/108 655/1114/108 658/1117/108 -f 652/1111/107 657/1113/107 656/1115/107 -f 654/1119/109 658/1117/109 657/1113/109 -f 651/1121/110 656/1115/110 655/1114/110 -f 661/1123/111 662/1674/111 660/1124/111 -f 665/1126/112 666/1130/112 663/1127/112 -f 661/1129/108 663/1127/108 666/1130/108 -f 660/1124/107 665/1126/107 664/1128/107 -f 662/1132/109 666/1130/109 665/1126/109 -f 659/1134/110 664/1128/110 663/1127/110 -f 667/1136/111 675/1148/111 676/1137/111 -f 673/1139/112 678/1675/112 677/1140/112 -f 668/1138/107 676/1137/107 678/1142/107 -f 669/1144/109 671/1168/109 674/1145/109 -f 668/1138/110 673/1676/110 672/1147/110 -f 677/1140/109 678/1675/109 676/1137/109 -f 672/1149/108 677/1677/108 675/1148/108 -f 680/1150/109 682/1161/109 681/1151/109 -f 686/1153/110 685/1160/110 683/1154/110 -f 681/1156/111 686/1162/111 684/1157/111 -f 679/1159/108 684/1678/108 683/1154/108 -f 680/1150/112 683/1154/112 685/1160/112 -f 682/1161/107 685/1160/107 686/1162/107 -f 689/1163/110 690/1167/110 688/1164/110 -f 669/1166/108 688/1679/108 690/1167/108 -f 671/1168/112 690/1167/112 689/1163/112 -f 670/1169/111 687/1172/111 688/1170/111 -f 674/1145/107 689/1163/107 687/1172/107 -f 700/1173/112 701/1210/112 717/1174/112 -f 699/1176/112 700/1173/112 716/1177/112 -f 698/1179/112 699/1176/112 715/1180/112 -f 697/1182/112 698/1179/112 714/1183/112 -f 696/1185/112 697/1182/112 713/1186/112 -f 695/1188/112 696/1185/112 712/1189/112 -f 695/1191/112 711/1680/112 710/1192/112 -f 694/1193/112 710/1681/112 709/1194/112 -f 693/1195/112 709/1682/112 708/1196/112 -f 692/1197/112 708/1683/112 707/1198/112 -f 691/1199/112 707/1684/112 722/1200/112 -f 706/1201/112 722/1685/112 721/1202/112 -f 705/1203/112 721/1686/112 720/1204/112 -f 704/1205/112 720/1687/112 719/1206/112 -f 703/1207/112 719/1688/112 718/1208/112 -f 701/1210/112 702/1209/112 718/1211/112 -f 732/1213/111 748/1689/111 749/1214/111 -f 731/1216/111 747/1690/111 748/1217/111 -f 730/1218/111 746/1691/111 747/1219/111 -f 729/1220/111 745/1692/111 746/1221/111 -f 728/1222/111 744/1693/111 745/1223/111 -f 727/1224/111 743/1694/111 744/1225/111 -f 742/1226/111 743/1695/111 727/1227/111 -f 741/1229/111 742/1696/111 726/1228/111 -f 739/1231/111 741/1697/111 725/1230/111 -f 740/1233/111 739/1698/111 723/1232/111 -f 754/1235/111 740/1699/111 724/1234/111 -f 753/1237/111 754/1700/111 738/1236/111 -f 752/1239/111 753/1701/111 737/1238/111 -f 751/1241/111 752/1702/111 736/1240/111 -f 750/1243/111 751/1703/111 735/1242/111 -f 733/1215/111 749/1704/111 750/1245/111 -f 756/1246/112 758/1253/112 757/1247/112 -f 761/1249/107 801/1316/107 802/1250/107 -f 757/1247/108 795/1306/108 796/1252/108 -f 758/1253/109 798/1313/109 795/1254/109 -f 755/1248/110 796/1309/110 797/1255/110 -f 756/1246/107 797/1311/107 798/1256/107 -f 794/1257/108 864/1299/108 863/1258/108 -f 791/1260/107 866/1297/107 865/1261/107 -f 779/1263/108 852/1269/108 851/1264/108 -f 781/1265/109 851/1264/109 854/1266/109 -f 780/1268/110 853/1360/110 852/1269/110 -f 785/1270/112 783/1362/112 784/1271/112 -f 769/1273/112 767/1367/112 768/1274/112 -f 764/1276/110 857/1369/110 858/1277/110 -f 765/1279/109 856/1282/109 855/1280/109 -f 763/1278/108 858/1277/108 856/1282/108 -f 775/1283/107 862/1289/107 861/1284/107 -f 778/1286/108 860/1291/108 859/1287/108 -f 776/1288/109 859/1287/109 862/1289/109 -f 777/1290/110 861/1376/110 860/1291/110 -f 772/1292/112 774/1378/112 773/1293/112 -f 766/1281/107 855/1280/107 857/1295/107 -f 792/1259/109 863/1258/109 866/1297/109 -f 793/1298/110 865/1384/110 864/1299/110 -f 788/1300/112 790/1386/112 789/1301/112 -f 782/1267/107 854/1266/107 853/1303/107 -f 760/1305/111 796/1252/111 795/1306/111 -f 761/1308/111 797/1255/111 796/1309/111 -f 762/1251/111 798/1256/111 797/1311/111 -f 759/1312/111 795/1254/111 798/1313/111 -f 799/1315/111 802/1250/111 801/1316/111 -f 759/1307/108 799/1705/108 800/1318/108 -f 762/1314/109 802/1706/109 799/1319/109 -f 760/1310/110 800/1707/110 801/1320/110 -f 805/1321/111 806/1708/111 804/1322/111 -f 808/1324/112 809/1709/112 810/1325/112 -f 804/1322/113 809/1709/113 808/1324/113 -f 805/1327/114 807/1326/114 810/1325/114 -f 813/1329/111 814/1710/111 812/1330/111 -f 816/1332/112 817/1711/112 818/1333/112 -f 812/1330/115 817/1711/115 816/1332/115 -f 813/1335/116 815/1334/116 818/1333/116 -f 820/1337/112 842/1348/112 840/1338/112 -f 849/1340/108 847/1712/108 848/1341/108 -f 838/1343/111 839/1713/111 841/1344/111 -f 846/1346/111 847/1712/111 849/1340/111 -f 841/1344/107 839/1713/107 840/1338/107 -f 826/1351/107 824/1714/107 822/1715/107 -f 822/1715/107 836/1716/107 826/1351/107 -f 836/1716/107 834/1717/107 826/1351/107 -f 834/1717/107 832/1718/107 826/1351/107 -f 832/1718/107 830/1349/107 826/1351/107 -f 844/1352/112 850/1342/112 848/1341/112 -f 835/1356/108 821/1719/108 823/1720/108 -f 823/1720/108 825/1721/108 827/1354/108 -f 827/1354/108 829/1722/108 831/1355/108 -f 831/1355/108 833/1723/108 835/1356/108 -f 835/1356/108 823/1720/108 827/1354/108 -f 784/1357/117 851/1264/117 852/1269/117 -f 786/1359/118 852/1269/118 853/1360/118 -f 785/1270/119 853/1303/119 854/1266/119 -f 783/1363/120 854/1266/120 851/1264/120 -f 767/1365/120 855/1280/120 856/1282/120 -f 769/1273/119 857/1295/119 855/1280/119 -f 770/1368/118 858/1277/118 857/1369/118 -f 768/1371/117 856/1282/117 858/1277/117 -f 773/1373/117 859/1287/117 860/1291/117 -f 771/1375/118 860/1291/118 861/1376/118 -f 772/1292/119 861/1284/119 862/1289/119 -f 774/1379/120 862/1289/120 859/1287/120 -f 789/1381/117 863/1258/117 864/1299/117 -f 787/1383/118 864/1299/118 865/1384/118 -f 788/1300/119 865/1261/119 866/1297/119 -f 790/1387/120 866/1297/120 863/1258/120 -f 868/1389/107 870/1395/107 869/1390/107 -f 873/1392/111 881/1724/111 882/1393/111 -f 870/1395/109 878/1408/109 875/1396/109 -f 867/1391/110 876/1404/110 877/1397/110 -f 868/1389/111 877/1406/111 878/1398/111 -f 869/1390/112 875/1401/112 876/1399/112 -f 872/1400/108 876/1399/108 875/1401/108 -f 873/1403/108 877/1397/108 876/1404/108 -f 874/1394/108 878/1398/108 877/1406/108 -f 871/1407/108 875/1396/108 878/1408/108 -f 871/1402/112 879/1725/112 880/1410/112 -f 874/1409/109 882/1726/109 879/1411/109 -f 872/1405/110 880/1727/110 881/1412/110 -f 884/1413/107 886/1419/107 885/1414/107 -f 889/1416/111 897/1728/111 898/1417/111 -f 886/1419/109 894/1432/109 891/1420/109 -f 883/1415/110 892/1428/110 893/1421/110 -f 884/1413/111 893/1430/111 894/1422/111 -f 885/1414/112 891/1425/112 892/1423/112 -f 888/1424/108 892/1423/108 891/1425/108 -f 889/1427/108 893/1421/108 892/1428/108 -f 890/1418/108 894/1422/108 893/1430/108 -f 887/1431/108 891/1420/108 894/1432/108 -f 887/1426/112 895/1729/112 896/1434/112 -f 890/1433/109 898/1730/109 895/1435/109 -f 888/1429/110 896/1731/110 897/1436/110 -f 900/1437/108 902/1443/108 901/1438/108 -f 905/1440/111 913/1732/111 914/1441/111 -f 902/1443/110 910/1456/110 907/1444/110 -f 899/1439/109 908/1452/109 909/1445/109 -f 900/1437/111 909/1454/111 910/1446/111 -f 901/1438/112 907/1449/112 908/1447/112 -f 904/1448/107 908/1447/107 907/1449/107 -f 905/1451/107 909/1445/107 908/1452/107 -f 906/1442/107 910/1446/107 909/1454/107 -f 903/1455/107 907/1444/107 910/1456/107 -f 903/1450/112 911/1733/112 912/1458/112 -f 906/1457/110 914/1734/110 911/1459/110 -f 904/1453/109 912/1735/109 913/1460/109 -f 916/1461/108 918/1467/108 917/1462/108 -f 921/1464/111 929/1736/111 930/1465/111 -f 918/1467/110 926/1480/110 923/1468/110 -f 915/1463/109 924/1476/109 925/1469/109 -f 916/1461/111 925/1478/111 926/1470/111 -f 917/1462/112 923/1473/112 924/1471/112 -f 920/1472/107 924/1471/107 923/1473/107 -f 921/1475/107 925/1469/107 924/1476/107 -f 922/1466/107 926/1470/107 925/1478/107 -f 919/1479/107 923/1468/107 926/1480/107 -f 919/1474/112 927/1737/112 928/1482/112 -f 922/1481/110 930/1738/110 927/1483/110 -f 920/1477/109 928/1739/109 929/1484/109 -f 932/1485/108 934/1491/108 933/1486/108 -f 937/1488/111 945/1740/111 946/1489/111 -f 934/1491/110 942/1504/110 939/1492/110 -f 931/1487/109 940/1500/109 941/1493/109 -f 932/1485/111 941/1502/111 942/1494/111 -f 933/1486/112 939/1497/112 940/1495/112 -f 936/1496/107 940/1495/107 939/1497/107 -f 937/1499/107 941/1493/107 940/1500/107 -f 938/1490/107 942/1494/107 941/1502/107 -f 935/1503/107 939/1492/107 942/1504/107 -f 935/1498/112 943/1741/112 944/1506/112 -f 938/1505/110 946/1742/110 943/1507/110 -f 936/1501/109 944/1743/109 945/1508/109 -f 948/1509/109 950/1515/109 949/1510/109 -f 953/1512/111 961/1744/111 962/1513/111 -f 950/1515/108 958/1528/108 955/1516/108 -f 947/1511/107 956/1524/107 957/1517/107 -f 948/1509/111 957/1526/111 958/1518/111 -f 949/1510/112 955/1521/112 956/1519/112 -f 952/1520/110 956/1519/110 955/1521/110 -f 953/1523/110 957/1517/110 956/1524/110 -f 954/1514/110 958/1518/110 957/1526/110 -f 951/1527/110 955/1516/110 958/1528/110 -f 951/1522/112 959/1745/112 960/1530/112 -f 954/1529/108 962/1746/108 959/1531/108 -f 952/1525/107 960/1747/107 961/1532/107 -f 964/1533/109 966/1539/109 965/1534/109 -f 969/1536/111 977/1748/111 978/1537/111 -f 966/1539/108 974/1552/108 971/1540/108 -f 963/1535/107 972/1548/107 973/1541/107 -f 964/1533/111 973/1550/111 974/1542/111 -f 965/1534/112 971/1545/112 972/1543/112 -f 968/1544/110 972/1543/110 971/1545/110 -f 969/1547/110 973/1541/110 972/1548/110 -f 970/1538/110 974/1542/110 973/1550/110 -f 967/1551/110 971/1540/110 974/1552/110 -f 967/1546/112 975/1749/112 976/1554/112 -f 970/1553/108 978/1750/108 975/1555/108 -f 968/1549/107 976/1751/107 977/1556/107 -f 980/1557/109 982/1563/109 981/1558/109 -f 985/1560/111 993/1752/111 994/1561/111 -f 982/1563/108 990/1576/108 987/1564/108 -f 979/1559/107 988/1572/107 989/1565/107 -f 980/1557/111 989/1574/111 990/1566/111 -f 981/1558/112 987/1569/112 988/1567/112 -f 984/1568/110 988/1567/110 987/1569/110 -f 985/1571/110 989/1565/110 988/1572/110 -f 986/1562/110 990/1566/110 989/1574/110 -f 983/1575/110 987/1564/110 990/1576/110 -f 984/1568/112 983/1570/112 991/1578/112 -f 986/1577/108 994/1753/108 991/1580/108 -f 984/1573/107 992/1754/107 993/1581/107 -f 996/1582/110 998/1588/110 997/1583/110 -f 1001/1585/111 1009/1755/111 1010/1586/111 -f 998/1588/107 1006/1601/107 1003/1589/107 -f 995/1584/108 1004/1597/108 1005/1590/108 -f 996/1582/111 1005/1599/111 1006/1591/111 -f 997/1583/112 1003/1594/112 1004/1592/112 -f 1000/1593/109 1004/1592/109 1003/1594/109 -f 1001/1596/109 1005/1590/109 1004/1597/109 -f 1002/1587/109 1006/1591/109 1005/1599/109 -f 999/1600/109 1003/1589/109 1006/1601/109 -f 1000/1593/112 999/1595/112 1007/1603/112 -f 1002/1602/107 1010/1756/107 1007/1605/107 -f 1000/1598/108 1008/1757/108 1009/1606/108 -f 1012/1607/110 1014/1613/110 1013/1608/110 -f 1017/1610/111 1025/1758/111 1026/1611/111 -f 1014/1613/107 1022/1626/107 1019/1614/107 -f 1011/1609/108 1020/1622/108 1021/1615/108 -f 1012/1607/111 1021/1624/111 1022/1616/111 -f 1013/1608/112 1019/1619/112 1020/1617/112 -f 1016/1618/109 1020/1617/109 1019/1619/109 -f 1017/1621/109 1021/1615/109 1020/1622/109 -f 1018/1612/109 1022/1616/109 1021/1624/109 -f 1015/1625/109 1019/1614/109 1022/1626/109 -f 1015/1620/112 1023/1759/112 1024/1628/112 -f 1018/1627/107 1026/1760/107 1023/1629/107 -f 1016/1623/108 1024/1761/108 1025/1630/108 -f 1028/1631/110 1030/1637/110 1029/1632/110 -f 1033/1634/111 1041/1762/111 1042/1635/111 -f 1030/1637/107 1038/1650/107 1035/1638/107 -f 1027/1633/108 1036/1646/108 1037/1639/108 -f 1028/1631/111 1037/1648/111 1038/1640/111 -f 1027/1633/112 1029/1632/112 1035/1641/112 -f 1032/1643/109 1036/1642/109 1035/1641/109 -f 1033/1645/109 1037/1639/109 1036/1646/109 -f 1034/1636/109 1038/1640/109 1037/1648/109 -f 1031/1649/109 1035/1638/109 1038/1650/109 -f 1032/1643/112 1031/1644/112 1039/1652/112 -f 1034/1651/107 1042/1763/107 1039/1654/107 -f 1032/1647/108 1040/1764/108 1041/1655/108 +f 812/1330/113 816/1332/113 811/1331/113 +f 813/1335/114 818/1333/114 814/1336/114 +f 821/1337/111 820/1338/111 819/1339/111 +f 824/1340/112 826/1341/112 823/1342/112 +f 820/1338/115 824/1340/115 819/1339/115 +f 821/1343/116 826/1341/116 822/1344/116 +f 828/1345/112 848/1346/112 845/1347/112 +f 857/1348/108 856/1349/108 858/1350/108 +f 846/1351/111 849/1352/111 827/1353/111 +f 854/1354/111 857/1348/111 851/1355/111 +f 849/1352/107 848/1346/107 850/1356/107 +f 838/1357/107 836/1358/107 834/1359/107 +f 852/1360/112 856/1349/112 853/1361/112 +f 835/1362/108 839/1363/108 843/1364/108 +f 792/1365/117 860/1277/117 794/1366/117 +f 794/1367/118 861/1368/118 793/1369/118 +f 793/1278/119 862/1274/119 791/1370/119 +f 791/1371/120 859/1272/120 792/1372/120 +f 775/1373/120 864/1290/120 776/1374/120 +f 777/1281/119 863/1288/119 775/1375/119 +f 778/1376/118 865/1377/118 777/1378/118 +f 776/1379/117 866/1285/117 778/1380/117 +f 781/1381/117 868/1299/117 779/1382/117 +f 779/1383/118 869/1384/118 780/1385/118 +f 780/1300/119 870/1297/119 782/1386/119 +f 782/1387/120 867/1295/120 781/1388/120 +f 797/1389/117 872/1307/117 795/1390/117 +f 795/1391/118 873/1392/118 796/1393/118 +f 796/1308/119 874/1305/119 798/1394/119 +f 798/1395/120 871/1266/120 797/1396/120 +f 876/1397/107 877/1398/107 875/1399/107 +f 881/1400/111 890/1401/111 882/1402/111 +f 878/1403/109 883/1404/109 877/1398/109 +f 875/1399/110 885/1405/110 876/1397/110 +f 876/1397/111 886/1406/111 878/1403/111 +f 877/1398/112 884/1407/112 875/1399/112 +f 880/1408/108 883/1409/108 879/1410/108 +f 881/1411/108 884/1412/108 880/1413/108 +f 882/1402/108 885/1414/108 881/1400/108 +f 879/1415/108 886/1416/108 882/1417/108 +f 879/1410/112 888/1418/112 880/1408/112 +f 882/1417/109 887/1419/109 879/1415/109 +f 880/1413/110 889/1420/110 881/1411/110 +f 892/1421/107 893/1422/107 891/1423/107 +f 897/1424/111 906/1425/111 898/1426/111 +f 894/1427/109 899/1428/109 893/1422/109 +f 891/1423/110 901/1429/110 892/1421/110 +f 892/1421/111 902/1430/111 894/1427/111 +f 893/1422/112 900/1431/112 891/1423/112 +f 896/1432/108 899/1433/108 895/1434/108 +f 897/1435/108 900/1436/108 896/1437/108 +f 898/1426/108 901/1438/108 897/1424/108 +f 895/1439/108 902/1440/108 898/1441/108 +f 895/1434/112 904/1442/112 896/1432/112 +f 898/1441/109 903/1443/109 895/1439/109 +f 896/1437/110 905/1444/110 897/1435/110 +f 908/1445/108 909/1446/108 907/1447/108 +f 913/1448/111 922/1449/111 914/1450/111 +f 910/1451/110 915/1452/110 909/1446/110 +f 907/1447/109 917/1453/109 908/1445/109 +f 908/1445/111 918/1454/111 910/1451/111 +f 909/1446/112 916/1455/112 907/1447/112 +f 912/1456/107 915/1457/107 911/1458/107 +f 913/1459/107 916/1460/107 912/1461/107 +f 914/1450/107 917/1462/107 913/1448/107 +f 911/1463/107 918/1464/107 914/1465/107 +f 911/1458/112 920/1466/112 912/1456/112 +f 914/1465/110 919/1467/110 911/1463/110 +f 912/1461/109 921/1468/109 913/1459/109 +f 924/1469/108 925/1470/108 923/1471/108 +f 929/1472/111 938/1473/111 930/1474/111 +f 926/1475/110 931/1476/110 925/1470/110 +f 923/1471/109 933/1477/109 924/1469/109 +f 924/1469/111 934/1478/111 926/1475/111 +f 925/1470/112 932/1479/112 923/1471/112 +f 928/1480/107 931/1481/107 927/1482/107 +f 929/1483/107 932/1484/107 928/1485/107 +f 930/1474/107 933/1486/107 929/1472/107 +f 927/1487/107 934/1488/107 930/1489/107 +f 927/1482/112 936/1490/112 928/1480/112 +f 930/1489/110 935/1491/110 927/1487/110 +f 928/1485/109 937/1492/109 929/1483/109 +f 940/1493/108 941/1494/108 939/1495/108 +f 945/1496/111 954/1497/111 946/1498/111 +f 942/1499/110 947/1500/110 941/1494/110 +f 939/1495/109 949/1501/109 940/1493/109 +f 940/1493/111 950/1502/111 942/1499/111 +f 941/1494/112 948/1503/112 939/1495/112 +f 944/1504/107 947/1505/107 943/1506/107 +f 945/1507/107 948/1508/107 944/1509/107 +f 946/1498/107 949/1510/107 945/1496/107 +f 943/1511/107 950/1512/107 946/1513/107 +f 943/1506/112 952/1514/112 944/1504/112 +f 946/1513/110 951/1515/110 943/1511/110 +f 944/1509/109 953/1516/109 945/1507/109 +f 956/1517/109 957/1518/109 955/1519/109 +f 961/1520/111 970/1521/111 962/1522/111 +f 958/1523/108 963/1524/108 957/1518/108 +f 955/1519/107 965/1525/107 956/1517/107 +f 956/1517/111 966/1526/111 958/1523/111 +f 957/1518/112 964/1527/112 955/1519/112 +f 960/1528/110 963/1529/110 959/1530/110 +f 961/1531/110 964/1532/110 960/1533/110 +f 962/1522/110 965/1534/110 961/1520/110 +f 959/1535/110 966/1536/110 962/1537/110 +f 959/1530/112 968/1538/112 960/1528/112 +f 962/1537/108 967/1539/108 959/1535/108 +f 960/1533/107 969/1540/107 961/1531/107 +f 972/1541/109 973/1542/109 971/1543/109 +f 977/1544/111 986/1545/111 978/1546/111 +f 974/1547/108 979/1548/108 973/1542/108 +f 971/1543/107 981/1549/107 972/1541/107 +f 972/1541/111 982/1550/111 974/1547/111 +f 973/1542/112 980/1551/112 971/1543/112 +f 976/1552/110 979/1553/110 975/1554/110 +f 977/1555/110 980/1556/110 976/1557/110 +f 978/1546/110 981/1558/110 977/1544/110 +f 975/1559/110 982/1560/110 978/1561/110 +f 975/1554/112 984/1562/112 976/1552/112 +f 978/1561/108 983/1563/108 975/1559/108 +f 976/1557/107 985/1564/107 977/1555/107 +f 988/1565/109 989/1566/109 987/1567/109 +f 993/1568/111 1002/1569/111 994/1570/111 +f 990/1571/108 995/1572/108 989/1566/108 +f 987/1567/107 997/1573/107 988/1565/107 +f 988/1565/111 998/1574/111 990/1571/111 +f 989/1566/112 996/1575/112 987/1567/112 +f 992/1576/110 995/1577/110 991/1578/110 +f 993/1579/110 996/1580/110 992/1581/110 +f 994/1570/110 997/1582/110 993/1568/110 +f 991/1583/110 998/1584/110 994/1585/110 +f 992/1576/112 999/1586/112 1000/1587/112 +f 994/1585/108 999/1588/108 991/1583/108 +f 992/1581/107 1001/1589/107 993/1579/107 +f 1004/1590/110 1005/1591/110 1003/1592/110 +f 1009/1593/111 1018/1594/111 1010/1595/111 +f 1006/1596/107 1011/1597/107 1005/1591/107 +f 1003/1592/108 1013/1598/108 1004/1590/108 +f 1004/1590/111 1014/1599/111 1006/1596/111 +f 1005/1591/112 1012/1600/112 1003/1592/112 +f 1008/1601/109 1011/1602/109 1007/1603/109 +f 1009/1604/109 1012/1605/109 1008/1606/109 +f 1010/1595/109 1013/1607/109 1009/1593/109 +f 1007/1608/109 1014/1609/109 1010/1610/109 +f 1008/1601/112 1015/1611/112 1016/1612/112 +f 1010/1610/107 1015/1613/107 1007/1608/107 +f 1008/1606/108 1017/1614/108 1009/1604/108 +f 1020/1615/110 1021/1616/110 1019/1617/110 +f 1025/1618/111 1034/1619/111 1026/1620/111 +f 1022/1621/107 1027/1622/107 1021/1616/107 +f 1019/1617/108 1029/1623/108 1020/1615/108 +f 1020/1615/111 1030/1624/111 1022/1621/111 +f 1021/1616/112 1028/1625/112 1019/1617/112 +f 1024/1626/109 1027/1627/109 1023/1628/109 +f 1025/1629/109 1028/1630/109 1024/1631/109 +f 1026/1620/109 1029/1632/109 1025/1618/109 +f 1023/1633/109 1030/1634/109 1026/1635/109 +f 1023/1628/112 1032/1636/112 1024/1626/112 +f 1026/1635/107 1031/1637/107 1023/1633/107 +f 1024/1631/108 1033/1638/108 1025/1629/108 +f 1036/1639/110 1037/1640/110 1035/1641/110 +f 1041/1642/111 1050/1643/111 1042/1644/111 +f 1038/1645/107 1043/1646/107 1037/1640/107 +f 1035/1641/108 1045/1647/108 1036/1639/108 +f 1036/1639/111 1046/1648/111 1038/1645/111 +f 1035/1641/112 1043/1649/112 1044/1650/112 +f 1040/1651/109 1043/1649/109 1039/1652/109 +f 1041/1653/109 1044/1654/109 1040/1655/109 +f 1042/1644/109 1045/1656/109 1041/1642/109 +f 1039/1657/109 1046/1658/109 1042/1659/109 +f 1040/1651/112 1047/1660/112 1048/1661/112 +f 1042/1659/107 1047/1662/107 1039/1657/107 +f 1040/1655/108 1049/1663/108 1041/1653/108 +f 574/997/107 571/1053/107 572/998/107 +f 576/1000/108 578/1003/108 577/1001/108 +f 578/1003/109 582/1005/109 581/1004/109 +f 582/1005/107 580/1012/107 579/1006/107 +f 580/1007/110 576/1000/110 575/1002/110 +f 581/1004/111 579/1006/111 575/1009/111 +f 578/1011/112 576/1664/112 580/1012/112 +f 584/1013/108 586/1016/108 585/1014/108 +f 586/1016/109 590/1018/109 589/1017/109 +f 590/1018/107 588/1025/107 587/1019/107 +f 588/1020/110 584/1013/110 583/1015/110 +f 589/1017/111 587/1019/111 583/1022/111 +f 586/1024/112 584/1665/112 588/1025/112 +f 592/1026/108 594/1029/108 593/1027/108 +f 594/1029/109 598/1031/109 597/1030/109 +f 598/1031/107 596/1038/107 595/1032/107 +f 596/1033/110 592/1026/110 591/1028/110 +f 597/1030/111 595/1032/111 591/1035/111 +f 594/1037/112 592/1666/112 596/1038/112 +f 600/1039/108 602/1042/108 601/1040/108 +f 602/1042/109 606/1044/109 605/1043/109 +f 606/1044/107 604/1051/107 603/1045/107 +f 604/1046/110 600/1039/110 599/1041/110 +f 605/1043/111 603/1045/111 599/1048/111 +f 602/1050/112 600/1667/112 604/1051/112 +f 573/999/111 609/1668/111 610/1052/111 +f 571/1053/112 607/1669/112 608/1054/112 +f 610/1052/108 609/1668/108 608/1055/108 +f 614/1057/107 611/1670/107 612/1058/107 +f 613/1059/111 617/1671/111 618/1060/111 +f 611/1061/112 615/1064/112 616/1062/112 +f 618/1060/108 617/1671/108 616/1062/108 +f 622/1065/109 619/1069/109 620/1066/109 +f 621/1067/111 625/1672/111 626/1068/111 +f 619/1069/112 623/1673/112 624/1070/112 +f 626/1068/110 625/1672/110 624/1071/110 +f 630/1073/109 627/1674/109 628/1074/109 +f 629/1075/111 633/1675/111 634/1076/111 +f 627/1077/112 631/1080/112 632/1078/112 +f 634/1076/110 633/1675/110 632/1078/110 +f 636/1081/107 638/1087/107 637/1082/107 +f 641/1084/111 649/1676/111 650/1085/111 +f 638/1087/109 646/1100/109 643/1088/109 +f 635/1083/110 644/1096/110 645/1089/110 +f 636/1081/111 645/1098/111 646/1090/111 +f 637/1082/112 643/1093/112 644/1091/112 +f 640/1092/108 644/1091/108 643/1093/108 +f 641/1095/108 645/1089/108 644/1096/108 +f 642/1086/108 646/1090/108 645/1098/108 +f 639/1099/108 643/1088/108 646/1100/108 +f 639/1094/112 647/1677/112 648/1102/112 +f 642/1101/109 650/1678/109 647/1103/109 +f 640/1097/110 648/1679/110 649/1104/110 +f 653/1105/111 654/1680/111 652/1106/111 +f 657/1108/112 658/1112/112 655/1109/112 +f 653/1111/108 655/1109/108 658/1112/108 +f 652/1106/107 657/1108/107 656/1110/107 +f 654/1114/109 658/1112/109 657/1108/109 +f 651/1116/110 656/1110/110 655/1109/110 +f 661/1118/111 662/1681/111 660/1119/111 +f 665/1121/112 666/1125/112 663/1122/112 +f 661/1124/108 663/1122/108 666/1125/108 +f 660/1119/107 665/1121/107 664/1123/107 +f 662/1127/109 666/1125/109 665/1121/109 +f 659/1129/110 664/1123/110 663/1122/110 +f 669/1131/111 670/1682/111 668/1132/111 +f 673/1134/112 674/1138/112 671/1135/112 +f 669/1137/108 671/1135/108 674/1138/108 +f 668/1132/107 673/1134/107 672/1136/107 +f 670/1140/109 674/1138/109 673/1134/109 +f 667/1142/110 672/1136/110 671/1135/110 +f 675/1144/111 683/1156/111 684/1145/111 +f 681/1147/112 686/1683/112 685/1148/112 +f 676/1146/107 684/1145/107 686/1150/107 +f 677/1152/109 679/1176/109 682/1153/109 +f 676/1146/110 681/1684/110 680/1155/110 +f 685/1148/109 686/1683/109 684/1145/109 +f 680/1157/108 685/1685/108 683/1156/108 +f 688/1158/109 690/1169/109 689/1159/109 +f 694/1161/110 693/1168/110 691/1162/110 +f 689/1164/111 694/1170/111 692/1165/111 +f 687/1167/108 692/1686/108 691/1162/108 +f 688/1158/112 691/1162/112 693/1168/112 +f 690/1169/107 693/1168/107 694/1170/107 +f 697/1171/110 698/1175/110 696/1172/110 +f 677/1174/108 696/1687/108 698/1175/108 +f 679/1176/112 698/1175/112 697/1171/112 +f 678/1177/111 695/1180/111 696/1178/111 +f 682/1153/107 697/1171/107 695/1180/107 +f 708/1181/112 709/1218/112 725/1182/112 +f 707/1184/112 708/1181/112 724/1185/112 +f 706/1187/112 707/1184/112 723/1188/112 +f 705/1190/112 706/1187/112 722/1191/112 +f 704/1193/112 705/1190/112 721/1194/112 +f 703/1196/112 704/1193/112 720/1197/112 +f 703/1199/112 719/1688/112 718/1200/112 +f 702/1201/112 718/1689/112 717/1202/112 +f 701/1203/112 717/1690/112 716/1204/112 +f 700/1205/112 716/1691/112 715/1206/112 +f 699/1207/112 715/1692/112 730/1208/112 +f 714/1209/112 730/1693/112 729/1210/112 +f 713/1211/112 729/1694/112 728/1212/112 +f 712/1213/112 728/1695/112 727/1214/112 +f 711/1215/112 727/1696/112 726/1216/112 +f 709/1218/112 710/1217/112 726/1219/112 +f 740/1221/111 756/1697/111 757/1222/111 +f 739/1224/111 755/1698/111 756/1225/111 +f 738/1226/111 754/1699/111 755/1227/111 +f 737/1228/111 753/1700/111 754/1229/111 +f 736/1230/111 752/1701/111 753/1231/111 +f 735/1232/111 751/1702/111 752/1233/111 +f 750/1234/111 751/1703/111 735/1235/111 +f 749/1237/111 750/1704/111 734/1236/111 +f 747/1239/111 749/1705/111 733/1238/111 +f 748/1241/111 747/1706/111 731/1240/111 +f 762/1243/111 748/1707/111 732/1242/111 +f 761/1245/111 762/1708/111 746/1244/111 +f 760/1247/111 761/1709/111 745/1246/111 +f 759/1249/111 760/1710/111 744/1248/111 +f 758/1251/111 759/1711/111 743/1250/111 +f 741/1223/111 757/1712/111 758/1253/111 +f 764/1254/112 766/1261/112 765/1255/112 +f 769/1257/107 809/1324/107 810/1258/107 +f 765/1255/108 803/1314/108 804/1260/108 +f 766/1261/109 806/1321/109 803/1262/109 +f 763/1256/110 804/1317/110 805/1263/110 +f 764/1254/107 805/1319/107 806/1264/107 +f 802/1265/108 872/1307/108 871/1266/108 +f 799/1268/107 874/1305/107 873/1269/107 +f 787/1271/108 860/1277/108 859/1272/108 +f 789/1273/109 859/1272/109 862/1274/109 +f 788/1276/110 861/1368/110 860/1277/110 +f 793/1278/112 791/1370/112 792/1279/112 +f 777/1281/112 775/1375/112 776/1282/112 +f 772/1284/110 865/1377/110 866/1285/110 +f 773/1287/109 864/1290/109 863/1288/109 +f 771/1286/108 866/1285/108 864/1290/108 +f 783/1291/107 870/1297/107 869/1292/107 +f 786/1294/108 868/1299/108 867/1295/108 +f 784/1296/109 867/1295/109 870/1297/109 +f 785/1298/110 869/1384/110 868/1299/110 +f 780/1300/112 782/1386/112 781/1301/112 +f 774/1289/107 863/1288/107 865/1303/107 +f 800/1267/109 871/1266/109 874/1305/109 +f 801/1306/110 873/1392/110 872/1307/110 +f 796/1308/112 798/1394/112 797/1309/112 +f 790/1275/107 862/1274/107 861/1311/107 +f 768/1313/111 804/1260/111 803/1314/111 +f 769/1316/111 805/1263/111 804/1317/111 +f 770/1259/111 806/1264/111 805/1319/111 +f 767/1320/111 803/1262/111 806/1321/111 +f 807/1323/111 810/1258/111 809/1324/111 +f 767/1315/108 807/1713/108 808/1326/108 +f 770/1322/109 810/1714/109 807/1327/109 +f 768/1318/110 808/1715/110 809/1328/110 +f 813/1329/111 814/1716/111 812/1330/111 +f 816/1332/112 817/1717/112 818/1333/112 +f 812/1330/113 817/1717/113 816/1332/113 +f 813/1335/114 815/1334/114 818/1333/114 +f 821/1337/111 822/1718/111 820/1338/111 +f 824/1340/112 825/1719/112 826/1341/112 +f 820/1338/115 825/1719/115 824/1340/115 +f 821/1343/116 823/1342/116 826/1341/116 +f 828/1345/112 850/1356/112 848/1346/112 +f 857/1348/108 855/1720/108 856/1349/108 +f 846/1351/111 847/1721/111 849/1352/111 +f 854/1354/111 855/1720/111 857/1348/111 +f 849/1352/107 847/1721/107 848/1346/107 +f 834/1359/107 832/1722/107 830/1723/107 +f 830/1723/107 844/1724/107 834/1359/107 +f 844/1724/107 842/1725/107 834/1359/107 +f 842/1725/107 840/1726/107 834/1359/107 +f 840/1726/107 838/1357/107 834/1359/107 +f 852/1360/112 858/1350/112 856/1349/112 +f 843/1364/108 829/1727/108 831/1728/108 +f 831/1728/108 833/1729/108 835/1362/108 +f 835/1362/108 837/1730/108 839/1363/108 +f 839/1363/108 841/1731/108 843/1364/108 +f 843/1364/108 831/1728/108 835/1362/108 +f 792/1365/117 859/1272/117 860/1277/117 +f 794/1367/118 860/1277/118 861/1368/118 +f 793/1278/119 861/1311/119 862/1274/119 +f 791/1371/120 862/1274/120 859/1272/120 +f 775/1373/120 863/1288/120 864/1290/120 +f 777/1281/119 865/1303/119 863/1288/119 +f 778/1376/118 866/1285/118 865/1377/118 +f 776/1379/117 864/1290/117 866/1285/117 +f 781/1381/117 867/1295/117 868/1299/117 +f 779/1383/118 868/1299/118 869/1384/118 +f 780/1300/119 869/1292/119 870/1297/119 +f 782/1387/120 870/1297/120 867/1295/120 +f 797/1389/117 871/1266/117 872/1307/117 +f 795/1391/118 872/1307/118 873/1392/118 +f 796/1308/119 873/1269/119 874/1305/119 +f 798/1395/120 874/1305/120 871/1266/120 +f 876/1397/107 878/1403/107 877/1398/107 +f 881/1400/111 889/1732/111 890/1401/111 +f 878/1403/109 886/1416/109 883/1404/109 +f 875/1399/110 884/1412/110 885/1405/110 +f 876/1397/111 885/1414/111 886/1406/111 +f 877/1398/112 883/1409/112 884/1407/112 +f 880/1408/108 884/1407/108 883/1409/108 +f 881/1411/108 885/1405/108 884/1412/108 +f 882/1402/108 886/1406/108 885/1414/108 +f 879/1415/108 883/1404/108 886/1416/108 +f 879/1410/112 887/1733/112 888/1418/112 +f 882/1417/109 890/1734/109 887/1419/109 +f 880/1413/110 888/1735/110 889/1420/110 +f 892/1421/107 894/1427/107 893/1422/107 +f 897/1424/111 905/1736/111 906/1425/111 +f 894/1427/109 902/1440/109 899/1428/109 +f 891/1423/110 900/1436/110 901/1429/110 +f 892/1421/111 901/1438/111 902/1430/111 +f 893/1422/112 899/1433/112 900/1431/112 +f 896/1432/108 900/1431/108 899/1433/108 +f 897/1435/108 901/1429/108 900/1436/108 +f 898/1426/108 902/1430/108 901/1438/108 +f 895/1439/108 899/1428/108 902/1440/108 +f 895/1434/112 903/1737/112 904/1442/112 +f 898/1441/109 906/1738/109 903/1443/109 +f 896/1437/110 904/1739/110 905/1444/110 +f 908/1445/108 910/1451/108 909/1446/108 +f 913/1448/111 921/1740/111 922/1449/111 +f 910/1451/110 918/1464/110 915/1452/110 +f 907/1447/109 916/1460/109 917/1453/109 +f 908/1445/111 917/1462/111 918/1454/111 +f 909/1446/112 915/1457/112 916/1455/112 +f 912/1456/107 916/1455/107 915/1457/107 +f 913/1459/107 917/1453/107 916/1460/107 +f 914/1450/107 918/1454/107 917/1462/107 +f 911/1463/107 915/1452/107 918/1464/107 +f 911/1458/112 919/1741/112 920/1466/112 +f 914/1465/110 922/1742/110 919/1467/110 +f 912/1461/109 920/1743/109 921/1468/109 +f 924/1469/108 926/1475/108 925/1470/108 +f 929/1472/111 937/1744/111 938/1473/111 +f 926/1475/110 934/1488/110 931/1476/110 +f 923/1471/109 932/1484/109 933/1477/109 +f 924/1469/111 933/1486/111 934/1478/111 +f 925/1470/112 931/1481/112 932/1479/112 +f 928/1480/107 932/1479/107 931/1481/107 +f 929/1483/107 933/1477/107 932/1484/107 +f 930/1474/107 934/1478/107 933/1486/107 +f 927/1487/107 931/1476/107 934/1488/107 +f 927/1482/112 935/1745/112 936/1490/112 +f 930/1489/110 938/1746/110 935/1491/110 +f 928/1485/109 936/1747/109 937/1492/109 +f 940/1493/108 942/1499/108 941/1494/108 +f 945/1496/111 953/1748/111 954/1497/111 +f 942/1499/110 950/1512/110 947/1500/110 +f 939/1495/109 948/1508/109 949/1501/109 +f 940/1493/111 949/1510/111 950/1502/111 +f 941/1494/112 947/1505/112 948/1503/112 +f 944/1504/107 948/1503/107 947/1505/107 +f 945/1507/107 949/1501/107 948/1508/107 +f 946/1498/107 950/1502/107 949/1510/107 +f 943/1511/107 947/1500/107 950/1512/107 +f 943/1506/112 951/1749/112 952/1514/112 +f 946/1513/110 954/1750/110 951/1515/110 +f 944/1509/109 952/1751/109 953/1516/109 +f 956/1517/109 958/1523/109 957/1518/109 +f 961/1520/111 969/1752/111 970/1521/111 +f 958/1523/108 966/1536/108 963/1524/108 +f 955/1519/107 964/1532/107 965/1525/107 +f 956/1517/111 965/1534/111 966/1526/111 +f 957/1518/112 963/1529/112 964/1527/112 +f 960/1528/110 964/1527/110 963/1529/110 +f 961/1531/110 965/1525/110 964/1532/110 +f 962/1522/110 966/1526/110 965/1534/110 +f 959/1535/110 963/1524/110 966/1536/110 +f 959/1530/112 967/1753/112 968/1538/112 +f 962/1537/108 970/1754/108 967/1539/108 +f 960/1533/107 968/1755/107 969/1540/107 +f 972/1541/109 974/1547/109 973/1542/109 +f 977/1544/111 985/1756/111 986/1545/111 +f 974/1547/108 982/1560/108 979/1548/108 +f 971/1543/107 980/1556/107 981/1549/107 +f 972/1541/111 981/1558/111 982/1550/111 +f 973/1542/112 979/1553/112 980/1551/112 +f 976/1552/110 980/1551/110 979/1553/110 +f 977/1555/110 981/1549/110 980/1556/110 +f 978/1546/110 982/1550/110 981/1558/110 +f 975/1559/110 979/1548/110 982/1560/110 +f 975/1554/112 983/1757/112 984/1562/112 +f 978/1561/108 986/1758/108 983/1563/108 +f 976/1557/107 984/1759/107 985/1564/107 +f 988/1565/109 990/1571/109 989/1566/109 +f 993/1568/111 1001/1760/111 1002/1569/111 +f 990/1571/108 998/1584/108 995/1572/108 +f 987/1567/107 996/1580/107 997/1573/107 +f 988/1565/111 997/1582/111 998/1574/111 +f 989/1566/112 995/1577/112 996/1575/112 +f 992/1576/110 996/1575/110 995/1577/110 +f 993/1579/110 997/1573/110 996/1580/110 +f 994/1570/110 998/1574/110 997/1582/110 +f 991/1583/110 995/1572/110 998/1584/110 +f 992/1576/112 991/1578/112 999/1586/112 +f 994/1585/108 1002/1761/108 999/1588/108 +f 992/1581/107 1000/1762/107 1001/1589/107 +f 1004/1590/110 1006/1596/110 1005/1591/110 +f 1009/1593/111 1017/1763/111 1018/1594/111 +f 1006/1596/107 1014/1609/107 1011/1597/107 +f 1003/1592/108 1012/1605/108 1013/1598/108 +f 1004/1590/111 1013/1607/111 1014/1599/111 +f 1005/1591/112 1011/1602/112 1012/1600/112 +f 1008/1601/109 1012/1600/109 1011/1602/109 +f 1009/1604/109 1013/1598/109 1012/1605/109 +f 1010/1595/109 1014/1599/109 1013/1607/109 +f 1007/1608/109 1011/1597/109 1014/1609/109 +f 1008/1601/112 1007/1603/112 1015/1611/112 +f 1010/1610/107 1018/1764/107 1015/1613/107 +f 1008/1606/108 1016/1765/108 1017/1614/108 +f 1020/1615/110 1022/1621/110 1021/1616/110 +f 1025/1618/111 1033/1766/111 1034/1619/111 +f 1022/1621/107 1030/1634/107 1027/1622/107 +f 1019/1617/108 1028/1630/108 1029/1623/108 +f 1020/1615/111 1029/1632/111 1030/1624/111 +f 1021/1616/112 1027/1627/112 1028/1625/112 +f 1024/1626/109 1028/1625/109 1027/1627/109 +f 1025/1629/109 1029/1623/109 1028/1630/109 +f 1026/1620/109 1030/1624/109 1029/1632/109 +f 1023/1633/109 1027/1622/109 1030/1634/109 +f 1023/1628/112 1031/1767/112 1032/1636/112 +f 1026/1635/107 1034/1768/107 1031/1637/107 +f 1024/1631/108 1032/1769/108 1033/1638/108 +f 1036/1639/110 1038/1645/110 1037/1640/110 +f 1041/1642/111 1049/1770/111 1050/1643/111 +f 1038/1645/107 1046/1658/107 1043/1646/107 +f 1035/1641/108 1044/1654/108 1045/1647/108 +f 1036/1639/111 1045/1656/111 1046/1648/111 +f 1035/1641/112 1037/1640/112 1043/1649/112 +f 1040/1651/109 1044/1650/109 1043/1649/109 +f 1041/1653/109 1045/1647/109 1044/1654/109 +f 1042/1644/109 1046/1648/109 1045/1656/109 +f 1039/1657/109 1043/1646/109 1046/1658/109 +f 1040/1651/112 1039/1652/112 1047/1660/112 +f 1042/1659/107 1050/1771/107 1047/1662/107 +f 1040/1655/108 1048/1772/108 1049/1663/108 s 1 -f 698/1179/121 731/1216/110 699/1176/110 -f 713/1186/115 744/1765/122 712/1187/122 -f 699/1176/110 732/1213/123 700/1173/123 -f 714/1183/124 745/1766/115 713/1184/115 -f 700/1173/123 733/1215/113 701/1210/113 -f 715/1180/109 746/1767/124 714/1181/124 -f 701/1210/113 734/1244/125 702/1209/125 -f 716/1177/126 747/1768/109 715/1178/109 -f 702/1209/125 735/1242/107 703/1207/107 -f 717/1174/114 748/1769/126 716/1175/126 -f 703/1207/107 736/1240/122 704/1205/122 -f 718/1211/127 749/1770/114 717/1212/114 -f 704/1205/122 737/1238/115 705/1203/115 -f 691/1199/109 723/1232/126 692/1197/126 -f 719/1688/108 750/1771/127 718/1208/127 -f 705/1203/115 738/1236/124 706/1201/124 -f 692/1197/126 725/1230/114 693/1195/114 -f 720/1687/128 751/1772/108 719/1206/108 -f 706/1201/124 724/1234/109 691/1199/109 -f 693/1195/114 726/1228/127 694/1193/127 -f 721/1686/116 752/1773/128 720/1204/128 -f 708/1683/123 740/1774/110 707/1198/110 -f 694/1193/127 727/1227/108 695/1191/108 -f 722/1685/121 753/1775/116 721/1202/116 -f 709/1682/113 739/1776/123 708/1196/123 -f 695/1188/108 728/1222/128 696/1185/128 -f 707/1684/110 754/1777/121 722/1200/121 -f 710/1681/125 741/1778/113 709/1194/113 -f 696/1185/128 729/1220/116 697/1182/116 -f 711/1680/107 742/1779/125 710/1192/125 -f 697/1182/116 730/1218/121 698/1179/121 -f 712/1189/122 743/1780/107 711/1190/107 -f 822/1781/109 823/1782/129 821/1783/109 -f 824/1784/129 825/1785/111 823/1782/129 -f 826/1786/111 827/1787/130 825/1788/111 -f 828/1789/130 829/1790/110 827/1787/130 -f 830/1791/110 831/1792/118 829/1790/110 -f 832/1793/118 833/1794/112 831/1792/118 -f 834/1795/112 835/1796/120 833/1794/112 -f 836/1797/120 821/1783/109 835/1796/120 -f 698/1179/121 730/1218/121 731/1216/110 -f 713/1186/115 745/1798/115 744/1765/122 -f 699/1176/110 731/1216/110 732/1213/123 -f 714/1183/124 746/1799/124 745/1766/115 -f 700/1173/123 732/1213/123 733/1215/113 -f 715/1180/109 747/1800/109 746/1767/124 -f 701/1210/113 733/1215/113 734/1244/125 -f 716/1177/126 748/1801/126 747/1768/109 -f 702/1209/125 734/1244/125 735/1242/107 -f 717/1174/114 749/1802/114 748/1769/126 -f 703/1207/107 735/1242/107 736/1240/122 -f 718/1211/127 750/1803/127 749/1770/114 -f 704/1205/122 736/1240/122 737/1238/115 -f 691/1199/109 724/1234/109 723/1232/126 -f 719/1688/108 751/1804/108 750/1771/127 -f 705/1203/115 737/1238/115 738/1236/124 -f 692/1197/126 723/1232/126 725/1230/114 -f 720/1687/128 752/1805/128 751/1772/108 -f 706/1201/124 738/1236/124 724/1234/109 -f 693/1195/114 725/1230/114 726/1228/127 -f 721/1686/116 753/1806/116 752/1773/128 -f 708/1683/123 739/1807/123 740/1774/110 -f 694/1193/127 726/1228/127 727/1227/108 -f 722/1685/121 754/1808/121 753/1775/116 -f 709/1682/113 741/1809/113 739/1776/123 -f 695/1188/108 727/1224/108 728/1222/128 -f 707/1684/110 740/1810/110 754/1777/121 -f 710/1681/125 742/1811/125 741/1778/113 -f 696/1185/128 728/1222/128 729/1220/116 -f 711/1680/107 743/1812/107 742/1779/125 -f 697/1182/116 729/1220/116 730/1218/121 -f 712/1189/122 744/1813/122 743/1780/107 -f 822/1781/109 824/1784/129 823/1782/129 -f 824/1784/129 826/1814/111 825/1785/111 -f 826/1786/111 828/1789/130 827/1787/130 -f 828/1789/130 830/1791/110 829/1790/110 -f 830/1791/110 832/1793/118 831/1792/118 -f 832/1793/118 834/1795/112 833/1794/112 -f 834/1795/112 836/1797/120 835/1796/120 -f 836/1797/120 822/1781/109 821/1783/109 +f 706/1187/121 739/1224/110 707/1184/110 +f 721/1194/115 752/1773/122 720/1195/122 +f 707/1184/110 740/1221/123 708/1181/123 +f 722/1191/124 753/1774/115 721/1192/115 +f 708/1181/123 741/1223/113 709/1218/113 +f 723/1188/109 754/1775/124 722/1189/124 +f 709/1218/113 742/1252/125 710/1217/125 +f 724/1185/126 755/1776/109 723/1186/109 +f 710/1217/125 743/1250/107 711/1215/107 +f 725/1182/114 756/1777/126 724/1183/126 +f 711/1215/107 744/1248/122 712/1213/122 +f 726/1219/127 757/1778/114 725/1220/114 +f 712/1213/122 745/1246/115 713/1211/115 +f 699/1207/109 731/1240/126 700/1205/126 +f 727/1696/108 758/1779/127 726/1216/127 +f 713/1211/115 746/1244/124 714/1209/124 +f 700/1205/126 733/1238/114 701/1203/114 +f 728/1695/128 759/1780/108 727/1214/108 +f 714/1209/124 732/1242/109 699/1207/109 +f 701/1203/114 734/1236/127 702/1201/127 +f 729/1694/116 760/1781/128 728/1212/128 +f 716/1691/123 748/1782/110 715/1206/110 +f 702/1201/127 735/1235/108 703/1199/108 +f 730/1693/121 761/1783/116 729/1210/116 +f 717/1690/113 747/1784/123 716/1204/123 +f 703/1196/108 736/1230/128 704/1193/128 +f 715/1692/110 762/1785/121 730/1208/121 +f 718/1689/125 749/1786/113 717/1202/113 +f 704/1193/128 737/1228/116 705/1190/116 +f 719/1688/107 750/1787/125 718/1200/125 +f 705/1190/116 738/1226/121 706/1187/121 +f 720/1197/122 751/1788/107 719/1198/107 +f 830/1789/109 831/1790/129 829/1791/109 +f 832/1792/129 833/1793/111 831/1790/129 +f 834/1794/111 835/1795/130 833/1796/111 +f 836/1797/130 837/1798/110 835/1795/130 +f 838/1799/110 839/1800/118 837/1798/110 +f 840/1801/118 841/1802/112 839/1800/118 +f 842/1803/112 843/1804/120 841/1802/112 +f 844/1805/120 829/1791/109 843/1804/120 +f 706/1187/121 738/1226/121 739/1224/110 +f 721/1194/115 753/1806/115 752/1773/122 +f 707/1184/110 739/1224/110 740/1221/123 +f 722/1191/124 754/1807/124 753/1774/115 +f 708/1181/123 740/1221/123 741/1223/113 +f 723/1188/109 755/1808/109 754/1775/124 +f 709/1218/113 741/1223/113 742/1252/125 +f 724/1185/126 756/1809/126 755/1776/109 +f 710/1217/125 742/1252/125 743/1250/107 +f 725/1182/114 757/1810/114 756/1777/126 +f 711/1215/107 743/1250/107 744/1248/122 +f 726/1219/127 758/1811/127 757/1778/114 +f 712/1213/122 744/1248/122 745/1246/115 +f 699/1207/109 732/1242/109 731/1240/126 +f 727/1696/108 759/1812/108 758/1779/127 +f 713/1211/115 745/1246/115 746/1244/124 +f 700/1205/126 731/1240/126 733/1238/114 +f 728/1695/128 760/1813/128 759/1780/108 +f 714/1209/124 746/1244/124 732/1242/109 +f 701/1203/114 733/1238/114 734/1236/127 +f 729/1694/116 761/1814/116 760/1781/128 +f 716/1691/123 747/1815/123 748/1782/110 +f 702/1201/127 734/1236/127 735/1235/108 +f 730/1693/121 762/1816/121 761/1783/116 +f 717/1690/113 749/1817/113 747/1784/123 +f 703/1196/108 735/1232/108 736/1230/128 +f 715/1692/110 748/1818/110 762/1785/121 +f 718/1689/125 750/1819/125 749/1786/113 +f 704/1193/128 736/1230/128 737/1228/116 +f 719/1688/107 751/1820/107 750/1787/125 +f 705/1190/116 737/1228/116 738/1226/121 +f 720/1197/122 752/1821/122 751/1788/107 +f 830/1789/109 832/1792/129 831/1790/129 +f 832/1792/129 834/1822/111 833/1793/111 +f 834/1794/111 836/1797/130 835/1795/130 +f 836/1797/130 838/1799/110 837/1798/110 +f 838/1799/110 840/1801/118 839/1800/118 +f 840/1801/118 842/1803/112 841/1802/112 +f 842/1803/112 844/1805/120 843/1804/120 +f 844/1805/120 830/1789/109 829/1791/109 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index d7c59ae2c..2d472a53a 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -68,6 +68,9 @@ "block.motor": {"category": "block", "sounds": [{"name": "block/motor", "stream": false}]}, "block.engine": {"category": "block", "sounds": [{"name": "block/engine", "stream": false}]}, "block.chemicalPlant": {"category": "block", "sounds": [{"name": "block/chemicalPlant", "stream": false}]}, + "block.assemblerStrike": {"category": "block", "sounds": ["block/assemblerStrike1", "block/assemblerStrike2"]}, + "block.assemblerStart": {"category": "block", "sounds": [{"name": "block/assemblerStart", "stream": false}]}, + "block.assemblerStop": {"category": "block", "sounds": [{"name": "block/assemblerStop", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg new file mode 100644 index 000000000..5761f14fe Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg differ diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg new file mode 100644 index 000000000..a6e656e91 Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg differ diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg new file mode 100644 index 000000000..6ef5dcf38 Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg differ diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg new file mode 100644 index 000000000..2850ce7ac Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg differ diff --git a/src/main/resources/assets/hbm/textures/blocks/logic_block.png b/src/main/resources/assets/hbm/textures/blocks/logic_block.png new file mode 100644 index 000000000..9e0d69e2f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/logic_block.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png new file mode 100644 index 000000000..7c9e1b0dd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png new file mode 100644 index 000000000..1a3be6c7b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_overlay.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_overlay.png new file mode 100644 index 000000000..e8f24e65c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/oc_cable_overlay.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png index 1a0327a1a..133f16515 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png index b0cb8e0e9..2abafb352 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png index 000c59850..a0374af58 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_logic.png b/src/main/resources/assets/hbm/textures/blocks/wand_logic.png new file mode 100644 index 000000000..4561c8e4e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/wand_logic.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_logic_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_logic_top.png new file mode 100644 index 000000000..65e3106a9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/wand_logic_top.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png index dc9f7034b..3101c24f9 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png and b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png index 7e6aa8347..ae4a7ef6d 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png and b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index d58713d9c..3ce1bc32c 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png and b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png differ diff --git a/src/main/resources/assets/hbm/textures/items/blueprints.png b/src/main/resources/assets/hbm/textures/items/blueprints.png new file mode 100644 index 000000000..225bec283 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/blueprints.png differ diff --git a/src/main/resources/assets/hbm/textures/items/blueprints_discover.png b/src/main/resources/assets/hbm/textures/items/blueprints_discover.png new file mode 100644 index 000000000..66cdcea65 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/blueprints_discover.png differ diff --git a/src/main/resources/assets/hbm/textures/items/blueprints_secret.png b/src/main/resources/assets/hbm/textures/items/blueprints_secret.png new file mode 100644 index 000000000..9abb97057 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/blueprints_secret.png differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_biofuel.png b/src/main/resources/assets/hbm/textures/items/canister_biofuel.png deleted file mode 100644 index 5e509e6b8..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_biofuel.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_bitumen.png b/src/main/resources/assets/hbm/textures/items/canister_bitumen.png deleted file mode 100644 index 3e3e9e79c..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_bitumen.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_blank.png b/src/main/resources/assets/hbm/textures/items/canister_blank.png index 9e19878bc..0524cbe1d 100644 Binary files a/src/main/resources/assets/hbm/textures/items/canister_blank.png and b/src/main/resources/assets/hbm/textures/items/canister_blank.png differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_canola.png b/src/main/resources/assets/hbm/textures/items/canister_canola.png deleted file mode 100644 index 7f5a44f91..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_canola.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_empty.png b/src/main/resources/assets/hbm/textures/items/canister_empty.png index 36c11231a..a41347e95 100644 Binary files a/src/main/resources/assets/hbm/textures/items/canister_empty.png and b/src/main/resources/assets/hbm/textures/items/canister_empty.png differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_ethanol.png b/src/main/resources/assets/hbm/textures/items/canister_ethanol.png deleted file mode 100644 index b29ab22cc..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_ethanol.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_fracksol.png b/src/main/resources/assets/hbm/textures/items/canister_fracksol.png deleted file mode 100644 index 8111eab89..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_fracksol.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_fuel.png b/src/main/resources/assets/hbm/textures/items/canister_fuel.png deleted file mode 100644 index 359fba8c8..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_fuel.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_gasoline.png b/src/main/resources/assets/hbm/textures/items/canister_gasoline.png deleted file mode 100644 index 1b466069c..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_gasoline.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_heatingoil.png b/src/main/resources/assets/hbm/textures/items/canister_heatingoil.png deleted file mode 100644 index e8654568e..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_heatingoil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_heavyoil.png b/src/main/resources/assets/hbm/textures/items/canister_heavyoil.png deleted file mode 100644 index 62f810b25..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_heavyoil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_kerosene.png b/src/main/resources/assets/hbm/textures/items/canister_kerosene.png deleted file mode 100644 index 61649e01b..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_kerosene.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_lightoil.png b/src/main/resources/assets/hbm/textures/items/canister_lightoil.png deleted file mode 100644 index 49528bdd0..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_lightoil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_napalm.png b/src/main/resources/assets/hbm/textures/items/canister_napalm.png index 66d2fae42..1c65524d3 100644 Binary files a/src/main/resources/assets/hbm/textures/items/canister_napalm.png and b/src/main/resources/assets/hbm/textures/items/canister_napalm.png differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_naphtha.png b/src/main/resources/assets/hbm/textures/items/canister_naphtha.png deleted file mode 100644 index 8ca35d24f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_naphtha.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_oil.png b/src/main/resources/assets/hbm/textures/items/canister_oil.png deleted file mode 100644 index 6af9430a0..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_oil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_overlay.png b/src/main/resources/assets/hbm/textures/items/canister_overlay.png index f32b8014f..27bd808e5 100644 Binary files a/src/main/resources/assets/hbm/textures/items/canister_overlay.png and b/src/main/resources/assets/hbm/textures/items/canister_overlay.png differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_petroil.png b/src/main/resources/assets/hbm/textures/items/canister_petroil.png deleted file mode 100644 index bc5aa6314..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_petroil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_reoil.png b/src/main/resources/assets/hbm/textures/items/canister_reoil.png deleted file mode 100644 index aa36d54e1..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_reoil.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_smear.png b/src/main/resources/assets/hbm/textures/items/canister_smear.png deleted file mode 100644 index e81ab1572..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_smear.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/canister_superfuel.png b/src/main/resources/assets/hbm/textures/items/canister_superfuel.png deleted file mode 100644 index f38d02ff7..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/canister_superfuel.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel.png index 8eb04cde2..fdc431861 100644 Binary files a/src/main/resources/assets/hbm/textures/items/fluid_barrel.png and b/src/main/resources/assets/hbm/textures/items/fluid_barrel.png differ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel_infinite.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel_infinite.png index b2e78fd7a..361fc9f7c 100644 Binary files a/src/main/resources/assets/hbm/textures/items/fluid_barrel_infinite.png and b/src/main/resources/assets/hbm/textures/items/fluid_barrel_infinite.png differ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png index 35cfb942d..518122010 100644 Binary files a/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png and b/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png differ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_tank.png b/src/main/resources/assets/hbm/textures/items/fluid_tank.png index 3ff266568..32d7f9822 100644 Binary files a/src/main/resources/assets/hbm/textures/items/fluid_tank.png and b/src/main/resources/assets/hbm/textures/items/fluid_tank.png differ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_tank_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_tank_overlay.png index 69f09af83..bc05d8645 100644 Binary files a/src/main/resources/assets/hbm/textures/items/fluid_tank_overlay.png and b/src/main/resources/assets/hbm/textures/items/fluid_tank_overlay.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gas_bottle.png b/src/main/resources/assets/hbm/textures/items/gas_bottle.png index 7776838e6..4e2b038df 100644 Binary files a/src/main/resources/assets/hbm/textures/items/gas_bottle.png and b/src/main/resources/assets/hbm/textures/items/gas_bottle.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gas_empty.png b/src/main/resources/assets/hbm/textures/items/gas_empty.png index 8014cfd5e..f901a9fbf 100644 Binary files a/src/main/resources/assets/hbm/textures/items/gas_empty.png and b/src/main/resources/assets/hbm/textures/items/gas_empty.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gas_label.png b/src/main/resources/assets/hbm/textures/items/gas_label.png index eee087c9e..5c0dde543 100644 Binary files a/src/main/resources/assets/hbm/textures/items/gas_label.png and b/src/main/resources/assets/hbm/textures/items/gas_label.png differ diff --git a/src/main/resources/assets/hbm/textures/items/inf_water.png b/src/main/resources/assets/hbm/textures/items/inf_water.png index 766c4c5c9..b2f400e0b 100644 Binary files a/src/main/resources/assets/hbm/textures/items/inf_water.png and b/src/main/resources/assets/hbm/textures/items/inf_water.png differ diff --git a/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png b/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png index 9c53f6f1e..2513580a3 100644 Binary files a/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png and b/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png b/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png index df04f0555..266724c97 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png and b/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png b/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png index 290e3810b..4e33cca35 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png and b/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png differ