diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..60ce3ae65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +charset = utf-8 +end_of_line = crlf +indent_style = tab +indent_size = tab +insert_final_newline = true +trim_trailing_whitespace = true +max_line_length = off + +[{*.info,*.json,*.mcmeta,*.md,*.cfg,*.yml,*.toml}] +tab_width = 2 + +[{*.info,*.mcmeta,*.cfg}] +end_of_line = lf diff --git a/changelog b/changelog index 198a7f873..954da9f28 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,16 @@ ## Changed -* Most loot piles now have configurable loot pools +* The ambient radiation generator's functionality and recipe have been disabled as it is being deprecated +* The pyrolysis oven is now compatible with overdrive upgrades +* Steel walls and corners no longer use TESRs for rendering, making them more performant at large scale and fixing any oddities regarding their rendering +* Steel walls and corners can now be rotated using the screwdriver (right click for clockwise, shift click for counter-clockwise) +* Steel walls and corners now use new textures as well as slightly cleaner models +* Steel corner bounding boxes now closely match their model ## Fixed -* Fixed some things not using variable max charge for armor mods, like static pads and DNT nanosuit tooltips -* Fixed arc furnace recipe config parser breaking when reading fluid recipes \ No newline at end of file +* Fixed crash caused by the pyrolysis oven on servers + * Due this type of issue happening constantly, the GUI provider system no longer uses any client-only code +* Fixed small black bar rendering under the arrow box of NEI universal handlers when using the NH NEI fork +* Fixed desh screwdrivers not being usable for picking locks +* Possibly fixed an issue caused by MouseTweaks (in combination with other mods) duplicating click input (I can't replicate the issue so I can at best guess) +* Fixed pyrolysis ovens not being able to operate due to the output buffer being full, despite the buffer being a different type +* Fixed a vanilla bug in the standard block renderer causing boxduct bends to have incorrect UV on the -Z and +X sides \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 856cc07bf..4509b36fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5082 +mod_build_number=5091 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index d802eac32..e0463a1b0 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -6,6 +6,7 @@ import java.util.Random; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.handler.ThreeInts; +import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; @@ -32,7 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight { +public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable { public BlockDummyable(Material mat) { super(mat); @@ -507,4 +508,31 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(meta - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).getSettings(world, pos[0], pos[1], pos[2]); + else + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + ((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).infoForDisplay(world, x, y, z); + return null; + } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 46eec14fd..de8842189 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -407,6 +407,7 @@ public class ModBlocks { public static Block steel_scaffold; public static Block steel_grate; public static Block steel_grate_wide; + public static Block scaffold_dynamic; public static Block deco_pipe; public static Block deco_pipe_rusted; @@ -943,6 +944,7 @@ public class ModBlocks { public static Block machine_catalytic_reformer; public static Block machine_hydrotreater; public static Block machine_coker; + public static Block machine_pyrooven; public static Block machine_boiler_off; @@ -1573,12 +1575,13 @@ public class ModBlocks { pole_top = new DecoPoleTop(Material.iron).setBlockName("pole_top").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_pole_top"); pole_satellite_receiver = new DecoPoleSatelliteReceiver(Material.iron).setBlockName("pole_satellite_receiver").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_satellite_receiver"); steel_wall = new DecoBlock(Material.iron).setBlockName("steel_wall").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_wall"); - steel_corner = new DecoBlock(Material.iron).setBlockName("steel_corner").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_corner"); + steel_corner = new DecoBlock(Material.iron).setBlockName("steel_corner").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_wall"); steel_roof = new DecoBlock(Material.iron).setBlockName("steel_roof").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_roof"); steel_beam = new DecoBlock(Material.iron).setBlockName("steel_beam").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_beam"); steel_scaffold = new BlockScaffold().setBlockName("steel_scaffold").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel_orig"); steel_grate = new BlockGrate(Material.iron).setBlockName("steel_grate").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); steel_grate_wide = new BlockGrate(Material.iron).setBlockName("steel_grate_wide").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); + scaffold_dynamic = new BlockScaffoldDynamic().setBlockName("scaffold_dynamic").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); deco_pipe = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side", 0).setBlockName("deco_pipe").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top"); deco_pipe_rusted = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side_rusty", 0).setBlockName("deco_pipe_rusted").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top_rusty"); @@ -2080,7 +2083,6 @@ public class ModBlocks { turret_howard_damaged = new TurretHowardDamaged(Material.iron).setBlockName("turret_howard_damaged").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_rust"); turret_maxwell = new TurretMaxwell(Material.iron).setBlockName("turret_maxwell").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_fritz = new TurretFritz(Material.iron).setBlockName("turret_fritz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - //turret_brandon = new TurretBrandon(Material.iron).setBlockName("turret_brandon").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_arty = new TurretArty(Material.iron).setBlockName("turret_arty").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_himars = new TurretHIMARS(Material.iron).setBlockName("turret_himars").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_sentry = new TurretSentry().setBlockName("turret_sentry").setHardness(5.0F).setResistance(5.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -2164,6 +2166,7 @@ public class ModBlocks { machine_catalytic_reformer = new MachineCatalyticReformer(Material.iron).setBlockName("machine_catalytic_reformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_hydrotreater = new MachineHydrotreater(Material.iron).setBlockName("machine_hydrotreater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_coker = new MachineCoker(Material.iron).setBlockName("machine_coker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_pyrooven = new MachinePyroOven(Material.iron).setBlockName("machine_pyrooven").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_autosaw = new MachineAutosaw().setBlockName("machine_autosaw").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -2733,6 +2736,7 @@ public class ModBlocks { register(steel_scaffold); GameRegistry.registerBlock(steel_grate, steel_grate.getUnlocalizedName()); register(steel_grate_wide); + register(scaffold_dynamic); GameRegistry.registerBlock(deco_pipe, ItemBlockBase.class, deco_pipe.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe_rusted, ItemBlockBase.class, deco_pipe_rusted.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe_green, ItemBlockBase.class, deco_pipe_green.getUnlocalizedName()); @@ -3228,6 +3232,7 @@ public class ModBlocks { register(machine_catalytic_reformer); register(machine_hydrotreater); register(machine_coker); + register(machine_pyrooven); register(machine_autosaw); register(machine_excavator); register(machine_ore_slopper); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index 1eae64640..d88c4ff23 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -9,7 +9,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -227,7 +226,7 @@ public class BlockBobble extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenBobble((TileEntityBobble) world.getTileEntity(x, y, z)); } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java b/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java new file mode 100644 index 000000000..61e314085 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java @@ -0,0 +1,270 @@ +package com.hbm.blocks.generic; + +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.util.I18nUtil; + +import static com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic.*; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemBlowtorch; + +import api.hbm.block.IToolable; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +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.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +public class BlockScaffoldDynamic extends BlockContainer implements IToolable, ILookOverlay { + + @SideOnly(Side.CLIENT) public IIcon iconPoleTop; + @SideOnly(Side.CLIENT) public IIcon iconPoleSide; + @SideOnly(Side.CLIENT) public IIcon iconGrateTop; + @SideOnly(Side.CLIENT) public IIcon iconGrateSide; + @SideOnly(Side.CLIENT) public IIcon iconBarTop; + @SideOnly(Side.CLIENT) public IIcon iconBarSide; + + public static int renderMode; + + public BlockScaffoldDynamic() { + super(Material.iron); + } + + public static int renderIDScaffold = RenderingRegistry.getNextAvailableRenderId(); + @Override public int getRenderType(){ return renderIDScaffold; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityScaffoldDynamic(); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(renderMode == 0) return side == 0 || side == 1 ? iconPoleTop : iconPoleSide; + if(renderMode == 1) return side == 0 || side == 1 ? iconGrateTop : iconGrateSide; + if(renderMode == 2) return side == 0 || side == 1 ? iconBarTop : iconBarSide; + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconPoleTop = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_top"); + this.iconPoleSide = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_side"); + this.iconGrateTop = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_top"); + this.iconGrateSide = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_side"); + this.iconBarTop = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_top"); + this.iconBarSide = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_side"); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + if(tool == ToolType.SCREWDRIVER) { + tile.locked = !tile.locked; + tile.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } + + if(tool != ToolType.TORCH) return false; + + + int part = getPartFromCoord(fX, fY, fZ); + + if(part != 0 && tile.canToggle(part)) { + tile.toggle(part); + tile.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } + return false; + } + + public static int getPartFromCoord(float fX, float fY, float fZ) { + if(fX < 0.25 && fZ < 0.25) return POLE_NX_NZ; + if(fX > 0.75 && fZ < 0.25) return POLE_PX_NZ; + if(fX > 0.75 && fZ > 0.75) return POLE_PX_PZ; + if(fX < 0.25 && fZ > 0.75) return POLE_NX_PZ; + + if(fY == 0 && fX < 0.25) return BAR_LOWER_NEG_X; + if(fY == 0 && fX > 0.75) return BAR_LOWER_POS_X; + if(fY == 0 && fZ < 0.25) return BAR_LOWER_NEG_Z; + if(fY == 0 && fZ > 0.75) return BAR_LOWER_POS_Z; + if(fY == 1 && fX < 0.25) return BAR_UPPER_NEG_X; + if(fY == 1 && fX > 0.75) return BAR_UPPER_POS_X; + if(fY == 1 && fZ < 0.25) return BAR_UPPER_NEG_Z; + if(fY == 1 && fZ > 0.75) return BAR_UPPER_POS_Z; + + if(fY < 0.125) return GRATE_LOWER; + if(fY > 0.875) return GRATE_UPPER; + + if(fX == 0 && fY < 0.5) return BAR_LOWER_NEG_X; + if(fX == 1 && fY < 0.5) return BAR_LOWER_POS_X; + if(fZ == 0 && fY < 0.5) return BAR_LOWER_NEG_Z; + if(fZ == 1 && fY < 0.5) return BAR_LOWER_POS_Z; + if(fX == 0 && fY > 0.5) return BAR_UPPER_NEG_X; + if(fX == 1 && fY > 0.5) return BAR_UPPER_POS_X; + if(fZ == 0 && fY > 0.5) return BAR_UPPER_NEG_Z; + if(fZ == 1 && fY > 0.5) return BAR_UPPER_POS_Z; + + return 0; + } + + //ttoo lazy to make an itemblock just to provide this in the one method that needs it + public static float lastFX; + public static float lastFY; + public static float lastFZ; + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) { + lastFX = fX; + lastFY = fY; + lastFZ = fZ; + + if(side == Library.POS_X.ordinal()) lastFX = 0; + if(side == Library.NEG_X.ordinal()) lastFX = 1; + if(side == Library.POS_Z.ordinal()) lastFZ = 0; + if(side == Library.NEG_Z.ordinal()) lastFZ = 1; + + return side; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + + // DEFAUL: POLES + if(stack.getItemDamage() == 0) { + if(lastFX < 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_NX_NZ); + if(lastFX >= 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_PX_NZ); + if(lastFX < 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_NX_PZ); + if(lastFX >= 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_PX_PZ); + } + } + + public static class TileEntityScaffoldDynamic extends TileEntity { + + public int composite; + public int prevComposite; + public boolean locked; + public static final int BAR_LOWER_POS_X = (1 << 0); + public static final int BAR_LOWER_NEG_X = (1 << 1); + public static final int BAR_LOWER_POS_Z = (1 << 2); + public static final int BAR_LOWER_NEG_Z = (1 << 3); + public static final int BAR_UPPER_POS_X = (1 << 4); + public static final int BAR_UPPER_NEG_X = (1 << 5); + public static final int BAR_UPPER_POS_Z = (1 << 6); + public static final int BAR_UPPER_NEG_Z = (1 << 7); + public static final int POLE_PX_PZ = (1 << 8); + public static final int POLE_PX_NZ = (1 << 9); + public static final int POLE_NX_PZ = (1 << 10); + public static final int POLE_NX_NZ = (1 << 11); + public static final int GRATE_LOWER = (1 << 12); + public static final int GRATE_UPPER = (1 << 13); + + public boolean canToggle(int part) { return !locked && (composite ^ part) != 0; } + public void toggle(int part) { this.composite ^= part; System.out.println("" + this.composite); } + public boolean has(int part) { return (this.composite & part) != 0; } + + @Override + public void updateEntity() { } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.composite = nbt.getInteger("c"); + this.prevComposite = nbt.getInteger("p"); + this.locked = nbt.getBoolean("l"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("c", composite); + nbt.setInteger("p", prevComposite); + nbt.setBoolean("l", locked); + } + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + ItemStack held = player.getHeldItem(); + + boolean holdsBlowtorch = held != null && held.getItem() instanceof ItemBlowtorch; + boolean holdScrewdriver = held != null && (held.getItem() == ModItems.screwdriver || held.getItem() == ModItems.screwdriver_desh); + + MovingObjectPosition mop = mc.objectMouseOver; + + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { + float fX = (float) (mop.hitVec.xCoord - x); + float fY = (float) (mop.hitVec.yCoord - y); + float fZ = (float) (mop.hitVec.zCoord - z); + + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + + if(tile != null && tile.locked && (holdsBlowtorch || holdScrewdriver)) { + List text = new ArrayList(); + text.add(EnumChatFormatting.RED + "Locked!"); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + return; + } + + if(holdsBlowtorch) { + String name = null; + int part = getPartFromCoord(fX, fY, fZ); + if(part <= (1 << 3)) name = "Lower Vertical Bar"; + else if(part <= (1 << 7)) name = "Upper Vertical Bar"; + else if(part <= (1 << 10)) name = "Pole"; + else if(part <= (1 << 13)) name = "Grate"; + + if(name != null) { + List text = new ArrayList(); + text.add("Toggle:"); + text.add(name); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java index 68047bb3d..c6a4994f3 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java @@ -12,7 +12,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -193,7 +192,7 @@ public class BlockSnowglobe extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenSnowglobe((TileEntitySnowglobe) world.getTileEntity(x, y, z)); } } diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlock.java b/src/main/java/com/hbm/blocks/generic/DecoBlock.java index 6d946cc3f..c8c393c4e 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoBlock.java +++ b/src/main/java/com/hbm/blocks/generic/DecoBlock.java @@ -1,14 +1,19 @@ package com.hbm.blocks.generic; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.deco.TileEntityDecoBlock; +import api.hbm.block.IToolable; import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -17,7 +22,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class DecoBlock extends BlockContainer { +public class DecoBlock extends BlockContainer implements IToolable { Random rand = new Random(); @@ -25,20 +30,44 @@ public class DecoBlock extends BlockContainer { super(p_i45386_1_); } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(tool != ToolType.SCREWDRIVER) return false; + if(this != ModBlocks.steel_wall && this != ModBlocks.steel_corner) return false; + + int meta = world.getBlockMetadata(x, y, z); + + if(!player.isSneaking()) { + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + else if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + else if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + else if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + } else { + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + else if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + else if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + else if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + } + + return true; + } + @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - if(this == ModBlocks.steel_scaffold || this == ModBlocks.steel_beam) return null; + if(this == ModBlocks.steel_scaffold || this == ModBlocks.steel_beam || this == ModBlocks.steel_wall || this == ModBlocks.steel_corner) return null; return new TileEntityDecoBlock(); } public static int renderIDBeam = RenderingRegistry.getNextAvailableRenderId(); + public static int renderIDWall = RenderingRegistry.getNextAvailableRenderId(); + public static int renderIDCorner = RenderingRegistry.getNextAvailableRenderId(); @Override public int getRenderType(){ - if(this == ModBlocks.steel_beam) - return renderIDBeam; - else - return -1; + if(this == ModBlocks.steel_wall) return renderIDWall; + if(this == ModBlocks.steel_corner) return renderIDCorner; + if(this == ModBlocks.steel_beam) return renderIDBeam; + return -1; } @Override @@ -60,95 +89,23 @@ public class DecoBlock extends BlockContainer { 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, 4, 2); - } - if(i == 2) { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 3) { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 5, 2); } @Override - public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { - int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_); - float f = 0.0625F; - - if(this == ModBlocks.steel_wall) { - switch(te) { - case 4: - this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); - break; - case 5: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); - break; - } - } - - if(this == ModBlocks.steel_corner) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } - - if(this == ModBlocks.steel_roof) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1 * f, 1.0F); - } - - if(this == ModBlocks.steel_beam) { - this.setBlockBounds(7 * f, 0.0F, 7 * f, 9 * f, 1.0F, 9 * f); - } - - if(this == ModBlocks.steel_scaffold) { - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - switch(te) { - case 4: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - case 5: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - } - } - - // this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { int te = world.getBlockMetadata(x, y, z); float f = 0.0625F; if(this == ModBlocks.steel_wall) { switch(te) { - case 4: - this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); - break; - case 5: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); - break; + case 4: this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); break; + case 2: this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); break; + case 5: this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); break; + case 3: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); break; } } @@ -167,21 +124,57 @@ public class DecoBlock extends BlockContainer { if(this == ModBlocks.steel_scaffold) { this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); switch(te) { - case 4: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - case 5: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; + case 4: this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); break; + case 2: this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); break; + case 5: this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); break; + case 3: this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); break; } } + } + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + this.setBlockBoundsBasedOnState(world, x, y, z); return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); } + + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity collider) { + + if(this == ModBlocks.steel_corner) { + int meta = world.getBlockMetadata(x, y, z); + List bbs = new ArrayList(); + + switch(meta) { + case 2: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.25D, y + 0D, z + 0.875D, x + 1D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.75D, x + 0.25D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.125D, y + 1D, z + 0.75D)); + break; + case 3: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.75D, y + 1D, z + 0.125D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.75D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.25D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.875D, y + 0D, z + 0.25D, x + 1D, y + 1D, z + 1D)); + break; + case 4: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.875D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.75D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.75D, y + 0D, z + 0.75D, x + 1D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.875D, x + 0.75D, y + 1D, z + 1D)); + break; + case 5: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.25D, x + 0.125D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.25D, y + 1D, z + 0.25D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.25D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.125D)); + break; + } + + for(AxisAlignedBB bb : bbs) { + if(aabb.intersectsWith(bb)) { + list.add(bb); + } + } + } else { + super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider); + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java b/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java index ef92cb244..62146fc24 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java +++ b/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java @@ -11,7 +11,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -65,7 +64,7 @@ public class BlockArmorTable extends Block implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIArmorTable(player.inventory); } diff --git a/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java b/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java new file mode 100644 index 000000000..a28eab1a7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java @@ -0,0 +1,55 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachinePyroOven extends BlockDummyable { + + public MachinePyroOven(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachinePyroOven(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override + public int[] getDimensions() { + return new int[] {2, 0, 3, 3, 2, 2}; + } + + @Override + public int getOffset() { + return 3; + } + + @Override + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + for(int i = -2; i <= 2; i++) { + this.makeExtra(world, x + dir.offsetX * i + rot.offsetX * 2, y, z + dir.offsetZ * i + rot.offsetZ * 2); + } + + this.makeExtra(world, x - rot.offsetX, y + 2, z - rot.offsetZ); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java index 16623e7b1..466c0a02f 100644 --- a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java +++ b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java @@ -22,7 +22,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; @@ -192,7 +191,7 @@ public class NTMAnvil extends BlockFallingNT implements ITooltipProvider, IGUIPr @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAnvil(player.inventory, ((NTMAnvil)world.getBlock(x, y, z)).tier); } diff --git a/src/main/java/com/hbm/blocks/machine/RadioRec.java b/src/main/java/com/hbm/blocks/machine/RadioRec.java index 53792b48b..d387358b6 100644 --- a/src/main/java/com/hbm/blocks/machine/RadioRec.java +++ b/src/main/java/com/hbm/blocks/machine/RadioRec.java @@ -10,7 +10,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -102,7 +101,7 @@ public class RadioRec extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioRec) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java index 3422d1f17..65af59af5 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java @@ -4,8 +4,11 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.IAnalyzable; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import api.hbm.fluid.IPipeNet; @@ -14,6 +17,7 @@ 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.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -36,13 +40,24 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA IItemFluidIdentifier id = (IItemFluidIdentifier) player.getHeldItem().getItem(); FluidType type = id.getType(world, x, y, z, player.getHeldItem()); - if(!player.isSneaking()) { + if(!HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL) && !player.isSneaking()) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; - + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + if(pipe.getType() != type) { pipe.setType(type); return true; @@ -51,9 +66,21 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA } else { TileEntity te = world.getTileEntity(x, y, z); - + if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + changeTypeRecursively(world, x, y, z, pipe.getType(), type, 64); return true; } diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java index 086031285..76365ca81 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java @@ -15,7 +15,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -56,7 +55,7 @@ public class RadioTorchCounter extends RadioTorchBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICounterTorch(player.inventory, (TileEntityRadioTorchCounter) world.getTileEntity(x, y, z)); } diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java index 13cc2d107..4d4e679a3 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java @@ -11,7 +11,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -74,7 +73,7 @@ public class RadioTorchLogic extends RadioTorchRWBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioTorchLogic) diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java index 8199991a5..07e00c29b 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java @@ -10,7 +10,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; @@ -51,7 +50,7 @@ public abstract class RadioTorchRWBase extends RadioTorchBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioTorchBase) diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 6f0d2e9d8..f2669bd58 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -183,6 +183,11 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.pads_slime, 1), new Object[] { "SPS", "DSD", "SPS", 'S', KEY_SLIME, 'P', ModItems.pads_rubber, 'D', ModItems.ducttape }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pads_static, 1), new Object[] { "CDC", "ISI", "CDC", 'C', CU.ingot(), 'D', ModItems.ducttape, 'I', ANY_RUBBER.ingot(), 'S', ModItems.pads_slime }); + //Batteries + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery, 1), new Object[] { "PCP", "PCP", "PCP", 'P', STEEL.plate(), 'C', ModBlocks.capacitor_gold }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk2, 1), new Object[] { "PCP", "PCP", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', ModBlocks.capacitor_niobium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk3, 1), new Object[] { "PCP", "PCP", "PCP", 'P', GOLD.plate(), 'C', ModBlocks.block_tantalium }); + //Special Mods CraftingManager.addRecipeAuto(new ItemStack(ModItems.horseshoe_magnet, 1), new Object[] { "L L", "I I", "ILI", 'L', ModItems.lodestone, 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor }); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index d190636e0..113b4c80a 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -137,6 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_tool, 1), new Object[] { "TBT", "SRS", "SCS", 'T', TA.nugget(), 'B', ModItems.nugget_bismuth, 'S', ANY_RESISTANTALLOY.ingot(), 'R', ModItems.reacher, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.sat_designator, 1), new Object[] { "RRD", "PIC", " P", 'P', GOLD.plate(), 'R', Items.redstone, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', ModItems.sat_chip, 'I', GOLD.ingot() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.sat_relay), new Object[] { ModItems.sat_chip, ModItems.ducttape, ModItems.radar_linker }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.settings_tool), new Object[] { " P ", "PCP", "III", 'P', IRON.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'I', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette, 1), new Object[] { " L", " G ", "G ", 'L', ANY_RUBBER.ingot(), 'G', KEY_CLEARGLASS}); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette_boron, 1), new Object[] { " P", " B ", "B ", 'P', RUBBER.ingot(), 'B', ModBlocks.glass_boron}); diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index b5011714c..70cd60c25 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -151,6 +151,7 @@ public class EntityMappings { addEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod_null", 250); addEntity(EntityFallingNuke.class, "entity_falling_bomb", 1000); addEntity(EntityBulletBaseNT.class, "entity_bullet_mk3", 250, false); + addEntity(EntityBulletBaseMK4.class, "entity_bullet_mk4", 250, false); addEntity(EntityMinerRocket.class, "entity_miner_lander", 1000); addEntity(EntityFogFX.class, "entity_nuclear_fog", 1000); addEntity(EntityDuchessGambit.class, "entity_duchessgambit", 1000); diff --git a/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java index 3ce773740..241847f64 100644 --- a/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java @@ -15,7 +15,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -111,7 +110,7 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateSteel(player.inventory, (EntityMinecartCrate) player.worldObj.getEntityByID(x)); } } diff --git a/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java index 7d11fc8e4..d7a34e2ed 100644 --- a/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java @@ -17,7 +17,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -147,7 +146,7 @@ public class EntityMinecartDestroyer extends EntityMinecartContainerBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICartDestroyer(player.inventory, (EntityMinecartDestroyer) player.worldObj.getEntityByID(x)); } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java new file mode 100644 index 000000000..92938b64a --- /dev/null +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java @@ -0,0 +1,89 @@ +package com.hbm.entity.projectile; + +import com.hbm.items.weapon.sedna.BulletConfig; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class EntityBulletBaseMK4 extends EntityThrowableInterp { + + public BulletConfig config; + + public EntityBulletBaseMK4(World world) { + super(world); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + } + + public EntityBulletBaseMK4(EntityLivingBase entity, BulletConfig config, float baseDamage, float spreadMod, double sideOffset, double heightOffset, double frontOffset) { + this(entity.worldObj); + + this.thrower = entity; + this.config = config; + + this.setLocationAndAngles(thrower.posX, thrower.posY + thrower.getEyeHeight(), thrower.posZ, thrower.rotationYaw, thrower.rotationPitch); + + Vec3 offset = Vec3.createVectorHelper(sideOffset, heightOffset, frontOffset); + offset.rotateAroundX(-this.rotationPitch / 180F * (float) Math.PI); + offset.rotateAroundY(-this.rotationYaw / 180F * (float) Math.PI); + + this.posX += offset.xCoord; + this.posY += offset.yCoord; + this.posZ += offset.zCoord; + + this.setPosition(this.posX, this.posY, this.posZ); + + this.motionX = -MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI); + this.motionZ = MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI); + this.motionY = (-MathHelper.sin(this.rotationPitch / 180.0F * (float) Math.PI)); + + this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, 1.0F, this.config.spread * spreadMod); + } + + @Override + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(3, Integer.valueOf(0)); + } + + public void setBulletConfig(BulletConfig config) { + this.dataWatcher.updateObject(3, config.id); + } + + public BulletConfig getBulletConfig() { + int id = this.dataWatcher.getWatchableObjectInt(3); + if(id < 0 || id > BulletConfig.configs.size()) return null; + return BulletConfig.configs.get(id); + } + + @Override + public void onUpdate() { + + if(config == null) config = this.getBulletConfig(); + + if(config == null){ + this.setDead(); + return; + } + + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + + super.onUpdate(); + } + + @Override + protected void onImpact(MovingObjectPosition mop) { + this.setDead(); + } + + @Override protected double headingForceMult() { return 1D; } + @Override public double getGravityVelocity() { return this.config.gravity; } + @Override protected double motionMult() { return this.config.velocity; } + @Override protected float getAirDrag() { return 1F; } + @Override protected float getWaterDrag() { return 1F; } +} diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTram.java b/src/main/java/com/hbm/entity/train/TrainCargoTram.java index 99f2c5c05..572e3fb4d 100644 --- a/src/main/java/com/hbm/entity/train/TrainCargoTram.java +++ b/src/main/java/com/hbm/entity/train/TrainCargoTram.java @@ -11,7 +11,6 @@ import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -97,7 +96,7 @@ public class TrainCargoTram extends EntityRailCarElectric implements IGUIProvide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITrainCargoTram(player.inventory, this); } diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java index afefb1d9a..85d9a805c 100644 --- a/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java +++ b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java @@ -12,7 +12,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -88,7 +87,7 @@ public class TrainCargoTramTrailer extends EntityRailCarCargo implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITrainCargoTramTrailer(player.inventory, this); } diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java index 30498fe20..ab9694eb9 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java @@ -34,6 +34,7 @@ import com.hbm.util.ArmorUtil; import api.hbm.energymk2.IEnergyHandlerMK2; import cofh.api.energy.IEnergyProvider; +@Spaghetti("this sucks ass") public class ExplosionNukeGeneric { private final static Random random = new Random(); diff --git a/src/main/java/com/hbm/handler/GunConfiguration.java b/src/main/java/com/hbm/handler/GunConfiguration.java index 3fe99df52..974322d00 100644 --- a/src/main/java/com/hbm/handler/GunConfiguration.java +++ b/src/main/java/com/hbm/handler/GunConfiguration.java @@ -5,10 +5,10 @@ import java.util.HashMap; import java.util.List; import java.util.function.Consumer; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 5e24afd77..9b30effe7 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -25,6 +25,9 @@ public class HbmKeybinds { public static KeyBinding hudKey = new KeyBinding(category + ".toggleHUD", Keyboard.KEY_V, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyToolAlt", Keyboard.KEY_LMENU, category); + + public static KeyBinding copyToolCtrl = new KeyBinding(category + ".copyToolCtrl", Keyboard.KEY_LCONTROL, category); public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding gunPrimaryKey = new KeyBinding(category + ".gunPrimary", -100, category); @@ -54,6 +57,8 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(craneLeftKey); ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); + ClientRegistry.registerKeyBinding(copyToolAlt); + ClientRegistry.registerKeyBinding(copyToolCtrl); } @SubscribeEvent @@ -101,10 +106,11 @@ public class HbmKeybinds { CRANE_LEFT, CRANE_RIGHT, CRANE_LOAD, - + TOOL_ALT, + TOOL_CTRL, GUN_PRIMARY, GUN_SECONDARY, GUN_TERTIARY, - RELOAD, + RELOAD } } diff --git a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java index a6d351802..1502b98ab 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo12Gauge; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; @@ -19,7 +20,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java index 2bf40a528..60daa8afb 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo20Gauge; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -15,7 +16,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java index aa9070ed8..629989b09 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java @@ -5,12 +5,12 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo22LR; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun22LRFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java index 29340e37e..0614dca1d 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; @@ -16,7 +17,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.PotionEffect; import net.minecraft.util.Vec3; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java index 98ac02468..4a65f6f02 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java @@ -12,6 +12,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo44Magnum; import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; @@ -23,8 +24,6 @@ import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java index d21ebf9c9..d9ae7f897 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java @@ -6,6 +6,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo45ACP; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -14,7 +15,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun45ACPFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java index 80dd4fc6d..9ebcb6f44 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java @@ -14,6 +14,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo4Gauge; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -27,8 +28,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java index d03724f89..b4fa21a95 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java @@ -5,12 +5,12 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo50AE; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun50AEFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java index ac04b5aa4..9494ba9a9 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java @@ -9,6 +9,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo50BMG; import com.hbm.items.ItemAmmoEnums.AmmoLunaticSniper; import com.hbm.lib.HbmCollection; @@ -22,7 +23,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java index 34c25392a..df66f7f16 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java @@ -10,6 +10,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo556mm; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; @@ -20,8 +21,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java index 88c83cda1..d552e5cca 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java @@ -6,11 +6,11 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo5mm; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun5mmFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java index 8362c2605..09384bcc7 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo75Bolt; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; @@ -16,8 +17,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java index 3419a631b..6f08a02eb 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo762NATO; import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; @@ -17,7 +18,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java index 2e7c68cc4..8d0e80112 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java @@ -8,11 +8,11 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo9mm; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun9mmFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java index 07bcc2878..287022576 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java @@ -10,9 +10,9 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.AmmoDart; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemGunDart; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.MainRegistry; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java index f5b88310c..e24e26f67 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java @@ -9,10 +9,10 @@ import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb.BombReturnCode; import com.hbm.main.MainRegistry; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java index ed16b5fa1..adaf77aee 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -16,6 +16,7 @@ import com.hbm.items.ItemAmmoEnums.AmmoCoilgun; import com.hbm.items.ItemAmmoEnums.AmmoFireExt; import com.hbm.items.ItemAmmoEnums.AmmoFlamethrower; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; @@ -23,7 +24,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.ExplosionKnockbackPacket; import com.hbm.potion.HbmPotion; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.tileentity.IRepairable; import com.hbm.tileentity.IRepairable.EnumExtinguishType; import com.hbm.util.CompatExternal; diff --git a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java index 123d99d7e..5f139750e 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java @@ -15,11 +15,11 @@ import com.hbm.handler.GunConfiguration; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.init.Blocks; diff --git a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java index 905f80321..572bf3674 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java @@ -7,11 +7,11 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class GunGaussFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java index 2aa52a588..3cac91814 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoGrenade; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -17,8 +18,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; diff --git a/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java b/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java index deb53436a..c3f2d9d75 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java @@ -8,11 +8,10 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java b/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java index c80cb8f1d..3703750aa 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java @@ -5,9 +5,8 @@ import java.util.ArrayList; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.util.EnumChatFormatting; public class GunPoweredFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java index 1c933ce55..02a1e5a37 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java @@ -10,13 +10,12 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoRocket; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.block.material.Material; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java index 3e2808d40..27603435a 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java @@ -9,9 +9,8 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.AmmoStinger; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.entity.player.EntityPlayer; public class GunRocketHomingFactory { diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 996e1dc27..de16bbea4 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -139,7 +139,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler implemen drawTexturedModalRect(pos[0] - 1, pos[1] - 1, 5, 87, 18, 18); } - drawTexturedModalRect(74, 14, 59, 87, 18, 38); + drawTexturedModalRect(74, 14, 59, 87, 18, 36); } public static int[][] getInputCoords(int count) { diff --git a/src/main/java/com/hbm/handler/nei/PyroHandler.java b/src/main/java/com/hbm/handler/nei/PyroHandler.java new file mode 100644 index 000000000..f4a992ad4 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PyroHandler.java @@ -0,0 +1,27 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.gui.GUIPyroOven; +import com.hbm.inventory.recipes.PyroOvenRecipes; + +public class PyroHandler extends NEIUniversalHandler { + + public PyroHandler() { + super("Pyrolysis", ModBlocks.machine_pyrooven, PyroOvenRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmPyrolysis"; + } + + @Override + public void loadTransferRects() { + super.loadTransferRects(); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(50, 35, 28, 14), "ntmPyrolysis")); + guiGui.add(GUIPyroOven.class); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } +} diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java new file mode 100644 index 000000000..e0b8c94f5 --- /dev/null +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -0,0 +1,29 @@ +package com.hbm.interfaces; + +import com.hbm.util.Either; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public interface ICopiable { + + NBTTagCompound getSettings(World world, int x, int y, int z); + + void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z); + + default String getSettingsSourceID(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getUnlocalizedName(); + } + + default String getSettingsSourceDisplay(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getLocalizedName(); + } + + default String[] infoForDisplay(World world, int x, int y, int z){ + return null; + } +} diff --git a/src/main/java/com/hbm/interfaces/IHoldableWeapon.java b/src/main/java/com/hbm/interfaces/IHoldableWeapon.java index 22647eb3b..b1a228d05 100644 --- a/src/main/java/com/hbm/interfaces/IHoldableWeapon.java +++ b/src/main/java/com/hbm/interfaces/IHoldableWeapon.java @@ -1,6 +1,6 @@ package com.hbm.interfaces; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; +import com.hbm.items.weapon.sedna.Crosshair; public interface IHoldableWeapon { diff --git a/src/main/java/com/hbm/inventory/container/ContainerChemfac.java b/src/main/java/com/hbm/inventory/container/ContainerChemfac.java index 45604135d..c04792035 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerChemfac.java +++ b/src/main/java/com/hbm/inventory/container/ContainerChemfac.java @@ -1,5 +1,6 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotUpgrade; import com.hbm.tileentity.machine.TileEntityMachineChemfac; @@ -35,7 +36,7 @@ public class ContainerChemfac extends Container { for(int k = 0; k < 2; k++) { for(int l = 0; l < 2; l++) { - this.addSlotToContainer(new Slot(tile, this.inventorySlots.size(), 69 + j * 110 + l * 16, 14 + i * 38 + k * 16)); + this.addSlotToContainer(new SlotCraftingOutput(playerInv.player, tile, this.inventorySlots.size(), 69 + j * 110 + l * 16, 14 + i * 38 + k * 16)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java b/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java new file mode 100644 index 000000000..554569c1a --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java @@ -0,0 +1,86 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerPyroOven extends Container { + + private TileEntityMachinePyroOven pyro; + + public ContainerPyroOven(InventoryPlayer invPlayer, TileEntityMachinePyroOven tedf) { + pyro = tedf; + + //Battery + this.addSlotToContainer(new Slot(tedf, 0, 152, 72)); + //Input + this.addSlotToContainer(new Slot(tedf, 1, 35, 45)); + //Output + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 2, 89, 45)); + //Fluid ID + this.addSlotToContainer(new Slot(tedf, 3, 8, 72)); + //Upgrades + this.addSlotToContainer(new Slot(tedf, 4, 71, 72)); + this.addSlotToContainer(new Slot(tedf, 5, 89, 72)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 122 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 180)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack rStack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + rStack = stack.copy(); + + if(index <= 5) { + if(!this.mergeItemStack(stack, 6, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(stack, 0, 1, false)) return null; + } else if(rStack.getItem() instanceof IItemFluidIdentifier) { + if(!this.mergeItemStack(stack, 3, 4, false)) return null; + } else if(rStack.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(stack, 4, 6, false)) return null; + } else { + if(!this.mergeItemStack(stack, 1, 2, false)) return null; + } + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return rStack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return pyro.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java b/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java new file mode 100644 index 000000000..a7befa9f0 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java @@ -0,0 +1,62 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPyroOven; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPyroOven extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_pyrooven.png"); + private TileEntityMachinePyroOven pyro; + + public GUIPyroOven(InventoryPlayer playerInv, TileEntityMachinePyroOven tile) { + super(new ContainerPyroOven(playerInv, tile)); + + this.pyro = tile; + this.xSize = 176; + this.ySize = 204; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + pyro.tanks[0].renderTankInfo(this, x, y, guiLeft + 8, guiTop + 18, 16, 52); + pyro.tanks[1].renderTankInfo(this, x, y, guiLeft + 116, guiTop + 18, 16, 52); + this.drawElectricityInfo(this, x, y, guiLeft + 152, guiTop + 18, 16, 52, pyro.getPower(), pyro.getMaxPower()); + + this.drawCustomInfoStat(x, y, guiLeft + 108, guiTop + 76, 8, 8, guiLeft + 108, guiTop + 76, this.getUpgradeInfo(pyro)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.pyro.hasCustomInventoryName() ? this.pyro.getInventoryName() : I18n.format(this.pyro.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 18, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int i = (int) (pyro.power * 52 / pyro.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 70 - i, 176, 64 - i, 16, i); + + int p = (int) (pyro.progress * 27); + drawTexturedModalRect(guiLeft + 57, guiTop + 47, 176, 0, p, 12); + + pyro.tanks[0].renderTank(guiLeft + 8, guiTop + 70, this.zLevel, 16, 52); + pyro.tanks[1].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52); + + this.drawInfoPanel(guiLeft + 108, guiTop + 76, 8, 8, 8); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index d58fa3c3c..c77fcd6b9 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -11,7 +11,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import cpw.mods.fml.common.Optional; -import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -302,10 +301,10 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa if(inventorySlots instanceof ContainerBase) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("slot", slot.slotNumber); - //Item IDs are usually dangerous, but this is only getting called from clientside, while ingame anyway - //if someone somehow gets an ID shift with this i will eat my shoe - 70k - tag.setInteger("id", Item.getIdFromItem(stack.getItem())); - tag.setInteger("meta", stack.getItemDamage()); + + NBTTagCompound item = new NBTTagCompound(); + stack.writeToNBT(item); + tag.setTag("stack", item); TileEntity te = (TileEntity) ((ContainerBase) inventorySlots).tile; PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(tag, te.xCoord, te.yCoord, te.zCoord)); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 39fff4c81..af36e0fbe 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -957,6 +957,14 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID) }, 200); + makeRecipe(new ComparableStack(ModBlocks.machine_pyrooven, 1), new AStack[] { + !exp ? new OreDictStack(STEEL.plateWelded(), 16) : new OreDictStack(STEEL.heavyComp(), 4), + 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) + }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_compressor, 1), new AStack[] { new OreDictStack(STEEL.plateCast(), 8), diff --git a/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java new file mode 100644 index 000000000..456c8af93 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java @@ -0,0 +1,224 @@ +package com.hbm.inventory.recipes; + +import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.inventory.fluid.Fluids.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.trait.FT_Flammable; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ItemEnums.EnumAshType; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.special.ItemBedrockOreNew; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class PyroOvenRecipes extends SerializableRecipe { + + public static List recipes = new ArrayList(); + + @Override + public void registerDefaults() { + + //solid fuel + registerSFAuto(SMEAR); + registerSFAuto(HEATINGOIL); + registerSFAuto(HEATINGOIL_VACUUM); + registerSFAuto(RECLAIMED); + registerSFAuto(PETROIL); + registerSFAuto(NAPHTHA); + registerSFAuto(NAPHTHA_CRACK); + registerSFAuto(DIESEL); + registerSFAuto(DIESEL_REFORM); + registerSFAuto(DIESEL_CRACK); + registerSFAuto(DIESEL_CRACK_REFORM); + registerSFAuto(LIGHTOIL); + registerSFAuto(LIGHTOIL_CRACK); + registerSFAuto(LIGHTOIL_VACUUM); + registerSFAuto(KEROSENE); + registerSFAuto(KEROSENE_REFORM); + registerSFAuto(SOURGAS); + registerSFAuto(REFORMGAS); + registerSFAuto(SYNGAS); + registerSFAuto(PETROLEUM); + registerSFAuto(LPG); + registerSFAuto(BIOFUEL); + registerSFAuto(AROMATICS); + registerSFAuto(UNSATURATEDS); + registerSFAuto(REFORMATE); + registerSFAuto(XYLENE); + registerSFAuto(BALEFIRE, 24_000_000L, ModItems.solid_fuel_bf); + + //bedrock ores + + for(BedrockOreType type : BedrockOreType.values()) { + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.BASE, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.BASE_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type))); + } + + //syngas from coal + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 250)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + //syngas from biomass + recipes.add(new PyroOvenRecipe(100) + .in(new ComparableStack(ModItems.biomass, 4)) + .out(new FluidStack(Fluids.SYNGAS, 1_000)).out(new ItemStack(Items.coal, 1, 1))); + //soot from tar + recipes.add(new PyroOvenRecipe(40) + .out(new FluidStack(Fluids.HYDROGEN, 250)).in(new OreDictStack(ANY_TAR.any(), 8)) + .out(new FluidStack(Fluids.CARBONDIOXIDE, 1_000)).out(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.SOOT))); + //heavyoil from coal + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 250)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + //coalgas from coal + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + //refgas from coker gas + recipes.add(new PyroOvenRecipe(60) + .in(new FluidStack(GAS_COKER, 4_000)) + .out(new FluidStack(Fluids.REFORMGAS, 100))); + } + + private static void registerSFAuto(FluidType fluid) { + registerSFAuto(fluid, 1_440_000L, ModItems.solid_fuel); //3200 burntime * 1.5 burntime bonus * 300 TU/t + } + private static void registerSFAuto(FluidType fluid, long tuPerSF, Item fuel) { + long tuPerBucket = fluid.getTrait(FT_Flammable.class).getHeatEnergy(); + double bonus = 0.5D; //double efficiency!! + + int mB = (int) (tuPerSF * 1000L * bonus / tuPerBucket); + + if(mB > 10_000) mB -= (mB % 1000); + else if(mB > 1_000) mB -= (mB % 100); + else if(mB > 100) mB -= (mB % 10); + + mB = Math.max(mB, 1); + + registerRecipe(fluid, mB, fuel); + } + + private static void registerRecipe(FluidType type, int quantity, Item output) { registerRecipe(type, quantity, new ItemStack(output)); } + private static void registerRecipe(FluidType type, int quantity, ItemStack output) { recipes.add(new PyroOvenRecipe(60).in(new FluidStack(type, quantity)).out(output)); } + + public static HashMap getRecipes() { + HashMap map = new HashMap(); + + for(PyroOvenRecipe rec : recipes) { + + Object[] in = null; + Object[] out = null; + + if(rec.inputFluid != null && rec.inputItem != null) in = new Object[] {ItemFluidIcon.make(rec.inputFluid), rec.inputItem}; + if(rec.inputFluid != null && rec.inputItem == null) in = new Object[] {ItemFluidIcon.make(rec.inputFluid)}; + if(rec.inputFluid == null && rec.inputItem != null) in = new Object[] {rec.inputItem}; + + if(rec.outputFluid != null && rec.outputItem != null) out = new Object[] {rec.outputItem, ItemFluidIcon.make(rec.outputFluid)}; + if(rec.outputFluid != null && rec.outputItem == null) out = new Object[] {ItemFluidIcon.make(rec.outputFluid)}; + if(rec.outputFluid == null && rec.outputItem != null) out = new Object[] {rec.outputItem}; + + if(in != null && out != null) { + map.put(in, out); + } + } + + return map; + } + + @Override + public String getFileName() { + return "hbmPyrolysis.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + AStack inputItem = obj.has("inputItem") ? this.readAStack(obj.get("inputItem").getAsJsonArray()) : null; + FluidStack inputFluid = obj.has("inputFluid") ? this.readFluidStack(obj.get("inputFluid").getAsJsonArray()) : null; + ItemStack outputItem = obj.has("outputItem") ? this.readItemStack(obj.get("outputItem").getAsJsonArray()) : null; + FluidStack outputFluid = obj.has("outputFluid") ? this.readFluidStack(obj.get("outputFluid").getAsJsonArray()) : null; + int duration = obj.get("duration").getAsInt(); + + recipes.add(new PyroOvenRecipe(duration).in(inputFluid).in(inputItem).out(outputFluid).out(outputItem)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + + PyroOvenRecipe rec = (PyroOvenRecipe) recipe; + + if(rec.inputFluid != null) { writer.name("inputFluid"); this.writeFluidStack(rec.inputFluid, writer); } + if(rec.inputItem != null) { writer.name("inputItem"); this.writeAStack(rec.inputItem, writer); } + if(rec.outputFluid != null) { writer.name("outputFluid"); this.writeFluidStack(rec.outputFluid, writer); } + if(rec.outputItem != null) { writer.name("outputItem"); this.writeItemStack(rec.outputItem, writer); } + writer.name("duration").value(rec.duration); + } + + public static class PyroOvenRecipe { + public FluidStack inputFluid; + public AStack inputItem; + public FluidStack outputFluid; + public ItemStack outputItem; + public int duration; + + public PyroOvenRecipe(int duration) { + this.duration = duration; + } + + public PyroOvenRecipe in(FluidStack stack) { this.inputFluid = stack; return this; } + public PyroOvenRecipe in(AStack stack) { this.inputItem = stack; return this; } + public PyroOvenRecipe out(FluidStack stack) { this.outputFluid = stack; return this; } + public PyroOvenRecipe out(ItemStack stack) { this.outputItem = stack; return this; } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java index 8bdecce61..5858ff359 100644 --- a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java @@ -33,615 +33,614 @@ public class SILEXRecipes { itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.UF6.getID()), new ComparableStack(ModItems.ingot_uranium)); dictTranslation.put(U.dust(), U.ingot()); recipes.put(U.ingot(), new SILEXRecipe(900, 100, EnumWavelengths.VISIBLE) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 11)) + .addOut(new ItemStack(ModItems.nugget_u235), 1) + .addOut(new ItemStack(ModItems.nugget_u238), 11) ); recipes.put(new ComparableStack(ModItems.ingot_pu_mix), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 6)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 3)) + .addOut(new ItemStack(ModItems.nugget_pu239), 6) + .addOut(new ItemStack(ModItems.nugget_pu240), 3) ); recipes.put(new ComparableStack(ModItems.ingot_am_mix), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am241), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am242), 6)) + .addOut(new ItemStack(ModItems.nugget_am241), 3) + .addOut(new ItemStack(ModItems.nugget_am242), 6) ); itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.PUF6.getID()), new ComparableStack(ModItems.ingot_plutonium)); dictTranslation.put(PU.dust(), PU.ingot()); recipes.put(PU.ingot(), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 2)) + .addOut(new ItemStack(ModItems.nugget_pu238), 3) + .addOut(new ItemStack(ModItems.nugget_pu239), 4) + .addOut(new ItemStack(ModItems.nugget_pu240), 2) ); recipes.put(new ComparableStack(ModItems.ingot_schraranium), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 2)) + .addOut(new ItemStack(ModItems.nugget_schrabidium), 4) + .addOut(new ItemStack(ModItems.nugget_uranium), 3) + .addOut(new ItemStack(ModItems.nugget_neptunium), 2) ); itemTranslation.put(new ComparableStack(ModItems.powder_australium), new ComparableStack(ModItems.ingot_australium)); recipes.put(new ComparableStack(ModItems.ingot_australium), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 1)) + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 5) + .addOut(new ItemStack(ModItems.nugget_australium_greater), 1) ); recipes.put(new ComparableStack(ModItems.crystal_schraranium), new SILEXRecipe(900, 100, 3) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 2)) + .addOut(new ItemStack(ModItems.nugget_schrabidium), 5) + .addOut(new ItemStack(ModItems.nugget_uranium), 2) + .addOut(new ItemStack(ModItems.nugget_neptunium), 2) ); recipes.put(new ComparableStack(ModBlocks.ore_tikite), new SILEXRecipe(900, 100, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_niobium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix), 2)) + .addOut(new ItemStack(ModItems.powder_plutonium), 2) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) + .addOut(new ItemStack(ModItems.powder_niobium), 3) + .addOut(new ItemStack(ModItems.powder_nitan_mix), 2) ); recipes.put(new ComparableStack(ModItems.crystal_trixite), new SILEXRecipe(1200, 100, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_niobium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_spark_mix), 1)) + .addOut(new ItemStack(ModItems.powder_plutonium), 2) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) + .addOut(new ItemStack(ModItems.powder_niobium), 3) + .addOut(new ItemStack(ModItems.powder_nitan_mix), 1) + .addOut(new ItemStack(ModItems.powder_spark_mix), 1) ); itemTranslation.put(new ComparableStack(ModItems.powder_lapis), new ComparableStack(Items.dye, 1, 4)); recipes.put(new ComparableStack(Items.dye, 1, 4), new SILEXRecipe(100, 100 ,1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.sulfur), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_aluminium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) + .addOut(new ItemStack(ModItems.sulfur), 4) + .addOut(new ItemStack(ModItems.powder_aluminium), 3) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) ); recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.DEATH.getID()), new SILEXRecipe(1000, 1000, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_impure_osmiridium), 1)) + .addOut(new ItemStack(ModItems.powder_impure_osmiridium), 1) ); recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.VITRIOL.getID()), new SILEXRecipe(1000, 1000, EnumWavelengths.IR) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_bromine), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iodine), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iron), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.sulfur), 15)) + .addOut(new ItemStack(ModItems.powder_bromine), 5) + .addOut(new ItemStack(ModItems.powder_iodine), 5) + .addOut(new ItemStack(ModItems.powder_iron), 5) + .addOut(new ItemStack(ModItems.sulfur), 15) ); for(int i = 0; i < 5; i++) { // UEU // recipes.put(new ComparableStack(ModItems.rbmk_pellet_ueu, 1, i), new SILEXRecipe(600, 100, 1) //NU and MEU will breed more plutonium due to their higher concentrations of U-238 - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 86 - i * 11)) //NU is unenriched to the point where it'll always be lower burnup; so more Pu239 for longer - .addOut(new WeightedRandomObject(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 2 + 5 * i)) ); + .addOut(new ItemStack(ModItems.nugget_uranium), 86 - i * 11) //NU is unenriched to the point where it'll always be lower burnup; so more Pu239 for longer + .addOut(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 2 + 5 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_ueu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 86 - i * 11)) - .addOut(new WeightedRandomObject(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 1 + 5 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_uranium), 86 - i * 11) + .addOut(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 1 + 5 * i) ); // MEU // recipes.put(new ComparableStack(ModItems.rbmk_pellet_meu, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium_fuel), 84 - i * 16)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.nugget_uranium_fuel), 84 - i * 16) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_meu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium_fuel), 83 - i * 16)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_uranium_fuel), 83 - i * 16) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i) ); // HEU233 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu233, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_u233), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu233, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_u233), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i) ); // HEU235 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu235, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_u235), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu235, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_u235), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i) ); // TH232 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_thmeu, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_thorium_fuel), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i)) ); + .addOut(new ItemStack(ModItems.nugget_thorium_fuel), 84 - i * 20) + .addOut(new ItemStack(ModItems.nugget_u233), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_thmeu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_thorium_fuel), 83 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_thorium_fuel), 83 - i * 20) + .addOut(new ItemStack(ModItems.nugget_u233), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i) ); // LEP // recipes.put(new ComparableStack(ModItems.rbmk_pellet_lep, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_plutonium_fuel), 84 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_plutonium_fuel), 84 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_lep, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_plutonium_fuel), 83 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_plutonium_fuel), 83 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i) ); // MEP // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mep, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu_mix), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu_mix), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_mep, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu_mix), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu_mix), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i) ); // HEP239 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep239, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu239), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep239, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu239), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i) ); // HEP241 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep241, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu241), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep241, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu241), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i) ); // MEN // recipes.put(new ComparableStack(ModItems.rbmk_pellet_men, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium_fuel), 84 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.nugget_neptunium_fuel), 84 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_men, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium_fuel), 83 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_neptunium_fuel), 83 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i) ); // HEN // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hen, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_neptunium), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hen, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_neptunium), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i) ); // MOX // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i)) ); + .addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i + 5), new SILEXRecipe(600, 100, 1) //Plutonium processing isn't possible w/o fucking up the NEI handler or removing xenon - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20)) //To prevent people from taking advantage of differing waste types, conform to the latter - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i)) ); + .addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20) //To prevent people from taking advantage of differing waste types, conform to the latter + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) ); // LEAUS // recipes.put(new ComparableStack(ModItems.rbmk_pellet_leaus, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 6 + 12 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 90 - i * 20) + .addOut(new ItemStack(ModItems.nugget_lead), 6 + 12 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_leaus, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 6 + 12 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 89 - i * 20) + .addOut(new ItemStack(ModItems.nugget_lead), 6 + 12 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i) ); // HEAUS // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_australium_greater), 90 - i * 20) + .addOut(new ItemStack(ModItems.nugget_au198), 5 + 10 * i) + .addOut(new ItemStack(Items.gold_nugget), 3 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_australium_greater), 89 - i * 20) + .addOut(new ItemStack(ModItems.nugget_au198), 5 + 10 * i) + .addOut(new ItemStack(Items.gold_nugget), 3 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i) ); // LES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_les, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_les), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_les), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_les, 1, i + 5), new SILEXRecipe(600, 100, 2) //I'd rather not fuck up the NEI handler, so six items it is - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_les), 90 - i * 20)) //Just bullshit something about "not enough np237 for extractable amounts of xe135" - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_les), 90 - i * 20) //Just bullshit something about "not enough np237 for extractable amounts of xe135" + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i) ); // MES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mes, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i)) ); + .addOut(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_mes, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20)) //ditto - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i)) ); + .addOut(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20) //ditto + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i) ); // HES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hes, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_hes), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_hes), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_hes, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_hes), 90 - i * 20)) //ditto - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_hes), 90 - i * 20) //ditto + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i) ); // BALEFIRE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_balefire, 1, i), new SILEXRecipe(400, 100, 3) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_balefire), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 10 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_balefire), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 10 + 20 * i) ); // FLASHGOLD // recipes.put(new ComparableStack(ModItems.rbmk_pellet_balefire_gold, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 90 - 20 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_balefire), 10 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_au198), 90 - 20 * i) + .addOut(new ItemStack(ModItems.powder_balefire), 10 + 20 * i) ); // FLASHLEAD // recipes.put(new ComparableStack(ModItems.rbmk_pellet_flashlead, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 1 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mercury), 1 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 10 + 8 * i)) ); //Reimumunch + .addOut(new ItemStack(ModItems.nugget_au198), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_bismuth), 1 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_mercury), 1 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_gh336), 10 + 8 * i) ); //Reimumunch // POBE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_po210be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_polonium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_polonium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 5 + 10 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // PUBE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_pu238be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu238), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_pu238be, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu238), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // RABE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_ra226be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_ra226), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_polonium), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_ra226), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nugget_polonium), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // DRX // recipes.put(new ComparableStack(ModItems.rbmk_pellet_drx, 1, i), new SILEXRecipe(600, 100, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) ); + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_drx, 1, i + 5), new SILEXRecipe(600, 100, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) ); + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) ); // ZFB BI // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_bismuth, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_uranium), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_bismuth, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_uranium), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); // ZFB PU-241 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_pu241, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_u235), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu240), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_pu241, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_u235), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu240), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); // ZFB RG-AM // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_am_mix, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 100 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_pu241), 100 - i * 20) + .addOut(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_am_mix, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 100 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_pu241), 100 - i * 20) + .addOut(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); } recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) + .addOut(new ItemStack(ModItems.nugget_neptunium), 20) + .addOut(new ItemStack(ModItems.nugget_pu239), 45) + .addOut(new ItemStack(ModItems.nugget_pu240), 20) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 65)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_lead), 65) + .addOut(new ItemStack(ModItems.nugget_bismuth), 20) + .addOut(new ItemStack(ModItems.dust_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 56)) + .addOut(new ItemStack(ModItems.nugget_pu238), 12) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 10) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 10) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 12) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 56) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 32)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 22)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 16)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 10) + .addOut(new ItemStack(ModItems.dust_tiny), 32) + .addOut(new ItemStack(ModItems.nugget_lead), 22) + .addOut(new ItemStack(ModItems.nugget_u238), 5) + .addOut(new ItemStack(ModItems.nugget_bismuth), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 16) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) + .addOut(new ItemStack(ModItems.nugget_u235), 15) + .addOut(new ItemStack(ModItems.nugget_neptunium), 25) + .addOut(new ItemStack(ModItems.nugget_pu239), 45) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 60)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_lead), 60) + .addOut(new ItemStack(ModItems.nugget_bismuth), 25) + .addOut(new ItemStack(ModItems.dust_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 14)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 60)) + .addOut(new ItemStack(ModItems.nugget_pu238), 4) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 12) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 10) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 14) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 60) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 34)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 13)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 29)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 12) + .addOut(new ItemStack(ModItems.dust_tiny), 34) + .addOut(new ItemStack(ModItems.nugget_lead), 13) + .addOut(new ItemStack(ModItems.nugget_u238), 2) + .addOut(new ItemStack(ModItems.nugget_bismuth), 10) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 29) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 6)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 52)) + .addOut(new ItemStack(ModItems.nugget_pu240), 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 25) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 2) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 6) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 52) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 39)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 2) + .addOut(new ItemStack(ModItems.dust_tiny), 16) + .addOut(new ItemStack(ModItems.nugget_lead), 40) + .addOut(new ItemStack(ModItems.nugget_u238), 3) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 39) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 66)) + .addOut(new ItemStack(ModItems.nugget_pu241), 15) + .addOut(new ItemStack(ModItems.nugget_neptunium), 5) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 2) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 7) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 66) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 22)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 17)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 36)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 2) + .addOut(new ItemStack(ModItems.dust_tiny), 22) + .addOut(new ItemStack(ModItems.nugget_bismuth), 20) + .addOut(new ItemStack(ModItems.nugget_lead), 17) + .addOut(new ItemStack(ModItems.nugget_u238), 3) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 36) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am241), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am242), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_am241), 25) + .addOut(new ItemStack(ModItems.nugget_am242), 35) + .addOut(new ItemStack(ModItems.nugget_technetium), 5) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 3) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 7) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 60)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 5)) + .addOut(new ItemStack(ModItems.nugget_bismuth), 60) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nugget_lead), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 5) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_u233), 40) + .addOut(new ItemStack(ModItems.nugget_u235), 35) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 10)) + .addOut(new ItemStack(ModItems.nugget_lead), 35) + .addOut(new ItemStack(ModItems.nugget_bismuth), 40) + .addOut(new ItemStack(ModItems.dust_tiny), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 10) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_u238), 15) + .addOut(new ItemStack(ModItems.nugget_pu239), 40) + .addOut(new ItemStack(ModItems.nugget_pu240), 15) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 55)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 9)) + .addOut(new ItemStack(ModItems.nugget_u238), 16) + .addOut(new ItemStack(ModItems.nugget_lead), 55) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 9) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 40)) + .addOut(new ItemStack(ModItems.nugget_pu238), 40) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 7) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 40) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 29)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 17)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 7) + .addOut(new ItemStack(ModItems.dust_tiny), 29) + .addOut(new ItemStack(ModItems.nugget_u238), 2) + .addOut(new ItemStack(ModItems.nugget_lead), 45) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 17) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_solinium), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_euphemium), 18)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_tantalium), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_neodymium_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_solinium), 25) + .addOut(new ItemStack(ModItems.nugget_euphemium), 18) + .addOut(new ItemStack(ModItems.nugget_gh336), 16) + .addOut(new ItemStack(ModItems.nugget_tantalium), 8) + .addOut(new ItemStack(ModItems.powder_neodymium_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_solinium), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_euphemium), 18)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_tantalium), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_neodymium_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 31)) + .addOut(new ItemStack(ModItems.nugget_solinium), 20) + .addOut(new ItemStack(ModItems.nugget_euphemium), 18) + .addOut(new ItemStack(ModItems.nugget_gh336), 15) + .addOut(new ItemStack(ModItems.nugget_tantalium), 8) + .addOut(new ItemStack(ModItems.powder_neodymium_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 31) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 7)) //We don't have any spicy lanthanides, and lead 209 + gold 198 is already *severely* pushing it, but there's no - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 7)) //point in contributing to pointless item bloat, so this will have to do - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 76)) + .addOut(new ItemStack(ModItems.nugget_pb209), 7) //We don't have any spicy lanthanides, and lead 209 + gold 198 is already *severely* pushing it, but there's no + .addOut(new ItemStack(ModItems.nugget_au198), 7) //point in contributing to pointless item bloat, so this will have to do + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 5) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 76) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mercury), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cerium_tiny), 14)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_lanthanium_tiny), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 32)) + .addOut(new ItemStack(ModItems.nugget_bismuth), 7) + .addOut(new ItemStack(ModItems.nugget_mercury), 12) + .addOut(new ItemStack(ModItems.powder_cerium_tiny), 14) + .addOut(new ItemStack(ModItems.powder_lanthanium_tiny), 15) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 32) ); recipes.put(new ComparableStack(ModItems.fallout, 1), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 90)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_co60), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 1)) + .addOut(new ItemStack(ModItems.dust_tiny), 90) + .addOut(new ItemStack(ModItems.nugget_co60), 2) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 3) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 1) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_au198), 1) ); recipes.put(new ComparableStack(Blocks.gravel, 1), new SILEXRecipe(1000, 250, EnumWavelengths.VISIBLE) - .addOut(new WeightedRandomObject(new ItemStack(Items.flint), 80)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_boron), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_lithium), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.fluorite), 5)) + .addOut(new ItemStack(Items.flint), 80) + .addOut(new ItemStack(ModItems.powder_boron), 5) + .addOut(new ItemStack(ModItems.powder_lithium), 10) + .addOut(new ItemStack(ModItems.fluorite), 5) ); - recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.FULLERENE.getID()), new SILEXRecipe(1_000, 1_000, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.FULLERENE), 1)) - ); + recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.FULLERENE.getID()), + new SILEXRecipe(1_000, 1_000, EnumWavelengths.UV).addOut(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.FULLERENE), 1)); } public static SILEXRecipe getOutput(ItemStack stack) { @@ -689,15 +688,9 @@ public class SILEXRecipes { public static List getAllIngredients() { List ing = new ArrayList(); - for(Entry entry : SILEXRecipes.recipes.entrySet()) { - ing.add(entry.getKey()); - } - for(Entry entry : SILEXRecipes.itemTranslation.entrySet()) { - ing.add(entry.getKey()); - } - for(Entry entry : SILEXRecipes.dictTranslation.entrySet()) { - ing.add(entry.getKey()); - } + for(Entry entry : SILEXRecipes.recipes.entrySet()) ing.add(entry.getKey()); + for(Entry entry : SILEXRecipes.itemTranslation.entrySet()) ing.add(entry.getKey()); + for(Entry entry : SILEXRecipes.dictTranslation.entrySet()) ing.add(entry.getKey()); return ing; } @@ -744,6 +737,10 @@ public static class SILEXRecipe { this(fluidProduced, fluidConsumed, EnumWavelengths.values()[laserStrength]); } + public SILEXRecipe addOut(ItemStack stack, int weight) { + return addOut(new WeightedRandomObject(stack, weight)); + } + public SILEXRecipe addOut(WeightedRandomObject entry) { outputs.add(entry); return this; diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index a23c3e2c9..2aaa8413c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -196,7 +196,7 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(ModBlocks.boxcar, new ItemStack(ModItems.powder_steel, 32)); ShredderRecipes.setRecipe(ModItems.ingot_schrabidate, new ItemStack(ModItems.powder_schrabidate, 1)); ShredderRecipes.setRecipe(ModBlocks.block_schrabidate, new ItemStack(ModItems.powder_schrabidate, 9)); - ShredderRecipes.setRecipe(ModItems.coal_infernal, new ItemStack(ModItems.powder_coal, 3)); + ShredderRecipes.setRecipe(ModItems.coal_infernal, new ItemStack(ModItems.powder_coal, 2)); ShredderRecipes.setRecipe(Items.fermented_spider_eye, new ItemStack(ModItems.powder_poison, 3)); ShredderRecipes.setRecipe(Items.poisonous_potato, new ItemStack(ModItems.powder_poison, 1)); ShredderRecipes.setRecipe(ModBlocks.ore_tektite_osmiridium, new ItemStack(ModItems.powder_tektite, 1)); diff --git a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java index fcef009fe..637779c6a 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java @@ -99,6 +99,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerSFAuto(LIGHTOIL_CRACK); registerSFAuto(LIGHTOIL_VACUUM); registerSFAuto(KEROSENE); + registerSFAuto(KEROSENE_REFORM); //registerSFAuto(GAS); registerSFAuto(SOURGAS); registerSFAuto(REFORMGAS); @@ -111,7 +112,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerSFAuto(UNSATURATEDS); registerSFAuto(REFORMATE); registerSFAuto(XYLENE); - registerSFAuto(BALEFIRE, 24000000L, ModItems.solid_fuel_bf); //holy shit this is energy dense*/ + registerSFAuto(BALEFIRE, 24_000_000L, ModItems.solid_fuel_bf); //holy shit this is energy dense*/ } @@ -127,6 +128,8 @@ public class SolidificationRecipes extends SerializableRecipe { if(mB > 10_000) mB -= (mB % 1000); else if(mB > 1_000) mB -= (mB % 100); else if(mB > 100) mB -= (mB % 10); + + mB = Math.max(mB, 1); registerRecipe(fluid, mB, fuel); } 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 807c78765..ab0d5e9cf 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -58,6 +58,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new LiquefactionRecipes()); recipeHandlers.add(new SolidificationRecipes()); recipeHandlers.add(new CokerRecipes()); + recipeHandlers.add(new PyroOvenRecipes()); recipeHandlers.add(new BreederRecipes()); recipeHandlers.add(new CyclotronRecipes()); recipeHandlers.add(new HadronRecipes()); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 7cde4d18c..c863f051b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1251,6 +1251,7 @@ public class ModItems { public static Item coupling_tool; public static Item drone_linker; public static Item radar_linker; + public static Item settings_tool; public static Item template_folder; public static Item journal_pip; @@ -4528,6 +4529,7 @@ public class ModItems { coupling_tool = new ItemCouplingTool().setUnlocalizedName("coupling_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coupling_tool"); drone_linker = new ItemDroneLinker().setUnlocalizedName("drone_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":drone_linker"); radar_linker = new ItemRadarLinker().setUnlocalizedName("radar_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radar_linker"); + settings_tool = new ItemSettingsTool().setUnlocalizedName("settings_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":settings_tool"); key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); @@ -6700,6 +6702,7 @@ public class ModItems { GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); GameRegistry.registerItem(analysis_tool, analysis_tool.getUnlocalizedName()); GameRegistry.registerItem(coupling_tool, coupling_tool.getUnlocalizedName()); + GameRegistry.registerItem(settings_tool, settings_tool.getUnlocalizedName()); GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java index 0592359de..85af4ab67 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java @@ -15,7 +15,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -150,7 +149,7 @@ public class ItemFluidIDMulti extends Item implements IItemFluidIdentifier, IIte @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenFluid(player); } } diff --git a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java index f25fd20df..a459e3fee 100644 --- a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java +++ b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java @@ -10,7 +10,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -44,7 +43,7 @@ public class ItemTemplateFolder extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenTemplateFolder(player); } } diff --git a/src/main/java/com/hbm/items/special/ItemBook.java b/src/main/java/com/hbm/items/special/ItemBook.java index 56995b012..1a409b52f 100644 --- a/src/main/java/com/hbm/items/special/ItemBook.java +++ b/src/main/java/com/hbm/items/special/ItemBook.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -40,7 +39,7 @@ public class ItemBook extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBook(player.inventory); } } diff --git a/src/main/java/com/hbm/items/special/ItemBookLore.java b/src/main/java/com/hbm/items/special/ItemBookLore.java index 866bd0866..7c4b63446 100644 --- a/src/main/java/com/hbm/items/special/ItemBookLore.java +++ b/src/main/java/com/hbm/items/special/ItemBookLore.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -115,7 +114,7 @@ public class ItemBookLore extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBookLore(player); } diff --git a/src/main/java/com/hbm/items/special/ItemHolotapeImage.java b/src/main/java/com/hbm/items/special/ItemHolotapeImage.java index 5c4cb8a27..a319a176e 100644 --- a/src/main/java/com/hbm/items/special/ItemHolotapeImage.java +++ b/src/main/java/com/hbm/items/special/ItemHolotapeImage.java @@ -9,7 +9,6 @@ import com.hbm.util.EnumUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -81,7 +80,7 @@ public class ItemHolotapeImage extends ItemHoloTape implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenHolotape(); } } diff --git a/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java index 90bcdd20c..b8bc68810 100644 --- a/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java +++ b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -29,7 +28,7 @@ public class ItemBookLemegeton extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILemegeton(player.inventory); } } diff --git a/src/main/java/com/hbm/items/tool/ItemCatalog.java b/src/main/java/com/hbm/items/tool/ItemCatalog.java index db2eeb413..1f679a88a 100644 --- a/src/main/java/com/hbm/items/tool/ItemCatalog.java +++ b/src/main/java/com/hbm/items/tool/ItemCatalog.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -44,7 +43,7 @@ public class ItemCatalog extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(BobmazonOfferFactory.getOffers(player.getHeldItem()) != null) return new GUIScreenBobmazon(player, BobmazonOfferFactory.getOffers(player.getHeldItem())); diff --git a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java index bfffd9b3b..3cb8b732d 100644 --- a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java +++ b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -56,7 +55,7 @@ public class ItemDesingatorManual extends Item implements IDesignatorItem, IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenDesignator(player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemGuideBook.java b/src/main/java/com/hbm/items/tool/ItemGuideBook.java index f9579af33..948638f0f 100644 --- a/src/main/java/com/hbm/items/tool/ItemGuideBook.java +++ b/src/main/java/com/hbm/items/tool/ItemGuideBook.java @@ -11,7 +11,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -324,7 +323,7 @@ public class ItemGuideBook extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenGuide(player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java index eddb41ace..4e0d022bc 100644 --- a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java +++ b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java @@ -8,11 +8,11 @@ import com.hbm.config.GeneralConfig; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb.BombReturnCode; import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/tool/ItemLeadBox.java b/src/main/java/com/hbm/items/tool/ItemLeadBox.java index 0e4384955..bfa427cc7 100644 --- a/src/main/java/com/hbm/items/tool/ItemLeadBox.java +++ b/src/main/java/com/hbm/items/tool/ItemLeadBox.java @@ -8,7 +8,6 @@ import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -42,7 +41,7 @@ public class ItemLeadBox extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILeadBox(player.inventory, new InventoryLeadBox(player, player.getHeldItem())); } diff --git a/src/main/java/com/hbm/items/tool/ItemPlasticBag.java b/src/main/java/com/hbm/items/tool/ItemPlasticBag.java index 1d575e314..6393832a5 100644 --- a/src/main/java/com/hbm/items/tool/ItemPlasticBag.java +++ b/src/main/java/com/hbm/items/tool/ItemPlasticBag.java @@ -8,7 +8,6 @@ import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -42,7 +41,7 @@ public class ItemPlasticBag extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPlasticBag(player.inventory, new InventoryPlasticBag(player, player.getHeldItem())); } diff --git a/src/main/java/com/hbm/items/tool/ItemSatInterface.java b/src/main/java/com/hbm/items/tool/ItemSatInterface.java index 512bfcc72..480993e35 100644 --- a/src/main/java/com/hbm/items/tool/ItemSatInterface.java +++ b/src/main/java/com/hbm/items/tool/ItemSatInterface.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -59,7 +58,7 @@ public class ItemSatInterface extends ItemSatChip implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(this == ModItems.sat_interface) return new GUIScreenSatInterface(player); else if(this == ModItems.sat_coord) diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java new file mode 100644 index 000000000..e6636d0f2 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -0,0 +1,139 @@ +package com.hbm.items.tool; + +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; +import com.hbm.interfaces.ICopiable; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.util.ChatBuilder; +import com.hbm.util.Either; +import com.hbm.util.I18nUtil; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemSettingsTool extends Item { + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) { + NBTTagList displayInfo; + if(!(entity instanceof EntityPlayerMP)) return; + + if(((EntityPlayer) entity).getHeldItem() == stack && stack.hasTagCompound()) { + EntityPlayer player = ((EntityPlayer) entity); + int delay = stack.stackTagCompound.getInteger("inputDelay"); + delay++; + displayInfo = stack.stackTagCompound.getTagList("displayInfo", 10); + + if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT) && delay > 4) { + int index = stack.stackTagCompound.getInteger("copyIndex") + 1; + if(index > displayInfo.tagCount() - 1) index = 0; + stack.stackTagCompound.setInteger("copyIndex", index); + delay = 0; + } + + stack.stackTagCompound.setInteger("inputDelay", delay); + if(world.getTotalWorldTime() % 5 != 0) return; + + if(displayInfo.tagCount() > 0){ + for (int j = 0; j < displayInfo.tagCount(); j++) { + NBTTagCompound nbt = displayInfo.getCompoundTagAt(j); + EnumChatFormatting format = stack.stackTagCompound.getInteger("copyIndex") == j ? EnumChatFormatting.AQUA : EnumChatFormatting.YELLOW; + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket(ChatBuilder.startTranslation(nbt.getString("info")) + .color(format) + .flush() + , 897 + j, 4000 ), (EntityPlayerMP) entity); + } + } + } + + } + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add("Can copy the settings (filters, fluid ID, etc) of machines"); + list.add("Shift right-click to copy, right click to paste"); + list.add("Ctrl click on pipes to paste settings to multiple pipes"); + if(stack.stackTagCompound != null) { + NBTTagCompound nbt = stack.stackTagCompound; + if (nbt.hasKey("tileName")){ + list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey(nbt.getString("tileName") + ".name")); + } else { + list.add(EnumChatFormatting.RED + " None "); + } + + } + } + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { + Either schrodinger = getCopyInfoSource(world, x, y, z); + if(schrodinger == null) return false; + ICopiable copiable = schrodinger.cast(); + + if(player.isSneaking()) { + stack.stackTagCompound = copiable.getSettings(world, x, y, z); + if(stack.stackTagCompound != null) { + + stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); + stack.stackTagCompound.setInteger("copyIndex", 0); + stack.stackTagCompound.setInteger("inputDelay", 0); + String[] info = copiable.infoForDisplay(world, x, y, z); + if (info != null) { + NBTTagList displayInfo = new NBTTagList(); + for (String str : info) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("info", str); + displayInfo.appendTag(nbt); + } + stack.stackTagCompound.setTag("displayInfo", displayInfo); + } + + if (world.isRemote) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + } + } else { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copy failed, machine has no settings tool support: " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.RED).flush()); + } + + } else if(stack.hasTagCompound()) { + int index = stack.stackTagCompound.getInteger("copyIndex"); + copiable.pasteSettings(stack.stackTagCompound, index, world, player, x, y, z); + } + + return !world.isRemote; + } + + @Nullable + private Either getCopyInfoSource(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof ICopiable) { + return Either.left(te); + } + + Block block = world.getBlock(x, y, z); + if(block instanceof ICopiable) { + return Either.right(block); + } + + return null; + } +} diff --git a/src/main/java/com/hbm/items/weapon/GunFolly.java b/src/main/java/com/hbm/items/weapon/GunFolly.java index c4bb2506f..4fe1a0f49 100644 --- a/src/main/java/com/hbm/items/weapon/GunFolly.java +++ b/src/main/java/com/hbm/items/weapon/GunFolly.java @@ -4,7 +4,7 @@ import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.items.ModItems; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; +import com.hbm.items.weapon.sedna.Crosshair; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java index ffbc0388d..12340864e 100644 --- a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java @@ -9,12 +9,12 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.BobMathUtil; import com.hbm.util.ChatBuilder; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index cfefa2357..b599776f0 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -18,6 +18,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; @@ -26,7 +27,6 @@ import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java index 3a9ec6fba..b37da9f1d 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java @@ -10,12 +10,11 @@ import com.hbm.interfaces.IHoldableWeapon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import api.hbm.fluid.IFillableItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java index 9cc858b8b..9a43ef50b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -31,6 +31,15 @@ public class BulletConfig { this.id = configs.size(); configs.add(this); } - - public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } + + public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } + public BulletConfig setReloadCount(int ammoReloadCount) { this.ammoReloadCount = ammoReloadCount; return this; } + public BulletConfig setVel(float velocity) { this.velocity = velocity; return this; } + public BulletConfig setSpread(float spread) { this.spread = spread; return this; } + public BulletConfig setWear(float wear) { this.wear = wear; return this; } + public BulletConfig setProjectiles(int min, int max) { this.projectilesMin = min; this.projectilesMax = max; return this; } + public BulletConfig setDamage(float damageMult) { this.damageMult = damageMult; return this; } + public BulletConfig setHeadshot(float headshotMult) { this.headshotMult = headshotMult; return this; } + public BulletConfig setGrav(double gravity) { this.gravity = gravity; return this; } + public BulletConfig setLife(int expires) { this.expires = expires; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java b/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java new file mode 100644 index 000000000..fe308bbf9 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java @@ -0,0 +1,34 @@ +package com.hbm.items.weapon.sedna; + +public enum Crosshair { + + NONE(0, 0, 0), + CROSS(1, 55, 16), + CIRCLE(19, 55, 16), + SEMI(37, 55, 16), + KRUCK(55, 55, 16), + DUAL(1, 73, 16), + SPLIT(19, 73, 16), + CLASSIC(37, 73, 16), + BOX(55, 73, 16), + + L_CROSS(0, 90, 32), + L_KRUCK(32, 90, 32), + L_CLASSIC(64, 90, 32), + L_CIRCLE(96, 90, 32), + L_SPLIT(0, 122, 32), + L_ARROWS(32, 122, 32), + L_BOX(64, 122, 32), + L_CIRCUMFLEX(96, 122, 32), + L_RAD(0, 154, 32); + + public int x; + public int y; + public int size; + + private Crosshair(int x, int y, int size) { + this.x = x; + this.y = y; + this.size = size; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 896d09832..e0388871c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -6,79 +6,100 @@ import java.util.function.BiFunction; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.item.ItemStack; +/** + * Despite how complicated the GunConfig looks, it actually only exists to hold together a bunch of fields. Everything else is infrastructure for getting and setting. + * The gun config determines general gun specific stats like durability, crosshair, animations, receivers, click handling and the decider. + * + * @author hbm + * */ public class GunConfig { + + public static final String O_RECEIVERS = "O_RECEIVERS"; + public static final String F_DURABILITY = "F_DURABILITY"; + public static final String I_DRAWDURATION = "I_DRAWDURATION"; + public static final String O_CROSSHAIR = "O_CROSSHAIR"; + public static final String B_RELOADANIMATIONSEQUENTIAL = "B_RELOADANIMATIONSEQUENTIAL"; + public static final String CON_ONPRESSPRIMARY = "CON_ONPRESSPRIMARY"; + public static final String CON_ONPRESSSECONDARY = "CON_ONPRESSSECONDARY"; + public static final String CON_ONPRESSTERTIARY = "CON_ONPRESSTERTIARY"; + public static final String CON_ONPRESSRELOAD = "CON_ONPRESSRELOAD"; + public static final String CON_ONRELEASEPRIMARY = "CON_ONRELEASEPRIMARY"; + public static final String CON_ONRELEASESECONDARY = "CON_ONRELEASESECONDARY"; + public static final String CON_ONRELEASETERTIARY = "CON_ONRELEASETERTIARY"; + public static final String CON_ONRELEASERELOAD = "CON_ONRELEASERELOAD"; + public static final String CON_DECIDER = "CON_DECIDER"; + public static final String FUN_ANIMNATIONS = "FUN_ANIMNATIONS"; /* FIELDS */ /** List of receivers used by the gun, primary and secondary are usually indices 0 and 1 respectively, if applicable */ - protected Receiver[] receivers; - protected float durability; - protected int drawDuration = 0; - protected Crosshair crosshair; - protected boolean reloadAnimationsSequential; + protected Receiver[] receivers_DNA; + protected float durability_DNA; + protected int drawDuration_DNA = 0; + protected Crosshair crosshair_DNA; + protected boolean reloadAnimationsSequential_DNA; /** Lambda functions for clicking shit */ - protected BiConsumer onPressPrimary; - protected BiConsumer onPressSecondary; - protected BiConsumer onPressTertiary; - protected BiConsumer onPressReload; + protected BiConsumer onPressPrimary_DNA; + protected BiConsumer onPressSecondary_DNA; + protected BiConsumer onPressTertiary_DNA; + protected BiConsumer onPressReload_DNA; /** Lambda functions for releasing the aforementioned shit */ - protected BiConsumer onReleasePrimary; - protected BiConsumer onReleaseSecondary; - protected BiConsumer onReleaseTertiary; - protected BiConsumer onReleaseReload; + protected BiConsumer onReleasePrimary_DNA; + protected BiConsumer onReleaseSecondary_DNA; + protected BiConsumer onReleaseTertiary_DNA; + protected BiConsumer onReleaseReload_DNA; /** The engine for the state machine that determines the gun's overall behavior */ - protected BiConsumer decider; + protected BiConsumer decider_DNA; /** Lambda that returns the relevant animation for the given params */ - protected BiFunction animations; + protected BiFunction animations_DNA; /* GETTERS */ - public Receiver[] getReceivers(ItemStack stack) { return receivers; } - public float getDurability(ItemStack stack) { return durability; } - public int getDrawDuration(ItemStack stack) { return drawDuration; } - public Crosshair getCrosshair(ItemStack stack) { return crosshair; } - public boolean getReloadAnimSequential(ItemStack stack) { return reloadAnimationsSequential; } + public Receiver[] getReceivers(ItemStack stack) { return WeaponUpgradeManager.eval(receivers_DNA, stack, O_RECEIVERS, this); } + public float getDurability(ItemStack stack) { return WeaponUpgradeManager.eval(durability_DNA, stack, F_DURABILITY, this); } + public int getDrawDuration(ItemStack stack) { return WeaponUpgradeManager.eval(drawDuration_DNA, stack, I_DRAWDURATION, this); } + public Crosshair getCrosshair(ItemStack stack) { return WeaponUpgradeManager.eval(crosshair_DNA, stack, O_CROSSHAIR, this); } + public boolean getReloadAnimSequential(ItemStack stack) { return WeaponUpgradeManager.eval(reloadAnimationsSequential_DNA, stack, B_RELOADANIMATIONSEQUENTIAL, this); } - public BiConsumer getPressPrimary(ItemStack stack) { return this.onPressPrimary; } - public BiConsumer getPressSecondary(ItemStack stack) { return this.onPressSecondary; } - public BiConsumer getPressTertiary(ItemStack stack) { return this.onPressTertiary; } - public BiConsumer getPressReload(ItemStack stack) { return this.onPressReload; } + public BiConsumer getPressPrimary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressPrimary_DNA, stack, CON_ONPRESSPRIMARY, this); } + public BiConsumer getPressSecondary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressSecondary_DNA, stack, CON_ONPRESSSECONDARY, this); } + public BiConsumer getPressTertiary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressTertiary_DNA, stack, CON_ONPRESSTERTIARY, this); } + public BiConsumer getPressReload(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressReload_DNA, stack, CON_ONPRESSRELOAD, this); } - public BiConsumer getReleasePrimary(ItemStack stack) { return this.onReleasePrimary; } - public BiConsumer getReleaseSecondary(ItemStack stack) { return this.onReleaseSecondary; } - public BiConsumer getReleaseTertiary(ItemStack stack) { return this.onReleaseTertiary; } - public BiConsumer getReleaseReload(ItemStack stack) { return this.onReleaseReload; } + public BiConsumer getReleasePrimary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleasePrimary_DNA, stack, CON_ONRELEASEPRIMARY, this); } + public BiConsumer getReleaseSecondary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseSecondary_DNA, stack, CON_ONRELEASESECONDARY, this); } + public BiConsumer getReleaseTertiary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseTertiary_DNA, stack, CON_ONRELEASETERTIARY, this); } + public BiConsumer getReleaseReload(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseReload_DNA, stack, CON_ONRELEASERELOAD, this); } - public BiConsumer getDecider(ItemStack stack) { return this.decider; } + public BiConsumer getDecider(ItemStack stack) { return WeaponUpgradeManager.eval(this.decider_DNA, stack, CON_DECIDER, this); } - public BiFunction getAnims(ItemStack stack) { return this.animations; } + public BiFunction getAnims(ItemStack stack) { return WeaponUpgradeManager.eval(this.animations_DNA, stack, FUN_ANIMNATIONS, this); } /* SETTERS */ - public GunConfig rec(Receiver... receivers) { this.receivers = receivers; return this; } - public GunConfig dura(float dura) { this.durability = dura; return this; } - public GunConfig draw(int draw) { this.drawDuration = draw; return this; } - public GunConfig crosshair(Crosshair crosshair) { this.crosshair = crosshair; return this; } + public GunConfig rec(Receiver... receivers) { this.receivers_DNA = receivers; return this; } + public GunConfig dura(float dura) { this.durability_DNA = dura; return this; } + public GunConfig draw(int draw) { this.drawDuration_DNA = draw; return this; } + public GunConfig crosshair(Crosshair crosshair) { this.crosshair_DNA = crosshair; return this; } //press - public GunConfig pp(BiConsumer lambda) { this.onPressPrimary = lambda; return this; } - public GunConfig ps(BiConsumer lambda) { this.onPressSecondary = lambda; return this; } - public GunConfig pt(BiConsumer lambda) { this.onPressTertiary = lambda; return this; } - public GunConfig pr(BiConsumer lambda) { this.onPressReload = lambda; return this; } + public GunConfig pp(BiConsumer lambda) { this.onPressPrimary_DNA = lambda; return this; } + public GunConfig ps(BiConsumer lambda) { this.onPressSecondary_DNA = lambda; return this; } + public GunConfig pt(BiConsumer lambda) { this.onPressTertiary_DNA = lambda; return this; } + public GunConfig pr(BiConsumer lambda) { this.onPressReload_DNA = lambda; return this; } //release - public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary = lambda; return this; } - public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary = lambda; return this; } - public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary = lambda; return this; } - public GunConfig rr(BiConsumer lambda) { this.onReleaseReload = lambda; return this; } + public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary_DNA = lambda; return this; } + public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary_DNA = lambda; return this; } + public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary_DNA = lambda; return this; } + public GunConfig rr(BiConsumer lambda) { this.onReleaseReload_DNA = lambda; return this; } //decider - public GunConfig decider(BiConsumer lambda) { this.decider = lambda; return this; } + public GunConfig decider(BiConsumer lambda) { this.decider_DNA = lambda; return this; } //anims - public GunConfig anim(BiFunction lambda) { this.animations = lambda; return this; } + public GunConfig anim(BiFunction lambda) { this.animations_DNA = lambda; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java b/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java new file mode 100644 index 000000000..502f12aec --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java @@ -0,0 +1,14 @@ +package com.hbm.items.weapon.sedna; + +import net.minecraft.item.ItemStack; + +public interface IWeaponUpgrade { + + /** Lower numbers get installed and therefore evaluated first. Important when multiplicative and additive bonuses are supposed to stack */ + public int getModPriority(ItemStack stack); + /** Which "slots" this upgrade occupies, can be any value, upgrades that have at least one matching slot are incompatible */ + public String[] getSlots(ItemStack stack); + /** The meat and bones of the upgrade eval. Requires the base value, the held gun, the value's + * identifier and the yet unmodified parent (i.e. if the value is part of the receiver, that receiver) */ + public default T eval(T base, ItemStack stack, String key, Object parent) { return base; } +} 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 b7376acc8..36a3e9bfa 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -11,6 +11,8 @@ import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.util.EnumUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -25,6 +27,8 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipReceiver, IItemHUD { + public static final String O_GUNCONFIG = "O_GUNCONFIG"; + public static final String KEY_DRAWN = "drawn"; public static final String KEY_AIMING = "aiming"; public static final String KEY_TIMER = "timer"; @@ -41,7 +45,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei private GunConfig config_DNA; public GunConfig getConfig(ItemStack stack) { - return config_DNA; + return WeaponUpgradeManager.eval(config_DNA, stack, O_GUNCONFIG, this); } public ItemGunBaseNT(GunConfig cfg) { @@ -53,7 +57,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei DRAWING, //initial delay after selecting IDLE, //gun can be fired or reloaded WINDUP, //fire button is down, added delay before fire - JUST_FIRED, //gun has been fired, cooldown + COOLDOWN, //gun has been fired, cooldown RELOADING //gun is currently reloading } @@ -90,7 +94,15 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei EntityPlayer player = (EntityPlayer) entity; if(world.isRemote) { + if(isHeld && player == MainRegistry.proxy.me()) { + + /// DEBUG /// + /*Vec3 offset = Vec3.createVectorHelper(-0.2, -0.1, 0.75); + offset.rotateAroundX(-entity.rotationPitch / 180F * (float) Math.PI); + offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI); + world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/ + prevAimingProgress = aimingProgress; boolean aiming = this.getIsAiming(stack); float aimSpeed = 0.25F; @@ -169,6 +181,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei } @Override + @SideOnly(Side.CLIENT) public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { if(type == ElementType.CROSSHAIRS) { event.setCanceled(true); diff --git a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java index b5320d003..7c9ad2e14 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -9,39 +9,64 @@ import com.hbm.items.weapon.sedna.mags.IMagazine; import net.minecraft.item.ItemStack; +/** + * Receivers are the gun's "moving parts", i.e. they determine things like base damage, spread, the ejector and the magazine. Think of this class like the + * barrel, receiver and chamber of the gun, an underbarrel grenade launcher for example would be a separate receiver instance compared to the regular gun it is attached to. + * + * @author hbm + */ public class Receiver { - protected float baseDamage; - protected int delayAfterFire; - protected int roundsPerCycle = 1; - protected boolean refireOnHold = false; - protected CasingEjector ejector = null; - protected int reloadDuration; - protected IMagazine magazine; - protected BiFunction canFire; - protected BiConsumer onFire; + public static final String F_BASEDAMAGE = "F_BASEDAMAGE"; + public static final String I_DELAYAFTERFIRE = "I_DELAYAFTERFIRE"; + public static final String I_ROUNDSPERCYCLE = "I_ROUNDSPERCYCLE"; + public static final String F_SPREADMOD = "F_SPREADMOD"; + public static final String B_REFIREONHOLD = "B_REFIREONHOLD"; + public static final String O_EJECTOR = "O_EJECTOR"; + public static final String I_RELOADDURATION = "I_RELOADDURATION"; + public static final String O_MAGAZINE = "O_MAGAZINE"; + public static final String FUN_CANFIRE = "FUN_CANFIRE"; + public static final String CON_ONFIRE = "CON_ONFIRE"; + + public Receiver(int index) { + this.index = index; + } + + protected int index; + protected float baseDamage_DNA; + protected int delayAfterFire_DNA; + protected int roundsPerCycle_DNA = 1; + protected float spreadMod_DNA = 1F; + protected boolean refireOnHold_DNA = false; + protected CasingEjector ejector_DNA = null; + protected int reloadDuration_DNA; + protected IMagazine magazine_DNA; + protected BiFunction canFire_DNA; + protected BiConsumer onFire_DNA; /* GETTERS */ - public float getBaseDamage(ItemStack stack) { return this.baseDamage; } - public int getDelayAfterFire(ItemStack stack) { return this.delayAfterFire; } - public int getRoundsPerCycle(ItemStack stack) { return this.roundsPerCycle; } - public boolean getRefireOnHold(ItemStack stack) { return this.refireOnHold; } - public CasingEjector getEjector(ItemStack stack) { return this.ejector; } - public int getReloadDuration(ItemStack stack) { return this.reloadDuration; } - public IMagazine getMagazine(ItemStack stack) { return this.magazine; } + public float getBaseDamage(ItemStack stack) { return WeaponUpgradeManager.eval(this.baseDamage_DNA, stack, F_BASEDAMAGE, this); } + public int getDelayAfterFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.delayAfterFire_DNA, stack, I_DELAYAFTERFIRE, this); } + public int getRoundsPerCycle(ItemStack stack) { return WeaponUpgradeManager.eval(this.roundsPerCycle_DNA, stack, I_ROUNDSPERCYCLE, this); } + public float getSpreadMod(ItemStack stack) { return WeaponUpgradeManager.eval(this.spreadMod_DNA, stack, F_SPREADMOD, this); } + public boolean getRefireOnHold(ItemStack stack) { return WeaponUpgradeManager.eval(this.refireOnHold_DNA, stack, B_REFIREONHOLD, this); } + public CasingEjector getEjector(ItemStack stack) { return WeaponUpgradeManager.eval(this.ejector_DNA, stack, O_EJECTOR, this); } + public int getReloadDuration(ItemStack stack) { return WeaponUpgradeManager.eval(this.reloadDuration_DNA, stack, I_RELOADDURATION, this); } + public IMagazine getMagazine(ItemStack stack) { return WeaponUpgradeManager.eval(this.magazine_DNA, stack, O_MAGAZINE, this); } - public BiFunction getCanFire(ItemStack stack) { return this.canFire; } - public BiConsumer getOnFire(ItemStack stack) { return this.onFire; } + public BiFunction getCanFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.canFire_DNA, stack, FUN_CANFIRE, this); } + public BiConsumer getOnFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.onFire_DNA, stack, CON_ONFIRE, this); } /* SETTERS */ - public Receiver dmg(float dmg) { this.baseDamage = dmg; return this; } - public Receiver delay(int delay) { this.delayAfterFire = delay; return this; } - public Receiver rounds(int rounds) { this.roundsPerCycle = rounds; return this; } - public Receiver auto(boolean auto) { this.refireOnHold = auto; return this; } - public Receiver burst(CasingEjector ejector) { this.ejector = ejector; return this; } - public Receiver reload(int delay) { this.reloadDuration = delay; return this; } - public Receiver mag(IMagazine magazine) { this.magazine = magazine; return this; } + public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; } + public Receiver delay(int delay) { this.delayAfterFire_DNA = delay; return this; } + public Receiver rounds(int rounds) { this.roundsPerCycle_DNA = rounds; return this; } + public Receiver spread(int spread) { this.spreadMod_DNA = spread; return this; } + public Receiver auto(boolean auto) { this.refireOnHold_DNA = auto; return this; } + public Receiver burst(CasingEjector ejector) { this.ejector_DNA = ejector; return this; } + public Receiver reload(int delay) { this.reloadDuration_DNA = delay; return this; } + public Receiver mag(IMagazine magazine) { this.magazine_DNA = magazine; return this; } - public Receiver canFire(BiFunction lambda) { this.canFire = lambda; return this; } - public Receiver fire(BiConsumer lambda) { this.onFire = lambda; return this; } + public Receiver canFire(BiFunction lambda) { this.canFire_DNA = lambda; return this; } + public Receiver fire(BiConsumer lambda) { this.onFire_DNA = lambda; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java b/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java new file mode 100644 index 000000000..4674ee866 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java @@ -0,0 +1,31 @@ +package com.hbm.items.weapon.sedna; + +import net.minecraft.item.ItemStack; + +/** + * The upgrade manager operates by scraping upgrades from a gun, then iterating over them and evaluating the given value, passing the modified value to successive mods. + * The way that mods stack (additive vs multiplicative) depends on the order the mod is installed in + * + * @author hbm + */ +public class WeaponUpgradeManager { + + public static ItemStack[] getUpgrades(ItemStack stack) { + return null; // TBI + } + + /** Scrapes all upgrades, iterates over them and evaluates the given value. The parent (i.e. holder of the base value) + * is passed for context (so upgrades can differentiate primary and secondary receivers for example) */ + public static T eval(T base, ItemStack stack, String key, Object parent) { + + ItemStack[] upgrades = getUpgrades(stack); + if(upgrades != null) for(ItemStack upgradeStack : upgrades) { + if(upgradeStack.getItem() instanceof IWeaponUpgrade) { + IWeaponUpgrade upgrade = (IWeaponUpgrade) upgradeStack.getItem(); + base = upgrade.eval(base, upgradeStack, key, parent); + } + } + + return base; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 424da2c29..434bf5949 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -2,13 +2,13 @@ package com.hbm.items.weapon.sedna.factory; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.mags.MagazineRevolverDrum; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.item.Item; @@ -18,12 +18,12 @@ public class GunFactory { ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); - BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug); + BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug).setSpread(0.01F); ModItems.gun_debug = new ItemGunBaseNT(new GunConfig() .dura(600).draw(15).crosshair(Crosshair.L_CLASSIC) - .rec(new Receiver() - .dmg(10F).delay(10).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug)) + .rec(new Receiver(0) + .dmg(10F).delay(12).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug)) .canFire(Lego.LAMBDA_DEBUG_CAN_FIRE).fire(Lego.LAMBDA_DEBUG_FIRE)) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pp(Lego.LAMBDA_STANDARD_FIRE) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java index d4d3fdc8d..3fc55d712 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java @@ -62,7 +62,7 @@ public class GunStateDecider { /** Triggers a re-fire of the primary if the fire delay has expired, the left mouse button is down and re-firing is enabled, otherwise switches to IDLE */ public static void deciderAutoRefire(ItemStack stack, LambdaContext ctx, GunState lastState, int recIndex, BooleanSupplier refireCondition) { - if(lastState == GunState.JUST_FIRED) { + if(lastState == GunState.COOLDOWN) { GunConfig cfg = ctx.config; Receiver rec = cfg.getReceivers(stack)[recIndex]; @@ -72,7 +72,7 @@ public class GunStateDecider { //if there's a bullet loaded, fire again if(rec.getCanFire(stack).apply(stack, ctx)) { rec.getOnFire(stack).accept(stack, ctx); - ItemGunBaseNT.setState(stack, GunState.JUST_FIRED); + ItemGunBaseNT.setState(stack, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, rec.getDelayAfterFire(stack)); //if not, revert to idle } else { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 54100485e..8546cfa39 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -3,9 +3,12 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.Receiver; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.BusAnimation; @@ -38,7 +41,7 @@ public class Lego { public static BiConsumer LAMBDA_STANDARD_FIRE = (stack, ctx) -> { if(ItemGunBaseNT.getState(stack) == GunState.IDLE && ctx.config.getReceivers(stack)[0].getCanFire(stack).apply(stack, ctx)) { - ItemGunBaseNT.setState(stack, GunState.JUST_FIRED); + ItemGunBaseNT.setState(stack, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, ctx.config.getReceivers(stack)[0].getDelayAfterFire(stack)); ctx.config.getReceivers(stack)[0].getOnFire(stack).accept(stack, ctx); } @@ -55,19 +58,35 @@ public class Lego { /** JUMPER - bypasses mag testing and just allows constant fire */ public static BiFunction LAMBDA_DEBUG_CAN_FIRE = (stack, ctx) -> { return true; }; + /** simply plays a sound to indicate that the keybind has triggered */ public static BiConsumer LAMBDA_DEBUG_FIRE = (stack, ctx) -> { EntityPlayer player = ctx.player; - player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.shotgunShoot", 1F, 1F); if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player); + + double sideOffset = ItemGunBaseNT.getIsAiming(stack) ? 0 : -0.2D; + float aim = ItemGunBaseNT.getIsAiming(stack) ? 0.25F : 1F; + Receiver primary = ctx.config.getReceivers(stack)[0]; + + EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, (BulletConfig) primary.getMagazine(stack).getType(stack), primary.getBaseDamage(stack), primary.getSpreadMod(stack) * aim, sideOffset, -0.1, 0.75); + player.worldObj.spawnEntityInWorld(mk4); + player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.shotgunShoot", 1F, 1F); }; + + /** No reload, simply play inspect animation */ + public static BiConsumer LAMBDA_DEBUG_RELOAD = (stack, ctx) -> { + EntityPlayer player = ctx.player; + if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.INSPECT.ordinal()), (EntityPlayerMP) player); + }; + + /** anims for the DEBUG revolver, mostly a copy of the li'lpip but with some fixes regarding the cylinder movement */ public static BiFunction LAMBDA_DEBUG_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 50).addKeyframePosition(0, 0, -3, 50).addKeyframePosition(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300).addKeyframePosition(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50)); + .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300 + 100).addKeyframePosition(0, 0, 0, 200)) + .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 350 + 100).addKeyframePosition(0, 0, 1, 200)); case CYCLE_EMPTY: break; case ALT_CYCLE: break; case EQUIP: return new BusAnimation().addBus("ROTATE", new BusAnimationSequence().addKeyframePosition(-360, 0, 0, 350)); @@ -77,6 +96,7 @@ public class Lego { case RELOAD_END: break; case SPINDOWN: break; case SPINUP: break; + case INSPECT: break; } return null; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java index 90d6a2337..55d7d4bb7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java @@ -3,6 +3,12 @@ package com.hbm.items.weapon.sedna.mags; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +/** + * The magazine simply provides the receiver it's attached to with ammo, the receiver does not care where it comes from. + * Therefore it is the mag's responsibility to handle reloading, any type restrictions as well as belt-like action from "magless" guns. + * + * @author hbm + */ public interface IMagazine { /** What ammo is loaded currently */ diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java index 818833767..874d14195 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java @@ -31,8 +31,8 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public Object getType(ItemStack stack) { int type = getMagType(stack, index); - if(type >= 0 && type < acceptedBullets.size()) { - return acceptedBullets.get(type); + if(type >= 0 && type < BulletConfig.configs.size()) { + return BulletConfig.configs.get(type); } return null; } @@ -40,7 +40,7 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public void setType(ItemStack stack, Object type) { if(!(type instanceof BulletConfig)) return; - int i = acceptedBullets.indexOf(type); + int i = BulletConfig.configs.indexOf(type); if(i >= 0) setMagType(stack, index, i); } @@ -49,7 +49,7 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); } // MAG TYPE // - public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); } + public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); } //TODO: replace with named tags to avoid ID shifting public static void setMagType(ItemStack stack, int index, int value) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_TYPE + index, value); } // MAG COUNT // diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 0707248a9..ea4d669b6 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5082)"; + public static final String VERSION = "1.0.27 BETA (5091)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 3e058cd4f..f7d519d68 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -317,6 +317,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCatalyticReformer.class, new RenderCatalyticReformer()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineHydrotreater.class, new RenderHydrotreater()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCoker.class, new RenderCoker()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePyroOven.class, new RenderPyroOven()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFan.class, new RenderFan()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPistonInserter.class, new RenderPistonInserter()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConveyorPress.class, new RenderConveyorPress()); @@ -615,8 +616,6 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.multitool_joule, new ItemRenderMultitool()); MinecraftForgeClient.registerItemRenderer(ModItems.multitool_decon, new ItemRenderMultitool()); //blocks - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_wall), new ItemRenderDecoBlock()); - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_corner), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_roof), new ItemRenderDecoBlock()); } @@ -835,6 +834,9 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderScaffoldBlock()); RenderingRegistry.registerBlockHandler(new RenderTapeBlock()); RenderingRegistry.registerBlockHandler(new RenderSteelBeam()); + RenderingRegistry.registerBlockHandler(new RenderSteelWall()); + RenderingRegistry.registerBlockHandler(new RenderSteelCorner()); + RenderingRegistry.registerBlockHandler(new RenderScaffoldDynamic()); RenderingRegistry.registerBlockHandler(new RenderBarrel()); RenderingRegistry.registerBlockHandler(new RenderFence()); RenderingRegistry.registerBlockHandler(new RenderBarbedWire()); @@ -2111,6 +2113,8 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); + case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed(); case GUN_PRIMARY: return HbmKeybinds.gunPrimaryKey.getIsKeyPressed(); case GUN_SECONDARY: return HbmKeybinds.gunSecondaryKey.getIsKeyPressed(); case GUN_TERTIARY: return HbmKeybinds.gunTertiaryKey.getIsKeyPressed(); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b279cb7a2..b4dc3b87f 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -678,7 +678,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.absorber_green, 1), new Object[] { "ICI", "CPC", "ICI", 'I', ANY_PLASTIC.ingot(), 'C', ModItems.powder_desh_mix, 'P', ModBlocks.absorber_red }); addRecipeAuto(new ItemStack(ModBlocks.absorber_pink, 1), new Object[] { "ICI", "CPC", "ICI", 'I', BIGMT.ingot(), 'C', ModItems.powder_nitan_mix, 'P', ModBlocks.absorber_green }); addRecipeAuto(new ItemStack(ModBlocks.decon, 1), new Object[] { "BGB", "SAS", "BSB", 'B', BE.ingot(), 'G', Blocks.iron_bars, 'S', STEEL.ingot(), 'A', ModBlocks.absorber }); - addRecipeAuto(new ItemStack(ModBlocks.machine_amgen, 1), new Object[] { "ITI", "TAT", "ITI", 'I', ALLOY.ingot(), 'T', ModItems.thermo_element, 'A', ModBlocks.absorber }); addRecipeAuto(new ItemStack(ModBlocks.machine_geo, 1), new Object[] { "ITI", "PCP", "ITI", 'I', DURA.ingot(), 'T', ModItems.thermo_element, 'P', CU.plateCast(), 'C', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.machine_minirtg, 1), new Object[] { "LLL", "PPP", "TRT", 'L', PB.plate(), 'P', PU238.billet(), 'T', ModItems.thermo_element, 'R', ModItems.rtg_unit }); addRecipeAuto(new ItemStack(ModBlocks.machine_powerrtg, 1), new Object[] { "SRS", "PTP", "SRS", 'S', STAR.ingot(), 'R', ModItems.rtg_unit, 'P', PO210.billet(), 'T', TS.dust() }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index eab51c13d..e6c66ceb8 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -105,7 +105,6 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -1059,7 +1058,7 @@ public class ModEventHandlerClient { } @SideOnly(Side.CLIENT) - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOW) public void onMouseClicked(InputEvent.MouseInputEvent event) { Minecraft mc = Minecraft.getMinecraft(); @@ -1074,8 +1073,8 @@ public class ModEventHandlerClient { if(key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { key.pressed = state; - if(state) { - key.pressTime++; + if(state && key.pressTime == 0) { + key.pressTime = 1; } } } @@ -1083,15 +1082,16 @@ public class ModEventHandlerClient { boolean gunKey = keyCode == HbmKeybinds.gunPrimaryKey.getKeyCode() || keyCode == HbmKeybinds.gunSecondaryKey.getKeyCode() || keyCode == HbmKeybinds.gunTertiaryKey.getKeyCode() || keyCode == HbmKeybinds.reloadKey.getKeyCode(); - /* Shoot in favor of attacking */ - if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { - mc.gameSettings.keyBindAttack.pressed = false; - mc.gameSettings.keyBindAttack.pressTime = 0; - } - EntityPlayer player = mc.thePlayer; if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + + /* Shoot in favor of attacking */ + if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { + mc.gameSettings.keyBindAttack.pressed = false; + mc.gameSettings.keyBindAttack.pressTime = 0; + } + if(gunKey && keyCode == mc.gameSettings.keyBindPickBlock.getKeyCode()) { mc.gameSettings.keyBindPickBlock.pressed = false; mc.gameSettings.keyBindPickBlock.pressTime = 0; @@ -1101,7 +1101,7 @@ public class ModEventHandlerClient { } @SideOnly(Side.CLIENT) - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOW) public void onKeyTyped(InputEvent.KeyInputEvent event) { Minecraft mc = Minecraft.getMinecraft(); @@ -1116,8 +1116,8 @@ public class ModEventHandlerClient { if(keyCode != 0 && key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { key.pressed = state; - if(state) { - key.pressTime++; + if(state && key.pressTime == 0) { + key.pressTime = 1; } } } diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index ee7d42e5f..8db11642a 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -51,6 +51,7 @@ public class NEIRegistry { handlers.add(new LiquefactionHandler()); handlers.add(new SolidificationHandler()); handlers.add(new CokingHandler()); + handlers.add(new PyroHandler()); handlers.add(new FractioningHandler()); handlers.add(new BoilingHandler()); handlers.add(new CombinationHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 07f22e0cb..285cd917e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -82,6 +82,7 @@ public class ResourceManager { public static final IModelCustom solidifier = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/solidifier.obj")).asVBO(); public static final IModelCustom compressor = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/compressor.obj")).asVBO(); public static final IModelCustom coker = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/coker.obj")).asVBO(); + public static final IModelCustom pyrooven = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/pyrooven.obj")).asVBO(); //Flare Stack public static final IModelCustom oilflare = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/flare_stack.obj")).asVBO(); @@ -476,6 +477,7 @@ public class ResourceManager { public static final ResourceLocation solidifier_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/solidifier.png"); public static final ResourceLocation compressor_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/compressor.png"); public static final ResourceLocation coker_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/coker.png"); + public static final ResourceLocation pyrooven_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/pyrooven.png"); //Flare Stack public static final ResourceLocation oilflare_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/flare_stack.png"); diff --git a/src/main/java/com/hbm/render/anim/HbmAnimations.java b/src/main/java/com/hbm/render/anim/HbmAnimations.java index 44fff33dc..699703db6 100644 --- a/src/main/java/com/hbm/render/anim/HbmAnimations.java +++ b/src/main/java/com/hbm/render/anim/HbmAnimations.java @@ -27,7 +27,8 @@ public class HbmAnimations { ALT_CYCLE, //animation for alt fire cycles SPINUP, //animation for actionstart SPINDOWN, //animation for actionend - EQUIP //animation for drawing the weapon + EQUIP, //animation for drawing the weapon + INSPECT //animation for inspecting the weapon } // A NOTE ON SHOTGUN STYLE RELOADS diff --git a/src/main/java/com/hbm/render/block/RenderBoxDuct.java b/src/main/java/com/hbm/render/block/RenderBoxDuct.java index c8c8f8915..ccb2ab6dc 100644 --- a/src/main/java/com/hbm/render/block/RenderBoxDuct.java +++ b/src/main/java/com/hbm/render/block/RenderBoxDuct.java @@ -6,6 +6,7 @@ import com.hbm.blocks.network.FluidDuctBox; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; +import com.hbm.render.util.RenderBlocksNT; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import com.hbm.util.ColorUtil; @@ -60,6 +61,8 @@ public class RenderBoxDuct implements ISimpleBlockRenderingHandler { public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { FluidType type = Fluids.NONE; + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + TileEntity te = world.getTileEntity(x, y, z); Tessellator tessellator = Tessellator.instance; tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); diff --git a/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java b/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java new file mode 100644 index 000000000..91beb1e71 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java @@ -0,0 +1,111 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockScaffoldDynamic; +import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; +import com.hbm.render.util.RenderBlocksNT; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +public class RenderScaffoldDynamic implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + + + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityScaffoldDynamic)) return false; + TileEntityScaffoldDynamic scaffold = (TileEntityScaffoldDynamic) tile; + + boolean lpx = scaffold.has(scaffold.BAR_LOWER_POS_X); + boolean lnx = scaffold.has(scaffold.BAR_LOWER_NEG_X); + boolean upx = scaffold.has(scaffold.BAR_UPPER_POS_X); + boolean unx = scaffold.has(scaffold.BAR_UPPER_NEG_X); + boolean lpz = scaffold.has(scaffold.BAR_LOWER_POS_Z); + boolean lnz = scaffold.has(scaffold.BAR_LOWER_NEG_Z); + boolean upz = scaffold.has(scaffold.BAR_UPPER_POS_Z); + boolean unz = scaffold.has(scaffold.BAR_UPPER_NEG_Z); + + boolean p_nx_nz = scaffold.has(scaffold.POLE_NX_NZ); + boolean p_px_nz = scaffold.has(scaffold.POLE_PX_NZ); + boolean p_px_pz = scaffold.has(scaffold.POLE_PX_PZ); + boolean p_nx_pz = scaffold.has(scaffold.POLE_NX_PZ); + + BlockScaffoldDynamic.renderMode = 0; + if(p_nx_nz) { renderer.setRenderBounds(0D, 0D, 0D, 0.25D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } + if(p_px_nz) { renderer.setRenderBounds(0.75D, 0D, 0D, 1D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } + if(p_px_pz) { renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } + if(p_nx_pz) { renderer.setRenderBounds(0D, 0D, 0.75D, 0.25D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } + + BlockScaffoldDynamic.renderMode = 1; + if(scaffold.has(scaffold.GRATE_LOWER)) { renderer.setRenderBounds(0.000, 0.000, 0.000, 1.000, 0.125, 1.000); renderer.renderStandardBlock(block, x, y, z); } + if(scaffold.has(scaffold.GRATE_UPPER)) { renderer.setRenderBounds(0.000, 0.875, 0.000, 1.000, 1.000, 1.000); renderer.renderStandardBlock(block, x, y, z); } + + BlockScaffoldDynamic.renderMode = 2; + + if(lpx) { renderer.setRenderBounds(0.75, 0.00, p_px_nz ? 0.25 : 0.00, 1.00, 0.25, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(upx) { renderer.setRenderBounds(0.75, 0.75, p_px_nz ? 0.25 : 0.00, 1.00, 1.00, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lnx) { renderer.setRenderBounds(0.00, 0.00, p_nx_nz ? 0.25 : 0.00, 0.25, 0.25, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(unx) { renderer.setRenderBounds(0.00, 0.75, p_nx_nz ? 0.25 : 0.00, 0.25, 1.00, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lpz) { renderer.setRenderBounds(p_nx_pz || lnx ? 0.25 : 0.00, 0.00, 0.75, p_px_pz || lpx ? 0.75 : 1.00, 0.25, 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(upz) { renderer.setRenderBounds(p_nx_pz || unx ? 0.25 : 0.00, 0.75, 0.75, p_px_pz || upx ? 0.75 : 1.00, 1.00, 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lnz) { renderer.setRenderBounds(p_nx_nz || lnx ? 0.25 : 0.00, 0.00, 0.00, p_px_nz || lpx ? 0.75 : 1.00, 0.25, 0.25); renderer.renderStandardBlock(block, x, y, z); } + if(unz) { renderer.setRenderBounds(p_nx_nz || unx ? 0.25 : 0.00, 0.75, 0.00, p_px_nz || upx ? 0.75 : 1.00, 1.00, 0.25); renderer.renderStandardBlock(block, x, y, z); } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return false; + } + + @Override + public int getRenderId() { + return BlockScaffoldDynamic.renderIDScaffold; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderSteelCorner.java b/src/main/java/com/hbm/render/block/RenderSteelCorner.java new file mode 100644 index 000000000..9867847cb --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderSteelCorner.java @@ -0,0 +1,94 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.DecoBlock; +import com.hbm.render.util.RenderBlocksNT; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderSteelCorner implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + + + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + int meta = world.getBlockMetadata(x, y, z); + + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + switch(meta) { + case 2: + renderer.setRenderBounds(0.25D, 0D, 0.875D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0.75D, 0.25D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 1D, 0.75D); renderer.renderStandardBlock(block, x, y, z); + break; + case 3: + renderer.setRenderBounds(0D, 0D, 0D, 0.75D, 1D, 0.125D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.75D, 0D, 0D, 1D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.875D, 0D, 0.25D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + break; + case 4: + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + break; + case 5: + renderer.setRenderBounds(0D, 0D, 0.25D, 0.125D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0D, 0.25D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.25D, 0D, 0D, 1D, 1D, 0.125D); renderer.renderStandardBlock(block, x, y, z); + break; + } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return DecoBlock.renderIDCorner; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderSteelWall.java b/src/main/java/com/hbm/render/block/RenderSteelWall.java new file mode 100644 index 000000000..a9744ab5b --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderSteelWall.java @@ -0,0 +1,61 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.DecoBlock; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderSteelWall implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.9375F); + + renderer.setRenderBounds(0D, 0D, 0.875D, 1D, 1D, 1D); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + int meta = world.getBlockMetadata(x, y, z); + + switch(meta) { + case 2: renderer.setRenderBounds(0D, 0D, 0.875D, 1D, 1D, 1D); break; + case 3: renderer.setRenderBounds(0D, 0D, 0D, 1D, 1D, 0.125D); break; + case 4: renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 1D); break; + case 5: renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 1D, 1D); break; + } + + renderer.renderStandardBlock(block, x, y, z); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return DecoBlock.renderIDWall; + } + +} diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java b/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java index 1e48e83ae..b8d09b204 100644 --- a/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java +++ b/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java @@ -4,11 +4,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelSteelBeam; -import com.hbm.render.model.ModelSteelCorner; import com.hbm.render.model.ModelSteelRoof; -import com.hbm.render.model.ModelSteelScaffold; -import com.hbm.render.model.ModelSteelWall; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -19,18 +15,10 @@ import net.minecraftforge.client.IItemRenderer; public class ItemRenderDecoBlock implements IItemRenderer { - protected ModelSteelWall wall; - protected ModelSteelCorner corner; protected ModelSteelRoof roof; - protected ModelSteelBeam beam; - protected ModelSteelScaffold scaffold; public ItemRenderDecoBlock() { - wall = new ModelSteelWall(); - corner = new ModelSteelCorner(); roof = new ModelSteelRoof(); - beam = new ModelSteelBeam(); - scaffold = new ModelSteelScaffold(); } @Override @@ -51,16 +39,8 @@ public class ItemRenderDecoBlock implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelWall.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelCorner.png")); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelRoof.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelBeam.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelScaffold.png")); switch(type) { case ENTITY: @@ -68,32 +48,16 @@ public class ItemRenderDecoBlock implements IItemRenderer { GL11.glScalef(0.5F, 0.5F, 0.5F); GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; case EQUIPPED: GL11.glPushMatrix(); GL11.glScalef(0.5F, 0.5F, 0.5F); GL11.glTranslatef(0.8F, -0.3F, 0.2F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; case EQUIPPED_FIRST_PERSON: @@ -101,16 +65,8 @@ public class ItemRenderDecoBlock implements IItemRenderer { GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-0.6F, -0.6F, -0.1F); GL11.glScalef(0.5F, 0.5F, 0.5F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; default: break; diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java b/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java deleted file mode 100644 index 5af78716a..000000000 --- a/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.hbm.render.item.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelPoles; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -public class ItemRenderSteelPoles implements IItemRenderer { - - protected ModelPoles swordModel; - - public ItemRenderSteelPoles() { - swordModel = new ModelPoles(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - switch(type) { - case EQUIPPED: - case EQUIPPED_FIRST_PERSON: - case ENTITY: - return true; - default: return false; - } - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - switch(type) { - case ENTITY: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(0.8F, -0.3F, 0.2F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.6F, -0.6F, -0.1F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - default: break; - } - } - -} diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java b/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java deleted file mode 100644 index fc49686f3..000000000 --- a/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.hbm.render.item.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelTapeRecorder; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -public class ItemRenderTapeRecorder implements IItemRenderer { - - protected ModelTapeRecorder swordModel; - - public ItemRenderTapeRecorder() { - swordModel = new ModelTapeRecorder(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - switch(type) { - case EQUIPPED: - case EQUIPPED_FIRST_PERSON: - case ENTITY: - return true; - default: return false; - } - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - switch(type) { - case ENTITY: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(0.8F, 1.7F, 0.2F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(90.0F, 0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.6F, -0.6F, -0.1F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - default: break; - } - } - -} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java index 49635e669..1294c7443 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java @@ -35,7 +35,8 @@ public class ItemRenderDebug extends ItemRenderWeaponBase { GL11.glRotated(equipSpin[0], 0, 0, 1); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); - GL11.glTranslated(recoil[0], recoil[1], recoil[2]); + standardAimingTransform(stack, 0, 0, recoil[2], -recoil[2], 0, 0); + GL11.glRotated(recoil[2] * 10, 0, 0, 1); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/model/ModelSteelBeam.java b/src/main/java/com/hbm/render/model/ModelSteelBeam.java deleted file mode 100644 index 2626ccb3f..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelBeam.java +++ /dev/null @@ -1,62 +0,0 @@ -// Date: 10.12.2015 21:02:25 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelBeam extends ModelBase -{ - //fields - ModelRenderer Shape1; - - public ModelSteelBeam() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 2, 16, 2); - Shape1.setRotationPoint(-1F, 8F, -1F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelCorner.java b/src/main/java/com/hbm/render/model/ModelSteelCorner.java deleted file mode 100644 index 46be6fa19..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelCorner.java +++ /dev/null @@ -1,89 +0,0 @@ -// Date: 10.12.2015 20:58:33 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelCorner extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - - public ModelSteelCorner() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 16, 16, 1); - Shape1.setRotationPoint(-8F, 8F, -8F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 34, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(2F, 8F, -7F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 0); - Shape3.addBox(0F, 0F, 0F, 1, 16, 15); - Shape3.setRotationPoint(-8F, 8F, -7F); - Shape3.setTextureSize(64, 32); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 34, 0); - Shape4.addBox(0F, 0F, 0F, 2, 16, 2); - Shape4.setRotationPoint(-7F, 8F, -2F); - Shape4.setTextureSize(64, 32); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - Shape3.render(f); - Shape4.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelScaffold.java b/src/main/java/com/hbm/render/model/ModelSteelScaffold.java deleted file mode 100644 index 6e736a19d..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelScaffold.java +++ /dev/null @@ -1,161 +0,0 @@ -// Date: 10.12.2015 21:15:17 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelScaffold extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer Shape9; - ModelRenderer Shape10; - ModelRenderer Shape11; - ModelRenderer Shape12; - - public ModelSteelScaffold() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 2, 16, 2); - Shape1.setRotationPoint(6F, 8F, -6F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, -6F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(-8F, 8F, 4F); - Shape3.setTextureSize(64, 32); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 0); - Shape4.addBox(0F, 0F, 0F, 2, 16, 2); - Shape4.setRotationPoint(6F, 8F, 4F); - Shape4.setTextureSize(64, 32); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 8, 0); - Shape5.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape5.setRotationPoint(0F, 15.5F, 4.5F); - Shape5.setTextureSize(64, 32); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, -0.6108652F); - Shape6 = new ModelRenderer(this, 8, 0); - Shape6.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape6.setRotationPoint(0F, 15.5F, 4.5F); - Shape6.setTextureSize(64, 32); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0.6108652F); - Shape7 = new ModelRenderer(this, 8, 0); - Shape7.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape7.setRotationPoint(0F, 15.5F, -5.5F); - Shape7.setTextureSize(64, 32); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0.6108652F); - Shape8 = new ModelRenderer(this, 8, 0); - Shape8.addBox(-8F, 0F, 0F, 16, 1, 1); - Shape8.setRotationPoint(0F, 15.5F, -5.5F); - Shape8.setTextureSize(64, 32); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, -0.6108652F); - Shape9 = new ModelRenderer(this, 0, 19); - Shape9.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape9.setRotationPoint(-7F, 15.5F, 0F); - Shape9.setTextureSize(64, 32); - Shape9.mirror = true; - setRotation(Shape9, 0.6108652F, 0F, 0F); - Shape10 = new ModelRenderer(this, 0, 19); - Shape10.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape10.setRotationPoint(-7F, 15.5F, 0F); - Shape10.setTextureSize(64, 32); - Shape10.mirror = true; - setRotation(Shape10, -0.6108652F, 0F, 0F); - Shape11 = new ModelRenderer(this, 0, 19); - Shape11.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape11.setRotationPoint(7F, 15.5F, 0F); - Shape11.setTextureSize(64, 32); - Shape11.mirror = true; - setRotation(Shape11, 0.6108652F, 0F, 0F); - Shape12 = new ModelRenderer(this, 0, 19); - Shape12.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape12.setRotationPoint(7F, 15.5F, 0F); - Shape12.setTextureSize(64, 32); - Shape12.mirror = true; - setRotation(Shape12, -0.6108652F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape8.render(f5); - Shape9.render(f5); - Shape10.render(f5); - Shape11.render(f5); - Shape12.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - Shape3.render(f); - Shape4.render(f); - Shape5.render(f); - Shape6.render(f); - Shape7.render(f); - Shape8.render(f); - Shape9.render(f); - Shape10.render(f); - Shape11.render(f); - Shape12.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelWall.java b/src/main/java/com/hbm/render/model/ModelSteelWall.java deleted file mode 100644 index 6810eac5a..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelWall.java +++ /dev/null @@ -1,71 +0,0 @@ -// Date: 10.12.2015 20:54:28 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelWall extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - - public ModelSteelWall() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 16, 16, 1); - Shape1.setRotationPoint(-8F, 8F, -8F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 34, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-4F, 8F, -7F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java b/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java index 00cdc05fa..724423e3c 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java +++ b/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java @@ -8,43 +8,28 @@ import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelBroadcaster; import com.hbm.render.model.ModelGeiger; import com.hbm.render.model.ModelRadio; -import com.hbm.render.model.ModelSteelBeam; -import com.hbm.render.model.ModelSteelCorner; import com.hbm.render.model.ModelSteelRoof; -import com.hbm.render.model.ModelSteelScaffold; -import com.hbm.render.model.ModelSteelWall; +import net.minecraft.block.Block; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public class RenderDecoBlock extends TileEntitySpecialRenderer { - private static final ResourceLocation texture1 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelWall.png"); - private static final ResourceLocation texture2 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelCorner.png"); private static final ResourceLocation texture3 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelRoof.png"); - private static final ResourceLocation texture4 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelBeam.png"); - private static final ResourceLocation texture5 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelScaffold.png"); private static final ResourceLocation texture6 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelBroadcaster.png"); private static final ResourceLocation texture7 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelRadio.png"); private static final ResourceLocation texture8 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelRadioReceiver.png"); private static final ResourceLocation texture9 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelGeiger.png"); - private ModelSteelWall model1; - private ModelSteelCorner model2; private ModelSteelRoof model3; - private ModelSteelBeam model4; - private ModelSteelScaffold model5; private ModelBroadcaster model6; private ModelRadio model7; private ModelGeiger model8; public RenderDecoBlock() { - this.model1 = new ModelSteelWall(); - this.model2 = new ModelSteelCorner(); this.model3 = new ModelSteelRoof(); - this.model4 = new ModelSteelBeam(); - this.model5 = new ModelSteelScaffold(); this.model6 = new ModelBroadcaster(); this.model7 = new ModelRadio(); this.model8 = new ModelGeiger(); @@ -53,339 +38,221 @@ public class RenderDecoBlock extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { GL11.glPushMatrix(); - GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GL11.glRotatef(180, 0F, 0F, 1F); + + GL11.glEnable(GL11.GL_LIGHTING); + + Block b = tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord); + + if(b == ModBlocks.steel_roof) { + this.bindTexture(texture3); + } + if(b == ModBlocks.broadcaster_pc) { + this.bindTexture(texture6); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.geiger) { + this.bindTexture(texture9); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.radiorec) { + this.bindTexture(texture8); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.radiobox) { + this.bindTexture(texture7); + switch(tileentity.getBlockMetadata()) + { + case 4: + case 8: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: + case 6: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: + case 9: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: + case 7: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + GL11.glTranslatef(0, 0, 1); + } + + GL11.glPushMatrix(); + if(b == ModBlocks.steel_roof) this.model3.renderModel(0.0625F); + if(b == ModBlocks.broadcaster_pc) this.model6.renderModel(0.0625F); + if(b== ModBlocks.geiger) this.model8.renderModel(0.0625F); + if(b == ModBlocks.radiobox) this.model7.renderModel(0.0625F, tileentity.getBlockMetadata() > 5 ? 160 : 20); + if(b == ModBlocks.radiorec) this.model6.renderModel(0.0625F); + GL11.glPopMatrix(); + + if(b == ModBlocks.boxcar) { + GL11.glRotatef(180, 0F, 0F, 1F); - - GL11.glEnable(GL11.GL_LIGHTING); - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_wall) - { - this.bindTexture(texture1); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_corner) - { - this.bindTexture(texture2); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_roof) - { - this.bindTexture(texture3); - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_beam) - { - this.bindTexture(texture4); - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_scaffold) - { - this.bindTexture(texture5); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.broadcaster_pc) - { - this.bindTexture(texture6); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.geiger) - { - this.bindTexture(texture9); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiorec) - { - this.bindTexture(texture8); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiobox) - { - this.bindTexture(texture7); - switch(tileentity.getBlockMetadata()) - { - case 4: - case 8: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - case 6: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 5: - case 9: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - case 7: - GL11.glRotatef(180, 0F, 1F, 0F); break; - } - GL11.glTranslatef(0, 0, 1); - } - - GL11.glPushMatrix(); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_wall) - this.model1.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_corner) - this.model2.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_roof) - this.model3.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_beam) - this.model4.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_scaffold) - this.model5.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.broadcaster_pc) - this.model6.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.geiger) - this.model8.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiobox) - this.model7.renderModel(0.0625F, tileentity.getBlockMetadata() > 5 ? 160 : 20); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiorec) - this.model6.renderModel(0.0625F); - GL11.glPopMatrix(); - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.boxcar) { + GL11.glTranslatef(0, -1.5F, 0); + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + default: GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - - switch(tileentity.getBlockMetadata()) { - case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; - case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; - default: - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glRotated(90, 1, 0, 0); - GL11.glTranslatef(0, -1.5F, 0); - break; - } - - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.boxcar_tex); - ResourceManager.boxcar.renderAll(); + GL11.glRotated(90, 1, 0, 0); + GL11.glTranslatef(0, -1.5F, 0); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.boat) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, 0, -1.5F); - GL11.glTranslatef(0, 0.5F, 0); - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.duchessgambit_tex); - ResourceManager.duchessgambit.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.boxcar_tex); + ResourceManager.boxcar.renderAll(); + } + + if(b == ModBlocks.boat) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, 0, -1.5F); + GL11.glTranslatef(0, 0.5F, 0); + + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.duchessgambit_tex); + ResourceManager.duchessgambit.renderAll(); + } + + if(b == ModBlocks.sat_radar) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_radar) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_radar_tex); + ResourceManager.sat_radar.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_radar_tex); - ResourceManager.sat_radar.renderAll(); + if(b == ModBlocks.sat_resonator) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_resonator) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_resonator_tex); + ResourceManager.sat_resonator.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_resonator_tex); - ResourceManager.sat_resonator.renderAll(); + if(b == ModBlocks.sat_scanner) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_scanner) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_scanner_tex); + ResourceManager.sat_scanner.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_scanner_tex); - ResourceManager.sat_scanner.renderAll(); + if(b == ModBlocks.sat_mapper) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_mapper) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_mapper_tex); + ResourceManager.sat_mapper.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_mapper_tex); - ResourceManager.sat_mapper.renderAll(); + if(b == ModBlocks.sat_laser) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_laser) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_laser_tex); + ResourceManager.sat_laser.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_laser_tex); - ResourceManager.sat_laser.renderAll(); + if(b == ModBlocks.sat_foeq) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_foeq) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_foeq_tex); + ResourceManager.sat_foeq.renderAll(); + } + + if(b == ModBlocks.sat_dock) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + + bindTexture(ResourceManager.satdock_tex); + ResourceManager.satDock.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_foeq_tex); - ResourceManager.sat_foeq.renderAll(); - } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_dock) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - - bindTexture(ResourceManager.satdock_tex); - ResourceManager.satDock.renderAll(); - } - GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPyroOven.java b/src/main/java/com/hbm/render/tileentity/RenderPyroOven.java new file mode 100644 index 000000000..bd42f1fc1 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPyroOven.java @@ -0,0 +1,79 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPyroOven extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + } + + TileEntityMachinePyroOven pyro = (TileEntityMachinePyroOven) tile; + float anim = pyro.prevAnim + (pyro.anim - pyro.prevAnim) * f; + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.pyrooven_tex); + ResourceManager.pyrooven.renderPart("Oven"); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.125) / 2 - 0.5, 0, 0); + ResourceManager.pyrooven.renderPart("Slider"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(1.5, 0, 1.5); + GL11.glRotated(anim * -15D % 360D, 0, 1, 0); + GL11.glTranslated(-1.5, 0, -1.5); + ResourceManager.pyrooven.renderPart("Fan"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_pyrooven); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.pyrooven_tex); + ResourceManager.pyrooven.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/render/util/RenderBlocksNT.java b/src/main/java/com/hbm/render/util/RenderBlocksNT.java new file mode 100644 index 000000000..db0990f07 --- /dev/null +++ b/src/main/java/com/hbm/render/util/RenderBlocksNT.java @@ -0,0 +1,239 @@ +package com.hbm.render.util; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +public class RenderBlocksNT extends RenderBlocks { + + public static final RenderBlocksNT INSTANCE = new RenderBlocksNT(); + + public RenderBlocksNT(IBlockAccess world) { + super(world); + } + + public RenderBlocksNT() { + super(); + } + + public RenderBlocksNT setWorld(IBlockAccess world) { + this.blockAccess = world; + this.field_152631_f = false; + this.flipTexture = false; + return this; + } + + @Override + public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) { + Tessellator tessellator = Tessellator.instance; + + if(this.hasOverrideBlockTexture()) { + icon = this.overrideBlockTexture; + } + + double minU = (double) icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D); // **FIX** + double maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); // **FIX** + + if(this.field_152631_f) { + minU = (double) icon.getInterpolatedU(this.renderMinX * 16.0D); // **FIX** + maxU = (double) icon.getInterpolatedU(this.renderMaxX * 16.0D); // **FIX** + } + + double maxV = (double) icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double minV = (double) icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double minU2; + + if(this.flipTexture) { + minU2 = maxU; + maxU = minU; + minU = minU2; + } + + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + maxU = (double) icon.getMinU(); + minU = (double) icon.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + maxV = (double) icon.getMinV(); + minV = (double) icon.getMaxV(); + } + + minU2 = minU; + double maxU2 = maxU; + double maxV2 = maxV; + double minV2 = minV; + + if(this.uvRotateEast == 2) { + maxU = (double) icon.getInterpolatedU(this.renderMinY * 16.0D); + minU = (double) icon.getInterpolatedU(this.renderMaxY * 16.0D); + maxV = (double) icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + minV = (double) icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + maxV2 = maxV; + minV2 = minV; + minU2 = maxU; + maxU2 = minU; + maxV = minV; + minV = maxV2; + } else if(this.uvRotateEast == 1) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxX * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinX * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxU = minU; + minU = maxU2; + maxV2 = minV; + minV2 = maxV; + } else if(this.uvRotateEast == 3) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinY * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxV2 = maxV; + minV2 = minV; + } + + double minX = x + this.renderMinX; + double maxX = x + this.renderMaxX; + double minY = y + this.renderMinY; + double maxY = y + this.renderMaxY; + double minZ = z + this.renderMinZ; + + if(this.renderFromInside) { + minX = x + this.renderMaxX; + maxX = x + this.renderMinX; + } + + if(this.enableAO) { + tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + tessellator.setBrightness(this.brightnessTopLeft); + tessellator.addVertexWithUV(minX, maxY, minZ, minU2, maxV2); + tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + tessellator.setBrightness(this.brightnessBottomLeft); + tessellator.addVertexWithUV(maxX, maxY, minZ, maxU, maxV); + tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + tessellator.setBrightness(this.brightnessBottomRight); + tessellator.addVertexWithUV(maxX, minY, minZ, maxU2, minV2); + tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + tessellator.setBrightness(this.brightnessTopRight); + tessellator.addVertexWithUV(minX, minY, minZ, minU, minV); + } else { + tessellator.addVertexWithUV(minX, maxY, minZ, minU2, maxV2); + tessellator.addVertexWithUV(maxX, maxY, minZ, maxU, maxV); + tessellator.addVertexWithUV(maxX, minY, minZ, maxU2, minV2); + tessellator.addVertexWithUV(minX, minY, minZ, minU, minV); + } + } + + @Override + public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) { + Tessellator tessellator = Tessellator.instance; + + if(this.hasOverrideBlockTexture()) { + icon = this.overrideBlockTexture; + } + + double minU = (double) icon.getInterpolatedU(16D - this.renderMinZ * 16.0D); // **FIX** + double maxU = (double) icon.getInterpolatedU(16D - this.renderMaxZ * 16.0D); // **FIX** + + if(this.field_152631_f) { + minU = (double) icon.getInterpolatedU(this.renderMinZ * 16.0D); // **FIX** + maxU = (double) icon.getInterpolatedU(this.renderMaxZ * 16.0D); // **FIX** + } + + double maxV = (double) icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double minV = (double) icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double minU2; + + if(this.flipTexture) { + minU2 = maxU; + maxU = minU; + minU = minU2; + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + maxU = (double) icon.getMinU(); + minU = (double) icon.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + maxV = (double) icon.getMinV(); + minV = (double) icon.getMaxV(); + } + + minU2 = minU; + double maxU2 = maxU; + double maxV2 = maxV; + double minV2 = minV; + + if(this.uvRotateSouth == 2) { + maxU = (double) icon.getInterpolatedU(this.renderMinY * 16.0D); + maxV = (double) icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + minU = (double) icon.getInterpolatedU(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + maxV2 = maxV; + minV2 = minV; + minU2 = maxU; + maxU2 = minU; + maxV = minV; + minV = maxV2; + } else if(this.uvRotateSouth == 1) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxZ * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinZ * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxU = minU; + minU = maxU2; + maxV2 = minV; + minV2 = maxV; + } else if(this.uvRotateSouth == 3) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinY * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxV2 = maxV; + minV2 = minV; + } + + double maxX = x + this.renderMaxX; + double minY = y + this.renderMinY; + double maxY = y + this.renderMaxY; + double minZ = z + this.renderMinZ; + double maxZ = z + this.renderMaxZ; + + if(this.renderFromInside) { + minZ = z + this.renderMaxZ; + maxZ = z + this.renderMinZ; + } + + if(this.enableAO) { + tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + tessellator.setBrightness(this.brightnessTopLeft); + tessellator.addVertexWithUV(maxX, minY, maxZ, maxU2, minV2); + tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + tessellator.setBrightness(this.brightnessBottomLeft); + tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); + tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + tessellator.setBrightness(this.brightnessBottomRight); + tessellator.addVertexWithUV(maxX, maxY, minZ, minU2, maxV2); + tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + tessellator.setBrightness(this.brightnessTopRight); + tessellator.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + } else { + tessellator.addVertexWithUV(maxX, minY, maxZ, maxU2, minV2); + tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); + tessellator.addVertexWithUV(maxX, maxY, minZ, minU2, maxV2); + tessellator.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + } + } +} diff --git a/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java b/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java new file mode 100644 index 000000000..3da1e2b22 --- /dev/null +++ b/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java @@ -0,0 +1,150 @@ +package com.hbm.render.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAnvil; +import net.minecraft.block.BlockBeacon; +import net.minecraft.block.BlockBrewingStand; +import net.minecraft.block.BlockCauldron; +import net.minecraft.block.BlockCocoa; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockDragonEgg; +import net.minecraft.block.BlockEndPortalFrame; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockFire; +import net.minecraft.block.BlockFlowerPot; +import net.minecraft.block.BlockHopper; +import net.minecraft.block.BlockPane; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockRedstoneComparator; +import net.minecraft.block.BlockRedstoneDiode; +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.BlockStairs; +import net.minecraft.block.BlockStem; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class RenderBlocksWrapper extends RenderBlocks { + + public static final RenderBlocksWrapper INSTANCE = new RenderBlocksWrapper(); + public RenderBlocks rb; + + public void setup(RenderBlocks rb) { this.rb = rb; } + + @Override + public boolean renderStandardBlock(Block block, int x, int y, int z) { + int color = block.colorMultiplier(this.blockAccess, x, y, z); + float r = (float) (color >> 16 & 255) / 255.0F; + float g = (float) (color >> 8 & 255) / 255.0F; + float b = (float) (color & 255) / 255.0F; + + if(EntityRenderer.anaglyphEnable) { + float ar = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float ag = (r * 30.0F + g * 70.0F) / 100.0F; + float ab = (r * 30.0F + b * 70.0F) / 100.0F; + r = ar; + g = ag; + b = ab; + } + + return Minecraft.isAmbientOcclusionEnabled() && block.getLightValue() == 0 + ? (this.partialRenderBounds ? this.renderStandardBlockWithAmbientOcclusionPartial(block, x, y, z, r, g, b) + : this.renderStandardBlockWithAmbientOcclusion(block, x, y, z, r, g, b)) + : this.renderStandardBlockWithColorMultiplier(block, x, y, z, r, g, b); + } + + // the unholy mass + @Override public void setOverrideBlockTexture(IIcon p_147757_1_) { rb.setOverrideBlockTexture(p_147757_1_); } + @Override public void clearOverrideBlockTexture() { rb.clearOverrideBlockTexture(); } + @Override public boolean hasOverrideBlockTexture() { return rb.hasOverrideBlockTexture(); } + @Override public void setRenderFromInside(boolean p_147786_1_) { rb.setRenderFromInside(p_147786_1_); } + @Override public void setRenderAllFaces(boolean p_147753_1_) { rb.setRenderAllFaces(p_147753_1_); } + @Override public void setRenderBounds(double p_147782_1_, double p_147782_3_, double p_147782_5_, double p_147782_7_, double p_147782_9_, double p_147782_11_) { rb.setRenderBounds(p_147782_1_, p_147782_3_, p_147782_5_, p_147782_7_, p_147782_9_, p_147782_11_); } + @Override public void setRenderBoundsFromBlock(Block p_147775_1_) { rb.setRenderBoundsFromBlock(p_147775_1_); } + @Override public void overrideBlockBounds(double p_147770_1_, double p_147770_3_, double p_147770_5_, double p_147770_7_, double p_147770_9_, double p_147770_11_) { rb.overrideBlockBounds(p_147770_1_, p_147770_3_, p_147770_5_, p_147770_7_, p_147770_9_, p_147770_11_); } + @Override public void unlockBlockBounds() { rb.unlockBlockBounds(); } + @Override public void renderBlockUsingTexture(Block p_147792_1_, int p_147792_2_, int p_147792_3_, int p_147792_4_, IIcon p_147792_5_) { rb.renderBlockUsingTexture(p_147792_1_, p_147792_2_, p_147792_3_, p_147792_4_, p_147792_5_); } + @Override public void renderBlockAllFaces(Block p_147769_1_, int p_147769_2_, int p_147769_3_, int p_147769_4_) { rb.renderBlockAllFaces(p_147769_1_, p_147769_2_, p_147769_3_, p_147769_4_); } + @Override public boolean renderBlockByRenderType(Block p_147805_1_, int p_147805_2_, int p_147805_3_, int p_147805_4_) { return rb.renderBlockByRenderType(p_147805_1_, p_147805_2_, p_147805_3_, p_147805_4_); } + @Override public boolean renderBlockEndPortalFrame(BlockEndPortalFrame p_147743_1_, int p_147743_2_, int p_147743_3_, int p_147743_4_) { return rb.renderBlockEndPortalFrame(p_147743_1_, p_147743_2_, p_147743_3_, p_147743_4_); } + @Override public boolean renderBlockBed(Block p_147773_1_, int p_147773_2_, int p_147773_3_, int p_147773_4_) { return rb.renderBlockBed(p_147773_1_, p_147773_2_, p_147773_3_, p_147773_4_); } + @Override public boolean renderBlockBrewingStand(BlockBrewingStand p_147741_1_, int p_147741_2_, int p_147741_3_, int p_147741_4_) { return rb.renderBlockBrewingStand(p_147741_1_, p_147741_2_, p_147741_3_, p_147741_4_); } + @Override public boolean renderBlockCauldron(BlockCauldron p_147785_1_, int p_147785_2_, int p_147785_3_, int p_147785_4_) { return rb.renderBlockCauldron(p_147785_1_, p_147785_2_, p_147785_3_, p_147785_4_); } + @Override public boolean renderBlockFlowerpot(BlockFlowerPot p_147752_1_, int p_147752_2_, int p_147752_3_, int p_147752_4_) { return rb.renderBlockFlowerpot(p_147752_1_, p_147752_2_, p_147752_3_, p_147752_4_); } + @Override public boolean renderBlockAnvil(BlockAnvil p_147725_1_, int p_147725_2_, int p_147725_3_, int p_147725_4_) { return rb.renderBlockAnvil(p_147725_1_, p_147725_2_, p_147725_3_, p_147725_4_); } + @Override public boolean renderBlockAnvilMetadata(BlockAnvil p_147780_1_, int p_147780_2_, int p_147780_3_, int p_147780_4_, int p_147780_5_) { return rb.renderBlockAnvilMetadata(p_147780_1_, p_147780_2_, p_147780_3_, p_147780_4_, p_147780_5_); } + @Override public boolean renderBlockAnvilOrient(BlockAnvil p_147728_1_, int p_147728_2_, int p_147728_3_, int p_147728_4_, int p_147728_5_, boolean p_147728_6_) { return rb.renderBlockAnvilOrient(p_147728_1_, p_147728_2_, p_147728_3_, p_147728_4_, p_147728_5_, p_147728_6_); } + @Override public float renderBlockAnvilRotate(BlockAnvil p_147737_1_, int p_147737_2_, int p_147737_3_, int p_147737_4_, int p_147737_5_, float p_147737_6_, float p_147737_7_, float p_147737_8_, float p_147737_9_, boolean p_147737_10_, boolean p_147737_11_, int p_147737_12_) { return rb.renderBlockAnvilRotate(p_147737_1_, p_147737_2_, p_147737_3_, p_147737_4_, p_147737_5_, p_147737_6_, p_147737_7_, p_147737_8_, p_147737_9_, p_147737_10_, p_147737_11_, p_147737_12_); } + @Override public boolean renderBlockTorch(Block p_147791_1_, int p_147791_2_, int p_147791_3_, int p_147791_4_) { return rb.renderBlockTorch(p_147791_1_, p_147791_2_, p_147791_3_, p_147791_4_); } + @Override public boolean renderBlockRepeater(BlockRedstoneRepeater p_147759_1_, int p_147759_2_, int p_147759_3_, int p_147759_4_) { return rb.renderBlockRepeater(p_147759_1_, p_147759_2_, p_147759_3_, p_147759_4_); } + @Override public boolean renderBlockRedstoneComparator(BlockRedstoneComparator p_147781_1_, int p_147781_2_, int p_147781_3_, int p_147781_4_) { return rb.renderBlockRedstoneComparator(p_147781_1_, p_147781_2_, p_147781_3_, p_147781_4_); } + @Override public boolean renderBlockRedstoneDiode(BlockRedstoneDiode p_147748_1_, int p_147748_2_, int p_147748_3_, int p_147748_4_) { return rb.renderBlockRedstoneDiode(p_147748_1_, p_147748_2_, p_147748_3_, p_147748_4_); } + @Override public void renderBlockRedstoneDiodeMetadata(BlockRedstoneDiode p_147732_1_, int p_147732_2_, int p_147732_3_, int p_147732_4_, int p_147732_5_) { rb.renderBlockRedstoneDiodeMetadata(p_147732_1_, p_147732_2_, p_147732_3_, p_147732_4_, p_147732_5_); } + @Override public void renderPistonBaseAllFaces(Block p_147804_1_, int p_147804_2_, int p_147804_3_, int p_147804_4_) { rb.renderPistonBaseAllFaces(p_147804_1_, p_147804_2_, p_147804_3_, p_147804_4_); } + @Override public boolean renderPistonBase(Block p_147731_1_, int p_147731_2_, int p_147731_3_, int p_147731_4_, boolean p_147731_5_) { return rb.renderPistonBase(p_147731_1_, p_147731_2_, p_147731_3_, p_147731_4_, p_147731_5_); } + @Override public void renderPistonRodUD(double p_147763_1_, double p_147763_3_, double p_147763_5_, double p_147763_7_, double p_147763_9_, double p_147763_11_, float p_147763_13_, double p_147763_14_) { rb.renderPistonRodUD(p_147763_1_, p_147763_3_, p_147763_5_, p_147763_7_, p_147763_9_, p_147763_11_, p_147763_13_, p_147763_14_); } + @Override public void renderPistonRodSN(double p_147789_1_, double p_147789_3_, double p_147789_5_, double p_147789_7_, double p_147789_9_, double p_147789_11_, float p_147789_13_, double p_147789_14_) { rb.renderPistonRodSN(p_147789_1_, p_147789_3_, p_147789_5_, p_147789_7_, p_147789_9_, p_147789_11_, p_147789_13_, p_147789_14_); } + @Override public void renderPistonRodEW(double p_147738_1_, double p_147738_3_, double p_147738_5_, double p_147738_7_, double p_147738_9_, double p_147738_11_, float p_147738_13_, double p_147738_14_) { rb.renderPistonRodEW(p_147738_1_, p_147738_3_, p_147738_5_, p_147738_7_, p_147738_9_, p_147738_11_, p_147738_13_, p_147738_14_); } + @Override public void renderPistonExtensionAllFaces(Block p_147750_1_, int p_147750_2_, int p_147750_3_, int p_147750_4_, boolean p_147750_5_) { rb.renderPistonExtensionAllFaces(p_147750_1_, p_147750_2_, p_147750_3_, p_147750_4_, p_147750_5_); } + @Override public boolean renderPistonExtension(Block p_147809_1_, int p_147809_2_, int p_147809_3_, int p_147809_4_, boolean p_147809_5_) { return rb.renderPistonExtension(p_147809_1_, p_147809_2_, p_147809_3_, p_147809_4_, p_147809_5_); } + @Override public boolean renderBlockLever(Block p_147790_1_, int p_147790_2_, int p_147790_3_, int p_147790_4_) { return rb.renderBlockLever(p_147790_1_, p_147790_2_, p_147790_3_, p_147790_4_); } + @Override public boolean renderBlockTripWireSource(Block p_147723_1_, int p_147723_2_, int p_147723_3_, int p_147723_4_) { return rb.renderBlockTripWireSource(p_147723_1_, p_147723_2_, p_147723_3_, p_147723_4_); } + @Override public boolean renderBlockTripWire(Block p_147756_1_, int p_147756_2_, int p_147756_3_, int p_147756_4_) { return rb.renderBlockTripWire(p_147756_1_, p_147756_2_, p_147756_3_, p_147756_4_); } + @Override public boolean renderBlockFire(BlockFire p_147801_1_, int p_147801_2_, int p_147801_3_, int p_147801_4_) { return rb.renderBlockFire(p_147801_1_, p_147801_2_, p_147801_3_, p_147801_4_); } + @Override public boolean renderBlockRedstoneWire(Block p_147788_1_, int p_147788_2_, int p_147788_3_, int p_147788_4_) { return rb.renderBlockRedstoneWire(p_147788_1_, p_147788_2_, p_147788_3_, p_147788_4_); } + @Override public boolean renderBlockMinecartTrack(BlockRailBase p_147766_1_, int p_147766_2_, int p_147766_3_, int p_147766_4_) { return rb.renderBlockMinecartTrack(p_147766_1_, p_147766_2_, p_147766_3_, p_147766_4_); } + @Override public boolean renderBlockLadder(Block p_147794_1_, int p_147794_2_, int p_147794_3_, int p_147794_4_) { return rb.renderBlockLadder(p_147794_1_, p_147794_2_, p_147794_3_, p_147794_4_); } + @Override public boolean renderBlockVine(Block p_147726_1_, int p_147726_2_, int p_147726_3_, int p_147726_4_) { return rb.renderBlockVine(p_147726_1_, p_147726_2_, p_147726_3_, p_147726_4_); } + @Override public boolean renderBlockStainedGlassPane(Block p_147733_1_, int p_147733_2_, int p_147733_3_, int p_147733_4_) { return rb.renderBlockStainedGlassPane(p_147733_1_, p_147733_2_, p_147733_3_, p_147733_4_); } + @Override public boolean renderBlockPane(BlockPane p_147767_1_, int p_147767_2_, int p_147767_3_, int p_147767_4_) { return rb.renderBlockPane(p_147767_1_, p_147767_2_, p_147767_3_, p_147767_4_); } + @Override public boolean renderCrossedSquares(Block p_147746_1_, int p_147746_2_, int p_147746_3_, int p_147746_4_) { return rb.renderCrossedSquares(p_147746_1_, p_147746_2_, p_147746_3_, p_147746_4_); } + @Override public boolean renderBlockDoublePlant(BlockDoublePlant p_147774_1_, int p_147774_2_, int p_147774_3_, int p_147774_4_) { return rb.renderBlockDoublePlant(p_147774_1_, p_147774_2_, p_147774_3_, p_147774_4_); } + @Override public boolean renderBlockStem(Block p_147724_1_, int p_147724_2_, int p_147724_3_, int p_147724_4_) { return rb.renderBlockStem(p_147724_1_, p_147724_2_, p_147724_3_, p_147724_4_); } + @Override public boolean renderBlockCrops(Block p_147796_1_, int p_147796_2_, int p_147796_3_, int p_147796_4_) { return rb.renderBlockCrops(p_147796_1_, p_147796_2_, p_147796_3_, p_147796_4_); } + @Override public void renderTorchAtAngle(Block p_147747_1_, double p_147747_2_, double p_147747_4_, double p_147747_6_, double p_147747_8_, double p_147747_10_, int p_147747_12_) { rb.renderTorchAtAngle(p_147747_1_, p_147747_2_, p_147747_4_, p_147747_6_, p_147747_8_, p_147747_10_, p_147747_12_); } + @Override public void drawCrossedSquares(IIcon p_147765_1_, double p_147765_2_, double p_147765_4_, double p_147765_6_, float p_147765_8_) { rb.drawCrossedSquares(p_147765_1_, p_147765_2_, p_147765_4_, p_147765_6_, p_147765_8_); } + @Override public void renderBlockStemSmall(Block p_147730_1_, int p_147730_2_, double p_147730_3_, double p_147730_5_, double p_147730_7_, double p_147730_9_) { rb.renderBlockStemSmall(p_147730_1_, p_147730_2_, p_147730_3_, p_147730_5_, p_147730_7_, p_147730_9_); } + @Override public boolean renderBlockLilyPad(Block p_147783_1_, int p_147783_2_, int p_147783_3_, int p_147783_4_) { return rb.renderBlockLilyPad(p_147783_1_, p_147783_2_, p_147783_3_, p_147783_4_); } + @Override public void renderBlockStemBig(BlockStem p_147740_1_, int p_147740_2_, int p_147740_3_, double p_147740_4_, double p_147740_6_, double p_147740_8_, double p_147740_10_) { rb.renderBlockStemBig(p_147740_1_, p_147740_2_, p_147740_3_, p_147740_4_, p_147740_6_, p_147740_8_, p_147740_10_); } + @Override public void renderBlockCropsImpl(Block p_147795_1_, int p_147795_2_, double p_147795_3_, double p_147795_5_, double p_147795_7_) { rb.renderBlockCropsImpl(p_147795_1_, p_147795_2_, p_147795_3_, p_147795_5_, p_147795_7_); } + @Override public boolean renderBlockLiquid(Block p_147721_1_, int p_147721_2_, int p_147721_3_, int p_147721_4_) { return rb.renderBlockLiquid(p_147721_1_, p_147721_2_, p_147721_3_, p_147721_4_); } + @Override public float getLiquidHeight(int p_147729_1_, int p_147729_2_, int p_147729_3_, Material p_147729_4_) { return rb.getLiquidHeight(p_147729_1_, p_147729_2_, p_147729_3_, p_147729_4_); } + @Override public void renderBlockSandFalling(Block p_147749_1_, World p_147749_2_, int p_147749_3_, int p_147749_4_, int p_147749_5_, int p_147749_6_) { rb.renderBlockSandFalling(p_147749_1_, p_147749_2_, p_147749_3_, p_147749_4_, p_147749_5_, p_147749_6_); } + @Override public boolean renderBlockLog(Block p_147742_1_, int p_147742_2_, int p_147742_3_, int p_147742_4_) { return rb.renderBlockLog(p_147742_1_, p_147742_2_, p_147742_3_, p_147742_4_); } + @Override public boolean renderBlockQuartz(Block p_147779_1_, int p_147779_2_, int p_147779_3_, int p_147779_4_) { return rb.renderBlockQuartz(p_147779_1_, p_147779_2_, p_147779_3_, p_147779_4_); } + @Override public boolean renderStandardBlockWithAmbientOcclusion(Block p_147751_1_, int p_147751_2_, int p_147751_3_, int p_147751_4_, float p_147751_5_, float p_147751_6_, float p_147751_7_) { return rb.renderStandardBlockWithAmbientOcclusion(p_147751_1_, p_147751_2_, p_147751_3_, p_147751_4_, p_147751_5_, p_147751_6_, p_147751_7_); } + @Override public boolean renderStandardBlockWithAmbientOcclusionPartial(Block p_147808_1_, int p_147808_2_, int p_147808_3_, int p_147808_4_, float p_147808_5_, float p_147808_6_, float p_147808_7_) { return rb.renderStandardBlockWithAmbientOcclusionPartial(p_147808_1_, p_147808_2_, p_147808_3_, p_147808_4_, p_147808_5_, p_147808_6_, p_147808_7_); } + @Override public int getAoBrightness(int p_147778_1_, int p_147778_2_, int p_147778_3_, int p_147778_4_) { return rb.getAoBrightness(p_147778_1_, p_147778_2_, p_147778_3_, p_147778_4_); } + @Override public int mixAoBrightness(int p_147727_1_, int p_147727_2_, int p_147727_3_, int p_147727_4_, double p_147727_5_, double p_147727_7_, double p_147727_9_, double p_147727_11_) { return rb.mixAoBrightness(p_147727_1_, p_147727_2_, p_147727_3_, p_147727_4_, p_147727_5_, p_147727_7_, p_147727_9_, p_147727_11_); } + @Override public boolean renderStandardBlockWithColorMultiplier(Block p_147736_1_, int p_147736_2_, int p_147736_3_, int p_147736_4_, float p_147736_5_, float p_147736_6_, float p_147736_7_) { return rb.renderStandardBlockWithColorMultiplier(p_147736_1_, p_147736_2_, p_147736_3_, p_147736_4_, p_147736_5_, p_147736_6_, p_147736_7_); } + @Override public boolean renderBlockCocoa(BlockCocoa p_147772_1_, int p_147772_2_, int p_147772_3_, int p_147772_4_) { return rb.renderBlockCocoa(p_147772_1_, p_147772_2_, p_147772_3_, p_147772_4_); } + @Override public boolean renderBlockBeacon(BlockBeacon p_147797_1_, int p_147797_2_, int p_147797_3_, int p_147797_4_) { return rb.renderBlockBeacon(p_147797_1_, p_147797_2_, p_147797_3_, p_147797_4_); } + @Override public boolean renderBlockCactus(Block p_147755_1_, int p_147755_2_, int p_147755_3_, int p_147755_4_) { return rb.renderBlockCactus(p_147755_1_, p_147755_2_, p_147755_3_, p_147755_4_); } + @Override public boolean renderBlockCactusImpl(Block p_147754_1_, int p_147754_2_, int p_147754_3_, int p_147754_4_, float p_147754_5_, float p_147754_6_, float p_147754_7_) { return rb.renderBlockCactusImpl(p_147754_1_, p_147754_2_, p_147754_3_, p_147754_4_, p_147754_5_, p_147754_6_, p_147754_7_); } + @Override public boolean renderBlockFence(BlockFence p_147735_1_, int p_147735_2_, int p_147735_3_, int p_147735_4_) { return rb.renderBlockFence(p_147735_1_, p_147735_2_, p_147735_3_, p_147735_4_); } + @Override public boolean renderBlockWall(BlockWall p_147807_1_, int p_147807_2_, int p_147807_3_, int p_147807_4_) { return rb.renderBlockWall(p_147807_1_, p_147807_2_, p_147807_3_, p_147807_4_); } + @Override public boolean renderBlockDragonEgg(BlockDragonEgg p_147802_1_, int p_147802_2_, int p_147802_3_, int p_147802_4_) { return rb.renderBlockDragonEgg(p_147802_1_, p_147802_2_, p_147802_3_, p_147802_4_); } + @Override public boolean renderBlockFenceGate(BlockFenceGate p_147776_1_, int p_147776_2_, int p_147776_3_, int p_147776_4_) { return rb.renderBlockFenceGate(p_147776_1_, p_147776_2_, p_147776_3_, p_147776_4_); } + @Override public boolean renderBlockHopper(BlockHopper p_147803_1_, int p_147803_2_, int p_147803_3_, int p_147803_4_) { return rb.renderBlockHopper(p_147803_1_, p_147803_2_, p_147803_3_, p_147803_4_); } + @Override public boolean renderBlockHopperMetadata(BlockHopper p_147799_1_, int p_147799_2_, int p_147799_3_, int p_147799_4_, int p_147799_5_, boolean p_147799_6_) { return rb.renderBlockHopperMetadata(p_147799_1_, p_147799_2_, p_147799_3_, p_147799_4_, p_147799_5_, p_147799_6_); } + @Override public boolean renderBlockStairs(BlockStairs p_147722_1_, int p_147722_2_, int p_147722_3_, int p_147722_4_) { return rb.renderBlockStairs(p_147722_1_, p_147722_2_, p_147722_3_, p_147722_4_); } + @Override public boolean renderBlockDoor(Block p_147760_1_, int p_147760_2_, int p_147760_3_, int p_147760_4_) { return rb.renderBlockDoor(p_147760_1_, p_147760_2_, p_147760_3_, p_147760_4_); } + @Override public void renderFaceYNeg(Block p_147768_1_, double p_147768_2_, double p_147768_4_, double p_147768_6_, IIcon p_147768_8_) { rb.renderFaceYNeg(p_147768_1_, p_147768_2_, p_147768_4_, p_147768_6_, p_147768_8_); } + @Override public void renderFaceYPos(Block p_147806_1_, double p_147806_2_, double p_147806_4_, double p_147806_6_, IIcon p_147806_8_) { rb.renderFaceYPos(p_147806_1_, p_147806_2_, p_147806_4_, p_147806_6_, p_147806_8_); } + @Override public void renderFaceZNeg(Block p_147761_1_, double p_147761_2_, double p_147761_4_, double p_147761_6_, IIcon p_147761_8_) { rb.renderFaceZNeg(p_147761_1_, p_147761_2_, p_147761_4_, p_147761_6_, p_147761_8_); } + @Override public void renderFaceZPos(Block p_147734_1_, double p_147734_2_, double p_147734_4_, double p_147734_6_, IIcon p_147734_8_) { rb.renderFaceZPos(p_147734_1_, p_147734_2_, p_147734_4_, p_147734_6_, p_147734_8_); } + @Override public void renderFaceXNeg(Block p_147798_1_, double p_147798_2_, double p_147798_4_, double p_147798_6_, IIcon p_147798_8_) { rb.renderFaceXNeg(p_147798_1_, p_147798_2_, p_147798_4_, p_147798_6_, p_147798_8_); } + @Override public void renderFaceXPos(Block p_147764_1_, double p_147764_2_, double p_147764_4_, double p_147764_6_, IIcon p_147764_8_) { rb.renderFaceXPos(p_147764_1_, p_147764_2_, p_147764_4_, p_147764_6_, p_147764_8_); } + @Override public void renderBlockAsItem(Block p_147800_1_, int p_147800_2_, float p_147800_3_) { rb.renderBlockAsItem(p_147800_1_, p_147800_2_, p_147800_3_); } + @Override public IIcon getBlockIcon(Block p_147793_1_, IBlockAccess p_147793_2_, int p_147793_3_, int p_147793_4_, int p_147793_5_, int p_147793_6_) { return rb.getBlockIcon(p_147793_1_, p_147793_2_, p_147793_3_, p_147793_4_, p_147793_5_, p_147793_6_); } + @Override public IIcon getBlockIconFromSideAndMetadata(Block block, int side, int meta) { return rb.getBlockIconFromSideAndMetadata(block, side, meta); } + @Override public IIcon getBlockIconFromSide(Block block, int side) { return rb.getBlockIconFromSide(block, side); } + @Override public IIcon getBlockIcon(Block block) { return rb.getBlockIcon(block); } + @Override public IIcon getIconSafe(IIcon icon) { return rb.getIconSafe(icon); } +} diff --git a/src/main/java/com/hbm/render/util/RenderScreenOverlay.java b/src/main/java/com/hbm/render/util/RenderScreenOverlay.java index 512eb41af..23c8a87b5 100644 --- a/src/main/java/com/hbm/render/util/RenderScreenOverlay.java +++ b/src/main/java/com/hbm/render/util/RenderScreenOverlay.java @@ -6,6 +6,7 @@ import org.lwjgl.opengl.GL12; import com.hbm.extprop.HbmPlayerProps; import com.hbm.interfaces.Spaghetti; import com.hbm.interfaces.Untested; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.RefStrings; import net.minecraft.client.Minecraft; @@ -352,37 +353,4 @@ public class RenderScreenOverlay { GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } - - public enum Crosshair { - - NONE(0, 0, 0), - CROSS(1, 55, 16), - CIRCLE(19, 55, 16), - SEMI(37, 55, 16), - KRUCK(55, 55, 16), - DUAL(1, 73, 16), - SPLIT(19, 73, 16), - CLASSIC(37, 73, 16), - BOX(55, 73, 16), - L_CROSS(0, 90, 32), - L_KRUCK(32, 90, 32), - L_CLASSIC(64, 90, 32), - L_CIRCLE(96, 90, 32), - L_SPLIT(0, 122, 32), - L_ARROWS(32, 122, 32), - L_BOX(64, 122, 32), - L_CIRCUMFLEX(96, 122, 32), - L_RAD(0, 154, 32); - - public int x; - public int y; - public int size; - - private Crosshair(int x, int y, int size) { - this.x = x; - this.y = y; - this.size = size; - } - } - } diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 691066ac7..0a418577b 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -2,18 +2,26 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; -public interface IControlReceiverFilter extends IControlReceiver { +public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); + /* + default ModulePatternMatcher getMatcher(){ + + }*/ + @Override - public default void receiveControl(NBTTagCompound data) { + default void receiveControl(NBTTagCompound data) { if(data.hasKey("slot")) { setFilterContents(data); } @@ -23,12 +31,72 @@ public interface IControlReceiverFilter extends IControlReceiver { * Expects the implementor to be a tile entity and an IInventory * @param nbt */ - public default void setFilterContents(NBTTagCompound nbt) { + default void setFilterContents(NBTTagCompound nbt) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; int slot = nbt.getInteger("slot"); - inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); + NBTTagCompound stack = nbt.getCompoundTag("stack"); + ItemStack item = ItemStack.loadItemStackFromNBT(stack); + inv.setInventorySlotContents(slot, item); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } + /** + * Used for the copy tool + * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE + */ + int[] getFilterSlots(); + + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z) { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + + return nbt; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + TileEntity tile = (TileEntity) this; + IInventory inv = (IInventory) this; + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if(listSize > 0) { + int count = 0; + + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + + if (loadedStack != null && index < listSize && (slot < getFilterSlots()[1] || router)) { + inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); + } + } + count++; + } + } + } + + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + return new String[] { "copytool.filter" }; + } } diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java new file mode 100644 index 000000000..c7606e64c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -0,0 +1,70 @@ +package com.hbm.tileentity; + +import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluid.IFluidUser; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.BobMathUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.ArrayList; + +public interface IFluidCopiable extends ICopiable { + + /** + * @return First type for the normal paste, second type for the alt paste, + * none if there is no alt paste support + */ + default int[] getFluidIDToCopy() { + IFluidUser tile = (IFluidUser) this; + ArrayList types = new ArrayList<>(); + + for(FluidTank tank : tile.getAllTanks()) { + if(!tank.getTankType().hasNoID()) + types.add(tank.getTankType().getID()); + } + + return BobMathUtil.intCollectionToArray(types); + } + + default FluidTank getTankToPaste() { + TileEntity te = (TileEntity) this; + if(te instanceof IFluidStandardTransceiver) { + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + return null; + } + + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) tag.setIntArray("fluidID", getFluidIDToCopy()); + return tag; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(getTankToPaste() != null) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0 && index < ids.length) { + int id = ids[index]; + getTankToPaste().setTankType(Fluids.fromID(id)); + } + } + } + + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getFluidIDToCopy(); + String[] names = new String[ids.length]; + for(int i = 0; i < ids.length; i++) { + names[i] = Fluids.fromID(ids[i]).getUnlocalizedName(); + } + return names; + } +} diff --git a/src/main/java/com/hbm/tileentity/IGUIProvider.java b/src/main/java/com/hbm/tileentity/IGUIProvider.java index f707f3d61..54fd42935 100644 --- a/src/main/java/com/hbm/tileentity/IGUIProvider.java +++ b/src/main/java/com/hbm/tileentity/IGUIProvider.java @@ -1,8 +1,5 @@ package com.hbm.tileentity; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -10,6 +7,5 @@ import net.minecraft.world.World; public interface IGUIProvider { public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z); - @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z); + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z); } diff --git a/src/main/java/com/hbm/tileentity/IMetalCopiable.java b/src/main/java/com/hbm/tileentity/IMetalCopiable.java new file mode 100644 index 000000000..5720608c3 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IMetalCopiable.java @@ -0,0 +1,30 @@ +package com.hbm.tileentity; + +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.material.Mats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public interface IMetalCopiable extends ICopiable { + + int[] getMatsToCopy(); + + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getMatsToCopy().length > 0) tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getMatsToCopy(); + String[] names = new String[ids.length]; + for(int i = 0; i < ids.length; i++) names[i] = Mats.matById.get(ids[i]).getUnlocalizedName(); + return names; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { }; +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 7dc97bf85..a33860c56 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,6 +14,7 @@ import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -63,6 +64,7 @@ public class TileMappings { put(TileEntityDecoSteelPoles.class, "tileentity_steelpoles"); put(TileEntityDecoPoleTop.class, "tileentity_poletop"); put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); + put(TileEntityScaffoldDynamic.class, "tileentity_scaffold_dynamic"); put(TileEntityMachineBattery.class, "tileentity_battery"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner"); @@ -340,6 +342,7 @@ public class TileMappings { put(TileEntityMachineCatalyticReformer.class, "tileentity_catalytic_reformer"); put(TileEntityMachineHydrotreater.class, "tileentity_hydrotreater"); put(TileEntityMachineCoker.class, "tileentity_coker"); + put(TileEntityMachinePyroOven.class, "tileentity_pyrooven"); put(TileEntityChimneyBrick.class, "tileentity_chimney_brick"); put(TileEntityChimneyIndustrial.class, "tileentity_chimney_industrial"); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index 0eeae10f0..2955f12f4 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -290,7 +289,7 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBombMulti(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index e52926b0d..e573bd5fe 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -31,7 +31,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -624,7 +623,7 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCompactLauncher(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index ea1974511..997cd1f07 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; import com.hbm.handler.CompatHandler; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.Optional; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; @@ -43,7 +44,6 @@ import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -56,7 +56,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent { +public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { /** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */ public static final HashMap> missiles = new HashMap(); @@ -282,7 +282,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILaunchPadLarge(player.inventory, this); } @@ -555,4 +555,14 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl } throw new NoSuchMethodException(); } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{tanks[0].getTankType().getID(), tanks[1].getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java index cdfa9eca8..8137fa469 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java @@ -21,7 +21,6 @@ import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -204,7 +203,7 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILaunchPadRusted(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 84dc3561d..0d1abdf7b 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -35,7 +35,6 @@ import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -723,7 +722,7 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineLaunchTable(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index 748bbfd3f..f88b7070b 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -12,7 +12,6 @@ import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -194,7 +193,7 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFstbmb(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 39a3f4e54..5fdaa194d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -213,7 +212,7 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeBoy(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index e52ad8dc1..e245c8669 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -446,7 +445,7 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeCustom(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index 9209af0e7..b843bdb3e 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -222,7 +221,7 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFleija(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 31e4b24f8..8eb136372 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -275,7 +274,7 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeGadget(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 0c208e92e..021789895 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -249,7 +248,7 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeMan(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index eef1a2dc2..1d924acd1 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -234,7 +233,7 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeMike(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 382858356..099807c3a 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -223,7 +222,7 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeN2(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index 3fcc4d460..b3fa2dd11 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -226,7 +225,7 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukePrototype(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 5535654c7..45f5ccbf1 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -220,7 +219,7 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeSolinium(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index a604b9271..f01665074 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -232,7 +231,7 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeTsar(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java index dfb63df66..b99ea830a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java @@ -16,7 +16,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -219,7 +218,7 @@ public class TileEntityAshpit extends TileEntityMachineBase implements IGUIProvi @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAshpit(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index e4daad9e7..eae8f56cf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -15,6 +15,7 @@ import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -38,7 +39,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IBufPacketReceiver { +public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IBufPacketReceiver, IFluidCopiable{ public long power; private int turnTimer; @@ -369,4 +370,9 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr data.setDouble(CompatEnergyControl.D_OUTPUT_MB, info[1]); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, info[2]); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index 48a322a3b..f47765018 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -7,7 +7,9 @@ import com.google.gson.stream.JsonWriter; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.saveddata.TomSaveData; -import com.hbm.tileentity.*; +import com.hbm.tileentity.IFluidCopiable; +import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; import api.hbm.fluid.IFluidStandardTransceiver; @@ -16,7 +18,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; -public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, IInfoProviderEC, IConfigurableMachine, IBufPacketReceiver { +public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, IInfoProviderEC, IConfigurableMachine, IBufPacketReceiver, IFluidCopiable { public int age = 0; public FluidTank[] tanks; @@ -148,4 +150,9 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, throughput); data.setDouble(CompatEnergyControl.D_OUTPUT_MB, throughput); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java index a84b55fdc..767575fa9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java @@ -27,7 +27,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -364,7 +363,7 @@ public class TileEntityCore extends TileEntityMachineBase implements IGUIProvide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICore(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index f0d9d3080..36601b98f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -24,7 +24,6 @@ import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -339,7 +338,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreEmitter(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java index af15165d2..5380702cf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java @@ -17,7 +17,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -193,7 +192,7 @@ public class TileEntityCoreInjector extends TileEntityMachineBase implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreInjector(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java index 077c94b8a..c85a206c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java @@ -21,7 +21,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -195,7 +194,7 @@ public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreReceiver(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java index bb80dea66..2647d4c6e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java @@ -19,7 +19,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -232,7 +231,7 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreStabilizer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 3e2450404..a799ab1b6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -22,7 +22,9 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IMetalCopiable; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; @@ -31,7 +33,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -45,7 +46,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine { +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine, IMetalCopiable { public int heat; public int progress; @@ -417,7 +418,6 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro //if there's no materials in there at all, don't smelt if(materials.isEmpty()) return false; - CrucibleRecipe recipe = getLoadedRecipe(); //needs to be true, will always be true if there's no recipe loaded @@ -519,7 +519,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrucible(player.inventory, this); } @@ -601,4 +601,18 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + + for (MaterialStack stack : recipeStack) { + types.add(stack.material.id); + } + for (MaterialStack stack : wasteStack) { + types.add(stack.material.id); + } + return BobMathUtil.intCollectionToArray(types); + } + } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java index f31e1060c..4ea41461d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java @@ -34,7 +34,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -562,7 +561,7 @@ public class TileEntityCustomMachine extends TileEntityMachinePolluting implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(this.config == null) return null; return new GUIMachineCustom(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index 26a075bda..50a277d3a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -10,7 +11,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver { +public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IFluidCopiable { public long power = 0; public FluidTank[] tanks; @@ -125,4 +126,9 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java index 9eacd6ed7..ea816adae 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java @@ -18,7 +18,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -266,7 +265,7 @@ public class TileEntityDiFurnace extends TileEntityMachinePolluting implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDiFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index 3934be49c..8481f713a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -14,7 +14,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -222,7 +221,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineDiFurnaceRTG(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 40ce00a0e..1fd7f77bb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -24,10 +24,8 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import com.hbm.util.I18nUtil; @@ -40,7 +38,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -51,7 +48,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable, IMetalCopiable { public long power; public static final long maxPower = 20000000; @@ -509,7 +506,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0) return new GUIElectrolyserFluid(player.inventory, this); return new GUIElectrolyserMetal(player.inventory, this); } @@ -557,4 +554,50 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) + tag.setIntArray("fluidID", getFluidIDToCopy()); + if(getMatsToCopy().length > 0) + tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList names = new ArrayList<>(); + int[] fluidIDs = getFluidIDToCopy(); + int[] matIDs = getMatsToCopy(); + + for (int fluidID : fluidIDs) { + names.add(Fluids.fromID(fluidID).getUnlocalizedName()); + } + for (int matID : matIDs) { + names.add(Mats.matById.get(matID).getUnlocalizedName()); + } + + return names.toArray(new String[0]); + } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + if(leftStack != null) types.add(leftStack.material.id); + + if(rightStack != null) types.add(rightStack.material.id); + + return BobMathUtil.intCollectionToArray(types); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java index 5867f36d2..e7f1e3858 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java @@ -26,7 +26,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -313,7 +312,7 @@ public class TileEntityFEL extends TileEntityMachineBase implements IEnergyRecei @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFEL(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 91d89b53e..19fcda459 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -17,7 +17,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -489,7 +488,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIForceField(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java index 9d522c1c0..c90d9ec0b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java @@ -1,10 +1,12 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.material.Mats.MaterialStack; import api.hbm.block.ICrucibleAcceptor; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -19,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection; * @author hbm * */ -public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor { +public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor, ICopiable { public NTMMaterial type; protected NTMMaterial lastType; @@ -142,4 +144,16 @@ public abstract class TileEntityFoundryBase extends TileEntity implements ICruci public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return standardAdd(world, x, y, z, side, stack); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(type != null) nbt.setIntArray("matFilter", new int[]{ type.id }); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index 8c795202b..a52ce34f3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -9,13 +9,16 @@ import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFoundryOutlet extends TileEntityFoundryBase { +import java.util.ArrayList; + +public class TileEntityFoundryOutlet extends TileEntityFoundryBase{ public NTMMaterial filter = null; public NTMMaterial lastFilter = null; @@ -121,4 +124,39 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase { nbt.setBoolean("invertFilter", this.invertFilter); nbt.setShort("filter", this.filter == null ? -1 : (short) this.filter.id); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + + nbt.setBoolean("invert", this.invertRedstone); + nbt.setBoolean("invertFilter", this.invertFilter); + if(filter != null){ + nbt.setIntArray("matFilter", new int[]{ filter.id }); + } + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + if(nbt.hasKey("invert")) this.invertRedstone = nbt.getBoolean("invert"); + if(nbt.hasKey("invertFilter")) this.invertFilter = nbt.getBoolean("invertFilter"); + if(nbt.hasKey("matFilter")) { + int[] ids = nbt.getIntArray("matFilter"); + if(ids.length > 0 && index < ids.length) + this.filter = Mats.matById.get(ids[index]); + } + + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList info = new ArrayList<>(); + info.add("copytool.invertRedstone"); + info.add("copytool.invertFilter"); + if (filter != null) info.add(filter.getUnlocalizedName()); + return info.toArray(new String[0]); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java index be440a25c..2a87235c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -228,7 +227,7 @@ public class TileEntityFurnaceBrick extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceBrick(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java index 2ef8e189e..38dcca45f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIFurnaceCombo; import com.hbm.inventory.recipes.CombinationRecipes; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.Tuple.Pair; @@ -19,7 +20,6 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -30,7 +30,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider { +public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; @@ -245,7 +245,7 @@ public class TileEntityFurnaceCombination extends TileEntityMachinePolluting imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceCombo(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index 42d67d723..7bac33241 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -18,7 +18,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -218,7 +217,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceIron(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java index c67275db0..73a470859 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java @@ -15,7 +15,6 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -255,7 +254,7 @@ public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceSteel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 89fd43fe1..c2c737fda 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -28,7 +28,6 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -913,7 +912,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIHadron(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index be1fb7fd6..7485772a9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -20,6 +20,7 @@ import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -36,7 +37,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; @@ -59,12 +60,12 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPa } ByteBuf buf = new PacketBuffer(Unpooled.buffer()); - + @Override public void updateEntity() { if(!worldObj.isRemote) { - + if(!this.hasExploded) { this.setupTanks(); this.updateConnections(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index 65c2765df..ac1cb9641 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -15,6 +15,7 @@ import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -30,7 +31,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; -public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java index c58b395e0..616fc978a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.IConfigurableMachine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; @@ -76,7 +75,7 @@ public class TileEntityHeaterFirebox extends TileEntityFireboxBase implements IC @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(texture == null) texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_firebox.png"); return new GUIFirebox(player.inventory, this, texture); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 3dee8b92a..ea08a403f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -9,6 +9,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.gui.GUIHeaterHeatex; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -27,7 +28,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, IFluidStandardTransceiver, IGUIProvider, IControlReceiver { +public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, IFluidStandardTransceiver, IGUIProvider, IControlReceiver, IFluidCopiable { public FluidTank[] tanks; public int amountToCool = 1; @@ -194,7 +195,7 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIHeaterHeatex(player.inventory, this); } @@ -235,4 +236,23 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("toCool", amountToCool); + if(getFluidIDToCopy().length > 0) + nbt.setIntArray("fluidID", getFluidIDToCopy()); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[index]; + tanks[0].setTankType(Fluids.fromID(id)); + } + if(nbt.hasKey("toCool")) amountToCool = nbt.getInteger("toCool"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 0d19a14bc..e236a9090 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -8,6 +8,7 @@ import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIOilburner; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.fauxpointtwelve.DirPos; @@ -17,14 +18,13 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver { +public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver, IFluidCopiable { public boolean isOn = false; public FluidTank tank; @@ -156,7 +156,7 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIOilburner(player.inventory, this); } @@ -217,4 +217,21 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem public FluidTank[] getSendingTanks() { return this.getSmokeTanks(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setInteger("burnRate", setting); + tag.setBoolean("isOn", isOn); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java index 2deec61e8..3453c2c19 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IConfigurableMachine; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; @@ -100,7 +99,7 @@ public class TileEntityHeaterOven extends TileEntityFireboxBase implements IConf @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(texture == null) texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_heating_oven.png"); return new GUIFirebox(player.inventory, this, texture); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java index 62d4ae6a7..945b758c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java @@ -12,6 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemICFPellet; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -29,7 +30,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -39,7 +39,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long laser; public long maxLaser; @@ -279,7 +279,7 @@ public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIICF(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java index 9c6eef7ad..ae353b4aa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java @@ -12,6 +12,7 @@ import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemICFPellet; import com.hbm.items.machine.ItemICFPellet.EnumICFFuel; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -19,14 +20,13 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider { +public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int muon; @@ -182,7 +182,7 @@ public class TileEntityICFPress extends TileEntityMachineBase implements IFluidS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIICFPress(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 20d4be34d..30ea58b03 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -24,6 +24,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -41,7 +42,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -52,7 +52,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 10000000; @@ -547,7 +547,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIITER(player.inventory, this); } @@ -652,4 +652,9 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } throw new NoSuchMethodException(); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 5e65220a5..702589b42 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -11,7 +11,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public abstract class TileEntityLockableBase extends TileEntity { - + protected int lock; private boolean isLocked = false; protected double lockMod = 0.1D; @@ -19,107 +19,94 @@ public abstract class TileEntityLockableBase extends TileEntity { public boolean isLocked() { return isLocked; } - + public void lock() { - if(lock == 0) { MainRegistry.logger.error("A block has been set to locked state before setting pins, this should not happen and may cause errors! " + this.toString()); } - isLocked = true; } - - public void setPins(int pins) { - lock = pins; - } - - public int getPins() { - return lock; - } - - public void setMod(double mod) { - lockMod = mod; - } - - public double getMod() { - return lockMod; - } - + + public void setPins(int pins) { lock = pins; } + public int getPins() { return lock; } + public void setMod(double mod) { lockMod = mod; } + public double getMod() { return lockMod; } + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - + lock = nbt.getInteger("lock"); isLocked = nbt.getBoolean("isLocked"); lockMod = nbt.getDouble("lockMod"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - + nbt.setInteger("lock", lock); nbt.setBoolean("isLocked", isLocked); nbt.setDouble("lockMod", lockMod); } public boolean canAccess(EntityPlayer player) { - + if(!isLocked) { return true; } else { - if(player == null) return false; + if(player == null) + return false; ItemStack stack = player.getHeldItem(); - - if(stack != null && stack.getItem() instanceof ItemKey && - ItemKey.getPins(stack) == this.lock) { - worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + + if(stack != null && stack.getItem() instanceof ItemKey && ItemKey.getPins(stack) == this.lock) { + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); return true; } - + if(stack != null && stack.getItem() == ModItems.key_red) { - worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); return true; } - + return tryPick(player); } } - + private boolean tryPick(EntityPlayer player) { boolean canPick = false; ItemStack stack = player.getHeldItem(); double chanceOfSuccess = this.lockMod * 100; - - if(stack != null && stack.getItem() == ModItems.pin && player.inventory.hasItem(ModItems.screwdriver)) { - + + if(stack != null && stack.getItem() == ModItems.pin && (player.inventory.hasItem(ModItems.screwdriver) || player.inventory.hasItem(ModItems.screwdriver_desh))) { + stack.stackSize--; canPick = true; } - - if(stack != null && stack.getItem() == ModItems.screwdriver && player.inventory.hasItem(ModItems.pin)) { - + + if(stack != null && (stack.getItem() == ModItems.screwdriver || stack.getItem() == ModItems.screwdriver_desh) && player.inventory.hasItem(ModItems.pin)) { + player.inventory.consumeInventoryItem(ModItems.pin); player.inventoryContainer.detectAndSendChanges(); canPick = true; } - + if(canPick) { - + if(ArmorUtil.checkArmorPiece(player, ModItems.jackt, 2) || ArmorUtil.checkArmorPiece(player, ModItems.jackt2, 2)) chanceOfSuccess *= 100D; - + double rand = player.worldObj.rand.nextDouble() * 100; - + if(chanceOfSuccess > rand) { - worldObj.playSoundAtEntity(player, "hbm:item.pinUnlock", 1.0F, 1.0F); + worldObj.playSoundAtEntity(player, "hbm:item.pinUnlock", 1.0F, 1.0F); return true; } - worldObj.playSoundAtEntity(player, "hbm:item.pinBreak", 1.0F, 0.8F + player.worldObj.rand.nextFloat() * 0.2F); + worldObj.playSoundAtEntity(player, "hbm:item.pinBreak", 1.0F, 0.8F + player.worldObj.rand.nextFloat() * 0.2F); } - + return false; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java index a01b3b6f6..7777ac492 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.ModBlocks; -import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -27,12 +26,7 @@ public class TileEntityMachineAmgen extends TileEntityLoadedBase implements IEne Block block = worldObj.getBlock(xCoord, yCoord, zCoord); - if(block == ModBlocks.machine_amgen) { - float rad = ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord); - this.output += rad; - ChunkRadiationManager.proxy.decrementRad(worldObj, xCoord, yCoord, zCoord, 5F); - - } else if(block == ModBlocks.machine_geo) { + if(block == ModBlocks.machine_geo) { this.checkGeoInteraction(xCoord, yCoord + 1, zCoord); this.checkGeoInteraction(xCoord, yCoord - 1, zCoord); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index bff0afcdb..e2090764d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -18,7 +18,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -392,7 +391,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index c1e92720a..874a815ef 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -36,7 +36,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -549,7 +548,7 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcFurnaceLarge(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 5eb5af98f..82c0d7547 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -15,11 +15,8 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -30,7 +27,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -41,7 +37,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -339,7 +335,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcWelder(player.inventory, this); } @@ -392,4 +388,9 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index c16320387..9755049d3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -264,7 +263,7 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase i @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineAssembler(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 50df07beb..54045989e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIAssemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -21,7 +22,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -30,7 +30,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public AssemblerArm[] arms; @@ -430,7 +430,7 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAssemfac(player.inventory, this); } @@ -462,4 +462,9 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index b34010cea..a9bc5fc86 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -15,12 +15,10 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; @@ -187,7 +185,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen if(i > 9 && i < 19) { ItemStack filter = slots[i - 10]; - if(filter == null) return true; + if(filter == null || matcher.modes[i - 10] == null || matcher.modes[i - 10].isEmpty()) return true; return !matcher.isValidForFilter(filter, i - 10, stack); } @@ -216,7 +214,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen List validSlots = new ArrayList(); for(int i = 0; i < 9; i++) { ItemStack filter = slots[i]; - if(filter == null) continue; + if(filter == null || matcher.modes[i] == null || matcher.modes[i].isEmpty()) continue; if(matcher.isValidForFilter(filter, i, stack)) { validSlots.add(i + 10); @@ -339,7 +337,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAutocrafter(player.inventory, this); } @@ -350,13 +348,19 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override public void setFilterContents(NBTTagCompound nbt) { - TileEntity tile = (TileEntity) this; - IInventory inv = (IInventory) this; + TileEntity tile = this; + IInventory inv = this; int slot = nbt.getInteger("slot"); if(slot > 8) return; - inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); - nextMode(slot); + NBTTagCompound stack = nbt.getCompoundTag("stack"); + ItemStack item = ItemStack.loadItemStackFromNBT(stack); + inv.setInventorySlotContents(slot, item); + matcher.initPatternSmart(getWorldObj(), item, slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); updateTemplateGrid(); } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 1bb9b4b12..6fc25d3b7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.ModDamageSource; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; @@ -30,7 +31,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; -public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardReceiver { +public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardReceiver, IFluidCopiable { public static final HashSet acceptedFuels = new HashSet(); @@ -346,4 +347,8 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public double getMaxRenderDistanceSquared() { return 65536.0D; } + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index 430bca4db..ebcb7381b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -27,7 +27,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -345,7 +344,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCentrifuge(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index 329947014..c1f38d691 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIChemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -22,7 +23,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -32,7 +32,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider { +public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider, IFluidCopiable { float rotSpeed; public float rot; @@ -357,7 +357,7 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIChemfac(player.inventory, this); } @@ -389,4 +389,9 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase imp if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index 5febdcbe3..256b98e1f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -30,7 +30,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -576,7 +575,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemplant(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index da52bb30f..a09063cbc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -14,6 +14,7 @@ import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.EnumUtil; @@ -24,7 +25,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -33,7 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public boolean isOn = false; public static long maxPower = 2_500_000; @@ -161,6 +161,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin }; } + @Override public AudioWrapper createAudioLoop() { return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); } @@ -176,7 +177,6 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin @Override public void invalidate() { - super.invalidate(); if(audio != null) { @@ -267,7 +267,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICombustionEngine(player.inventory, this); } @@ -323,4 +323,21 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setInteger("burnRate", setting); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index a62846ea1..844c9b705 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -15,6 +15,7 @@ import com.hbm.inventory.recipes.CompressorRecipes.CompressorRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -38,7 +38,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public FluidTank[] tanks; public long power; @@ -261,7 +261,7 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICompressor(player.inventory, this); } @@ -371,4 +371,34 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement if(type == UpgradeType.OVERDRIVE) return 9; return 0; } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", getFluidIDToCopy()); + tag.setInteger("compression", tanks[0].getPressure()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("compression")) { + int compression = nbt.getInteger("compression"); + + if (compression != tanks[0].getPressure()) { + tanks[0].withPressure(compression); + + CompressorRecipe recipe = CompressorRecipes.recipes.get(new Pair(tanks[0].getTankType(), compression)); + + if (recipe == null) { + tanks[1].withPressure(compression + 1); + } else { + tanks[1].withPressure(recipe.output.pressure).setTankType(recipe.output.type); + } + + this.markChanged(); + } + } + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 944364b7b..0fe75035d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -15,6 +15,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -39,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; @@ -362,7 +362,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrystallizer(player.inventory, this); } @@ -394,4 +394,14 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index effd7bf2e..7224feee4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -16,10 +16,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.CompatEnergyControl; import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; @@ -31,7 +28,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -42,7 +38,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000000; @@ -354,7 +350,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCyclotron(player.inventory, this); } @@ -433,4 +429,9 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.progress > 0 ? getConsumption() : 0); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 3b0ea20a6..808554c37 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -18,6 +18,7 @@ import com.hbm.inventory.gui.GUIMachineDiesel; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.CompatEnergyControl; @@ -29,7 +30,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -37,7 +37,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public int soundCycle = 0; @@ -297,7 +297,7 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineDiesel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java index 9df952ab3..09b7a0e09 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid; import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Viscous; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -27,7 +28,7 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver { +public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver, IFluidCopiable { public FluidTank tank; @@ -154,4 +155,9 @@ public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFlu public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 6ed33d35c..2327c79fb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -22,7 +22,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -260,7 +259,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineEPress(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 26c2630f7..0442a250d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -276,7 +275,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineElectricFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 3ac1df89a..479a91fe7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -24,6 +24,7 @@ import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -43,7 +44,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -60,7 +60,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public static final long maxPower = 1_000_000; public long power; @@ -802,7 +802,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineExcavator(player.inventory, this); } @@ -879,4 +879,9 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index d733720ba..190b9b7d2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -312,7 +311,7 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineExposureChamber(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java index 23ec51164..7243f1802 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCrafting import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryCrafting; @@ -162,7 +161,7 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFunnel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index 92fb4d7a7..384e252c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -27,7 +27,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -461,7 +460,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineGasCent(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java index f5799e1ed..96e0b5c3b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java @@ -11,6 +11,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -26,7 +27,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank input; public FluidTank output; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java index 4c844422d..34dbf6200 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java @@ -16,7 +16,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -290,7 +289,7 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIIGenerator(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 67016d814..a67428973 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -206,7 +205,7 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineKeyForge(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index ce494df35..060710858 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -17,6 +17,7 @@ import com.hbm.inventory.gui.GUIMachineLargeTurbine; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -34,7 +35,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -44,7 +44,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine { +public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IFluidCopiable { public long power; public FluidTank[] tanks; @@ -361,7 +361,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineLargeTurbine(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 2747502cb..e1ccde5f0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -33,7 +33,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -647,7 +646,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMiningLaser(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 9560bbd23..c7e49bdfc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -317,7 +316,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineMissileAssembly(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index 4ddbe6acd..59b99c638 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -13,9 +13,7 @@ import com.hbm.inventory.recipes.MixerRecipes; import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -25,7 +23,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -34,7 +31,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineMixer extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineMixer extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 10_000; @@ -300,7 +297,7 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements ICo @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMixer(player.inventory, this); } @@ -359,4 +356,10 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements ICo if(type == UpgradeType.OVERDRIVE) return 6; return 0; } + + @Override + public FluidTank getTankToPaste() { + return this.tanks[2]; + } + } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 4d6aad8ab..b37ae8279 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -19,6 +19,7 @@ import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; @@ -33,7 +34,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -46,7 +46,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 100_000; @@ -376,7 +376,7 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIOreSlopper(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java index 0d8621759..d8ed532d3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java @@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPlasmaHeater; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -20,7 +21,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -29,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider { +public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 100000000; @@ -261,7 +261,7 @@ public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPlasmaHeater(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index 6bea61bca..3fadeafdd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -12,7 +12,6 @@ import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -258,7 +257,7 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePress(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java index 39624ca99..91378d08d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -20,7 +20,7 @@ import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.util.AxisAlignedBB; -public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine { +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine, IFluidCopiable { public static final HashSet validBlocks = new HashSet(); @@ -196,4 +196,9 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 6172e954e..0ce599eea 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -16,7 +16,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -248,7 +247,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRTG(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java index a4d1bcbec..3c80edfc5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java @@ -20,7 +20,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -298,7 +297,7 @@ public class TileEntityMachineRadGen extends TileEntityMachineBase implements IE @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRadGen(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 1928d58eb..7d6fc0390 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -46,7 +46,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -542,7 +541,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0) return new GUIMachineRadarNT(this); if(ID == 1) return new GUIMachineRadarNTSlots(player.inventory, this); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index 107d37ba1..18de529d8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -11,6 +11,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.items.machine.ItemRTGPelletDepleted; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -24,7 +25,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemFood; @@ -34,7 +34,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final int maxPower = 1000000; @@ -98,7 +98,7 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement tanks[1].writeToNBT(nbt, "output1"); tanks[2].writeToNBT(nbt, "output2"); } - + @Override public void updateEntity() { @@ -154,7 +154,7 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement tanks[1].serialize(buf); tanks[2].serialize(buf); } - + protected DirPos[] getConPos() { return new DirPos[] { new DirPos(xCoord + 2, yCoord, zCoord, Library.POS_X), @@ -292,7 +292,7 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRadiolysis(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java index b0f71f6c1..3776b6701 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java @@ -21,7 +21,6 @@ import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -252,7 +251,7 @@ public class TileEntityMachineReactorBreeding extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineReactorBreeding(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index f195414d3..bbe713965 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -12,7 +12,6 @@ import com.hbm.saveddata.satellites.SatelliteMiner; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -340,7 +339,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISatDock(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 8c3583106..7e95c91ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -190,7 +189,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSatLinker(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java index 7e7784c6d..6f9016127 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java @@ -17,7 +17,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -205,7 +204,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB this.power = buf.readLong(); this.process = buf.readInt(); } - + @Override public AudioWrapper createAudioLoop() { return MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); @@ -259,7 +258,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSchrabidiumTransmutator(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 53cf6a7d4..67ad5583c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -15,7 +15,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -430,7 +429,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineShredder(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 9cd3671b4..7c10537d6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -233,7 +232,7 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSiren(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 3a405ca0d..e5bc4b16f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -15,6 +15,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; @@ -28,7 +29,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -39,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -320,7 +320,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSolderingStation(player.inventory, this); } @@ -373,4 +373,9 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 619574436..30f5646f4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -17,7 +17,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -243,7 +242,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineStrandCaster(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index f2ee81f2c..9ea860818 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.gui.GUIMachineTurbine; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; @@ -31,7 +32,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -42,7 +42,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IEnergyProviderMK2, IFluidStandardTransceiver, IBufPacketReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine{ +public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IEnergyProviderMK2, IFluidStandardTransceiver, IBufPacketReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IFluidCopiable{ private ItemStack slots[]; @@ -387,7 +387,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbine(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 7c19022ab..7dfeb5793 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -18,6 +18,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -33,7 +34,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -43,7 +43,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 1000000L; @@ -163,12 +163,12 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if(audio == null) { //if there is no sound playing, start it - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); audio.startSound(); } else if(!audio.isPlaying()) { audio.stopSound(); - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); audio.startSound(); } @@ -263,7 +263,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } if(counter == 50) { - worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasStartup", 1F, 1.0F); + worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasStartup", getVolume(1.0F), 1.0F); } if(counter == 580) { @@ -287,7 +287,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if(counter == 225) { - worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasShutdown", 1F, 1.0F); + worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasShutdown", getVolume(1.0F), 1.0F); rpmLast = rpm; tempLast = temp; @@ -702,7 +702,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbineGas(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index 6970a921f..94a239fba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -21,6 +21,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; @@ -35,7 +36,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -48,7 +48,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -474,7 +474,7 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbofan(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 46de4e4e1..110b9eba7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -14,6 +14,7 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.lib.Library; import com.hbm.module.ModuleBurnTime; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -25,7 +26,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -34,7 +34,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100_000; @@ -234,7 +234,7 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineWoodBurner(player.inventory, this); } @@ -321,4 +321,9 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(this.liquidBurn) data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, 1D); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, power); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java index 48c671e50..0609bd143 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.handler.CompatHandler; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerMicrowave; import com.hbm.inventory.gui.GUIMicrowave; import com.hbm.lib.Library; @@ -16,7 +17,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemFood; @@ -30,7 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent, ICopiable { public long power; public static final long maxPower = 50000; @@ -256,7 +256,24 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMicrowave(player.inventory, this); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("microSpeed", speed); + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("microSpeed")) speed = nbt.getInteger("microSpeed"); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{ "copyTool.speed"}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java index 251ce6270..2db74b2fe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -407,7 +406,7 @@ public class TileEntityNukeFurnace extends TileEntity implements ISidedInventory @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFurnace(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index d33ff0118..a707683cb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -35,7 +35,6 @@ import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -608,7 +607,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPWR(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java index 7b4751c96..4391993ce 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.player.EntityPlayer; @@ -104,7 +103,7 @@ public class TileEntityRadiobox extends TileEntityLoadedBase implements IEnergyR @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java index a8b1be570..407eeef44 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java @@ -19,7 +19,6 @@ import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -306,7 +305,7 @@ public class TileEntityReactorControl extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorControl(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java index 2f35685ce..db295cee4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java @@ -29,7 +29,6 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -483,7 +482,7 @@ public class TileEntityReactorResearch extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorResearch(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index ec4902930..ff9bfee76 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -38,7 +38,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -560,7 +559,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorZirnox(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 0e9e87eaf..1b2c61d5b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -8,7 +8,6 @@ import com.hbm.util.RTGUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -303,7 +302,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRtgFurnace(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java index ec233595f..923cc5e93 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java @@ -24,7 +24,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -361,7 +360,7 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidStan @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISILEX(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index 7d70c7295..3f6ba78a0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -6,6 +6,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidStandardTransceiver; @@ -16,7 +17,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; -public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver { +public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IFluidCopiable { private FluidTank water; private FluidTank steam; @@ -130,4 +131,9 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui water.deserialize(buf); steam.deserialize(buf); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 5bcf63e9b..10fb7aa82 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -14,6 +14,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -24,7 +25,6 @@ import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -37,7 +37,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider { +public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; @@ -454,7 +454,12 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzLauncher(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index 508786fec..f954bc4cb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -11,6 +11,7 @@ import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -27,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine { +public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IBufPacketReceiver, IConfigurableMachine, IFluidCopiable { public long powerBuffer; @@ -224,4 +225,9 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner this.tanks[0].deserialize(buf); this.tanks[1].deserialize(buf); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index 8b9f0eb39..0ea865d8d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIStorageDrum; import com.hbm.items.ModItems; import com.hbm.items.special.ItemWasteLong; import com.hbm.items.special.ItemWasteShort; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -23,7 +24,6 @@ import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -34,7 +34,8 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidStandardSender, IBufPacketReceiver, IGUIProvider { +public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidStandardSender, IBufPacketReceiver, IGUIProvider, IFluidCopiable { + public FluidTank[] tanks; private static final int[] slots_arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; @@ -274,7 +275,12 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIStorageDrum(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 14f86bab4..238a68c28 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -229,7 +228,7 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIWasteDrum(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index e3489abe0..20852c6e2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -19,6 +19,7 @@ import com.hbm.items.machine.ItemWatzPellet; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -33,7 +34,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -45,7 +45,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int heat; @@ -530,7 +530,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIWatz(player.inventory, this); } @@ -548,4 +548,9 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 2579c61bd..174166eb9 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -6,6 +6,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.CrackingRecipes; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,7 +19,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; @@ -195,4 +196,9 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 7196e9b31..abca3a2ea 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCatalyticReformer; import com.hbm.inventory.recipes.ReformingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -21,7 +22,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -29,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -252,7 +252,7 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase im @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCatalyticReformer(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index 515060fa4..3d1d6d2b9 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCoker; import com.hbm.inventory.recipes.CokerRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Tuple.Triplet; @@ -20,7 +21,6 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -29,7 +29,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; @@ -102,7 +102,7 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl } } - if(wasOn && worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 20); + if(wasOn && worldObj.getTotalWorldTime() % 5 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 5); } for(DirPos pos : getConPos()) { @@ -132,7 +132,7 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl } - + public DirPos[] getConPos() { return new DirPos[] { @@ -292,7 +292,7 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCoker(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java index 3ad671ca9..3f1d1b7e8 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java @@ -22,7 +22,6 @@ import com.hbm.world.feature.OilSpot; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.EnumChatFormatting; @@ -209,7 +208,7 @@ public class TileEntityMachineFrackingTower extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index 15e1f0977..13a77332f 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -6,6 +6,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.FractionRecipes; import com.hbm.lib.Library; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,7 +19,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index ed34c417a..f87c5b542 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -17,6 +17,7 @@ import com.hbm.inventory.gui.GUIMachineGasFlare; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -31,7 +32,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -42,7 +42,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -298,7 +298,7 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineGasFlare(player.inventory, this); } @@ -331,4 +331,21 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, this.fluidUsed); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, this.output); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setBoolean("doesBurn", doesBurn); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("doesBurn")) doesBurn = nbt.getBoolean("doesBurn"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java index 9bffbf38b..7b9424546 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java @@ -9,6 +9,7 @@ import com.hbm.inventory.gui.GUIMachineHydrotreater; import com.hbm.inventory.recipes.HydrotreatingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -20,7 +21,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -28,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -219,7 +219,12 @@ public class TileEntityMachineHydrotreater extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineHydrotreater(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 201d7a409..4ee8e50bf 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUILiquefactor; import com.hbm.inventory.recipes.LiquefactionRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -25,7 +26,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -34,7 +34,8 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { + public long power; public static final long maxPower = 100000; @@ -237,7 +238,7 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILiquefactor(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java index d86a6c40c..942a10788 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -166,7 +165,7 @@ public class TileEntityMachineOilWell extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java index c6c27de58..1dfee2567 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java @@ -20,7 +20,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -204,7 +203,7 @@ public class TileEntityMachinePumpjack extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java new file mode 100644 index 000000000..fb5757aef --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java @@ -0,0 +1,374 @@ +package com.hbm.tileentity.machine.oil; + +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; +import com.hbm.inventory.UpgradeManager; +import com.hbm.inventory.container.ContainerPyroOven; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIPyroOven; +import com.hbm.inventory.recipes.PyroOvenRecipes; +import com.hbm.inventory.recipes.PyroOvenRecipes.PyroOvenRecipe; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { + + public long power; + public static final long maxPower = 1_000_000; + public boolean isVenting; + public boolean isProgressing; + public float progress; + public static int consumption = 10_000; + + public int prevAnim; + public int anim = 0; + + public FluidTank[] tanks; + + private AudioWrapper audio; + + public TileEntityMachinePyroOven() { + super(6, 50); + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.NONE, 24_000); + tanks[1] = new FluidTank(Fluids.NONE, 24_000); + } + + @Override + public String getName() { + return "container.machinePyroOven"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + tanks[0].setType(3, slots); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(tanks[0].getTankType() != Fluids.NONE) this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + if(smoke.getFill() > 0) this.sendFluid(smoke, worldObj, xCoord - rot.offsetX, yCoord + 3, zCoord - rot.offsetZ, Library.POS_Y); + + UpgradeManager.eval(slots, 4, 5); + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + int powerSaving = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); + int overdrive = Math.min(UpgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + this.isProgressing = false; + this.isVenting = false; + + if(this.canProcess()) { + PyroOvenRecipe recipe = getMatchingRecipe(); + this.progress += 1F / Math.max((recipe.duration - speed * (recipe.duration / 4)) / (overdrive * 2 + 1), 1); + this.isProgressing = true; + this.power -= this.getConsumption(speed, powerSaving); + + if(progress >= 1F) { + this.progress = 0F; + this.finishRecipe(recipe); + this.markDirty(); + } + + this.pollute(PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND); + + } else { + this.progress = 0F; + } + + this.networkPackNT(50); + } else { + + this.prevAnim = this.anim; + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + if(isProgressing) { + this.anim++; + + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + + audio.keepAlive(); + audio.updateVolume(this.getVolume(1F)); + + if(MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 3, zCoord + 0.5) < 50) { + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX - dir.offsetX * 0.875, yCoord + 3, zCoord + 0.5 - rot.offsetZ - dir.offsetZ * 0.875, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX - dir.offsetX * 2.375, yCoord + 3, zCoord + 0.5 - rot.offsetZ - dir.offsetZ * 2.375, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX + dir.offsetX * 0.875, yCoord + 3, zCoord + 0.5 - rot.offsetZ + dir.offsetZ * 0.875, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX + dir.offsetX * 2.375, yCoord + 3, zCoord + 0.5 - rot.offsetZ + dir.offsetZ * 2.375, 0.0, 0.05, 0.0); + } + + } else { + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + if(this.isVenting) { + + if(worldObj.getTotalWorldTime() % 2 == 0) { + NBTTagCompound fx = new NBTTagCompound(); + fx.setString("type", "tower"); + fx.setFloat("lift", 10F); + fx.setFloat("base", 0.25F); + fx.setFloat("max", 2.5F); + fx.setInteger("life", 100 + worldObj.rand.nextInt(20)); + fx.setInteger("color",0x202020); + fx.setDouble("posX", xCoord + 0.5 - rot.offsetX); + fx.setDouble("posY", yCoord + 3); + fx.setDouble("posZ", zCoord + 0.5 - rot.offsetZ); + MainRegistry.proxy.effectNT(fx); + } + } + } + } + + public static int getConsumption(int speed, int powerSaving) { + return (int) (consumption * Math.pow(speed + 1, 2)) / (powerSaving + 1); + } + + protected PyroOvenRecipe lastValidRecipe; + + public PyroOvenRecipe getMatchingRecipe() { + + if(lastValidRecipe != null && doesRecipeMatch(lastValidRecipe)) return lastValidRecipe; + + for(PyroOvenRecipe rec : PyroOvenRecipes.recipes) { + if(doesRecipeMatch(rec)) { + lastValidRecipe = rec; + return rec; + } + } + + return null; + } + + public boolean doesRecipeMatch(PyroOvenRecipe recipe) { + + if(recipe.inputFluid != null) { + if(tanks[0].getTankType() != recipe.inputFluid.type) return false; // recipe needs fluid, fluid doesn't match + } + if(recipe.inputItem != null) { + if(slots[1] == null) return false; // recipe needs item, no item present + if(!recipe.inputItem.matchesRecipe(slots[1], true)) return false; // recipe needs item, item doesn't match + } else { + if(slots[1] != null) return false; // recipe does not need item, but item is present + } + + return true; + } + + public boolean canProcess() { + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + int powerSaving = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); + if(power < this.getConsumption(speed, powerSaving)) return false; // not enough power + + PyroOvenRecipe recipe = this.getMatchingRecipe(); + if(recipe == null) return false; // no matching recipe + if(recipe.inputFluid != null && tanks[0].getFill() < recipe.inputFluid.fill) return false; // not enough input fluid + if(recipe.inputItem != null && slots[1].stackSize < recipe.inputItem.stacksize) return false; // not enough input item + if(recipe.outputFluid != null && recipe.outputFluid.fill + tanks[1].getFill() > tanks[1].getMaxFill() && recipe.outputFluid.type == tanks[1].getTankType()) return false; // too much output fluid + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.stackSize + slots[2].stackSize > slots[2].getMaxStackSize()) return false; // too much output item + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItem() != slots[2].getItem()) return false; // output item doesn't match + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItemDamage() != slots[2].getItemDamage()) return false; // output meta doesn't match + + return true; + } + + public void finishRecipe(PyroOvenRecipe recipe) { + if(recipe.outputItem != null) { + if(slots[2] == null) { + slots[2] = recipe.outputItem.copy(); + } else { + slots[2].stackSize += recipe.outputItem.stackSize; + } + } + if(recipe.outputFluid != null) { + tanks[1].setTankType(recipe.outputFluid.type); + tanks[1].setFill(tanks[1].getFill() + recipe.outputFluid.fill); + } + if(recipe.inputItem != null) { + this.decrStackSize(1, recipe.inputItem.stacksize); + } + if(recipe.inputFluid != null) { + tanks[0].setFill(tanks[0].getFill() - recipe.inputFluid.fill); + } + } + + protected DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 3, rot), + new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ * 1 + rot.offsetZ * 3, rot), + new DirPos(xCoord + rot.offsetX * 3, yCoord, zCoord + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ * 1 + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 3, rot), + }; + } + + @Override public void serialize(ByteBuf buf) { + super.serialize(buf); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + buf.writeLong(power); + buf.writeBoolean(isVenting); + buf.writeBoolean(isProgressing); + buf.writeFloat(progress); + } + + @Override public void deserialize(ByteBuf buf) { + super.deserialize(buf); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + power = buf.readLong(); + isVenting = buf.readBoolean(); + isProgressing = buf.readBoolean(); + progress = buf.readFloat(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.tanks[0].readFromNBT(nbt, "t0"); + this.tanks[1].readFromNBT(nbt, "t1"); + this.progress = nbt.getFloat("prog"); + this.power = nbt.getLong("power"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.tanks[0].writeToNBT(nbt, "t0"); + this.tanks[1].writeToNBT(nbt, "t1"); + nbt.setFloat("prog", progress); + nbt.setLong("power", power); + } + + @Override public int[] getAccessibleSlotsFromSide(int meta) { return new int[] { 1, 2 }; } + @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { return i == 1; } + @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { return i == 2; } + + @Override + public void pollute(PollutionType type, float amount) { + FluidTank tank = type == PollutionType.SOOT ? smoke : type == PollutionType.HEAVYMETAL ? smoke_leaded : smoke_poison; + + int fluidAmount = (int) Math.ceil(amount * 100); + tank.setFill(tank.getFill() + fluidAmount); + + if(tank.getFill() > tank.getMaxFill()) { + int overflow = tank.getFill() - tank.getMaxFill(); + tank.setFill(tank.getMaxFill()); + PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, type, overflow / 100F); + this.isVenting = true; + } + } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.pyroOperate", xCoord, yCoord, zCoord, 1.0F, 15F, 1.0F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 3, yCoord, zCoord - 3, xCoord + 4, yCoord + 3.5, zCoord + 4); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getAllTanks() { return new FluidTank[] { tanks[0], tanks[1], smoke }; } + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] { tanks[1], smoke }; } + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPyroOven(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPyroOven(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_pyrooven)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (Math.pow(level + 1, 2) * 100 - 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; + return 0; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index 29e46ab1f..b474ce248 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -24,11 +24,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; import com.hbm.util.Tuple.Quintet; import com.hbm.util.fauxpointtwelve.DirPos; @@ -38,7 +34,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -50,7 +45,7 @@ import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public long power = 0; public int sulfur = 0; @@ -469,7 +464,8 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRefinery(player.inventory, this); } + } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index cb8daee0c..3cb4425a5 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -11,6 +11,7 @@ import com.hbm.inventory.gui.GUISolidifier; import com.hbm.inventory.recipes.SolidificationRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -25,7 +26,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -34,7 +34,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -254,7 +254,7 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISolidifier(player.inventory, this); } @@ -287,4 +287,9 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.usage); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index c40b6dae4..3653b2138 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -10,6 +10,7 @@ import com.hbm.inventory.recipes.RefineryRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -21,7 +22,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -29,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -305,7 +305,7 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineVacuumDistill(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index e0b84079a..89270682d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -9,11 +9,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple; import com.hbm.util.Tuple.Triplet; @@ -31,7 +27,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider { +public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public int indicator = 0; @@ -334,4 +330,9 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 1c1d4c29b..14f8a8b15 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -26,7 +26,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -323,7 +322,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKBoiler(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 4d53c8c5d..f41643047 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -23,7 +23,6 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -517,7 +516,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKConsole(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java index 158c85083..3da017e91 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -160,7 +159,7 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControlAuto(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index d01438c7e..b34f99a5e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -13,7 +13,6 @@ import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -176,7 +175,7 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControl(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index 42aecf827..3965ea170 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -22,7 +22,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -253,7 +252,7 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKHeater(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 7b39fa47b..eccf38e4c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -24,7 +24,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -292,7 +291,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKOutgasser(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 1b9a7a422..6fb3d9ee7 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -28,7 +28,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -481,7 +480,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKRod(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java index 66809e58e..2fab338a9 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -7,7 +7,6 @@ import com.hbm.items.machine.ItemRBMKRod; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -98,7 +97,7 @@ public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKStorage(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index b2815e4d2..7b3a05182 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -14,6 +14,7 @@ import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIBarrel; import com.hbm.lib.Library; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -27,7 +28,6 @@ import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -43,7 +43,7 @@ import java.util.List; import java.util.Set; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityBarrel extends TileEntityMachineBase implements SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent { +public class TileEntityBarrel extends TileEntityMachineBase implements SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -304,6 +304,16 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom return new FluidTank[] { tank }; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public void writeNBT(NBTTagCompound nbt) { if(tank.getFill() == 0) return; @@ -327,7 +337,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBarrel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java index e0c33c30a..45ede4cbc 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateDesh; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateDesh extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateDesh(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java index 23e079344..88a398ca8 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateIron; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateIron extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateIron(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java index abb9cf0cb..1af683e40 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateSteel; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateSteel extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateSteel(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java index c22a6e669..a26b3e0b0 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateTemplate; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateTemplate extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateTemplate(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java index d6a1536b1..ecb1eca61 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java @@ -7,7 +7,6 @@ import com.hbm.items.ModItems; import api.hbm.block.ILaserable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -109,7 +108,7 @@ public class TileEntityCrateTungsten extends TileEntityCrateBase implements ILas @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateTungsten(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java index 7b66c3d55..9e3e6e472 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -114,7 +113,7 @@ public class TileEntityFileCabinet extends TileEntityCrateBase implements IGUIPr @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFileCabinet(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 51448207a..41681df6e 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -25,7 +25,6 @@ import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -340,7 +339,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineBattery(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index 6d20ef764..7c514664b 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -20,12 +20,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; @@ -37,7 +33,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -53,7 +48,7 @@ import java.util.List; import java.util.Random; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityMachineFluidTank extends TileEntityMachineBase implements SimpleComponent, OCComponent, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable { +public class TileEntityMachineFluidTank extends TileEntityMachineBase implements SimpleComponent, OCComponent, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable, IFluidCopiable{ public FluidTank tank; public short mode = 0; @@ -381,6 +376,16 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0]; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineFluidTank(player.inventory, (TileEntityMachineFluidTank) world.getTileEntity(x, y, z)); @@ -388,7 +393,7 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineFluidTank(player.inventory, (TileEntityMachineFluidTank) world.getTileEntity(x, y, z)); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index dd80a4875..5e3a8fa0f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -10,7 +10,6 @@ import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -221,7 +220,12 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMassStorage(player.inventory, this); } + + @Override + public int[] getFilterSlots() { + return new int[]{1,2}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java index f9197b479..95f4c63cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUISafe; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -29,7 +28,7 @@ public class TileEntitySafe extends TileEntityCrateBase implements ISidedInvento @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISafe(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java index f4d785a7d..2d024986c 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.TileEntityInventoryBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.AxisAlignedBB; @@ -37,7 +36,7 @@ public class TileEntitySoyuzCapsule extends TileEntityInventoryBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzCapsule(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 2158d0fe7..ef464547d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -1,14 +1,21 @@ package com.hbm.tileentity.network; +import com.hbm.interfaces.ICopiable; +import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityCraneBase extends TileEntityMachineBase { +public abstract class TileEntityCraneBase extends TileEntityMachineBase implements ICopiable { public TileEntityCraneBase(int scount) { super(scount); @@ -101,4 +108,75 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase { super.writeToNBT(nbt); nbt.setByte("CraneOutputOverride", (byte) outputOverride.ordinal()); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("inputSide", getInputSide().ordinal()); + nbt.setInteger("outputSide", getOutputSide().ordinal()); + + if(this instanceof IControlReceiverFilter){ + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + NBTTagList tags = new NBTTagList(); + int count = 0; + + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + } + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(index == 1) { + if (nbt.hasKey("outputSide")) { + outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); + onBlockChanged(); + } + if (nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + } else { + if (this instanceof IControlReceiverFilter) { + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if (listSize > 0) { + int count = 0; + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + if (loadedStack != null && (slot < filter.getFilterSlots()[1] || router)) { + inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + filter.nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + count++; + } + } + } + } + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{"copytool.filter", "copytool.orientation"}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java index a50aa77b8..01a312685 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java @@ -10,7 +10,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -192,7 +191,7 @@ public class TileEntityCraneBoxer extends TileEntityCraneBase implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneBoxer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 9d858387a..aab0e354d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -12,7 +12,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -223,7 +222,7 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneExtractor(player.inventory, this); } @@ -255,4 +254,10 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } + diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index ddfa5db9c..96411cb83 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -15,7 +15,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -170,7 +169,7 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneGrabber(player.inventory, this); } @@ -193,6 +192,11 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } + @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("whitelist")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 151bf3628..afd6012ed 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -10,7 +10,6 @@ import com.hbm.util.InventoryUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -126,7 +125,7 @@ public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneInserter(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index 50593e9d4..6397584ea 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -11,11 +11,12 @@ import com.hbm.util.BufferUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -77,7 +78,7 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneRouter(player.inventory, this); } @Override @@ -124,7 +125,10 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } - + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("toggle")) { @@ -137,4 +141,60 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI setFilterContents(data); } } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if (inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + + nbt.setTag("items", tags); + nbt.setIntArray("modes", modes); + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + + if(listSize > 0 && nbt.hasKey("modes")) { + for (int i = 0; i < listSize; i++) { + NBTTagCompound slotNBT = items.getCompoundTagAt(i); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + + if (loadedStack != null && slot > index * 5 && slot < Math.min(index * 5 + 5, 30)) { + this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + modes = nbt.getIntArray("modes"); + } else { + IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z); + } + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + String[] options = new String[patterns.length]; + for (int i = 0; i < options.length; i++) { + options[i] = "copytool.pattern" + i; + } + return options; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java index 31dd46c1e..37ea89d81 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -115,7 +114,7 @@ public class TileEntityCraneUnboxer extends TileEntityCraneBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneUnboxer(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 446d4bf6e..fb4058296 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -9,6 +9,7 @@ import com.hbm.inventory.container.ContainerDroneCrate; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIDroneCrate; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BufferUtil; @@ -19,7 +20,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -28,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver { +public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver, IFluidCopiable { public FluidTank tank; @@ -253,7 +253,7 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneCrate(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 0ab0a73b7..32382fc6e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -20,7 +20,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -182,7 +181,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneDock(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java index 0b32073e6..d79ae02bc 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java @@ -12,7 +12,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -51,7 +50,7 @@ public class TileEntityDroneProvider extends TileEntityRequestNetworkContainer i @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneProvider(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java index 9d4948175..46e1fa124 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -99,7 +98,7 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneRequester(player.inventory, this); } @@ -132,4 +131,9 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index b3004d9b0..fff678bc1 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -1,20 +1,27 @@ package com.hbm.tileentity.network; +import com.hbm.blocks.network.IBlockFluidDuct; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import api.hbm.fluid.IFluidConductor; import api.hbm.fluid.IPipeNet; import api.hbm.fluid.PipeNet; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; +import net.minecraft.entity.player.EntityPlayer; 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.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor { +public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, IFluidCopiable { protected IPipeNet network; protected FluidType type = Fluids.NONE; @@ -165,4 +172,36 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor super.onChunkUnload(); this.isLoaded = false; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ type.getID() }; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id; + if (index < ids.length) + id = ids[index]; + else + id = 0; + + FluidType fluid = Fluids.fromID(id); + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL)){ + IBlockFluidDuct pipe = (IBlockFluidDuct)world.getBlock(x, y, z); + pipe.changeTypeRecursively(world, x, y, z, getType(), fluid, 64); + } else { + this.setType(fluid); + } + } + + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java index 789f0a96d..222f20919 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java @@ -20,7 +20,6 @@ import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; @@ -235,7 +234,7 @@ public class TileEntityRadioTelex extends TileEntity implements IBufPacketReceiv @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GuiScreenRadioTelex(this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java index e2013512c..0bb73a49c 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java @@ -136,4 +136,9 @@ public class TileEntityRadioTorchCounter extends TileEntityMachineBase implement setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java index e4e646eb7..60d4fc53d 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java @@ -23,7 +23,6 @@ import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -462,7 +461,7 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretArty(player.inventory, this); } @Callback diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java index dd6c17687..e04fef2f6 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java @@ -4,7 +4,6 @@ import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -42,7 +41,7 @@ public class TileEntityTurretBrandon extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java index 64f329a79..fd3a0f743 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java @@ -13,7 +13,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -175,7 +174,7 @@ public class TileEntityTurretChekhov extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretChekhov(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java index 3a0d0126d..8c3a96667 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java @@ -9,7 +9,6 @@ import com.hbm.inventory.gui.GUITurretFriendly; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -49,7 +48,7 @@ public class TileEntityTurretFriendly extends TileEntityTurretChekhov { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFriendly(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index e11edbc53..fe3076f3d 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -19,11 +19,11 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.fluid.IFluidStandardReceiver; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -31,7 +31,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidStandardReceiver { +public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidStandardReceiver, IFluidCopiable { public FluidTank tank; @@ -225,7 +225,12 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFritz(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java index 714ee338f..7ef19163a 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java @@ -21,7 +21,6 @@ import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -373,7 +372,7 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretHIMARS(player.inventory, this); } @Callback diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java index f726cdff3..87e0414bd 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java @@ -18,7 +18,6 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -216,7 +215,7 @@ public class TileEntityTurretHoward extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretHoward(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java index c3e9d7655..4ef7fd51e 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java @@ -10,7 +10,6 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -108,7 +107,7 @@ public class TileEntityTurretHowardDamaged extends TileEntityTurretHoward { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java index e5c323f2b..8c16ce6b4 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java @@ -13,7 +13,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -142,7 +141,7 @@ public class TileEntityTurretJeremy extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretJeremy(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index b39e07cb2..1ddd6b7bd 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -20,7 +20,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -281,7 +280,7 @@ public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretMaxwell(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java index 2dbe1e5bc..2547b92a6 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java @@ -16,7 +16,6 @@ import cpw.mods.fml.relauncher.SideOnly; import com.hbm.items.ModItems; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -178,7 +177,7 @@ public class TileEntityTurretRichard extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretRichard(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java index 6c7c5359f..1a341fd01 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java @@ -16,7 +16,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -256,7 +255,7 @@ public class TileEntityTurretSentry extends TileEntityTurretBaseNT implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretSentry(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java index 4932f013d..c96fff434 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java @@ -14,7 +14,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -161,7 +160,7 @@ public class TileEntityTurretTauon extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretTauon(player.inventory, this); } } diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index 3330cda22..f9bfcc6f7 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -4,9 +4,8 @@ import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.function.ToIntFunction; import javax.annotation.Nonnegative; @@ -206,7 +205,22 @@ public class BobMathUtil { double delta = (beta - alpha + 180) % 360 - 180; return delta < -180 ? delta + 360 : delta; } - + + // I am sick of trying to remember the ridiculous quirks of Java 8 + // so I wrote this thing that can shit any int-ish list-ish into a regular fucking int[] + // made by mellow, thrown here by 70k + public static int[] intCollectionToArray(Collection in) { + return intCollectionToArray(in, i -> (int)i); + } + + public static int[] intCollectionToArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } + + public static int[] collectionToIntArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } + /** Soft peak sine */ public static double sps(double x) { return Math.sin(Math.PI / 2D * Math.cos(x)); diff --git a/src/main/java/com/hbm/util/Either.java b/src/main/java/com/hbm/util/Either.java new file mode 100644 index 000000000..be2e5da75 --- /dev/null +++ b/src/main/java/com/hbm/util/Either.java @@ -0,0 +1,77 @@ +package com.hbm.util; + +import java.util.function.Function; + +/** + * Represents a value that is either of generic type L or R + * @author martinthedragon + */ +@SuppressWarnings("unchecked") +public final class Either { + + public static Either left(L value) { + return new Either<>(value, true); + } + + public static Either right(R value) { + return new Either<>(value, false); + } + + private final Object value; + private final boolean isLeft; + + private Either(Object value, boolean isLeft) { + this.value = value; + this.isLeft = isLeft; + } + + public boolean isLeft() { + return isLeft; + } + + public boolean isRight() { + return !isLeft; + } + + public L left() { + if(isLeft) + return (L) value; + else + throw new IllegalStateException("Tried accessing value as the L type, but was R type"); + } + + public R right() { + if(!isLeft) + return (R) value; + else + throw new IllegalStateException("Tried accessing value as the R type, but was L type"); + } + + public L leftOrNull() { + return isLeft ? (L) value : null; + } + + public R rightOrNull() { + return !isLeft ? (R) value : null; + } + + public V cast() { + return (V) value; + } + + public T run(Function leftFunc, Function rightFunc) { + return isLeft ? leftFunc.apply((L) value) : rightFunc.apply((R) value); + } + + public T runLeftOrNull(Function func) { + return isLeft ? func.apply((L) value) : null; + } + + public T runRightOrNull(Function func) { + return !isLeft ? func.apply((R) value) : null; + } + + public T runCasting(Function func) { + return func.apply((V) value); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9a0f2e0cc..45b9f383d 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.machineLargeTurbine=Industrielle Dampfturbine container.machineLiquefactor=Verflüssiger container.machineMixer=Industrieller Mixer container.machineOreSlopper=B.E.M. +container.machinePyroOven=Pyrolyseofen container.machineRefinery=Ölraffinerie container.machineSelenium=Hochleistungs-Sternmotor container.machineShredder=Brecher @@ -4343,6 +4344,7 @@ tile.machine_powerrtg.name=PT-Isotopenzelle tile.machine_press.name=Befeuerte Presse tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank tile.machine_pumpjack.name=Pferdekopfpumpe +tile.machine_pyrooven.name=Pyrolyseofen tile.machine_radar.name=Radar tile.machine_radar_large.name=Großes Radar tile.machine_radgen.name=Strahlenbetriebener Generator diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 20995b335..134cbe9a5 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.machineLargeTurbine=Industrial Steam Turbine container.machineLiquefactor=Liquefactor container.machineMixer=Industrial Mixer container.machineOreSlopper=B.O.P. +container.machinePyroOven=Pyrolysis Oven container.machineRefinery=Oil Refinery container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder @@ -860,6 +861,17 @@ container.wasteDrum=Spent Fuel Pool Drum container.watzPowerplant=Watz Power Plant container.zirnox=ZIRNOX Nuclear Reactor +copytool.filter=Filter +copytool.invertRedstone=Redstone Inverted +copytool.invertFilter=Filter Inverted +copytool.orientation=Orientation +copytool.pattern0=Red Side +copytool.pattern1=Orange Side +copytool.pattern2=Yellow Side +copytool.pattern3=Green Side +copytool.pattern4=Blue Side +copytool.pattern5=Purple Side + crucible.aa=Advanced Alloy Production crucible.abronze=Arsenic Bronze Production crucible.bbronze=Bismuth Bronze Production @@ -1354,6 +1366,8 @@ hbm.key.dash=Dash (Unbind from Crouch in config) hbm.key.toggleBack=Toggle Jetpack hbm.key.toggleHUD=Toggle HUD hbm.key.reload=Reload +hbm.key.copyToolAlt=Copy Tool: Switch Paste +hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes hbmfluid.amat=Antimatter hbmfluid.aromatics=Aromatic Hydrocarbons @@ -4285,6 +4299,7 @@ item.seg_20.name=Size 20 Connector item.serum.name=Serum item.servo_set.name=Servo Set item.servo_set_desh.name=Desh Servo Set +item.settings_tool.name=Settings Tool item.shackles.name=Shackles item.shellntm.name=%s Shell item.shimmer_axe.name=Shimmer Axe @@ -5427,6 +5442,7 @@ tile.machine_powerrtg.name=PT Isotope Cell tile.machine_press.name=Burner Press tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank tile.machine_pumpjack.name=Pumpjack +tile.machine_pyrooven.name=Pyrolysis Oven tile.machine_radar.name=Radar tile.machine_radar_large.name=Large Radar tile.machine_radgen.name=Radiation-Powered Engine diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index eb07399b6..93e77b657 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -365,6 +365,7 @@ armorMod.type.insert=Пластина armorMod.type.leggings=Поножи armorMod.type.servo=Сервоприводы armorMod.type.special=Особое +armorMod.type.battery=Аккумулятор armorMod.insertHere=Вставьте броню, чтобы её модифицировать... hazard.prot=Защищает от: @@ -519,6 +520,8 @@ hbm.key.dash=Рывок hbm.key.toggleBack=Включить ранец hbm.key.toggleHUD=Включить HUD hbm.key.reload=Перезарядить +hbm.key.copyToolAlt=Устройство настройки: Переключить вставку +hbm.key.copyToolCtrl=Устройство настройки: Применить к трубам bomb.detonated=Успешно взорвано! bomb.incompatible=Устройство не может быть взорвано! @@ -545,11 +548,12 @@ contents.program.doom=DOOM contents.program.unknown=??? contents.program.windows=Установка Windows 12 -commands.satellite.no_satellite=Спутник с такой частотой не найден! +commands.satellite.no_satellite=Спутник не найден! commands.satellite.not_a_satellite=Предмет в руке не спутник! commands.satellite.satellite_descended=Спутник успешно удалён. commands.satellite.satellite_orbited=Спутник запущен. commands.satellite.should_be_run_as_player=Команда должна быть выполнена игроком! +commands.satellite.no_active_satellites=Нет активных спутников! desc.block.barrel.acid=едкие жидкости desc.block.barrel.acidAlt=едкие жидкости правильно @@ -1397,6 +1401,15 @@ hbmmat.neodymium=Неодима hbmmat.calcium=Кальция hbmmat.silicon=Кремния hbmmat.sodium=Натрия +hbmmat.bscco=BSCCO +hbmmat.strontium=Стронций +hbmmat.chlorocalcite=Хлоркальцит +hbmmat.diamond=Алмаз +hbmmat.lanthanum=Лантан +hbmmat.molysite=Молизит +hbmmat.rareearth=Редкоземельные металлы +hbmmat.sodalite=Содалит +hbmmat.emerald=Изумруд icffuel.beryllium=Бериллий icffuel.boron=Бор @@ -1428,6 +1441,7 @@ crucible.steelWrought=Переплавка кованого железа в ст crucible.tcalloy=Производство технециевой стали crucible.cdalloy=Производство кадмиевой стали crucible.cmb=Производство стали Альянса +crucible.bscco=Производство BSCCO matshape.block=Блок %s matshape.blocks=Блоки %s @@ -1725,6 +1739,7 @@ death.attack.rubble=%1$s превратился в лепёшку death.attack.shrapnel=%1$s был разорван шрапнелью death.attack.teleporter=%1$s телепортировался в никуда death.attack.blackhole=%1$s превратился в спагетти +death.attack.blacklung=%1$s умер от болезни черных легких death.attack.blender=%1$s стал фаршем death.attack.meteorite=%1$s был раздавлен огромным космическим камнем death.attack.boxcar=%1$s был раздавлен падающим грузовым вагоном. Ну что ж... @@ -1741,7 +1756,7 @@ death.attack.taint=%1$s умер от невероятного количест death.attack.electricity=%1$s был убит электрическим током death.attack.exhaust=%1$s был превращен в шашлык стартовой ракетой death.attack.lunar=%1$s забыли зарядить свои жизненно важные органы. -death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа. +death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа death.attack.digamma=%1$s шагнул в пустоту. death.attack.asbestos=%1$s теперь имеет право на финансовую компенсацию. death.attack.mku=%1$s умер по неизвестным причинам. @@ -2245,6 +2260,8 @@ container.machineArcFurnaceLarge=Дуговая печь tile.machine_arc_furnace.name=Электрическая дуговая печь container.machineSolderingStation=Паяльный стол tile.machine_soldering_station.name=Паяльный стол +container.machinePyroOven=Пиролизная печь +tile.machine_pyrooven.name=Пиролизная печь tile.conveyor.name=Конвейер tile.conveyor.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвертки$Нажмите на отвертку для сгибания @@ -2845,6 +2862,7 @@ item.ingot_schrabidium.name=Шрабидиевый слиток item.nugget_schrabidium.name=Шрабидиевый самородок item.plate_copper.name=Медная пластина item.board_copper.name=Медная панель +item.ingot_bscco.name=Слиток BSCCO item.ingot_advanced_alloy.name=Слиток продвинутого сплава item.plate_advanced_alloy.name=Пластина продвинутого сплава item.wire_advanced_alloy.name=Сверхпроводник @@ -2887,6 +2905,9 @@ item.plate_armor_ajr.name=Кованая железная обшивка бро item.plate_armor_fau.name=Обшивка брони Фау item.plate_armor_dnt.name=Обшивка ДНТ-брони item.armor_polish.name=Полироль для брони ШайнингАрмор™ +item.armor_battery.name=Аккумуляторный блок для силовой брони +item.armor_battery_mk2.name=Аккумуляторный блок для силовой брони Mk2 +item.armor_battery_mk3.name=Аккумуляторный блок для силовой брони Mk3 item.insert_esapi.name=ESAPI пластины item.insert_kevlar.name=Кевларовые пластины item.insert_sapi.name=SAPI пластины @@ -3166,6 +3187,10 @@ item.circuit.chip_bismoid.name=Передовой интегральный ми item.circuit.pcb.name=Печатная плата item.circuit.silicon.name=Печатная кремниевая пластина item.circuit.vacuum_tube.name=Вакуумная трубка +item.circuit.atomic_clock.name=Атомные часы +item.circuit.chip_quantum.name=Твердотельный квантовый процессор +item.circuit.controller_quantum.name=Квантовый компьютер +item.circuit.quantum.name=Устройство квантовой обработки item.mechanism_revolver_1.name=Револьверный механизм item.mechanism_revolver_2.name=Усовершенствованный револьверный механизм item.mechanism_rifle_1.name=Винтовочный механизм @@ -3447,6 +3472,7 @@ item.bedrock_ore.grade.rad_byproduct.name=%s бедроковая руда, Оч item.bedrock_ore.grade.rad_roasted.name=%s бедроковая руда, Обожженная очищенная побочка item.bedrock_ore.grade.rad_arc.name=%s бедроковая руда, Переплавленная очищенная побочка item.bedrock_ore.grade.rad_washed.name=%s бедроковая руда, Промытая очищенная побочка +item.bedrock_ore_fragment.name=Фрагмент от %s руда item.bedrock_ore.type.actinide.name=Актинидная item.bedrock_ore.type.crystal.name=Кристаллическая item.bedrock_ore.type.heavy.name=Тяжелая металлическая @@ -3489,6 +3515,7 @@ item.ammonium_nitrate.name=Нитрат аммония tile.bobblehead.name=Болванчик tile.snowglobe.name=Снежный шар +tile.plushie.name=Плюшевая игрушка %s tile.deco_titanium.name=Титановый декоративный блок tile.deco_red_copper.name=Красномедный декоративный блок tile.deco_tungsten.name=Вольфрамовый декоративный блок @@ -3568,6 +3595,7 @@ tile.lamp_tritium_green_on.name=Зелёная тритиевая лампа tile.spotlight_incandescent.name=Лампа в клетке tile.spotlight_fluoro.name=Флюоресцентная лампа tile.spotlight_halogen.name=Галогенный прожектор +tile.floodlight.name=Электрический прожектор tile.lamp_demon.name=Лампа из заряда-демона tile.reinforced_stone.name=Уплотненный камень tile.concrete_smooth.name=Бетон @@ -5549,6 +5577,7 @@ item.trenchmaster_plate.name=Нагрудник траншейщика tile.mush.name=Светящийся гриб tile.waste_mycelium.name=Светящийся мицелий +tile.sellafield_bedrock.name=Бедроковый селлафит tile.sellafield_slaked.name=Погашенный селлафит tile.sellafield.0.name=Селлафит tile.sellafield.1.name=Горячий селлафит @@ -6025,6 +6054,7 @@ item.part_generic.piston_electric.name=Электрический поршень item.part_generic.piston_hydraulic.name=Гидравлический поршень item.part_generic.piston_pneumatic.name=Пневматический поршень item.part_generic.lde.name=Элемент малой плотности +item.part_generic.hde.name=Элемент повышенной прочности item.particle_aelectron.name=Капсула с Позитроном item.particle_amat.name=Капсула с Антиматерией item.particle_aproton.name=Капсула с Антипротоном @@ -6099,7 +6129,16 @@ item.digamma_diagnostic.name=Диагностика дигаммы tile.geiger.name=Счетчик Гейгера tile.glass_polonium.name=Полониевое стекло item.survey_scanner.name=Сканер + item.ore_density_scanner.name=Сканер плотности бедроковой руды +item.ore_density_scanner.excellent=Избыток +item.ore_density_scanner.high=Высокий +item.ore_density_scanner.low=Низкий +item.ore_density_scanner.moderate=Средний +item.ore_density_scanner.poor=Бедный +item.ore_density_scanner.veryhigh=Очень высокий +item.ore_density_scanner.verypoor=Очень бедный + item.coltan_tool.name=Колтасс item.mirror_tool.name=Инструмент для регулировки зеркал item.mirror_tool.linked=Позиция выравнивания установлена! @@ -6115,6 +6154,18 @@ item.anchor_remote.name=Устройство вызова item.acetylene_torch.name=Ацетиленовая сварочная горелка item.blowtorch.name=Паяльная лампа +item.settings_tool.name=Устройство настройки +copytool.filter=Фильтр +copytool.invertRedstone=Инвертированный редстоун +copytool.invertFilter=Инвертированный фильтр +copytool.orientation=Ориентация +copytool.pattern0=Красная сторона +copytool.pattern1=Оранжевая сторона +copytool.pattern2=Желтая сторона +copytool.pattern3=Зелёная сторона +copytool.pattern4=Синяя сторона +copytool.pattern5=Фиолетовая сторона + item.multitool_dig.name=Силовая перчатка (Добывающий коготь) item.multitool_silk.name=Силовая перчатка (Коготь шёлкового касания) item.multitool_ext.name=Силовая перчатка (Извлекатель руды) diff --git a/src/main/resources/assets/hbm/models/machines/pyrooven.obj b/src/main/resources/assets/hbm/models/machines/pyrooven.obj new file mode 100644 index 000000000..31300255a --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/pyrooven.obj @@ -0,0 +1,3366 @@ +# Blender v2.79 (sub 0) OBJ File: 'pyrooven.blend' +# www.blender.org +o Fan +v 1.500000 1.500000 1.375000 +v 1.391747 1.500000 1.437500 +v 1.391747 1.500000 1.562500 +v 1.500000 1.500000 1.625000 +v 1.608253 1.500000 1.562500 +v 1.608253 1.500000 1.437500 +v 1.500000 1.625000 1.375000 +v 1.391747 1.625000 1.437500 +v 1.391747 1.625000 1.562500 +v 1.500000 1.625000 1.625000 +v 1.608253 1.625000 1.562500 +v 1.608253 1.625000 1.437500 +v 1.608253 1.546324 1.560370 +v 1.608253 1.578676 1.439630 +v 2.041266 1.501839 1.726389 +v 2.041266 1.623161 1.273611 +v 1.498156 1.546324 1.376065 +v 1.393591 1.578676 1.436435 +v 1.425426 1.501839 0.918055 +v 1.033309 1.623161 1.144444 +v 1.393591 1.546324 1.563565 +v 1.498156 1.578676 1.623935 +v 1.033309 1.501839 1.855556 +v 1.425426 1.623161 2.081945 +vt 0.508475 0.829545 +vt 0.514124 0.818182 +vt 0.514124 0.829545 +vt 0.485876 0.829545 +vt 0.491525 0.818182 +vt 0.491525 0.829545 +vt 0.497175 0.829545 +vt 0.502825 0.818182 +vt 0.502825 0.829545 +vt 0.519774 0.818182 +vt 0.519774 0.829545 +vt 0.497175 0.818182 +vt 0.508475 0.818182 +vt 0.511326 0.831160 +vt 0.516923 0.831160 +vt 0.519721 0.840909 +vt 0.485876 0.829545 +vt 0.500000 0.869318 +vt 0.494350 0.869318 +vt 0.485876 0.829545 +vt 0.500000 0.869318 +vt 0.494350 0.869318 +vt 0.494350 0.869318 +vt 0.508475 0.829545 +vt 0.500000 0.869318 +vt 0.485876 0.818182 +vt 0.516923 0.850659 +vt 0.511326 0.850659 +vt 0.508527 0.840909 +vt 0.508475 0.829545 +vt 0.508475 0.829545 +vt 0.485876 0.829545 +vn 0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.5000 0.0000 -0.8660 +vn 0.0000 1.0000 0.0000 +vn -0.0000 0.9659 0.2588 +vn 0.2241 0.9659 -0.1294 +vn -0.2241 0.9659 -0.1294 +s off +f 1/1/1 12/2/1 6/3/1 +f 5/4/2 10/5/2 4/6/2 +f 3/7/3 8/8/3 2/9/3 +f 6/3/4 11/10/4 5/11/4 +f 4/6/5 9/12/5 3/7/5 +f 2/9/6 7/13/6 1/1/6 +f 11/14/7 12/15/7 7/16/7 +f 15/17/8 14/18/8 13/19/8 +f 19/20/9 18/21/9 17/22/9 +f 21/23/10 24/24/10 22/25/10 +f 1/1/1 7/13/1 12/2/1 +f 5/4/2 11/26/2 10/5/2 +f 3/7/3 9/12/3 8/8/3 +f 6/3/4 12/2/4 11/10/4 +f 4/6/5 10/5/5 9/12/5 +f 2/9/6 8/8/6 7/13/6 +f 7/16/7 8/27/7 9/28/7 +f 9/28/7 10/29/7 7/16/7 +f 10/29/7 11/14/7 7/16/7 +f 15/17/8 16/30/8 14/18/8 +f 19/20/9 20/31/9 18/21/9 +f 21/23/10 23/32/10 24/24/10 +o Slider +v 2.250000 1.250000 0.250000 +v 2.250000 1.250000 -0.250000 +v 1.750000 1.250000 0.250000 +v 1.750000 1.250000 -0.250000 +v 2.250000 1.625000 0.250000 +v 2.250000 1.625000 -0.250000 +v 1.750000 1.625000 0.250000 +v 1.750000 1.625000 -0.250000 +vt 0.361582 0.806818 +vt 0.378531 0.852273 +vt 0.361582 0.852273 +vt 0.378531 0.886364 +vt 0.401130 0.852273 +vt 0.401130 0.886364 +vt 0.418079 0.852273 +vt 0.401130 0.806818 +vt 0.418079 0.806818 +vt 0.378531 0.772727 +vt 0.401130 0.772727 +vt 0.378531 0.806818 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 25/33/11 31/34/11 27/35/11 +f 27/36/12 32/37/12 28/38/12 +f 28/39/13 30/40/13 26/41/13 +f 30/40/14 25/42/14 26/43/14 +f 32/37/15 29/44/15 30/40/15 +f 25/33/11 29/44/11 31/34/11 +f 27/36/12 31/34/12 32/37/12 +f 28/39/13 32/37/13 30/40/13 +f 30/40/14 29/44/14 25/42/14 +f 32/37/15 31/34/15 29/44/15 +o Oven +v -2.500000 0.000000 3.500000 +v 2.500000 0.000000 3.500000 +v -2.500000 0.000000 -3.500000 +v 2.500000 0.000000 -3.500000 +v -2.500000 0.500000 3.500000 +v 2.500000 0.500000 3.500000 +v -2.500000 0.500000 -3.500000 +v 2.500000 0.500000 -3.500000 +v -2.375000 0.500000 3.375000 +v 0.375000 0.500000 3.375000 +v -2.375000 0.500000 2.875000 +v 0.375000 0.500000 2.875000 +v -2.375000 2.500000 2.875000 +v -2.375000 2.500000 3.375000 +v 0.375000 2.500000 3.375000 +v 0.375000 2.500000 2.875000 +v -1.625000 3.000000 2.875000 +v -1.625000 3.000000 3.375000 +v -0.375000 3.000000 3.375000 +v -0.375000 3.000000 2.875000 +v -2.375000 0.500000 -2.875000 +v 0.375000 0.500000 -2.875000 +v -2.375000 0.500000 -3.375000 +v 0.375000 0.500000 -3.375000 +v -2.375000 2.500000 -3.375000 +v -2.375000 2.500000 -2.875000 +v 0.375000 2.500000 -2.875000 +v 0.375000 2.500000 -3.375000 +v -1.625000 3.000000 -3.375000 +v -1.625000 3.000000 -2.875000 +v -0.375000 3.000000 -2.875000 +v -0.375000 3.000000 -3.375000 +v -2.375000 0.500000 -1.375000 +v 0.375000 0.500000 -1.375000 +v -2.375000 0.500000 -1.875000 +v 0.375000 0.500000 -1.875000 +v -2.375000 2.500000 -1.875000 +v -2.375000 2.500000 -1.375000 +v 0.375000 2.500000 -1.375000 +v 0.375000 2.500000 -1.875000 +v -1.625000 3.000000 -1.875000 +v -1.625000 3.000000 -1.375000 +v -0.375000 3.000000 -1.375000 +v -0.375000 3.000000 -1.875000 +v -2.375000 0.500000 1.875000 +v 0.375000 0.500000 1.875000 +v -2.375000 0.500000 1.375000 +v 0.375000 0.500000 1.375000 +v -2.375000 2.500000 1.375000 +v -2.375000 2.500000 1.875000 +v 0.375000 2.500000 1.875000 +v 0.375000 2.500000 1.375000 +v -1.625000 3.000000 1.375000 +v -1.625000 3.000000 1.875000 +v -0.375000 3.000000 1.875000 +v -0.375000 3.000000 1.375000 +v 0.250000 0.500000 -1.375000 +v 0.250000 0.500000 1.375000 +v 0.250000 2.375000 -1.375000 +v 0.250000 2.375000 1.375000 +v -0.500000 2.875000 -1.375000 +v -0.500000 2.875000 1.375000 +v -1.500000 2.875000 -1.375000 +v -1.500000 2.875000 1.375000 +v -2.250000 2.375000 -1.375000 +v -2.250000 2.375000 1.375000 +v -2.250000 0.500000 -1.375000 +v -2.250000 0.500000 1.375000 +v 0.250000 0.500000 1.875000 +v 0.250000 2.375000 1.875000 +v -0.500000 2.875000 1.875000 +v -1.500000 2.875000 1.875000 +v -2.250000 2.375000 1.875000 +v -2.250000 0.500000 1.875000 +v 0.250000 0.500000 2.875000 +v 0.250000 2.375000 2.875000 +v -0.500000 2.875000 2.875000 +v -1.500000 2.875000 2.875000 +v -2.250000 2.375000 2.875000 +v -2.250000 0.500000 2.875000 +v 0.250000 0.500000 -2.875000 +v 0.250000 2.375000 -2.875000 +v -0.500000 2.875000 -2.875000 +v -1.500000 2.875000 -2.875000 +v -2.250000 2.375000 -2.875000 +v -2.250000 0.500000 -2.875000 +v 0.250000 0.500000 -1.875000 +v 0.250000 2.375000 -1.875000 +v -0.500000 2.875000 -1.875000 +v -1.500000 2.875000 -1.875000 +v -2.250000 2.375000 -1.875000 +v -2.250000 0.500000 -1.875000 +v -1.000000 2.625000 3.375000 +v -1.500000 2.491026 3.375000 +v -1.866025 2.125000 3.375000 +v -2.000000 1.625000 3.375000 +v -1.866025 1.125000 3.375000 +v -1.500000 0.758975 3.375000 +v -1.000000 0.625000 3.375000 +v -0.500000 0.758975 3.375000 +v -0.133975 1.125000 3.375000 +v 0.000000 1.625000 3.375000 +v -0.133975 2.125000 3.375000 +v -0.500000 2.491025 3.375000 +v -1.000000 2.625000 3.500000 +v -1.500000 2.491026 3.500000 +v -1.866025 2.125000 3.500000 +v -2.000000 1.625000 3.500000 +v -1.866025 1.125000 3.500000 +v -1.500000 0.758975 3.500000 +v -1.000000 0.625000 3.500000 +v -0.500000 0.758975 3.500000 +v -0.133975 1.125000 3.500000 +v 0.000000 1.625000 3.500000 +v -0.133975 2.125000 3.500000 +v -0.500000 2.491025 3.500000 +v -1.500001 2.491025 -3.500000 +v -1.866026 2.125000 -3.500000 +v -2.000000 1.625000 -3.500000 +v -1.866025 1.125000 -3.500000 +v -1.500000 0.758975 -3.500000 +v -1.000000 0.625000 -3.500000 +v -0.500000 0.758975 -3.500000 +v -0.133975 1.125000 -3.500000 +v -0.000000 1.625000 -3.500000 +v -0.133975 2.125000 -3.500000 +v -0.500000 2.491026 -3.500000 +v -1.000000 2.625000 -3.500000 +v -1.500001 2.491025 -3.375000 +v -1.866026 2.125000 -3.375000 +v -2.000000 1.625000 -3.375000 +v -1.866025 1.125000 -3.375000 +v -1.500000 0.758975 -3.375000 +v -1.000000 0.625000 -3.375000 +v -0.500000 0.758975 -3.375000 +v -0.133975 1.125000 -3.375000 +v -0.000000 1.625000 -3.375000 +v -0.133975 2.125000 -3.375000 +v -0.500000 2.491026 -3.375000 +v -1.000000 2.625000 -3.375000 +v -0.625000 2.875000 2.000000 +v -1.375000 2.875000 2.000000 +v -0.625000 2.875000 2.750000 +v -1.375000 2.875000 2.750000 +v -1.312500 3.125000 2.062500 +v -0.687500 3.125000 2.062500 +v -1.312500 3.125000 2.687500 +v -0.687500 3.125000 2.687500 +v -1.375000 3.125000 2.000000 +v -0.625000 3.125000 2.000000 +v -1.375000 3.125000 2.750000 +v -0.625000 3.125000 2.750000 +v -1.312500 3.000000 2.062500 +v -0.687500 3.000000 2.062500 +v -1.312500 3.000000 2.687500 +v -0.687500 3.000000 2.687500 +v -1.312500 3.062500 2.062500 +v -0.687500 3.062500 2.062500 +v -1.312500 3.062500 2.687500 +v -0.687500 3.062500 2.687500 +v -0.625000 2.875000 -2.750000 +v -1.375000 2.875000 -2.750000 +v -0.625000 2.875000 -2.000000 +v -1.375000 2.875000 -2.000000 +v -1.312500 3.125000 -2.687500 +v -0.687500 3.125000 -2.687500 +v -1.312500 3.125000 -2.062500 +v -0.687500 3.125000 -2.062500 +v -1.375000 3.125000 -2.750000 +v -0.625000 3.125000 -2.750000 +v -1.375000 3.125000 -2.000000 +v -0.625000 3.125000 -2.000000 +v -1.312500 3.000000 -2.687500 +v -0.687500 3.000000 -2.687500 +v -1.312500 3.000000 -2.062500 +v -0.687500 3.000000 -2.062500 +v -1.312500 3.062500 -2.687500 +v -0.687500 3.062500 -2.687500 +v -1.312500 3.062500 -2.062500 +v -0.687500 3.062500 -2.062500 +v -0.625000 2.875000 -1.250000 +v -1.375000 2.875000 -1.250000 +v -0.625000 2.875000 -0.500000 +v -1.375000 2.875000 -0.500000 +v -1.312500 3.125000 -1.187500 +v -0.687500 3.125000 -1.187500 +v -1.312500 3.125000 -0.562500 +v -0.687500 3.125000 -0.562500 +v -1.375000 3.125000 -1.250000 +v -0.625000 3.125000 -1.250000 +v -1.375000 3.125000 -0.500000 +v -0.625000 3.125000 -0.500000 +v -1.312500 3.000000 -1.187500 +v -0.687500 3.000000 -1.187500 +v -1.312500 3.000000 -0.562500 +v -0.687500 3.000000 -0.562500 +v -1.312500 3.062500 -1.187500 +v -0.687500 3.062500 -1.187500 +v -1.312500 3.062500 -0.562500 +v -0.687500 3.062500 -0.562500 +v -0.625000 2.875000 0.500000 +v -1.375000 2.875000 0.500000 +v -0.625000 2.875000 1.250000 +v -1.375000 2.875000 1.250000 +v -1.312500 3.125000 0.562500 +v -0.687500 3.125000 0.562500 +v -1.312500 3.125000 1.187500 +v -0.687500 3.125000 1.187500 +v -1.375000 3.125000 0.500000 +v -0.625000 3.125000 0.500000 +v -1.375000 3.125000 1.250000 +v -0.625000 3.125000 1.250000 +v -1.312500 3.000000 0.562500 +v -0.687500 3.000000 0.562500 +v -1.312500 3.000000 1.187500 +v -0.687500 3.000000 1.187500 +v -1.312500 3.062500 0.562500 +v -0.687500 3.062500 0.562500 +v -1.312500 3.062500 1.187500 +v -0.687500 3.062500 1.187500 +v 0.875000 1.750000 2.125000 +v 2.125000 1.750000 2.125000 +v 0.875000 1.750000 0.875000 +v 2.125000 1.750000 0.875000 +v 2.250000 1.500000 0.750000 +v 0.750000 1.500000 0.750000 +v 2.250000 1.500000 2.250000 +v 0.750000 1.500000 2.250000 +v 0.500000 0.500000 -0.500000 +v 2.500000 0.500000 -0.500000 +v 0.500000 0.500000 -2.500000 +v 2.500000 0.500000 -2.500000 +v 2.500000 1.500000 -2.500000 +v 0.500000 1.500000 -2.500000 +v 2.500000 1.500000 -0.500000 +v 0.500000 1.500000 -0.500000 +v 0.500000 1.500000 2.500000 +v 2.500000 1.500000 2.500000 +v 0.500000 1.500000 0.500000 +v 2.500000 1.500000 0.500000 +v 2.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 2.500000 0.500000 2.500000 +v 0.500000 0.500000 2.500000 +v 0.750000 1.750000 0.750000 +v 0.750000 1.750000 2.250000 +v 2.250000 1.750000 2.250000 +v 2.250000 1.750000 0.750000 +v 0.875000 1.500000 0.875000 +v 0.875000 1.500000 2.125000 +v 2.125000 1.500000 2.125000 +v 2.125000 1.500000 0.875000 +v -1.375000 3.000000 0.125000 +v -1.125000 3.000000 0.375000 +v -0.875000 3.000000 0.375000 +v -0.625000 3.000000 0.125000 +v -1.125000 3.000000 -0.375000 +v -1.375000 3.000000 -0.125000 +v -0.625000 3.000000 -0.125000 +v -0.875000 3.000000 -0.375000 +v -1.375000 2.875000 -0.125000 +v -1.125000 2.875000 -0.375000 +v -1.125000 2.875000 0.375000 +v -1.375000 2.875000 0.125000 +v -0.625000 2.875000 0.125000 +v -0.875000 2.875000 0.375000 +v -0.875000 2.875000 -0.375000 +v -0.625000 2.875000 -0.125000 +v 0.875000 1.687500 2.125000 +v 2.125000 1.687500 2.125000 +v 0.875000 1.687500 0.875000 +v 2.125000 1.687500 0.875000 +v 1.176777 2.801777 -0.823223 +v 0.875000 2.801777 -0.698223 +v 0.875000 2.625000 -0.625000 +v 0.875000 2.448223 -0.698223 +v 0.875000 2.375000 -0.875000 +v 0.875000 2.448223 -1.051777 +v 0.875000 2.801777 -1.051777 +v 0.875000 2.875000 -0.875000 +v 0.875000 2.000000 -1.500000 +v 0.948223 2.000000 -1.323223 +v 1.125000 2.000000 -1.250000 +v 1.301777 2.000000 -1.323223 +v 1.375000 2.000000 -1.500000 +v 1.301777 2.000000 -1.676777 +v 1.125000 2.000000 -1.750000 +v 0.948223 2.000000 -1.676777 +v 0.948223 2.375000 -1.676777 +v 1.125000 2.375000 -1.750000 +v 1.301777 2.375000 -1.676777 +v 1.375000 2.375000 -1.500000 +v 1.301777 2.375000 -1.323223 +v 1.125000 2.375000 -1.250000 +v 0.948223 2.375000 -1.323223 +v 0.875000 2.375000 -1.500000 +v 0.875000 2.551777 -1.426777 +v 0.948223 2.426777 -1.301777 +v 1.301777 2.426777 -1.301777 +v 1.375000 2.551777 -1.426777 +v 1.301777 2.676777 -1.551777 +v 1.125000 2.728553 -1.603553 +v 2.250000 2.000000 -2.250000 +v 0.750000 2.000000 -2.250000 +v 2.250000 2.000000 -0.750000 +v 0.750000 2.000000 -0.750000 +v 0.750000 1.500000 -0.750000 +v 2.250000 1.500000 -0.750000 +v 0.750000 1.500000 -2.250000 +v 2.250000 1.500000 -2.250000 +v 0.500000 0.500000 0.250000 +v 2.500000 0.500000 0.250000 +v 0.500000 0.500000 -0.250000 +v 2.500000 0.500000 -0.250000 +v 0.500000 1.250000 -0.250000 +v 0.500000 1.250000 0.250000 +v 2.500000 1.250000 0.250000 +v 2.500000 1.250000 -0.250000 +v 0.625000 1.250000 -0.031250 +v 0.625000 1.250000 0.031250 +v 2.375000 1.250000 0.031250 +v 2.375000 1.250000 -0.031250 +v 0.625000 1.500000 -0.031250 +v 0.625000 1.500000 0.031250 +v 2.375000 1.500000 0.031250 +v 2.375000 1.500000 -0.031250 +v 0.625000 1.250000 -0.125000 +v 0.625000 1.250000 -0.062500 +v 2.375000 1.250000 -0.062500 +v 2.375000 1.250000 -0.125000 +v 0.625000 1.500000 -0.125000 +v 0.625000 1.500000 -0.062500 +v 2.375000 1.500000 -0.062500 +v 2.375000 1.500000 -0.125000 +v 0.625000 1.250000 0.062500 +v 0.625000 1.250000 0.125000 +v 2.375000 1.250000 0.125000 +v 2.375000 1.250000 0.062500 +v 0.625000 1.500000 0.062500 +v 0.625000 1.500000 0.125000 +v 2.375000 1.500000 0.125000 +v 2.375000 1.500000 0.062500 +v 0.625000 1.250000 -0.218750 +v 0.625000 1.250000 -0.156250 +v 2.375000 1.250000 -0.156250 +v 2.375000 1.250000 -0.218750 +v 0.625000 1.500000 -0.218750 +v 0.625000 1.500000 -0.156250 +v 2.375000 1.500000 -0.156250 +v 2.375000 1.500000 -0.218750 +v 0.625000 1.250000 0.156250 +v 0.625000 1.250000 0.218750 +v 2.375000 1.250000 0.218750 +v 2.375000 1.250000 0.156250 +v 0.625000 1.500000 0.156250 +v 0.625000 1.500000 0.218750 +v 2.375000 1.500000 0.218750 +v 2.375000 1.500000 0.156250 +v 1.500000 1.125000 0.500000 +v 1.323223 1.051777 0.500000 +v 1.250000 0.875000 0.500000 +v 1.323223 0.698223 0.500000 +v 1.500000 0.625000 0.500000 +v 1.676777 0.698223 0.500000 +v 1.750000 0.875000 0.500000 +v 1.676777 1.051777 0.500000 +v 1.500000 1.125000 -0.500000 +v 1.323223 1.051777 -0.500000 +v 1.250000 0.875000 -0.500000 +v 1.323223 0.698223 -0.500000 +v 1.500000 0.625000 -0.500000 +v 1.676777 0.698223 -0.500000 +v 1.750000 0.875000 -0.500000 +v 1.676777 1.051777 -0.500000 +v 2.125000 1.125000 0.500000 +v 1.948223 1.051777 0.500000 +v 1.875000 0.875000 0.500000 +v 1.948223 0.698223 0.500000 +v 2.125000 0.625000 0.500000 +v 2.301777 0.698223 0.500000 +v 2.375000 0.875000 0.500000 +v 2.301777 1.051777 0.500000 +v 2.125000 1.125000 -0.500000 +v 1.948223 1.051777 -0.500000 +v 1.875000 0.875000 -0.500000 +v 1.948223 0.698223 -0.500000 +v 2.125000 0.625000 -0.500000 +v 2.301777 0.698223 -0.500000 +v 2.375000 0.875000 -0.500000 +v 2.301777 1.051777 -0.500000 +v 0.875000 1.125000 0.500000 +v 0.698223 1.051777 0.500000 +v 0.625000 0.875000 0.500000 +v 0.698223 0.698223 0.500000 +v 0.875000 0.625000 0.500000 +v 1.051777 0.698223 0.500000 +v 1.125000 0.875000 0.500000 +v 1.051777 1.051777 0.500000 +v 0.875000 1.125000 -0.500000 +v 0.698223 1.051777 -0.500000 +v 0.625000 0.875000 -0.500000 +v 0.698223 0.698223 -0.500000 +v 0.875000 0.625000 -0.500000 +v 1.051777 0.698223 -0.500000 +v 1.125000 0.875000 -0.500000 +v 1.051777 1.051777 -0.500000 +v 1.429917 1.382583 2.500000 +v 1.562500 1.437500 2.500000 +v 1.695083 1.382583 2.500000 +v 1.750000 1.250000 2.500000 +v 1.695083 1.117417 2.500000 +v 1.562500 1.062500 2.500000 +v 1.429917 1.117417 2.500000 +v 1.413833 1.117417 2.538833 +v 1.507583 1.062500 2.632582 +v 1.601333 1.117417 2.726332 +v 1.640165 1.250000 2.765165 +v 1.601333 1.382583 2.726332 +v 1.507583 1.437500 2.632582 +v 1.413833 1.382583 2.538833 +v 1.375000 1.250000 2.500000 +v 1.375000 1.382583 2.554918 +v 1.375000 1.437500 2.687500 +v 1.375000 1.382583 2.820082 +v 1.375000 1.250000 2.875000 +v 1.375000 1.117417 2.820082 +v 1.375000 1.062500 2.687500 +v 1.375000 1.117417 2.554918 +v 0.250000 1.117417 2.554918 +v 0.250000 1.062500 2.687500 +v 0.250000 1.117417 2.820082 +v 0.250000 1.250000 2.875000 +v 0.250000 1.382583 2.820082 +v 0.250000 1.437500 2.687500 +v 0.250000 1.382583 2.554918 +v 0.250000 1.250000 2.500000 +v 0.375000 1.250000 2.937500 +v 0.375000 1.382583 2.992418 +v 0.375000 1.437500 3.125000 +v 0.375000 1.382583 3.257582 +v 0.375000 1.250000 3.312500 +v 0.375000 1.117417 3.257582 +v 0.375000 1.062500 3.125000 +v 0.375000 1.117417 2.992418 +v 1.875000 1.117417 2.992418 +v 1.875000 1.062500 3.125000 +v 1.875000 1.117417 3.257582 +v 1.875000 1.250000 3.312500 +v 1.875000 1.382583 3.257582 +v 1.875000 1.437500 3.125000 +v 1.875000 1.382583 2.992418 +v 1.875000 1.250000 2.937500 +v 1.913833 1.382583 2.976333 +v 2.007583 1.437500 3.070082 +v 2.101333 1.382583 3.163832 +v 2.140165 1.250000 3.202665 +v 2.101333 1.117417 3.163832 +v 2.007583 1.062500 3.070082 +v 1.913833 1.117417 2.976333 +v 1.929917 1.117417 2.937500 +v 2.062500 1.062500 2.937500 +v 2.195083 1.117417 2.937500 +v 2.250000 1.250000 2.937500 +v 2.195083 1.382583 2.937500 +v 2.062500 1.437500 2.937500 +v 1.929917 1.382583 2.937500 +v 1.929917 1.382583 2.500000 +v 2.062500 1.437500 2.500000 +v 2.195083 1.382583 2.500000 +v 2.250000 1.250000 2.500000 +v 2.195083 1.117417 2.500000 +v 2.062500 1.062500 2.500000 +v 1.929917 1.117417 2.500000 +v 1.875000 1.250000 2.500000 +v 0.948223 2.676777 -1.551777 +v 0.948223 2.801777 -1.250000 +v 1.125000 2.875000 -1.250000 +v 1.301777 2.801777 -1.250000 +v 1.375000 2.625000 -1.250000 +v 1.301777 2.448223 -1.250000 +v 0.948223 2.448223 -1.250000 +v 0.875000 2.625000 -1.250000 +v 1.625000 2.625000 -1.250000 +v 1.698223 2.448223 -1.250000 +v 2.051777 2.448223 -1.250000 +v 2.125000 2.625000 -1.250000 +v 2.051777 2.801777 -1.250000 +v 1.875000 2.875000 -1.250000 +v 1.698223 2.801777 -1.250000 +v 1.698223 2.676777 -1.551777 +v 1.875000 2.728553 -1.603553 +v 2.051777 2.676777 -1.551777 +v 2.125000 2.551777 -1.426777 +v 2.051777 2.426777 -1.301777 +v 1.698223 2.426777 -1.301777 +v 1.625000 2.551777 -1.426777 +v 1.625000 2.375000 -1.500000 +v 1.698223 2.375000 -1.323223 +v 1.875000 2.375000 -1.250000 +v 2.051777 2.375000 -1.323223 +v 2.125000 2.375000 -1.500000 +v 2.051777 2.375000 -1.676777 +v 1.875000 2.375000 -1.750000 +v 1.698223 2.375000 -1.676777 +v 1.698223 2.000000 -1.676777 +v 1.875000 2.000000 -1.750000 +v 2.051777 2.000000 -1.676777 +v 2.125000 2.000000 -1.500000 +v 2.051777 2.000000 -1.323223 +v 1.875000 2.000000 -1.250000 +v 1.698223 2.000000 -1.323223 +v 1.625000 2.000000 -1.500000 +v 1.625000 2.875000 0.875000 +v 1.625000 2.801777 0.698223 +v 1.625000 2.448223 0.698223 +v 1.625000 2.375000 0.875000 +v 1.625000 2.448223 1.051777 +v 1.625000 2.625000 1.125000 +v 1.625000 2.801777 1.051777 +v 1.926777 2.801777 0.926777 +v 1.978553 2.625000 0.978553 +v 1.926777 2.448223 0.926777 +v 1.801777 2.375000 0.801777 +v 1.676777 2.448223 0.676777 +v 1.676777 2.801777 0.676777 +v 1.801777 2.875000 0.801777 +v 1.875000 2.875000 0.625000 +v 1.698223 2.801777 0.625000 +v 1.625000 2.625000 0.625000 +v 1.698223 2.448223 0.625000 +v 1.875000 2.375000 0.625000 +v 2.051777 2.448223 0.625000 +v 2.125000 2.625000 0.625000 +v 2.051777 2.801777 0.625000 +v 0.948223 2.801777 -1.125000 +v 1.125000 2.875000 -1.125000 +v 1.051777 2.875000 -0.948223 +v 0.926777 2.801777 -1.073223 +v 0.926777 2.448223 -1.073223 +v 1.051777 2.375000 -0.948223 +v 1.176777 2.448223 -0.823223 +v 1.228553 2.625000 -0.771447 +v -0.500000 2.875000 0.875000 +v -0.500000 2.801777 0.698223 +v -0.500000 2.448223 0.698223 +v -0.500000 2.375000 0.875000 +v -0.500000 2.448223 1.051777 +v -0.500000 2.625000 1.125000 +v -0.500000 2.801777 1.051777 +v -0.500000 2.625000 0.625000 +v 0.875000 2.625000 -1.125000 +v 0.948223 2.448223 -1.125000 +v 1.125000 2.375000 -1.125000 +v 1.301777 2.448223 -1.125000 +v 1.375000 2.625000 -1.125000 +v 1.301777 2.801777 -1.125000 +v -0.500000 2.875000 -0.875000 +v -0.500000 2.801777 -1.051777 +v -0.500000 2.448223 -1.051777 +v -0.500000 2.375000 -0.875000 +v -0.500000 2.448223 -0.698223 +v -0.500000 2.625000 -0.625000 +v -0.500000 2.801777 -0.698223 +v -0.500000 2.625000 -1.125000 +v 2.000000 2.000000 -2.250000 +v 2.000000 2.000000 -0.750000 +v 2.000000 1.500000 -0.750000 +v 2.000000 1.500000 -2.250000 +v 2.000000 2.125000 -2.250000 +v 2.000000 2.125000 -0.750000 +v 2.000000 2.000000 -0.625000 +v 2.000000 1.500000 -0.625000 +v 2.000000 2.000000 -2.375000 +v 2.000000 1.500000 -2.375000 +v 1.750000 2.000000 -2.250000 +v 1.750000 1.500000 -2.250000 +v 1.750000 2.000000 -0.750000 +v 1.750000 1.500000 -0.750000 +v 1.750000 2.125000 -0.750000 +v 1.750000 2.125000 -2.250000 +v 1.750000 2.000000 -0.625000 +v 1.750000 1.500000 -0.625000 +v 1.750000 2.000000 -2.375000 +v 1.750000 1.500000 -2.375000 +v 1.250000 2.000000 -2.250000 +v 1.250000 2.000000 -0.750000 +v 1.250000 1.500000 -0.750000 +v 1.250000 1.500000 -2.250000 +v 1.250000 2.125000 -2.250000 +v 1.250000 2.125000 -0.750000 +v 1.250000 2.000000 -0.625000 +v 1.250000 1.500000 -0.625000 +v 1.250000 2.000000 -2.375000 +v 1.250000 1.500000 -2.375000 +v 1.000000 2.000000 -2.250000 +v 1.000000 1.500000 -2.250000 +v 1.000000 2.000000 -0.750000 +v 1.000000 1.500000 -0.750000 +v 1.000000 2.125000 -0.750000 +v 1.000000 2.125000 -2.250000 +v 1.000000 2.000000 -0.625000 +v 1.000000 1.500000 -0.625000 +v 1.000000 2.000000 -2.375000 +v 1.000000 1.500000 -2.375000 +v 1.429917 0.882583 2.500000 +v 1.562500 0.937500 2.500000 +v 1.695083 0.882583 2.500000 +v 1.750000 0.750000 2.500000 +v 1.695083 0.617417 2.500000 +v 1.562500 0.562500 2.500000 +v 1.429917 0.617417 2.500000 +v 1.413833 0.617417 2.538833 +v 1.507583 0.562500 2.632582 +v 1.601333 0.617417 2.726332 +v 1.640165 0.750000 2.765165 +v 1.601333 0.882583 2.726332 +v 1.507583 0.937500 2.632582 +v 1.413833 0.882583 2.538833 +v 1.375000 0.750000 2.500000 +v 1.375000 0.882583 2.554918 +v 1.375000 0.937500 2.687500 +v 1.375000 0.882583 2.820082 +v 1.375000 0.750000 2.875000 +v 1.375000 0.617417 2.820082 +v 1.375000 0.562500 2.687500 +v 1.375000 0.617417 2.554918 +v 0.250000 0.617417 2.554918 +v 0.250000 0.562500 2.687500 +v 0.250000 0.617417 2.820082 +v 0.250000 0.750000 2.875000 +v 0.250000 0.882583 2.820082 +v 0.250000 0.937500 2.687500 +v 0.250000 0.882583 2.554918 +v 0.250000 0.750000 2.500000 +v 0.375000 0.750000 2.937500 +v 0.375000 0.882583 2.992418 +v 0.375000 0.937500 3.125000 +v 0.375000 0.882583 3.257582 +v 0.375000 0.750000 3.312500 +v 0.375000 0.617417 3.257582 +v 0.375000 0.562500 3.125000 +v 0.375000 0.617417 2.992418 +v 1.875000 0.617417 2.992418 +v 1.875000 0.562500 3.125000 +v 1.875000 0.617417 3.257582 +v 1.875000 0.750000 3.312500 +v 1.875000 0.882583 3.257582 +v 1.875000 0.937500 3.125000 +v 1.875000 0.882583 2.992418 +v 1.875000 0.750000 2.937500 +v 1.913833 0.882583 2.976333 +v 2.007583 0.937500 3.070082 +v 2.101333 0.882583 3.163832 +v 2.140165 0.750000 3.202665 +v 2.101333 0.617417 3.163832 +v 2.007583 0.562500 3.070082 +v 1.913833 0.617417 2.976333 +v 1.929917 0.617417 2.937500 +v 2.062500 0.562500 2.937500 +v 2.195083 0.617417 2.937500 +v 2.250000 0.750000 2.937500 +v 2.195083 0.882583 2.937500 +v 2.062500 0.937500 2.937500 +v 1.929917 0.882583 2.937500 +v 1.929917 0.882583 2.500000 +v 2.062500 0.937500 2.500000 +v 2.195083 0.882583 2.500000 +v 2.250000 0.750000 2.500000 +v 2.195083 0.617417 2.500000 +v 2.062500 0.562500 2.500000 +v 1.929917 0.617417 2.500000 +v 1.875000 0.750000 2.500000 +v 1.429917 1.382583 -2.500000 +v 1.562500 1.437500 -2.500000 +v 1.695083 1.382583 -2.500000 +v 1.750000 1.250000 -2.500000 +v 1.695083 1.117417 -2.500000 +v 1.562500 1.062500 -2.500000 +v 1.429917 1.117417 -2.500000 +v 1.413833 1.117417 -2.538833 +v 1.507583 1.062500 -2.632582 +v 1.601333 1.117417 -2.726332 +v 1.640165 1.250000 -2.765165 +v 1.601333 1.382583 -2.726332 +v 1.507583 1.437500 -2.632582 +v 1.413833 1.382583 -2.538833 +v 1.375000 1.250000 -2.500000 +v 1.375000 1.382583 -2.554918 +v 1.375000 1.437500 -2.687500 +v 1.375000 1.382583 -2.820082 +v 1.375000 1.250000 -2.875000 +v 1.375000 1.117417 -2.820082 +v 1.375000 1.062500 -2.687500 +v 1.375000 1.117417 -2.554918 +v 0.250000 1.117417 -2.554918 +v 0.250000 1.062500 -2.687500 +v 0.250000 1.117417 -2.820082 +v 0.250000 1.250000 -2.875000 +v 0.250000 1.382583 -2.820082 +v 0.250000 1.437500 -2.687500 +v 0.250000 1.382583 -2.554918 +v 0.250000 1.250000 -2.500000 +v 0.375000 1.250000 -2.937500 +v 0.375000 1.382583 -2.992418 +v 0.375000 1.437500 -3.125000 +v 0.375000 1.382583 -3.257582 +v 0.375000 1.250000 -3.312500 +v 0.375000 1.117417 -3.257582 +v 0.375000 1.062500 -3.125000 +v 0.375000 1.117417 -2.992418 +v 1.875000 1.117417 -2.992418 +v 1.875000 1.062500 -3.125000 +v 1.875000 1.117417 -3.257582 +v 1.875000 1.250000 -3.312500 +v 1.875000 1.382583 -3.257582 +v 1.875000 1.437500 -3.125000 +v 1.875000 1.382583 -2.992418 +v 1.875000 1.250000 -2.937500 +v 1.913833 1.382583 -2.976333 +v 2.007583 1.437500 -3.070082 +v 2.101333 1.382583 -3.163832 +v 2.140165 1.250000 -3.202665 +v 2.101333 1.117417 -3.163832 +v 2.007583 1.062500 -3.070082 +v 1.913833 1.117417 -2.976333 +v 1.929917 1.117417 -2.937500 +v 2.062500 1.062500 -2.937500 +v 2.195083 1.117417 -2.937500 +v 2.250000 1.250000 -2.937500 +v 2.195083 1.382583 -2.937500 +v 2.062500 1.437500 -2.937500 +v 1.929917 1.382583 -2.937500 +v 1.929917 1.382583 -2.500000 +v 2.062500 1.437500 -2.500000 +v 2.195083 1.382583 -2.500000 +v 2.250000 1.250000 -2.500000 +v 2.195083 1.117417 -2.500000 +v 2.062500 1.062500 -2.500000 +v 1.929917 1.117417 -2.500000 +v 1.875000 1.250000 -2.500000 +v 1.429917 0.882583 -2.500000 +v 1.562500 0.937500 -2.500000 +v 1.695083 0.882583 -2.500000 +v 1.750000 0.750000 -2.500000 +v 1.695083 0.617417 -2.500000 +v 1.562500 0.562500 -2.500000 +v 1.429917 0.617417 -2.500000 +v 1.413833 0.617417 -2.538833 +v 1.507583 0.562500 -2.632582 +v 1.601333 0.617417 -2.726332 +v 1.640165 0.750000 -2.765165 +v 1.601333 0.882583 -2.726332 +v 1.507583 0.937500 -2.632582 +v 1.413833 0.882583 -2.538833 +v 1.375000 0.750000 -2.500000 +v 1.375000 0.882583 -2.554918 +v 1.375000 0.937500 -2.687500 +v 1.375000 0.882583 -2.820082 +v 1.375000 0.750000 -2.875000 +v 1.375000 0.617417 -2.820082 +v 1.375000 0.562500 -2.687500 +v 1.375000 0.617417 -2.554918 +v 0.250000 0.617417 -2.554918 +v 0.250000 0.562500 -2.687500 +v 0.250000 0.617417 -2.820082 +v 0.250000 0.750000 -2.875000 +v 0.250000 0.882583 -2.820082 +v 0.250000 0.937500 -2.687500 +v 0.250000 0.882583 -2.554918 +v 0.250000 0.750000 -2.500000 +v 0.375000 0.750000 -2.937500 +v 0.375000 0.882583 -2.992418 +v 0.375000 0.937500 -3.125000 +v 0.375000 0.882583 -3.257582 +v 0.375000 0.750000 -3.312500 +v 0.375000 0.617417 -3.257582 +v 0.375000 0.562500 -3.125000 +v 0.375000 0.617417 -2.992418 +v 1.875000 0.617417 -2.992418 +v 1.875000 0.562500 -3.125000 +v 1.875000 0.617417 -3.257582 +v 1.875000 0.750000 -3.312500 +v 1.875000 0.882583 -3.257582 +v 1.875000 0.937500 -3.125000 +v 1.875000 0.882583 -2.992418 +v 1.875000 0.750000 -2.937500 +v 1.913833 0.882583 -2.976333 +v 2.007583 0.937500 -3.070082 +v 2.101333 0.882583 -3.163832 +v 2.140165 0.750000 -3.202665 +v 2.101333 0.617417 -3.163832 +v 2.007583 0.562500 -3.070082 +v 1.913833 0.617417 -2.976333 +v 1.929917 0.617417 -2.937500 +v 2.062500 0.562500 -2.937500 +v 2.195083 0.617417 -2.937500 +v 2.250000 0.750000 -2.937500 +v 2.195083 0.882583 -2.937500 +v 2.062500 0.937500 -2.937500 +v 1.929917 0.882583 -2.937500 +v 1.929917 0.882583 -2.500000 +v 2.062500 0.937500 -2.500000 +v 2.195083 0.882583 -2.500000 +v 2.250000 0.750000 -2.500000 +v 2.195083 0.617417 -2.500000 +v 2.062500 0.562500 -2.500000 +v 1.929917 0.617417 -2.500000 +v 1.875000 0.750000 -2.500000 +vt 0.338983 0.000000 +vt 0.022599 0.454545 +vt 0.022599 0.000000 +vt 0.022599 0.500000 +vt 0.338983 0.954545 +vt 0.022599 0.954545 +vt 0.361582 0.954545 +vt 0.338983 0.500000 +vt 0.361582 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.954545 +vt 0.338983 0.454545 +vt 0.022599 1.000000 +vt 0.338983 1.000000 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.677966 0.170455 +vt 0.553672 -0.000000 +vt 0.677966 -0.000000 +vt 0.553672 0.238636 +vt 0.553672 0.170455 +vt 0.677966 0.238636 +vt 0.553672 0.329545 +vt 0.677966 0.329545 +vt 0.553672 0.397727 +vt 0.677966 0.397727 +vt 0.553672 0.568182 +vt 0.553672 0.397727 +vt 0.508475 0.329545 +vt 0.553672 0.329545 +vt 0.553672 0.238636 +vt 0.508475 0.170455 +vt 0.553672 0.170455 +vt 0.553672 0.568182 +vt 0.508475 0.397727 +vt 0.508475 0.238636 +vt 0.553672 -0.000000 +vt 0.723164 0.397727 +vt 0.677966 0.329545 +vt 0.723164 0.329545 +vt 0.723164 0.238636 +vt 0.677966 0.170455 +vt 0.723164 0.170455 +vt 0.723164 0.568182 +vt 0.677966 0.397727 +vt 0.677966 0.238636 +vt 0.723164 -0.000000 +vt 0.988274 0.136340 +vt 0.949153 0.181770 +vt 0.910031 0.045479 +vt 0.988274 0.045478 +vt 0.988274 0.136340 +vt 0.949153 0.181770 +vt 0.497175 0.886364 +vt 0.429379 0.909091 +vt 0.429379 0.886364 +vt 0.632768 0.886364 +vt 0.564972 0.909091 +vt 0.564972 0.886364 +vt 0.497175 0.909091 +vt 0.361582 0.909091 +vt 0.361582 0.886364 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.559322 0.920455 +vt 0.502825 0.943182 +vt 0.502825 0.920455 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.768362 0.454545 +vt 0.858757 0.636364 +vt 0.768362 0.636364 +vt 0.723164 0.454545 +vt 0.723164 0.636364 +vt 0.903955 0.636364 +vt 0.858757 0.454545 +vt 0.903955 0.454545 +vt 0.768362 0.727273 +vt 0.858757 0.727273 +vt 0.858757 0.363636 +vt 0.768362 0.363636 +vt 0.858757 -0.000000 +vt 0.768362 0.090909 +vt 0.768362 -0.000000 +vt 0.768362 0.363636 +vt 0.858757 0.272727 +vt 0.858757 0.363636 +vt 0.903955 0.272727 +vt 0.858757 0.090909 +vt 0.903955 0.090909 +vt 0.723164 0.090909 +vt 0.768362 0.272727 +vt 0.723164 0.272727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.570621 0.920455 +vt 0.632768 0.909091 +vt 0.627119 0.920455 +vt 0.367232 0.920455 +vt 0.423729 0.920455 +vt 0.435028 0.920455 +vt 0.491525 0.920455 +vt 0.367232 0.943182 +vt 0.435028 0.943182 +vt 0.570621 0.943182 +vt 0.728814 0.693182 +vt 0.723164 0.670455 +vt 0.728814 0.670455 +vt 0.740113 0.647727 +vt 0.751412 0.636364 +vt 0.751412 0.647727 +vt 0.762712 0.670455 +vt 0.768362 0.693182 +vt 0.762712 0.693182 +vt 0.751412 0.715909 +vt 0.762712 0.647727 +vt 0.762712 0.727273 +vt 0.751412 0.727273 +vt 0.740113 0.727273 +vt 0.728814 0.715909 +vt 0.740113 0.715909 +vt 0.728814 0.636364 +vt 0.740113 0.636364 +vt 0.418079 0.886364 +vt 0.474576 0.772727 +vt 0.474576 0.886364 +vt 0.451977 0.681818 +vt 0.384181 0.545455 +vt 0.451977 0.545455 +vt 0.474576 0.545455 +vt 0.474576 0.681818 +vt 0.384181 0.681818 +vt 0.451977 0.727273 +vt 0.384181 0.727273 +vt 0.384181 0.500000 +vt 0.451977 0.500000 +vt 0.361582 0.681818 +vt 0.361582 0.545455 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.519774 0.636364 +vt 0.542373 0.818182 +vt 0.519774 0.818182 +vt 0.542373 0.568182 +vt 0.519774 0.568182 +vt 0.519774 0.886364 +vt 0.542373 0.886364 +vt 0.576271 0.818182 +vt 0.542373 0.636364 +vt 0.576271 0.636364 +vt 0.485876 0.636364 +vt 0.485876 0.818182 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.457627 0.738636 +vt 0.389830 0.727273 +vt 0.457627 0.727273 +vt 0.384181 0.727273 +vt 0.361582 0.738636 +vt 0.361582 0.727273 +vt 0.485876 0.738636 +vt 0.463277 0.727273 +vt 0.485876 0.727273 +vt 0.463277 0.738636 +vt 0.457627 0.727273 +vt 0.389830 0.727273 +vt 0.384181 0.738636 +vt 0.389830 0.772727 +vt 0.457627 0.761364 +vt 0.457627 0.772727 +vt 0.361582 0.761364 +vt 0.384181 0.772727 +vt 0.361582 0.772727 +vt 0.463277 0.772727 +vt 0.485876 0.761364 +vt 0.485876 0.772727 +vt 0.457627 0.772727 +vt 0.463277 0.761364 +vt 0.389830 0.772727 +vt 0.384181 0.761364 +vt 0.389830 0.727273 +vt 0.384181 0.738636 +vt 0.384181 0.727273 +vt 0.463277 0.727273 +vt 0.463277 0.738636 +vt 0.457627 0.727273 +vt 0.389830 0.761364 +vt 0.389830 0.738636 +vt 0.485876 0.738636 +vt 0.485876 0.727273 +vt 0.361582 0.738636 +vt 0.361582 0.727273 +vt 0.457627 0.738636 +vt 0.389830 0.727273 +vt 0.457627 0.727273 +vt 0.389830 0.772727 +vt 0.457627 0.761364 +vt 0.457627 0.772727 +vt 0.361582 0.761364 +vt 0.384181 0.772727 +vt 0.361582 0.772727 +vt 0.463277 0.772727 +vt 0.485876 0.761364 +vt 0.485876 0.772727 +vt 0.457627 0.772727 +vt 0.463277 0.761364 +vt 0.389830 0.772727 +vt 0.384181 0.761364 +vt 0.389830 0.761364 +vt 0.389830 0.738636 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.677966 0.568182 +vt 0.508475 0.568182 +vt 0.508475 -0.000000 +vt 0.677966 0.568182 +vt 0.677966 -0.000000 +vt 0.926566 0.169597 +vt 0.910031 0.136340 +vt 0.903979 0.090909 +vt 0.926566 0.012221 +vt 0.988274 0.045478 +vt 0.949153 0.000048 +vt 0.971740 0.012221 +vt 0.994327 0.090909 +vt 0.971740 0.169597 +vt 0.926566 0.169597 +vt 0.910031 0.136340 +vt 0.903979 0.090909 +vt 0.910031 0.045479 +vt 0.926566 0.012221 +vt 0.949153 0.000048 +vt 0.971740 0.012221 +vt 0.994327 0.090909 +vt 0.971740 0.169597 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.559322 0.943182 +vt 0.423729 0.943182 +vt 0.491525 0.943182 +vt 0.627119 0.943182 +vt 0.723164 0.693182 +vt 0.768362 0.670455 +vt 0.762712 0.636364 +vt 0.762712 0.715909 +vt 0.728814 0.727273 +vt 0.728814 0.647727 +vt 0.418079 0.772727 +vt 1.000000 0.454545 +vt 0.994350 0.409091 +vt 1.000000 0.409091 +vt 1.000000 0.227273 +vt 0.994350 0.181818 +vt 1.000000 0.181818 +vt 1.000000 0.318182 +vt 0.994350 0.272727 +vt 1.000000 0.272727 +vt 1.000000 0.090909 +vt 0.994350 0.045455 +vt 1.000000 0.045455 +vt 1.000000 0.500000 +vt 0.994350 0.454545 +vt 0.994350 0.227273 +vt 1.000000 0.363636 +vt 0.994350 0.318182 +vt 1.000000 0.136364 +vt 0.994350 0.090909 +vt 1.000000 0.545455 +vt 0.994350 0.500000 +vt 0.994350 0.363636 +vt 0.994350 0.136364 +vt 0.994350 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.045455 +vt 0.994350 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.136364 +vt 0.994350 0.181818 +vt 0.994350 0.136364 +vt 1.000000 0.409091 +vt 0.994350 0.363636 +vt 1.000000 0.363636 +vt 1.000000 0.545455 +vt 0.994350 0.500000 +vt 1.000000 0.500000 +vt 0.994350 0.090909 +vt 1.000000 0.090909 +vt 0.994350 0.318182 +vt 1.000000 0.318182 +vt 1.000000 0.272727 +vt 0.994350 0.227273 +vt 1.000000 0.227273 +vt 0.994350 0.454545 +vt 1.000000 0.454545 +vt 0.994350 0.045455 +vt 0.994350 0.272727 +vt 1.000000 0.181818 +vt 0.994350 0.409091 +vt 0.884181 0.823864 +vt 0.892655 0.795455 +vt 0.892655 0.829545 +vt 0.909605 0.812500 +vt 0.901130 0.795455 +vt 0.909605 0.795455 +vt 0.875706 0.812500 +vt 0.867232 0.795455 +vt 0.875706 0.795455 +vt 0.884181 0.795455 +vt 0.901130 0.823864 +vt 0.918079 0.795455 +vt 0.909605 0.778409 +vt 0.918079 0.789773 +vt 0.901130 0.767045 +vt 0.875706 0.778409 +vt 0.884181 0.767045 +vt 0.901130 0.875000 +vt 0.901130 0.869318 +vt 0.909605 0.875000 +vt 0.901130 0.880682 +vt 0.918079 0.869318 +vt 0.918079 0.875000 +vt 0.918079 0.880682 +vt 0.875706 0.875000 +vt 0.867232 0.846591 +vt 0.875706 0.840909 +vt 0.892655 0.875000 +vt 0.884181 0.846591 +vt 0.892655 0.857955 +vt 0.926554 0.857955 +vt 0.926554 0.875000 +vt 0.909605 0.943182 +vt 0.918079 0.909091 +vt 0.918079 0.943182 +vt 0.892655 0.943182 +vt 0.901130 0.909091 +vt 0.901130 0.943182 +vt 0.875706 0.943182 +vt 0.884181 0.909091 +vt 0.884181 0.943182 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.694915 0.909091 +vt 0.694915 0.897727 +vt 0.697740 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.697740 0.829545 +vt 0.694915 0.829545 +vt 0.692090 0.829545 +vt 0.694915 0.840909 +vt 0.706215 0.852273 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.706215 0.875000 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.863636 +vt 0.683616 0.875000 +vt 0.632768 0.829545 +vt 0.683616 0.840909 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.632768 0.875000 +vt 0.683616 0.886364 +vt 0.632768 0.886364 +vt 0.632768 0.897727 +vt 0.683616 0.909091 +vt 0.632768 0.909091 +vt 0.632768 0.818182 +vt 0.683616 0.829545 +vt 0.683616 0.897727 +vt 0.632768 0.795455 +vt 0.700565 0.806818 +vt 0.632768 0.806818 +vt 0.632768 0.772727 +vt 0.700565 0.784091 +vt 0.632768 0.784091 +vt 0.632768 0.750000 +vt 0.700565 0.761364 +vt 0.632768 0.761364 +vt 0.632768 0.727273 +vt 0.700565 0.738636 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.706215 0.795455 +vt 0.711864 0.806818 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.711864 0.750000 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.761364 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.714689 0.738636 +vt 0.717514 0.750000 +vt 0.714689 0.806818 +vt 0.723164 0.784091 +vt 0.723164 0.761364 +vt 0.709040 0.738636 +vt 0.711864 0.727273 +vt 0.711864 0.818182 +vt 0.723164 0.750000 +vt 0.742938 0.761364 +vt 0.742938 0.784091 +vt 0.723164 0.727273 +vt 0.742938 0.738636 +vt 0.723164 0.738636 +vt 0.723164 0.806818 +vt 0.742938 0.818182 +vt 0.723164 0.818182 +vt 0.723164 0.795455 +vt 0.742938 0.806818 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.858757 0.943182 +vt 0.867232 0.909091 +vt 0.867232 0.943182 +vt 0.926554 0.909091 +vt 0.926554 0.943182 +vt 0.909605 0.909091 +vt 0.892655 0.909091 +vt 0.875706 0.909091 +vt 0.892655 0.892045 +vt 0.867232 0.903409 +vt 0.884181 0.875000 +vt 0.926554 0.892045 +vt 0.858757 0.892045 +vt 0.867232 0.875000 +vt 0.884181 0.903409 +vt 0.858757 0.875000 +vt 0.926554 0.647727 +vt 0.935028 0.619318 +vt 0.935028 0.647727 +vt 0.943503 0.647727 +vt 0.951977 0.619318 +vt 0.951977 0.647727 +vt 0.968927 0.647727 +vt 0.960452 0.630682 +vt 0.968927 0.642045 +vt 0.951977 0.676136 +vt 0.926554 0.664773 +vt 0.935028 0.676136 +vt 0.985876 0.653409 +vt 0.994350 0.647727 +vt 0.994350 0.664773 +vt 0.960452 0.664773 +vt 0.960452 0.647727 +vt 0.943503 0.681818 +vt 0.968927 0.653409 +vt 0.935028 0.715909 +vt 0.943503 0.715909 +vt 0.951977 0.715909 +vt 0.960452 0.681818 +vt 0.960452 0.715909 +vt 0.968927 0.715909 +vt 0.977401 0.681818 +vt 0.977401 0.715909 +vt 0.985876 0.715909 +vt 0.994350 0.681818 +vt 0.994350 0.715909 +vt 0.926554 0.715909 +vt 0.935028 0.681818 +vt 0.951977 0.681818 +vt 0.968927 0.681818 +vt 0.985876 0.681818 +vt 0.985876 0.647727 +vt 0.994350 0.630682 +vt 0.943503 0.613636 +vt 0.977401 0.647727 +vt 0.985876 0.642045 +vt 0.943503 0.409091 +vt 0.951977 0.380682 +vt 0.951977 0.409091 +vt 0.960452 0.409091 +vt 0.968927 0.380682 +vt 0.968927 0.409091 +vt 0.985876 0.409091 +vt 0.977401 0.392045 +vt 0.985876 0.403409 +vt 0.960452 0.443182 +vt 0.968927 0.437500 +vt 0.951977 0.437500 +vt 0.943503 0.426136 +vt 0.935028 0.409091 +vt 0.977401 0.409091 +vt 0.977401 0.426136 +vt 0.985876 0.414773 +vt 0.935028 0.613636 +vt 0.943503 0.443182 +vt 0.926554 0.613636 +vt 0.935028 0.443182 +vt 0.985876 0.613636 +vt 0.994350 0.443182 +vt 0.994350 0.613636 +vt 0.977401 0.613636 +vt 0.985876 0.443182 +vt 0.968927 0.613636 +vt 0.977401 0.443182 +vt 0.960452 0.613636 +vt 0.968927 0.443182 +vt 0.951977 0.613636 +vt 0.951977 0.443182 +vt 0.943503 0.392045 +vt 0.960452 0.375000 +vt 0.935028 0.414773 +vt 0.926554 0.409091 +vt 0.935028 0.403409 +vt 0.994350 0.409091 +vt 0.951977 0.375000 +vt 0.960452 0.181818 +vt 0.968927 0.375000 +vt 0.977401 0.181818 +vt 0.977401 0.375000 +vt 0.935028 0.375000 +vt 0.943503 0.181818 +vt 0.943503 0.375000 +vt 0.985876 0.375000 +vt 0.994350 0.181818 +vt 0.994350 0.375000 +vt 0.926554 0.375000 +vt 0.935028 0.181818 +vt 0.951977 0.181818 +vt 0.968927 0.181818 +vt 0.985876 0.181818 +vt 0.918079 0.801136 +vt 0.867232 0.840909 +vt 0.875706 0.829545 +vt 0.858757 0.840909 +vt 0.867232 0.829545 +vt 0.926554 0.840909 +vt 0.918079 0.829545 +vt 0.926554 0.829545 +vt 0.909605 0.840909 +vt 0.918079 0.840909 +vt 0.901130 0.840909 +vt 0.909605 0.829545 +vt 0.892655 0.840909 +vt 0.901130 0.829545 +vt 0.884181 0.840909 +vt 0.884181 0.829545 +vt 0.892655 0.761364 +vt 0.867232 0.801136 +vt 0.858757 0.795455 +vt 0.867232 0.789773 +vt 0.926554 0.795455 +vt 0.884181 0.761364 +vt 0.892655 0.636364 +vt 0.901130 0.761364 +vt 0.909605 0.636364 +vt 0.909605 0.761364 +vt 0.867232 0.761364 +vt 0.875706 0.636364 +vt 0.875706 0.761364 +vt 0.918079 0.761364 +vt 0.926554 0.636364 +vt 0.926554 0.761364 +vt 0.858757 0.761364 +vt 0.867232 0.636364 +vt 0.884181 0.636364 +vt 0.901130 0.636364 +vt 0.918079 0.636364 +vt 0.694915 0.909091 +vt 0.694915 0.897727 +vt 0.697740 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.697740 0.829545 +vt 0.694915 0.829545 +vt 0.692090 0.829545 +vt 0.694915 0.840909 +vt 0.706215 0.852273 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.706215 0.875000 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.863636 +vt 0.683616 0.875000 +vt 0.632768 0.829545 +vt 0.683616 0.840909 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.632768 0.875000 +vt 0.683616 0.886364 +vt 0.632768 0.886364 +vt 0.632768 0.897727 +vt 0.683616 0.909091 +vt 0.632768 0.909091 +vt 0.632768 0.818182 +vt 0.683616 0.829545 +vt 0.683616 0.897727 +vt 0.632768 0.795455 +vt 0.700565 0.806818 +vt 0.632768 0.806818 +vt 0.632768 0.772727 +vt 0.700565 0.784091 +vt 0.632768 0.784091 +vt 0.632768 0.750000 +vt 0.700565 0.761364 +vt 0.632768 0.761364 +vt 0.632768 0.727273 +vt 0.700565 0.738636 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.706215 0.795455 +vt 0.711864 0.806818 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.711864 0.750000 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.761364 +vt 0.717514 0.795455 +vt 0.723164 0.761364 +vt 0.723164 0.772727 +vt 0.717514 0.750000 +vt 0.714689 0.806818 +vt 0.723164 0.784091 +vt 0.709040 0.738636 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.723164 0.750000 +vt 0.742938 0.761364 +vt 0.742938 0.784091 +vt 0.723164 0.727273 +vt 0.742938 0.738636 +vt 0.723164 0.738636 +vt 0.723164 0.806818 +vt 0.742938 0.818182 +vt 0.723164 0.818182 +vt 0.723164 0.795455 +vt 0.742938 0.806818 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.694915 0.909091 +vt 0.697740 0.897727 +vt 0.694915 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.694915 0.829545 +vt 0.697740 0.829545 +vt 0.692090 0.829545 +vt 0.706215 0.852273 +vt 0.694915 0.840909 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.706215 0.875000 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.875000 +vt 0.683616 0.863636 +vt 0.683616 0.840909 +vt 0.632768 0.829545 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.683616 0.886364 +vt 0.632768 0.875000 +vt 0.632768 0.886364 +vt 0.683616 0.909091 +vt 0.632768 0.897727 +vt 0.632768 0.909091 +vt 0.683616 0.829545 +vt 0.632768 0.818182 +vt 0.683616 0.897727 +vt 0.700565 0.806818 +vt 0.632768 0.795455 +vt 0.632768 0.806818 +vt 0.700565 0.784091 +vt 0.632768 0.772727 +vt 0.632768 0.784091 +vt 0.700565 0.761364 +vt 0.632768 0.750000 +vt 0.632768 0.761364 +vt 0.700565 0.738636 +vt 0.632768 0.727273 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.711864 0.806818 +vt 0.706215 0.795455 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.709040 0.738636 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.750000 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.711864 0.761364 +vt 0.717514 0.750000 +vt 0.723164 0.761364 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.714689 0.806818 +vt 0.742938 0.761364 +vt 0.723164 0.750000 +vt 0.742938 0.784091 +vt 0.723164 0.784091 +vt 0.742938 0.738636 +vt 0.723164 0.727273 +vt 0.723164 0.738636 +vt 0.742938 0.818182 +vt 0.723164 0.806818 +vt 0.723164 0.818182 +vt 0.742938 0.806818 +vt 0.723164 0.795455 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.694915 0.909091 +vt 0.697740 0.897727 +vt 0.694915 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.694915 0.829545 +vt 0.697740 0.829545 +vt 0.692090 0.829545 +vt 0.706215 0.852273 +vt 0.694915 0.840909 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.706215 0.875000 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.875000 +vt 0.683616 0.863636 +vt 0.683616 0.840909 +vt 0.632768 0.829545 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.683616 0.886364 +vt 0.632768 0.875000 +vt 0.632768 0.886364 +vt 0.683616 0.909091 +vt 0.632768 0.897727 +vt 0.632768 0.909091 +vt 0.683616 0.829545 +vt 0.632768 0.818182 +vt 0.683616 0.897727 +vt 0.700565 0.806818 +vt 0.632768 0.795455 +vt 0.632768 0.806818 +vt 0.700565 0.784091 +vt 0.632768 0.772727 +vt 0.632768 0.784091 +vt 0.700565 0.761364 +vt 0.632768 0.750000 +vt 0.632768 0.761364 +vt 0.700565 0.738636 +vt 0.632768 0.727273 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.711864 0.806818 +vt 0.706215 0.795455 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.709040 0.738636 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.750000 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.711864 0.761364 +vt 0.717514 0.750000 +vt 0.723164 0.761364 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.714689 0.806818 +vt 0.742938 0.761364 +vt 0.723164 0.750000 +vt 0.742938 0.784091 +vt 0.723164 0.784091 +vt 0.742938 0.738636 +vt 0.723164 0.727273 +vt 0.723164 0.738636 +vt 0.742938 0.818182 +vt 0.723164 0.806818 +vt 0.723164 0.818182 +vt 0.742938 0.806818 +vt 0.723164 0.795455 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.994350 0.545455 +vt 0.994350 0.545455 +vt 0.646893 0.704545 +vt 0.646893 0.704545 +vt 0.646893 0.704545 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.858757 0.909091 +vt 0.858757 0.857955 +vt 0.926554 0.630682 +vt 0.926554 0.681818 +vt 0.926554 0.443182 +vt 0.926554 0.181818 +vt 0.858757 0.829545 +vt 0.858757 0.636364 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.5547 0.8321 0.0000 +vn 0.5547 0.8321 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn -0.8660 -0.5000 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.7194 0.6794 0.1448 +vn 0.9824 -0.0000 0.1866 +vn 0.0473 -0.9987 0.0196 +vn 0.5294 -0.6630 0.5294 +vn 0.0671 -0.9955 0.0671 +vn 0.0473 0.9987 0.0196 +vn -0.4617 0.7574 -0.4617 +vn 0.0671 0.9955 0.0671 +vn 0.5294 0.6630 0.5294 +vn 0.7194 -0.6794 0.1448 +vn -0.4617 -0.7574 -0.4617 +vn 0.0196 -0.9987 0.0473 +vn -0.1363 -0.7263 -0.6737 +vn 0.1448 -0.6794 0.7194 +vn 0.0196 0.9987 0.0473 +vn 0.1448 0.6794 0.7194 +vn 0.7574 -0.4617 0.4617 +vn 0.7263 -0.6737 0.1363 +vn -0.0000 -0.7071 0.7071 +vn 0.7263 -0.1363 0.6737 +vn -0.7263 -0.6737 0.1363 +vn -0.7574 -0.4617 0.4617 +vn -0.7263 -0.1363 0.6737 +vn -0.6794 0.7194 -0.1448 +vn 0.0000 0.9824 -0.1866 +vn 0.9955 0.0671 -0.0671 +vn 0.6794 0.7194 -0.1448 +vn 0.9987 0.0473 -0.0196 +vn -0.9987 0.0473 -0.0196 +vn -0.9955 0.0671 -0.0671 +vn 0.6794 0.1448 -0.7194 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.1944 0.0000 -0.9809 +vn -0.6303 0.7311 -0.2611 +vn -0.1363 0.7263 -0.6737 +vn -0.6303 -0.7311 -0.2611 +vn 0.7150 -0.6333 0.2962 +vn 0.9239 0.0000 0.3827 +vn 0.7150 0.6333 0.2962 +vn 0.0948 -0.9947 0.0393 +vn 0.0948 0.9947 0.0393 +vn 0.1866 -0.0000 0.9824 +vn 0.0000 -0.7071 -0.7071 +vn -0.6737 -0.7263 -0.1363 +vn -0.6737 0.7263 -0.1363 +vn -0.6794 0.1448 -0.7194 +vn -0.9987 0.0196 -0.0473 +vn 0.9987 0.0196 -0.0473 +vn 0.0000 0.1866 -0.9824 +vn 0.6630 0.5294 -0.5294 +vn -0.6630 0.5294 -0.5294 +vn -0.1944 0.0000 0.9809 +vn -0.6303 0.7311 0.2611 +vn -0.4617 0.7574 0.4617 +vn -0.1363 0.7263 0.6737 +vn -0.4617 -0.7574 0.4617 +vn -0.6303 -0.7311 0.2611 +vn -0.1363 -0.7263 0.6737 +vn 0.7150 -0.6333 -0.2962 +vn 0.0671 -0.9955 -0.0671 +vn 0.5294 -0.6630 -0.5294 +vn 0.5294 0.6630 -0.5294 +vn 0.9239 0.0000 -0.3827 +vn 0.0948 0.9947 -0.0393 +vn 0.0671 0.9955 -0.0671 +vn 0.0948 -0.9947 -0.0393 +vn 0.7150 0.6333 -0.2962 +vn 0.0196 -0.9987 -0.0473 +vn 0.1448 -0.6794 -0.7194 +vn 0.0196 0.9987 -0.0473 +vn 0.1448 0.6794 -0.7194 +vn 0.1866 -0.0000 -0.9824 +vn 0.0473 0.9987 -0.0196 +vn 0.9824 -0.0000 -0.1866 +vn 0.0473 -0.9987 -0.0196 +vn 0.7194 -0.6794 -0.1448 +vn -0.6737 -0.7263 0.1363 +vn -0.6737 0.7263 0.1363 +vn 0.7194 0.6794 -0.1448 +s off +f 35/45/16 34/46/16 33/47/16 +f 38/48/17 39/49/17 37/50/17 +f 35/51/18 40/52/18 36/53/18 +f 34/54/19 37/50/19 33/55/19 +f 36/56/20 38/48/20 34/46/20 +f 33/57/21 39/49/21 35/58/21 +f 58/59/22 61/60/22 57/61/22 +f 46/62/22 49/63/22 45/64/22 +f 44/65/20 47/66/20 42/67/20 +f 41/68/21 45/69/21 43/70/21 +f 43/71/18 48/72/18 44/73/18 +f 42/67/19 46/74/19 41/68/19 +f 51/75/17 49/63/17 50/76/17 +f 45/77/18 52/78/18 48/72/18 +f 47/66/19 50/76/19 46/74/19 +f 48/79/23 51/75/23 47/80/23 +f 56/81/20 59/82/20 54/83/20 +f 53/84/21 57/85/21 55/86/21 +f 55/87/18 60/88/18 56/89/18 +f 54/83/19 58/90/19 53/84/19 +f 63/91/17 61/60/17 62/92/17 +f 57/93/18 64/94/18 60/88/18 +f 59/82/19 62/92/19 58/90/19 +f 60/95/23 63/91/23 59/96/23 +f 70/97/22 73/98/22 69/99/22 +f 68/100/20 71/101/20 66/102/20 +f 65/103/21 69/104/21 67/105/21 +f 67/106/18 72/107/18 68/108/18 +f 66/102/19 70/109/19 65/103/19 +f 75/110/17 73/98/17 74/111/17 +f 69/112/18 76/113/18 72/107/18 +f 71/101/19 74/111/19 70/109/19 +f 72/114/23 75/110/23 71/115/23 +f 82/116/22 85/117/22 81/118/22 +f 80/119/20 83/120/20 78/121/20 +f 77/122/21 81/123/21 79/124/21 +f 79/125/18 84/126/18 80/127/18 +f 78/121/19 82/128/19 77/122/19 +f 87/129/17 85/117/17 86/130/17 +f 81/131/18 88/132/18 84/126/18 +f 83/120/19 86/130/19 82/128/19 +f 84/133/23 87/129/23 83/134/23 +f 91/135/20 90/136/20 89/137/20 +f 91/135/23 94/138/23 92/139/23 +f 93/140/17 96/141/17 94/138/17 +f 95/142/22 98/143/22 96/141/22 +f 97/144/21 100/145/21 98/143/21 +f 105/146/22 110/147/22 104/148/22 +f 103/149/23 108/150/23 102/151/23 +f 106/152/21 111/153/21 105/146/21 +f 104/148/17 109/154/17 103/149/17 +f 108/150/20 101/155/20 102/151/20 +f 117/156/22 122/157/22 116/158/22 +f 115/159/23 120/160/23 114/161/23 +f 118/162/21 123/163/21 117/156/21 +f 116/158/17 121/164/17 115/159/17 +f 120/160/20 113/165/20 114/161/20 +f 147/166/19 137/167/19 141/168/19 +f 152/169/18 150/170/18 160/171/18 +f 257/172/20 279/173/20 259/174/20 +f 260/175/21 277/176/21 258/177/21 +f 258/177/18 280/178/18 257/172/18 +f 259/174/19 278/179/19 260/180/19 +f 179/181/20 185/182/20 177/183/20 +f 173/184/20 184/185/20 175/186/20 +f 175/187/19 183/188/19 176/189/19 +f 176/190/21 181/191/21 174/192/21 +f 174/193/18 182/194/18 173/195/18 +f 178/196/17 181/197/17 177/198/17 +f 179/199/17 184/200/17 180/201/17 +f 177/183/17 183/202/17 179/181/17 +f 180/203/17 182/204/17 178/205/17 +f 185/182/17 188/206/17 186/207/17 +f 177/198/19 186/207/19 178/196/19 +f 178/205/21 188/206/21 180/203/21 +f 180/201/18 187/208/18 179/199/18 +f 189/209/17 192/210/17 190/211/17 +f 199/212/20 205/213/20 197/214/20 +f 193/215/20 204/216/20 195/217/20 +f 195/218/19 203/219/19 196/220/19 +f 196/221/21 201/222/21 194/223/21 +f 194/224/18 202/225/18 193/226/18 +f 198/227/17 201/228/17 197/229/17 +f 199/230/17 204/231/17 200/232/17 +f 197/214/17 203/233/17 199/212/17 +f 200/234/17 202/235/17 198/236/17 +f 205/213/17 208/237/17 206/238/17 +f 197/229/19 206/238/19 198/227/19 +f 198/236/21 208/237/21 200/234/21 +f 200/232/18 207/239/18 199/230/18 +f 209/240/17 212/241/17 210/242/17 +f 219/243/20 225/244/20 217/245/20 +f 213/246/20 224/247/20 215/248/20 +f 215/249/19 223/250/19 216/251/19 +f 216/252/21 221/253/21 214/254/21 +f 214/255/18 222/256/18 213/257/18 +f 218/258/17 221/259/17 217/260/17 +f 219/261/17 224/262/17 220/263/17 +f 217/245/17 223/264/17 219/243/17 +f 220/265/17 222/266/17 218/267/17 +f 225/244/17 228/268/17 226/269/17 +f 217/260/19 226/269/19 218/258/19 +f 218/267/21 228/268/21 220/265/21 +f 220/263/18 227/270/18 219/261/18 +f 229/271/17 232/272/17 230/273/17 +f 239/274/20 245/275/20 237/276/20 +f 233/277/20 244/278/20 235/279/20 +f 235/280/19 243/281/19 236/282/19 +f 236/283/21 241/284/21 234/285/21 +f 234/286/18 242/287/18 233/288/18 +f 238/289/17 241/290/17 237/291/17 +f 239/292/17 244/293/17 240/294/17 +f 237/276/17 243/295/17 239/274/17 +f 240/296/17 242/297/17 238/298/17 +f 245/275/17 248/299/17 246/300/17 +f 237/291/19 246/300/19 238/289/19 +f 238/298/21 248/299/21 240/296/21 +f 240/294/18 247/301/18 239/292/18 +f 249/302/17 252/303/17 250/304/17 +f 255/305/19 284/306/19 256/307/19 +f 357/308/17 355/309/17 356/310/17 +f 267/311/17 266/312/17 268/313/17 +f 262/314/19 268/313/19 261/315/19 +f 263/316/18 265/317/18 264/318/18 +f 261/319/21 266/312/21 263/320/21 +f 264/321/20 267/311/20 262/322/20 +f 273/323/20 270/324/20 275/325/20 +f 276/326/21 271/327/21 274/328/21 +f 274/329/18 272/330/18 273/331/18 +f 275/332/19 269/333/19 276/334/19 +f 270/324/17 271/327/17 269/333/17 +f 365/335/17 363/336/17 364/337/17 +f 255/338/17 278/339/17 253/340/17 +f 253/341/17 279/173/17 254/342/17 +f 254/343/17 280/178/17 256/344/17 +f 256/307/17 277/176/17 255/305/17 +f 254/342/18 282/345/18 253/341/18 +f 256/344/21 283/346/21 254/343/21 +f 253/340/20 281/347/20 255/338/20 +f 286/348/19 298/349/19 287/350/19 +f 288/351/20 300/352/20 291/353/20 +f 292/354/18 294/355/18 289/356/18 +f 288/351/17 292/354/17 290/357/17 +f 300/352/24 292/358/24 291/353/24 +f 290/357/25 294/359/25 293/360/25 +f 296/361/26 286/362/26 285/363/26 +f 288/351/27 298/364/27 297/365/27 +f 290/357/21 296/361/21 285/363/21 +f 301/366/17 304/367/17 303/368/17 +f 336/369/17 337/370/17 335/371/17 +f 336/369/18 342/372/18 341/373/18 +f 338/374/21 341/375/21 339/376/21 +f 335/371/20 340/377/20 342/378/20 +f 337/370/19 339/379/19 340/380/19 +f 351/381/18 358/382/18 354/383/18 +f 349/384/17 347/385/17 348/386/17 +f 346/387/20 349/384/20 344/388/20 +f 343/389/21 347/385/21 345/390/21 +f 345/391/18 350/392/18 346/393/18 +f 344/394/19 348/386/19 343/395/19 +f 353/396/19 356/310/19 352/397/19 +f 354/398/20 357/308/20 353/399/20 +f 352/400/21 355/309/21 351/401/21 +f 359/402/18 366/403/18 362/404/18 +f 361/405/19 364/337/19 360/406/19 +f 362/407/20 365/335/20 361/408/20 +f 360/409/21 363/336/21 359/410/21 +f 373/411/17 371/412/17 372/413/17 +f 367/414/18 374/415/18 370/416/18 +f 369/417/19 372/413/19 368/418/19 +f 370/419/20 373/411/20 369/420/20 +f 368/421/21 371/412/21 367/422/21 +f 381/423/17 379/424/17 380/425/17 +f 375/426/18 382/427/18 378/428/18 +f 377/429/19 380/425/19 376/430/19 +f 378/431/20 381/423/20 377/432/20 +f 376/433/21 379/424/21 375/434/21 +f 389/435/17 387/436/17 388/437/17 +f 383/438/18 390/439/18 386/440/18 +f 385/441/19 388/437/19 384/442/19 +f 386/443/20 389/435/20 385/444/20 +f 384/445/21 387/436/21 383/446/21 +f 601/447/20 598/448/20 597/449/20 +f 598/450/20 604/451/20 599/452/20 +f 606/453/20 597/454/20 600/455/20 +f 597/454/20 605/456/20 601/457/20 +f 602/458/20 603/459/20 598/450/20 +f 609/460/21 612/461/21 607/462/21 +f 614/463/21 609/464/21 610/465/21 +f 607/466/21 616/467/21 608/468/21 +f 607/466/21 612/469/21 615/470/21 +f 611/471/21 609/464/21 613/472/21 +f 622/473/20 623/474/20 618/475/20 +f 615/470/28 601/447/28 605/456/28 +f 617/476/20 625/477/20 621/478/20 +f 616/467/18 605/456/18 606/453/18 +f 613/472/19 604/451/19 603/459/19 +f 611/479/29 603/459/29 602/480/29 +f 612/461/17 602/480/17 601/447/17 +f 626/481/20 617/476/20 620/482/20 +f 618/475/20 624/483/20 619/484/20 +f 621/485/20 618/486/20 617/487/20 +f 629/488/21 632/489/21 627/490/21 +f 634/491/21 629/492/21 630/493/21 +f 627/494/21 636/495/21 628/496/21 +f 627/494/21 632/497/21 635/498/21 +f 631/499/21 629/492/21 633/500/21 +f 635/498/28 621/485/28 625/477/28 +f 636/495/18 625/477/18 626/481/18 +f 633/500/19 624/483/19 623/474/19 +f 631/501/29 623/474/29 622/502/29 +f 632/489/17 622/502/17 621/485/17 +f 35/45/16 36/56/16 34/46/16 +f 38/48/17 40/52/17 39/49/17 +f 35/51/18 39/49/18 40/52/18 +f 34/54/19 38/48/19 37/50/19 +f 36/56/20 40/52/20 38/48/20 +f 33/57/21 37/50/21 39/49/21 +f 58/59/22 62/92/22 61/60/22 +f 46/62/22 50/76/22 49/63/22 +f 44/65/20 48/503/20 47/66/20 +f 41/68/21 46/74/21 45/69/21 +f 43/71/18 45/77/18 48/72/18 +f 42/67/19 47/66/19 46/74/19 +f 51/75/17 52/78/17 49/63/17 +f 45/77/18 49/63/18 52/78/18 +f 47/66/19 51/75/19 50/76/19 +f 48/79/23 52/78/23 51/75/23 +f 56/81/20 60/504/20 59/82/20 +f 53/84/21 58/90/21 57/85/21 +f 55/87/18 57/93/18 60/88/18 +f 54/83/19 59/82/19 58/90/19 +f 63/91/17 64/94/17 61/60/17 +f 57/93/18 61/60/18 64/94/18 +f 59/82/19 63/91/19 62/92/19 +f 60/95/23 64/94/23 63/91/23 +f 70/97/22 74/111/22 73/98/22 +f 68/100/20 72/505/20 71/101/20 +f 65/103/21 70/109/21 69/104/21 +f 67/106/18 69/112/18 72/107/18 +f 66/102/19 71/101/19 70/109/19 +f 75/110/17 76/113/17 73/98/17 +f 69/112/18 73/98/18 76/113/18 +f 71/101/19 75/110/19 74/111/19 +f 72/114/23 76/113/23 75/110/23 +f 82/116/22 86/130/22 85/117/22 +f 80/119/20 84/506/20 83/120/20 +f 77/122/21 82/128/21 81/123/21 +f 79/125/18 81/131/18 84/126/18 +f 78/121/19 83/120/19 82/128/19 +f 87/129/17 88/132/17 85/117/17 +f 81/131/18 85/117/18 88/132/18 +f 83/120/19 87/129/19 86/130/19 +f 84/133/23 88/132/23 87/129/23 +f 91/135/20 92/139/20 90/136/20 +f 91/135/23 93/140/23 94/138/23 +f 93/140/17 95/142/17 96/141/17 +f 95/142/22 97/144/22 98/143/22 +f 97/144/21 99/507/21 100/145/21 +f 105/146/22 111/153/22 110/147/22 +f 103/149/23 109/154/23 108/150/23 +f 106/152/21 112/508/21 111/153/21 +f 104/148/17 110/147/17 109/154/17 +f 108/150/20 107/509/20 101/155/20 +f 117/156/22 123/163/22 122/157/22 +f 115/159/23 121/164/23 120/160/23 +f 118/162/21 124/510/21 123/163/21 +f 116/158/17 122/157/17 121/164/17 +f 120/160/20 119/511/20 113/165/20 +f 137/167/19 138/512/19 139/513/19 +f 139/513/19 140/514/19 141/168/19 +f 141/168/19 142/515/19 145/516/19 +f 142/515/19 143/517/19 145/516/19 +f 143/517/19 144/518/19 145/516/19 +f 145/516/19 146/519/19 147/166/19 +f 147/166/19 148/520/19 137/167/19 +f 137/167/19 139/513/19 141/168/19 +f 145/516/19 147/166/19 141/168/19 +f 160/171/18 159/521/18 158/522/18 +f 158/522/18 157/523/18 156/524/18 +f 156/524/18 155/525/18 154/526/18 +f 154/526/18 153/527/18 152/169/18 +f 152/169/18 151/528/18 150/170/18 +f 150/170/18 149/529/18 160/171/18 +f 160/171/18 158/522/18 156/524/18 +f 156/524/18 154/526/18 160/171/18 +f 154/526/18 152/169/18 160/171/18 +f 257/172/20 280/178/20 279/173/20 +f 260/175/21 278/339/21 277/176/21 +f 258/177/18 277/176/18 280/178/18 +f 259/174/19 279/173/19 278/179/19 +f 179/181/20 187/208/20 185/182/20 +f 173/184/20 182/204/20 184/185/20 +f 175/187/19 184/200/19 183/188/19 +f 176/190/21 183/202/21 181/191/21 +f 174/193/18 181/197/18 182/194/18 +f 178/196/17 182/194/17 181/197/17 +f 179/199/17 183/188/17 184/200/17 +f 177/183/17 181/191/17 183/202/17 +f 180/203/17 184/185/17 182/204/17 +f 185/182/17 187/208/17 188/206/17 +f 177/198/19 185/182/19 186/207/19 +f 178/205/21 186/207/21 188/206/21 +f 180/201/18 188/206/18 187/208/18 +f 189/209/17 191/530/17 192/210/17 +f 199/212/20 207/239/20 205/213/20 +f 193/215/20 202/235/20 204/216/20 +f 195/218/19 204/231/19 203/219/19 +f 196/221/21 203/233/21 201/222/21 +f 194/224/18 201/228/18 202/225/18 +f 198/227/17 202/225/17 201/228/17 +f 199/230/17 203/219/17 204/231/17 +f 197/214/17 201/222/17 203/233/17 +f 200/234/17 204/216/17 202/235/17 +f 205/213/17 207/239/17 208/237/17 +f 197/229/19 205/213/19 206/238/19 +f 198/236/21 206/238/21 208/237/21 +f 200/232/18 208/237/18 207/239/18 +f 209/240/17 211/531/17 212/241/17 +f 219/243/20 227/270/20 225/244/20 +f 213/246/20 222/266/20 224/247/20 +f 215/249/19 224/262/19 223/250/19 +f 216/252/21 223/264/21 221/253/21 +f 214/255/18 221/259/18 222/256/18 +f 218/258/17 222/256/17 221/259/17 +f 219/261/17 223/250/17 224/262/17 +f 217/245/17 221/253/17 223/264/17 +f 220/265/17 224/247/17 222/266/17 +f 225/244/17 227/270/17 228/268/17 +f 217/260/19 225/244/19 226/269/19 +f 218/267/21 226/269/21 228/268/21 +f 220/263/18 228/268/18 227/270/18 +f 229/271/17 231/532/17 232/272/17 +f 239/274/20 247/301/20 245/275/20 +f 233/277/20 242/297/20 244/278/20 +f 235/280/19 244/293/19 243/281/19 +f 236/283/21 243/295/21 241/284/21 +f 234/286/18 241/290/18 242/287/18 +f 238/289/17 242/287/17 241/290/17 +f 239/292/17 243/281/17 244/293/17 +f 237/276/17 241/284/17 243/295/17 +f 240/296/17 244/278/17 242/297/17 +f 245/275/17 247/301/17 248/299/17 +f 237/291/19 245/275/19 246/300/19 +f 238/298/21 246/300/21 248/299/21 +f 240/294/18 248/299/18 247/301/18 +f 249/302/17 251/533/17 252/303/17 +f 255/305/19 281/534/19 284/306/19 +f 357/308/17 358/382/17 355/309/17 +f 267/311/17 265/317/17 266/312/17 +f 262/314/19 267/311/19 268/313/19 +f 263/316/18 266/312/18 265/317/18 +f 261/319/21 268/313/21 266/312/21 +f 264/321/20 265/317/20 267/311/20 +f 273/323/20 272/330/20 270/324/20 +f 276/326/21 269/333/21 271/327/21 +f 274/329/18 271/327/18 272/330/18 +f 275/332/19 270/324/19 269/333/19 +f 270/324/17 272/330/17 271/327/17 +f 365/335/17 366/403/17 363/336/17 +f 255/338/17 277/176/17 278/339/17 +f 253/341/17 278/179/17 279/173/17 +f 254/343/17 279/173/17 280/178/17 +f 256/307/17 280/178/17 277/176/17 +f 254/342/18 283/535/18 282/345/18 +f 256/344/21 284/536/21 283/346/21 +f 253/340/20 282/537/20 281/347/20 +f 286/348/19 295/538/19 298/349/19 +f 288/351/20 297/365/20 300/352/20 +f 292/354/18 299/539/18 294/355/18 +f 290/357/17 285/363/17 286/348/17 +f 286/348/17 287/350/17 288/351/17 +f 288/351/17 291/353/17 292/354/17 +f 292/354/17 289/356/17 290/357/17 +f 290/357/17 286/348/17 288/351/17 +f 300/352/24 299/540/24 292/358/24 +f 290/357/25 289/541/25 294/359/25 +f 296/361/26 295/542/26 286/362/26 +f 288/351/27 287/543/27 298/364/27 +f 290/357/21 293/360/21 296/361/21 +f 301/366/17 302/544/17 304/367/17 +f 336/369/17 338/374/17 337/370/17 +f 336/369/18 335/371/18 342/372/18 +f 338/374/21 336/369/21 341/375/21 +f 335/371/20 337/370/20 340/377/20 +f 337/370/19 338/374/19 339/379/19 +f 351/381/18 355/309/18 358/382/18 +f 349/384/17 350/392/17 347/385/17 +f 346/387/20 350/392/20 349/384/20 +f 343/389/21 348/386/21 347/385/21 +f 345/391/18 347/385/18 350/392/18 +f 344/394/19 349/384/19 348/386/19 +f 353/396/19 357/308/19 356/310/19 +f 354/398/20 358/382/20 357/308/20 +f 352/400/21 356/310/21 355/309/21 +f 359/402/18 363/336/18 366/403/18 +f 361/405/19 365/335/19 364/337/19 +f 362/407/20 366/403/20 365/335/20 +f 360/409/21 364/337/21 363/336/21 +f 373/411/17 374/415/17 371/412/17 +f 367/414/18 371/412/18 374/415/18 +f 369/417/19 373/411/19 372/413/19 +f 370/419/20 374/415/20 373/411/20 +f 368/421/21 372/413/21 371/412/21 +f 381/423/17 382/427/17 379/424/17 +f 375/426/18 379/424/18 382/427/18 +f 377/429/19 381/423/19 380/425/19 +f 378/431/20 382/427/20 381/423/20 +f 376/433/21 380/425/21 379/424/21 +f 389/435/17 390/439/17 387/436/17 +f 383/438/18 387/436/18 390/439/18 +f 385/441/19 389/435/19 388/437/19 +f 386/443/20 390/439/20 389/435/20 +f 384/445/21 388/437/21 387/436/21 +f 601/447/20 602/480/20 598/448/20 +f 598/450/20 603/459/20 604/451/20 +f 606/453/20 605/456/20 597/454/20 +f 609/460/21 611/479/21 612/461/21 +f 614/463/21 613/472/21 609/464/21 +f 607/466/21 615/470/21 616/467/21 +f 615/470/28 612/461/28 601/447/28 +f 616/467/18 615/470/18 605/456/18 +f 613/472/19 614/463/19 604/451/19 +f 611/479/29 613/472/29 603/459/29 +f 612/461/17 611/479/17 602/480/17 +f 626/481/20 625/477/20 617/476/20 +f 618/475/20 623/474/20 624/483/20 +f 621/485/20 622/502/20 618/486/20 +f 629/488/21 631/501/21 632/489/21 +f 634/491/21 633/500/21 629/492/21 +f 627/494/21 635/498/21 636/495/21 +f 635/498/28 632/489/28 621/485/28 +f 636/495/18 635/498/18 625/477/18 +f 633/500/19 634/491/19 624/483/19 +f 631/501/29 633/500/29 623/474/29 +f 632/489/17 631/501/17 622/502/17 +s 1 +f 129/545/30 140/546/21 128/547/21 +f 136/548/31 147/549/32 135/550/32 +f 126/551/33 137/552/17 125/553/17 +f 133/554/34 144/555/35 132/556/35 +f 130/557/36 141/558/30 129/545/30 +f 125/553/17 148/559/31 136/548/31 +f 127/560/37 138/561/33 126/551/33 +f 134/562/20 145/563/34 133/554/34 +f 131/564/16 142/565/36 130/557/36 +f 128/547/21 139/566/37 127/560/37 +f 135/550/32 146/567/20 134/562/20 +f 132/556/35 143/568/16 131/569/16 +f 165/570/36 154/571/16 166/572/16 +f 163/573/21 150/574/37 151/575/21 +f 169/576/20 158/577/32 170/578/32 +f 166/579/16 155/580/35 167/581/35 +f 163/573/21 152/582/30 164/583/30 +f 170/578/32 159/584/31 171/585/31 +f 172/586/17 149/587/33 161/588/33 +f 167/581/35 156/589/34 168/590/34 +f 164/583/30 153/591/36 165/570/36 +f 171/585/31 160/592/17 172/586/17 +f 161/588/33 150/574/37 162/593/37 +f 168/590/34 157/594/20 169/576/20 +f 588/595/38 574/596/27 587/597/39 +f 585/598/40 573/599/41 572/600/42 +f 568/601/43 570/602/44 569/603/45 +f 588/595/38 569/603/45 305/604/46 +f 587/597/39 573/599/41 586/605/47 +f 571/606/48 309/607/49 310/608/50 +f 574/596/27 308/609/51 573/599/41 +f 305/604/46 312/610/52 306/611/53 +f 331/612/54 512/613/55 326/614/56 +f 325/615/57 331/612/54 326/614/56 +f 513/616/58 330/617/59 326/614/56 +f 327/618/60 326/614/56 330/617/59 +f 334/619/28 508/620/61 509/621/62 +f 332/622/63 510/623/64 511/624/65 +f 330/617/59 514/625/66 329/626/67 +f 315/627/19 327/628/60 314/629/26 +f 317/630/20 325/631/57 316/632/27 +f 319/633/18 323/634/68 318/635/24 +f 403/636/16 396/637/69 395/638/16 +f 401/639/21 394/640/70 393/641/21 +f 399/642/17 392/643/71 391/644/17 +f 406/645/72 391/644/17 398/646/72 +f 404/647/69 397/648/20 396/637/69 +f 402/649/70 395/650/16 394/640/70 +f 400/651/71 393/641/21 392/643/71 +f 405/652/20 398/646/72 397/648/20 +f 419/653/16 412/654/69 411/655/16 +f 417/656/21 410/657/70 409/658/21 +f 415/659/17 408/660/71 407/661/17 +f 422/662/72 407/661/17 414/663/72 +f 420/664/69 413/665/20 412/654/69 +f 418/666/70 411/667/16 410/657/70 +f 416/668/71 409/658/21 408/660/71 +f 421/669/20 414/663/72 413/665/20 +f 435/670/16 428/671/69 427/672/16 +f 433/673/21 426/674/70 425/675/21 +f 431/676/17 424/677/71 423/678/17 +f 438/679/72 423/678/17 430/680/72 +f 436/681/69 429/682/20 428/671/69 +f 434/683/70 427/684/16 426/674/70 +f 432/685/71 425/675/21 424/677/71 +f 437/686/20 430/680/72 429/682/20 +f 453/687/73 452/688/44 439/689/74 +f 453/687/73 454/690/75 452/688/44 +f 453/691/73 445/692/76 446/693/48 +f 446/693/48 460/694/50 453/691/73 +f 447/695/42 443/696/77 448/697/41 +f 450/698/46 442/699/78 441/700/79 +f 451/701/45 439/689/74 452/688/44 +f 446/693/48 444/702/80 447/695/42 +f 448/697/41 442/699/78 449/703/27 +f 451/701/45 441/700/79 440/704/81 +f 459/705/49 448/697/41 458/706/51 +f 455/707/52 450/698/46 451/701/45 +f 458/706/51 449/703/27 457/708/82 +f 459/705/49 446/693/48 447/695/42 +f 455/707/52 452/688/44 454/690/75 +f 457/708/82 450/698/46 456/709/53 +f 461/710/83 459/711/49 462/712/16 +f 463/713/56 457/708/82 464/714/19 +f 465/715/29 455/716/52 466/717/17 +f 467/718/28 453/719/73 468/720/18 +f 468/721/18 460/722/50 461/710/83 +f 462/712/16 458/706/51 463/713/56 +f 464/714/19 456/709/53 465/715/29 +f 466/717/17 454/723/75 467/718/28 +f 471/724/17 483/725/75 470/726/28 +f 473/727/19 481/728/53 472/729/29 +f 475/730/16 479/731/51 474/732/56 +f 469/733/18 477/734/50 476/735/83 +f 470/726/28 484/736/25 469/737/18 +f 472/729/29 482/738/52 471/724/17 +f 474/732/56 480/739/82 473/727/19 +f 476/735/83 478/740/49 475/730/16 +f 480/739/82 487/741/46 481/728/53 +f 482/742/52 485/743/44 483/744/75 +f 478/745/49 491/746/48 490/747/42 +f 479/731/51 488/748/27 480/739/82 +f 481/728/53 486/749/45 482/742/52 +f 479/731/51 490/747/42 489/750/41 +f 487/741/46 497/751/43 486/749/45 +f 489/750/41 495/752/39 488/748/27 +f 490/747/42 492/753/84 493/754/40 +f 485/743/44 497/751/43 498/755/85 +f 487/741/46 495/752/39 496/756/38 +f 490/747/42 494/757/47 489/750/41 +f 491/746/48 477/758/50 484/759/25 +f 484/759/25 492/753/84 491/746/48 +f 484/760/25 483/744/75 485/743/44 +f 484/760/25 485/743/44 498/755/85 +f 493/761/40 503/762/69 494/757/47 +f 495/752/39 501/763/72 496/756/38 +f 484/764/25 505/765/70 492/766/84 +f 498/767/85 506/768/21 484/769/25 +f 497/770/43 499/771/71 498/767/85 +f 492/766/84 504/772/16 493/761/40 +f 494/757/47 502/773/20 495/752/39 +f 496/756/38 500/774/17 497/770/43 +f 313/775/21 321/776/86 320/777/25 +f 314/629/26 328/778/87 313/779/21 +f 316/632/27 326/780/56 315/627/19 +f 318/635/24 324/781/88 317/630/20 +f 320/777/25 322/782/89 319/633/18 +f 324/783/88 331/612/54 325/615/57 +f 321/784/86 334/619/28 322/782/89 +f 324/783/88 333/785/90 332/622/63 +f 328/786/87 330/617/59 329/626/67 +f 328/787/87 507/788/91 321/784/86 +f 322/782/89 333/785/90 323/789/68 +f 331/612/54 511/624/65 512/613/55 +f 334/619/28 510/623/64 333/785/90 +f 329/790/67 508/620/61 507/788/91 +f 528/791/67 521/792/61 522/793/91 +f 523/794/28 519/795/64 524/796/90 +f 526/797/54 518/798/65 517/799/55 +f 534/800/68 523/794/28 524/796/90 +f 529/801/87 522/793/91 536/802/86 +f 530/803/60 528/804/67 529/805/87 +f 533/806/88 524/796/90 525/807/63 +f 536/802/86 523/794/28 535/808/89 +f 533/806/88 526/797/54 532/809/57 +f 537/810/25 535/808/89 538/811/18 +f 539/812/24 533/813/88 540/814/20 +f 541/815/27 531/816/56 542/817/19 +f 543/818/26 529/819/87 544/820/21 +f 544/821/21 536/822/86 537/810/25 +f 538/811/18 534/823/68 539/812/24 +f 540/814/20 532/824/57 541/815/27 +f 542/817/19 530/825/60 543/818/26 +f 527/826/59 515/827/66 528/804/67 +f 525/807/63 519/795/64 518/798/65 +f 522/793/91 520/828/62 523/794/28 +f 530/803/60 531/829/56 527/826/59 +f 516/830/58 527/826/59 531/829/56 +f 532/809/57 526/797/54 531/829/56 +f 526/797/54 517/799/55 531/829/56 +f 558/831/45 551/832/53 552/833/46 +f 553/834/27 549/835/51 554/836/41 +f 556/837/48 548/838/49 547/839/50 +f 565/840/39 554/836/41 564/841/47 +f 566/842/38 558/831/45 552/833/46 +f 559/843/43 557/844/44 558/831/45 +f 564/841/47 555/845/42 563/846/40 +f 565/840/39 552/833/46 553/834/27 +f 563/846/40 556/837/48 562/847/84 +f 521/848/61 559/849/43 520/828/62 +f 515/850/66 560/851/85 521/848/61 +f 516/852/58 561/853/25 515/854/66 +f 531/855/56 562/856/84 516/852/58 +f 517/857/55 563/858/40 531/855/56 +f 518/859/65 564/860/47 517/857/55 +f 519/861/64 565/840/39 518/859/65 +f 520/828/62 566/862/38 519/861/64 +f 557/844/44 545/863/52 558/831/45 +f 555/845/42 549/835/51 548/838/49 +f 553/834/27 551/832/53 550/864/82 +f 560/865/85 561/866/25 557/844/44 +f 546/867/75 557/844/44 561/866/25 +f 562/847/84 556/837/48 561/868/25 +f 556/837/48 547/839/50 561/868/25 +f 551/869/53 580/870/19 550/864/82 +f 549/871/51 578/872/16 548/873/49 +f 546/874/75 575/875/17 545/876/52 +f 547/877/50 582/878/18 561/879/25 +f 561/880/25 576/881/28 546/874/75 +f 545/876/52 581/882/29 551/869/53 +f 550/864/82 579/883/56 549/871/51 +f 548/873/49 577/884/83 547/877/50 +f 585/598/40 571/606/48 584/885/84 +f 508/886/61 568/887/43 509/621/62 +f 514/888/66 567/889/85 508/886/61 +f 514/890/66 584/891/84 583/892/25 +f 326/893/56 584/891/84 513/894/58 +f 512/895/55 585/896/40 326/893/56 +f 511/897/65 586/898/47 512/895/55 +f 510/899/64 587/597/39 511/897/65 +f 509/621/62 588/900/38 510/899/64 +f 570/602/44 312/610/52 569/603/45 +f 573/599/41 309/607/49 572/600/42 +f 574/596/27 306/611/53 307/901/82 +f 567/902/85 583/903/25 570/602/44 +f 311/904/75 570/602/44 583/903/25 +f 584/885/84 571/606/48 583/905/25 +f 571/606/48 310/608/50 583/905/25 +f 306/906/53 594/907/19 307/901/82 +f 308/908/51 592/909/16 309/910/49 +f 311/911/75 589/912/17 312/913/52 +f 310/914/50 596/915/18 583/916/25 +f 583/917/25 590/918/28 311/911/75 +f 312/913/52 595/919/29 306/906/53 +f 307/901/82 593/920/56 308/908/51 +f 309/910/49 591/921/83 310/914/50 +f 651/922/73 650/923/44 637/924/74 +f 651/922/73 652/925/75 650/923/44 +f 651/926/73 643/927/76 644/928/48 +f 644/928/48 658/929/50 651/926/73 +f 645/930/42 641/931/77 646/932/41 +f 648/933/46 640/934/78 639/935/79 +f 649/936/45 637/924/74 650/923/44 +f 644/928/48 642/937/80 645/930/42 +f 646/932/41 640/934/78 647/938/27 +f 649/936/45 639/935/79 638/939/81 +f 657/940/49 646/932/41 656/941/51 +f 653/942/52 648/933/46 649/936/45 +f 656/941/51 647/938/27 655/943/82 +f 657/940/49 644/928/48 645/930/42 +f 653/942/52 650/923/44 652/925/75 +f 655/943/82 648/933/46 654/944/53 +f 659/945/83 657/946/49 660/947/16 +f 661/948/56 655/943/82 662/949/19 +f 663/950/29 653/951/52 664/952/17 +f 665/953/28 651/954/73 666/955/18 +f 666/956/18 658/957/50 659/945/83 +f 660/947/16 656/941/51 661/948/56 +f 662/949/19 654/944/53 663/950/29 +f 664/952/17 652/958/75 665/953/28 +f 669/959/17 681/960/75 668/961/28 +f 671/962/19 679/963/53 670/964/29 +f 673/965/16 677/966/51 672/967/56 +f 667/968/18 675/969/50 674/970/83 +f 668/961/28 682/971/25 667/972/18 +f 670/964/29 680/973/52 669/959/17 +f 672/967/56 678/974/82 671/962/19 +f 674/970/83 676/975/49 673/965/16 +f 678/974/82 685/976/46 679/963/53 +f 680/977/52 683/978/44 681/979/75 +f 676/980/49 689/981/48 688/982/42 +f 677/966/51 686/983/27 678/974/82 +f 679/963/53 684/984/45 680/977/52 +f 677/966/51 688/982/42 687/985/41 +f 685/976/46 695/986/43 684/984/45 +f 686/983/27 692/987/47 693/988/39 +f 689/981/48 691/989/40 688/982/42 +f 684/984/45 696/990/85 683/978/44 +f 685/976/46 693/988/39 694/991/38 +f 688/982/42 692/987/47 687/985/41 +f 689/981/48 675/992/50 682/993/25 +f 682/993/25 690/994/84 689/981/48 +f 682/995/25 681/979/75 683/978/44 +f 682/995/25 683/978/44 696/990/85 +f 691/996/40 701/997/69 692/987/47 +f 693/988/39 699/998/72 694/991/38 +f 682/999/25 703/1000/70 690/1001/84 +f 696/1002/85 704/1003/21 682/1004/25 +f 695/1005/43 697/1006/71 696/1002/85 +f 690/1001/84 702/1007/16 691/996/40 +f 692/987/47 700/1008/20 693/988/39 +f 694/991/38 698/1009/17 695/1005/43 +f 719/1010/92 705/1011/93 718/1012/94 +f 719/1010/92 718/1012/94 720/1013/95 +f 719/1014/92 712/1015/96 711/1016/97 +f 712/1015/96 719/1014/92 726/1017/98 +f 709/1018/99 713/1019/100 714/1020/101 +f 716/1021/102 708/1022/103 715/1023/24 +f 718/1012/94 706/1024/104 717/1025/105 +f 710/1026/106 712/1015/96 713/1019/100 +f 708/1022/103 714/1020/101 715/1023/24 +f 717/1025/105 707/1027/107 716/1021/102 +f 714/1020/101 725/1028/108 724/1029/109 +f 721/1030/110 716/1021/102 722/1031/111 +f 715/1023/24 724/1029/109 723/1032/112 +f 725/1028/108 712/1015/96 726/1017/98 +f 718/1012/94 721/1030/110 720/1013/95 +f 716/1021/102 723/1032/112 722/1031/111 +f 725/1033/108 727/1034/56 728/1035/16 +f 723/1032/112 729/1036/83 730/1037/18 +f 721/1038/110 731/1039/28 732/1040/17 +f 719/1041/92 733/1042/29 734/1043/19 +f 726/1044/98 734/1045/19 727/1034/56 +f 724/1029/109 728/1035/16 729/1036/83 +f 722/1031/111 730/1037/18 731/1039/28 +f 720/1046/95 732/1040/17 733/1042/29 +f 749/1047/95 737/1048/17 736/1049/29 +f 747/1050/111 739/1051/18 738/1052/28 +f 745/1053/109 741/1054/16 740/1055/83 +f 743/1056/98 735/1057/19 742/1058/56 +f 750/1059/26 736/1049/29 735/1060/19 +f 748/1061/110 738/1052/28 737/1048/17 +f 746/1062/112 740/1055/83 739/1051/18 +f 744/1063/108 742/1058/56 741/1054/16 +f 753/1064/102 746/1062/112 747/1050/111 +f 751/1065/94 748/1066/110 749/1067/95 +f 744/1068/108 757/1069/96 743/1070/98 +f 754/1071/24 745/1053/109 746/1062/112 +f 752/1072/105 747/1050/111 748/1066/110 +f 745/1053/109 756/1073/100 744/1068/108 +f 763/1074/113 753/1064/102 752/1072/105 +f 761/1075/114 755/1076/101 754/1071/24 +f 759/1077/115 757/1069/96 756/1073/100 +f 751/1065/94 763/1074/113 752/1072/105 +f 753/1064/102 761/1075/114 754/1071/24 +f 760/1078/116 756/1073/100 755/1076/101 +f 757/1069/96 750/1079/26 743/1070/98 +f 750/1079/26 757/1069/96 758/1080/117 +f 750/1081/26 751/1065/94 749/1067/95 +f 750/1081/26 764/1082/118 751/1065/94 +f 769/1083/69 759/1084/115 760/1078/116 +f 767/1085/72 761/1075/114 762/1086/119 +f 771/1087/70 750/1088/26 758/1089/117 +f 772/1090/21 764/1091/118 750/1092/26 +f 765/1093/71 763/1094/113 764/1091/118 +f 770/1095/16 758/1089/117 759/1084/115 +f 768/1096/20 760/1078/116 761/1075/114 +f 766/1097/17 762/1086/119 763/1094/113 +f 787/1098/92 773/1099/93 786/1100/94 +f 787/1098/92 786/1100/94 788/1101/95 +f 787/1102/92 780/1103/96 779/1104/97 +f 780/1103/96 787/1102/92 794/1105/98 +f 777/1106/99 781/1107/100 782/1108/101 +f 784/1109/102 776/1110/103 783/1111/24 +f 786/1100/94 774/1112/104 785/1113/105 +f 778/1114/106 780/1103/96 781/1107/100 +f 776/1110/103 782/1108/101 783/1111/24 +f 785/1113/105 775/1115/107 784/1109/102 +f 782/1108/101 793/1116/108 792/1117/109 +f 789/1118/110 784/1109/102 790/1119/111 +f 783/1111/24 792/1117/109 791/1120/112 +f 793/1116/108 780/1103/96 794/1105/98 +f 786/1100/94 789/1118/110 788/1101/95 +f 784/1109/102 791/1120/112 790/1119/111 +f 793/1121/108 795/1122/56 796/1123/16 +f 791/1120/112 797/1124/83 798/1125/18 +f 789/1126/110 799/1127/28 800/1128/17 +f 787/1129/92 801/1130/29 802/1131/19 +f 794/1132/98 802/1133/19 795/1122/56 +f 792/1117/109 796/1123/16 797/1124/83 +f 790/1119/111 798/1125/18 799/1127/28 +f 788/1134/95 800/1128/17 801/1130/29 +f 817/1135/95 805/1136/17 804/1137/29 +f 815/1138/111 807/1139/18 806/1140/28 +f 813/1141/109 809/1142/16 808/1143/83 +f 811/1144/98 803/1145/19 810/1146/56 +f 818/1147/26 804/1137/29 803/1148/19 +f 816/1149/110 806/1140/28 805/1136/17 +f 814/1150/112 808/1143/83 807/1139/18 +f 812/1151/108 810/1146/56 809/1142/16 +f 821/1152/102 814/1150/112 815/1138/111 +f 819/1153/94 816/1154/110 817/1155/95 +f 812/1156/108 825/1157/96 811/1158/98 +f 822/1159/24 813/1141/109 814/1150/112 +f 820/1160/105 815/1138/111 816/1154/110 +f 813/1141/109 824/1161/100 812/1156/108 +f 831/1162/113 821/1152/102 820/1160/105 +f 829/1163/114 823/1164/101 822/1159/24 +f 827/1165/115 825/1157/96 824/1161/100 +f 819/1153/94 831/1162/113 820/1160/105 +f 821/1152/102 829/1163/114 822/1159/24 +f 828/1166/116 824/1161/100 823/1164/101 +f 825/1157/96 818/1167/26 811/1158/98 +f 818/1167/26 825/1157/96 826/1168/117 +f 818/1169/26 819/1153/94 817/1155/95 +f 818/1169/26 832/1170/118 819/1153/94 +f 837/1171/69 827/1172/115 828/1166/116 +f 835/1173/72 829/1163/114 830/1174/119 +f 839/1175/70 818/1176/26 826/1177/117 +f 840/1178/21 832/1179/118 818/1180/26 +f 833/1181/71 831/1182/113 832/1179/118 +f 838/1183/16 826/1177/117 827/1172/115 +f 836/1184/20 828/1166/116 829/1163/114 +f 834/1185/17 830/1174/119 831/1182/113 +f 129/545/30 141/558/30 140/546/21 +f 136/548/31 148/559/31 147/549/32 +f 126/551/33 138/561/33 137/552/17 +f 133/554/34 145/563/34 144/555/35 +f 130/557/36 142/565/36 141/558/30 +f 125/553/17 137/552/17 148/559/31 +f 127/560/37 139/566/37 138/561/33 +f 134/562/20 146/567/20 145/563/34 +f 131/564/16 143/1186/16 142/565/36 +f 128/547/21 140/546/21 139/566/37 +f 135/550/32 147/549/32 146/567/20 +f 132/556/35 144/555/35 143/568/16 +f 165/570/36 153/591/36 154/571/16 +f 163/573/21 162/593/37 150/574/37 +f 169/576/20 157/594/20 158/577/32 +f 166/579/16 154/1187/16 155/580/35 +f 163/573/21 151/575/21 152/582/30 +f 170/578/32 158/577/32 159/584/31 +f 172/586/17 160/592/17 149/587/33 +f 167/581/35 155/580/35 156/589/34 +f 164/583/30 152/582/30 153/591/36 +f 171/585/31 159/584/31 160/592/17 +f 161/588/33 149/587/33 150/574/37 +f 168/590/34 156/589/34 157/594/20 +f 588/595/38 305/604/46 574/596/27 +f 585/598/40 586/605/47 573/599/41 +f 568/601/43 567/902/85 570/602/44 +f 588/595/38 568/601/43 569/603/45 +f 587/597/39 574/596/27 573/599/41 +f 571/606/48 572/600/42 309/607/49 +f 574/596/27 307/901/82 308/609/51 +f 305/604/46 569/603/45 312/610/52 +f 334/619/28 507/788/91 508/620/61 +f 332/622/63 333/785/90 510/623/64 +f 330/617/59 513/616/58 514/625/66 +f 315/627/19 326/780/56 327/628/60 +f 317/630/20 324/781/88 325/631/57 +f 319/633/18 322/782/89 323/634/68 +f 403/636/16 404/647/69 396/637/69 +f 401/639/21 402/649/70 394/640/70 +f 399/642/17 400/651/71 392/643/71 +f 406/645/72 399/642/17 391/644/17 +f 404/647/69 405/652/20 397/648/20 +f 402/649/70 403/1188/16 395/650/16 +f 400/651/71 401/639/21 393/641/21 +f 405/652/20 406/645/72 398/646/72 +f 419/653/16 420/664/69 412/654/69 +f 417/656/21 418/666/70 410/657/70 +f 415/659/17 416/668/71 408/660/71 +f 422/662/72 415/659/17 407/661/17 +f 420/664/69 421/669/20 413/665/20 +f 418/666/70 419/1189/16 411/667/16 +f 416/668/71 417/656/21 409/658/21 +f 421/669/20 422/662/72 414/663/72 +f 435/670/16 436/681/69 428/671/69 +f 433/673/21 434/683/70 426/674/70 +f 431/676/17 432/685/71 424/677/71 +f 438/679/72 431/676/17 423/678/17 +f 436/681/69 437/686/20 429/682/20 +f 434/683/70 435/1190/16 427/684/16 +f 432/685/71 433/673/21 425/675/21 +f 437/686/20 438/679/72 430/680/72 +f 447/695/42 444/702/80 443/696/77 +f 450/698/46 449/703/27 442/699/78 +f 451/701/45 440/704/81 439/689/74 +f 446/693/48 445/692/76 444/702/80 +f 448/697/41 443/696/77 442/699/78 +f 451/701/45 450/698/46 441/700/79 +f 459/705/49 447/695/42 448/697/41 +f 455/707/52 456/709/53 450/698/46 +f 458/706/51 448/697/41 449/703/27 +f 459/705/49 460/694/50 446/693/48 +f 455/707/52 451/701/45 452/688/44 +f 457/708/82 449/703/27 450/698/46 +f 461/710/83 460/722/50 459/711/49 +f 463/713/56 458/706/51 457/708/82 +f 465/715/29 456/709/53 455/716/52 +f 467/718/28 454/723/75 453/719/73 +f 468/721/18 453/1191/73 460/722/50 +f 462/712/16 459/711/49 458/706/51 +f 464/714/19 457/708/82 456/709/53 +f 466/717/17 455/716/52 454/723/75 +f 471/724/17 482/738/52 483/725/75 +f 473/727/19 480/739/82 481/728/53 +f 475/730/16 478/740/49 479/731/51 +f 469/733/18 484/1192/25 477/734/50 +f 470/726/28 483/725/75 484/736/25 +f 472/729/29 481/728/53 482/738/52 +f 474/732/56 479/731/51 480/739/82 +f 476/735/83 477/734/50 478/740/49 +f 480/739/82 488/748/27 487/741/46 +f 482/742/52 486/749/45 485/743/44 +f 478/745/49 477/758/50 491/746/48 +f 479/731/51 489/750/41 488/748/27 +f 481/728/53 487/741/46 486/749/45 +f 479/731/51 478/745/49 490/747/42 +f 487/741/46 496/756/38 497/751/43 +f 489/750/41 494/757/47 495/752/39 +f 490/747/42 491/746/48 492/753/84 +f 485/743/44 486/749/45 497/751/43 +f 487/741/46 488/748/27 495/752/39 +f 490/747/42 493/754/40 494/757/47 +f 493/761/40 504/772/16 503/762/69 +f 495/752/39 502/773/20 501/763/72 +f 484/764/25 506/1193/21 505/765/70 +f 498/767/85 499/771/71 506/768/21 +f 497/770/43 500/774/17 499/771/71 +f 492/766/84 505/765/70 504/772/16 +f 494/757/47 503/762/69 502/773/20 +f 496/756/38 501/763/72 500/774/17 +f 313/775/21 328/1194/87 321/776/86 +f 314/629/26 327/628/60 328/778/87 +f 316/632/27 325/631/57 326/780/56 +f 318/635/24 323/634/68 324/781/88 +f 320/777/25 321/776/86 322/782/89 +f 324/783/88 332/622/63 331/612/54 +f 321/784/86 507/788/91 334/619/28 +f 324/783/88 323/789/68 333/785/90 +f 328/786/87 327/618/60 330/617/59 +f 328/787/87 329/790/67 507/788/91 +f 322/782/89 334/619/28 333/785/90 +f 331/612/54 332/622/63 511/624/65 +f 334/619/28 509/621/62 510/623/64 +f 329/790/67 514/1195/66 508/620/61 +f 528/791/67 515/1196/66 521/792/61 +f 523/794/28 520/828/62 519/795/64 +f 526/797/54 525/807/63 518/798/65 +f 534/800/68 535/808/89 523/794/28 +f 529/801/87 528/791/67 522/793/91 +f 530/803/60 527/826/59 528/804/67 +f 533/806/88 534/800/68 524/796/90 +f 536/802/86 522/793/91 523/794/28 +f 533/806/88 525/807/63 526/797/54 +f 537/810/25 536/822/86 535/808/89 +f 539/812/24 534/823/68 533/813/88 +f 541/815/27 532/824/57 531/816/56 +f 543/818/26 530/825/60 529/819/87 +f 544/821/21 529/1197/87 536/822/86 +f 538/811/18 535/808/89 534/823/68 +f 540/814/20 533/813/88 532/824/57 +f 542/817/19 531/816/56 530/825/60 +f 527/826/59 516/830/58 515/827/66 +f 525/807/63 524/796/90 519/795/64 +f 522/793/91 521/792/61 520/828/62 +f 558/831/45 545/863/52 551/832/53 +f 553/834/27 550/864/82 549/835/51 +f 556/837/48 555/845/42 548/838/49 +f 565/840/39 553/834/27 554/836/41 +f 566/842/38 559/843/43 558/831/45 +f 559/843/43 560/865/85 557/844/44 +f 564/841/47 554/836/41 555/845/42 +f 565/840/39 566/842/38 552/833/46 +f 563/846/40 555/845/42 556/837/48 +f 521/848/61 560/851/85 559/849/43 +f 515/850/66 561/1198/25 560/851/85 +f 516/852/58 562/856/84 561/853/25 +f 531/855/56 563/858/40 562/856/84 +f 517/857/55 564/860/47 563/858/40 +f 518/859/65 565/840/39 564/860/47 +f 519/861/64 566/862/38 565/840/39 +f 520/828/62 559/849/43 566/862/38 +f 557/844/44 546/867/75 545/863/52 +f 555/845/42 554/836/41 549/835/51 +f 553/834/27 552/833/46 551/832/53 +f 551/869/53 581/882/29 580/870/19 +f 549/871/51 579/883/56 578/872/16 +f 546/874/75 576/881/28 575/875/17 +f 547/877/50 577/884/83 582/878/18 +f 561/880/25 582/1199/18 576/881/28 +f 545/876/52 575/875/17 581/882/29 +f 550/864/82 580/870/19 579/883/56 +f 548/873/49 578/872/16 577/884/83 +f 585/598/40 572/600/42 571/606/48 +f 508/886/61 567/889/85 568/887/43 +f 514/888/66 583/1200/25 567/889/85 +f 514/890/66 513/894/58 584/891/84 +f 326/893/56 585/896/40 584/891/84 +f 512/895/55 586/898/47 585/896/40 +f 511/897/65 587/597/39 586/898/47 +f 510/899/64 588/900/38 587/597/39 +f 509/621/62 568/887/43 588/900/38 +f 570/602/44 311/904/75 312/610/52 +f 573/599/41 308/609/51 309/607/49 +f 574/596/27 305/604/46 306/611/53 +f 306/906/53 595/919/29 594/907/19 +f 308/908/51 593/920/56 592/909/16 +f 311/911/75 590/918/28 589/912/17 +f 310/914/50 591/921/83 596/915/18 +f 583/917/25 596/1201/18 590/918/28 +f 312/913/52 589/912/17 595/919/29 +f 307/901/82 594/907/19 593/920/56 +f 309/910/49 592/909/16 591/921/83 +f 645/930/42 642/937/80 641/931/77 +f 648/933/46 647/938/27 640/934/78 +f 649/936/45 638/939/81 637/924/74 +f 644/928/48 643/927/76 642/937/80 +f 646/932/41 641/931/77 640/934/78 +f 649/936/45 648/933/46 639/935/79 +f 657/940/49 645/930/42 646/932/41 +f 653/942/52 654/944/53 648/933/46 +f 656/941/51 646/932/41 647/938/27 +f 657/940/49 658/929/50 644/928/48 +f 653/942/52 649/936/45 650/923/44 +f 655/943/82 647/938/27 648/933/46 +f 659/945/83 658/957/50 657/946/49 +f 661/948/56 656/941/51 655/943/82 +f 663/950/29 654/944/53 653/951/52 +f 665/953/28 652/958/75 651/954/73 +f 666/956/18 651/1202/73 658/957/50 +f 660/947/16 657/946/49 656/941/51 +f 662/949/19 655/943/82 654/944/53 +f 664/952/17 653/951/52 652/958/75 +f 669/959/17 680/973/52 681/960/75 +f 671/962/19 678/974/82 679/963/53 +f 673/965/16 676/975/49 677/966/51 +f 667/968/18 682/1203/25 675/969/50 +f 668/961/28 681/960/75 682/971/25 +f 670/964/29 679/963/53 680/973/52 +f 672/967/56 677/966/51 678/974/82 +f 674/970/83 675/969/50 676/975/49 +f 678/974/82 686/983/27 685/976/46 +f 680/977/52 684/984/45 683/978/44 +f 676/980/49 675/992/50 689/981/48 +f 677/966/51 687/985/41 686/983/27 +f 679/963/53 685/976/46 684/984/45 +f 677/966/51 676/980/49 688/982/42 +f 685/976/46 694/991/38 695/986/43 +f 686/983/27 687/985/41 692/987/47 +f 689/981/48 690/994/84 691/989/40 +f 684/984/45 695/986/43 696/990/85 +f 685/976/46 686/983/27 693/988/39 +f 688/982/42 691/989/40 692/987/47 +f 691/996/40 702/1007/16 701/997/69 +f 693/988/39 700/1008/20 699/998/72 +f 682/999/25 704/1204/21 703/1000/70 +f 696/1002/85 697/1006/71 704/1003/21 +f 695/1005/43 698/1009/17 697/1006/71 +f 690/1001/84 703/1000/70 702/1007/16 +f 692/987/47 701/997/69 700/1008/20 +f 694/991/38 699/998/72 698/1009/17 +f 709/1018/99 710/1026/106 713/1019/100 +f 716/1021/102 707/1027/107 708/1022/103 +f 718/1012/94 705/1011/93 706/1024/104 +f 710/1026/106 711/1016/97 712/1015/96 +f 708/1022/103 709/1018/99 714/1020/101 +f 717/1025/105 706/1024/104 707/1027/107 +f 714/1020/101 713/1019/100 725/1028/108 +f 721/1030/110 717/1025/105 716/1021/102 +f 715/1023/24 714/1020/101 724/1029/109 +f 725/1028/108 713/1019/100 712/1015/96 +f 718/1012/94 717/1025/105 721/1030/110 +f 716/1021/102 715/1023/24 723/1032/112 +f 725/1033/108 726/1044/98 727/1034/56 +f 723/1032/112 724/1029/109 729/1036/83 +f 721/1038/110 722/1031/111 731/1039/28 +f 719/1041/92 720/1046/95 733/1042/29 +f 726/1044/98 719/1205/92 734/1045/19 +f 724/1029/109 725/1033/108 728/1035/16 +f 722/1031/111 723/1032/112 730/1037/18 +f 720/1046/95 721/1038/110 732/1040/17 +f 749/1047/95 748/1061/110 737/1048/17 +f 747/1050/111 746/1062/112 739/1051/18 +f 745/1053/109 744/1063/108 741/1054/16 +f 743/1056/98 750/1206/26 735/1057/19 +f 750/1059/26 749/1047/95 736/1049/29 +f 748/1061/110 747/1050/111 738/1052/28 +f 746/1062/112 745/1053/109 740/1055/83 +f 744/1063/108 743/1056/98 742/1058/56 +f 753/1064/102 754/1071/24 746/1062/112 +f 751/1065/94 752/1072/105 748/1066/110 +f 744/1068/108 756/1073/100 757/1069/96 +f 754/1071/24 755/1076/101 745/1053/109 +f 752/1072/105 753/1064/102 747/1050/111 +f 745/1053/109 755/1076/101 756/1073/100 +f 763/1074/113 762/1086/119 753/1064/102 +f 761/1075/114 760/1078/116 755/1076/101 +f 759/1077/115 758/1080/117 757/1069/96 +f 751/1065/94 764/1082/118 763/1074/113 +f 753/1064/102 762/1086/119 761/1075/114 +f 760/1078/116 759/1077/115 756/1073/100 +f 769/1083/69 770/1095/16 759/1084/115 +f 767/1085/72 768/1096/20 761/1075/114 +f 771/1087/70 772/1207/21 750/1088/26 +f 772/1090/21 765/1093/71 764/1091/118 +f 765/1093/71 766/1097/17 763/1094/113 +f 770/1095/16 771/1087/70 758/1089/117 +f 768/1096/20 769/1083/69 760/1078/116 +f 766/1097/17 767/1085/72 762/1086/119 +f 777/1106/99 778/1114/106 781/1107/100 +f 784/1109/102 775/1115/107 776/1110/103 +f 786/1100/94 773/1099/93 774/1112/104 +f 778/1114/106 779/1104/97 780/1103/96 +f 776/1110/103 777/1106/99 782/1108/101 +f 785/1113/105 774/1112/104 775/1115/107 +f 782/1108/101 781/1107/100 793/1116/108 +f 789/1118/110 785/1113/105 784/1109/102 +f 783/1111/24 782/1108/101 792/1117/109 +f 793/1116/108 781/1107/100 780/1103/96 +f 786/1100/94 785/1113/105 789/1118/110 +f 784/1109/102 783/1111/24 791/1120/112 +f 793/1121/108 794/1132/98 795/1122/56 +f 791/1120/112 792/1117/109 797/1124/83 +f 789/1126/110 790/1119/111 799/1127/28 +f 787/1129/92 788/1134/95 801/1130/29 +f 794/1132/98 787/1208/92 802/1133/19 +f 792/1117/109 793/1121/108 796/1123/16 +f 790/1119/111 791/1120/112 798/1125/18 +f 788/1134/95 789/1126/110 800/1128/17 +f 817/1135/95 816/1149/110 805/1136/17 +f 815/1138/111 814/1150/112 807/1139/18 +f 813/1141/109 812/1151/108 809/1142/16 +f 811/1144/98 818/1209/26 803/1145/19 +f 818/1147/26 817/1135/95 804/1137/29 +f 816/1149/110 815/1138/111 806/1140/28 +f 814/1150/112 813/1141/109 808/1143/83 +f 812/1151/108 811/1144/98 810/1146/56 +f 821/1152/102 822/1159/24 814/1150/112 +f 819/1153/94 820/1160/105 816/1154/110 +f 812/1156/108 824/1161/100 825/1157/96 +f 822/1159/24 823/1164/101 813/1141/109 +f 820/1160/105 821/1152/102 815/1138/111 +f 813/1141/109 823/1164/101 824/1161/100 +f 831/1162/113 830/1174/119 821/1152/102 +f 829/1163/114 828/1166/116 823/1164/101 +f 827/1165/115 826/1168/117 825/1157/96 +f 819/1153/94 832/1170/118 831/1162/113 +f 821/1152/102 830/1174/119 829/1163/114 +f 828/1166/116 827/1165/115 824/1161/100 +f 837/1171/69 838/1183/16 827/1172/115 +f 835/1173/72 836/1184/20 829/1163/114 +f 839/1175/70 840/1210/21 818/1176/26 +f 840/1178/21 833/1181/71 832/1179/118 +f 833/1181/71 834/1185/17 831/1182/113 +f 838/1183/16 839/1175/70 826/1177/117 +f 836/1184/20 837/1171/69 828/1166/116 +f 834/1185/17 835/1173/72 830/1174/119 diff --git a/src/main/resources/assets/hbm/models/weapons/stg77.obj b/src/main/resources/assets/hbm/models/weapons/stg77.obj new file mode 100644 index 000000000..239e56bbb --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/stg77.obj @@ -0,0 +1,4289 @@ +# Blender v2.79 (sub 0) OBJ File: 'stg77.blend' +# www.blender.org +o Cylinder +v 0.000000 0.187500 -3.000000 +v 0.000000 0.187500 6.500000 +v 0.093750 0.162380 -3.000000 +v 0.093750 0.162380 6.500000 +v 0.162380 0.093750 -3.000000 +v 0.162380 0.093750 6.500000 +v 0.187500 0.000000 -3.000000 +v 0.187500 -0.000000 6.500000 +v 0.162380 -0.093750 -3.000000 +v 0.162380 -0.093750 6.500000 +v 0.093750 -0.162380 -3.000000 +v 0.093750 -0.162380 6.500000 +v 0.000000 -0.187500 -3.000000 +v 0.000000 -0.187500 6.500000 +v -0.093750 -0.162380 -3.000000 +v -0.093750 -0.162380 6.500000 +v -0.162380 -0.093750 -3.000000 +v -0.162380 -0.093750 6.500000 +v -0.187500 -0.000000 -3.000000 +v -0.187500 -0.000000 6.500000 +v -0.162380 0.093750 -3.000000 +v -0.162380 0.093750 6.500000 +v -0.093750 0.162380 -3.000000 +v -0.093750 0.162380 6.500000 +v 0.000000 0.250000 6.500000 +v -0.125000 0.216506 6.500000 +v -0.216506 0.125000 6.500000 +v -0.250000 -0.000000 6.500000 +v -0.216506 -0.125000 6.500000 +v -0.125000 -0.216506 6.500000 +v 0.000000 -0.250000 6.500000 +v 0.125000 -0.216507 6.500000 +v 0.216506 -0.125000 6.500000 +v 0.250000 -0.000000 6.500000 +v 0.216506 0.125000 6.500000 +v 0.125000 0.216506 6.500000 +v 0.000000 0.250000 6.625000 +v -0.125000 0.216506 6.625000 +v -0.216506 0.125000 6.625000 +v -0.250000 -0.000000 6.625000 +v -0.216506 -0.125000 6.625000 +v -0.125000 -0.216506 6.625000 +v 0.000000 -0.250000 6.625000 +v 0.125000 -0.216507 6.625000 +v 0.216506 -0.125000 6.625000 +v 0.250000 -0.000000 6.625000 +v 0.216506 0.125000 6.625000 +v 0.125000 0.216506 6.625000 +v 0.000000 0.187500 6.625000 +v 0.093750 0.162380 6.625000 +v 0.162380 0.093750 6.625000 +v 0.187500 -0.000000 6.625000 +v 0.162380 -0.093750 6.625000 +v 0.093750 -0.162380 6.625000 +v 0.000000 -0.187500 6.625000 +v -0.093750 -0.162380 6.625000 +v -0.162380 -0.093750 6.625000 +v -0.187500 -0.000000 6.625000 +v -0.162380 0.093750 6.625000 +v -0.093750 0.162380 6.625000 +v 0.000000 0.250000 6.750000 +v -0.125000 0.216506 6.750000 +v -0.216506 0.125000 6.750000 +v -0.250000 -0.000000 6.750000 +v -0.216506 -0.125000 6.750000 +v -0.125000 -0.216506 6.750000 +v 0.000000 -0.250000 6.750000 +v 0.125000 -0.216507 6.750000 +v 0.216506 -0.125000 6.750000 +v 0.250000 -0.000000 6.750000 +v 0.216506 0.125000 6.750000 +v 0.125000 0.216506 6.750000 +v 0.000000 0.250000 7.000000 +v -0.125000 0.216506 7.000000 +v -0.216506 0.125000 7.000000 +v -0.250000 -0.000000 7.000000 +v -0.216506 -0.125000 7.000000 +v -0.125000 -0.216506 7.000000 +v 0.000000 -0.250000 7.000000 +v 0.125000 -0.216507 7.000000 +v 0.216506 -0.125000 7.000000 +v 0.250000 -0.000000 7.000000 +v 0.216506 0.125000 7.000000 +v 0.125000 0.216506 7.000000 +v 0.000000 0.187500 7.125000 +v 0.093750 0.162380 7.125000 +v 0.162380 0.093750 7.125000 +v 0.187500 -0.000000 7.125000 +v 0.162380 -0.093750 7.125000 +v 0.093750 -0.162380 7.125000 +v 0.000000 -0.187500 7.125000 +v -0.093750 -0.162380 7.125000 +v -0.162380 -0.093750 7.125000 +v -0.187500 -0.000000 7.125000 +v -0.162380 0.093750 7.125000 +v -0.093750 0.162380 7.125000 +v 0.000000 0.250000 7.125000 +v -0.125000 0.216506 7.125000 +v -0.216506 0.125000 7.125000 +v -0.250000 -0.000000 7.125000 +v -0.216506 -0.125000 7.125000 +v -0.125000 -0.216506 7.125000 +v 0.000000 -0.250000 7.125000 +v 0.125000 -0.216507 7.125000 +v 0.216506 -0.125000 7.125000 +v 0.250000 -0.000000 7.125000 +v 0.216506 0.125000 7.125000 +v 0.125000 0.216506 7.125000 +v 0.000000 0.250000 7.250000 +v -0.125000 0.216506 7.250000 +v -0.216506 0.125000 7.250000 +v -0.250000 -0.000000 7.250000 +v -0.216506 -0.125000 7.250000 +v -0.125000 -0.216506 7.250000 +v 0.000000 -0.250000 7.250000 +v 0.125000 -0.216507 7.250000 +v 0.216506 -0.125000 7.250000 +v 0.250000 -0.000000 7.250000 +v 0.216506 0.125000 7.250000 +v 0.125000 0.216506 7.250000 +v 0.000000 0.187500 7.875000 +v 0.093750 0.162380 7.875000 +v 0.162380 0.093750 7.875000 +v 0.125000 0.000000 6.750000 +v 0.162380 -0.093750 7.875000 +v 0.093750 -0.162380 7.875000 +v 0.000000 -0.187500 7.875000 +v -0.093750 -0.162380 7.875000 +v -0.162380 -0.093750 7.875000 +v 0.108253 -0.062500 6.750000 +v -0.162380 0.093750 7.875000 +v -0.093750 0.162380 7.875000 +v 0.000000 0.250000 7.875000 +v -0.125000 0.216506 7.875000 +v -0.216506 0.125000 7.875000 +v 0.062500 -0.108253 6.750000 +v -0.216506 -0.125000 7.875000 +v -0.125000 -0.216506 7.875000 +v 0.000000 -0.250000 7.875000 +v 0.125000 -0.216507 7.875000 +v 0.216506 -0.125000 7.875000 +v 0.000000 -0.125000 6.750000 +v 0.216506 0.125000 7.875000 +v 0.125000 0.216506 7.875000 +v 0.000000 0.250000 8.000000 +v -0.125000 0.216506 8.000000 +v -0.216506 0.125000 8.000000 +v -0.062500 -0.108253 6.750000 +v -0.216506 -0.125000 8.000000 +v -0.125000 -0.216506 8.000000 +v 0.000000 -0.250000 8.000000 +v 0.125000 -0.216507 8.000000 +v 0.216506 -0.125000 8.000000 +v -0.108253 -0.062500 6.750000 +v 0.216506 0.125000 8.000000 +v 0.125000 0.216506 8.000000 +v 0.000000 0.125000 7.875000 +v -0.062500 0.108253 7.875000 +v -0.108253 0.062500 7.875000 +v -0.125000 0.000000 6.750000 +v -0.108253 -0.062500 7.875000 +v -0.062500 -0.108254 7.875000 +v 0.000000 -0.125000 7.875000 +v 0.062500 -0.108254 7.875000 +v 0.108253 -0.062500 7.875000 +v -0.108253 0.062500 6.750000 +v 0.108253 0.062500 7.875000 +v 0.062500 0.108253 7.875000 +v 0.000000 0.125000 7.250000 +v -0.062500 0.108253 7.250000 +v -0.108253 0.062500 7.250000 +v -0.125000 -0.000000 7.250000 +v -0.108253 -0.062500 7.250000 +v -0.062500 -0.108254 7.250000 +v 0.000000 -0.125000 7.250000 +v 0.062500 -0.108254 7.250000 +v 0.108253 -0.062500 7.250000 +v 0.125000 -0.000000 7.250000 +v 0.108253 0.062500 7.250000 +v 0.062500 0.108253 7.250000 +v 0.000000 0.187500 8.000000 +v 0.093750 0.162380 8.000000 +v 0.162380 0.093750 8.000000 +v 0.000000 0.125000 6.750000 +v 0.162380 -0.093750 8.000000 +v 0.093750 -0.162380 8.000000 +v 0.000000 -0.187500 8.000000 +v -0.093750 -0.162380 8.000000 +v -0.162380 -0.093750 8.000000 +v -0.062500 0.108253 6.750000 +v -0.162380 0.093750 8.000000 +v -0.093750 0.162380 8.000000 +v 0.108253 0.062500 6.750000 +v 0.062500 0.108253 6.750000 +v 0.000000 0.250000 2.812500 +v -0.125000 0.216506 2.812500 +v -0.216506 0.125000 2.812500 +v -0.250000 -0.000000 2.812500 +v -0.216506 -0.125000 2.812500 +v -0.125000 -0.216506 2.812500 +v 0.000000 -0.250000 2.812500 +v 0.125000 -0.216507 2.812500 +v 0.216506 -0.125000 2.812500 +v 0.250000 -0.000000 2.812500 +v 0.216506 0.125000 2.812500 +v 0.125000 0.216506 2.812500 +v 0.000000 0.250000 3.750000 +v -0.125000 0.216506 3.750000 +v -0.216506 0.125000 3.750000 +v -0.250000 -0.000000 3.750000 +v -0.216506 -0.125000 3.750000 +v -0.125000 -0.216506 3.750000 +v 0.000000 -0.250000 3.750000 +v 0.125000 -0.216507 3.750000 +v 0.216506 -0.125000 3.750000 +v 0.250000 -0.000000 3.750000 +v 0.216506 0.125000 3.750000 +v 0.125000 0.216506 3.750000 +v 0.125000 0.312500 2.750000 +v -0.125000 0.312500 2.750000 +v -0.125000 0.437500 -7.500000 +v 0.125000 0.437500 -7.500000 +v 0.500000 -0.187500 2.750000 +v -0.500000 -0.187500 2.750000 +v -0.500000 -0.187500 -7.750000 +v 0.500000 -0.187500 -7.750000 +v -0.500000 -0.437500 -1.500000 +v 0.500000 -0.437500 2.750000 +v -0.500000 -0.437500 2.750000 +v 0.500000 -0.437500 -1.500000 +v -0.250000 -0.687500 -1.500000 +v 0.250000 -0.687500 2.750000 +v -0.250000 -0.687500 2.750000 +v 0.250000 -0.687500 -1.500000 +v -0.250000 -0.687500 2.750000 +v 0.250000 -0.687500 2.750000 +v -0.500000 -0.437500 2.750000 +v 0.500000 -0.437500 2.750000 +v -0.500000 -0.187500 2.750000 +v 0.500000 -0.187500 2.750000 +v -0.125000 0.312500 2.750000 +v 0.125000 0.312500 2.750000 +v -0.500000 -0.187500 -0.250000 +v 0.500000 -0.187500 -0.250000 +v -0.125000 0.312500 -0.250000 +v 0.125000 0.312500 -0.250000 +v -0.125000 0.437500 -0.250000 +v 0.125000 0.437500 -0.250000 +v -0.125000 0.312500 2.875000 +v 0.125000 0.312500 2.875000 +v 0.500000 -0.437500 2.875000 +v 0.500000 -0.187500 2.875000 +v -0.500000 -0.187500 2.875000 +v -0.500000 -0.437500 2.875000 +v 0.250000 -0.687500 2.875000 +v -0.250000 -0.687500 2.875000 +v -0.187500 -0.125000 3.250000 +v -0.125000 -0.125000 3.250000 +v -0.187500 -0.125000 2.875000 +v -0.125000 -0.125000 2.875000 +v -0.187500 -0.687500 2.875000 +v -0.187500 -0.687500 3.125000 +v -0.125000 -0.687500 3.125000 +v -0.125000 -0.687500 2.875000 +v 0.000000 1.687500 1.500000 +v -0.125000 1.654006 1.500000 +v -0.216506 1.562500 1.500000 +v -0.250000 1.437500 1.500000 +v -0.216506 1.312500 1.500000 +v -0.125000 1.220994 1.500000 +v 0.000000 1.187500 1.500000 +v 0.125000 1.220994 1.500000 +v 0.216506 1.312500 1.500000 +v 0.250000 1.437500 1.500000 +v 0.216506 1.562500 1.500000 +v 0.125000 1.654006 1.500000 +v 0.000000 1.687500 -0.750000 +v -0.125000 1.654006 -0.750000 +v -0.216506 1.562500 -0.750000 +v -0.250000 1.437500 -0.750000 +v -0.216506 1.312500 -0.750000 +v -0.125000 1.220994 -0.750000 +v 0.000000 1.187500 -0.750000 +v 0.125000 1.220994 -0.750000 +v 0.216506 1.312500 -0.750000 +v 0.250000 1.437500 -0.750000 +v 0.216506 1.562500 -0.750000 +v 0.125000 1.654006 -0.750000 +v 0.000000 1.750000 -1.250000 +v -0.156250 1.708133 -1.250000 +v -0.270633 1.593750 -1.250000 +v -0.312500 1.437500 -1.250000 +v -0.270633 1.281250 -1.250000 +v -0.156250 1.166867 -1.250000 +v 0.000000 1.125000 -1.250000 +v 0.156250 1.166867 -1.250000 +v 0.270633 1.281250 -1.250000 +v 0.312500 1.437500 -1.250000 +v 0.270633 1.593750 -1.250000 +v 0.156250 1.708133 -1.250000 +v 0.000000 1.750000 -2.750000 +v -0.156250 1.708133 -2.750000 +v -0.270633 1.593750 -2.750000 +v -0.312500 1.437500 -2.750000 +v -0.270633 1.281250 -2.750000 +v -0.156250 1.166867 -2.750000 +v 0.000000 1.125000 -2.750000 +v 0.156250 1.166867 -2.750000 +v 0.270633 1.281250 -2.750000 +v 0.312500 1.437500 -2.750000 +v 0.270633 1.593750 -2.750000 +v 0.156250 1.708133 -2.750000 +v 0.000000 1.687500 -2.750000 +v -0.125000 1.654006 -2.750000 +v -0.216506 1.562500 -2.750000 +v -0.250000 1.437500 -2.750000 +v -0.216506 1.312500 -2.750000 +v -0.125000 1.220994 -2.750000 +v 0.000000 1.187500 -2.750000 +v 0.125000 1.220994 -2.750000 +v 0.216506 1.312500 -2.750000 +v 0.250000 1.437500 -2.750000 +v 0.216506 1.562500 -2.750000 +v 0.125000 1.654006 -2.750000 +v 0.000000 1.625000 1.500000 +v -0.093750 1.599880 1.500000 +v -0.162380 1.531250 1.500000 +v -0.187500 1.437500 1.500000 +v -0.162380 1.343750 1.500000 +v -0.093750 1.275120 1.500000 +v 0.000000 1.250000 1.500000 +v 0.093750 1.275120 1.500000 +v 0.162380 1.343750 1.500000 +v 0.187500 1.437500 1.500000 +v 0.162380 1.531250 1.500000 +v 0.093750 1.599880 1.500000 +v 0.500000 -0.437500 -7.750000 +v -0.500000 -0.437500 -7.750000 +v 0.125000 -2.812500 -7.250000 +v -0.125000 -2.812500 -7.250000 +v -0.125000 -0.562500 -8.000000 +v 0.125000 -0.562500 -8.000000 +v 0.125000 0.062500 -8.000000 +v -0.125000 0.062500 -8.000000 +v 0.125000 -2.812500 -5.750000 +v -0.125000 -2.812500 -5.750000 +v 0.125000 -2.562500 -5.500000 +v -0.125000 -2.562500 -5.500000 +v 0.125000 -2.312500 -5.750000 +v -0.125000 -2.312500 -5.750000 +v -0.250000 -1.312500 -4.500000 +v 0.250000 -1.312500 -4.500000 +v -0.375000 -1.437500 -4.500000 +v 0.375000 -1.437500 -4.500000 +v -0.375000 -1.062500 -3.000000 +v 0.375000 -1.062500 -3.000000 +v -0.125000 0.312500 2.750000 +v 0.125000 0.312500 2.750000 +v -0.125000 0.312500 2.625000 +v 0.125000 0.312500 2.625000 +v -0.125000 0.687500 2.000000 +v 0.125000 0.687500 2.000000 +v -0.125000 0.687500 1.875000 +v 0.125000 0.687500 1.875000 +v -0.125000 1.250000 1.500000 +v 0.125000 1.250000 1.500000 +v -0.125000 1.250000 1.375000 +v 0.125000 1.250000 1.375000 +v -0.062500 0.312500 2.625000 +v 0.062500 0.312500 2.625000 +v -0.062500 0.687500 1.875000 +v 0.062500 0.687500 1.875000 +v -0.062500 1.250000 1.375000 +v 0.062500 1.250000 1.375000 +v -0.062500 0.437500 2.125000 +v 0.062500 0.437500 2.125000 +v -0.062500 0.687500 1.625000 +v 0.062500 0.687500 1.625000 +v -0.062500 1.250000 1.125000 +v 0.062500 1.250000 1.125000 +v -0.187500 1.437500 -0.750000 +v -0.162380 1.531250 -0.750000 +v -0.093750 1.599880 -0.750000 +v 0.000000 1.625000 -0.750000 +v -0.162380 1.343750 -0.750000 +v -0.093750 1.275120 -0.750000 +v 0.000000 1.250000 -0.750000 +v 0.093750 1.275120 -0.750000 +v 0.162380 1.343750 -0.750000 +v 0.187500 1.437500 -0.750000 +v 0.162380 1.531250 -0.750000 +v 0.093750 1.599880 -0.750000 +v 0.000000 1.687500 -1.250000 +v -0.125000 1.654006 -1.250000 +v -0.216506 1.562500 -1.250000 +v -0.250000 1.437500 -1.250000 +v -0.216506 1.312500 -1.250000 +v -0.125000 1.220994 -1.250000 +v 0.000000 1.187500 -1.250000 +v 0.125000 1.220994 -1.250000 +v 0.216506 1.312500 -1.250000 +v 0.250000 1.437500 -1.250000 +v 0.216506 1.562500 -1.250000 +v 0.125000 1.654006 -1.250000 +v -0.125000 0.312500 -0.125000 +v 0.125000 0.312500 -0.125000 +v -0.125000 0.312500 -0.250000 +v 0.125000 0.312500 -0.250000 +v 0.125000 0.562500 -0.125000 +v -0.125000 0.562500 -0.125000 +v -0.125000 0.562500 -0.250000 +v 0.125000 0.562500 -0.250000 +v 0.125000 0.812500 -0.375000 +v -0.125000 0.812500 -0.375000 +v -0.125000 0.812500 -0.500000 +v 0.125000 0.812500 -0.500000 +v 0.125000 1.187500 -1.250000 +v -0.125000 1.187500 -1.250000 +v -0.125000 1.187500 -1.375000 +v 0.125000 1.187500 -1.375000 +v -0.062500 0.312500 -0.125000 +v 0.062500 0.312500 -0.125000 +v -0.062500 0.312500 0.125000 +v 0.062500 0.312500 0.125000 +v -0.062500 0.562500 -0.125000 +v 0.062500 0.562500 -0.125000 +v -0.062500 0.562500 0.125000 +v 0.062500 0.562500 0.125000 +v -0.062500 0.812500 -0.375000 +v 0.062500 0.812500 -0.375000 +v -0.062500 0.812500 0.000000 +v 0.062500 0.812500 0.000000 +v -0.062500 1.187500 -1.250000 +v 0.062500 1.187500 -1.250000 +v -0.062500 1.250000 -0.500000 +v 0.062500 1.250000 -0.500000 +v 0.375000 -0.562500 -4.500000 +v -0.375000 -0.562500 -4.500000 +v 0.375000 -0.562500 -3.000000 +v -0.375000 -0.562500 -3.000000 +v -0.250000 -0.687500 1.750000 +v 0.250000 -0.687500 1.750000 +v -0.250000 -0.687500 0.750000 +v 0.250000 -0.687500 0.750000 +v -0.250000 -0.937500 1.250000 +v 0.250000 -0.937500 1.250000 +v -0.250000 -0.937500 0.875000 +v 0.250000 -0.937500 0.875000 +v -0.250000 -2.187500 0.000000 +v 0.250000 -2.187500 0.000000 +v -0.250000 -2.187500 0.375000 +v 0.250000 -2.187500 0.375000 +v -0.250000 -2.562500 -0.500000 +v 0.250000 -2.562500 -0.500000 +v -0.250000 -2.562500 -0.875000 +v 0.250000 -2.562500 -0.875000 +v -0.250000 -2.312500 -1.125000 +v 0.250000 -2.312500 -1.125000 +v -0.250000 -1.312500 -0.625000 +v 0.250000 -1.312500 -0.625000 +v -0.250000 -1.312500 -0.375000 +v 0.250000 -1.312500 -0.375000 +v -0.250000 -1.000000 -0.500000 +v 0.250000 -1.000000 -0.500000 +v -0.250000 -0.687500 -0.375000 +v 0.250000 -0.687500 -0.375000 +v -0.250000 -2.812500 -0.250000 +v 0.250000 -2.812500 -0.250000 +v -0.250000 -2.812500 -1.750000 +v 0.250000 -2.812500 -1.750000 +v -0.250000 -2.062500 -1.750000 +v 0.250000 -2.062500 -1.750000 +v -0.250000 -0.937500 -1.250000 +v 0.250000 -0.937500 -1.250000 +v -0.250000 -0.687500 -1.500000 +v 0.250000 -0.687500 -1.500000 +v 0.000000 -0.750000 2.937500 +v 0.000000 -0.500000 2.937500 +v 0.088388 -0.750000 2.974112 +v 0.088388 -0.500000 2.974112 +v 0.125000 -0.750000 3.062500 +v 0.125000 -0.500000 3.062500 +v 0.088388 -0.750000 3.150888 +v 0.088388 -0.500000 3.150888 +v 0.000000 -0.750000 3.187500 +v 0.000000 -0.500000 3.187500 +v -0.088388 -0.750000 3.150888 +v -0.088388 -0.500000 3.150888 +v -0.125000 -0.750000 3.062500 +v -0.125000 -0.500000 3.062500 +v -0.088388 -0.750000 2.974112 +v -0.088388 -0.500000 2.974112 +v 0.125000 -0.125000 3.250000 +v 0.187500 -0.125000 3.250000 +v 0.125000 -0.125000 2.875000 +v 0.187500 -0.125000 2.875000 +v 0.125000 -0.687500 2.875000 +v 0.125000 -0.687500 3.125000 +v 0.187500 -0.687500 3.125000 +v 0.187500 -0.687500 2.875000 +v -0.125000 -0.437500 3.125000 +v -0.125000 -0.437500 2.875000 +v 0.125000 -0.437500 2.875000 +v 0.125000 -0.437500 3.125000 +v -0.125000 -0.187500 3.125000 +v 0.125000 -0.187500 3.125000 +v -0.125000 -0.750000 3.250000 +v 0.125000 -0.750000 3.250000 +v -0.125000 -0.750000 2.625000 +v 0.125000 -0.750000 2.625000 +v -0.125000 -1.250000 2.750000 +v -0.125000 -1.250000 3.250000 +v 0.125000 -1.250000 3.250000 +v 0.125000 -1.250000 2.750000 +v -0.125000 -1.625000 2.750000 +v -0.125000 -1.500000 3.312500 +v 0.125000 -1.500000 3.312500 +v 0.125000 -1.625000 2.750000 +v -0.125000 -2.750000 3.375000 +v 0.125000 -2.750000 3.375000 +v -0.125000 -2.750000 2.750000 +v 0.125000 -2.750000 2.750000 +v -0.125000 -2.125000 2.625000 +v -0.125000 -2.125000 3.312500 +v 0.125000 -2.125000 3.312500 +v 0.125000 -2.125000 2.625000 +v -0.125000 -2.625000 2.625000 +v -0.125000 -2.500000 3.250000 +v 0.125000 -2.500000 3.250000 +v 0.125000 -2.625000 2.625000 +v 0.250000 -0.750000 3.125000 +v 0.250000 -0.750000 2.750000 +v 0.250000 -1.250000 3.125000 +v 0.250000 -1.250000 2.875000 +v 0.250000 -1.500000 3.187500 +v 0.250000 -1.625000 2.875000 +v 0.250000 -2.750000 3.250000 +v 0.250000 -2.750000 2.875000 +v 0.250000 -2.125000 3.187500 +v 0.250000 -2.125000 2.750000 +v 0.250000 -2.500000 3.125000 +v 0.250000 -2.625000 2.750000 +v -0.250000 -0.750000 2.750000 +v -0.250000 -0.750000 3.125000 +v -0.250000 -1.250000 2.875000 +v -0.250000 -1.250000 3.125000 +v -0.250000 -1.625000 2.875000 +v -0.250000 -1.500000 3.187500 +v -0.250000 -2.750000 2.875000 +v -0.250000 -2.750000 3.250000 +v -0.250000 -2.125000 2.750000 +v -0.250000 -2.125000 3.187500 +v -0.250000 -2.625000 2.750000 +v -0.250000 -2.500000 3.125000 +v 0.312500 -0.625000 2.500000 +v 0.250000 -0.687500 2.536612 +v 0.224112 -0.713388 2.625000 +v 0.250000 -0.687500 2.713388 +v 0.312500 -0.625000 2.750000 +v 0.375000 -0.562500 2.713388 +v 0.400888 -0.536612 2.625000 +v 0.375000 -0.562500 2.536612 +v 0.294194 -0.731694 2.536612 +v 0.356694 -0.669194 2.500000 +v 0.268306 -0.757582 2.625000 +v 0.294194 -0.731694 2.713388 +v 0.356694 -0.669194 2.750000 +v 0.419194 -0.606694 2.713388 +v 0.445083 -0.580806 2.625000 +v 0.419194 -0.606694 2.536612 +v 0.369638 -0.744638 2.580806 +v 0.400888 -0.713388 2.562500 +v 0.356694 -0.757583 2.625000 +v 0.369638 -0.744638 2.669194 +v 0.400888 -0.713388 2.687500 +v 0.432138 -0.682138 2.669194 +v 0.445083 -0.669194 2.625000 +v 0.432138 -0.682138 2.580806 +v -0.625000 -0.812500 -0.625000 +v -0.625000 -0.562500 -0.625000 +v -0.625000 -0.812500 -0.875000 +v -0.625000 -0.562500 -0.875000 +v 0.375000 -0.812500 -0.625000 +v 0.375000 -0.562500 -0.625000 +v 0.375000 -0.812500 -0.875000 +v 0.375000 -0.562500 -0.875000 +v 0.375000 -0.812500 -0.625000 +v 0.375000 -0.562500 -0.625000 +v 0.375000 -0.812500 -0.875000 +v 0.375000 -0.562500 -0.875000 +v 0.250000 -0.937500 -0.625000 +v 0.250000 -0.937500 -0.875000 +v 0.250000 -0.812500 -0.500000 +v 0.250000 -0.562500 -0.500000 +v 0.250000 -0.812500 -1.000000 +v 0.250000 -0.562500 -1.000000 +v -0.250000 -0.937500 -0.625000 +v -0.250000 -0.937500 -0.875000 +v -0.250000 -0.812500 -0.500000 +v -0.250000 -0.562500 -0.500000 +v -0.250000 -0.812500 -1.000000 +v -0.250000 -0.562500 -1.000000 +v -0.375000 -0.812500 -0.625000 +v -0.375000 -0.562500 -0.625000 +v -0.375000 -0.812500 -0.875000 +v -0.375000 -0.562500 -0.875000 +v -0.125000 -1.187500 -0.125000 +v 0.125000 -1.187500 -0.125000 +v -0.125000 -0.937500 -0.187500 +v 0.125000 -0.937500 -0.187500 +v -0.125000 -0.687500 -0.125000 +v 0.125000 -0.687500 -0.125000 +v -0.125000 -1.187500 -0.500000 +v 0.125000 -1.187500 -0.500000 +v -0.125000 -0.937500 -0.500000 +v 0.125000 -0.937500 -0.500000 +v -0.125000 -0.687500 -0.375000 +v 0.125000 -0.687500 -0.375000 +v 0.000000 0.125000 -3.000000 +v -0.062500 0.108253 -3.000000 +v -0.108253 0.062500 -3.000000 +v -0.125000 -0.000000 -3.000000 +v -0.108253 -0.062500 -3.000000 +v -0.062500 -0.108253 -3.000000 +v 0.000000 -0.125000 -3.000000 +v 0.062500 -0.108253 -3.000000 +v 0.108253 -0.062500 -3.000000 +v 0.125000 -0.000000 -3.000000 +v 0.108253 0.062500 -3.000000 +v 0.062500 0.108253 -3.000000 +v 0.000000 0.125000 -2.000000 +v -0.062500 0.108253 -2.000000 +v -0.108253 0.062500 -2.000000 +v -0.125000 -0.000000 -2.000000 +v -0.108253 -0.062500 -2.000000 +v -0.062500 -0.108253 -2.000000 +v 0.000000 -0.125000 -2.000000 +v 0.062500 -0.108253 -2.000000 +v 0.108253 -0.062500 -2.000000 +v 0.125000 -0.000000 -2.000000 +v 0.108253 0.062500 -2.000000 +v 0.062500 0.108253 -2.000000 +v -0.250000 -0.625000 -3.062500 +v 0.250000 -0.625000 -3.062500 +v -0.250000 -0.250000 -4.437500 +v 0.250000 -0.250000 -4.437500 +v -0.250000 -1.625000 -4.437500 +v -0.250000 -1.250000 -3.062500 +v 0.250000 -1.250000 -3.062500 +v 0.250000 -1.625000 -4.437500 +v -0.250000 -3.625000 -3.937500 +v 0.250000 -3.625000 -3.937500 +v -0.250000 -3.250000 -2.562500 +v 0.250000 -3.250000 -2.562500 +v 0.250000 -0.953125 -3.062500 +v -0.250000 -0.953125 -3.062500 +v -0.250000 -1.421875 -4.437500 +v -0.250000 -1.078125 -3.062500 +v 0.250000 -1.296875 -4.437500 +v -0.250000 -1.296875 -4.437500 +v 0.250000 -1.421875 -4.437500 +v 0.250000 -1.078125 -3.062500 +v -0.062500 -0.250000 -4.375000 +v -0.125000 -0.266747 -4.375000 +v -0.170753 -0.312500 -4.375000 +v -0.187500 -0.375000 -4.375000 +v -0.170753 -0.437500 -4.375000 +v -0.125000 -0.483253 -4.375000 +v -0.062500 -0.500000 -4.375000 +v 0.000000 -0.483253 -4.375000 +v 0.045753 -0.437500 -4.375000 +v 0.062500 -0.375000 -4.375000 +v 0.045753 -0.312500 -4.375000 +v 0.000000 -0.266747 -4.375000 +v -0.062500 -0.250000 -3.625000 +v -0.125000 -0.266747 -3.625000 +v -0.170753 -0.312500 -3.625000 +v -0.187500 -0.375000 -3.625000 +v -0.170753 -0.437500 -3.625000 +v -0.125000 -0.483253 -3.625000 +v -0.062500 -0.500000 -3.625000 +v 0.000000 -0.483253 -3.625000 +v 0.045753 -0.437500 -3.625000 +v 0.062500 -0.375000 -3.625000 +v 0.045753 -0.312500 -3.625000 +v 0.000000 -0.266747 -3.625000 +v -0.062500 -0.281250 -3.500000 +v -0.109375 -0.293810 -3.500000 +v -0.143690 -0.328125 -3.500000 +v -0.156250 -0.375000 -3.500000 +v -0.143690 -0.421875 -3.500000 +v -0.109375 -0.456190 -3.500000 +v -0.062500 -0.468750 -3.500000 +v -0.015625 -0.456190 -3.500000 +v 0.018690 -0.421875 -3.500000 +v 0.031250 -0.375000 -3.500000 +v 0.018690 -0.328125 -3.500000 +v -0.015625 -0.293810 -3.500000 +v -0.062500 -0.281250 -3.375000 +v -0.109375 -0.293810 -3.375000 +v -0.143690 -0.328125 -3.375000 +v -0.156250 -0.375000 -3.375000 +v -0.143690 -0.421875 -3.375000 +v -0.109375 -0.456190 -3.375000 +v -0.062500 -0.468750 -3.375000 +v -0.015625 -0.456190 -3.375000 +v 0.018690 -0.421875 -3.375000 +v 0.031250 -0.375000 -3.375000 +v 0.018690 -0.328125 -3.375000 +v -0.015625 -0.293810 -3.375000 +v -0.062500 -0.375000 -3.125000 +v -0.250000 -0.375000 -3.312500 +v 0.250000 -0.375000 -3.312500 +v 0.062500 -0.467817 -4.375000 +v 0.000000 -0.484564 -4.375000 +v -0.045753 -0.530317 -4.375000 +v -0.062500 -0.592817 -4.375000 +v -0.045753 -0.655317 -4.375000 +v 0.000000 -0.701071 -4.375000 +v 0.062500 -0.717817 -4.375000 +v 0.125000 -0.701071 -4.375000 +v 0.170753 -0.655317 -4.375000 +v 0.187500 -0.592817 -4.375000 +v 0.170753 -0.530317 -4.375000 +v 0.125000 -0.484564 -4.375000 +v 0.062500 -0.467817 -3.625000 +v 0.000000 -0.484564 -3.625000 +v -0.045753 -0.530317 -3.625000 +v -0.062500 -0.592817 -3.625000 +v -0.045753 -0.655317 -3.625000 +v 0.000000 -0.701071 -3.625000 +v 0.062500 -0.717817 -3.625000 +v 0.125000 -0.701071 -3.625000 +v 0.170753 -0.655317 -3.625000 +v 0.187500 -0.592817 -3.625000 +v 0.170753 -0.530317 -3.625000 +v 0.125000 -0.484564 -3.625000 +v 0.062500 -0.499067 -3.500000 +v 0.015625 -0.511627 -3.500000 +v -0.018690 -0.545942 -3.500000 +v -0.031250 -0.592817 -3.500000 +v -0.018690 -0.639692 -3.500000 +v 0.015625 -0.674007 -3.500000 +v 0.062500 -0.686567 -3.500000 +v 0.109375 -0.674007 -3.500000 +v 0.143690 -0.639692 -3.500000 +v 0.156250 -0.592817 -3.500000 +v 0.143690 -0.545942 -3.500000 +v 0.109375 -0.511627 -3.500000 +v 0.062500 -0.499067 -3.375000 +v 0.015625 -0.511627 -3.375000 +v -0.018690 -0.545942 -3.375000 +v -0.031250 -0.592817 -3.375000 +v -0.018690 -0.639692 -3.375000 +v 0.015625 -0.674007 -3.375000 +v 0.062500 -0.686567 -3.375000 +v 0.109375 -0.674007 -3.375000 +v 0.143690 -0.639692 -3.375000 +v 0.156250 -0.592817 -3.375000 +v 0.143690 -0.545942 -3.375000 +v 0.109375 -0.511627 -3.375000 +v 0.062500 -0.592817 -3.125000 +v -0.250000 -0.375000 -3.562500 +v 0.250000 -0.375000 -3.562500 +v -0.250000 -0.250000 -3.812500 +v 0.250000 -0.250000 -3.812500 +v -0.125000 -0.250000 -4.437500 +v -0.125000 -0.375000 -3.312500 +v -0.125000 -0.375000 -3.562500 +v -0.125000 -0.250000 -3.812500 +v 0.125000 -0.250000 -4.437500 +v 0.125000 -0.375000 -3.312500 +v 0.125000 -0.375000 -3.562500 +v 0.125000 -0.250000 -3.812500 +v -0.125000 -0.562500 -3.125000 +v 0.125000 -0.562500 -3.125000 +v -0.125000 -0.687500 -3.125000 +v 0.125000 -0.687500 -3.125000 +v -0.125000 -0.687500 -4.375000 +v 0.125000 -0.687500 -4.375000 +v -0.125000 -0.437500 -4.437500 +v 0.125000 -0.437500 -4.437500 +v -0.125000 -0.437500 -4.375000 +v 0.125000 -0.437500 -4.375000 +v 0.343750 -0.008373 2.687500 +v 0.406250 -0.116627 2.687500 +v 0.343750 -0.008373 2.062500 +v 0.406250 -0.116627 2.062500 +v 0.452003 0.054127 2.687500 +v 0.514503 -0.054127 2.687500 +v -0.281250 -0.031250 -3.250000 +v 0.560256 0.116627 2.437500 +v 0.622756 0.008373 2.437500 +v -0.093750 0.281250 -3.250000 +v -0.093750 0.281250 -4.750000 +v 0.885016 0.304127 2.437500 +v 0.947516 0.195873 2.437500 +v -0.281250 -0.031250 -4.750000 +v 0.993269 0.366626 2.062500 +v 0.993269 0.366626 2.500000 +v 1.055769 0.258373 2.500000 +v 1.055769 0.258373 2.062500 +v -0.406250 -0.031250 -4.750000 +v -0.156250 0.281250 -3.250000 +v -0.218750 0.281250 -4.750000 +v -0.218750 0.281250 -3.250000 +v -0.343750 -0.031250 -3.250000 +v -0.406250 -0.031250 -3.250000 +v -0.156250 0.281250 -4.750000 +v -0.343750 -0.031250 -4.750000 +v -0.093750 0.281250 -4.750000 +v -0.281250 -0.031250 -4.750000 +v -0.125000 -1.375000 -4.500000 +v 0.125000 -1.375000 -4.500000 +v -0.125000 -1.750000 -4.875000 +v 0.125000 -1.750000 -4.875000 +v -0.125000 -1.312500 -4.500000 +v 0.125000 -1.312500 -4.500000 +v -0.125000 -1.687500 -5.000000 +v 0.125000 -1.687500 -5.000000 +v 0.000000 1.687500 -2.250000 +v -0.125000 1.654006 -2.250000 +v -0.216506 1.562500 -2.250000 +v -0.250000 1.437500 -2.250000 +v -0.216506 1.312500 -2.250000 +v -0.125000 1.220994 -2.250000 +v 0.000000 1.187500 -2.250000 +v 0.125000 1.220994 -2.250000 +v 0.216506 1.312500 -2.250000 +v 0.250000 1.437500 -2.250000 +v 0.216506 1.562500 -2.250000 +v 0.125000 1.654006 -2.250000 +v -0.062500 0.312500 2.000000 +v 0.062500 0.312500 2.000000 +v 0.437500 -1.031250 -6.625000 +v 0.437500 -0.781250 -6.625000 +v -0.562500 -0.812500 -7.187500 +v 0.562500 -0.812500 -7.187500 +v -0.562500 -0.856694 -7.169194 +v 0.562500 -0.856694 -7.169194 +v -0.562500 -0.875000 -7.125000 +v 0.562500 -0.875000 -7.125000 +v -0.562500 -0.856694 -7.080806 +v 0.562500 -0.856694 -7.080806 +v -0.562500 -0.812500 -7.062500 +v 0.562500 -0.812500 -7.062500 +v -0.562500 -0.768306 -7.080806 +v 0.562500 -0.768306 -7.080806 +v -0.562500 -0.750000 -7.125000 +v 0.562500 -0.750000 -7.125000 +v -0.562500 -0.768306 -7.169194 +v 0.562500 -0.768306 -7.169194 +v 0.437500 -0.781250 -7.625000 +v 0.437500 -1.031250 -7.625000 +v 0.437500 -0.968750 -7.562500 +v 0.437500 -0.843750 -7.562500 +v 0.437500 -0.968750 -6.687500 +v 0.437500 -0.843750 -6.687500 +v 0.500000 -0.968750 -7.562500 +v 0.500000 -0.843750 -7.562500 +v 0.500000 -0.968750 -6.687500 +v 0.500000 -0.843750 -6.687500 +v 0.500000 -1.031250 -7.625000 +v 0.500000 -0.781250 -7.625000 +v 0.500000 -1.031250 -6.625000 +v 0.500000 -0.781250 -6.625000 +v 0.417387 0.411639 2.581886 +v 0.292387 0.320139 2.778107 +v -0.573638 0.531448 2.324953 +v -0.448637 0.622948 2.128732 +v -0.425761 0.586866 2.206109 +v -0.488261 0.541116 2.304220 +v 0.332011 0.401971 2.602619 +v 0.269511 0.356221 2.700729 +v -0.425761 0.643510 2.232523 +v -0.488261 0.597761 2.330633 +v 0.332011 0.458615 2.629033 +v 0.269511 0.412865 2.727143 +v -0.448637 0.679592 2.155145 +v -0.573638 0.588092 2.351367 +v 0.417387 0.468283 2.608299 +v 0.292387 0.376783 2.804521 +v -0.250000 -0.062500 3.875000 +v -0.156250 -0.087620 3.875000 +v -0.087620 -0.156250 3.875000 +v -0.062500 -0.250000 3.875000 +v -0.087620 -0.343750 3.875000 +v -0.156250 -0.412380 3.875000 +v -0.250000 -0.437500 3.875000 +v -0.343750 -0.412380 3.875000 +v -0.412380 -0.343750 3.875000 +v -0.437500 -0.250000 3.875000 +v -0.412380 -0.156250 3.875000 +v -0.343750 -0.087620 3.875000 +v -0.250000 -0.062500 2.875000 +v -0.156250 -0.087620 2.875000 +v -0.087620 -0.156250 2.875000 +v -0.062500 -0.250000 2.875000 +v -0.087620 -0.343750 2.875000 +v -0.156250 -0.412380 2.875000 +v -0.250000 -0.437500 2.875000 +v -0.343750 -0.412380 2.875000 +v -0.412380 -0.343750 2.875000 +v -0.437500 -0.250000 2.875000 +v -0.412380 -0.156250 2.875000 +v -0.343750 -0.087620 2.875000 +v -0.437500 -0.281250 3.875000 +v -0.312500 -0.281250 3.875000 +v -0.437500 -0.218750 3.875000 +v -0.312500 -0.218750 3.875000 +v -0.437500 -0.218750 3.937500 +v -0.437500 -0.281250 3.937500 +v -0.312500 -0.281250 4.000000 +v -0.312500 -0.218750 4.000000 +v -0.187500 -0.281250 3.875000 +v -0.062500 -0.281250 3.875000 +v -0.187500 -0.218750 3.875000 +v -0.062500 -0.218750 3.875000 +v -0.187500 -0.218750 4.000000 +v -0.187500 -0.281250 4.000000 +v -0.062500 -0.281250 3.937500 +v -0.062500 -0.218750 3.937500 +v -0.250000 -0.687500 -0.250000 +v 0.250000 -0.687500 -0.250000 +v -0.500000 -0.437500 -0.250000 +v 0.500000 -0.437500 -0.250000 +vt 0.696970 0.132530 +vt 0.693182 0.144578 +vt 0.693182 0.132530 +vt 0.117424 0.048193 +vt 0.113636 0.060241 +vt 0.113636 0.048193 +vt 0.117424 0.060241 +vt 0.113636 0.072289 +vt 0.117424 0.084337 +vt 0.117424 0.072289 +vt 0.117424 0.096386 +vt 0.113636 0.084337 +vt 0.117424 0.108434 +vt 0.113636 0.096386 +vt 0.113636 0.120482 +vt 0.113636 0.108434 +vt 0.117424 0.120482 +vt 0.113636 0.132530 +vt 0.117424 0.144578 +vt 0.117424 0.132530 +vt 0.117424 0.012048 +vt 0.113636 -0.000000 +vt 0.117424 0.000000 +vt 0.113636 0.024096 +vt 0.113636 0.012048 +vt 0.117424 0.024096 +vt 0.113636 0.036145 +vt 0.117424 0.036145 +vt 0.106061 0.072289 +vt 0.102273 0.060241 +vt 0.106061 0.060241 +vt 0.102273 0.048193 +vt 0.106061 0.048193 +vt 0.102273 0.036145 +vt 0.106061 0.036145 +vt 0.102273 0.024096 +vt 0.106061 0.024096 +vt 0.102273 0.012048 +vt 0.106061 0.012048 +vt 0.106061 -0.000000 +vt 0.102273 0.144578 +vt 0.106061 0.132530 +vt 0.106061 0.144578 +vt 0.102273 0.120482 +vt 0.106061 0.120482 +vt 0.102273 0.108434 +vt 0.106061 0.108434 +vt 0.106061 0.096386 +vt 0.102273 0.096386 +vt 0.106061 0.084337 +vt 0.102273 0.084337 +vt 0.071970 0.048193 +vt 0.068182 0.060241 +vt 0.068182 0.048193 +vt 0.071970 0.060241 +vt 0.068182 0.072289 +vt 0.071970 0.084337 +vt 0.071970 0.072289 +vt 0.071970 0.096386 +vt 0.068182 0.084337 +vt 0.071970 0.108434 +vt 0.068182 0.096386 +vt 0.068182 0.120482 +vt 0.068182 0.108434 +vt 0.071970 0.120482 +vt 0.068182 0.132530 +vt 0.071970 0.144578 +vt 0.071970 0.132530 +vt 0.071970 0.012048 +vt 0.068182 -0.000000 +vt 0.071970 -0.000000 +vt 0.068182 0.024096 +vt 0.068182 0.012048 +vt 0.071970 0.024096 +vt 0.068182 0.036145 +vt 0.071970 0.036145 +vt 0.022727 0.048193 +vt 0.018939 0.060241 +vt 0.018939 0.048193 +vt 0.022727 0.060241 +vt 0.018939 0.072289 +vt 0.022727 0.084337 +vt 0.022727 0.072289 +vt 0.022727 0.096386 +vt 0.018939 0.084337 +vt 0.022727 0.120482 +vt 0.018939 0.132530 +vt 0.018939 0.120482 +vt 0.022727 0.144578 +vt 0.022727 0.132530 +vt 0.022727 0.012048 +vt 0.018939 -0.000000 +vt 0.022727 -0.000000 +vt 0.018939 0.024096 +vt 0.018939 0.012048 +vt 0.105008 0.234905 +vt 0.098485 0.240894 +vt 0.091962 0.222926 +vt 0.060606 0.024096 +vt 0.053030 0.036145 +vt 0.053030 0.030120 +vt 0.060606 0.048193 +vt 0.060606 0.036145 +vt 0.060606 0.120482 +vt 0.053030 0.108434 +vt 0.060606 0.108434 +vt 0.060606 0.096386 +vt 0.053030 0.102410 +vt 0.045455 0.204819 +vt 0.007576 0.198795 +vt 0.045455 0.192771 +vt 0.007576 0.186747 +vt 0.045455 0.180723 +vt 0.045455 0.192771 +vt 0.007576 0.150602 +vt 0.045455 0.156627 +vt 0.007576 0.156627 +vt 0.007576 0.234940 +vt 0.045455 0.228916 +vt 0.045455 0.240964 +vt 0.011364 0.072289 +vt 0.007576 0.060241 +vt 0.011364 0.060241 +vt 0.007576 0.048193 +vt 0.011364 0.048193 +vt 0.000000 0.234940 +vt 0.007576 0.240964 +vt 0.007576 0.192771 +vt 0.000000 0.198795 +vt 0.011364 0.024096 +vt 0.007576 0.012048 +vt 0.011364 0.012048 +vt 0.011364 -0.000000 +vt 0.007576 0.144578 +vt 0.011364 0.132530 +vt 0.011364 0.144578 +vt 0.007576 0.120482 +vt 0.011364 0.120482 +vt 0.000000 0.186747 +vt 0.007576 0.180723 +vt 0.007576 0.144578 +vt 0.000000 0.150602 +vt 0.007576 0.096386 +vt 0.011364 0.084337 +vt 0.011364 0.096386 +vt 0.007576 0.084337 +vt 0.060606 0.240964 +vt 0.242424 0.289157 +vt 0.060606 0.289157 +vt 0.060606 0.530120 +vt 0.242424 0.506024 +vt 0.242424 0.530120 +vt 0.250000 0.433735 +vt 0.522727 0.448795 +vt 0.704545 0.433735 +vt 0.060606 0.481928 +vt 0.060606 0.506024 +vt 0.242424 0.337349 +vt 0.060606 0.313253 +vt 0.242424 0.313253 +vt 0.000000 0.337349 +vt 0.000000 0.313253 +vt 0.689394 0.493976 +vt 0.250000 0.433735 +vt 0.704545 0.433735 +vt 0.992424 0.487952 +vt 0.931818 0.463855 +vt 0.992424 0.463855 +vt 0.045455 0.289157 +vt 0.969697 0.536145 +vt 0.931818 0.487952 +vt 0.931818 0.656627 +vt 0.924242 0.632530 +vt 0.931818 0.632530 +vt 0.946970 0.439759 +vt 0.060606 0.337349 +vt 0.022727 0.385542 +vt 0.242424 0.397590 +vt 0.060606 0.397590 +vt 0.060606 0.421687 +vt 0.242424 0.481928 +vt 0.242424 0.421687 +vt 0.250000 0.493976 +vt 0.242424 0.518072 +vt 0.242424 0.493976 +vt 0.242424 0.493976 +vt 0.250000 0.493976 +vt 0.924242 0.439759 +vt 0.931818 0.439759 +vt 0.931818 0.548193 +vt 0.924242 0.487952 +vt 0.863636 0.463855 +vt 0.909091 0.439759 +vt 0.924242 0.463855 +vt 0.886364 0.536145 +vt 0.863636 0.487952 +vt 0.250000 0.518072 +vt 0.689394 0.518072 +vt 0.931818 0.572289 +vt 0.924242 0.548193 +vt 0.924242 0.391566 +vt 0.931818 0.391566 +vt 0.924242 0.572289 +vt 0.931818 0.680723 +vt 0.924242 0.656627 +vt 0.071970 0.759009 +vt 0.085106 0.771071 +vt 0.071970 0.807256 +vt 0.196970 0.813253 +vt 0.181818 0.819277 +vt 0.181818 0.813253 +vt 0.147727 0.813253 +vt 0.147727 0.819277 +vt 0.196970 0.873494 +vt 0.196970 0.819277 +vt 0.196970 0.759036 +vt 0.174242 0.759036 +vt 0.643939 0.566265 +vt 0.640152 0.578313 +vt 0.640152 0.566265 +vt 0.643939 0.590361 +vt 0.640152 0.590361 +vt 0.640152 0.602410 +vt 0.643939 0.602410 +vt 0.640152 0.614458 +vt 0.643939 0.614458 +vt 0.640152 0.626506 +vt 0.643939 0.638554 +vt 0.640152 0.638554 +vt 0.643939 0.650602 +vt 0.640152 0.650602 +vt 0.640152 0.662651 +vt 0.643939 0.518072 +vt 0.640152 0.530120 +vt 0.640152 0.518072 +vt 0.643939 0.530120 +vt 0.640152 0.542169 +vt 0.643939 0.542169 +vt 0.640152 0.554217 +vt 0.382576 0.578313 +vt 0.378788 0.566265 +vt 0.382576 0.566265 +vt 0.378788 0.554217 +vt 0.382576 0.554217 +vt 0.382576 0.542169 +vt 0.378788 0.542169 +vt 0.382576 0.530120 +vt 0.378788 0.530120 +vt 0.378788 0.518072 +vt 0.382576 0.518072 +vt 0.382576 0.662651 +vt 0.378788 0.650602 +vt 0.382576 0.650602 +vt 0.378788 0.638554 +vt 0.382576 0.638554 +vt 0.378788 0.626506 +vt 0.382576 0.626506 +vt 0.382576 0.614458 +vt 0.378788 0.614458 +vt 0.382576 0.602410 +vt 0.378788 0.602410 +vt 0.378788 0.590361 +vt 0.382576 0.590361 +vt 0.378788 0.578313 +vt 0.136364 0.530120 +vt 0.143939 0.668675 +vt 0.136364 0.674699 +vt 0.712121 0.662651 +vt 0.704545 0.698795 +vt 0.704545 0.662651 +vt 0.681818 0.662651 +vt 0.689394 0.698795 +vt 0.681818 0.698795 +vt 0.689394 0.753012 +vt 0.681818 0.753012 +vt 0.712121 0.698795 +vt 0.704545 0.753012 +vt 0.715909 0.753012 +vt 0.731061 0.698795 +vt 0.731061 0.753012 +vt 0.715909 0.698795 +vt 0.731061 0.674699 +vt 0.689394 0.753012 +vt 0.681818 0.777108 +vt 0.681818 0.753012 +vt 0.678030 0.753012 +vt 0.662879 0.698795 +vt 0.678030 0.698795 +vt 0.662879 0.674699 +vt 0.678030 0.662651 +vt 0.712121 0.753012 +vt 0.704545 0.777108 +vt 0.704545 0.753012 +vt 0.678030 0.777108 +vt 0.662879 0.753012 +vt 0.678030 0.753012 +vt 0.689394 0.777108 +vt 0.681818 0.801205 +vt 0.712121 0.801205 +vt 0.704545 0.801205 +vt 0.731061 0.777108 +vt 0.715909 0.753012 +vt 0.731061 0.753012 +vt 0.712121 0.843373 +vt 0.704545 0.843373 +vt 0.689394 0.801205 +vt 0.681818 0.843373 +vt 0.655303 0.801205 +vt 0.662879 0.777108 +vt 0.738636 0.801205 +vt 0.715909 0.777108 +vt 0.678030 0.801205 +vt 0.632576 0.849398 +vt 0.761364 0.849398 +vt 0.715909 0.801205 +vt 0.325758 0.385542 +vt 0.704545 0.409639 +vt 0.325758 0.409639 +vt 0.704545 0.409639 +vt 0.325758 0.385542 +vt 0.325758 0.409639 +vt 0.136364 0.759036 +vt 0.045455 0.710843 +vt 0.045455 0.759036 +vt -0.000000 0.710843 +vt 0.272727 0.710843 +vt 0.181818 0.759036 +vt 0.181818 0.674699 +vt 0.359848 0.915663 +vt 0.329545 0.891566 +vt 0.299242 0.915663 +vt 0.359848 0.915663 +vt 0.329545 0.891566 +vt 0.352273 0.891566 +vt 0.352273 0.891566 +vt 0.382576 0.771084 +vt 0.382576 0.771084 +vt 0.405303 0.771084 +vt 0.420455 0.710843 +vt 0.420455 0.710843 +vt 0.405303 0.771084 +vt 0.458333 0.734940 +vt 0.511364 0.710843 +vt 0.511364 0.710843 +vt 0.458333 0.734940 +vt 0.428030 0.855422 +vt 0.435606 0.885542 +vt 0.443182 0.855422 +vt 0.428030 0.855422 +vt 0.443182 0.855422 +vt 0.435606 0.885542 +vt 0.428030 0.915663 +vt 0.481061 0.891566 +vt 0.481061 0.891566 +vt 0.428030 0.915663 +vt 0.511364 0.783133 +vt 0.473485 0.759036 +vt 0.212180 0.795180 +vt 0.219696 0.783226 +vt 0.227213 0.795180 +vt 0.196970 0.813253 +vt 0.181818 0.819277 +vt 0.181818 0.813253 +vt 0.147727 0.813253 +vt 0.147727 0.819277 +vt 0.196970 0.873494 +vt 0.196970 0.819277 +vt 0.196970 0.759036 +vt 0.174242 0.759036 +vt 0.212121 0.759036 +vt 0.196970 0.783133 +vt 0.196970 0.759036 +vt 0.212121 0.783133 +vt 0.196970 0.807229 +vt 0.594697 0.951807 +vt 0.602273 0.963855 +vt 0.594697 1.000000 +vt 0.564394 0.759036 +vt 0.556818 0.746988 +vt 0.564394 0.710843 +vt 0.242193 0.795181 +vt 0.234848 0.806862 +vt 0.227503 0.795181 +vt 0.840909 0.572289 +vt 0.856061 0.548193 +vt 0.856061 0.572289 +vt 0.840909 0.548193 +vt 0.780303 0.524096 +vt 0.840909 0.524096 +vt 0.780303 0.548193 +vt 0.765152 0.572289 +vt 0.765152 0.548193 +vt 0.780303 0.572289 +vt 0.840909 0.596386 +vt 0.780303 0.596386 +vt 0.840909 0.500000 +vt 0.295455 0.777108 +vt 0.272727 0.746988 +vt 0.295455 0.746988 +vt 0.280303 0.807229 +vt 0.276515 0.777108 +vt 0.310606 0.777108 +vt 0.333333 0.746988 +vt 0.329545 0.777108 +vt 0.325758 0.807229 +vt 0.310606 0.807229 +vt 0.310606 0.710843 +vt 0.310606 0.746988 +vt 0.693182 0.120482 +vt 0.696970 0.126506 +vt 0.696970 0.108434 +vt 0.693182 0.108434 +vt 0.693182 0.096386 +vt 0.696970 0.102410 +vt 0.696970 0.084337 +vt 0.693182 0.084337 +vt 0.693182 0.072289 +vt 0.696970 0.078313 +vt 0.696970 0.060241 +vt 0.693182 0.060241 +vt 0.693182 0.048193 +vt 0.696970 0.054217 +vt 0.696970 0.036145 +vt 0.693182 0.036145 +vt 0.693182 0.024096 +vt 0.696970 0.030120 +vt 0.696970 0.012048 +vt 0.693182 0.012048 +vt 0.693182 -0.000000 +vt 0.696970 0.006024 +vt 0.089865 0.222918 +vt 0.089865 0.234913 +vt 0.076801 0.234913 +vt 0.878788 0.132530 +vt 0.840909 0.144578 +vt 0.840909 0.132530 +vt 0.893939 0.132530 +vt 0.878788 0.144578 +vt 0.909091 0.132530 +vt 0.893939 0.144578 +vt 0.810606 0.132530 +vt 0.772727 0.144578 +vt 0.772727 0.132530 +vt 0.912879 0.391566 +vt 1.000000 0.192771 +vt 1.000000 0.391566 +vt 0.795455 0.192771 +vt 0.882576 0.391566 +vt 0.795455 0.391566 +vt 0.882576 0.144578 +vt 0.882576 0.192771 +vt 0.174242 0.536145 +vt 0.166667 0.668675 +vt 0.166667 0.536145 +vt 0.143939 0.548193 +vt 0.143939 0.536145 +vt 0.174242 0.656627 +vt 0.174242 0.668675 +vt 0.151515 0.668675 +vt 0.181818 0.530120 +vt 0.809524 0.602471 +vt 0.809524 0.614396 +vt 0.796536 0.614396 +vt 0.757576 0.144578 +vt 0.757576 0.132530 +vt 0.809524 0.602471 +vt 0.809524 0.614396 +vt 0.796536 0.614396 +vt 0.810606 -0.000000 +vt 0.757576 0.120482 +vt 0.840909 -0.000000 +vt 0.924242 0.036145 +vt 0.893939 0.120482 +vt 0.742424 0.144578 +vt 0.742424 0.132530 +vt 0.704545 0.102410 +vt 0.696970 0.120482 +vt 0.696970 0.096386 +vt 0.719697 0.102410 +vt 0.727273 0.096386 +vt 0.727273 0.120482 +vt 0.765152 0.433735 +vt 0.772727 0.457831 +vt 0.765152 0.457831 +vt 0.772727 0.433735 +vt 0.848485 0.457831 +vt 0.833333 0.114458 +vt 0.818182 0.120482 +vt 0.818182 0.114458 +vt 0.863636 0.433735 +vt 0.848485 0.433735 +vt 0.772727 0.469880 +vt 0.848485 0.481928 +vt 0.772727 0.421687 +vt 0.784091 0.403614 +vt 0.799242 0.403614 +vt 0.799242 0.487952 +vt 0.662879 0.849398 +vt 0.625000 0.861446 +vt 0.625000 0.849398 +vt 0.617424 0.861446 +vt 0.625000 0.873494 +vt 0.617424 0.873494 +vt 0.693182 0.885542 +vt 0.670455 0.933735 +vt 0.670455 0.861446 +vt 0.617424 0.897590 +vt 0.662879 0.933735 +vt 0.662879 0.861446 +vt 0.625000 0.897590 +vt 0.617424 0.933735 +vt 0.636364 0.933735 +vt 0.662879 0.945783 +vt 0.636364 0.945783 +vt 0.640152 0.885542 +vt 0.295455 0.186747 +vt 0.287879 0.156627 +vt 0.295455 0.156627 +vt 0.625000 0.945783 +vt 0.617424 0.945783 +vt 0.196970 0.156627 +vt 0.287879 0.186747 +vt 0.196970 0.186747 +vt 0.196970 0.198795 +vt 0.287879 0.198795 +vt 0.287879 0.144578 +vt 0.196970 0.144578 +vt 0.431818 0.448795 +vt 0.189394 0.186747 +vt 0.689394 0.493976 +vt 0.431818 0.478916 +vt 0.522727 0.478916 +vt 0.196970 0.198795 +vt 0.287879 0.228916 +vt 0.196970 0.228916 +vt 0.193182 0.198795 +vt 0.170455 0.156627 +vt 0.140152 0.180723 +vt 0.140152 0.156627 +vt 0.178030 0.156627 +vt 0.170455 0.180723 +vt 0.174242 0.144578 +vt 0.136364 0.150602 +vt 0.174242 0.192771 +vt 0.886904 0.951811 +vt 0.939394 0.807222 +vt 0.991884 0.951811 +vt 0.640152 0.662651 +vt 0.715909 0.662651 +vt 0.753788 0.662651 +vt 0.071968 0.951608 +vt 0.068305 0.945782 +vt 0.071968 0.939956 +vt 0.087121 0.909639 +vt 0.075758 0.915663 +vt 0.079545 0.909639 +vt 0.071969 0.939389 +vt 0.069456 0.937733 +vt 0.074483 0.929738 +vt 0.075758 0.921687 +vt 0.087121 0.927711 +vt 0.079545 0.927711 +vt 0.090909 0.921687 +vt 0.147727 0.927711 +vt 0.094697 0.927711 +vt -0.000000 0.921687 +vt 0.011364 0.927711 +vt 0.003788 0.927711 +vt 0.015152 0.921687 +vt 0.071970 0.927711 +vt 0.018939 0.927711 +vt 0.147727 0.909639 +vt 0.090909 0.915663 +vt 0.094697 0.909639 +vt 0.011364 0.909639 +vt -0.000000 0.915663 +vt 0.003788 0.909639 +vt 0.071970 0.909639 +vt 0.015152 0.915663 +vt 0.018939 0.909639 +vt 0.071970 0.903614 +vt 0.018939 0.903614 +vt 0.011364 0.903614 +vt 0.003788 0.903614 +vt 0.147727 0.903614 +vt 0.094697 0.903614 +vt 0.087121 0.903614 +vt 0.079545 0.903614 +vt 0.151515 0.915663 +vt 0.151515 0.921687 +vt 0.011364 0.909639 +vt -0.000000 0.915663 +vt 0.003788 0.909639 +vt -0.000000 0.921687 +vt 0.011364 0.927711 +vt 0.003788 0.927711 +vt 0.018939 0.927711 +vt 0.075758 0.921687 +vt 0.071970 0.927711 +vt 0.087121 0.927711 +vt 0.079545 0.927711 +vt 0.090909 0.921687 +vt 0.147727 0.927711 +vt 0.094697 0.927711 +vt 0.018939 0.909639 +vt 0.075758 0.915663 +vt 0.015152 0.915663 +vt 0.079545 0.909639 +vt 0.090909 0.915663 +vt 0.147727 0.909639 +vt 0.094697 0.909639 +vt 0.147727 0.903614 +vt 0.094697 0.903614 +vt 0.087121 0.903614 +vt 0.079545 0.903614 +vt 0.015152 0.921687 +vt 0.018939 0.903614 +vt 0.071970 0.909639 +vt 0.011364 0.903614 +vt 0.003788 0.903614 +vt 0.151515 0.921687 +vt 0.151515 0.915663 +vt 0.065955 0.834302 +vt 0.075758 0.807301 +vt 0.085560 0.834302 +vt 0.087121 0.867470 +vt 0.083333 0.855422 +vt 0.087121 0.855422 +vt 0.071970 0.849398 +vt 0.064394 0.855422 +vt 0.064394 0.849398 +vt 0.087121 0.849398 +vt 0.083333 0.849398 +vt 0.075758 0.849398 +vt 0.071970 0.861446 +vt 0.075758 0.861446 +vt 0.083333 0.855422 +vt 0.087121 0.867470 +vt 0.083333 0.867470 +vt 0.075758 0.849398 +vt 0.075758 0.861446 +vt 0.071970 0.861446 +vt 0.071970 0.849398 +vt 0.087121 0.849398 +vt 0.083333 0.849398 +vt 0.064394 0.855422 +vt 0.064394 0.849398 +vt 0.250000 0.409639 +vt 0.250000 0.385542 +vt 0.250000 0.409639 +vt 0.071970 0.843373 +vt 0.064394 0.843373 +vt 0.071970 0.843373 +vt 0.696970 0.138554 +vt 0.113636 0.144578 +vt 0.102273 0.072289 +vt 0.102273 0.000000 +vt 0.102273 0.132530 +vt 0.068182 0.144578 +vt 0.018939 0.096386 +vt 0.018939 0.144578 +vt 0.022727 0.024096 +vt 0.094719 0.239289 +vt 0.091962 0.234905 +vt 0.090953 0.228916 +vt 0.094719 0.218542 +vt 0.098485 0.216937 +vt 0.102251 0.218542 +vt 0.105008 0.222926 +vt 0.106017 0.228916 +vt 0.102251 0.239289 +vt 0.053030 0.042169 +vt 0.053030 0.114458 +vt 0.007576 0.204819 +vt 0.045455 0.144578 +vt 0.007576 0.228916 +vt 0.007576 0.072289 +vt 0.000000 0.240964 +vt 0.000000 0.192771 +vt 0.007576 0.024096 +vt 0.007576 -0.000000 +vt 0.007576 0.132530 +vt 0.007576 0.192771 +vt 0.000000 0.192771 +vt 0.000000 0.144578 +vt 0.242424 0.240964 +vt 0.015152 0.289157 +vt 0.954545 0.536145 +vt 0.977273 0.439759 +vt 0.037879 0.385542 +vt 0.878788 0.439759 +vt 0.901515 0.536145 +vt 0.924242 0.680723 +vt 0.064385 0.804024 +vt 0.058833 0.771071 +vt 0.058833 0.795195 +vt 0.056801 0.783133 +vt 0.064385 0.762241 +vt 0.079554 0.762241 +vt 0.087138 0.783133 +vt 0.085106 0.795195 +vt 0.079554 0.804025 +vt 0.174242 0.873494 +vt 0.643939 0.578313 +vt 0.643939 0.626506 +vt 0.643939 0.662651 +vt 0.643939 0.554217 +vt 0.378788 0.662651 +vt 0.689394 0.662651 +vt 0.712121 0.753012 +vt 0.662879 0.753012 +vt 0.712121 0.777108 +vt 0.689394 0.843373 +vt 0.678030 0.843373 +vt 0.715909 0.843373 +vt -0.000000 0.759036 +vt 0.272727 0.759036 +vt 0.299242 0.915663 +vt 0.435606 0.734940 +vt 0.435606 0.734940 +vt 0.473485 0.759036 +vt 0.496212 0.915663 +vt 0.496212 0.915663 +vt 0.511364 0.783133 +vt 0.225011 0.803633 +vt 0.219696 0.807134 +vt 0.214381 0.803633 +vt 0.214381 0.786728 +vt 0.225011 0.786728 +vt 0.174242 0.873494 +vt 0.212121 0.807229 +vt 0.602273 0.987952 +vt 0.571970 1.000000 +vt 0.571970 0.951807 +vt 0.564394 0.987952 +vt 0.564394 0.963855 +vt 0.556818 0.722892 +vt 0.587121 0.710843 +vt 0.587121 0.759036 +vt 0.594697 0.722892 +vt 0.594697 0.746988 +vt 0.229654 0.786921 +vt 0.234848 0.783500 +vt 0.240042 0.786921 +vt 0.240042 0.803441 +vt 0.229654 0.803441 +vt 0.780303 0.500000 +vt 0.295455 0.807229 +vt 0.295455 0.710843 +vt 0.696970 0.120482 +vt 0.696970 0.114458 +vt 0.696970 0.096386 +vt 0.696970 0.090361 +vt 0.696970 0.072289 +vt 0.696970 0.066265 +vt 0.696970 0.048193 +vt 0.696970 0.042169 +vt 0.696970 0.024096 +vt 0.696970 0.018072 +vt 0.696970 -0.000000 +vt 0.087105 0.239304 +vt 0.083333 0.240911 +vt 0.079562 0.239304 +vt 0.075791 0.228916 +vt 0.076801 0.222918 +vt 0.079562 0.218527 +vt 0.083333 0.216920 +vt 0.087105 0.218527 +vt 0.090876 0.228916 +vt 0.909091 0.144578 +vt 0.810606 0.144578 +vt 0.912879 0.192771 +vt 0.795455 0.144578 +vt 0.174242 0.548193 +vt 0.143939 0.656627 +vt 0.151515 0.536145 +vt 0.806780 0.618761 +vt 0.803030 0.620359 +vt 0.799281 0.618761 +vt 0.795532 0.608434 +vt 0.796536 0.602471 +vt 0.799281 0.598106 +vt 0.803030 0.596508 +vt 0.806780 0.598106 +vt 0.810529 0.608434 +vt 0.806780 0.618761 +vt 0.803030 0.620359 +vt 0.799281 0.618761 +vt 0.795532 0.608434 +vt 0.796536 0.602471 +vt 0.799281 0.598106 +vt 0.803030 0.596508 +vt 0.806780 0.598106 +vt 0.810529 0.608434 +vt 0.742424 0.120482 +vt 0.727273 0.036145 +vt 0.924242 0.096386 +vt 0.909091 0.120482 +vt 0.704545 0.120482 +vt 0.719697 0.120482 +vt 0.833333 0.120482 +vt 0.863636 0.457831 +vt 0.848485 0.409639 +vt 0.814394 0.391566 +vt 0.852273 0.391566 +vt 0.852273 0.409639 +vt 0.852273 0.481928 +vt 0.852273 0.500000 +vt 0.814394 0.500000 +vt 0.784091 0.487952 +vt 0.708333 0.861446 +vt 0.708333 0.873494 +vt 0.693182 0.921687 +vt 0.696970 0.933735 +vt 0.625000 0.933735 +vt 0.640152 0.921687 +vt 0.189394 0.156627 +vt 0.287879 0.198795 +vt 0.193182 0.228916 +vt 0.178030 0.180723 +vt 0.136364 0.186747 +vt 0.969699 0.987093 +vt 0.939394 1.000007 +vt 0.909088 0.987093 +vt 0.878783 0.903614 +vt 0.886904 0.855418 +vt 0.909089 0.820136 +vt 0.969699 0.820136 +vt 0.991884 0.855418 +vt 1.000005 0.903614 +vt 0.074559 0.941663 +vt 0.075631 0.945782 +vt 0.074559 0.949902 +vt 0.069378 0.949902 +vt 0.069378 0.941663 +vt 0.068414 0.933736 +vt 0.069456 0.929738 +vt 0.071969 0.928082 +vt 0.075524 0.933736 +vt 0.074483 0.937733 +vt 0.087121 0.909639 +vt 0.071970 0.903614 +vt 0.081417 0.840890 +vt 0.075758 0.843302 +vt 0.070098 0.840890 +vt 0.064439 0.825301 +vt 0.065955 0.816301 +vt 0.070098 0.809712 +vt 0.081417 0.809712 +vt 0.085560 0.816301 +vt 0.087076 0.825301 +vt 0.083333 0.867470 +vt 0.087121 0.855422 +vt 0.250000 0.385542 +vt 0.064394 0.843373 +vt 0.094697 0.060241 +vt 0.094697 0.048193 +vt 0.094697 0.084337 +vt 0.094697 0.072289 +vt 0.094697 0.096386 +vt 0.094697 0.120482 +vt 0.094697 0.108434 +vt 0.094697 0.144578 +vt 0.094697 0.132530 +vt 0.094697 -0.000000 +vt 0.094697 0.024096 +vt 0.094697 0.012048 +vt 0.094697 0.036145 +vt 0.079545 0.096386 +vt 0.079545 0.036145 +vt 0.079545 -0.000000 +vt 0.079545 0.108434 +vt 0.079545 0.048193 +vt 0.079545 0.072289 +vt 0.079545 0.012048 +vt 0.079545 0.120482 +vt 0.079545 0.060241 +vt 0.079545 0.084337 +vt 0.079545 0.024096 +vt 0.079545 0.132530 +vt 0.060606 -0.000000 +vt 0.060606 0.072289 +vt 0.060606 0.012048 +vt 0.060606 0.060241 +vt 0.060606 0.084337 +vt 0.060606 0.132530 +vt 0.045455 0.174699 +vt 0.075758 0.168675 +vt 0.075758 0.174699 +vt 0.045455 0.150602 +vt 0.075758 0.156627 +vt 0.060606 0.144578 +vt 0.045455 0.210843 +vt 0.075758 0.204819 +vt 0.075758 0.210843 +vt 0.045455 0.216867 +vt 0.075758 0.222892 +vt 0.045455 0.222892 +vt 0.079545 0.144578 +vt 0.075758 0.180723 +vt 0.075758 0.162651 +vt 0.045455 0.162651 +vt 0.075758 0.216867 +vt 0.075758 0.228916 +vt 0.075758 0.186747 +vt 0.045455 0.186747 +vt 0.045455 0.168675 +vt 0.075758 0.234940 +vt 0.045455 0.234940 +vt 0.007576 0.174699 +vt 0.007576 0.216867 +vt 0.007576 0.222892 +vt 0.007576 0.210843 +vt 0.007576 0.168675 +vt 0.007576 0.162651 +vt 0.045455 0.198795 +vt -0.000000 0.060241 +vt -0.000000 0.066265 +vt 0.000000 0.054217 +vt 0.000000 0.012048 +vt 0.000000 0.018072 +vt 0.000000 0.132530 +vt 0.000000 0.138554 +vt 0.000000 0.084337 +vt -0.000000 0.090361 +vt 0.056818 0.795181 +vt -0.000000 0.783133 +vt 0.056818 0.783133 +vt 0.056818 0.903614 +vt -0.000000 0.891566 +vt 0.056818 0.891566 +vt 0.056818 0.867470 +vt -0.000000 0.855422 +vt 0.056818 0.855422 +vt 0.056818 0.807229 +vt -0.000000 0.795181 +vt 0.056818 0.771084 +vt -0.000000 0.759036 +vt 0.056818 0.759036 +vt 0.056818 0.879518 +vt -0.000000 0.867470 +vt 0.056818 0.819277 +vt -0.000000 0.807229 +vt 0.056818 0.843373 +vt -0.000000 0.831325 +vt 0.056818 0.831325 +vt -0.000000 0.771084 +vt -0.000000 0.879518 +vt -0.000000 0.819277 +vt -0.000000 0.843373 +vt 0.295455 0.192771 +vt 0.477273 0.144578 +vt 0.477273 0.192771 +vt 0.518939 0.614458 +vt 0.518939 0.554217 +vt 0.518939 0.518072 +vt 0.518939 0.626506 +vt 0.518939 0.566265 +vt 0.518939 0.590361 +vt 0.518939 0.530120 +vt 0.518939 0.638554 +vt 0.518939 0.578313 +vt 0.518939 0.602410 +vt 0.518939 0.542169 +vt 0.518939 0.650602 +vt 0.549242 0.554217 +vt 0.549242 0.578313 +vt 0.549242 0.590361 +vt 0.549242 0.614458 +vt 0.549242 0.626506 +vt 0.549242 0.638554 +vt 0.549242 0.650602 +vt 0.518939 0.662651 +vt 0.549242 0.518072 +vt 0.549242 0.530120 +vt 0.549242 0.542169 +vt 0.549242 0.566265 +vt 0.549242 0.602410 +vt 0.549242 0.662651 +vt 0.742424 0.493976 +vt 0.742424 0.457831 +vt 0.765152 0.433735 +vt 0.742424 0.180723 +vt 0.765152 0.409639 +vt 0.742424 0.397590 +vt 0.727273 0.457831 +vt 0.727273 0.397590 +vt 0.727273 0.180723 +vt 0.242424 0.554217 +vt 0.727273 0.493976 +vt 0.242424 0.614458 +vt 0.242424 0.650602 +vt 0.242424 0.542169 +vt 0.242424 0.602410 +vt 0.242424 0.578313 +vt 0.242424 0.638554 +vt 0.242424 0.530120 +vt 0.242424 0.590361 +vt 0.242424 0.566265 +vt 0.242424 0.626506 +vt 0.242424 0.518072 +vt 0.674242 0.180723 +vt 0.583333 0.156627 +vt 0.674242 0.156627 +vt 0.583333 0.180723 +vt 0.568182 0.156627 +vt 0.568182 0.180723 +vt 0.553030 0.156627 +vt 0.553030 0.180723 +vt 0.761364 0.674699 +vt 0.753788 0.698795 +vt 0.753788 0.674699 +vt 0.761364 0.698795 +vt 0.753788 0.753012 +vt 0.734848 0.638554 +vt 0.734848 0.578313 +vt 0.734848 0.602410 +vt 0.734848 0.542169 +vt 0.734848 0.650602 +vt 0.734848 0.590361 +vt 0.734848 0.614458 +vt 0.734848 0.554217 +vt 0.734848 0.662651 +vt 0.734848 0.626506 +vt 0.734848 0.566265 +vt 0.734848 0.530120 +vt 0.765152 0.662651 +vt 0.765152 0.650602 +vt 0.765152 0.638554 +vt 0.765152 0.626506 +vt 0.765152 0.614458 +vt 0.765152 0.602410 +vt 0.765152 0.590361 +vt 0.765152 0.578313 +vt 0.765152 0.566265 +vt 0.765152 0.554217 +vt 0.765152 0.542169 +vt 0.765152 0.530120 +vt 0.734848 0.518072 +vt 0.765152 0.518072 +vt 0.768939 0.777108 +vt 0.761364 0.753012 +vt 0.768939 0.753012 +vt 0.768939 0.801205 +vt 0.761364 0.777108 +vt 0.768939 0.849398 +vt 0.761364 0.801205 +vt 0.583333 0.180723 +vt 0.583333 0.228916 +vt 0.674242 0.180723 +vt 0.583333 0.228916 +vt 0.507576 0.325301 +vt 0.507576 0.325301 +vt 0.276515 0.915663 +vt 0.291667 0.963855 +vt 0.276515 0.963855 +vt 0.306818 0.662651 +vt 0.276515 0.710843 +vt 0.276515 0.662651 +vt 0.291667 0.915663 +vt 0.367424 0.963855 +vt 0.412879 0.915663 +vt 0.397727 0.963855 +vt 0.397727 0.915663 +vt 0.382576 0.662651 +vt 0.306818 0.710843 +vt 0.367424 0.915663 +vt 0.428030 0.963855 +vt 0.412879 0.963855 +vt 0.428030 0.915663 +vt 0.488636 0.963855 +vt 0.488636 0.915663 +vt 0.503788 0.963855 +vt 0.503788 0.915663 +vt 0.522727 0.963855 +vt 0.522727 0.915663 +vt 0.541667 0.963855 +vt 0.420455 0.662651 +vt 0.382576 0.710843 +vt 0.511364 0.662651 +vt 0.556818 0.710843 +vt 0.556818 0.662651 +vt 0.625000 0.710843 +vt 0.625000 0.662651 +vt 0.640152 0.710843 +vt 0.272727 0.783133 +vt 0.265152 0.759036 +vt 0.272727 0.759036 +vt 0.265152 0.783133 +vt 0.257576 0.759036 +vt 0.257576 0.783133 +vt 0.250000 0.759036 +vt 0.250000 0.783133 +vt 0.242424 0.759036 +vt 0.242424 0.783133 +vt 0.234848 0.759036 +vt 0.234848 0.783133 +vt 0.227273 0.759036 +vt 0.227273 0.783133 +vt 0.219697 0.759036 +vt 0.219697 0.783133 +vt 0.212121 0.759036 +vt 0.602273 0.903614 +vt 0.617424 0.867470 +vt 0.617424 0.903614 +vt 0.602273 0.951807 +vt 0.617424 0.951807 +vt 0.541667 0.951807 +vt 0.556818 0.903614 +vt 0.556818 0.951807 +vt 0.560606 0.879518 +vt 0.568182 0.819277 +vt 0.560606 0.819277 +vt 0.564394 0.783133 +vt 0.568182 0.819277 +vt 0.560606 0.819277 +vt 0.541667 0.903614 +vt 0.556818 0.879518 +vt 0.594697 0.903614 +vt 0.587121 0.903614 +vt 0.594697 0.759036 +vt 0.594697 0.771084 +vt 0.602273 0.771084 +vt 0.602273 0.819277 +vt 0.617424 0.771084 +vt 0.617424 0.819277 +vt 0.594697 0.867470 +vt 0.587121 0.903614 +vt 0.594697 0.903614 +vt 0.602273 0.867470 +vt 0.541667 0.879518 +vt 0.556818 0.819277 +vt 0.602273 0.759036 +vt 0.617424 0.759036 +vt 0.541667 0.819277 +vt 0.556818 0.783133 +vt 0.568182 0.879518 +vt 0.560606 0.879518 +vt 0.541667 0.759036 +vt 0.556818 0.759036 +vt 0.564394 0.951807 +vt 0.571970 0.903614 +vt 0.564394 0.903614 +vt 0.564394 0.903614 +vt 0.564394 0.951807 +vt 0.587121 0.867470 +vt 0.594697 0.819277 +vt 0.571970 0.783133 +vt 0.594697 0.771084 +vt 0.594697 0.867470 +vt 0.602273 0.771084 +vt 0.571970 0.903614 +vt 0.595599 0.759478 +vt 0.571970 0.951807 +vt 0.568182 0.879518 +vt 0.587121 0.867470 +vt 0.594697 0.819277 +vt 0.571970 0.783133 +vt 0.587121 0.759036 +vt 0.564394 0.759036 +vt 0.564394 0.783133 +vt 0.556818 0.759036 +vt 0.594697 0.951807 +vt 0.602273 0.951807 +vt 0.602273 0.819277 +vt 0.257576 0.789157 +vt 0.253788 0.795181 +vt 0.253788 0.789157 +vt 0.257576 0.783133 +vt 0.261364 0.789157 +vt 0.265152 0.783133 +vt 0.268939 0.789157 +vt 0.265152 0.789157 +vt 0.246212 0.783133 +vt 0.242424 0.789157 +vt 0.242424 0.783133 +vt 0.253788 0.783133 +vt 0.261364 0.783133 +vt 0.268939 0.783133 +vt 0.272727 0.789157 +vt 0.250000 0.783133 +vt 0.246212 0.789157 +vt 0.250000 0.789157 +vt 0.243588 0.797031 +vt 0.246212 0.795303 +vt 0.246212 0.807105 +vt 0.261364 0.795181 +vt 0.272727 0.795181 +vt 0.268939 0.795181 +vt 0.246212 0.795181 +vt 0.250000 0.795181 +vt 0.257576 0.795181 +vt 0.265152 0.795181 +vt 0.242424 0.795181 +vt 0.772727 0.608434 +vt 0.787879 0.596386 +vt 0.787879 0.608434 +vt 0.772727 0.632530 +vt 0.765152 0.608434 +vt 0.795455 0.608434 +vt 0.787879 0.632530 +vt 0.772727 0.596386 +vt 0.795455 0.632530 +vt 0.787879 0.608434 +vt 0.795455 0.608434 +vt 0.772727 0.608434 +vt 0.765152 0.632530 +vt 0.765152 0.608434 +vt 0.787879 0.596386 +vt 0.772727 0.596386 +vt 0.136364 0.174699 +vt 0.075758 0.168675 +vt 0.136364 0.168675 +vt 0.136364 0.204819 +vt 0.075758 0.198795 +vt 0.136364 0.198795 +vt 0.136364 0.150602 +vt 0.075758 0.144578 +vt 0.136364 0.144578 +vt 0.075758 0.162651 +vt 0.136364 0.162651 +vt 0.075758 0.192771 +vt 0.136364 0.192771 +vt 0.136364 0.216867 +vt 0.075758 0.210843 +vt 0.136364 0.210843 +vt 0.075758 0.156627 +vt 0.136364 0.156627 +vt 0.075758 0.186747 +vt 0.136364 0.186747 +vt 0.136364 0.180723 +vt 0.075758 0.174699 +vt 0.075758 0.204819 +vt 0.075758 0.150602 +vt 0.075758 0.180723 +vt 0.765152 0.391566 +vt 0.799242 0.632530 +vt 0.795455 0.704819 +vt 0.795455 0.632530 +vt 0.780303 0.632530 +vt 0.776515 0.704819 +vt 0.776515 0.632530 +vt 0.768939 0.632530 +vt 0.765152 0.704819 +vt 0.765152 0.632530 +vt 0.803030 0.632530 +vt 0.799242 0.704819 +vt 0.784091 0.632530 +vt 0.780303 0.704819 +vt 0.791667 0.632530 +vt 0.787879 0.704819 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.768939 0.704819 +vt 0.806818 0.632530 +vt 0.803030 0.704819 +vt 0.784091 0.704819 +vt 0.791667 0.704819 +vt 0.772727 0.704819 +vt 0.810606 0.632530 +vt 0.806818 0.704819 +vt 0.768939 0.716867 +vt 0.803030 0.716867 +vt 0.784091 0.716867 +vt 0.795455 0.716867 +vt 0.791667 0.716867 +vt 0.776515 0.716867 +vt 0.772727 0.716867 +vt 0.810606 0.704819 +vt 0.806818 0.716867 +vt 0.780303 0.716867 +vt 0.765152 0.716867 +vt 0.799242 0.716867 +vt 0.787879 0.716867 +vt 0.787879 0.728916 +vt 0.768939 0.728916 +vt 0.803030 0.728916 +vt 0.784091 0.728916 +vt 0.791667 0.728916 +vt 0.772727 0.728916 +vt 0.810606 0.716867 +vt 0.806818 0.728916 +vt 0.795455 0.728916 +vt 0.776515 0.728916 +vt 0.765152 0.728916 +vt 0.799242 0.728916 +vt 0.780303 0.728916 +vt 0.787879 0.753012 +vt 0.795455 0.753012 +vt 0.776515 0.753012 +vt 0.810606 0.728916 +vt 0.810606 0.753012 +vt 0.799242 0.753012 +vt 0.780303 0.753012 +vt 0.768939 0.753012 +vt 0.803030 0.753012 +vt 0.784091 0.753012 +vt 0.772727 0.753012 +vt 0.806818 0.753012 +vt 0.791667 0.753012 +vt 0.799242 0.632530 +vt 0.795455 0.704819 +vt 0.795455 0.632530 +vt 0.780303 0.632530 +vt 0.776515 0.704819 +vt 0.776515 0.632530 +vt 0.768939 0.632530 +vt 0.765152 0.704819 +vt 0.765152 0.632530 +vt 0.803030 0.632530 +vt 0.799242 0.704819 +vt 0.784091 0.632530 +vt 0.780303 0.704819 +vt 0.791667 0.632530 +vt 0.787879 0.704819 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.768939 0.704819 +vt 0.806818 0.632530 +vt 0.803030 0.704819 +vt 0.784091 0.704819 +vt 0.791667 0.704819 +vt 0.772727 0.704819 +vt 0.810606 0.632530 +vt 0.806818 0.704819 +vt 0.772727 0.716867 +vt 0.768939 0.716867 +vt 0.806818 0.716867 +vt 0.803030 0.716867 +vt 0.784091 0.716867 +vt 0.795455 0.716867 +vt 0.791667 0.716867 +vt 0.810606 0.704819 +vt 0.780303 0.716867 +vt 0.776515 0.716867 +vt 0.765152 0.716867 +vt 0.799242 0.716867 +vt 0.787879 0.716867 +vt 0.787879 0.728916 +vt 0.768939 0.728916 +vt 0.803030 0.728916 +vt 0.784091 0.728916 +vt 0.791667 0.728916 +vt 0.772727 0.728916 +vt 0.810606 0.716867 +vt 0.806818 0.728916 +vt 0.795455 0.728916 +vt 0.776515 0.728916 +vt 0.765152 0.728916 +vt 0.799242 0.728916 +vt 0.780303 0.728916 +vt 0.787879 0.753012 +vt 0.795455 0.753012 +vt 0.776515 0.753012 +vt 0.810606 0.728916 +vt 0.810606 0.753012 +vt 0.799242 0.753012 +vt 0.780303 0.753012 +vt 0.768939 0.753012 +vt 0.803030 0.753012 +vt 0.784091 0.753012 +vt 0.772727 0.753012 +vt 0.806818 0.753012 +vt 0.791667 0.753012 +vt 0.833333 0.132530 +vt 0.761364 0.662651 +vt 0.000000 0.939759 +vt 0.068182 0.933735 +vt 0.068182 0.939759 +vt 0.000000 0.933735 +vt 0.068182 0.927711 +vt 0.000000 0.975904 +vt 0.068182 0.969880 +vt 0.068182 0.975904 +vt 0.000000 0.969880 +vt 0.068182 0.963855 +vt 0.000000 0.963855 +vt 0.068182 0.957831 +vt 0.000000 0.957831 +vt 0.068182 0.951807 +vt 0.000000 0.951807 +vt 0.068182 0.945783 +vt 0.000000 0.945783 +vt 0.087121 0.783133 +vt 0.147727 0.795181 +vt 0.087121 0.795181 +vt 0.087121 0.843373 +vt 0.147727 0.855422 +vt 0.087121 0.855422 +vt 0.087121 0.819277 +vt 0.147727 0.831325 +vt 0.087121 0.831325 +vt 0.087121 0.879518 +vt 0.147727 0.891566 +vt 0.087121 0.891566 +vt 0.087121 0.771084 +vt 0.147727 0.783133 +vt 0.147727 0.843373 +vt 0.087121 0.807229 +vt 0.147727 0.819277 +vt 0.087121 0.867470 +vt 0.147727 0.879518 +vt 0.087121 0.759036 +vt 0.147727 0.771084 +vt 0.147727 0.807229 +vt 0.147727 0.867470 +vt 0.147727 0.903614 +vt 0.087121 0.903614 +vt 0.325758 0.337349 +vt 0.075758 0.150602 +vt 0.075758 0.198795 +vt 0.000000 0.006024 +vt -0.000000 0.126506 +vt -0.000000 0.078313 +vt -0.000000 0.903614 +vt 0.295455 0.144578 +vt 0.242424 0.662651 +vt 0.761364 0.753012 +vt 0.568182 0.204819 +vt 0.568182 0.204819 +vt 0.541667 0.915663 +vt 0.640152 0.662651 +vt 0.212121 0.783133 +vt 0.541667 0.783133 +vt 0.272727 0.783133 +vt 0.248835 0.797031 +vt 0.249922 0.801204 +vt 0.248835 0.805376 +vt 0.243588 0.805376 +vt 0.242501 0.801204 +vt 0.765152 0.632530 +vt 0.795455 0.632530 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.075758 0.216867 +vt 0.696970 0.036145 +vt 0.765152 0.192771 +vt 0.818182 0.132530 +vt 0.000000 0.927711 +vt 0.147727 0.759036 +vt 0.250000 0.337349 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.5000 0.8660 -0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.8575 0.5145 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.8575 0.5145 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.8000 0.6000 0.0000 +vn -0.8000 0.6000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.2169 0.9762 +vn 0.0000 -0.9701 0.2425 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.0000 -0.9648 0.2631 +vn 0.0000 0.7071 0.7071 +vn -0.8660 -0.5000 0.0000 +vn 0.7746 0.4472 0.4472 +vn 0.8660 0.5000 0.0000 +vn -0.3873 -0.2236 0.8944 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.8944 -0.4472 +vn 0.0000 0.9063 0.4226 +vn 0.0000 -0.9063 -0.4226 +vn 0.5000 0.3660 -0.7849 +vn 0.8660 -0.2113 0.4532 +vn -0.8660 0.2113 -0.4532 +vn -0.5000 -0.3660 0.7849 +vn -0.4472 0.0000 0.8944 +vn 0.4472 0.0000 0.8944 +vn 0.8660 -0.5000 -0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.7746 0.4472 -0.4472 +vn 0.4472 0.7746 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn -0.4472 0.7746 -0.4472 +vn -0.7746 0.4472 -0.4472 +vn -0.8944 -0.0000 -0.4472 +vn -0.7746 -0.4472 -0.4472 +vn -0.4472 -0.7746 -0.4472 +vn 0.4472 -0.7746 -0.4472 +vn 0.7746 -0.4472 -0.4472 +vn 0.8944 0.0000 -0.4472 +vn -0.0000 -0.9988 0.0494 +vn 0.8184 0.5737 0.0327 +vn 0.0000 0.9988 0.0494 +vn 0.4994 -0.8650 0.0494 +vn -0.8184 -0.5737 0.0327 +vn 0.4994 0.8650 0.0494 +vn -0.4994 0.8650 0.0494 +vn 0.8184 -0.5737 0.0327 +vn -0.4994 -0.8650 0.0494 +vn -0.8184 0.5737 0.0327 +vn -0.0000 0.9950 0.0995 +vn 0.4975 0.8617 0.0995 +vn -0.8181 0.5751 0.0000 +vn 0.4975 -0.8617 0.0995 +vn -0.4975 -0.8617 0.0995 +vn -0.7038 0.7038 0.0961 +vn 0.4472 0.7746 0.4472 +vn -0.4472 0.7746 0.4472 +vn -0.7746 0.4472 0.4472 +vn -0.8944 0.0000 0.4472 +vn -0.7746 -0.4472 0.4472 +vn -0.4472 -0.7746 0.4472 +vn -0.0000 -0.8944 0.4472 +vn 0.4472 -0.7746 0.4472 +vn 0.7746 -0.4472 0.4472 +vn 0.8944 0.0000 0.4472 +vn 0.8181 0.5751 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.8181 -0.5751 -0.0000 +vn 0.8181 -0.5751 -0.0000 +vn -0.6367 -0.6367 0.4349 +vn -0.6367 0.6367 0.4349 +vn 0.6367 0.6367 0.4349 +vn 0.6367 -0.6367 0.4349 +vn 0.0000 -0.9947 0.1025 +vn 0.0000 -0.9073 0.4205 +vn 0.9923 -0.0000 0.1240 +vn 0.8593 0.4961 0.1240 +vn 0.4961 0.8593 0.1240 +vn 0.0000 0.9923 0.1240 +vn -0.4961 0.8593 0.1240 +vn -0.8593 0.4961 0.1240 +vn -0.9923 0.0000 0.1240 +vn -0.8593 -0.4961 0.1240 +vn -0.4961 -0.8593 0.1240 +vn 0.0000 -0.9923 0.1240 +vn 0.4961 -0.8593 0.1240 +vn 0.8593 -0.4961 0.1240 +vn -0.2300 0.7786 -0.5839 +vn -0.3299 0.4380 -0.8363 +vn -0.6301 0.1931 -0.7521 +vn -0.0656 -0.3155 -0.9466 +vn -0.5758 -0.1060 -0.8107 +vn -0.2968 -0.1599 -0.9415 +vn 0.3299 0.4380 -0.8363 +vn 0.2968 -0.1599 -0.9415 +vn 0.5758 -0.1060 -0.8107 +vn 0.0656 -0.3155 -0.9466 +vn -0.9980 -0.0000 -0.0628 +vn 0.6301 0.1931 -0.7521 +vn 0.2300 0.7786 -0.5839 +vn 0.8643 -0.4990 -0.0628 +vn 0.4990 0.8643 -0.0628 +vn -0.8643 0.4990 -0.0628 +vn 0.4990 -0.8643 -0.0628 +vn -0.4990 -0.8643 -0.0628 +vn 0.8643 0.4990 -0.0628 +vn -0.4990 0.8643 -0.0628 +vn -0.0000 -0.9980 -0.0628 +vn -0.8643 -0.4990 -0.0628 +vn 0.9980 0.0000 -0.0628 +vn 0.0000 0.9980 -0.0628 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.7809 0.6247 +vn 0.0000 0.7937 0.6083 +vn 0.0000 -0.6644 -0.7474 +vn 0.0000 -0.7937 -0.6083 +vn 0.0000 0.6644 0.7474 +vn 0.0000 -0.1602 -0.9871 +vn 0.0000 -0.3827 -0.9239 +vn 0.8644 0.4991 -0.0615 +vn -0.4991 -0.8644 -0.0615 +vn 0.4991 -0.8644 -0.0615 +vn -0.8644 0.4991 -0.0615 +vn 0.4991 0.8644 -0.0615 +vn -0.0000 -0.9981 -0.0615 +vn 0.8644 -0.4991 -0.0615 +vn -0.9981 -0.0000 -0.0615 +vn -0.0000 0.9981 -0.0615 +vn 0.9981 0.0000 -0.0615 +vn -0.8644 -0.4991 -0.0615 +vn -0.4991 0.8644 -0.0615 +vn 0.0000 0.2298 0.9732 +vn 0.0000 -0.8281 -0.5606 +vn 0.0000 -0.9191 -0.3939 +vn 0.0000 0.6114 0.7913 +vn 0.0000 0.7526 0.6585 +vn 0.0000 0.9191 0.3939 +vn 0.0000 0.8281 0.5606 +vn 0.0000 0.3827 0.9239 +vn -0.9956 -0.0906 0.0222 +vn -0.9920 -0.1196 0.0399 +vn 0.9956 -0.0906 0.0222 +vn 0.9920 -0.1196 0.0399 +vn -0.9872 -0.1545 0.0398 +vn -0.9866 -0.1600 0.0328 +vn 0.9872 -0.1545 0.0398 +vn 0.9866 -0.1600 0.0328 +vn 0.9867 -0.1589 0.0331 +vn -0.9867 -0.1589 0.0331 +vn 0.0000 -0.4472 -0.8944 +vn 0.0000 0.0735 -0.9973 +vn 0.0000 -0.7571 0.6532 +vn 0.0000 0.6954 -0.7186 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9487 -0.3162 +vn 0.0000 -0.6427 0.7661 +vn 0.0000 0.1602 0.9871 +vn 0.0000 -0.8507 0.5257 +vn 0.0000 0.3714 0.9285 +vn 0.0000 -0.3714 0.9285 +vn 0.0000 0.2076 -0.9782 +vn 0.0000 -0.1826 -0.9832 +vn 0.0000 -0.7071 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.3916 -0.1153 -0.9129 +vn -0.3916 0.1153 -0.9129 +vn -0.3916 -0.1153 -0.9129 +vn 0.3538 -0.2269 -0.9074 +vn -0.3538 -0.2269 -0.9074 +vn -0.3827 0.0000 0.9239 +vn 0.3916 0.1153 0.9129 +vn 0.3827 0.0000 0.9239 +vn -0.3711 0.1112 0.9219 +vn -0.9163 -0.0343 0.3990 +vn -0.3750 -0.0754 0.9239 +vn 0.4082 0.1464 0.9011 +vn 0.9163 -0.0343 0.3990 +vn 0.3750 -0.0754 0.9239 +vn -0.3916 0.1153 0.9129 +vn 0.3711 0.1112 0.9219 +vn 0.8970 -0.1072 -0.4287 +vn 0.9337 -0.0415 -0.3557 +vn -0.3458 -0.6635 -0.6635 +vn -0.8727 -0.2257 -0.4330 +vn -0.3416 -0.3416 -0.8756 +vn 0.3711 0.1112 -0.9219 +vn -0.3711 0.1112 -0.9219 +vn -0.9337 -0.0415 -0.3557 +vn 0.3916 0.1153 -0.9129 +vn 0.3458 -0.6635 -0.6635 +vn 0.9123 0.0530 0.4062 +vn -0.3158 0.4243 0.8487 +vn 0.3158 0.4243 0.8487 +vn -0.9337 0.0415 0.3557 +vn 0.9239 0.0000 0.3827 +vn 0.9337 0.0415 -0.3557 +vn 0.9123 0.0530 -0.4062 +vn 0.9489 0.0415 0.3128 +vn 0.8727 -0.2257 -0.4330 +vn 0.9607 -0.1962 -0.1962 +vn 0.8592 0.2288 0.4576 +vn 0.3416 -0.3416 -0.8756 +vn 0.9337 0.0415 0.3557 +vn -0.9239 0.0000 0.3827 +vn -0.9123 0.0530 0.4062 +vn -0.9337 0.0415 -0.3557 +vn -0.9123 0.0530 -0.4062 +vn -0.9489 0.0415 0.3128 +vn -0.9607 -0.1962 -0.1962 +vn -0.8592 0.2288 0.4576 +vn -0.4082 0.1464 0.9011 +vn -0.8970 -0.1072 -0.4287 +vn 0.9113 0.4118 0.0000 +vn 0.8576 -0.3996 -0.3238 +vn 0.7175 0.2181 -0.6615 +vn 0.7175 0.2181 0.6615 +vn -0.2181 -0.7175 0.6615 +vn 0.2497 -0.2497 0.9356 +vn -0.5000 -0.5000 -0.7071 +vn -0.4118 -0.9113 -0.0000 +vn 0.5000 0.5000 -0.7071 +vn 0.5000 0.5000 0.7071 +vn -0.5000 -0.5000 0.7071 +vn -0.2181 -0.7175 -0.6615 +vn 0.2497 -0.2497 -0.9356 +vn 0.3996 -0.8576 0.3238 +vn 0.3048 -0.9524 -0.0000 +vn 0.9524 -0.3048 0.0000 +vn 0.8576 -0.3996 0.3238 +vn 0.3996 -0.8576 -0.3238 +vn 0.6286 -0.6286 -0.4580 +vn 0.6286 -0.6286 0.4580 +vn 0.7588 -0.4606 0.4606 +vn 0.6861 -0.6861 -0.2418 +vn 0.7588 -0.4606 -0.4606 +vn 0.6861 -0.2418 0.6861 +vn 0.6861 -0.2418 -0.6861 +vn 0.6861 -0.6861 0.2418 +vn -0.7588 -0.4606 0.4606 +vn -0.6861 -0.2418 0.6861 +vn -0.7588 -0.4606 -0.4606 +vn -0.6861 -0.2418 -0.6861 +vn -0.6861 -0.6861 0.2418 +vn -0.6861 -0.6861 -0.2418 +vn 0.0000 0.2425 0.9701 +vn 0.0000 -0.2425 0.9701 +vn 0.0000 -0.1222 -0.9925 +vn 0.0000 -0.2425 -0.9701 +vn 0.0000 0.1222 0.9925 +vn 0.8402 -0.4851 0.2425 +vn 0.4851 -0.8402 0.2425 +vn -0.4851 -0.8402 0.2425 +vn -0.8402 -0.4851 0.2425 +vn 0.0000 0.9701 0.2425 +vn 0.4851 0.8402 0.2425 +vn -0.4851 0.8402 0.2425 +vn -0.8402 0.4851 0.2425 +vn 0.9701 -0.0000 0.2425 +vn -0.9701 -0.0000 0.2425 +vn 0.8402 0.4851 0.2425 +vn 0.0000 0.9848 0.1735 +vn 0.4924 -0.8529 0.1735 +vn -0.8529 -0.4924 0.1735 +vn 0.4924 0.8529 0.1735 +vn -0.4924 0.8529 0.1735 +vn 0.8529 -0.4924 0.1735 +vn -0.4924 -0.8529 0.1735 +vn -0.8529 0.4924 0.1735 +vn 0.9848 -0.0000 0.1735 +vn 0.0000 -0.9848 0.1735 +vn -0.9848 0.0000 0.1735 +vn 0.8529 0.4924 0.1735 +vn 0.0000 0.7071 -0.7071 +vn 0.7038 0.7038 0.0961 +vn 0.7038 -0.7038 0.0961 +vn 0.0000 -0.9950 0.0995 +vn -0.7038 -0.7038 0.0961 +vn -0.4975 0.8617 0.0995 +s off +f 624/1/1 13/2/1 15/3/1 +f 6/4/1 36/5/1 35/6/1 +f 4/7/1 25/8/1 36/5/1 +f 24/9/1 25/8/1 2/10/1 +f 22/11/1 26/12/1 24/9/1 +f 20/13/1 27/14/1 22/11/1 +f 20/13/1 29/15/1 28/16/1 +f 18/17/1 30/18/1 29/15/1 +f 14/19/1 30/18/1 16/20/1 +f 12/21/1 31/22/1 14/23/1 +f 12/21/1 33/24/1 32/25/1 +f 10/26/1 34/27/1 33/24/1 +f 8/28/1 35/6/1 34/27/1 +f 37/29/2 50/30/2 48/31/2 +f 48/31/2 51/32/2 47/33/2 +f 47/33/2 52/34/2 46/35/2 +f 46/35/2 53/36/2 45/37/2 +f 45/37/2 54/38/2 44/39/2 +f 54/38/2 43/40/2 44/39/2 +f 55/41/2 42/42/2 43/43/2 +f 42/42/2 57/44/2 41/45/2 +f 41/45/2 58/46/2 40/47/2 +f 58/46/2 39/48/2 40/47/2 +f 59/49/2 38/50/2 39/48/2 +f 60/51/2 37/29/2 38/50/2 +f 87/52/1 108/53/1 107/54/1 +f 86/55/1 97/56/1 108/53/1 +f 96/57/1 97/56/1 85/58/1 +f 95/59/1 98/60/1 96/57/1 +f 94/61/1 99/62/1 95/59/1 +f 94/61/1 101/63/1 100/64/1 +f 93/65/1 102/66/1 101/63/1 +f 91/67/1 102/66/1 92/68/1 +f 90/69/1 103/70/1 91/71/1 +f 90/69/1 105/72/1 104/73/1 +f 89/74/1 106/75/1 105/72/1 +f 88/76/1 107/54/1 106/75/1 +f 123/77/1 144/78/1 143/79/1 +f 122/80/1 133/81/1 144/78/1 +f 132/82/1 133/81/1 121/83/1 +f 131/84/1 134/85/1 132/82/1 +f 129/86/1 138/87/1 137/88/1 +f 127/89/1 138/87/1 128/90/1 +f 126/91/1 139/92/1 127/93/1 +f 126/91/1 141/94/1 140/95/1 +f 193/96/2 184/97/2 154/98/2 +f 117/99/2 178/100/2 177/101/2 +f 119/102/2 178/100/2 118/103/2 +f 113/104/2 172/105/2 112/106/2 +f 111/107/2 172/105/2 171/108/2 +f 171/109/3 131/110/3 111/111/3 +f 129/112/4 173/113/4 113/114/4 +f 125/115/5 177/116/5 165/117/5 +f 123/118/6 179/119/6 119/120/6 +f 145/121/2 182/122/2 156/123/2 +f 156/123/2 183/124/2 155/125/2 +f 183/126/6 123/118/6 143/127/6 +f 135/128/3 131/110/3 191/129/3 +f 153/130/2 186/131/2 152/132/2 +f 186/131/2 151/133/2 152/132/2 +f 187/134/2 150/135/2 151/136/2 +f 150/135/2 189/137/2 149/138/2 +f 189/139/4 161/140/4 129/112/4 +f 141/141/5 125/115/5 185/142/5 +f 191/143/2 146/144/2 147/145/2 +f 192/146/2 145/121/2 146/144/2 +f 235/147/7 924/148/7 236/149/7 +f 235/150/8 925/151/8 923/152/8 +f 243/153/9 803/154/9 225/155/9 +f 239/156/10 925/151/10 237/157/10 +f 244/158/11 238/159/11 926/160/11 +f 238/159/2 239/161/2 237/162/2 +f 222/163/12 244/164/12 226/165/12 +f 224/166/1 228/167/1 229/168/1 +f 236/149/13 926/160/13 238/159/13 +f 237/162/2 236/169/2 238/159/2 +f 220/170/1 223/171/1 224/166/1 +f 229/172/10 253/173/10 224/174/10 +f 232/175/1 229/168/1 228/167/1 +f 240/176/2 241/177/2 239/161/2 +f 240/176/14 246/178/14 242/179/14 +f 241/180/15 243/181/15 239/156/15 +f 242/179/16 245/182/16 241/180/16 +f 248/183/2 245/184/2 246/185/2 +f 246/185/2 244/164/2 248/183/2 +f 243/153/2 245/186/2 247/187/2 +f 228/167/13 255/188/13 232/189/13 +f 219/190/14 252/191/14 223/171/14 +f 254/192/2 255/193/2 251/194/2 +f 252/191/2 249/195/2 253/196/2 +f 251/194/2 253/196/2 254/192/2 +f 247/197/16 222/163/16 221/198/16 +f 223/171/11 251/194/11 228/167/11 +f 220/199/16 250/200/16 219/190/16 +f 232/189/7 256/201/7 233/202/7 +f 224/174/15 249/203/15 220/199/15 +f 233/204/8 254/205/8 229/172/8 +f 213/206/2 215/207/2 207/208/2 +f 261/209/7 263/210/7 262/211/7 +f 257/212/17 263/210/17 258/213/17 +f 260/214/11 263/210/11 264/215/11 +f 259/216/10 262/211/10 257/217/10 +f 323/218/1 312/219/1 311/220/1 +f 312/219/1 313/221/1 301/222/1 +f 313/221/1 302/223/1 301/222/1 +f 314/224/1 303/225/1 302/223/1 +f 315/226/1 304/227/1 303/225/1 +f 304/227/1 317/228/1 305/229/1 +f 305/229/1 318/230/1 306/231/1 +f 318/230/1 307/232/1 306/231/1 +f 319/233/1 308/234/1 307/235/1 +f 320/236/1 309/237/1 308/234/1 +f 321/238/1 310/239/1 309/237/1 +f 310/239/1 323/218/1 311/220/1 +f 276/240/2 335/241/2 275/242/2 +f 275/242/2 334/243/2 274/244/2 +f 273/245/2 334/243/2 333/246/2 +f 272/247/2 333/246/2 332/248/2 +f 272/247/2 331/249/2 271/250/2 +f 271/251/2 330/252/2 270/253/2 +f 270/253/2 329/254/2 269/255/2 +f 269/255/2 328/256/2 268/257/2 +f 267/258/2 328/256/2 327/259/2 +f 266/260/2 327/259/2 326/261/2 +f 266/260/2 325/262/2 265/263/2 +f 265/263/2 336/264/2 276/240/2 +f 356/265/18 661/266/18 354/267/18 +f 360/268/11 362/269/11 358/270/11 +f 359/271/10 361/272/10 363/273/10 +f 363/273/10 365/274/10 367/275/10 +f 364/276/11 366/277/11 362/269/11 +f 374/278/11 378/279/11 380/280/11 +f 372/281/11 376/282/11 378/279/11 +f 408/283/11 409/284/11 406/285/11 +f 373/286/10 377/287/10 371/288/10 +f 371/288/10 375/289/10 369/290/10 +f 405/291/10 411/292/10 407/293/10 +f 426/294/11 424/295/11 422/296/11 +f 412/297/11 413/298/11 409/284/11 +f 411/292/10 414/299/10 415/300/10 +f 427/301/10 421/302/10 423/303/10 +f 415/300/10 418/304/10 419/305/10 +f 416/306/11 417/307/11 413/298/11 +f 426/294/11 432/308/11 428/309/11 +f 431/310/10 425/311/10 427/301/10 +f 430/312/11 436/313/11 432/308/11 +f 435/314/10 429/315/10 431/310/10 +f 234/316/13 337/317/13 230/318/13 +f 338/319/8 231/320/8 227/321/8 +f 437/322/11 356/323/11 354/267/11 +f 439/324/2 355/325/2 356/323/2 +f 355/326/10 438/327/10 353/328/10 +f 438/327/1 354/267/1 353/328/1 +f 443/329/10 445/330/10 441/331/10 +f 444/332/11 446/333/11 448/334/11 +f 447/335/10 451/336/10 445/330/10 +f 452/337/11 448/334/11 446/333/11 +f 449/338/10 467/339/10 451/336/10 +f 468/340/11 450/341/11 452/337/11 +f 455/342/10 469/343/10 467/339/10 +f 468/340/11 470/344/11 456/345/11 +f 461/346/10 463/347/10 459/348/10 +f 462/349/11 460/350/11 464/351/11 +f 465/352/10 473/353/10 463/347/10 +f 474/354/11 466/355/11 464/351/11 +f 471/356/10 469/343/10 457/357/10 +f 474/354/11 464/351/11 460/350/11 +f 490/358/16 486/359/16 482/360/16 +f 497/361/7 499/362/7 498/363/7 +f 493/364/17 499/362/17 494/365/17 +f 496/366/11 499/362/11 500/367/11 +f 495/368/10 498/363/10 493/369/10 +f 503/370/7 501/371/7 502/372/7 +f 504/373/2 505/374/2 501/371/2 +f 532/375/16 510/376/16 543/377/16 +f 537/378/7 520/379/7 550/380/7 +f 559/381/19 561/382/19 555/383/19 +f 580/384/10 581/385/10 579/386/10 +f 582/387/1 585/388/1 581/389/1 +f 586/390/11 583/391/11 585/392/11 +f 584/393/2 579/394/2 583/395/2 +f 585/388/7 579/396/7 581/389/7 +f 582/387/16 584/393/16 586/390/16 +f 609/397/10 613/398/10 607/399/10 +f 609/397/10 617/400/10 615/401/10 +f 610/402/11 614/403/11 616/404/11 +f 610/402/11 618/405/11 612/406/11 +f 607/399/7 614/407/7 608/408/7 +f 17/409/1 624/410/1 15/3/1 +f 622/411/1 17/409/1 19/412/1 +f 21/413/1 622/414/1 19/412/1 +f 620/415/1 21/413/1 23/416/1 +f 1/417/1 620/418/1 23/416/1 +f 630/419/1 1/417/1 3/420/1 +f 5/421/1 630/422/1 3/420/1 +f 628/423/1 5/421/1 7/424/1 +f 9/425/1 628/426/1 7/424/1 +f 626/427/1 9/425/1 11/428/1 +f 13/429/1 626/430/1 11/428/1 +f 635/431/1 633/432/1 641/433/1 +f 765/434/16 767/435/16 645/436/16 +f 763/437/20 770/438/20 765/434/20 +f 712/439/16 769/440/16 763/437/16 +f 646/441/16 774/442/16 766/443/16 +f 647/444/10 653/445/10 648/446/10 +f 654/447/11 650/448/11 649/449/11 +f 654/447/21 651/450/21 652/451/21 +f 658/452/11 660/453/11 656/454/11 +f 658/452/1 655/455/1 662/456/1 +f 661/266/2 660/457/2 657/458/2 +f 661/266/18 353/328/18 354/267/18 +f 662/456/10 659/459/10 661/266/10 +f 657/458/18 355/460/18 353/328/18 +f 658/452/18 356/265/18 355/460/18 +f 667/461/1 665/462/1 673/463/1 +f 766/443/20 773/464/20 764/465/20 +f 718/466/1 716/467/1 724/468/1 +f 650/469/11 766/443/11 764/470/11 +f 647/471/10 648/472/10 763/473/10 +f 764/465/16 772/474/16 713/475/16 +f 775/476/22 712/477/22 643/478/22 +f 776/479/22 643/478/22 644/480/22 +f 713/481/22 776/479/22 644/480/22 +f 776/482/1 777/483/1 775/484/1 +f 778/485/16 779/486/16 777/483/16 +f 781/487/16 784/488/16 782/489/16 +f 784/490/2 779/486/2 780/491/2 +f 775/492/11 779/486/11 783/493/11 +f 776/494/10 780/491/10 778/485/10 +f 776/494/10 772/495/10 773/496/10 +f 769/497/11 775/492/11 783/493/11 +f 787/498/23 786/499/23 785/500/23 +f 785/501/2 790/502/2 789/503/2 +f 792/504/4 799/505/4 787/506/4 +f 790/502/24 792/507/24 789/503/24 +f 787/506/1 802/508/1 788/509/1 +f 793/510/2 796/511/2 792/507/2 +f 801/512/25 799/513/25 800/514/25 +f 786/499/6 788/509/6 793/515/6 +f 806/516/1 791/517/1 808/518/1 +f 796/511/26 801/519/26 800/520/26 +f 798/521/9 794/522/9 795/523/9 +f 805/524/7 794/522/7 806/525/7 +f 808/526/16 798/521/16 803/527/16 +f 247/187/9 808/528/9 243/153/9 +f 805/529/2 798/521/2 795/523/2 +f 221/530/9 806/531/9 247/187/9 +f 221/530/9 803/154/9 805/532/9 +f 810/533/9 804/534/9 809/535/9 +f 809/535/1 812/536/1 810/533/1 +f 815/537/27 814/538/27 813/539/27 +f 819/540/28 816/541/28 815/537/28 +f 819/542/10 813/539/10 817/543/10 +f 820/544/11 814/538/11 816/541/11 +f 831/545/1 827/546/1 823/547/1 +f 375/289/10 833/548/10 369/290/10 +f 376/282/11 370/549/11 834/550/11 +f 850/551/11 846/552/11 842/553/11 +f 859/554/11 864/555/11 860/556/11 +f 849/557/10 851/558/10 843/559/10 +f 853/560/10 855/561/10 856/562/10 +f 854/563/10 857/564/10 855/565/10 +f 835/566/10 858/567/10 857/568/10 +f 836/569/10 856/570/10 858/571/10 +f 861/572/11 863/573/11 859/574/11 +f 862/575/11 865/576/11 861/577/11 +f 860/578/11 866/579/11 862/580/11 +f 856/581/7 862/580/7 858/582/7 +f 835/566/2 866/579/2 836/569/2 +f 858/583/1 861/577/1 857/584/1 +f 853/560/1 863/573/1 854/563/1 +f 857/585/16 859/574/16 855/586/16 +f 855/587/2 860/556/2 856/588/2 +f 836/569/16 864/555/16 853/560/16 +f 854/563/7 865/589/7 835/590/7 +f 875/591/29 880/592/29 876/593/29 +f 869/594/30 871/595/30 872/596/30 +f 871/597/30 867/598/30 873/599/30 +f 867/598/30 874/600/30 873/601/30 +f 868/602/30 872/603/30 874/604/30 +f 875/605/29 881/606/29 879/607/29 +f 877/608/29 882/609/29 881/606/29 +f 876/610/29 882/609/29 878/611/29 +f 872/612/31 878/611/31 874/613/31 +f 867/598/32 882/609/32 868/602/32 +f 874/614/33 877/608/33 873/615/33 +f 869/594/33 879/607/33 870/616/33 +f 871/617/34 877/618/34 875/605/34 +f 871/619/32 876/593/32 872/620/32 +f 869/621/34 882/609/34 880/622/34 +f 870/616/31 881/606/31 867/598/31 +f 893/623/2 889/624/2 885/625/2 +f 913/626/35 911/627/35 912/628/35 +f 908/629/7 912/630/7 907/631/7 +f 907/632/10 911/627/10 909/633/10 +f 910/634/11 913/635/11 908/629/11 +f 910/634/16 911/627/16 914/636/16 +f 921/637/36 919/638/36 920/639/36 +f 915/640/7 921/637/7 920/641/7 +f 915/640/10 919/642/10 917/643/10 +f 918/644/11 921/637/11 916/645/11 +f 917/643/16 922/646/16 918/647/16 +f 926/648/13 234/316/13 230/318/13 +f 923/649/8 227/321/8 231/320/8 +f 244/164/11 926/648/11 230/318/11 +f 227/321/10 925/650/10 243/153/10 +f 910/651/1 907/631/1 909/652/1 +f 918/647/1 915/653/1 917/643/1 +f 624/1/1 625/654/1 13/2/1 +f 6/4/1 4/7/1 36/5/1 +f 4/7/1 2/10/1 25/8/1 +f 24/9/1 26/12/1 25/8/1 +f 22/11/1 27/14/1 26/12/1 +f 20/13/1 28/16/1 27/14/1 +f 20/13/1 18/17/1 29/15/1 +f 18/17/1 16/20/1 30/18/1 +f 14/19/1 31/655/1 30/18/1 +f 12/21/1 32/25/1 31/22/1 +f 12/21/1 10/26/1 33/24/1 +f 10/26/1 8/28/1 34/27/1 +f 8/28/1 6/4/1 35/6/1 +f 37/29/2 49/656/2 50/30/2 +f 48/31/2 50/30/2 51/32/2 +f 47/33/2 51/32/2 52/34/2 +f 46/35/2 52/34/2 53/36/2 +f 45/37/2 53/36/2 54/38/2 +f 54/38/2 55/657/2 43/40/2 +f 55/41/2 56/658/2 42/42/2 +f 42/42/2 56/658/2 57/44/2 +f 41/45/2 57/44/2 58/46/2 +f 58/46/2 59/49/2 39/48/2 +f 59/49/2 60/51/2 38/50/2 +f 60/51/2 49/656/2 37/29/2 +f 87/52/1 86/55/1 108/53/1 +f 86/55/1 85/58/1 97/56/1 +f 96/57/1 98/60/1 97/56/1 +f 95/59/1 99/62/1 98/60/1 +f 94/61/1 100/64/1 99/62/1 +f 94/61/1 93/65/1 101/63/1 +f 93/65/1 92/68/1 102/66/1 +f 91/67/1 103/659/1 102/66/1 +f 90/69/1 104/73/1 103/70/1 +f 90/69/1 89/74/1 105/72/1 +f 89/74/1 88/76/1 106/75/1 +f 88/76/1 87/52/1 107/54/1 +f 123/77/1 122/80/1 144/78/1 +f 122/80/1 121/83/1 133/81/1 +f 132/82/1 134/85/1 133/81/1 +f 131/84/1 135/660/1 134/85/1 +f 129/86/1 128/90/1 138/87/1 +f 127/89/1 139/661/1 138/87/1 +f 126/91/1 140/95/1 139/92/1 +f 126/91/1 125/662/1 141/94/1 +f 184/97/2 190/663/2 154/98/2 +f 190/663/2 166/664/2 154/98/2 +f 166/664/2 160/665/2 154/98/2 +f 154/98/2 148/666/2 142/667/2 +f 142/667/2 136/668/2 130/669/2 +f 130/669/2 124/670/2 193/96/2 +f 193/96/2 194/671/2 184/97/2 +f 154/98/2 142/667/2 130/669/2 +f 130/669/2 193/96/2 154/98/2 +f 117/99/2 118/103/2 178/100/2 +f 119/102/2 179/672/2 178/100/2 +f 113/104/2 173/673/2 172/105/2 +f 111/107/2 112/106/2 172/105/2 +f 171/109/3 159/674/3 131/110/3 +f 129/112/4 161/140/4 173/113/4 +f 125/115/5 117/675/5 177/116/5 +f 123/118/6 167/676/6 179/119/6 +f 145/121/2 181/677/2 182/122/2 +f 156/123/2 182/122/2 183/124/2 +f 143/127/6 155/678/6 183/126/6 +f 183/126/6 167/676/6 123/118/6 +f 191/129/3 147/679/3 135/128/3 +f 131/110/3 159/674/3 191/129/3 +f 153/130/2 185/680/2 186/131/2 +f 186/131/2 187/681/2 151/133/2 +f 187/134/2 188/682/2 150/135/2 +f 150/135/2 188/682/2 189/137/2 +f 137/683/4 149/684/4 129/112/4 +f 149/684/4 189/139/4 129/112/4 +f 185/142/5 153/685/5 141/141/5 +f 125/115/5 165/117/5 185/142/5 +f 191/143/2 192/146/2 146/144/2 +f 192/146/2 181/677/2 145/121/2 +f 235/147/7 923/686/7 924/148/7 +f 235/150/8 237/157/8 925/151/8 +f 243/153/9 808/528/9 803/154/9 +f 239/156/10 243/181/10 925/151/10 +f 244/158/11 240/176/11 238/159/11 +f 238/159/2 240/176/2 239/161/2 +f 222/163/12 248/183/12 244/164/12 +f 224/166/1 223/171/1 228/167/1 +f 236/149/13 924/148/13 926/160/13 +f 237/162/2 235/687/2 236/169/2 +f 220/170/1 219/688/1 223/171/1 +f 229/172/10 254/205/10 253/173/10 +f 232/175/1 233/689/1 229/168/1 +f 240/176/2 242/690/2 241/177/2 +f 240/176/14 244/158/14 246/178/14 +f 241/180/15 245/182/15 243/181/15 +f 242/179/16 246/178/16 245/182/16 +f 248/183/2 247/197/2 245/184/2 +f 228/167/13 251/194/13 255/188/13 +f 219/190/14 250/200/14 252/191/14 +f 254/192/2 256/691/2 255/193/2 +f 252/191/2 250/692/2 249/195/2 +f 251/194/2 252/191/2 253/196/2 +f 247/197/16 248/183/16 222/163/16 +f 223/171/11 252/191/11 251/194/11 +f 220/199/16 249/203/16 250/200/16 +f 232/189/7 255/188/7 256/201/7 +f 224/174/15 253/173/15 249/203/15 +f 233/204/8 256/693/8 254/205/8 +f 207/208/2 208/694/2 211/695/2 +f 208/694/2 209/696/2 211/695/2 +f 209/696/2 210/697/2 211/695/2 +f 211/695/2 212/698/2 213/206/2 +f 213/206/2 214/699/2 215/207/2 +f 215/207/2 216/700/2 217/701/2 +f 217/701/2 218/702/2 215/207/2 +f 218/702/2 207/208/2 215/207/2 +f 211/695/2 213/206/2 207/208/2 +f 261/209/7 264/215/7 263/210/7 +f 257/212/17 262/211/17 263/210/17 +f 260/214/11 258/703/11 263/210/11 +f 259/216/10 261/209/10 262/211/10 +f 323/218/1 324/704/1 312/219/1 +f 312/219/1 324/704/1 313/221/1 +f 313/221/1 314/224/1 302/223/1 +f 314/224/1 315/226/1 303/225/1 +f 315/226/1 316/705/1 304/227/1 +f 304/227/1 316/705/1 317/228/1 +f 305/229/1 317/228/1 318/230/1 +f 318/230/1 319/706/1 307/232/1 +f 319/233/1 320/236/1 308/234/1 +f 320/236/1 321/238/1 309/237/1 +f 321/238/1 322/707/1 310/239/1 +f 310/239/1 322/707/1 323/218/1 +f 276/240/2 336/264/2 335/241/2 +f 275/242/2 335/241/2 334/243/2 +f 273/245/2 274/244/2 334/243/2 +f 272/247/2 273/245/2 333/246/2 +f 272/247/2 332/248/2 331/249/2 +f 271/251/2 331/708/2 330/252/2 +f 270/253/2 330/252/2 329/254/2 +f 269/255/2 329/254/2 328/256/2 +f 267/258/2 268/257/2 328/256/2 +f 266/260/2 267/258/2 327/259/2 +f 266/260/2 326/261/2 325/262/2 +f 265/263/2 325/262/2 336/264/2 +f 356/265/18 662/456/18 661/266/18 +f 360/268/11 364/276/11 362/269/11 +f 359/271/10 357/709/10 361/272/10 +f 363/273/10 361/272/10 365/274/10 +f 364/276/11 368/710/11 366/277/11 +f 374/278/11 372/281/11 378/279/11 +f 372/281/11 370/549/11 376/282/11 +f 408/283/11 412/297/11 409/284/11 +f 373/286/10 379/711/10 377/287/10 +f 371/288/10 377/287/10 375/289/10 +f 405/291/10 410/712/10 411/292/10 +f 426/294/11 428/309/11 424/295/11 +f 412/297/11 416/306/11 413/298/11 +f 411/292/10 410/712/10 414/299/10 +f 427/301/10 425/311/10 421/302/10 +f 415/300/10 414/299/10 418/304/10 +f 416/306/11 420/713/11 417/307/11 +f 426/294/11 430/312/11 432/308/11 +f 431/310/10 429/315/10 425/311/10 +f 430/312/11 434/714/11 436/313/11 +f 435/314/10 433/715/10 429/315/10 +f 437/322/11 439/324/11 356/323/11 +f 439/324/2 440/716/2 355/325/2 +f 355/326/10 440/717/10 438/327/10 +f 438/327/1 437/322/1 354/267/1 +f 443/329/10 447/335/10 445/330/10 +f 444/332/11 442/718/11 446/333/11 +f 447/335/10 449/338/10 451/336/10 +f 452/337/11 450/341/11 448/334/11 +f 449/338/10 453/719/10 467/339/10 +f 468/340/11 454/720/11 450/341/11 +f 467/339/10 453/719/10 455/342/10 +f 455/342/10 457/357/10 469/343/10 +f 456/345/11 454/720/11 468/340/11 +f 470/344/11 458/721/11 456/345/11 +f 465/352/10 475/722/10 473/353/10 +f 474/354/11 476/723/11 466/355/11 +f 457/357/10 459/348/10 471/356/10 +f 459/348/10 463/347/10 473/353/10 +f 471/356/10 459/348/10 473/353/10 +f 460/350/11 458/721/11 472/724/11 +f 458/721/11 470/344/11 472/724/11 +f 472/724/11 474/354/11 460/350/11 +f 482/360/16 480/725/16 478/726/16 +f 478/726/16 492/727/16 490/358/16 +f 490/358/16 488/728/16 486/359/16 +f 486/359/16 484/729/16 482/360/16 +f 482/360/16 478/726/16 490/358/16 +f 497/361/7 500/367/7 499/362/7 +f 493/364/17 498/363/17 499/362/17 +f 496/366/11 494/730/11 499/362/11 +f 495/368/10 497/361/10 498/363/10 +f 503/370/7 504/373/7 501/371/7 +f 504/373/2 506/731/2 505/374/2 +f 510/376/16 509/732/16 543/377/16 +f 543/377/16 544/733/16 531/734/16 +f 544/733/16 507/735/16 531/734/16 +f 507/735/16 508/736/16 531/734/16 +f 531/734/16 532/375/16 543/377/16 +f 520/379/7 519/737/7 550/380/7 +f 550/380/7 549/738/7 538/739/7 +f 549/738/7 521/740/7 538/739/7 +f 521/740/7 522/741/7 538/739/7 +f 538/739/7 537/378/7 550/380/7 +f 555/383/19 556/742/19 557/743/19 +f 557/743/19 558/744/19 559/381/19 +f 559/381/19 560/745/19 561/382/19 +f 561/382/19 562/746/19 555/383/19 +f 555/383/19 557/743/19 559/381/19 +f 580/384/10 582/387/10 581/385/10 +f 582/387/1 586/390/1 585/388/1 +f 586/390/11 584/393/11 583/391/11 +f 584/393/2 580/384/2 579/394/2 +f 585/388/7 583/747/7 579/396/7 +f 582/387/16 580/384/16 584/393/16 +f 609/397/10 615/401/10 613/398/10 +f 609/397/10 611/748/10 617/400/10 +f 610/402/11 608/408/11 614/403/11 +f 610/402/11 616/404/11 618/405/11 +f 607/399/7 613/749/7 614/407/7 +f 17/409/1 623/750/1 624/410/1 +f 622/411/1 623/751/1 17/409/1 +f 21/413/1 621/752/1 622/414/1 +f 620/415/1 621/753/1 21/413/1 +f 1/417/1 619/754/1 620/418/1 +f 630/419/1 619/755/1 1/417/1 +f 5/421/1 629/756/1 630/422/1 +f 628/423/1 629/757/1 5/421/1 +f 9/425/1 627/758/1 628/426/1 +f 626/427/1 627/759/1 9/425/1 +f 13/429/1 625/760/1 626/430/1 +f 633/432/1 632/761/1 631/762/1 +f 631/762/1 642/763/1 641/433/1 +f 641/433/1 640/764/1 639/765/1 +f 639/765/1 638/766/1 637/767/1 +f 637/767/1 636/768/1 635/431/1 +f 635/431/1 634/769/1 633/432/1 +f 633/432/1 631/762/1 641/433/1 +f 641/433/1 639/765/1 637/767/1 +f 637/767/1 635/431/1 641/433/1 +f 765/434/16 770/438/16 767/435/16 +f 763/437/20 769/440/20 770/438/20 +f 712/439/16 768/770/16 769/440/16 +f 646/441/16 771/771/16 774/442/16 +f 647/444/10 651/772/10 653/445/10 +f 654/447/11 652/451/11 650/448/11 +f 654/447/21 653/773/21 651/450/21 +f 658/452/11 657/458/11 660/453/11 +f 658/452/1 656/774/1 655/455/1 +f 661/266/2 659/775/2 660/457/2 +f 661/266/18 657/458/18 353/328/18 +f 662/456/10 655/776/10 659/459/10 +f 657/458/18 658/452/18 355/460/18 +f 658/452/18 662/456/18 356/265/18 +f 665/462/1 664/777/1 663/778/1 +f 663/778/1 674/779/1 673/463/1 +f 673/463/1 672/780/1 671/781/1 +f 671/781/1 670/782/1 669/783/1 +f 669/783/1 668/784/1 667/461/1 +f 667/461/1 666/785/1 665/462/1 +f 665/462/1 663/778/1 673/463/1 +f 673/463/1 671/781/1 669/783/1 +f 669/783/1 667/461/1 673/463/1 +f 766/443/20 774/442/20 773/464/20 +f 716/467/1 715/786/1 714/787/1 +f 714/787/1 725/788/1 724/468/1 +f 724/468/1 723/789/1 722/790/1 +f 722/790/1 721/791/1 720/792/1 +f 720/792/1 719/793/1 718/466/1 +f 718/466/1 717/794/1 716/467/1 +f 716/467/1 714/787/1 724/468/1 +f 724/468/1 722/790/1 720/792/1 +f 720/792/1 718/466/1 724/468/1 +f 764/470/11 713/795/11 644/480/11 +f 644/480/11 649/796/11 764/470/11 +f 649/796/11 650/469/11 764/470/11 +f 650/469/11 646/441/11 766/443/11 +f 648/472/10 643/797/10 763/473/10 +f 643/797/10 712/798/10 763/473/10 +f 763/473/10 765/434/10 647/471/10 +f 765/434/10 645/436/10 647/471/10 +f 764/465/16 773/464/16 772/474/16 +f 775/476/22 768/799/22 712/477/22 +f 776/479/22 775/476/22 643/478/22 +f 713/481/22 772/800/22 776/479/22 +f 776/482/1 778/485/1 777/483/1 +f 778/485/16 780/491/16 779/486/16 +f 781/487/16 783/801/16 784/488/16 +f 784/490/2 783/802/2 779/486/2 +f 775/492/11 777/483/11 779/486/11 +f 776/494/10 784/803/10 780/491/10 +f 773/496/10 774/804/10 784/803/10 +f 774/804/10 771/805/10 784/803/10 +f 771/805/10 782/806/10 784/803/10 +f 784/803/10 776/494/10 773/496/10 +f 781/807/11 767/808/11 783/493/11 +f 767/808/11 770/809/11 783/493/11 +f 769/497/11 768/810/11 775/492/11 +f 770/809/11 769/497/11 783/493/11 +f 787/498/23 788/509/23 786/499/23 +f 785/501/2 786/499/2 790/502/2 +f 785/811/4 789/812/4 792/504/4 +f 796/813/4 800/814/4 799/505/4 +f 787/506/4 785/811/4 792/504/4 +f 792/504/4 796/813/4 799/505/4 +f 790/502/24 793/510/24 792/507/24 +f 787/506/1 799/505/1 802/508/1 +f 793/510/2 797/815/2 796/511/2 +f 801/512/25 802/508/25 799/513/25 +f 788/509/6 802/508/6 793/515/6 +f 802/508/6 801/512/6 797/816/6 +f 802/508/6 797/816/6 793/515/6 +f 790/502/6 786/499/6 793/515/6 +f 806/516/1 794/522/1 791/517/1 +f 796/511/26 797/815/26 801/519/26 +f 798/521/9 791/517/9 794/522/9 +f 805/524/7 795/523/7 794/522/7 +f 808/526/16 791/517/16 798/521/16 +f 247/187/9 806/531/9 808/528/9 +f 805/529/2 803/817/2 798/521/2 +f 221/530/9 805/532/9 806/531/9 +f 221/530/9 225/155/9 803/154/9 +f 810/533/9 807/818/9 804/534/9 +f 809/535/1 811/819/1 812/536/1 +f 815/537/27 816/541/27 814/538/27 +f 819/540/28 820/820/28 816/541/28 +f 819/542/10 815/537/10 813/539/10 +f 820/544/11 818/821/11 814/538/11 +f 823/547/1 822/822/1 821/823/1 +f 821/823/1 832/824/1 823/547/1 +f 832/824/1 831/545/1 823/547/1 +f 831/545/1 830/825/1 827/546/1 +f 830/825/1 829/826/1 827/546/1 +f 829/826/1 828/827/1 827/546/1 +f 827/546/1 826/828/1 825/829/1 +f 825/829/1 824/830/1 827/546/1 +f 824/830/1 823/547/1 827/546/1 +f 842/553/11 840/831/11 838/832/11 +f 838/832/11 852/833/11 850/551/11 +f 850/551/11 848/834/11 846/552/11 +f 846/552/11 844/835/11 842/553/11 +f 842/553/11 838/832/11 850/551/11 +f 859/554/11 863/573/11 864/555/11 +f 851/558/10 837/836/10 839/837/10 +f 839/837/10 841/838/10 851/558/10 +f 841/838/10 843/559/10 851/558/10 +f 843/559/10 845/839/10 847/840/10 +f 847/840/10 849/557/10 843/559/10 +f 853/560/10 854/563/10 855/561/10 +f 854/563/10 835/590/10 857/564/10 +f 835/566/10 836/569/10 858/567/10 +f 836/569/10 853/560/10 856/570/10 +f 861/572/11 865/589/11 863/573/11 +f 862/575/11 866/579/11 865/576/11 +f 860/578/11 864/555/11 866/579/11 +f 856/581/7 860/578/7 862/580/7 +f 835/566/2 865/576/2 866/579/2 +f 858/583/1 862/575/1 861/577/1 +f 853/560/1 864/555/1 863/573/1 +f 857/585/16 861/572/16 859/574/16 +f 855/587/2 859/554/2 860/556/2 +f 836/569/16 866/579/16 864/555/16 +f 854/563/7 863/573/7 865/589/7 +f 875/591/29 879/607/29 880/592/29 +f 869/594/30 870/616/30 871/595/30 +f 871/597/30 870/616/30 867/598/30 +f 867/598/30 868/602/30 874/600/30 +f 868/602/30 869/621/30 872/603/30 +f 875/605/29 877/618/29 881/606/29 +f 877/608/29 878/841/29 882/609/29 +f 876/610/29 880/622/29 882/609/29 +f 872/612/31 876/610/31 878/611/31 +f 867/598/32 881/606/32 882/609/32 +f 874/614/33 878/841/33 877/608/33 +f 869/594/33 880/592/33 879/607/33 +f 871/617/34 873/842/34 877/618/34 +f 871/619/32 875/591/32 876/593/32 +f 869/621/34 868/602/34 882/609/34 +f 870/616/31 879/607/31 881/606/31 +f 885/625/2 884/843/2 893/623/2 +f 884/843/2 883/844/2 893/623/2 +f 883/844/2 894/845/2 893/623/2 +f 893/623/2 892/846/2 891/847/2 +f 891/847/2 890/848/2 889/624/2 +f 889/624/2 888/849/2 885/625/2 +f 888/849/2 887/850/2 885/625/2 +f 887/850/2 886/851/2 885/625/2 +f 893/623/2 891/847/2 889/624/2 +f 913/626/35 914/852/35 911/627/35 +f 908/629/7 913/635/7 912/630/7 +f 907/632/10 912/628/10 911/627/10 +f 910/634/11 914/636/11 913/635/11 +f 910/634/16 909/633/16 911/627/16 +f 921/637/36 922/853/36 919/638/36 +f 915/640/7 916/645/7 921/637/7 +f 915/640/10 920/641/10 919/642/10 +f 918/644/11 922/853/11 921/637/11 +f 917/643/16 919/642/16 922/646/16 +f 926/648/13 924/854/13 234/316/13 +f 923/649/8 925/650/8 227/321/8 +f 337/317/11 226/165/11 230/318/11 +f 226/165/11 244/164/11 230/318/11 +f 243/153/10 225/155/10 227/321/10 +f 225/155/10 338/319/10 227/321/10 +f 910/651/1 908/629/1 907/631/1 +f 918/647/1 916/855/1 915/653/1 +s 1 +f 2/10/16 3/420/5 1/417/16 +f 4/7/5 5/421/25 3/420/5 +f 6/4/25 7/424/11 5/421/25 +f 8/28/11 9/425/37 7/424/11 +f 10/26/37 11/428/6 9/425/37 +f 12/21/6 13/429/7 11/428/6 +f 14/19/7 15/3/3 13/2/7 +f 16/20/3 17/409/23 15/3/3 +f 18/17/23 19/412/10 17/409/23 +f 20/13/10 21/413/38 19/412/10 +f 22/11/38 23/416/4 21/413/38 +f 24/9/4 1/417/16 23/416/4 +f 32/25/6 43/40/7 31/22/7 +f 29/15/23 40/47/10 28/16/10 +f 36/5/5 47/33/25 35/6/25 +f 26/12/4 37/29/16 25/8/16 +f 33/24/37 44/39/6 32/25/6 +f 30/18/3 41/45/23 29/15/23 +f 25/8/16 48/31/5 36/5/5 +f 27/14/38 38/50/4 26/12/4 +f 34/27/11 45/37/37 33/24/37 +f 31/655/7 42/42/3 30/18/3 +f 28/16/10 39/48/38 27/14/38 +f 35/6/25 46/35/11 34/27/11 +f 51/32/39 72/856/40 71/857/39 +f 49/656/41 72/856/40 50/30/40 +f 49/656/41 62/858/42 61/859/41 +f 60/51/42 63/860/43 62/858/42 +f 58/46/44 63/860/43 59/49/43 +f 58/46/44 65/861/45 64/862/44 +f 56/658/46 65/861/45 57/44/45 +f 56/658/46 67/863/28 66/864/46 +f 54/38/47 67/865/28 55/657/28 +f 54/38/47 69/866/48 68/867/47 +f 52/34/49 69/866/48 53/36/48 +f 52/34/49 71/857/39 70/868/49 +f 64/862/10 75/869/38 63/860/38 +f 71/857/25 82/870/11 70/868/11 +f 68/867/6 79/871/7 67/865/7 +f 65/861/23 76/872/10 64/862/10 +f 72/856/5 83/873/25 71/857/25 +f 62/858/4 73/874/16 61/859/16 +f 69/866/37 80/875/6 68/867/6 +f 66/864/3 77/876/23 65/861/23 +f 61/859/16 84/877/5 72/856/5 +f 63/860/38 74/878/4 62/858/4 +f 70/868/11 81/879/37 69/866/37 +f 67/863/7 78/880/3 66/864/3 +f 104/73/6 115/881/50 103/70/7 +f 101/63/23 112/106/10 100/64/10 +f 108/53/5 119/102/51 107/54/25 +f 98/60/4 109/882/52 97/56/16 +f 105/72/37 116/883/53 104/73/6 +f 102/66/3 113/104/54 101/63/23 +f 97/56/16 120/884/55 108/53/5 +f 99/62/38 110/885/56 98/60/4 +f 106/75/11 117/99/57 105/72/37 +f 103/659/7 114/886/58 102/66/3 +f 100/64/10 111/107/59 99/62/38 +f 107/54/25 118/103/11 106/75/11 +f 121/83/60 120/884/55 109/882/52 +f 122/80/61 119/102/51 120/884/55 +f 174/887/5 142/888/16 148/889/5 +f 178/890/10 130/891/38 177/116/62 +f 117/99/57 126/91/63 116/883/53 +f 126/91/63 115/881/50 116/883/53 +f 115/892/50 128/90/64 114/886/58 +f 128/90/64 113/104/54 114/886/58 +f 170/893/6 166/894/37 190/895/6 +f 169/896/7 194/897/3 180/898/3 +f 131/84/65 110/885/56 111/107/59 +f 110/885/56 121/83/60 109/882/52 +f 84/877/66 87/52/24 83/873/24 +f 85/58/20 84/877/66 73/874/20 +f 74/878/67 85/58/20 73/874/20 +f 75/869/68 96/57/67 74/878/67 +f 94/61/69 75/869/68 76/872/69 +f 77/876/70 94/61/69 76/872/69 +f 92/68/71 77/876/70 78/880/71 +f 91/67/72 78/880/71 79/899/72 +f 80/875/73 91/71/72 79/871/72 +f 81/879/74 90/69/73 80/875/73 +f 88/76/75 81/879/74 82/870/75 +f 83/873/24 88/76/75 82/870/75 +f 140/95/6 151/133/7 139/92/7 +f 174/887/5 154/900/25 173/113/76 +f 144/78/5 155/125/77 143/79/77 +f 134/85/4 145/121/16 133/81/16 +f 141/94/13 152/132/6 140/95/6 +f 138/87/3 149/138/8 137/88/8 +f 133/81/16 156/123/5 144/78/5 +f 135/660/19 146/144/4 134/85/4 +f 177/116/62 136/901/4 176/902/4 +f 139/661/7 150/135/3 138/87/3 +f 170/893/6 184/903/7 169/896/7 +f 180/898/3 193/904/23 179/119/78 +f 173/113/76 160/905/11 172/906/11 +f 176/902/4 142/888/16 175/907/16 +f 179/119/78 124/908/10 178/909/10 +f 162/910/5 173/113/76 161/140/77 +f 157/911/7 180/898/3 168/912/3 +f 159/674/13 170/893/6 158/913/6 +f 163/914/16 174/887/5 162/910/5 +f 164/915/4 175/907/16 163/914/16 +f 168/912/3 179/119/78 167/676/8 +f 158/913/6 169/896/7 157/911/7 +f 165/117/19 176/902/4 164/915/4 +f 172/916/11 166/894/37 171/109/79 +f 168/917/71 181/677/72 157/918/72 +f 167/919/80 182/122/71 168/917/71 +f 164/920/67 185/680/81 165/921/81 +f 164/920/67 187/681/20 186/131/67 +f 162/922/66 187/134/20 163/923/20 +f 162/922/66 189/137/82 188/682/66 +f 158/924/73 191/143/83 159/925/83 +f 158/924/73 181/677/72 192/146/73 +f 204/926/11 215/927/37 203/928/37 +f 201/929/7 212/930/3 200/931/3 +f 198/932/10 209/933/38 197/934/38 +f 205/935/25 216/936/11 204/926/11 +f 202/937/6 213/938/7 201/939/7 +f 199/940/23 210/941/10 198/932/10 +f 206/942/5 217/943/25 205/935/25 +f 196/944/4 207/945/16 195/946/16 +f 203/928/37 214/947/6 202/937/6 +f 200/931/3 211/948/23 199/940/23 +f 195/946/16 218/949/5 206/942/5 +f 197/934/38 208/950/4 196/944/4 +f 234/951/84 351/952/85 352/953/85 +f 279/954/38 268/257/10 267/258/38 +f 286/955/11 275/242/25 274/244/11 +f 283/956/7 272/247/6 271/250/7 +f 280/957/10 269/255/23 268/257/10 +f 287/958/25 276/240/5 275/242/25 +f 277/959/16 266/260/4 265/263/16 +f 284/960/6 273/245/37 272/247/6 +f 281/961/23 270/253/3 269/255/23 +f 288/962/5 265/263/16 276/240/5 +f 278/963/4 267/258/38 266/260/4 +f 285/964/37 274/244/11 273/245/37 +f 282/965/3 271/251/7 270/253/3 +f 298/966/86 287/958/87 286/955/86 +f 287/958/87 300/967/88 288/962/88 +f 300/967/88 277/959/89 288/962/88 +f 289/968/89 278/963/90 277/959/89 +f 278/963/90 291/969/91 279/954/91 +f 279/954/91 292/970/92 280/957/92 +f 292/970/92 281/961/93 280/957/92 +f 293/971/93 282/965/94 281/961/93 +f 294/972/94 283/973/95 282/965/94 +f 295/974/95 284/960/96 283/956/95 +f 296/975/96 285/964/97 284/960/96 +f 297/976/97 286/955/86 285/964/97 +f 299/977/25 312/219/5 300/967/5 +f 289/968/16 302/223/4 290/978/4 +f 296/975/6 309/237/37 297/976/37 +f 293/971/23 306/231/3 294/972/3 +f 300/967/5 301/222/16 289/968/16 +f 290/978/4 303/225/38 291/969/38 +f 297/976/37 310/239/11 298/966/11 +f 294/972/3 307/232/7 295/979/7 +f 291/969/38 304/227/10 292/970/10 +f 298/966/11 311/220/25 299/977/25 +f 295/974/7 308/234/6 296/975/6 +f 292/970/10 305/229/23 293/971/23 +f 221/980/98 344/981/99 225/982/100 +f 340/983/101 338/984/102 341/985/103 +f 343/986/104 341/985/103 344/981/99 +f 225/982/100 341/985/103 338/984/102 +f 342/987/105 337/317/106 339/988/107 +f 335/241/23 390/989/108 334/243/10 +f 342/987/105 226/165/109 337/317/106 +f 226/165/109 343/986/104 222/990/110 +f 340/983/101 342/987/105 339/988/107 +f 328/256/11 382/991/111 327/259/37 +f 331/708/16 386/992/112 330/252/5 +f 334/243/10 389/993/113 333/246/38 +f 327/259/37 383/994/114 326/261/6 +f 325/262/7 392/995/115 336/264/3 +f 222/990/110 344/981/99 221/980/98 +f 330/252/5 385/996/116 329/254/25 +f 333/246/38 388/997/117 332/248/4 +f 326/261/6 384/998/118 325/262/7 +f 336/264/3 391/999/119 335/241/23 +f 329/254/25 381/1000/120 328/256/11 +f 332/248/4 387/1001/121 331/249/16 +f 339/1002/7 346/1003/122 340/1004/7 +f 345/1005/122 348/1006/2 346/1003/122 +f 347/1007/2 350/1008/22 348/1006/2 +f 349/1009/123 351/952/85 350/1008/123 +f 362/269/124 357/709/20 358/270/20 +f 368/710/125 372/281/126 374/278/125 +f 366/277/127 361/272/124 362/269/124 +f 364/276/126 370/549/28 372/281/126 +f 359/271/28 371/288/126 369/290/28 +f 371/288/126 367/275/125 373/286/125 +f 375/1010/128 378/1011/126 376/1012/128 +f 377/1013/126 380/1014/125 378/1011/126 +f 407/293/1 412/297/129 408/283/1 +f 316/705/11 397/1015/130 317/228/25 +f 323/218/23 404/1016/131 324/704/3 +f 313/221/7 394/1017/132 314/224/6 +f 320/236/4 401/1018/133 321/238/38 +f 317/228/25 398/1019/134 318/230/5 +f 324/704/3 393/1020/135 313/221/7 +f 314/224/6 395/1021/136 315/226/37 +f 321/238/38 402/1022/137 322/707/10 +f 318/230/5 399/1023/138 319/706/16 +f 315/226/37 396/1024/139 316/705/11 +f 322/707/10 403/1025/140 323/218/23 +f 319/233/16 400/1026/141 320/236/4 +f 387/1027/121 398/1019/134 386/1028/112 +f 386/1028/112 397/1015/130 385/1029/116 +f 385/1029/116 396/1024/139 381/1030/120 +f 381/1030/120 395/1021/136 382/1031/111 +f 382/1031/111 394/1017/132 383/1032/114 +f 384/1033/118 394/1017/132 393/1020/135 +f 384/1033/118 404/1016/131 392/1034/115 +f 391/1035/119 404/1016/131 403/1025/140 +f 391/1035/119 402/1022/137 390/1036/108 +f 390/1036/108 401/1018/133 389/1037/113 +f 389/1037/113 400/1026/141 388/1038/117 +f 388/1038/117 399/1039/138 387/1040/121 +f 428/1041/142 423/1042/2 424/1043/2 +f 411/292/129 416/306/143 412/297/129 +f 415/300/143 420/713/144 416/306/143 +f 432/1044/145 427/1045/142 428/1041/142 +f 436/1046/146 431/1047/145 432/1044/145 +f 417/307/147 430/312/148 413/298/148 +f 413/298/148 426/294/149 409/284/149 +f 409/284/149 422/296/2 406/285/2 +f 405/291/2 425/311/149 410/712/149 +f 410/712/149 429/315/148 414/299/148 +f 414/299/148 433/715/147 418/304/147 +f 346/1048/10 350/1049/150 340/1050/151 +f 349/1051/152 345/1005/11 339/1002/153 +f 338/319/154 350/1049/150 351/1052/155 +f 337/317/156 352/1053/157 349/1051/152 +f 352/1053/157 337/317/156 234/316/158 +f 231/320/159 338/319/154 351/1052/155 +f 444/1054/160 447/1055/161 443/1056/160 +f 349/1051/152 339/1002/153 337/317/156 +f 350/1049/150 338/319/154 340/1050/151 +f 445/1057/162 442/1058/72 441/1059/72 +f 448/1060/161 449/1061/163 447/1055/161 +f 456/1062/164 453/1063/165 454/1064/165 +f 451/1065/166 446/1066/162 445/1057/162 +f 454/1064/165 449/1061/163 450/1067/163 +f 456/1062/164 457/1068/167 455/1069/164 +f 458/1070/167 459/1071/168 457/1068/167 +f 460/1072/168 461/1073/7 459/1071/168 +f 462/1074/169 463/1075/2 461/1073/169 +f 464/1076/2 465/1077/170 463/1075/2 +f 467/1078/122 452/1079/166 451/1065/166 +f 467/1078/122 470/344/7 468/340/122 +f 469/1080/1 472/1081/171 470/344/1 +f 471/1082/171 474/1083/172 472/1081/171 +f 473/1084/172 476/1085/173 474/1083/172 +f 478/1086/1 479/1087/174 477/1088/1 +f 480/1089/174 481/1090/11 479/1087/174 +f 482/1091/11 483/1092/175 481/1090/11 +f 484/1093/175 485/1094/2 483/1092/175 +f 486/1095/2 487/1096/176 485/1094/2 +f 488/1097/176 489/1098/10 487/1096/176 +f 490/1099/10 491/1100/177 489/1098/10 +f 492/1101/177 477/1102/1 491/1100/177 +f 514/1103/178 515/1104/179 511/1105/180 +f 510/1106/181 511/1105/180 509/1107/182 +f 507/1108/183 513/1109/184 508/1110/185 +f 516/1111/186 552/1112/187 524/1113/188 +f 529/1114/189 539/1115/190 525/1116/191 +f 512/1117/192 517/1118/193 513/1109/184 +f 514/1119/178 532/375/194 534/1120/195 +f 521/1121/196 553/1122/197 527/1123/198 +f 526/1124/199 527/1125/198 523/1126/200 +f 515/1127/179 545/1128/201 511/1129/180 +f 518/1130/202 523/1126/200 515/1104/179 +f 516/1131/186 525/1132/191 517/1118/193 +f 527/1125/198 522/1133/203 521/1134/196 +f 524/1135/188 529/1136/189 525/1132/191 +f 525/1116/191 535/1137/204 517/1138/193 +f 529/1136/189 519/1139/205 520/1140/206 +f 507/1141/183 546/1142/207 512/1143/192 +f 513/1144/184 531/734/208 508/1145/185 +f 531/734/208 534/1120/195 532/375/194 +f 536/1146/209 539/1115/190 540/1147/210 +f 534/1120/195 535/1137/204 536/1146/209 +f 540/1147/210 541/1148/211 542/1149/212 +f 538/739/213 541/1148/211 537/378/214 +f 518/1150/202 540/1147/210 526/1124/199 +f 526/1124/199 542/1149/212 530/1151/215 +f 513/1144/184 535/1137/204 533/1152/216 +f 529/1114/189 537/378/214 541/1148/211 +f 514/1119/178 536/1146/209 518/1150/202 +f 522/1153/203 542/1149/212 538/739/213 +f 544/1154/217 545/1128/201 546/1142/207 +f 545/1128/201 548/1155/218 546/1142/207 +f 547/1156/219 552/1112/187 548/1155/218 +f 551/1157/220 554/1158/221 552/1112/187 +f 554/1158/221 549/1159/222 550/1160/223 +f 528/1161/224 552/1112/187 554/1158/221 +f 512/1143/192 548/1155/218 516/1111/186 +f 528/1161/224 550/1160/223 519/1162/205 +f 511/1129/180 543/1163/225 509/1164/182 +f 515/1127/179 551/1157/220 547/1156/219 +f 527/1123/198 551/1157/220 523/1165/200 +f 569/1166/226 578/1167/227 570/1168/228 +f 561/1169/77 568/1170/229 569/1166/226 +f 559/1171/2 566/1172/230 567/1173/231 +f 556/1174/232 565/1175/233 557/1176/8 +f 561/1169/77 570/1168/228 562/1177/234 +f 560/1178/235 567/1173/231 568/1170/229 +f 558/1179/236 565/1180/233 566/1172/230 +f 555/1181/1 563/1182/237 556/1174/232 +f 562/1177/234 564/1183/238 555/1181/1 +f 574/1184/239 573/1185/240 577/1186/241 +f 567/1173/231 576/1187/242 568/1170/229 +f 566/1172/230 573/1188/240 574/1189/239 +f 564/1183/238 571/1190/243 563/1182/237 +f 570/1168/228 572/1191/244 564/1183/238 +f 569/1166/226 576/1187/242 577/1192/241 +f 567/1173/231 574/1189/239 575/1193/245 +f 563/1182/237 573/1194/240 565/1175/233 +f 587/1195/246 592/1196/247 589/1197/248 +f 588/1198/175 593/1199/249 587/1195/246 +f 595/1200/250 590/1201/174 589/1197/248 +f 587/1195/246 593/1199/249 591/1202/251 +f 589/1197/248 592/1196/247 595/1200/250 +f 600/1203/176 603/1204/252 599/1205/253 +f 605/1206/254 602/1207/177 601/1208/255 +f 597/1209/256 605/1206/254 598/1210/257 +f 601/1208/255 598/1210/257 605/1206/254 +f 599/1205/253 603/1204/252 597/1209/256 +f 608/408/258 609/397/2 607/399/258 +f 610/402/2 611/748/259 609/397/2 +f 620/1211/6 633/1212/37 621/1213/37 +f 627/1214/38 640/1215/10 628/1216/10 +f 624/1217/5 637/1218/16 625/1219/16 +f 621/1213/37 634/1220/11 622/1221/11 +f 628/1216/10 641/1222/23 629/1223/23 +f 625/1224/16 638/1225/4 626/1226/4 +f 622/1221/11 635/1227/25 623/1228/25 +f 629/1223/23 642/1229/3 630/1230/3 +f 619/1231/7 632/1232/6 620/1211/6 +f 626/1226/4 639/1233/38 627/1214/38 +f 623/1228/25 636/1234/5 624/1217/5 +f 630/1230/3 631/1235/7 619/1231/7 +f 650/448/260 651/772/261 647/444/260 +f 643/478/2 649/796/262 644/480/2 +f 648/1236/262 654/447/258 649/449/262 +f 666/1237/10 677/1238/38 665/1239/38 +f 673/1240/25 684/1241/11 672/1242/11 +f 670/1243/6 681/1244/7 669/1245/7 +f 667/1246/23 678/1247/10 666/1237/10 +f 674/1248/5 685/1249/25 673/1240/25 +f 664/1250/4 675/1251/16 663/1252/16 +f 671/1253/37 682/1254/6 670/1243/6 +f 668/1255/3 679/1256/23 667/1246/23 +f 663/1252/16 686/1257/5 674/1248/5 +f 665/1239/38 676/1258/4 664/1250/4 +f 672/1242/11 683/1259/37 671/1253/37 +f 669/1260/7 680/1261/3 668/1255/3 +f 683/1259/263 694/1262/264 682/1254/264 +f 680/1261/265 691/1263/266 679/1256/266 +f 675/1251/267 698/1264/268 686/1257/268 +f 676/1258/269 689/1265/270 688/1266/269 +f 683/1259/263 696/1267/271 695/1268/263 +f 681/1269/18 692/1270/265 680/1261/265 +f 678/1247/272 689/1265/270 677/1238/270 +f 684/1241/271 697/1271/273 696/1267/271 +f 681/1244/18 694/1262/264 693/1272/18 +f 679/1256/266 690/1273/272 678/1247/272 +f 686/1257/268 697/1271/273 685/1249/273 +f 675/1251/267 688/1266/269 687/1274/267 +f 688/1266/4 699/1275/274 687/1274/16 +f 695/1268/37 706/1276/275 694/1262/6 +f 692/1270/3 703/1277/276 691/1263/23 +f 687/1274/16 710/1278/277 698/1264/5 +f 689/1265/38 700/1279/278 688/1266/4 +f 696/1267/11 707/1280/279 695/1268/37 +f 693/1281/7 704/1282/280 692/1270/3 +f 690/1273/10 701/1283/281 689/1265/38 +f 697/1271/25 708/1284/282 696/1267/11 +f 694/1262/6 705/1285/283 693/1272/7 +f 691/1263/23 702/1286/284 690/1273/10 +f 698/1264/5 709/1287/285 697/1271/25 +f 699/1275/274 711/1288/2 710/1278/277 +f 701/1283/281 711/1289/2 700/1279/278 +f 708/1284/282 711/1290/2 707/1280/279 +f 705/1291/283 711/1292/2 704/1282/280 +f 702/1286/284 711/1293/2 701/1283/281 +f 709/1287/285 711/1294/2 708/1284/282 +f 706/1276/275 711/1295/2 705/1285/283 +f 703/1277/276 711/1296/2 702/1286/284 +f 710/1278/277 711/1297/2 709/1287/285 +f 707/1280/279 711/1298/2 706/1276/275 +f 704/1282/280 711/1299/2 703/1277/276 +f 700/1279/278 711/1300/2 699/1275/274 +f 717/1301/10 728/1302/38 716/1303/38 +f 724/1304/25 735/1305/11 723/1306/11 +f 721/1307/6 732/1308/7 720/1309/7 +f 718/1310/23 729/1311/10 717/1301/10 +f 725/1312/5 736/1313/25 724/1304/25 +f 715/1314/4 726/1315/16 714/1316/16 +f 722/1317/37 733/1318/6 721/1307/6 +f 719/1319/3 730/1320/23 718/1310/23 +f 714/1316/16 737/1321/5 725/1312/5 +f 716/1303/38 727/1322/4 715/1314/4 +f 723/1306/11 734/1323/37 722/1317/37 +f 720/1324/7 731/1325/3 719/1319/3 +f 733/1318/264 746/1326/263 745/1327/264 +f 730/1320/266 743/1328/265 742/1329/266 +f 726/1315/267 749/1330/268 737/1321/268 +f 727/1322/269 740/1331/270 739/1332/269 +f 735/1305/271 746/1326/263 734/1323/263 +f 732/1333/18 743/1328/265 731/1325/265 +f 729/1311/272 740/1331/270 728/1302/270 +f 735/1305/271 748/1334/273 747/1335/271 +f 732/1308/18 745/1327/264 744/1336/18 +f 729/1311/272 742/1329/266 741/1337/272 +f 737/1321/268 748/1334/273 736/1313/273 +f 726/1315/267 739/1332/269 738/1338/267 +f 739/1332/4 750/1339/274 738/1338/16 +f 746/1326/37 757/1340/275 745/1327/6 +f 743/1328/3 754/1341/276 742/1329/23 +f 738/1338/16 761/1342/277 749/1330/5 +f 740/1331/38 751/1343/278 739/1332/4 +f 747/1335/11 758/1344/279 746/1326/37 +f 744/1345/7 755/1346/280 743/1328/3 +f 741/1337/10 752/1347/281 740/1331/38 +f 748/1334/25 759/1348/282 747/1335/11 +f 745/1327/6 756/1349/283 744/1336/7 +f 742/1329/23 753/1350/284 741/1337/10 +f 749/1330/5 760/1351/285 748/1334/25 +f 750/1339/274 762/1352/2 761/1342/277 +f 752/1347/281 762/1353/2 751/1343/278 +f 759/1348/282 762/1354/2 758/1344/279 +f 756/1355/283 762/1356/2 755/1346/280 +f 753/1350/284 762/1357/2 752/1347/281 +f 760/1351/285 762/1358/2 759/1348/282 +f 757/1340/275 762/1359/2 756/1349/283 +f 754/1341/276 762/1360/2 753/1350/284 +f 761/1342/277 762/1361/2 760/1351/285 +f 758/1344/279 762/1362/2 757/1340/275 +f 755/1346/280 762/1363/2 754/1341/276 +f 751/1343/278 762/1364/2 750/1339/274 +f 782/489/1 646/441/1 650/469/260 +f 647/471/260 782/489/1 650/469/260 +f 781/487/1 645/436/1 767/1365/1 +f 376/1012/128 833/1366/286 375/1010/128 +f 838/1367/1 839/1368/173 837/1369/1 +f 840/1370/173 841/1371/7 839/1368/173 +f 842/1372/7 843/1373/27 841/1374/7 +f 844/1375/27 845/1376/2 843/1373/27 +f 846/1377/2 847/1378/22 845/1376/2 +f 848/1379/22 849/1380/16 847/1378/22 +f 850/1381/16 851/1382/286 849/1380/16 +f 852/1383/286 837/1369/1 851/1382/286 +f 887/1384/37 898/1385/11 886/1386/11 +f 894/1387/4 905/1388/38 893/1389/38 +f 884/1390/5 895/1391/16 883/1392/16 +f 891/1393/23 902/1394/3 890/1395/3 +f 888/1396/6 899/1397/37 887/1384/37 +f 883/1392/16 906/1398/4 894/1387/4 +f 885/1399/25 896/1400/5 884/1390/5 +f 892/1401/10 903/1402/23 891/1393/23 +f 889/1403/7 900/1404/6 888/1396/6 +f 886/1386/11 897/1405/25 885/1399/25 +f 893/1389/38 904/1406/10 892/1401/10 +f 890/1395/3 901/1407/7 889/1408/7 +f 924/854/7 231/1409/84 234/316/84 +f 2/10/16 4/7/5 3/420/5 +f 4/7/5 6/4/25 5/421/25 +f 6/4/25 8/28/11 7/424/11 +f 8/28/11 10/26/37 9/425/37 +f 10/26/37 12/21/6 11/428/6 +f 12/21/6 14/23/7 13/429/7 +f 14/19/7 16/20/3 15/3/3 +f 16/20/3 18/17/23 17/409/23 +f 18/17/23 20/13/10 19/412/10 +f 20/13/10 22/11/38 21/413/38 +f 22/11/38 24/9/4 23/416/4 +f 24/9/4 2/10/16 1/417/16 +f 32/25/6 44/39/6 43/40/7 +f 29/15/23 41/45/23 40/47/10 +f 36/5/5 48/31/5 47/33/25 +f 26/12/4 38/50/4 37/29/16 +f 33/24/37 45/37/37 44/39/6 +f 30/18/3 42/42/3 41/45/23 +f 25/8/16 37/29/16 48/31/5 +f 27/14/38 39/48/38 38/50/4 +f 34/27/11 46/35/11 45/37/37 +f 31/655/7 43/43/7 42/42/3 +f 28/16/10 40/47/10 39/48/38 +f 35/6/25 47/33/25 46/35/11 +f 51/32/39 50/30/40 72/856/40 +f 49/656/41 61/859/41 72/856/40 +f 49/656/41 60/51/42 62/858/42 +f 60/51/42 59/49/43 63/860/43 +f 58/46/44 64/862/44 63/860/43 +f 58/46/44 57/44/45 65/861/45 +f 56/658/46 66/864/46 65/861/45 +f 56/658/46 55/41/28 67/863/28 +f 54/38/47 68/867/47 67/865/28 +f 54/38/47 53/36/48 69/866/48 +f 52/34/49 70/868/49 69/866/48 +f 52/34/49 51/32/39 71/857/39 +f 64/862/10 76/872/10 75/869/38 +f 71/857/25 83/873/25 82/870/11 +f 68/867/6 80/875/6 79/871/7 +f 65/861/23 77/876/23 76/872/10 +f 72/856/5 84/877/5 83/873/25 +f 62/858/4 74/878/4 73/874/16 +f 69/866/37 81/879/37 80/875/6 +f 66/864/3 78/880/3 77/876/23 +f 61/859/16 73/874/16 84/877/5 +f 63/860/38 75/869/38 74/878/4 +f 70/868/11 82/870/11 81/879/37 +f 67/863/7 79/899/7 78/880/3 +f 104/73/6 116/883/53 115/881/50 +f 101/63/23 113/104/54 112/106/10 +f 108/53/5 120/884/55 119/102/51 +f 98/60/4 110/885/56 109/882/52 +f 105/72/37 117/99/57 116/883/53 +f 102/66/3 114/886/58 113/104/54 +f 97/56/16 109/882/52 120/884/55 +f 99/62/38 111/107/59 110/885/56 +f 106/75/11 118/103/11 117/99/57 +f 103/659/7 115/892/50 114/886/58 +f 100/64/10 112/106/10 111/107/59 +f 107/54/25 119/102/51 118/103/11 +f 121/83/60 122/80/61 120/884/55 +f 122/80/61 123/77/287 119/102/51 +f 174/887/5 175/907/16 142/888/16 +f 178/890/10 124/1410/10 130/891/38 +f 117/99/57 125/662/288 126/91/63 +f 126/91/63 127/93/289 115/881/50 +f 115/892/50 127/89/289 128/90/64 +f 128/90/64 129/86/290 113/104/54 +f 170/893/6 171/109/79 166/894/37 +f 169/896/7 184/903/7 194/897/3 +f 131/84/65 132/82/291 110/885/56 +f 110/885/56 132/82/291 121/83/60 +f 84/877/66 86/55/66 87/52/24 +f 85/58/20 86/55/66 84/877/66 +f 74/878/67 96/57/67 85/58/20 +f 75/869/68 95/59/68 96/57/67 +f 94/61/69 95/59/68 75/869/68 +f 77/876/70 93/65/70 94/61/69 +f 92/68/71 93/65/70 77/876/70 +f 91/67/72 92/68/71 78/880/71 +f 80/875/73 90/69/73 91/71/72 +f 81/879/74 89/74/74 90/69/73 +f 88/76/75 89/74/74 81/879/74 +f 83/873/24 87/52/24 88/76/75 +f 140/95/6 152/132/6 151/133/7 +f 174/887/5 148/889/5 154/900/25 +f 144/78/5 156/123/5 155/125/77 +f 134/85/4 146/144/4 145/121/16 +f 141/94/13 153/130/13 152/132/6 +f 138/87/3 150/135/3 149/138/8 +f 133/81/16 145/121/16 156/123/5 +f 135/660/19 147/145/19 146/144/4 +f 177/116/62 130/891/38 136/901/4 +f 139/661/7 151/136/7 150/135/3 +f 170/893/6 190/895/6 184/903/7 +f 180/898/3 194/897/3 193/904/23 +f 173/113/76 154/900/25 160/905/11 +f 176/902/4 136/901/4 142/888/16 +f 179/119/78 193/904/23 124/908/10 +f 162/910/5 174/887/5 173/113/76 +f 157/911/7 169/896/7 180/898/3 +f 159/674/13 171/109/79 170/893/6 +f 163/914/16 175/907/16 174/887/5 +f 164/915/4 176/902/4 175/907/16 +f 168/912/3 180/898/3 179/119/78 +f 158/913/6 170/893/6 169/896/7 +f 165/117/19 177/116/62 176/902/4 +f 172/916/11 160/1411/11 166/894/37 +f 168/917/71 182/122/71 181/677/72 +f 167/919/80 183/124/80 182/122/71 +f 164/920/67 186/131/67 185/680/81 +f 164/920/67 163/1412/20 187/681/20 +f 162/922/66 188/682/66 187/134/20 +f 162/922/66 161/1413/82 189/137/82 +f 158/924/73 192/146/73 191/143/83 +f 158/924/73 157/1414/72 181/677/72 +f 204/926/11 216/936/11 215/927/37 +f 201/929/7 213/1415/7 212/930/3 +f 198/932/10 210/941/10 209/933/38 +f 205/935/25 217/943/25 216/936/11 +f 202/937/6 214/947/6 213/938/7 +f 199/940/23 211/948/23 210/941/10 +f 206/942/5 218/949/5 217/943/25 +f 196/944/4 208/950/4 207/945/16 +f 203/928/37 215/927/37 214/947/6 +f 200/931/3 212/930/3 211/948/23 +f 195/946/16 207/945/16 218/949/5 +f 197/934/38 209/933/38 208/950/4 +f 234/951/84 231/1416/84 351/952/85 +f 279/954/38 280/957/10 268/257/10 +f 286/955/11 287/958/25 275/242/25 +f 283/956/7 284/960/6 272/247/6 +f 280/957/10 281/961/23 269/255/23 +f 287/958/25 288/962/5 276/240/5 +f 277/959/16 278/963/4 266/260/4 +f 284/960/6 285/964/37 273/245/37 +f 281/961/23 282/965/3 270/253/3 +f 288/962/5 277/959/16 265/263/16 +f 278/963/4 279/954/38 267/258/38 +f 285/964/37 286/955/11 274/244/11 +f 282/965/3 283/973/7 271/251/7 +f 298/966/86 299/977/87 287/958/87 +f 287/958/87 299/977/87 300/967/88 +f 300/967/88 289/968/89 277/959/89 +f 289/968/89 290/978/90 278/963/90 +f 278/963/90 290/978/90 291/969/91 +f 279/954/91 291/969/91 292/970/92 +f 292/970/92 293/971/93 281/961/93 +f 293/971/93 294/972/94 282/965/94 +f 294/972/94 295/979/95 283/973/95 +f 295/974/95 296/975/96 284/960/96 +f 296/975/96 297/976/97 285/964/97 +f 297/976/97 298/966/86 286/955/86 +f 299/977/25 311/220/25 312/219/5 +f 289/968/16 301/222/16 302/223/4 +f 296/975/6 308/234/6 309/237/37 +f 293/971/23 305/229/23 306/231/3 +f 300/967/5 312/219/5 301/222/16 +f 290/978/4 302/223/4 303/225/38 +f 297/976/37 309/237/37 310/239/11 +f 294/972/3 306/231/3 307/232/7 +f 291/969/38 303/225/38 304/227/10 +f 298/966/11 310/239/11 311/220/25 +f 295/974/7 307/235/7 308/234/6 +f 292/970/10 304/227/10 305/229/23 +f 343/986/104 342/987/105 341/985/103 +f 225/982/100 344/981/99 341/985/103 +f 335/241/23 391/999/119 390/989/108 +f 342/987/105 343/986/104 226/165/109 +f 340/983/101 341/985/103 342/987/105 +f 328/256/11 381/1000/120 382/991/111 +f 331/708/16 387/1417/121 386/992/112 +f 334/243/10 390/989/108 389/993/113 +f 327/259/37 382/991/111 383/994/114 +f 325/262/7 384/998/118 392/995/115 +f 222/990/110 343/986/104 344/981/99 +f 330/252/5 386/992/112 385/996/116 +f 333/246/38 389/993/113 388/997/117 +f 326/261/6 383/994/114 384/998/118 +f 336/264/3 392/995/115 391/999/119 +f 329/254/25 385/996/116 381/1000/120 +f 332/248/4 388/997/117 387/1001/121 +f 339/1002/7 345/1005/122 346/1003/122 +f 345/1005/122 347/1007/2 348/1006/2 +f 347/1007/2 349/1009/22 350/1008/22 +f 349/1009/123 352/953/85 351/952/85 +f 362/269/124 361/272/124 357/709/20 +f 368/710/125 364/276/126 372/281/126 +f 366/277/127 365/274/127 361/272/124 +f 364/276/126 360/268/28 370/549/28 +f 359/271/28 363/273/126 371/288/126 +f 371/288/126 363/273/126 367/275/125 +f 375/1010/128 377/1013/126 378/1011/126 +f 377/1013/126 379/1418/125 380/1014/125 +f 407/293/1 411/292/129 412/297/129 +f 316/705/11 396/1024/139 397/1015/130 +f 323/218/23 403/1025/140 404/1016/131 +f 313/221/7 393/1020/135 394/1017/132 +f 320/236/4 400/1026/141 401/1018/133 +f 317/228/25 397/1015/130 398/1019/134 +f 324/704/3 404/1016/131 393/1020/135 +f 314/224/6 394/1017/132 395/1021/136 +f 321/238/38 401/1018/133 402/1022/137 +f 318/230/5 398/1019/134 399/1023/138 +f 315/226/37 395/1021/136 396/1024/139 +f 322/707/10 402/1022/137 403/1025/140 +f 319/233/16 399/1039/138 400/1026/141 +f 387/1027/121 399/1023/138 398/1019/134 +f 386/1028/112 398/1019/134 397/1015/130 +f 385/1029/116 397/1015/130 396/1024/139 +f 381/1030/120 396/1024/139 395/1021/136 +f 382/1031/111 395/1021/136 394/1017/132 +f 384/1033/118 383/1032/114 394/1017/132 +f 384/1033/118 393/1020/135 404/1016/131 +f 391/1035/119 392/1034/115 404/1016/131 +f 391/1035/119 403/1025/140 402/1022/137 +f 390/1036/108 402/1022/137 401/1018/133 +f 389/1037/113 401/1018/133 400/1026/141 +f 388/1038/117 400/1026/141 399/1039/138 +f 428/1041/142 427/1045/142 423/1042/2 +f 411/292/129 415/300/143 416/306/143 +f 415/300/143 419/305/144 420/713/144 +f 432/1044/145 431/1047/145 427/1045/142 +f 436/1046/146 435/314/146 431/1047/145 +f 417/307/147 434/714/147 430/312/148 +f 413/298/148 430/312/148 426/294/149 +f 409/284/149 426/294/149 422/296/2 +f 405/291/2 421/302/2 425/311/149 +f 410/712/149 425/311/149 429/315/148 +f 414/299/148 429/315/148 433/715/147 +f 346/1048/10 348/1419/10 350/1049/150 +f 349/1051/152 347/1420/11 345/1005/11 +f 444/1054/160 448/1060/161 447/1055/161 +f 445/1057/162 446/1066/162 442/1058/72 +f 448/1060/161 450/1067/163 449/1061/163 +f 456/1062/164 455/1069/164 453/1063/165 +f 451/1065/166 452/1079/166 446/1066/162 +f 454/1064/165 453/1063/165 449/1061/163 +f 456/1062/164 458/1070/167 457/1068/167 +f 458/1070/167 460/1072/168 459/1071/168 +f 460/1072/168 462/1074/7 461/1073/7 +f 462/1074/169 464/1076/2 463/1075/2 +f 464/1076/2 466/1421/170 465/1077/170 +f 467/1078/122 468/340/122 452/1079/166 +f 467/1078/122 469/1080/7 470/344/7 +f 469/1080/1 471/1082/171 472/1081/171 +f 471/1082/171 473/1084/172 474/1083/172 +f 473/1084/172 475/1422/173 476/1085/173 +f 478/1086/1 480/1089/174 479/1087/174 +f 480/1089/174 482/1091/11 481/1090/11 +f 482/1091/11 484/1093/175 483/1092/175 +f 484/1093/175 486/1095/2 485/1094/2 +f 486/1095/2 488/1097/176 487/1096/176 +f 488/1097/176 490/1099/10 489/1098/10 +f 490/1099/10 492/1101/177 491/1100/177 +f 492/1101/177 478/1423/1 477/1102/1 +f 514/1103/178 518/1130/202 515/1104/179 +f 510/1106/181 514/1103/178 511/1105/180 +f 507/1108/183 512/1117/192 513/1109/184 +f 516/1111/186 548/1155/218 552/1112/187 +f 529/1114/189 541/1148/211 539/1115/190 +f 512/1117/192 516/1131/186 517/1118/193 +f 514/1119/178 510/1106/181 532/375/194 +f 521/1121/196 549/1159/222 553/1122/197 +f 526/1124/199 530/1151/215 527/1125/198 +f 515/1127/179 547/1156/219 545/1128/201 +f 518/1130/202 526/1124/199 523/1126/200 +f 516/1131/186 524/1135/188 525/1132/191 +f 527/1125/198 530/1151/215 522/1133/203 +f 524/1135/188 528/1424/224 529/1136/189 +f 525/1116/191 539/1115/190 535/1137/204 +f 529/1136/189 528/1424/224 519/1139/205 +f 507/1141/183 544/1154/217 546/1142/207 +f 513/1144/184 533/1152/216 531/734/208 +f 531/734/208 533/1152/216 534/1120/195 +f 536/1146/209 535/1137/204 539/1115/190 +f 534/1120/195 533/1152/216 535/1137/204 +f 540/1147/210 539/1115/190 541/1148/211 +f 538/739/213 542/1149/212 541/1148/211 +f 518/1150/202 536/1146/209 540/1147/210 +f 526/1124/199 540/1147/210 542/1149/212 +f 513/1144/184 517/1138/193 535/1137/204 +f 529/1114/189 520/1140/206 537/378/214 +f 514/1119/178 534/1120/195 536/1146/209 +f 522/1153/203 530/1151/215 542/1149/212 +f 544/1154/217 543/1163/225 545/1128/201 +f 545/1128/201 547/1156/219 548/1155/218 +f 547/1156/219 551/1157/220 552/1112/187 +f 551/1157/220 553/1122/197 554/1158/221 +f 554/1158/221 553/1122/197 549/1159/222 +f 528/1161/224 524/1113/188 552/1112/187 +f 512/1143/192 546/1142/207 548/1155/218 +f 528/1161/224 554/1158/221 550/1160/223 +f 511/1129/180 545/1128/201 543/1163/225 +f 515/1127/179 523/1165/200 551/1157/220 +f 527/1123/198 553/1122/197 551/1157/220 +f 569/1166/226 577/1192/241 578/1167/227 +f 561/1169/77 560/1178/235 568/1170/229 +f 559/1171/2 558/1179/236 566/1172/230 +f 556/1174/232 563/1182/237 565/1175/233 +f 561/1169/77 569/1166/226 570/1168/228 +f 560/1178/235 559/1171/2 567/1173/231 +f 558/1179/236 557/1425/8 565/1180/233 +f 555/1181/1 564/1183/238 563/1182/237 +f 562/1177/234 570/1168/228 564/1183/238 +f 573/1185/240 571/1426/243 577/1186/241 +f 571/1426/243 572/1427/244 577/1186/241 +f 572/1427/244 578/1428/227 577/1186/241 +f 577/1186/241 576/1429/242 575/1430/245 +f 575/1430/245 574/1184/239 577/1186/241 +f 567/1173/231 575/1193/245 576/1187/242 +f 566/1172/230 565/1180/233 573/1188/240 +f 564/1183/238 572/1191/244 571/1190/243 +f 570/1168/228 578/1167/227 572/1191/244 +f 569/1166/226 568/1170/229 576/1187/242 +f 567/1173/231 566/1172/230 574/1189/239 +f 563/1182/237 571/1190/243 573/1194/240 +f 587/1195/246 591/1202/251 592/1196/247 +f 588/1198/175 594/1431/175 593/1199/249 +f 595/1200/250 596/1432/174 590/1201/174 +f 600/1203/176 604/1433/176 603/1204/252 +f 605/1206/254 606/1434/177 602/1207/177 +f 597/1209/256 603/1204/252 605/1206/254 +f 608/408/258 610/402/2 609/397/2 +f 610/402/2 612/406/259 611/748/259 +f 620/1211/6 632/1232/6 633/1212/37 +f 627/1214/38 639/1233/38 640/1215/10 +f 624/1217/5 636/1234/5 637/1218/16 +f 621/1213/37 633/1212/37 634/1220/11 +f 628/1216/10 640/1215/10 641/1222/23 +f 625/1224/16 637/1435/16 638/1225/4 +f 622/1221/11 634/1220/11 635/1227/25 +f 629/1223/23 641/1222/23 642/1229/3 +f 619/1231/7 631/1235/7 632/1232/6 +f 626/1226/4 638/1225/4 639/1233/38 +f 623/1228/25 635/1227/25 636/1234/5 +f 630/1230/3 642/1229/3 631/1235/7 +f 650/448/260 652/451/261 651/772/261 +f 643/478/2 648/1436/262 649/796/262 +f 648/1236/262 653/1437/258 654/447/258 +f 666/1237/10 678/1247/10 677/1238/38 +f 673/1240/25 685/1249/25 684/1241/11 +f 670/1243/6 682/1254/6 681/1244/7 +f 667/1246/23 679/1256/23 678/1247/10 +f 674/1248/5 686/1257/5 685/1249/25 +f 664/1250/4 676/1258/4 675/1251/16 +f 671/1253/37 683/1259/37 682/1254/6 +f 668/1255/3 680/1261/3 679/1256/23 +f 663/1252/16 675/1251/16 686/1257/5 +f 665/1239/38 677/1238/38 676/1258/4 +f 672/1242/11 684/1241/11 683/1259/37 +f 669/1260/7 681/1269/7 680/1261/3 +f 683/1259/263 695/1268/263 694/1262/264 +f 680/1261/265 692/1270/265 691/1263/266 +f 675/1251/267 687/1274/267 698/1264/268 +f 676/1258/269 677/1238/270 689/1265/270 +f 683/1259/263 684/1241/271 696/1267/271 +f 681/1269/18 693/1281/18 692/1270/265 +f 678/1247/272 690/1273/272 689/1265/270 +f 684/1241/271 685/1249/273 697/1271/273 +f 681/1244/18 682/1254/264 694/1262/264 +f 679/1256/266 691/1263/266 690/1273/272 +f 686/1257/268 698/1264/268 697/1271/273 +f 675/1251/267 676/1258/269 688/1266/269 +f 688/1266/4 700/1279/278 699/1275/274 +f 695/1268/37 707/1280/279 706/1276/275 +f 692/1270/3 704/1282/280 703/1277/276 +f 687/1274/16 699/1275/274 710/1278/277 +f 689/1265/38 701/1283/281 700/1279/278 +f 696/1267/11 708/1284/282 707/1280/279 +f 693/1281/7 705/1291/283 704/1282/280 +f 690/1273/10 702/1286/284 701/1283/281 +f 697/1271/25 709/1287/285 708/1284/282 +f 694/1262/6 706/1276/275 705/1285/283 +f 691/1263/23 703/1277/276 702/1286/284 +f 698/1264/5 710/1278/277 709/1287/285 +f 717/1301/10 729/1311/10 728/1302/38 +f 724/1304/25 736/1313/25 735/1305/11 +f 721/1307/6 733/1318/6 732/1308/7 +f 718/1310/23 730/1320/23 729/1311/10 +f 725/1312/5 737/1321/5 736/1313/25 +f 715/1314/4 727/1322/4 726/1315/16 +f 722/1317/37 734/1323/37 733/1318/6 +f 719/1319/3 731/1325/3 730/1320/23 +f 714/1316/16 726/1315/16 737/1321/5 +f 716/1303/38 728/1302/38 727/1322/4 +f 723/1306/11 735/1305/11 734/1323/37 +f 720/1324/7 732/1333/7 731/1325/3 +f 733/1318/264 734/1323/263 746/1326/263 +f 730/1320/266 731/1325/265 743/1328/265 +f 726/1315/267 738/1338/267 749/1330/268 +f 727/1322/269 728/1302/270 740/1331/270 +f 735/1305/271 747/1335/271 746/1326/263 +f 732/1333/18 744/1345/18 743/1328/265 +f 729/1311/272 741/1337/272 740/1331/270 +f 735/1305/271 736/1313/273 748/1334/273 +f 732/1308/18 733/1318/264 745/1327/264 +f 729/1311/272 730/1320/266 742/1329/266 +f 737/1321/268 749/1330/268 748/1334/273 +f 726/1315/267 727/1322/269 739/1332/269 +f 739/1332/4 751/1343/278 750/1339/274 +f 746/1326/37 758/1344/279 757/1340/275 +f 743/1328/3 755/1346/280 754/1341/276 +f 738/1338/16 750/1339/274 761/1342/277 +f 740/1331/38 752/1347/281 751/1343/278 +f 747/1335/11 759/1348/282 758/1344/279 +f 744/1345/7 756/1355/283 755/1346/280 +f 741/1337/10 753/1350/284 752/1347/281 +f 748/1334/25 760/1351/285 759/1348/282 +f 745/1327/6 757/1340/275 756/1349/283 +f 742/1329/23 754/1341/276 753/1350/284 +f 749/1330/5 761/1342/277 760/1351/285 +f 782/489/1 771/1438/1 646/441/1 +f 647/471/260 781/487/1 782/489/1 +f 781/487/1 647/471/260 645/436/1 +f 376/1012/128 834/550/286 833/1366/286 +f 838/1367/1 840/1370/173 839/1368/173 +f 840/1370/173 842/1439/7 841/1371/7 +f 842/1372/7 844/1375/27 843/1373/27 +f 844/1375/27 846/1377/2 845/1376/2 +f 846/1377/2 848/1379/22 847/1378/22 +f 848/1379/22 850/1381/16 849/1380/16 +f 850/1381/16 852/1383/286 851/1382/286 +f 852/1383/286 838/1367/1 837/1369/1 +f 887/1384/37 899/1397/37 898/1385/11 +f 894/1387/4 906/1398/4 905/1388/38 +f 884/1390/5 896/1400/5 895/1391/16 +f 891/1393/23 903/1402/23 902/1394/3 +f 888/1396/6 900/1404/6 899/1397/37 +f 883/1392/16 895/1391/16 906/1398/4 +f 885/1399/25 897/1405/25 896/1400/5 +f 892/1401/10 904/1406/10 903/1402/23 +f 889/1403/7 901/1440/7 900/1404/6 +f 886/1386/11 898/1385/11 897/1405/25 +f 893/1389/38 905/1388/38 904/1406/10 +f 890/1395/3 902/1394/3 901/1407/7 +f 924/854/7 923/1441/7 231/1409/84 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 3c3ad4a6b..02bb67a4c 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -64,6 +64,7 @@ "block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]}, "block.hephaestusRunning": {"category": "block", "sounds": [{"name": "block/hephaestusRunning", "stream": false}]}, "block.squeakyToy": {"category": "block", "sounds": [{"name": "block/squeakyToy", "stream": false}]}, + "block.pyroOperate": {"category": "block", "sounds": [{"name": "block/pyroOperate", "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/pyroOperate.ogg b/src/main/resources/assets/hbm/sounds/block/pyroOperate.ogg new file mode 100644 index 000000000..a86ebd29c Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/block/pyroOperate.ogg differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png new file mode 100644 index 000000000..053622581 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png new file mode 100644 index 000000000..1a12e728c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png new file mode 100644 index 000000000..dc7698f50 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png new file mode 100644 index 000000000..e3e062e62 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_5.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_5.png new file mode 100644 index 000000000..c4fb07664 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_5.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png new file mode 100644 index 000000000..962e430aa Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png new file mode 100644 index 000000000..6c8ad885a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png new file mode 100644 index 000000000..306526480 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_side.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_side.png new file mode 100644 index 000000000..0fb602b48 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_top.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_top.png new file mode 100644 index 000000000..2d8cda107 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_grate_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_side.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_side.png new file mode 100644 index 000000000..3a9c53fc4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png new file mode 100644 index 000000000..79c69a803 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/steel_corner.png b/src/main/resources/assets/hbm/textures/blocks/steel_corner.png deleted file mode 100644 index 26effad96..000000000 Binary files a/src/main/resources/assets/hbm/textures/blocks/steel_corner.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/blocks/steel_wall.png b/src/main/resources/assets/hbm/textures/blocks/steel_wall.png index 76e4f32fd..8e457d39d 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/steel_wall.png and b/src/main/resources/assets/hbm/textures/blocks/steel_wall.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/steel_wall_alt.png b/src/main/resources/assets/hbm/textures/blocks/steel_wall_alt.png new file mode 100644 index 000000000..cb024e81d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/steel_wall_alt.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png new file mode 100644 index 000000000..bcefb15fb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png differ diff --git a/src/main/resources/assets/hbm/textures/items/armor_battery.png b/src/main/resources/assets/hbm/textures/items/armor_battery.png index 86a0cb9a1..7ed6e9b1d 100644 Binary files a/src/main/resources/assets/hbm/textures/items/armor_battery.png and b/src/main/resources/assets/hbm/textures/items/armor_battery.png differ diff --git a/src/main/resources/assets/hbm/textures/items/armor_battery_mk2.png b/src/main/resources/assets/hbm/textures/items/armor_battery_mk2.png index 699a5b4e2..098dfc64d 100644 Binary files a/src/main/resources/assets/hbm/textures/items/armor_battery_mk2.png and b/src/main/resources/assets/hbm/textures/items/armor_battery_mk2.png differ diff --git a/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png b/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png index 96cc82109..91c23c265 100644 Binary files a/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png and b/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png differ diff --git a/src/main/resources/assets/hbm/textures/items/color_pallete.png b/src/main/resources/assets/hbm/textures/items/color_pallete.png deleted file mode 100644 index b2eb5e22f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/color_pallete.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png new file mode 100644 index 000000000..e8d8198f2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png new file mode 100644 index 000000000..d71b134fd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png new file mode 100644 index 000000000..38180b907 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png new file mode 100644 index 000000000..06f516760 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png differ diff --git a/src/main/resources/assets/hbm/textures/items/rotor_steel.png b/src/main/resources/assets/hbm/textures/items/rotor_steel.png deleted file mode 100644 index 17350ef8d..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/rotor_steel.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/settings_tool.png b/src/main/resources/assets/hbm/textures/items/settings_tool.png new file mode 100644 index 000000000..331bb4e62 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/settings_tool.png differ diff --git a/src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png b/src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png deleted file mode 100644 index fc6600e86..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/upgrade_mod_u.png b/src/main/resources/assets/hbm/textures/items/upgrade_mod_u.png deleted file mode 100644 index 6e6831ccb..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/upgrade_mod_u.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png b/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png index a12e214d7..d969c507e 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png and b/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/pyrooven.png b/src/main/resources/assets/hbm/textures/models/machines/pyrooven.png new file mode 100644 index 000000000..8dd9c81c2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/pyrooven.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png b/src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png deleted file mode 100644 index 47a38039d..000000000 Binary files a/src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/stg77.png b/src/main/resources/assets/hbm/textures/models/weapons/stg77.png new file mode 100644 index 000000000..18c977393 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/stg77.png differ