diff --git a/changelog b/changelog index f406cefee..c44e3345d 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,8 @@ -## Added -* Muffler - * An upgrade-like item that replaces the old muffler block - * Creates 16 when crafted, however it is not returned when the muffled machine is broken - * Should work with pretty much all machines that use looped sounds, as well as a few other noisy ones (compressors, diesel generators, presses) - * Simply right-click to install, doesn't need to be inserted into an upgrade slot, in fact it works on a few machines that have no GUI at all +## Changed +* Sped up the electrolyzer, fluid electrolysis now takes 3 seconds instead of 5 and crystal processing now only takes 20 seconds instead of 50 +* Increased electrolyzer pouring speed to 3 nuggets per tick instead of 1 +* Deco blocks now only drop ingots 25% of the time + * The incredibly common structures now only yield a few dozen free ingots instead of several stacks. How horrible! ## Fixed -* Fixed basalt ores dropping their items with invalid metadata -* Fixed creative infinite fluid tanks not being able to fill fluid gauges at >0PU +* Fixed radar screens not working at all and potentially freezing the game diff --git a/gradle.properties b/gradle.properties index dfdd7bdff..2bc727da5 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=4851 +mod_build_number=4859 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ @@ -16,4 +16,5 @@ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion al \ (OpenComputers integration), martemen (project settings), Pvndols (thorium fuel recipe, gas turbine),\ \ JamesH2 (blood mechanics, nitric acid, particle emitter), sdddddf80 (recipe configs, chinese localization,\ \ custom machine holograms, I18n improvements), SuperCraftAlex (tooltips) LePeep (coilgun model, BDCL QC),\ - \ 70k (textures, glyphid AI, strand caster), Maksymisio (polish localization) Ice-Arrow (research reactor tweaks) + \ 70k (textures, glyphid AI, strand caster), Maksymisio (polish localization) Ice-Arrow (research reactor tweaks),\ + \ 245tt (anvil GUI improvements), MellowArpeggiation (turbine sounds, sound fixes) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 47a1bbff1..05ae45215 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -143,7 +143,6 @@ public class ModBlocks { public static Block stalagmite; public static Block stalactite; public static Block stone_biome; - public static Block stone_deep_cobble; public static Block depth_brick; public static Block depth_tiles; @@ -153,10 +152,6 @@ public class ModBlocks { public static Block basalt; public static Block ore_basalt; - @Deprecated public static Block basalt_sulfur; - @Deprecated public static Block basalt_fluorite; - @Deprecated public static Block basalt_asbestos; - @Deprecated public static Block basalt_gem; public static Block basalt_smooth; public static Block basalt_brick; public static Block basalt_polished; @@ -714,10 +709,11 @@ public class ModBlocks { public static Block machine_puf6_tank; public static Block machine_reactor_breeding; - + + public static Block machine_furnace_brick_off; + public static Block machine_furnace_brick_on; public static Block machine_nuke_furnace_off; public static Block machine_nuke_furnace_on; - public static Block machine_rtg_furnace_off; public static Block machine_rtg_furnace_on; @@ -1376,14 +1372,9 @@ public class ModBlocks { stalagmite = new BlockStalagmite().setBlockName("stalagmite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); stalactite = new BlockStalagmite().setBlockName("stalactite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); stone_biome = new BlockBiomeStone().setBlockName("stone_biome").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); - stone_deep_cobble = new BlockDeepCobble().setBlockName("stone_deep_cobble").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F); basalt = new BlockGeneric(Material.rock).setBlockName("basalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt"); ore_basalt = new BlockOreBasalt().setBlockName("ore_basalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_basalt"); - basalt_sulfur = new BlockRemap(ore_basalt, 0).setBlockName("basalt_sulfur"); - basalt_fluorite = new BlockRemap(ore_basalt, 1).setBlockName("basalt_fluorite"); - basalt_asbestos = new BlockRemap(ore_basalt, 2).setBlockName("basalt_asbestos"); - basalt_gem = new BlockRemap(ore_basalt, 3).setBlockName("basalt_gem"); basalt_smooth = new BlockGeneric(Material.rock).setBlockName("basalt_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_smooth"); basalt_brick = new BlockGeneric(Material.rock).setBlockName("basalt_brick").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_brick"); basalt_polished = new BlockGeneric(Material.rock).setBlockName("basalt_polished").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_polished"); @@ -1866,10 +1857,11 @@ public class ModBlocks { machine_puf6_tank = new MachinePuF6Tank(Material.iron).setBlockName("machine_puf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_reactor_breeding = new MachineReactorBreeding(Material.iron).setBlockName("machine_reactor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_reactor"); - + + machine_furnace_brick_off = new MachineBrickFurnace(false).setBlockName("machine_furnace_brick_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + machine_furnace_brick_on = new MachineBrickFurnace(true).setBlockName("machine_furnace_brick_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); machine_nuke_furnace_off = new MachineNukeFurnace(false).setBlockName("machine_nuke_furnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_nuke_furnace_on = new MachineNukeFurnace(true).setBlockName("machine_nuke_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); - machine_rtg_furnace_off = new MachineRtgFurnace(false).setBlockName("machine_rtg_furnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_rtg_furnace_on = new MachineRtgFurnace(true).setBlockName("machine_rtg_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); @@ -2551,10 +2543,6 @@ public class ModBlocks { //Basalt ores register(ore_basalt); - GameRegistry.registerBlock(basalt_sulfur, basalt_sulfur.getUnlocalizedName()); - GameRegistry.registerBlock(basalt_fluorite, basalt_fluorite.getUnlocalizedName()); - GameRegistry.registerBlock(basalt_asbestos, basalt_asbestos.getUnlocalizedName()); - GameRegistry.registerBlock(basalt_gem, ItemBlockBase.class, basalt_gem.getUnlocalizedName()); //End Ores GameRegistry.registerBlock(ore_tikite, ore_tikite.getUnlocalizedName()); @@ -3138,6 +3126,8 @@ public class ModBlocks { register(foundry_outlet); register(foundry_slagtap); register(slag); + register(machine_furnace_brick_off); + register(machine_furnace_brick_on); register(machine_difurnace_off); register(machine_difurnace_on); register(machine_difurnace_extension); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCluster.java b/src/main/java/com/hbm/blocks/generic/BlockCluster.java index da64a6849..03ed4027e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCluster.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCluster.java @@ -62,7 +62,6 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr if(this == ModBlocks.cluster_titanium) return ModItems.crystal_titanium; if(this == ModBlocks.cluster_aluminium) return ModItems.crystal_aluminium; if(this == ModBlocks.cluster_copper) return ModItems.crystal_copper; - if(this == ModBlocks.basalt_gem) return ModItems.gem_volcanic; return null; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java b/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java index c6197d163..d16524637 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java @@ -1,5 +1,9 @@ package com.hbm.blocks.generic; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; import com.hbm.render.block.ct.CT; import com.hbm.render.block.ct.CTStitchReceiver; import com.hbm.render.block.ct.IBlockCT; @@ -8,6 +12,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -35,4 +40,16 @@ public class BlockDecoCT extends BlockOre implements IBlockCT{ public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { return rec.fragCache; } + + @Override + public Item getItemDropped(int i, Random rand, int j) { + if(rand.nextInt(4) != 0) return null; + if(this == ModBlocks.deco_aluminium) return ModItems.ingot_aluminium; + if(this == ModBlocks.deco_beryllium) return ModItems.ingot_beryllium; + if(this == ModBlocks.deco_lead) return ModItems.ingot_lead; + if(this == ModBlocks.deco_red_copper) return ModItems.ingot_red_copper; + if(this == ModBlocks.deco_steel) return ModItems.ingot_steel; + if(this == ModBlocks.deco_tungsten) return ModItems.ingot_tungsten; + return null; + } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockDeepCobble.java b/src/main/java/com/hbm/blocks/generic/BlockDeepCobble.java deleted file mode 100644 index 34c894bbb..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockDeepCobble.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hbm.blocks.generic; - -import java.util.Random; - -import com.hbm.blocks.BlockEnumMulti; - -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.world.World; - -public class BlockDeepCobble extends BlockEnumMulti { - - public static enum EnumDeepCobbleTypes { - NORMAL, - BURNING, - STEAMING - } - - public BlockDeepCobble() { - super(Material.rock, EnumDeepCobbleTypes.class, true, true); - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, int x, int y, int z, Random rand) { - super.randomDisplayTick(world, x, y, z, rand); - - int meta = world.getBlockMetadata(x, y, z); - Block b = world.getBlock(x, y + 1, z); - - if(!b.isNormalCube()) { - if(meta == EnumDeepCobbleTypes.BURNING.ordinal()) { - world.spawnParticle("flame", x + rand.nextDouble(), y + 1.0625, z + rand.nextDouble(), 0.0, 0.0, 0.0); - } - - if(meta == EnumDeepCobbleTypes.STEAMING.ordinal()) { - world.spawnParticle("cloud", x + 0.25 + rand.nextDouble() * 0.5, y + 1.0625, z + 0.25 + rand.nextDouble() * 0.5, 0.0, 0.05, 0.0); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java index fbe36d426..0e496af45 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IBomb; import com.hbm.items.special.ItemDoorSkin; -import com.hbm.items.tool.ItemLock; import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import com.hbm.util.fauxpointtwelve.BlockPos; diff --git a/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java b/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java index 7c195a114..b1306c8cd 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java +++ b/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java @@ -51,19 +51,23 @@ public class BlockKeyhole extends BlockStone { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key_red && side != 0 && side != 1) { - if(world.isRemote) return true; - ForgeDirection dir = ForgeDirection.getOrientation(side); - generateRoom(world, x - dir.offsetX * 4, y - 2, z - dir.offsetZ * 4); - int b = 0; - if(side == 2) b = 1; - if(side == 5) b = 2; - if(side == 3) b = 3; - if(side == 4) b = 0; - ItemModDoor.placeDoorBlock(world, x, y - 1, z, b, ModBlocks.door_red); - world.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); - player.triggerAchievement(MainRegistry.achRedRoom); - return true; + if(player.getHeldItem() != null) { + boolean cracked = player.getHeldItem().getItem() == ModItems.key_red_cracked; + if((player.getHeldItem().getItem() == ModItems.key_red || cracked) && side != 0 && side != 1) { + if(cracked) player.getHeldItem().stackSize--; + if(world.isRemote) return true; + ForgeDirection dir = ForgeDirection.getOrientation(side); + generateRoom(world, x - dir.offsetX * 4, y - 2, z - dir.offsetZ * 4); + int b = 0; + if(side == 2) b = 1; + if(side == 5) b = 2; + if(side == 3) b = 3; + if(side == 4) b = 0; + ItemModDoor.placeDoorBlock(world, x, y - 1, z, b, ModBlocks.door_red); + world.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + player.triggerAchievement(MainRegistry.achRedRoom); + return true; + } } return false; diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 269f6b037..be87197a0 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -5,6 +5,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.interfaces.Spaghetti; +import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.potion.HbmPotion; import cpw.mods.fml.relauncher.Side; @@ -43,13 +44,13 @@ public class BlockOre extends Block { @Spaghetti("*throws up*") @Override public Item getItemDropped(int i, Random rand, int j) { - if(this == ModBlocks.ore_fluorite || this == ModBlocks.basalt_fluorite) { + if(this == ModBlocks.ore_fluorite) { return ModItems.fluorite; } if(this == ModBlocks.ore_niter) { return ModItems.niter; } - if(this == ModBlocks.ore_sulfur || this == ModBlocks.ore_nether_sulfur || this == ModBlocks.ore_meteor_sulfur || this == ModBlocks.basalt_sulfur) { + if(this == ModBlocks.ore_sulfur || this == ModBlocks.ore_nether_sulfur || this == ModBlocks.ore_meteor_sulfur) { return ModItems.sulfur; } if(this == ModBlocks.waste_trinitite || this == ModBlocks.waste_trinitite_red) { @@ -151,46 +152,15 @@ public class BlockOre extends Block { } } if(this == ModBlocks.ore_rare || this == ModBlocks.ore_gneiss_rare) { - switch(rand.nextInt(6)) { - case 0: - return ModItems.fragment_boron; - case 1: - return ModItems.fragment_cerium; - case 2: - return ModItems.fragment_cobalt; - case 3: - return ModItems.fragment_lanthanium; - case 4: - return ModItems.fragment_neodymium; - case 5: - return ModItems.fragment_niobium; - } - } - if(this == ModBlocks.deco_aluminium) { - return ModItems.ingot_aluminium; - } - if(this == ModBlocks.deco_beryllium) { - return ModItems.ingot_beryllium; - } - if(this == ModBlocks.deco_lead) { - return ModItems.ingot_lead; - } - if(this == ModBlocks.deco_red_copper) { - return ModItems.ingot_red_copper; - } - if(this == ModBlocks.deco_steel) { - return ModItems.ingot_steel; + return ModItems.chunk_ore; } if(this == ModBlocks.deco_titanium) { - return ModItems.ingot_titanium; - } - if(this == ModBlocks.deco_tungsten) { - return ModItems.ingot_tungsten; + return rand.nextInt(4) == 0 ? ModItems.ingot_titanium : null; } if(this == ModBlocks.deco_asbestos) { - return ModItems.ingot_asbestos; + return rand.nextInt(4) == 0 ? ModItems.ingot_asbestos : null; } - if(this == ModBlocks.ore_asbestos || this == ModBlocks.ore_gneiss_asbestos || this == ModBlocks.basalt_asbestos) { + if(this == ModBlocks.ore_asbestos || this == ModBlocks.ore_gneiss_asbestos) { return ModItems.ingot_asbestos; } if(this == ModBlocks.ore_lignite) { @@ -214,18 +184,15 @@ public class BlockOre extends Block { @Override public int quantityDropped(Random rand) { - if(this == ModBlocks.ore_fluorite || this == ModBlocks.basalt_fluorite) { + if(this == ModBlocks.ore_fluorite) { return 2 + rand.nextInt(3); } if(this == ModBlocks.ore_niter) { return 2 + rand.nextInt(3); } - if(this == ModBlocks.ore_sulfur || this == ModBlocks.ore_nether_sulfur || this == ModBlocks.ore_meteor_sulfur || this == ModBlocks.basalt_sulfur) { + if(this == ModBlocks.ore_sulfur || this == ModBlocks.ore_nether_sulfur || this == ModBlocks.ore_meteor_sulfur) { return 2 + rand.nextInt(3); } - if(this == ModBlocks.ore_rare || this == ModBlocks.ore_gneiss_rare) { - return 4 + rand.nextInt(8); - } if(this == ModBlocks.block_meteor_broken) { return 1 + rand.nextInt(3); } @@ -266,7 +233,8 @@ public class BlockOre extends Block { } @Override - public int damageDropped(int p_149692_1_) { + public int damageDropped(int meta) { + if(this == ModBlocks.ore_rare || this == ModBlocks.ore_gneiss_rare) return EnumChunkType.RARE.ordinal(); return this == ModBlocks.waste_planks ? 1 : 0; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java index 650819005..ae6107817 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java @@ -57,8 +57,7 @@ public class BlockOutgas extends BlockOre { if(this == ModBlocks.ore_asbestos || this == ModBlocks.ore_gneiss_asbestos || this == ModBlocks.block_asbestos || this == ModBlocks.deco_asbestos || this == ModBlocks.brick_asbestos || this == ModBlocks.tile_lab || - this == ModBlocks.tile_lab_cracked || this == ModBlocks.tile_lab_broken || - this == ModBlocks.basalt_asbestos) { + this == ModBlocks.tile_lab_cracked || this == ModBlocks.tile_lab_broken) { return ModBlocks.gas_asbestos; } diff --git a/src/main/java/com/hbm/blocks/machine/MachineBrickFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineBrickFurnace.java new file mode 100644 index 000000000..48054e36e --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineBrickFurnace.java @@ -0,0 +1,172 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityFurnaceBrick; +import com.hbm.util.ItemStackUtil; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class MachineBrickFurnace extends BlockContainer { + + private final Random rand = new Random(); + private final boolean isActive; + private static boolean keepInventory; + + @SideOnly(Side.CLIENT) private IIcon iconTop; + @SideOnly(Side.CLIENT) private IIcon iconBottom; + @SideOnly(Side.CLIENT) private IIcon iconFront; + + public MachineBrickFurnace(boolean blockState) { + super(Material.iron); + isActive = blockState; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_furnace_brick_top"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":machine_furnace_brick_bottom"); + this.iconFront = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":machine_furnace_brick_front_on" : ":machine_furnace_brick_front_off")); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_furnace_brick_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : (side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon))); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityFurnaceBrick(); + } + + @Override + @SideOnly(Side.CLIENT) + public Item getItem(World world, int x, int y, int z) { + return Item.getItemFromBlock(ModBlocks.machine_furnace_brick_off); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + this.setDefaultDirection(world, x, y, z); + } + + private void setDefaultDirection(World world, int x, int y, int z) { + if(!world.isRemote) { + Block nZ = world.getBlock(x, y, z - 1); + Block pZ = world.getBlock(x, y, z + 1); + Block nX = world.getBlock(x - 1, y, z); + Block pX = world.getBlock(x + 1, y, z); + + byte meta = 3; + + if(nZ.func_149730_j() && !pZ.func_149730_j()) meta = 3; + if(pZ.func_149730_j() && !nZ.func_149730_j()) meta = 2; + if(nX.func_149730_j() && !pX.func_149730_j()) meta = 5; + if(pX.func_149730_j() && !nX.func_149730_j()) meta = 4; + + world.setBlockMetadataWithNotify(x, y, z, meta, 2); + } + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + + if(itemStack.hasDisplayName()) ((TileEntityFurnaceBrick)world.getTileEntity(x, y, z)).setCustomName(itemStack.getDisplayName()); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) { + return true; + } else if(!player.isSneaking()) { + TileEntityFurnaceBrick entity = (TileEntityFurnaceBrick) world.getTileEntity(x, y, z); + if(entity != null) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + } + return true; + } else { + return false; + } + } + + public static void updateBlockState(boolean isProcessing, World world, int x, int y, int z) { + int i = world.getBlockMetadata(x, y, z); + TileEntity entity = world.getTileEntity(x, y, z); + keepInventory = true; + + if(isProcessing) { + world.setBlock(x, y, z, ModBlocks.machine_furnace_brick_on); + } else { + world.setBlock(x, y, z, ModBlocks.machine_furnace_brick_off); + } + + keepInventory = false; + world.setBlockMetadataWithNotify(x, y, z, i, 2); + + if(entity != null) { + entity.validate(); + world.setTileEntity(x, y, z, entity); + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + if(!keepInventory) ItemStackUtil.spillItems(world, x, y, z, block, rand); + super.breakBlock(world, x, y, z, block, meta); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World world, int x, int y, int z, Random rand) { + if(isActive) { + int meta = world.getBlockMetadata(x, y, z); + float cX = x + 0.5F; + float cY = y + rand.nextFloat() * 0.375F; + float cZ = z + 0.5F; + float off = 0.52F; + float var = rand.nextFloat() * 0.6F - 0.3F; + rand.nextFloat(); + rand.nextFloat(); + + if(meta == 4) { + world.spawnParticle("smoke", cX - off, cY, cZ + var, 0.0D, 0.0D, 0.0D); + world.spawnParticle("flame", cX - off, cY, cZ + var, 0.0D, 0.0D, 0.0D); + } else if(meta == 5) { + world.spawnParticle("smoke", cX + off, cY, cZ + var, 0.0D, 0.0D, 0.0D); + world.spawnParticle("flame", cX + off, cY, cZ + var, 0.0D, 0.0D, 0.0D); + } else if(meta == 2) { + world.spawnParticle("smoke", cX + var, cY, cZ - off, 0.0D, 0.0D, 0.0D); + world.spawnParticle("flame", cX + var, cY, cZ - off, 0.0D, 0.0D, 0.0D); + } else if(meta == 3) { + world.spawnParticle("smoke", cX + var, cY, cZ + off, 0.0D, 0.0D, 0.0D); + world.spawnParticle("flame", cX + var, cY, cZ + off, 0.0D, 0.0D, 0.0D); + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/network/CraneInserter.java b/src/main/java/com/hbm/blocks/network/CraneInserter.java index 97347dc3c..22dcdcad8 100644 --- a/src/main/java/com/hbm/blocks/network/CraneInserter.java +++ b/src/main/java/com/hbm/blocks/network/CraneInserter.java @@ -6,6 +6,8 @@ import api.hbm.conveyor.IEnterableBlock; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityCraneBase; import com.hbm.tileentity.network.TileEntityCraneInserter; +import com.hbm.util.InventoryUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -17,7 +19,6 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -72,7 +73,7 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; - access = masquerade(sided, outputDirection.getOpposite().ordinal()); + access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal()); } if(te instanceof IInventory) { @@ -90,15 +91,6 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { } } - public static int[] masquerade(ISidedInventory sided, int side) { - - if(sided instanceof TileEntityFurnace) { - return new int[] {1, 0}; - } - - return sided.getAccessibleSlotsFromSide(side); - } - public static ItemStack addToInventory(IInventory inv, int[] access, ItemStack toAdd, int side) { ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null; diff --git a/src/main/java/com/hbm/blocks/rail/BlockRailWaypointSystem.java b/src/main/java/com/hbm/blocks/rail/BlockRailWaypointSystem.java index 9cf026cd1..2a5f8b9ff 100644 --- a/src/main/java/com/hbm/blocks/rail/BlockRailWaypointSystem.java +++ b/src/main/java/com/hbm/blocks/rail/BlockRailWaypointSystem.java @@ -5,18 +5,13 @@ import java.util.List; import com.hbm.blocks.BlockDummyable; import com.hbm.entity.train.EntityRailCarBase; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; import com.hbm.util.BobMathUtil; -import com.hbm.util.ChatBuilder; import com.hbm.util.ParticleUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.BlockPos; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.material.Material; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 5d1edf7e4..df95ca834 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -69,6 +69,7 @@ public class ToolRecipes { CraftingManager.addShapelessAuto(new ItemStack(ModItems.centri_stick, 1), new Object[] { ModItems.centrifuge_element, ModItems.energy_core, KEY_STICK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.smashing_hammer, 1), new Object[] { "STS", "SPS", " P ", 'S', STEEL.block(), 'T', W.block(), 'P', ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.meteorite_sword, 1), new Object[] { " B", "GB ", "SG ", 'B', ModItems.blade_meteorite, 'G', GOLD.plate(), 'S', KEY_STICK }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.dwarven_pickaxe, 1), new Object[] { "CIC", " S ", " S ", 'C', CU.ingot(), 'I', IRON.ingot(), 'S', KEY_STICK }); //Drax CraftingManager.addRecipeAuto(new ItemStack(ModItems.drax, 1), new Object[] { "BDS", "CDC", "FMF", 'B', ModItems.starmetal_pickaxe, 'S', ModItems.starmetal_shovel, 'C', CO.ingot(), 'F', ModItems.fusion_core, 'D', DESH.ingot(), 'M', ModItems.motor_desh }); diff --git a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java index 458419d3d..5ba2952f4 100644 --- a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java +++ b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java @@ -64,7 +64,7 @@ public class EntityFalloutRain extends Entity { for(int z = chunkPosZ << 4; z <= (chunkPosZ << 4) + 16; z++) { double percent = Math.hypot(x - posX, z - posZ) * 100 / getScale(); stomp(x, z, percent); - BiomeGenBase biome = getBiomeChange(percent, getScale()); + BiomeGenBase biome = getBiomeChange(percent, getScale(), worldObj.getBiomeGenForCoords(x, z)); if(biome != null) { WorldUtil.setBiome(worldObj, x, z, biome); biomeModified = true; @@ -84,7 +84,7 @@ public class EntityFalloutRain extends Entity { if(distance <= getScale()) { double percent = distance * 100 / getScale(); stomp(x, z, percent); - BiomeGenBase biome = getBiomeChange(percent, getScale()); + BiomeGenBase biome = getBiomeChange(percent, getScale(), worldObj.getBiomeGenForCoords(x, z)); if(biome != null) { WorldUtil.setBiome(worldObj, x, z, biome); biomeModified = true; @@ -114,11 +114,14 @@ public class EntityFalloutRain extends Entity { } } - public static BiomeGenBase getBiomeChange(double dist, int scale) { + public static BiomeGenBase getBiomeChange(double dist, int scale, BiomeGenBase original) { if(!WorldConfig.enableCraterBiomes) return null; - if(scale >= 150 && dist < 15) return BiomeGenCraterBase.craterInnerBiome; - if(scale >= 100 && dist < 55) return BiomeGenCraterBase.craterBiome; - if(scale >= 25) return BiomeGenCraterBase.craterOuterBiome; + if(scale >= 150 && dist < 15) + return BiomeGenCraterBase.craterInnerBiome; + if(scale >= 100 && dist < 55 && original != BiomeGenCraterBase.craterInnerBiome) + return BiomeGenCraterBase.craterBiome; + if(scale >= 25 && original != BiomeGenCraterBase.craterInnerBiome && original != BiomeGenCraterBase.craterBiome) + return BiomeGenCraterBase.craterOuterBiome; return null; } diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java index 628416174..1cb44d301 100644 --- a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java +++ b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java @@ -552,6 +552,7 @@ public class EntityNukeTorex extends Entity { public static void statFac(World world, double x, double y, double z, float scale) { EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)); torex.setPosition(x, y, z); + torex.forceSpawn = true; world.spawnEntityInWorld(torex); TrackerUtil.setTrackingRange(world, torex, 1000); } @@ -559,6 +560,7 @@ public class EntityNukeTorex extends Entity { public static void statFacBale(World world, double x, double y, double z, float scale) { EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)).setType(1); torex.setPosition(x, y, z); + torex.forceSpawn = true; world.spawnEntityInWorld(torex); TrackerUtil.setTrackingRange(world, torex, 1000); } diff --git a/src/main/java/com/hbm/entity/projectile/EntityRubble.java b/src/main/java/com/hbm/entity/projectile/EntityRubble.java index 05459bcfd..b19f7263b 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityRubble.java +++ b/src/main/java/com/hbm/entity/projectile/EntityRubble.java @@ -6,8 +6,6 @@ import com.hbm.packet.ParticleBurstPacket; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 930675550..81875b605 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -392,15 +392,15 @@ public class OreDictManager { EUPH .nugget(nugget_euphemium) .ingot(ingot_euphemium) .dust(powder_euphemium) .block(block_euphemium); DNT .nugget(nugget_dineutronium) .ingot(ingot_dineutronium) .dust(powder_dineutronium) .block(block_dineutronium); FIBER .ingot(ingot_fiberglass) .block(block_fiberglass); - ASBESTOS .asbestos(1F) .ingot(ingot_asbestos) .dust(powder_asbestos) .block(block_asbestos) .ore(ore_asbestos, ore_gneiss_asbestos, basalt_asbestos, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.ASBESTOS), DictFrame.fromOne(stone_resource, EnumStoneType.ASBESTOS)); + ASBESTOS .asbestos(1F) .ingot(ingot_asbestos) .dust(powder_asbestos) .block(block_asbestos) .ore(ore_asbestos, ore_gneiss_asbestos, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.ASBESTOS), DictFrame.fromOne(stone_resource, EnumStoneType.ASBESTOS)); OSMIRIDIUM .nugget(nugget_osmiridium) .ingot(ingot_osmiridium); /* * DUST AND GEM ORES */ - S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.SULFUR), ore_meteor_sulfur, DictFrame.fromOne(stone_resource, EnumStoneType.SULFUR)) .oreNether(ore_nether_sulfur); + S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.SULFUR), ore_meteor_sulfur, DictFrame.fromOne(stone_resource, EnumStoneType.SULFUR)) .oreNether(ore_nether_sulfur); KNO .dust(niter) .block(block_niter) .ore(ore_niter); - F .dust(fluorite) .block(block_fluorite) .ore(ore_fluorite, basalt_fluorite, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.FLUORITE)); + F .dust(fluorite) .block(block_fluorite) .ore(ore_fluorite, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.FLUORITE)); LIGNITE .gem(lignite) .dust(powder_lignite) .ore(ore_lignite); COALCOKE .gem(fromOne(coke, EnumCokeType.COAL)) .block(fromOne(block_coke, EnumCokeType.COAL)); PETCOKE .gem(fromOne(coke, EnumCokeType.PETROLEUM)) .block(fromOne(block_coke, EnumCokeType.PETROLEUM)); @@ -410,7 +410,7 @@ public class OreDictManager { CHLOROCALCITE .dust(powder_chlorocalcite); MOLYSITE .dust(powder_molysite) .ore(DictFrame.fromOne(ore_basalt, EnumBasaltOreType.MOLYSITE)); SODALITE .gem(gem_sodalite); - VOLCANIC .gem(gem_volcanic) .ore(basalt_gem, DictFrame.fromOne(ore_basalt, EnumBasaltOreType.GEM)); + VOLCANIC .gem(gem_volcanic) .ore(DictFrame.fromOne(ore_basalt, EnumBasaltOreType.GEM)); HEMATITE .ore(fromOne(stone_resource, EnumStoneType.HEMATITE)); MALACHITE .ore(fromOne(stone_resource, EnumStoneType.MALACHITE)); SLAG .block(block_slag); diff --git a/src/main/java/com/hbm/inventory/container/ContainerBook.java b/src/main/java/com/hbm/inventory/container/ContainerBook.java index a3959b58a..9e1357dae 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerBook.java +++ b/src/main/java/com/hbm/inventory/container/ContainerBook.java @@ -14,109 +14,93 @@ import net.minecraft.inventory.SlotCrafting; import net.minecraft.item.ItemStack; public class ContainerBook extends Container { - - public InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2); - public IInventory craftResult = new InventoryCraftResult(); - public ContainerBook(InventoryPlayer inventory) { - - this.addSlotToContainer(new SlotCrafting(inventory.player, this.craftMatrix, this.craftResult, 0, 124, 35)); + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2); + public IInventory craftResult = new InventoryCraftResult(); - for (int l = 0; l < 2; ++l) { - for (int i1 = 0; i1 < 2; ++i1) { - this.addSlotToContainer(new Slot(this.craftMatrix, i1 + l * 2, 30 + i1 * 36, 17 + l * 36)); - } - } + public ContainerBook(InventoryPlayer inventory) { - for(int l = 0; l < 3; ++l) { - for (int i1 = 0; i1 < 9; ++i1) { - this.addSlotToContainer(new Slot(inventory, i1 + l * 9 + 9, 8 + i1 * 18, 84 + l * 18)); - } - } + this.addSlotToContainer(new SlotCrafting(inventory.player, this.craftMatrix, this.craftResult, 0, 124, 35)); - for(int l = 0; l < 9; ++l) { - this.addSlotToContainer(new Slot(inventory, l, 8 + l * 18, 142)); - } + for(int l = 0; l < 2; ++l) { + for(int i1 = 0; i1 < 2; ++i1) { + this.addSlotToContainer(new Slot(this.craftMatrix, i1 + l * 2, 30 + i1 * 36, 17 + l * 36)); + } + } - this.onCraftMatrixChanged(this.craftMatrix); - } - - public void onCraftMatrixChanged(IInventory inventory) { - this.craftResult.setInventorySlotContents(0, MagicRecipes.getRecipe(this.craftMatrix)); - } - - public void onContainerClosed(EntityPlayer player) { - super.onContainerClosed(player); + for(int l = 0; l < 3; ++l) { + for(int i1 = 0; i1 < 9; ++i1) { + this.addSlotToContainer(new Slot(inventory, i1 + l * 9 + 9, 8 + i1 * 18, 84 + l * 18)); + } + } - if (!player.worldObj.isRemote) { - - for (int i = 0; i < 4; ++i) { - ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i); + for(int l = 0; l < 9; ++l) { + this.addSlotToContainer(new Slot(inventory, l, 8 + l * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory inventory) { + this.craftResult.setInventorySlotContents(0, MagicRecipes.getRecipe(this.craftMatrix)); + } + + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + + if(!player.worldObj.isRemote) { + + for(int i = 0; i < 4; ++i) { + ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i); + + if(itemstack != null) + player.dropPlayerItemWithRandomChoice(itemstack, false); + } + } + } - if (itemstack != null) - player.dropPlayerItemWithRandomChoice(itemstack, false); - } - } - } - @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_) - { - ItemStack itemstack = null; - Slot slot = (Slot)this.inventorySlots.get(p_82846_2_); + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_) { + ItemStack itemstack = null; + Slot slot = (Slot) this.inventorySlots.get(p_82846_2_); - if (slot != null && slot.getHasStack()) - { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); + if(slot != null && slot.getHasStack()) { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); - if (p_82846_2_ == 0) - { - if (!this.mergeItemStack(itemstack1, 10 - 5, 46 - 5, true)) - { - return null; - } + if(p_82846_2_ == 0) { + if(!this.mergeItemStack(itemstack1, 10 - 5, 46 - 5, true)) { + return null; + } - slot.onSlotChange(itemstack1, itemstack); - } - else if (p_82846_2_ >= 10 - 5 && p_82846_2_ < 37 - 5) - { - if (!this.mergeItemStack(itemstack1, 37 - 5, 46 - 5, false)) - { - return null; - } - } - else if (p_82846_2_ >= 37 - 5 && p_82846_2_ < 46 - 5) - { - if (!this.mergeItemStack(itemstack1, 10 - 5, 37 - 5, false)) - { - return null; - } - } - else if (!this.mergeItemStack(itemstack1, 10 - 5, 46 - 5, false)) - { - return null; - } + slot.onSlotChange(itemstack1, itemstack); + } else if(p_82846_2_ >= 10 - 5 && p_82846_2_ < 37 - 5) { + if(!this.mergeItemStack(itemstack1, 37 - 5, 46 - 5, false)) { + return null; + } + } else if(p_82846_2_ >= 37 - 5 && p_82846_2_ < 46 - 5) { + if(!this.mergeItemStack(itemstack1, 10 - 5, 37 - 5, false)) { + return null; + } + } else if(!this.mergeItemStack(itemstack1, 10 - 5, 46 - 5, false)) { + return null; + } - if (itemstack1.stackSize == 0) - { - slot.putStack((ItemStack)null); - } - else - { - slot.onSlotChanged(); - } + if(itemstack1.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } - if (itemstack1.stackSize == itemstack.stackSize) - { - return null; - } + if(itemstack1.stackSize == itemstack.stackSize) { + return null; + } - slot.onPickupFromSlot(p_82846_1_, itemstack1); - } + slot.onPickupFromSlot(p_82846_1_, itemstack1); + } - return itemstack; - } + return itemstack; + } @Override public boolean canInteractWith(EntityPlayer player) { @@ -124,8 +108,7 @@ public class ContainerBook extends Container { } @Override - public boolean func_94530_a(ItemStack stack, Slot slot) { - return slot.inventory != this.craftResult && super.func_94530_a(stack, slot); - } - + public boolean func_94530_a(ItemStack stack, Slot slot) { + return slot.inventory != this.craftResult && super.func_94530_a(stack, slot); + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerFurnaceBrick.java b/src/main/java/com/hbm/inventory/container/ContainerFurnaceBrick.java new file mode 100644 index 000000000..6c362144f --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerFurnaceBrick.java @@ -0,0 +1,79 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotSmelting; +import com.hbm.tileentity.machine.TileEntityFurnaceBrick; +import com.hbm.util.InventoryUtil; + +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; +import net.minecraft.tileentity.TileEntityFurnace; + +public class ContainerFurnaceBrick extends Container { + + private TileEntityFurnaceBrick furnace; + + public ContainerFurnaceBrick(InventoryPlayer invPlayer, TileEntityFurnaceBrick tedf) { + furnace = tedf; + + //input + this.addSlotToContainer(new Slot(tedf, 0, 62, 35)); + //fuel + this.addSlotToContainer(new Slot(tedf, 1, 35, 17)); + //output + this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 2, 116, 35)); + //ash + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 35, 53)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 3) { + if(!this.mergeItemStack(var5, 3, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(!TileEntityFurnace.isItemFuel(var5)) { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, var5, 0, 1, false)) + return null; + } else { + if(!this.mergeItemStack(var5, 1, 2, false) && !this.mergeItemStack(var5, 0, 1, false)) return null; + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return furnace.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerLemegeton.java b/src/main/java/com/hbm/inventory/container/ContainerLemegeton.java new file mode 100644 index 000000000..ec6aeb1e4 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerLemegeton.java @@ -0,0 +1,96 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.recipes.LemegetonRecipes; +import com.hbm.items.ModItems; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.ItemStack; + +public class ContainerLemegeton extends Container { + + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 1, 1); + public IInventory craftResult = new InventoryCraftResult(); + + public ContainerLemegeton(InventoryPlayer inventory) { + + this.addSlotToContainer(new SlotCrafting(inventory.player, this.craftMatrix, this.craftResult, 0, 107, 35)); + this.addSlotToContainer(new Slot(this.craftMatrix, 0, 49, 35)); + + for(int l = 0; l < 3; ++l) { + for(int i1 = 0; i1 < 9; ++i1) { + this.addSlotToContainer(new Slot(inventory, i1 + l * 9 + 9, 8 + i1 * 18, 84 + l * 18)); + } + } + + for(int l = 0; l < 9; ++l) { + this.addSlotToContainer(new Slot(inventory, l, 8 + l * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory inventory) { + this.craftResult.setInventorySlotContents(0, LemegetonRecipes.getRecipe(this.craftMatrix.getStackInSlot(0))); + } + + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + + if(!player.worldObj.isRemote) { + ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(0); + if(itemstack != null) player.dropPlayerItemWithRandomChoice(itemstack, false); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int slotNo) { + ItemStack itemstack = null; + Slot slot = (Slot) this.inventorySlots.get(slotNo); + + if(slot != null && slot.getHasStack()) { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if(slotNo <= 1) { + if(!this.mergeItemStack(itemstack1, 2, this.inventorySlots.size(), true)) { + return null; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if(!this.mergeItemStack(itemstack1, 1, 2, false)) { + return null; + } + + if(itemstack1.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + + if(itemstack1.stackSize == itemstack.stackSize) { + return null; + } + + slot.onPickupFromSlot(p_82846_1_, itemstack1); + } + + return itemstack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return player.inventory.hasItem(ModItems.book_lemegeton); + } + + @Override + public boolean func_94530_a(ItemStack stack, Slot slot) { + return slot.inventory != this.craftResult && super.func_94530_a(stack, slot); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java index 6f8ef4a10..ae7dbc1b1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java +++ b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java @@ -44,6 +44,7 @@ public class GUIAnvil extends GuiContainer { int size; int selection; private GuiTextField search; + private InventoryPlayer playerInventory; public GUIAnvil(InventoryPlayer player, int tier) { super(new ContainerAnvil(player, tier)); @@ -51,7 +52,8 @@ public class GUIAnvil extends GuiContainer { this.tier = tier; this.xSize = 176; this.ySize = 222; - + + this.playerInventory = player; for(AnvilConstructionRecipe recipe : AnvilRecipes.getConstruction()) { if(recipe.isTierValid(this.tier)) this.originList.add(recipe); @@ -243,7 +245,7 @@ public class GUIAnvil extends GuiContainer { if(this.selection >= 0) { AnvilConstructionRecipe recipe = recipes.get(this.selection); - List list = recipeToList(recipe); + List list = recipeToList(recipe, playerInventory); int longest = 0; for(String s : list) { @@ -274,25 +276,55 @@ public class GUIAnvil extends GuiContainer { * @param recipe * @return */ - public List recipeToList(AnvilConstructionRecipe recipe) { + public List recipeToList(AnvilConstructionRecipe recipe, InventoryPlayer inventory) { List list = new ArrayList(); - + list.add(EnumChatFormatting.YELLOW + "Inputs:"); - + for(AStack stack : recipe.input) { - if(stack instanceof ComparableStack) { + if(stack instanceof ComparableStack) { ItemStack input = ((ComparableStack) stack).toStack(); - list.add(">" + input.stackSize + "x " + input.getDisplayName()); - + boolean hasItem = false; + int amount = 0; + for(int i = 0; i < inventory.mainInventory.length; i++) { + ItemStack stackItem = inventory.mainInventory[i]; + if(stackItem == null) { + continue; + } + if(stackItem.getItem() == input.getItem() && input.getItemDamage() == stackItem.getItemDamage()) { + hasItem = true; + amount += stackItem.stackSize; + } + } + if(hasItem && amount >= stack.stacksize) { + list.add(">" + input.stackSize + "x " + input.getDisplayName()); + } else { + list.add(EnumChatFormatting.RED + ">" + input.stackSize + "x " + input.getDisplayName()); + } } else if(stack instanceof OreDictStack) { OreDictStack input = (OreDictStack) stack; ArrayList ores = OreDictionary.getOres(input.name); - + if(ores.size() > 0) { + boolean hasItem = false; + int amount = 0; + for(int i = 0; i < inventory.mainInventory.length; i++) { + ItemStack stackItem = inventory.mainInventory[i]; + if(stackItem == null) { + continue; + } + if(input.matchesRecipe(stackItem, true)) { + hasItem = true; + amount += stackItem.stackSize; + } + } ItemStack inStack = ores.get((int) (Math.abs(System.currentTimeMillis() / 1000) % ores.size())); - list.add(">" + input.stacksize + "x " + inStack.getDisplayName()); - + if(hasItem && amount >= stack.stacksize) { + list.add(">" + input.stacksize + "x " + inStack.getDisplayName()); + } else { + list.add(EnumChatFormatting.RED + ">" + input.stacksize + "x " + inStack.getDisplayName()); + } } else { list.add("I AM ERROR"); } @@ -301,11 +333,11 @@ public class GUIAnvil extends GuiContainer { list.add(""); list.add(EnumChatFormatting.YELLOW + "Outputs:"); - + for(AnvilOutput stack : recipe.output) { - list.add(">" + stack.stack.stackSize + "x " + stack.stack.getDisplayName() + (stack.chance != 1F ? (" (" + (stack.chance * 100) + "%)" ) : "")); + list.add(">" + stack.stack.stackSize + "x " + stack.stack.getDisplayName() + (stack.chance != 1F ? (" (" + (stack.chance * 100) + "%)") : "")); } - + return list; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIBook.java b/src/main/java/com/hbm/inventory/gui/GUIBook.java index 298aba1bf..8952cef3d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBook.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBook.java @@ -16,6 +16,8 @@ public class GUIBook extends GuiContainer { public GUIBook(InventoryPlayer player) { super(new ContainerBook(player)); + this.xSize = 176; + this.ySize = 166; } protected void drawGuiContainerForegroundLayer(int mX, int mY) { @@ -25,7 +27,6 @@ public class GUIBook extends GuiContainer { } protected void drawGuiContainerBackgroundLayer(float inter, int mX, int mY) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(texture); int left = (this.width - this.xSize) / 2; diff --git a/src/main/java/com/hbm/inventory/gui/GUIFurnaceBrick.java b/src/main/java/com/hbm/inventory/gui/GUIFurnaceBrick.java new file mode 100644 index 000000000..31e360e39 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIFurnaceBrick.java @@ -0,0 +1,44 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerFurnaceBrick; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityFurnaceBrick; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIFurnaceBrick extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_furnace_brick.png"); + private TileEntityFurnaceBrick furnace; + + public GUIFurnaceBrick(InventoryPlayer invPlayer, TileEntityFurnaceBrick tile) { + super(new ContainerFurnaceBrick(invPlayer, tile)); + this.furnace = tile; + } + + protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_) { + String name = this.furnace.hasCustomInventoryName() ? this.furnace.getInventoryName() : I18n.format(this.furnace.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); + this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 0xffffff); + } + + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(texture); + this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize); + + if(furnace.isInvalid() && furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord) instanceof TileEntityFurnaceBrick) + furnace = (TileEntityFurnaceBrick) furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord); + + if(this.furnace.burnTime > 0) { + int b = furnace.burnTime * 13 / furnace.maxBurnTime; + this.drawTexturedModalRect(guiLeft + 62, guiTop + 54 + 12 - b, 176, 12 - b, 14, b + 1); + int p = this.furnace.progress * 24 / 200; + this.drawTexturedModalRect(guiLeft + 85, guiTop + 34, 176, 14, p + 1, 16); + } + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUILemegeton.java b/src/main/java/com/hbm/inventory/gui/GUILemegeton.java new file mode 100644 index 000000000..bc6ec5961 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUILemegeton.java @@ -0,0 +1,40 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerLemegeton; +import com.hbm.lib.RefStrings; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUILemegeton extends GuiContainer { + + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_lemegeton.png"); + + public GUILemegeton(InventoryPlayer player) { + super(new ContainerLemegeton(player)); + this.xSize = 176; + this.ySize = 166; + } + + protected void drawGuiContainerForegroundLayer(int mX, int mY) { + + Minecraft.getMinecraft().standardGalacticFontRenderer.drawString("Material Upgrade Conversion", 28, 6, 4210752); + Minecraft.getMinecraft().standardGalacticFontRenderer.drawString("Standard Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float inter, int mX, int mY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(texture); + int left = (this.width - this.xSize) / 2; + int top = (this.height - this.ySize) / 2; + + this.drawTexturedModalRect(left, top, 0, 0, this.xSize, this.ySize); + + if(this.inventorySlots.getSlot(0).getHasStack()) + this.drawTexturedModalRect(left + 7, top + 22, 0, 166, 162, 42); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index a563eb732..06e2d2e70 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -186,6 +186,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { this.search.setDisabledTextColour(0xffffff); this.search.setEnableBackgroundDrawing(false); this.search.setMaxStringLength(100); + this.search.setFocused(true); } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index f66125e0b..a0831faa8 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -277,13 +277,13 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_battery, 1), new AStack[] {new OreDictStack(DESH.ingot(), 4), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12), new OreDictStack(SA326.ingot(), 2), new ComparableStack(ModItems.wire_schrabidium, 4), },800); makeRecipe(new ComparableStack(ModBlocks.machine_dineutronium_battery, 1), new AStack[] {new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 8), },1600); makeRecipe(new ComparableStack(ModBlocks.machine_shredder, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModBlocks.steel_beam, 2), new ComparableStack(Blocks.iron_bars, 2) },200); - makeRecipe(new ComparableStack(ModBlocks.machine_well, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 20), new ComparableStack(ModBlocks.steel_beam, 8), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.pipes_steel, 3), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.wire_red_copper, 6), },250); - makeRecipe(new ComparableStack(ModBlocks.machine_pumpjack, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.plateWelded(), 8), new ComparableStack(ModItems.pipes_steel, 4), new ComparableStack(ModItems.tank_steel, 4), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.motor, 2) }, 400); + makeRecipe(new ComparableStack(ModBlocks.machine_well, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 20), new ComparableStack(ModBlocks.steel_beam, 8), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.pipes_steel, 1), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.wire_red_copper, 6), },250); + makeRecipe(new ComparableStack(ModBlocks.machine_pumpjack, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.plateWelded(), 8), new ComparableStack(ModItems.pipes_steel, 4), new ComparableStack(ModItems.tank_steel, 4), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.motor_desh) }, 400); makeRecipe(new ComparableStack(ModBlocks.machine_flare, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(IRON.ingot(), 12), new OreDictStack(CU.plate528(), 4), new ComparableStack(ModItems.tank_steel, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 8), new ComparableStack(ModItems.hull_small_steel, 4), new ComparableStack(ModItems.thermo_element, 3), },200); makeRecipe(new ComparableStack(ModBlocks.machine_coker, 1), new AStack[] {!exp ? new OreDictStack(STEEL.plateWelded(), 3) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(IRON.ingot(), 16), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModBlocks.steel_grate, 4) },200); makeRecipe(new ComparableStack(ModBlocks.machine_refinery, 1), new AStack[] {!exp ? new OreDictStack(STEEL.plateWelded(), 3) : new OreDictStack(STEEL.heavyComp(), 1), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.hull_big_steel, 6), new ComparableStack(ModItems.pipes_steel, 2), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit_red_copper, 1) },350); makeRecipe(new ComparableStack(ModBlocks.machine_epress, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit_copper, 1) }, 100); - makeRecipe(new ComparableStack(ModBlocks.machine_chemplant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.plate528(), 6), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.hull_big_steel, 1), new ComparableStack(ModItems.coil_tungsten, 3), new ComparableStack(ModItems.circuit_copper, 2), new ComparableStack(ModItems.circuit_red_copper, 1), new ComparableStack(ModItems.plate_polymer, 8), },200); + makeRecipe(new ComparableStack(ModBlocks.machine_chemplant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(CU.plate528(), 6), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.coil_tungsten, 3), new ComparableStack(ModItems.circuit_copper, 2), new ComparableStack(ModItems.circuit_red_copper, 1), new ComparableStack(ModItems.plate_polymer, 8), },200); makeRecipe(new ComparableStack(ModBlocks.machine_crystallizer, 1), new AStack[] {new ComparableStack(ModItems.hull_big_steel, 4), new ComparableStack(ModItems.pipes_steel, 1), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.blades_advanced_alloy, 2), new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plate(), 16), new ComparableStack(Blocks.glass, 4), new ComparableStack(ModItems.circuit_gold, 1), },400); makeRecipe(new ComparableStack(ModBlocks.machine_fluidtank, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(STEEL.plate528(), 6), new ComparableStack(ModItems.hull_big_steel, 4), new OreDictStack(ANY_TAR.any(), 4), },150); makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150); diff --git a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java index 3c5b8bdd2..1fe93cf7e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java @@ -44,7 +44,7 @@ public class CombinationRecipes extends SerializableRecipe { recipes.put(LIGNITE.dust(), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.LIGNITE), new FluidStack(Fluids.COALCREOSOTE, 50))); recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.briquette, EnumBriquetteType.LIGNITE)), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.LIGNITE), new FluidStack(Fluids.COALCREOSOTE, 100))); - //recipes.put(CHLOROCALCITE.dust(), new Pair(new ItemStack(ModItems.powder_calcium), new FluidStack(Fluids.CHLORINE, 250))); + recipes.put(CHLOROCALCITE.dust(), new Pair(new ItemStack(ModItems.powder_calcium), new FluidStack(Fluids.CHLORINE, 250))); recipes.put(MOLYSITE.dust(), new Pair(new ItemStack(Items.iron_ingot), new FluidStack(Fluids.CHLORINE, 250))); recipes.put(CINNABAR.crystal(), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.MERCURY, 100))); recipes.put(new ComparableStack(Items.glowstone_dust), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.CHLORINE, 100))); diff --git a/src/main/java/com/hbm/inventory/recipes/LemegetonRecipes.java b/src/main/java/com/hbm/inventory/recipes/LemegetonRecipes.java new file mode 100644 index 000000000..bae7c2f25 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/LemegetonRecipes.java @@ -0,0 +1,78 @@ +package com.hbm.inventory.recipes; + +import java.util.HashMap; +import java.util.Map.Entry; + +import static com.hbm.inventory.OreDictManager.*; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.items.ModItems; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +public class LemegetonRecipes { + + public static HashMap recipes = new HashMap(); + + public static void register() { + recipes.put(new OreDictStack(IRON.ingot()), new ItemStack(ModItems.ingot_steel)); + recipes.put(new OreDictStack(STEEL.ingot()), new ItemStack(ModItems.ingot_dura_steel)); + recipes.put(new OreDictStack(DURA.ingot()), new ItemStack(ModItems.ingot_tcalloy)); + recipes.put(new OreDictStack(TCALLOY.ingot()), new ItemStack(ModItems.ingot_combine_steel)); + recipes.put(new OreDictStack(CMB.ingot()), new ItemStack(ModItems.ingot_dineutronium)); + + recipes.put(new OreDictStack(TI.ingot()), new ItemStack(ModItems.ingot_saturnite)); + recipes.put(new OreDictStack(BIGMT.ingot()), new ItemStack(ModItems.ingot_starmetal)); + + recipes.put(new OreDictStack(CU.ingot()), new ItemStack(ModItems.ingot_red_copper)); + recipes.put(new OreDictStack(MINGRADE.ingot()), new ItemStack(ModItems.ingot_advanced_alloy)); + recipes.put(new OreDictStack(ALLOY.ingot()), new ItemStack(ModItems.ingot_desh)); + + recipes.put(new OreDictStack(PB.ingot()), new ItemStack(Items.gold_ingot)); + recipes.put(new OreDictStack(GOLD.ingot()), new ItemStack(ModItems.ingot_bismuth)); + recipes.put(new OreDictStack(BI.ingot()), new ItemStack(ModItems.ingot_osmiridium)); + + recipes.put(new OreDictStack(TH232.ingot()), new ItemStack(ModItems.ingot_uranium)); + recipes.put(new OreDictStack(U.ingot()), new ItemStack(ModItems.ingot_u238)); + recipes.put(new OreDictStack(U238.ingot()), new ItemStack(ModItems.ingot_u235)); + recipes.put(new OreDictStack(U235.ingot()), new ItemStack(ModItems.ingot_plutonium)); + recipes.put(new OreDictStack(PU.ingot()), new ItemStack(ModItems.ingot_pu238)); + recipes.put(new OreDictStack(PU238.ingot()), new ItemStack(ModItems.ingot_pu239)); + recipes.put(new OreDictStack(PU239.ingot()), new ItemStack(ModItems.ingot_pu240)); + recipes.put(new OreDictStack(PU240.ingot()), new ItemStack(ModItems.ingot_pu241)); + recipes.put(new OreDictStack(PU241.ingot()), new ItemStack(ModItems.ingot_am241)); + recipes.put(new OreDictStack(AM241.ingot()), new ItemStack(ModItems.ingot_am242)); + + recipes.put(new OreDictStack(RA226.ingot()), new ItemStack(ModItems.ingot_polonium)); + recipes.put(new OreDictStack(PO210.ingot()), new ItemStack(ModItems.ingot_technetium)); + + recipes.put(new OreDictStack(POLYMER.ingot()), new ItemStack(ModItems.ingot_pc)); + recipes.put(new OreDictStack(BAKELITE.ingot()), new ItemStack(ModItems.ingot_pvc)); + recipes.put(new OreDictStack(LATEX.ingot()), new ItemStack(ModItems.ingot_rubber)); + + recipes.put(new OreDictStack(COAL.gem()), new ItemStack(ModItems.ingot_graphite)); + recipes.put(new OreDictStack(GRAPHITE.ingot()), new ItemStack(Items.diamond)); + recipes.put(new OreDictStack(DIAMOND.gem()), new ItemStack(ModItems.ingot_cft)); + + recipes.put(new OreDictStack(F.dust()), new ItemStack(ModItems.gem_sodalite)); + recipes.put(new OreDictStack(SODALITE.gem()), new ItemStack(ModItems.gem_volcanic)); + recipes.put(new OreDictStack(VOLCANIC.gem()), new ItemStack(ModItems.gem_rad)); + recipes.put(new ComparableStack(ModItems.gem_rad), new ItemStack(ModItems.gem_alexandrite)); + + recipes.put(new OreDictStack(KEY_SAND), new ItemStack(ModItems.ingot_fiberglass)); + recipes.put(new OreDictStack(FIBER.ingot()), new ItemStack(ModItems.ingot_asbestos)); + } + + public static ItemStack getRecipe(ItemStack ingredient) { + + for(Entry entry : recipes.entrySet()) { + if(entry.getKey().matchesRecipe(ingredient, true)) { + return entry.getValue().copy(); + } + } + + return null; + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 99e574056..88b5b9207 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -16,6 +16,7 @@ import com.hbm.interfaces.Untested; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.main.MainRegistry; @@ -205,6 +206,8 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(Items.apple, new ItemStack(Items.sugar, 1)); ShredderRecipes.setRecipe(Items.carrot, new ItemStack(Items.sugar, 1)); ShredderRecipes.setRecipe(ModItems.can_empty, new ItemStack(ModItems.powder_aluminium, 2)); + ShredderRecipes.setRecipe(ModBlocks.machine_well, new ItemStack(ModItems.powder_steel, 32)); + ShredderRecipes.setRecipe(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE), new ItemStack(ModItems.powder_desh_mix)); List logs = OreDictionary.getOres("logWood"); List planks = OreDictionary.getOres("plankWood"); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 86921434e..3a0c76a39 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -13,6 +13,7 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.AssemblerRecipes; import com.hbm.items.ItemAmmoEnums.*; +import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.items.food.ItemFlask.EnumInfusion; @@ -703,6 +704,20 @@ public class AnvilRecipes { public static void registerConstructionRecycling() { + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE)), + new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.fragment_boron)), + new AnvilOutput(new ItemStack(ModItems.fragment_boron), 0.5F), + new AnvilOutput(new ItemStack(ModItems.fragment_lanthanium), 0.1F), + new AnvilOutput(new ItemStack(ModItems.fragment_cobalt)), + new AnvilOutput(new ItemStack(ModItems.fragment_cobalt), 0.5F), + new AnvilOutput(new ItemStack(ModItems.fragment_cerium), 0.1F), + new AnvilOutput(new ItemStack(ModItems.fragment_neodymium), 0.5F), + new AnvilOutput(new ItemStack(ModItems.fragment_niobium), 0.5F), + } + ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModBlocks.heater_firebox), new AnvilOutput[] { diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index b4d48e009..afe1a97e0 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -50,6 +50,10 @@ public class ItemEnums { MUSTARDWILLOW } + public static enum EnumChunkType { + RARE + } + public static enum EnumAchievementType { GOFISH, ACID, diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d2ad9d3b1..0c07cb805 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -552,6 +552,7 @@ public class ModItems { public static Item fragment_boron; public static Item fragment_meteorite; public static Item fragment_coltan; + public static Item chunk_ore; public static Item biomass; public static Item biomass_compressed; @@ -2090,6 +2091,7 @@ public class ModItems { public static Item chlorophyte_pickaxe; public static Item mese_pickaxe; public static Item dnt_sword; + public static Item dwarven_pickaxe; public static Item meteorite_sword; public static Item meteorite_sword_seared; @@ -2345,6 +2347,7 @@ public class ModItems { public static Item key; public static Item key_red; + public static Item key_red_cracked; public static Item key_kit; public static Item key_fake; public static Item pin; @@ -2384,6 +2387,7 @@ public class ModItems { public static Item book_secret; public static Item book_of_; public static Item page_of_; + public static Item book_lemegeton; public static Item burnt_bark; public static Item smoke1; @@ -2983,6 +2987,7 @@ public class ModItems { fragment_boron = new Item().setUnlocalizedName("fragment_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_boron"); fragment_meteorite = new Item().setUnlocalizedName("fragment_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_meteorite"); fragment_coltan = new Item().setUnlocalizedName("fragment_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_coltan"); + chunk_ore = new ItemEnumMulti(EnumChunkType.class, true, true).setUnlocalizedName("chunk_ore").setCreativeTab(MainRegistry.partsTab); biomass = new Item().setUnlocalizedName("biomass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass"); biomass_compressed = new Item().setUnlocalizedName("biomass_compressed").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass_compressed"); @@ -4330,30 +4335,30 @@ public class ModItems { glowing_stew = new ItemSoup(6).setUnlocalizedName("glowing_stew").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glowing_stew"); balefire_scrambled = new ItemSoup(6).setUnlocalizedName("balefire_scrambled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_scrambled"); balefire_and_ham = new ItemSoup(6).setUnlocalizedName("balefire_and_ham").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_and_ham"); - lemon = new ItemLemon(3, 5, false).setUnlocalizedName("lemon").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":lemon"); - definitelyfood = new ItemLemon(2, 5, false).setUnlocalizedName("definitelyfood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":definitelyfood"); + lemon = new ItemLemon(3, 0.5F, false).setUnlocalizedName("lemon").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":lemon"); + definitelyfood = new ItemLemon(3, 0.5F, false).setUnlocalizedName("definitelyfood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":definitelyfood"); med_ipecac = new ItemLemon(0, 0, false).setUnlocalizedName("med_ipecac").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ipecac_new"); med_ptsd = new ItemLemon(0, 0, false).setUnlocalizedName("med_ptsd").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ptsd_new"); med_schizophrenia = new ItemLemon(0, 0, false).setUnlocalizedName("med_schizophrenia").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_schizophrenia_new"); - loops = new ItemLemon(4, 5, false).setUnlocalizedName("loops").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loops"); - loop_stew = new ItemLemon(10, 10, false).setUnlocalizedName("loop_stew").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loop_stew"); - spongebob_macaroni = new ItemLemon(5, 5, false).setUnlocalizedName("spongebob_macaroni").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spongebob_macaroni"); - fooditem = new ItemLemon(2, 5, false).setUnlocalizedName("fooditem").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":fooditem"); - twinkie = new ItemLemon(3, 5, false).setUnlocalizedName("twinkie").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":twinkie"); - static_sandwich = new ItemLemon(6, 5, false).setUnlocalizedName("static_sandwich").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":static_sandwich"); - pudding = new ItemLemon(6, 15, false).setUnlocalizedName("pudding").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pudding"); + loops = new ItemLemon(4, 0.25F, false).setUnlocalizedName("loops").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loops"); + loop_stew = new ItemLemon(10, 0.5F, false).setUnlocalizedName("loop_stew").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loop_stew"); + spongebob_macaroni = new ItemLemon(5, 1F, false).setUnlocalizedName("spongebob_macaroni").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spongebob_macaroni"); + fooditem = new ItemLemon(2, 5F, false).setUnlocalizedName("fooditem").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":fooditem"); + twinkie = new ItemLemon(3, 0.25F, false).setUnlocalizedName("twinkie").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":twinkie"); + static_sandwich = new ItemLemon(6, 1F, false).setUnlocalizedName("static_sandwich").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":static_sandwich"); + pudding = new ItemLemon(6, 1F, false).setUnlocalizedName("pudding").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pudding"); canteen_13 = new ItemCanteen(1 * 60).setUnlocalizedName("canteen_13").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_13"); canteen_vodka = new ItemCanteen(3 * 60).setUnlocalizedName("canteen_vodka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_vodka"); canteen_fab = new ItemCanteen(2 * 60).setUnlocalizedName("canteen_fab").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_fab"); pancake = new ItemPancake(20, 20, false).setUnlocalizedName("pancake").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pancake"); - nugget = new ItemLemon(200, 200, false).setUnlocalizedName("nugget").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nugget"); + nugget = new ItemLemon(200, 1F, false).setUnlocalizedName("nugget").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nugget"); peas = new ItemPeas().setUnlocalizedName("peas").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":peas"); marshmallow = new ItemMarshmallow().setUnlocalizedName("marshmallow").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":marshmallow"); - cheese = new ItemLemon(5, 10, false).setUnlocalizedName("cheese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cheese"); - quesadilla = new ItemLemon(8, 10, false).setUnlocalizedName("cheese_quesadilla").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":quesadilla"); + cheese = new ItemLemon(5, 0.75F, false).setUnlocalizedName("cheese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cheese"); + quesadilla = new ItemLemon(8, 1F, false).setUnlocalizedName("cheese_quesadilla").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":quesadilla"); mucho_mango = new ItemMuchoMango(10).setUnlocalizedName("mucho_mango").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mucho_mango"); - glyphid_meat = new ItemLemon(3, 3, true).setUnlocalizedName("glyphid_meat").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat"); - glyphid_meat_grilled = new ItemLemon(8, 8, true).setPotionEffect(Potion.damageBoost.id, 180, 1, 1F).setUnlocalizedName("glyphid_meat_grilled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat_grilled"); + glyphid_meat = new ItemLemon(3, 0.5F, true).setUnlocalizedName("glyphid_meat").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat"); + glyphid_meat_grilled = new ItemLemon(8, 0.75F, true).setPotionEffect(Potion.damageBoost.id, 180, 1, 1F).setUnlocalizedName("glyphid_meat_grilled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat_grilled"); egg_glyphid = new Item().setUnlocalizedName("egg_glyphid").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":egg_glyphid"); defuser = new ItemTooling(ToolType.DEFUSER, 100).setUnlocalizedName("defuser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":defuser"); @@ -4641,6 +4646,7 @@ public class ModItems { key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); + key_red_cracked = new ItemCustomLore().setUnlocalizedName("key_red_cracked").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red_cracked"); key_kit = new ItemCounterfitKeys().setUnlocalizedName("key_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_pair"); key_fake = new ItemKey().setUnlocalizedName("key_fake").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_gold"); pin = new ItemCustomLore().setUnlocalizedName("pin").setMaxStackSize(8).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pin"); @@ -5318,6 +5324,10 @@ public class ModItems { dnt_sword = new ItemSwordAbility(12F, 0, matMese).setUnlocalizedName("dnt_sword").setTextureName(RefStrings.MODID + ":dnt_sword"); + ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper)); + dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(1)).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); + ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); meteorite_sword = new ItemSwordMeteorite(10F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword"); meteorite_sword_seared = new ItemSwordMeteorite(15F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_seared").setTextureName(RefStrings.MODID + ":meteorite_sword"); @@ -5458,6 +5468,7 @@ public class ModItems { book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); + book_lemegeton = new ItemBookLemegeton().setUnlocalizedName("book_lemegeton").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_lemegeton"); burnt_bark = new ItemCustomLore().setUnlocalizedName("burnt_bark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":burnt_bark"); smoke1 = new Item().setUnlocalizedName("smoke1").setTextureName(RefStrings.MODID + ":smoke1"); @@ -5970,6 +5981,7 @@ public class ModItems { GameRegistry.registerItem(fragment_boron, fragment_boron.getUnlocalizedName()); GameRegistry.registerItem(fragment_meteorite, fragment_meteorite.getUnlocalizedName()); GameRegistry.registerItem(fragment_coltan, fragment_coltan.getUnlocalizedName()); + GameRegistry.registerItem(chunk_ore, chunk_ore.getUnlocalizedName()); //Things that look like rotten flesh but aren't GameRegistry.registerItem(biomass, biomass.getUnlocalizedName()); @@ -6862,6 +6874,7 @@ public class ModItems { //Keys and Locks GameRegistry.registerItem(key, key.getUnlocalizedName()); GameRegistry.registerItem(key_red, key_red.getUnlocalizedName()); + GameRegistry.registerItem(key_red_cracked, key_red_cracked.getUnlocalizedName()); GameRegistry.registerItem(key_kit, key_kit.getUnlocalizedName()); GameRegistry.registerItem(key_fake, key_fake.getUnlocalizedName()); GameRegistry.registerItem(mech_key, mech_key.getUnlocalizedName()); @@ -7461,6 +7474,7 @@ public class ModItems { GameRegistry.registerItem(cape_hidden, cape_hidden.getUnlocalizedName()); //Tools + GameRegistry.registerItem(dwarven_pickaxe, dwarven_pickaxe.getUnlocalizedName()); GameRegistry.registerItem(schrabidium_sword, schrabidium_sword.getUnlocalizedName()); GameRegistry.registerItem(schrabidium_hammer, schrabidium_hammer.getUnlocalizedName()); GameRegistry.registerItem(shimmer_sledge, shimmer_sledge.getUnlocalizedName()); @@ -8055,6 +8069,7 @@ public class ModItems { GameRegistry.registerItem(book_secret, book_secret.getUnlocalizedName()); GameRegistry.registerItem(book_of_, book_of_.getUnlocalizedName()); GameRegistry.registerItem(page_of_, page_of_.getUnlocalizedName()); + GameRegistry.registerItem(book_lemegeton, book_lemegeton.getUnlocalizedName()); GameRegistry.registerItem(burnt_bark, burnt_bark.getUnlocalizedName()); //Kits diff --git a/src/main/java/com/hbm/items/food/ItemConserve.java b/src/main/java/com/hbm/items/food/ItemConserve.java index 11b2c9bb7..9b45540e6 100644 --- a/src/main/java/com/hbm/items/food/ItemConserve.java +++ b/src/main/java/com/hbm/items/food/ItemConserve.java @@ -105,33 +105,33 @@ public class ItemConserve extends ItemEnumMulti { } public static enum EnumFoodType { - BEEF(8, 5F), - TUNA(4, 5F), - MYSTERY(6, 5F), - PASHTET(4, 5F), - CHEESE(3, 5F), + BEEF(8, 0.75F), + TUNA(4, 0.75F), + MYSTERY(6, 0.5F), + PASHTET(4, 0.5F), + CHEESE(3, 1F), JIZZ(15, 5F), // :3 - MILK(5, 5F), - ASS(6, 5F), // :3 - PIZZA(8, 5F), - TUBE(2, 5F), - TOMATO(4, 5F), - ASBESTOS(7, 5F), - BHOLE(10, 5F), - HOTDOGS(5, 5F), - LEFTOVERS(1, 5F), - YOGURT(3, 5F), - STEW(5, 5F), - CHINESE(6, 5F), - OIL(3, 5F), - FIST(6, 5F), - SPAM(8, 5F), - FRIED(10, 5F), - NAPALM(6, 5F), - DIESEL(6, 5F), - KEROSENE(6, 4F), - RECURSION(1, 5F), - BARK(2, 5F); + MILK(5, 0.25F), + ASS(6, 0.75F), // :3 + PIZZA(8, 075F), + TUBE(2, 0.25F), + TOMATO(4, 0.5F), + ASBESTOS(7, 1F), + BHOLE(10, 1F), + HOTDOGS(5, 0.75F), + LEFTOVERS(1, 0.1F), + YOGURT(3, 0.5F), + STEW(5, 0.5F), + CHINESE(6, 0.1F), + OIL(3, 1F), + FIST(6, 0.75F), + SPAM(8, 1F), + FRIED(10, 0.75F), + NAPALM(6, 1F), + DIESEL(6, 1F), + KEROSENE(6, 1F), + RECURSION(1, 1F), + BARK(2, 1F); protected int foodLevel; protected float saturation; diff --git a/src/main/java/com/hbm/items/food/ItemLemon.java b/src/main/java/com/hbm/items/food/ItemLemon.java index 25bb74a9e..17499655c 100644 --- a/src/main/java/com/hbm/items/food/ItemLemon.java +++ b/src/main/java/com/hbm/items/food/ItemLemon.java @@ -33,15 +33,6 @@ public class ItemLemon extends ItemFood { list.add("Eh, good enough."); } - if(this == ModItems.definitelyfood) { - list.add("A'right, I got sick and tired of"); - list.add("having to go out, kill things just"); - list.add("to get food and not die, so here is "); - list.add("my absolutely genius solution:"); - list.add(""); - list.add("Have some edible dirt."); - } - if(this == ModItems.med_ipecac) { list.add("Bitter juice that will cause your stomach"); list.add("to forcefully eject its contents."); diff --git a/src/main/java/com/hbm/items/special/ItemBook.java b/src/main/java/com/hbm/items/special/ItemBook.java index 5759ea383..56995b012 100644 --- a/src/main/java/com/hbm/items/special/ItemBook.java +++ b/src/main/java/com/hbm/items/special/ItemBook.java @@ -43,37 +43,4 @@ public class ItemBook extends Item implements IGUIProvider { public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBook(player.inventory); } - - /*@Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - - if(world.isRemote) - return stack; - - if(!player.isSneaking()) { - List list = world.getEntitiesWithinAABBExcludingEntity(player, AxisAlignedBB.getBoundingBox(player.posX - 10, player.posY - 2, player.posZ - 10, player.posX + 10, player.posY + 2, player.posZ + 10)); - - for(Object o : list) { - - if(o instanceof EntityLivingBase) { - EntityLivingBase entity = (EntityLivingBase)o; - - entity.addPotionEffect(new PotionEffect(HbmPotion.telekinesis.id, 20, 0)); - } - } - } else { - if(player.inventory.hasItemStack(new ItemStack(ModItems.ingot_u238m2, 1, 1)) && - player.inventory.hasItemStack(new ItemStack(ModItems.ingot_u238m2, 1, 2)) && - player.inventory.hasItemStack(new ItemStack(ModItems.ingot_u238m2, 1, 3))) { - player.inventory.clearInventory(ModItems.ingot_u238m2, 1); - player.inventory.clearInventory(ModItems.ingot_u238m2, 2); - player.inventory.clearInventory(ModItems.ingot_u238m2, 3); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.ingot_u238m2)); - player.inventoryContainer.detectAndSendChanges(); - } - } - - return stack; - }*/ - } diff --git a/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java new file mode 100644 index 000000000..90bcdd20c --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java @@ -0,0 +1,35 @@ +package com.hbm.items.tool; + +import com.hbm.inventory.container.ContainerLemegeton; +import com.hbm.inventory.gui.GUILemegeton; +import com.hbm.main.MainRegistry; +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; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBookLemegeton extends Item implements IGUIProvider { + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(!world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); + return stack; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerLemegeton(player.inventory); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen 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/ItemPipette.java b/src/main/java/com/hbm/items/tool/ItemPipette.java index b7829ae2c..110dee982 100644 --- a/src/main/java/com/hbm/items/tool/ItemPipette.java +++ b/src/main/java/com/hbm/items/tool/ItemPipette.java @@ -16,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.IIcon; import net.minecraft.world.World; @@ -92,7 +93,7 @@ public class ItemPipette extends Item implements IFillableItem { stack.stackTagCompound.setShort("capacity", (short) a); player.addChatMessage(new ChatComponentText(a + "/" + this.getMaxFill() + "mB")); } else { - player.addChatMessage(new ChatComponentText(I18nUtil.resolveKey("desc.item.pipette.noEmpty"))); + player.addChatMessage(new ChatComponentTranslation("desc.item.pipette.noEmpty")); } } return stack; diff --git a/src/main/java/com/hbm/items/tool/ItemSatRelay.java b/src/main/java/com/hbm/items/tool/ItemSatRelay.java index 519befad2..ba040cbd0 100644 --- a/src/main/java/com/hbm/items/tool/ItemSatRelay.java +++ b/src/main/java/com/hbm/items/tool/ItemSatRelay.java @@ -1,16 +1,6 @@ package com.hbm.items.tool; import com.hbm.items.machine.ItemSatChip; -import com.hbm.lib.Library; -import com.hbm.saveddata.SatelliteSavedData; -import com.hbm.saveddata.satellites.Satellite; -import com.hbm.saveddata.satellites.Satellite.Interfaces; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; public class ItemSatRelay extends ItemSatChip { //Schrabby doesn't fucking know how this works so I HOPE it will create a new item that works without fucking everything up diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index 8d642887d..482b03486 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -4,10 +4,6 @@ import java.util.List; import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.lib.Library; -import com.hbm.util.BobMathUtil; -import com.hbm.util.TrackerUtil; -import com.hbm.world.WorldUtil; -import com.hbm.world.biome.BiomeGenCraterBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -71,11 +67,7 @@ public class ItemWandD extends Item { if(!del.isEmpty()) { for(EntityNukeTorex torex : del) torex.setDead(); } else { - EntityNukeTorex torex = new EntityNukeTorex(world); - torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0); - torex.setScale((float) BobMathUtil.squirt( 1.5 ) * 1.5F); - world.spawnEntityInWorld(torex); - TrackerUtil.setTrackingRange(world, torex, 1000); + EntityNukeTorex.statFac(world, pos.blockX, pos.blockY + 1, pos.blockZ, 150); } /*EntityTracker entitytracker = ((WorldServer) world).getEntityTracker(); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 49b97021c..1315d08e9 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 (4851)"; + public static final String VERSION = "1.0.27 BETA (4859)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 73d321015..6fef046e3 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -223,7 +223,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.shimmer_handle, 1), new Object[] { "GP", "GP", "GP", 'G', GOLD.plate(), 'P', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModItems.shimmer_sledge, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_head }); addRecipeAuto(new ItemStack(ModItems.shimmer_axe, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_axe_head }); - addRecipeAuto(new ItemStack(ModItems.definitelyfood, 1), new Object[] { "DDD", "SDS", "DDD", 'D', Blocks.dirt, 'S', STEEL.plate() }); + addShapelessAuto(new ItemStack(ModItems.definitelyfood, 4), new Object[] { ANY_RUBBER.ingot(), Items.wheat, Items.rotten_flesh, "treeSapling" }); + addShapelessAuto(new ItemStack(ModItems.definitelyfood, 4), new Object[] { ANY_RUBBER.ingot(), Items.wheat, Items.rotten_flesh, Items.wheat_seeds, Items.wheat_seeds, Items.wheat_seeds }); addRecipeAuto(new ItemStack(ModItems.turbine_tungsten, 1), new Object[] { "BBB", "BSB", "BBB", 'B', ModItems.blade_tungsten, 'S', DURA.ingot() }); addRecipeAuto(new ItemStack(ModItems.ring_starmetal, 1), new Object[] { " S ", "S S", " S ", 'S', STAR.ingot() }); addRecipeAuto(new ItemStack(ModItems.flywheel_beryllium, 1), new Object[] { "IBI", "BTB", "IBI", 'B', BE.block(), 'I', IRON.plateCast(), 'T', ModItems.bolt_compound }); @@ -324,6 +325,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.anvil_murky, 1), new Object[] { "UUU", "UAU", "UUU", 'U', ModItems.undefined, 'A', ModBlocks.anvil_steel }); addRecipeAuto(new ItemStack(ModBlocks.machine_fraction_tower), new Object[] { "H", "G", "H", 'H', STEEL.plateWelded(), 'G', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(ModBlocks.fraction_spacer), new Object[] { "BHB", 'H', ModItems.hull_big_steel, 'B', Blocks.iron_bars }); + addRecipeAuto(new ItemStack(ModBlocks.machine_furnace_brick_off), new Object[] { "III", "I I", "BBB", 'I', Items.brick, 'B', Blocks.stone }); addRecipeAuto(new ItemStack(ModBlocks.furnace_iron), new Object[] { "III", "IFI", "BBB", 'I', IRON.ingot(), 'F', Blocks.furnace, 'B', Blocks.stonebrick }); addRecipeAuto(new ItemStack(ModBlocks.machine_mixer), new Object[] { "PIP", "GCG", "PMP", 'P', STEEL.plate(), 'I', DURA.ingot(), 'G', KEY_ANYPANE, 'C', ModItems.circuit_copper, 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.fan), new Object[] { "BPB", "PRP", "BPB", 'B', STEEL.bolt(), 'P', IRON.plate(), 'R', REDSTONE.dust() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 6ed8c16ab..080f463d2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -347,7 +347,9 @@ public class MainRegistry { ChestGenHooks.addItem(ChestGenHooks.MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new ItemStack(ModItems.bathwater), 1, 1, 1)); ChestGenHooks.addItem(ChestGenHooks.MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new ItemStack(ModItems.serum), 1, 1, 5)); ChestGenHooks.addItem(ChestGenHooks.MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new ItemStack(ModItems.no9), 1, 1, 5)); + ChestGenHooks.addItem(ChestGenHooks.MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new ItemStack(ModItems.key_red_cracked), 1, 1, 5)); ChestGenHooks.addItem(ChestGenHooks.DUNGEON_CHEST, new WeightedRandomChestContent(new ItemStack(ModItems.heart_piece), 1, 1, 1)); + ChestGenHooks.addItem(ChestGenHooks.DUNGEON_CHEST, new WeightedRandomChestContent(new ItemStack(ModItems.key_red_cracked), 1, 1, 5)); ChestGenHooks.addItem(ChestGenHooks.PYRAMID_DESERT_CHEST, new WeightedRandomChestContent(new ItemStack(ModItems.heart_piece), 1, 1, 1)); ChestGenHooks.addItem(ChestGenHooks.PYRAMID_JUNGLE_CHEST, new WeightedRandomChestContent(new ItemStack(ModItems.heart_piece), 1, 1, 1)); ChestGenHooks.addItem(ChestGenHooks.DUNGEON_CHEST, new WeightedRandomChestContent(new ItemStack(ModItems.scrumpy), 1, 1, 1)); @@ -843,6 +845,7 @@ public class MainRegistry { TileEntityNukeFurnace.registerFuels(); AssemblerRecipes.loadRecipes(); MagicRecipes.register(); + LemegetonRecipes.register(); SILEXRecipes.register(); AnvilRecipes.register(); RefineryRecipes.registerRefinery(); @@ -1211,6 +1214,10 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.reactor_computer"); ignoreMappings.add("hbm:tile.ff"); ignoreMappings.add("hbm:tile.muffler"); + ignoreMappings.add("hbm:tile.basalt_sulfur"); + ignoreMappings.add("hbm:tile.basalt_fluorite"); + ignoreMappings.add("hbm:tile.basalt_asbestos"); + ignoreMappings.add("hbm:tile.basalt_gem"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d0ab5626f..edd594447 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -322,8 +322,9 @@ public class ModEventHandler { event.entityLiving.dropItem(ModItems.bandaid, 1); } - if(event.entityLiving instanceof IMob && event.entityLiving.getRNG().nextInt(1000) == 0) { - event.entityLiving.dropItem(ModItems.heart_piece, 1); + if(event.entityLiving instanceof IMob) { + if(event.entityLiving.getRNG().nextInt(1000) == 0) event.entityLiving.dropItem(ModItems.heart_piece, 1); + if(event.entityLiving.getRNG().nextInt(250) == 0) event.entityLiving.dropItem(ModItems.key_red_cracked, 1); } if(event.entityLiving instanceof EntityCyberCrab && event.entityLiving.getRNG().nextInt(500) == 0) { diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index 1d589bf3a..7e2dc368a 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -16,6 +16,7 @@ import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.RenderBlocks; @@ -377,10 +378,14 @@ public class ModEventHandlerRenderer { public void tintFog(FogColors event) { EntityPlayer player = MainRegistry.proxy.me(); - Vec3 color = getFogBlendColor(player.worldObj, (int) Math.floor(player.posX), (int) Math.floor(player.posZ), event.renderPartialTicks); - event.red = (float) color.xCoord; - event.green = (float) color.yCoord; - event.blue = (float) color.zCoord; + if(player.worldObj.getBlock((int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ)).getMaterial() != Material.water) { + Vec3 color = getFogBlendColor(player.worldObj, (int) Math.floor(player.posX), (int) Math.floor(player.posZ), event.red, event.green, event.blue, event.renderPartialTicks); + if(color != null) { + event.red = (float) color.xCoord; + event.green = (float) color.yCoord; + event.blue = (float) color.zCoord; + } + } float soot = (float) (renderSoot - RadiationConfig.sootFogThreshold); float sootColor = 0.15F; @@ -408,9 +413,10 @@ public class ModEventHandlerRenderer { private static int fogX; private static int fogZ; private static Vec3 fogRGBMultiplier; + private static boolean doesBiomeApply = false; /** Same procedure as getting the blended sky color but for fog */ - public static Vec3 getFogBlendColor(World world, int playerX, int playerZ, double partialTicks) { + public static Vec3 getFogBlendColor(World world, int playerX, int playerZ, float red, float green, float blue, double partialTicks) { if(playerX == fogX && playerZ == fogZ && fogInit) return fogRGBMultiplier; @@ -428,11 +434,12 @@ public class ModEventHandlerRenderer { float b = 0F; int divider = 0; + doesBiomeApply = false; for(int x = -distance; x <= distance; x++) { for(int z = -distance; z <= distance; z++) { BiomeGenBase biome = world.getBiomeGenForCoords(playerX + x, playerZ + z); - Vec3 color = getBiomeFogColors(world, biome, partialTicks); + Vec3 color = getBiomeFogColors(world, biome, red, green, blue, partialTicks); r += color.xCoord; g += color.yCoord; b += color.zCoord; @@ -443,17 +450,12 @@ public class ModEventHandlerRenderer { fogX = playerX; fogZ = playerZ; - fogRGBMultiplier = Vec3.createVectorHelper(r / divider, g / divider, b / divider); + if(doesBiomeApply) fogRGBMultiplier = Vec3.createVectorHelper(r / divider, g / divider, b / divider); return fogRGBMultiplier; } /** Returns the current biome's fog color adjusted for brightness if in a crater, or the world's cached fog color if not */ - public static Vec3 getBiomeFogColors(World world, BiomeGenBase biome, double partialTicks) { - - Vec3 worldFog = world.getFogColor((float) partialTicks); - double r = worldFog.xCoord; - double g = worldFog.yCoord; - double b = worldFog.zCoord; + public static Vec3 getBiomeFogColors(World world, BiomeGenBase biome, float r, float g, float b, double partialTicks) { if(biome instanceof BiomeGenCraterBase) { int color = biome.getSkyColorByTemp(biome.temperature); @@ -466,6 +468,8 @@ public class ModEventHandlerRenderer { r *= skyBrightness; g *= skyBrightness; b *= skyBrightness; + + doesBiomeApply = true; } return Vec3.createVectorHelper(r, g, b); diff --git a/src/main/java/com/hbm/packet/AuxButtonPacket.java b/src/main/java/com/hbm/packet/AuxButtonPacket.java index 922b1704a..ee636bda0 100644 --- a/src/main/java/com/hbm/packet/AuxButtonPacket.java +++ b/src/main/java/com/hbm/packet/AuxButtonPacket.java @@ -2,8 +2,6 @@ package com.hbm.packet; import com.hbm.config.MobConfig; import com.hbm.entity.mob.EntityDuck; -import com.hbm.inventory.fluid.FluidType; -import com.hbm.inventory.fluid.Fluids; import com.hbm.items.weapon.ItemMissile.PartSize; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityTickingBase; diff --git a/src/main/java/com/hbm/render/entity/item/RenderFallingBlockNT.java b/src/main/java/com/hbm/render/entity/item/RenderFallingBlockNT.java index e42ebd0f2..ad73dcc96 100644 --- a/src/main/java/com/hbm/render/entity/item/RenderFallingBlockNT.java +++ b/src/main/java/com/hbm/render/entity/item/RenderFallingBlockNT.java @@ -32,27 +32,29 @@ public class RenderFallingBlockNT extends Render { int iY = MathHelper.floor_double(entity.posY); int iZ = MathHelper.floor_double(entity.posZ); - if(block != null && block != world.getBlock(iX, iY, iZ)) { - GL11.glPushMatrix(); - GL11.glTranslated(x, y, z); - this.bindEntityTexture(entity); - GL11.glDisable(GL11.GL_LIGHTING); - - this.renderBlocks.blockAccess = world; - - if(block instanceof BlockFallingNT && ((BlockFallingNT) block).shouldOverrideRenderer()) { - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawingQuads(); - ((BlockFallingNT) block).overrideRenderer(entity, renderBlocks, tessellator); - tessellator.draw(); - } else { - this.renderBlocks.setRenderBoundsFromBlock(block); - this.renderBlocks.renderBlockSandFalling(block, world, iX, iY, iZ, entity.getDataWatcher().getWatchableObjectInt(11)); + GL11.glPushMatrix(); + try { + if(block != null && block != world.getBlock(iX, iY, iZ)) { + GL11.glTranslated(x, y, z); + this.bindEntityTexture(entity); + GL11.glDisable(GL11.GL_LIGHTING); + + this.renderBlocks.blockAccess = world; + + if(block instanceof BlockFallingNT && ((BlockFallingNT) block).shouldOverrideRenderer()) { + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + ((BlockFallingNT) block).overrideRenderer(entity, renderBlocks, tessellator); + tessellator.draw(); + } else { + this.renderBlocks.setRenderBoundsFromBlock(block); + this.renderBlocks.renderBlockSandFalling(block, world, iX, iY, iZ, entity.getDataWatcher().getWatchableObjectInt(11)); + } + + GL11.glEnable(GL11.GL_LIGHTING); } - - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glPopMatrix(); - } + } catch(Exception ex) { } + GL11.glPopMatrix(); } protected ResourceLocation getEntityTexture(EntityFallingBlockNT entity) { diff --git a/src/main/java/com/hbm/render/tileentity/RenderConnector.java b/src/main/java/com/hbm/render/tileentity/RenderConnector.java index bbd6b0c5e..0c829b8ea 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderConnector.java +++ b/src/main/java/com/hbm/render/tileentity/RenderConnector.java @@ -12,6 +12,7 @@ public class RenderConnector extends RenderPylonBase { @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { TileEntityConnector con = (TileEntityConnector) te; + GL11.glEnable(GL11.GL_LIGHTING); GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index f36a62bbf..1256b9d6a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -23,6 +23,8 @@ public class RenderPylon extends RenderPylonBase { public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { TileEntityPylon pyl = (TileEntityPylon)te; + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F - ((1F / 16F) * 14F), (float) z + 0.5F); GL11.glRotatef(180, 0F, 0F, 1F); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylonLarge.java b/src/main/java/com/hbm/render/tileentity/RenderPylonLarge.java index a5fca8bb9..8df4d64fb 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylonLarge.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylonLarge.java @@ -14,6 +14,7 @@ public class RenderPylonLarge extends RenderPylonBase { public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); switch(tile.getBlockMetadata() - BlockDummyable.offset) { case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 1eec40138..3686a7b31 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -274,6 +274,7 @@ public class TileMappings { put(TileEntityHeaterElectric.class, "tileentity_electric_heater"); put(TileEntityHeaterHeatex.class, "tileentity_heater_heatex"); put(TileEntityFurnaceIron.class, "tileentity_furnace_iron"); + put(TileEntityFurnaceBrick.class, "tileentity_furnace_brick"); put(TileEntityFurnaceSteel.class, "tileentity_furnace_steel"); put(TileEntityFurnaceCombination.class, "tileentity_combination_oven"); put(TileEntityStirling.class, "tileentity_stirling"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index c999c9a5a..749487b2b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -57,10 +57,10 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn public int usage; public int progressFluid; - public static final int processFluidTimeBase = 100; + public static final int processFluidTimeBase = 60; public int processFluidTime; public int progressOre; - public static final int processOreTimeBase = 1000; + public static final int processOreTimeBase = 600; public int processOreTime; public MaterialStack leftStack; @@ -167,7 +167,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn toCast.add(this.leftStack); Vec3 impact = Vec3.createVectorHelper(0, 0, 0); - MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 5.875D, yCoord + 2D, zCoord + 0.5D + dir.offsetZ * 5.875D, 6, true, toCast, MaterialShapes.NUGGET.q(1), impact); + MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 5.875D, yCoord + 2D, zCoord + 0.5D + dir.offsetZ * 5.875D, 6, true, toCast, MaterialShapes.NUGGET.q(3), impact); if(didPour != null) { NBTTagCompound data = new NBTTagCompound(); @@ -190,7 +190,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn toCast.add(this.rightStack); Vec3 impact = Vec3.createVectorHelper(0, 0, 0); - MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 5.875D, yCoord + 2D, zCoord + 0.5D + dir.offsetZ * 5.875D, 6, true, toCast, MaterialShapes.NUGGET.q(1), impact); + MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 5.875D, yCoord + 2D, zCoord + 0.5D + dir.offsetZ * 5.875D, 6, true, toCast, MaterialShapes.NUGGET.q(3), impact); if(didPour != null) { NBTTagCompound data = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java new file mode 100644 index 000000000..f31af3b06 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java @@ -0,0 +1,232 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; + +import com.hbm.blocks.machine.MachineBrickFurnace; +import com.hbm.inventory.OreDictManager.DictFrame; +import com.hbm.inventory.container.ContainerFurnaceBrick; +import com.hbm.inventory.gui.GUIFurnaceBrick; +import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumAshType; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.world.World; + +public class TileEntityFurnaceBrick extends TileEntityMachineBase implements IGUIProvider { + + private static final int[] slotsTop = new int[] { 0 }; + private static final int[] slotsBottom = new int[] { 2, 1, 3 }; + private static final int[] slotsSides = new int[] {1}; + + public static HashMap burnSpeed = new HashMap(); + + static { + burnSpeed.put(Items.clay_ball, 4); + burnSpeed.put(ModItems.ball_fireclay, 4); + burnSpeed.put(Item.getItemFromBlock(Blocks.netherrack), 4); + burnSpeed.put(Item.getItemFromBlock(Blocks.cobblestone), 2); + burnSpeed.put(Item.getItemFromBlock(Blocks.sand), 2); + } + + public int burnTime; + public int maxBurnTime; + public int progress; + + public int ashLevelWood; + public int ashLevelCoal; + public int ashLevelMisc; + + public TileEntityFurnaceBrick() { + super(4); + } + + @Override + public String getName() { + return "container.furnaceBrick"; + } + + @Override + + public void updateEntity() { + + if(!worldObj.isRemote) { + boolean wasBurning = this.burnTime > 0; + boolean markDirty = false; + + if(this.burnTime > 0) { + this.burnTime--; + } + + if(this.burnTime != 0 || this.slots[1] != null && this.slots[0] != null) { + if(this.burnTime == 0 && this.canSmelt()) { + this.maxBurnTime = this.burnTime = TileEntityFurnace.getItemBurnTime(this.slots[1]); + + if(this.burnTime > 0) { + markDirty = true; + + if(this.slots[1] != null) { + this.slots[1].stackSize--; + + EnumAshType type = TileEntityFireboxBase.getAshFromFuel(slots[1]); + if(type == EnumAshType.WOOD) ashLevelWood += burnTime; + if(type == EnumAshType.COAL) ashLevelCoal += burnTime; + if(type == EnumAshType.MISC) ashLevelMisc += burnTime; + int threshold = 2000; + if(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold; + if(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold; + if(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold; + + if(this.slots[1].stackSize == 0) { + this.slots[1] = slots[1].getItem().getContainerItem(slots[1]); + } + } + } + } + + if(this.burnTime > 0 && this.canSmelt()) { + this.progress += this.getBurnSpeed(); + + if(this.progress >= 200) { + this.progress = 0; + this.smeltItem(); + markDirty = true; + } + } else { + this.progress = 0; + } + } + + if(wasBurning != this.burnTime > 0) { + markDirty = true; + MachineBrickFurnace.updateBlockState(this.burnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + + if(markDirty) { + this.markDirty(); + } + + this.networkPackNT(15); + } + } + + public int getBurnSpeed() { + Integer speed = burnSpeed.get(slots[0].getItem()); + if(speed != null) return speed; + return 1; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return slot >= 2 ? false : (slot == 1 ? TileEntityFurnace.getItemBurnTime(stack) > 0 : true); + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return side == 0 ? slotsBottom : (side == 1 ? slotsTop : slotsSides); + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(burnTime); + buf.writeInt(maxBurnTime); + buf.writeInt(progress); + } + + @Override public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.burnTime = buf.readInt(); + this.maxBurnTime = buf.readInt(); + this.progress = buf.readInt(); + } + + protected boolean processAsh(int level, EnumAshType type, int threshold) { + + if(level >= threshold) { + if(slots[3] == null) { + slots[3] = DictFrame.fromOne(ModItems.powder_ash, type); + return true; + } else if(slots[3].stackSize < slots[3].getMaxStackSize() && slots[3].getItem() == ModItems.powder_ash && slots[3].getItemDamage() == type.ordinal()) { + slots[3].stackSize++; + return true; + } + } + + return false; + } + + private boolean canSmelt() { + if(this.slots[0] == null) { + return false; + } else { + ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); + if(itemstack == null) + return false; + if(this.slots[2] == null) + return true; + if(!this.slots[2].isItemEqual(itemstack)) + return false; + int result = slots[2].stackSize + itemstack.stackSize; + return result <= getInventoryStackLimit() && result <= this.slots[2].getMaxStackSize(); + } + } + + public void smeltItem() { + if(this.canSmelt()) { + ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); + + if(this.slots[2] == null) { + this.slots[2] = itemstack.copy(); + } else if(this.slots[2].getItem() == itemstack.getItem()) { + this.slots[2].stackSize += itemstack.stackSize; + } + + --this.slots[0].stackSize; + + if(this.slots[0].stackSize <= 0) { + this.slots[0] = null; + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.burnTime = nbt.getInteger("burnTime"); + this.maxBurnTime = nbt.getInteger("maxBurn"); + this.progress = nbt.getInteger("progress"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("burnTime", this.burnTime); + nbt.setInteger("maxBurn", this.maxBurnTime); + nbt.setInteger("progress", this.progress); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerFurnaceBrick(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen 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/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index b30350152..c85bb845d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -36,7 +36,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI public int progress; public int processingTime; - public static final int baseTime = 200; + public static final int baseTime = 160; public ModuleBurnTime burnModule; @@ -63,7 +63,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI if(!worldObj.isRemote) { UpgradeManager.eval(slots, 4, 4); - this.processingTime = baseTime - (100 * Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3) / 3); + this.processingTime = baseTime - ((baseTime / 2) * Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3) / 3); wasOn = false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 321ea65dc..ac6265b3a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -29,6 +29,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; +import com.hbm.util.InventoryUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -673,7 +674,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements if(inv instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) inv; - access = CraneInserter.masquerade(sided, dir.ordinal()); + access = InventoryUtil.masquerade(sided, dir.ordinal()); } for(ItemStack item : items) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index f43773020..b53f86839 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -17,6 +17,8 @@ import com.hbm.items.ModItems; import com.hbm.items.tool.ItemCoordinateBase; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.packet.BufPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.saveddata.SatelliteSavedData; import com.hbm.saveddata.satellites.Satellite; import com.hbm.saveddata.satellites.SatelliteHorizons; @@ -35,6 +37,7 @@ import api.hbm.entity.IRadarDetectable; import api.hbm.entity.IRadarDetectableNT; import api.hbm.entity.IRadarDetectableNT.RadarScanParams; import api.hbm.entity.RadarEntry; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -205,6 +208,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I screen.refZ = zCoord; screen.range = this.getRange(); screen.linked = true; + PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, pos.getX(), pos.getY(), pos.getZ(), 25)); } } } @@ -512,7 +516,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { return false; } else { - return player.getDistance(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; + return true; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index d4a1f7700..e2d9fc11f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -187,7 +187,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(level >= threshold) { if(slots[1] == null) { slots[1] = DictFrame.fromOne(ModItems.powder_ash, type); - ashLevelWood -= threshold; return true; } else if(slots[1].stackSize < slots[1].getMaxStackSize() && slots[1].getItem() == ModItems.powder_ash && slots[1].getItemDamage() == type.ordinal()) { slots[1].stackSize++; 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 ebb5b49e1..5e34651e2 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -128,6 +128,8 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements tank.loadTank(2, 3, slots); tank.setType(0, 1, slots); + } else { + for(DirPos pos : getConPos()) this.tryUnsubscribe(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ()); } byte comp = this.getComparatorPower(); //comparator shit diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index cec453cd8..e5878bfb3 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -9,6 +9,8 @@ import com.hbm.inventory.gui.GUICraneGrabber; import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.InventoryUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -81,7 +83,7 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP if(te instanceof ISidedInventory) { sided = (ISidedInventory) te; - access = CraneInserter.masquerade(sided, outputSide.getOpposite().ordinal()); + access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal()); } if(te instanceof IInventory) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 9de4fb7fc..b98985bc2 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -4,6 +4,8 @@ import com.hbm.blocks.network.CraneInserter; import com.hbm.inventory.container.ContainerCraneInserter; import com.hbm.inventory.gui.GUICraneInserter; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.InventoryUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; @@ -42,7 +44,7 @@ public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUI if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); - access = CraneInserter.masquerade(sided, outputSide.getOpposite().ordinal()); + access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal()); } if(te instanceof IInventory) { diff --git a/src/main/java/com/hbm/util/InventoryUtil.java b/src/main/java/com/hbm/util/InventoryUtil.java index 4e6a27661..97cc2bfe7 100644 --- a/src/main/java/com/hbm/util/InventoryUtil.java +++ b/src/main/java/com/hbm/util/InventoryUtil.java @@ -4,16 +4,27 @@ import java.util.List; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilOutput; +import com.hbm.tileentity.machine.TileEntityFurnaceBrick; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; import net.minecraftforge.oredict.OreDictionary; //'t was about time public class InventoryUtil { + public static int[] masquerade(ISidedInventory sided, int side) { + + if(sided instanceof TileEntityFurnace) return new int[] {1, 0}; + if(sided instanceof TileEntityFurnaceBrick) return new int[] {1, 0, 3}; + + return sided.getAccessibleSlotsFromSide(side); + } + /** * Will attempt to cram a much of the given itemstack into the stack array as possible * The rest will be returned diff --git a/src/main/java/com/hbm/util/ItemStackUtil.java b/src/main/java/com/hbm/util/ItemStackUtil.java index 313e9bad3..1ab7af389 100644 --- a/src/main/java/com/hbm/util/ItemStackUtil.java +++ b/src/main/java/com/hbm/util/ItemStackUtil.java @@ -2,12 +2,17 @@ package com.hbm.util; import java.util.ArrayList; import java.util.List; +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; public class ItemStackUtil { @@ -161,4 +166,36 @@ public class ItemStackUtil { return list; } + + public static void spillItems(World world, int x, int y, int z, Block block, Random rand) { + IInventory tileentityfurnace = (IInventory) world.getTileEntity(x, y, z); + + if(tileentityfurnace != null) { + for(int slot = 0; slot < tileentityfurnace.getSizeInventory(); ++slot) { + ItemStack itemstack = tileentityfurnace.getStackInSlot(slot); + + if(itemstack != null) { + float oX = rand.nextFloat() * 0.8F + 0.1F; + float oY = rand.nextFloat() * 0.8F + 0.1F; + float oZ = rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + int j1 = rand.nextInt(21) + 10; + if(j1 > itemstack.stackSize) j1 = itemstack.stackSize; + itemstack.stackSize -= j1; + + EntityItem entityitem = new EntityItem(world, x + oX, y + oY, z + oZ, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + if(itemstack.hasTagCompound()) entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + + float motion = 0.05F; + entityitem.motionX = (float) rand.nextGaussian() * motion; + entityitem.motionY = (float) rand.nextGaussian() * motion + 0.2F; + entityitem.motionZ = (float) rand.nextGaussian() * motion; + world.spawnEntityInWorld(entityitem); + } + } + } + world.func_147453_f(x, y, z, block); + } + } } diff --git a/src/main/java/com/hbm/util/TrackerUtil.java b/src/main/java/com/hbm/util/TrackerUtil.java index 62140046e..5990c8b21 100644 --- a/src/main/java/com/hbm/util/TrackerUtil.java +++ b/src/main/java/com/hbm/util/TrackerUtil.java @@ -47,7 +47,7 @@ public class TrackerUtil { if(world instanceof WorldServer) { WorldServer server = (WorldServer) world; EntityTrackerEntry entry = getTrackerEntry(server, e.getEntityId()); - entry.blocksDistanceThreshold = range; + if(entry != null) entry.blocksDistanceThreshold = range; } } } diff --git a/src/main/java/com/hbm/world/feature/DeepLayer.java b/src/main/java/com/hbm/world/feature/DeepLayer.java deleted file mode 100644 index 18ddb5d57..000000000 --- a/src/main/java/com/hbm/world/feature/DeepLayer.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.hbm.world.feature; - -import java.util.Random; - -import com.hbm.blocks.ModBlocks; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.world.World; -import net.minecraft.world.gen.NoiseGeneratorPerlin; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; - -public class DeepLayer { - - NoiseGeneratorPerlin noise; - - @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { - - World world = event.world; - if(world.provider == null || world.provider.dimensionId != 0) return; - - if(this.noise == null) { - this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 19), 4); - } - - int cX = event.chunkX; - int cZ = event.chunkZ; - - double scale = 0.01D; - int threshold = 2; - - for(int x = cX + 8; x < cX + 24; x++) { - for(int z = cZ + 8; z < cZ + 24; z++) { - - double n = noise.func_151601_a(x * scale, z * scale); - - if(n > threshold) { - int range = (int)((n - threshold) * 8); - - if(range > 24) - range = 48 - range; - - if(range < 0) - continue; - - for(int y = 1; y <= range; y++) { - - Block target = world.getBlock(x, y, z); - - if(target.isNormalCube() && target.getMaterial() == Material.rock && target.isReplaceableOreGen(world, x, y, z, Blocks.stone)) { - - boolean lava = false; - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - Block neighbor = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); - if(neighbor.getMaterial() == Material.lava) { - lava = true; - break; - } - } - - if(lava || world.rand.nextInt(10) == 0) { - world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 1, 2); - } else if(world.rand.nextInt(10) == 0 && world.getBlock(x, y + 1, z).getMaterial() == Material.air) { - world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 2, 2); - } else { - world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 0, 2); - } - } - } - } - } - } - } -} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 3a7ac08cf..825ebcafd 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -323,6 +323,7 @@ container.factoryTitanium=Einfache Fabrik container.fluidtank=Tank container.forceField=Kraftfeldgenerator container.frackingTower=Hydraulischer Frackingturm +container.furnaceBrick=Ziegelofen container.furnaceCombination=Kombinationsofen container.furnaceIron=Eiserner Ofen container.furnaceSteel=Stahlofen @@ -1301,6 +1302,7 @@ item.bomb_caller.name=Luftschlag Zielmarker item.bomb_waffle.name=Massenvernichtungswaffel item.guide_book.name=Handbuch item.book_of_.name=Das Buch der Güterwagons +item.book_lemegeton.name=Lemegeton item.book_secret.name=3-596-50802-9 item.bottle2_empty.name=Leere Glasflasche item.bottle2_fritz.name=Fritz-Kola @@ -1472,6 +1474,7 @@ item.chopper_head.name=Jagdschrauber Cockpit item.chopper_tail.name=Jagdschrauber Heck item.chopper_torso.name=Jagdschrauber Rumpf item.chopper_wing.name=Jagdschrauber Seitentragfläche +item.chunk_ore.rare.name=Seltenerdenerz-Brocken item.cigarette.name=FFI-Markenzigarette item.cinnebar.name=Zinnober item.circuit_aluminium.name=Einfacher Schaltkreis @@ -1674,7 +1677,7 @@ item.debris_fuel.name=RBMK-Kernbrennstoffbrocken item.debris_graphite.name=Heißer Graphitbrocken item.debris_metal.name=Gebrochene Metallleiste item.debris_shrapnel.name=Wartungssteg-Schrapnell -item.definitelyfood.name=GarantiertKeinDreck-Marken Feldration +item.definitelyfood.name=Feldration item.defuser.name=High-Tech Bombenentschärfungsgerät item.defuser_gold.name=Goldener Seitenschneider item.demon_core_closed.name=Bedeckter Dämonenkern @@ -1735,6 +1738,7 @@ item.drone.request.name=Logistikdrone item.drone_linker.name=Transportdronen-Linker item.ducttape.name=Klebeband item.dust.name=Staub +item.dwarven_pickaxe.name=Zwergenspitzhacke item.dynosphere_base.name=Blanke Dynosphere item.dynosphere_desh.name=Desh-Dynosphere item.dynosphere_desh_charged.name=Desh-Dynosphere (Geladen) @@ -2212,6 +2216,7 @@ item.key.name=Schlüssel item.key_fake.name=Gefälschter Schlüssel item.key_kit.name=Schlüssel-Imitationskit item.key_red.name=Roter Schlüssel +item.key_red_cracked.name=Zerbrochener Schlüssel item.kit_toolbox.name=Werkzeugkasten item.kit_toolbox_empty.name=Leerer Werkzeugkasten item.laser_crystal_bismuth.desc=Bismuth-Samarium-Uran-Thorium-Kristallmatrix @@ -3945,6 +3950,8 @@ tile.frozen_dirt.name=Gefrorene Erde tile.frozen_grass.name=Gefrorenes Gras tile.frozen_log.name=Gefrorener Baumstamm tile.frozen_planks.name=Gefrorene Holzbretter +tile.machine_furnace_brick_off.name=Ziegelofen +tile.machine_furnace_brick_on.name=Ziegelofen tile.furnace_combination.name=Kombinationsofen tile.furnace_combination.desc=Großer Ofen welcher Holzhokle und Kohlekoks herstellen kann.$Erzeugt flüssige Nebenprodukte.$Wärmetransferrate: ΔT*0.25 TU/t tile.furnace_iron.name=Eiserner Ofen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1ca85dd75..bd97239b7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -682,6 +682,7 @@ container.fluidtank=Tank container.fileCabinet=Filing Cabinet container.forceField=Forcefield Emitter container.frackingTower=Hydraulic Fracking Tower +container.furnaceBrick=Bricked Furnace container.furnaceCombination=Combination Oven container.furnaceIron=Iron Furnace container.furnaceSteel=Steel Furnace @@ -1969,6 +1970,7 @@ item.bomb_caller.name=Airstrike Designator item.bomb_waffle.name=Waffle of Mass Destruction item.book_guide.name=Guide Book item.book_of_.name=The Book of Boxcars +item.book_lemegeton.name=Lemegeton item.book_secret.name=3-596-50802-9 item.bottle2_empty.name=Empty Bottle item.bottle2_fritz.name=Fritz Cola @@ -2169,6 +2171,7 @@ item.chopper_head.name=Hunter Chopper Cockpit item.chopper_tail.name=Hunter Chopper Tail item.chopper_torso.name=Hunter Chopper Body item.chopper_wing.name=Hunter Chopper Wing +item.chunk_ore.rare.name=Rare Earth Ore Chunk item.cigarette.name=FFI-Brand Cigarette item.cinnebar.name=Cinnabar item.circuit_aluminium.name=Basic Circuit @@ -2378,7 +2381,7 @@ item.debris_fuel.name=RBMK Fuel Chunk item.debris_graphite.name=Hot Graphite Chunk item.debris_metal.name=Broken Metal Bar item.debris_shrapnel.name=Walkway Shrapnel -item.definitelyfood.name=TotallyNotDirt-Brand MRE +item.definitelyfood.name=MRE item.defuser.name=High-Tech Bomb Defusing Device item.defuser_gold.name=Golden Wire Cutter item.demon_core_closed.name=Closed Demon Core @@ -2444,6 +2447,7 @@ item.dust.name=Dust item.dust.desc=I hate dust! item.dust.desc.P11=Another one bites the dust! item.dust_tiny.name=Tiny Pile of Dust +item.dwarven_pickaxe.name=Dwarven Pickaxe item.dynosphere_base.name=Blank Dynosphere item.dynosphere_desh.name=Desh Dynosphere item.dynosphere_desh_charged.name=Desh Dynosphere (Charged) @@ -2960,6 +2964,9 @@ item.key_kit.name=Key Imitation Kit item.key_red.name=Red Key item.key_red.desc=Explore the other side. item.key_red.desc.P11=§4e§r +item.key_red_cracked.name=Cracked Key +item.key_red_cracked.desc=??? +item.key_red.key_red_cracked.P11=§4???§r item.kit_toolbox.name=Toolbox item.kit_toolbox_empty.name=Empty Toolbox item.laser_crystal_bismuth.desc=Bismuth-Samarium-Uranium-Thorium crystal matrix @@ -4939,6 +4946,8 @@ tile.frozen_dirt.name=Frozen Dirt tile.frozen_grass.name=Frozen Grass tile.frozen_log.name=Frozen Log tile.frozen_planks.name=Frozen Planks +tile.machine_furnace_brick_off.name=Bricked Furnace +tile.machine_furnace_brick_on.name=Bricked Furnace tile.furnace_combination.name=Combination Oven tile.furnace_combination.desc=A large furnace that can produce charcoal and coal coke.$Produces fluid byproducts.$Heat transfer rate: ΔT*0.25 TU/t tile.furnace_iron.name=Iron Furnace diff --git a/src/main/resources/assets/hbm/models/machines/hydrotreater.obj b/src/main/resources/assets/hbm/models/machines/hydrotreater.obj new file mode 100644 index 000000000..ff351449e --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/hydrotreater.obj @@ -0,0 +1,2311 @@ +# Blender v2.79 (sub 0) OBJ File: 'hydrotreater.blend' +# www.blender.org +o Plane +v -1.500000 0.000000 1.500000 +v 1.500000 0.000000 1.500000 +v -1.500000 0.000000 -1.500000 +v 1.500000 0.000000 -1.500000 +v -1.500000 1.000000 1.500000 +v 1.500000 1.000000 1.500000 +v -1.500000 1.000000 -1.500000 +v 1.500000 1.000000 -1.500000 +v 1.500000 0.125000 1.375000 +v 1.500000 0.125000 -1.375000 +v 1.500000 0.875000 1.375000 +v 1.500000 0.875000 -1.375000 +v 1.375000 0.125000 1.375000 +v 1.375000 0.125000 -1.375000 +v 1.375000 0.875000 1.375000 +v 1.375000 0.875000 -1.375000 +v -1.500000 0.125000 -1.375000 +v -1.500000 0.125000 1.375000 +v -1.500000 0.875000 -1.375000 +v -1.500000 0.875000 1.375000 +v -1.375000 0.125000 -1.375000 +v -1.375000 0.125000 1.375000 +v -1.375000 0.875000 -1.375000 +v -1.375000 0.875000 1.375000 +v 1.375000 0.125000 -1.500000 +v -1.375000 0.125000 -1.500000 +v 1.375000 0.875000 -1.500000 +v -1.375000 0.875000 -1.500000 +v 1.375000 0.125000 -1.375000 +v -1.375000 0.125000 -1.375000 +v 1.375000 0.875000 -1.375000 +v -1.375000 0.875000 -1.375000 +v -1.375000 0.125000 1.500000 +v 1.375000 0.125000 1.500000 +v -1.375000 0.875000 1.500000 +v 1.375000 0.875000 1.500000 +v -1.375000 0.125000 1.375000 +v 1.375000 0.125000 1.375000 +v -1.375000 0.875000 1.375000 +v 1.375000 0.875000 1.375000 +v 0.000000 6.000000 -1.500000 +v -0.574025 6.000000 -1.385819 +v -1.060660 6.000000 -1.060660 +v -1.385819 6.000000 -0.574025 +v -1.500000 6.000000 0.000000 +v -1.385819 6.000000 0.574025 +v -1.060660 6.000000 1.060660 +v -0.574025 6.000000 1.385819 +v -0.000000 6.000000 1.500000 +v 0.574025 6.000000 1.385819 +v 1.060660 6.000000 1.060660 +v 1.385819 6.000000 0.574025 +v 1.500000 6.000000 0.000000 +v 1.385819 6.000000 -0.574025 +v 1.060660 6.000000 -1.060660 +v 0.574024 6.000000 -1.385820 +v 0.000000 5.500000 -1.500000 +v -0.574025 5.500000 -1.385819 +v -1.060660 5.500000 -1.060660 +v -1.385819 5.500000 -0.574025 +v -1.500000 5.500000 0.000000 +v -1.385819 5.500000 0.574025 +v -1.060660 5.500000 1.060660 +v -0.574025 5.500000 1.385819 +v -0.000000 5.500000 1.500000 +v 0.574025 5.500000 1.385819 +v 1.060660 5.500000 1.060660 +v 1.385819 5.500000 0.574025 +v 1.500000 5.500000 0.000000 +v 1.385819 5.500000 -0.574025 +v 1.060660 5.500000 -1.060660 +v 0.574024 5.500000 -1.385820 +v -0.000000 6.000000 -1.125000 +v -0.430519 6.000000 -1.039364 +v -0.795495 6.000000 -0.795495 +v -1.039364 6.000000 -0.430519 +v -1.125000 6.000000 0.000000 +v -1.039364 6.000000 0.430519 +v -0.795495 6.000000 0.795495 +v -0.430519 6.000000 1.039364 +v -0.000000 6.000000 1.125000 +v 0.430519 6.000000 1.039365 +v 0.795495 6.000000 0.795496 +v 1.039364 6.000000 0.430519 +v 1.125000 6.000000 0.000000 +v 1.039364 6.000000 -0.430519 +v 0.795495 6.000000 -0.795496 +v 0.430518 6.000000 -1.039365 +v -0.000000 7.000000 -0.750000 +v -0.287013 7.000000 -0.692910 +v -0.530330 7.000000 -0.530330 +v -0.692910 7.000000 -0.287013 +v -0.750000 7.000000 0.000000 +v -0.692910 7.000000 0.287013 +v -0.530330 7.000000 0.530330 +v -0.287013 7.000000 0.692910 +v -0.000000 7.000000 0.750000 +v 0.287012 7.000000 0.692910 +v 0.530330 7.000000 0.530330 +v 0.692909 7.000000 0.287013 +v 0.750000 7.000000 0.000000 +v 0.692909 7.000000 -0.287013 +v 0.530330 7.000000 -0.530330 +v 0.287012 7.000000 -0.692910 +v 0.000000 2.000000 -1.500000 +v -0.574025 2.000000 -1.385819 +v -1.060660 2.000000 -1.060660 +v -1.385819 2.000000 -0.574025 +v -1.500000 2.000000 0.000000 +v -1.385819 2.000000 0.574025 +v -1.060660 2.000000 1.060660 +v -0.574025 2.000000 1.385819 +v -0.000000 2.000000 1.500000 +v 0.574025 2.000000 1.385819 +v 1.060660 2.000000 1.060660 +v 1.385819 2.000000 0.574025 +v 1.500000 2.000000 0.000000 +v 1.385819 2.000000 -0.574025 +v 1.060660 2.000000 -1.060660 +v 0.574024 2.000000 -1.385820 +v 0.000000 2.500000 -1.500000 +v -0.574025 2.500000 -1.385819 +v -1.060660 2.500000 -1.060660 +v -1.385819 2.500000 -0.574025 +v -1.500000 2.500000 0.000000 +v -1.385819 2.500000 0.574025 +v -1.060660 2.500000 1.060660 +v -0.574025 2.500000 1.385819 +v -0.000000 2.500000 1.500000 +v 0.574025 2.500000 1.385819 +v 1.060660 2.500000 1.060660 +v 1.385819 2.500000 0.574025 +v 1.500000 2.500000 0.000000 +v 1.385819 2.500000 -0.574025 +v 1.060660 2.500000 -1.060660 +v 0.574024 2.500000 -1.385820 +v -0.000000 2.500000 -1.375000 +v -0.526190 2.500000 -1.270334 +v -0.972272 2.500000 -0.972272 +v -1.270334 2.500000 -0.526190 +v -1.375000 2.500000 0.000000 +v -1.270334 2.500000 0.526190 +v -0.972272 2.500000 0.972272 +v -0.526190 2.500000 1.270334 +v -0.000000 2.500000 1.375000 +v 0.526189 2.500000 1.270334 +v 0.972272 2.500000 0.972272 +v 1.270334 2.500000 0.526190 +v 1.375000 2.500000 0.000000 +v 1.270334 2.500000 -0.526190 +v 0.972271 2.500000 -0.972272 +v 0.526189 2.500000 -1.270335 +v -0.000000 5.500000 -1.375000 +v -0.526190 5.500000 -1.270334 +v -0.972272 5.500000 -0.972272 +v -1.270334 5.500000 -0.526190 +v -1.375000 5.500000 0.000000 +v -1.270334 5.500000 0.526190 +v -0.972272 5.500000 0.972272 +v -0.526190 5.500000 1.270334 +v -0.000000 5.500000 1.375000 +v 0.526189 5.500000 1.270334 +v 0.972272 5.500000 0.972272 +v 1.270334 5.500000 0.526190 +v 1.375000 5.500000 0.000000 +v 1.270334 5.500000 -0.526190 +v 0.972271 5.500000 -0.972272 +v 0.526189 5.500000 -1.270335 +v -0.000000 2.000000 -1.125000 +v -0.430519 2.000000 -1.039364 +v -0.795495 2.000000 -0.795495 +v -1.039364 2.000000 -0.430519 +v -1.125000 2.000000 0.000000 +v -1.039364 2.000000 0.430519 +v -0.795495 2.000000 0.795495 +v -0.430519 2.000000 1.039364 +v -0.000000 2.000000 1.125000 +v 0.430519 2.000000 1.039365 +v 0.795495 2.000000 0.795496 +v 1.039364 2.000000 0.430519 +v 1.125000 2.000000 0.000000 +v 1.039364 2.000000 -0.430519 +v 0.795495 2.000000 -0.795496 +v 0.430518 2.000000 -1.039365 +v -0.000000 1.000000 -1.125000 +v -0.430519 1.000000 -1.039364 +v -0.795495 1.000000 -0.795495 +v -1.039364 1.000000 -0.430519 +v -1.125000 1.000000 0.000000 +v -1.039364 1.000000 0.430519 +v -0.795495 1.000000 0.795495 +v -0.430519 1.000000 1.039364 +v -0.000000 1.000000 1.125000 +v 0.430519 1.000000 1.039365 +v 0.795495 1.000000 0.795496 +v 1.039364 1.000000 0.430519 +v 1.125000 1.000000 0.000000 +v 1.039364 1.000000 -0.430519 +v 0.795495 1.000000 -0.795496 +v 0.430518 1.000000 -1.039365 +v 1.250368 1.000000 0.121265 +v 1.156535 1.000000 0.139929 +v 1.103383 1.000000 0.219477 +v 1.122048 1.000000 0.313309 +v 1.201595 1.000000 0.366461 +v 1.295428 1.000000 0.347796 +v 1.348580 1.000000 0.268249 +v 1.329915 1.000000 0.174417 +v 1.250368 2.000000 0.121265 +v 1.156535 2.000000 0.139929 +v 1.103383 2.000000 0.219477 +v 1.122048 2.000000 0.313309 +v 1.201595 2.000000 0.366461 +v 1.295428 2.000000 0.347796 +v 1.348580 2.000000 0.268249 +v 1.329915 2.000000 0.174417 +v 1.201595 1.000000 -0.366461 +v 1.122048 1.000000 -0.313309 +v 1.103383 1.000000 -0.219477 +v 1.156535 1.000000 -0.139929 +v 1.250368 1.000000 -0.121265 +v 1.329915 1.000000 -0.174417 +v 1.348580 1.000000 -0.268250 +v 1.295428 1.000000 -0.347796 +v 1.201595 2.000000 -0.366461 +v 1.122048 2.000000 -0.313309 +v 1.103383 2.000000 -0.219477 +v 1.156535 2.000000 -0.139929 +v 1.250368 2.000000 -0.121265 +v 1.329915 2.000000 -0.174417 +v 1.348580 2.000000 -0.268250 +v 1.295428 2.000000 -0.347796 +v -1.250368 1.000000 -0.121264 +v -1.156535 1.000000 -0.139929 +v -1.103383 1.000000 -0.219477 +v -1.122048 1.000000 -0.313309 +v -1.201595 1.000000 -0.366461 +v -1.295428 1.000000 -0.347796 +v -1.348580 1.000000 -0.268249 +v -1.329915 1.000000 -0.174417 +v -1.250368 2.000000 -0.121264 +v -1.156535 2.000000 -0.139929 +v -1.103383 2.000000 -0.219477 +v -1.122048 2.000000 -0.313309 +v -1.201595 2.000000 -0.366461 +v -1.295428 2.000000 -0.347796 +v -1.348580 2.000000 -0.268249 +v -1.329915 2.000000 -0.174417 +v -1.201595 1.000000 0.366461 +v -1.122048 1.000000 0.313309 +v -1.103383 1.000000 0.219477 +v -1.156535 1.000000 0.139929 +v -1.250368 1.000000 0.121265 +v -1.329915 1.000000 0.174417 +v -1.348580 1.000000 0.268250 +v -1.295428 1.000000 0.347797 +v -1.201595 2.000000 0.366461 +v -1.122048 2.000000 0.313309 +v -1.103383 2.000000 0.219477 +v -1.156535 2.000000 0.139929 +v -1.250368 2.000000 0.121265 +v -1.329915 2.000000 0.174417 +v -1.348580 2.000000 0.268250 +v -1.295428 2.000000 0.347797 +v 0.121265 1.000000 -1.250368 +v 0.139929 1.000000 -1.156535 +v 0.219477 1.000000 -1.103384 +v 0.313309 1.000000 -1.122048 +v 0.366461 1.000000 -1.201595 +v 0.347796 1.000000 -1.295428 +v 0.268249 1.000000 -1.348580 +v 0.174417 1.000000 -1.329915 +v 0.121265 2.000000 -1.250368 +v 0.139929 2.000000 -1.156535 +v 0.219477 2.000000 -1.103384 +v 0.313309 2.000000 -1.122048 +v 0.366461 2.000000 -1.201595 +v 0.347796 2.000000 -1.295428 +v 0.268249 2.000000 -1.348580 +v 0.174417 2.000000 -1.329915 +v -0.366461 1.000000 -1.201595 +v -0.313309 1.000000 -1.122048 +v -0.219477 1.000000 -1.103384 +v -0.139929 1.000000 -1.156535 +v -0.121265 1.000000 -1.250368 +v -0.174417 1.000000 -1.329915 +v -0.268249 1.000000 -1.348580 +v -0.347797 1.000000 -1.295428 +v -0.366461 2.000000 -1.201595 +v -0.313309 2.000000 -1.122048 +v -0.219477 2.000000 -1.103384 +v -0.139929 2.000000 -1.156535 +v -0.121265 2.000000 -1.250368 +v -0.174417 2.000000 -1.329915 +v -0.268249 2.000000 -1.348580 +v -0.347797 2.000000 -1.295428 +v -0.121265 1.000000 1.250368 +v -0.139929 1.000000 1.156535 +v -0.219476 1.000000 1.103384 +v -0.313309 1.000000 1.122048 +v -0.366461 1.000000 1.201595 +v -0.347796 1.000000 1.295428 +v -0.268249 1.000000 1.348580 +v -0.174416 1.000000 1.329915 +v -0.121265 2.000000 1.250368 +v -0.139929 2.000000 1.156535 +v -0.219476 2.000000 1.103384 +v -0.313309 2.000000 1.122048 +v -0.366461 2.000000 1.201595 +v -0.347796 2.000000 1.295428 +v -0.268249 2.000000 1.348580 +v -0.174416 2.000000 1.329915 +v 0.366461 1.000000 1.201595 +v 0.313309 1.000000 1.122048 +v 0.219477 1.000000 1.103384 +v 0.139929 1.000000 1.156535 +v 0.121265 1.000000 1.250368 +v 0.174417 1.000000 1.329915 +v 0.268250 1.000000 1.348579 +v 0.347797 1.000000 1.295428 +v 0.366461 2.000000 1.201595 +v 0.313309 2.000000 1.122048 +v 0.219477 2.000000 1.103384 +v 0.139929 2.000000 1.156535 +v 0.121265 2.000000 1.250368 +v 0.174417 2.000000 1.329915 +v 0.268250 2.000000 1.348579 +v 0.347797 2.000000 1.295428 +v 1.325825 1.000000 0.972272 +v 1.149049 1.000000 0.899048 +v 0.972272 1.000000 0.972272 +v 0.899049 1.000000 1.149049 +v 0.972272 1.000000 1.325825 +v 1.149049 1.000000 1.399049 +v 1.325825 1.000000 1.325825 +v 1.399049 1.000000 1.149049 +v 1.325825 3.000000 0.972272 +v 1.149049 3.000000 0.899048 +v 0.972272 3.000000 0.972272 +v 0.899049 3.000000 1.149049 +v 0.972272 3.000000 1.325825 +v 1.149049 3.000000 1.399049 +v 1.325825 3.000000 1.325825 +v 1.399049 3.000000 1.149049 +v 1.274048 3.176777 0.920495 +v 1.133883 3.051777 0.883883 +v 0.883883 3.051777 1.133883 +v 0.920495 3.176777 1.274048 +v 1.060660 3.301777 1.310660 +v 1.222272 3.353553 1.222272 +v 1.310660 3.301777 1.060660 +v 1.149048 3.250000 0.795495 +v 1.097272 3.073223 0.847272 +v 0.847272 3.073223 1.097272 +v 0.795495 3.250000 1.149048 +v 0.847272 3.426777 1.097272 +v 0.972272 3.500000 0.972272 +v 1.097272 3.426777 0.847272 +v 1.008884 3.073223 0.758883 +v 1.060660 3.250000 0.707107 +v 0.707107 3.250000 1.060660 +v 0.758884 3.073223 1.008883 +v 0.758884 3.426777 1.008883 +v 0.883884 3.500000 0.883883 +v 1.008884 3.426777 0.758883 +v 0.883883 3.000000 0.883883 +v -1.325825 1.000000 -0.972271 +v -1.149049 1.000000 -0.899048 +v -0.972272 1.000000 -0.972272 +v -0.899049 1.000000 -1.149049 +v -0.972272 1.000000 -1.325825 +v -1.149049 1.000000 -1.399049 +v -1.325825 1.000000 -1.325825 +v -1.399049 1.000000 -1.149049 +v -1.325825 3.000000 -0.972271 +v -1.149049 3.000000 -0.899048 +v -0.972272 3.000000 -0.972272 +v -0.899049 3.000000 -1.149049 +v -0.972272 3.000000 -1.325825 +v -1.149049 3.000000 -1.399049 +v -1.325825 3.000000 -1.325825 +v -1.399049 3.000000 -1.149049 +v -1.274049 3.176777 -0.920495 +v -1.133883 3.051777 -0.883883 +v -0.883884 3.051777 -1.133883 +v -0.920495 3.176777 -1.274048 +v -1.060660 3.301777 -1.310660 +v -1.222272 3.353553 -1.222271 +v -1.310660 3.301777 -1.060660 +v -1.149049 3.250000 -0.795495 +v -1.097272 3.073223 -0.847272 +v -0.847272 3.073223 -1.097272 +v -0.795495 3.250000 -1.149048 +v -0.847272 3.426777 -1.097272 +v -0.972272 3.500000 -0.972272 +v -1.097272 3.426777 -0.847272 +v -1.008884 3.073223 -0.758883 +v -1.060660 3.250000 -0.707107 +v -0.707107 3.250000 -1.060660 +v -0.758884 3.073223 -1.008883 +v -0.758884 3.426777 -1.008883 +v -0.883884 3.500000 -0.883883 +v -1.008884 3.426777 -0.758883 +v -0.883883 3.000000 -0.883883 +v 0.972272 1.000000 -1.325825 +v 0.899048 1.000000 -1.149049 +v 0.972272 1.000000 -0.972272 +v 1.149049 1.000000 -0.899049 +v 1.325825 1.000000 -0.972272 +v 1.399049 1.000000 -1.149049 +v 1.325825 1.000000 -1.325825 +v 1.149048 1.000000 -1.399049 +v 0.972272 3.000000 -1.325825 +v 0.899048 3.000000 -1.149049 +v 0.972272 3.000000 -0.972272 +v 1.149049 3.000000 -0.899049 +v 1.325825 3.000000 -0.972272 +v 1.399049 3.000000 -1.149049 +v 1.325825 3.000000 -1.325825 +v 1.149048 3.000000 -1.399049 +v 0.920495 3.176776 -1.274048 +v 0.883883 3.051776 -1.133883 +v 1.133883 3.051776 -0.883883 +v 1.274048 3.176776 -0.920495 +v 1.310660 3.301776 -1.060660 +v 1.222272 3.353553 -1.222272 +v 1.060660 3.301776 -1.310660 +v 0.795495 3.250000 -1.149048 +v 0.847272 3.073223 -1.097272 +v 1.097272 3.073223 -0.847272 +v 1.149048 3.250000 -0.795495 +v 1.097272 3.426776 -0.847272 +v 0.972272 3.500000 -0.972272 +v 0.847272 3.426776 -1.097272 +v 0.758883 3.073223 -1.008884 +v 0.707107 3.250000 -1.060660 +v 1.060660 3.250000 -0.707107 +v 1.008884 3.073223 -0.758883 +v 1.008884 3.426776 -0.758883 +v 0.883884 3.500000 -0.883883 +v 0.758884 3.426776 -1.008883 +v 0.883883 3.000000 -0.883883 +v -0.972272 1.000000 1.325825 +v -0.899048 1.000000 1.149049 +v -0.972272 1.000000 0.972272 +v -1.149049 1.000000 0.899049 +v -1.325825 1.000000 0.972272 +v -1.399049 1.000000 1.149049 +v -1.325825 1.000000 1.325825 +v -1.149048 1.000000 1.399049 +v -0.972272 3.000000 1.325825 +v -0.899048 3.000000 1.149049 +v -0.972272 3.000000 0.972272 +v -1.149049 3.000000 0.899049 +v -1.325825 3.000000 0.972272 +v -1.399049 3.000000 1.149049 +v -1.325825 3.000000 1.325825 +v -1.149048 3.000000 1.399049 +v -0.920495 3.176776 1.274049 +v -0.883883 3.051776 1.133883 +v -1.133883 3.051776 0.883883 +v -1.274048 3.176776 0.920495 +v -1.310660 3.301776 1.060660 +v -1.222272 3.353553 1.222272 +v -1.060660 3.301776 1.310660 +v -0.795495 3.250000 1.149049 +v -0.847272 3.073223 1.097272 +v -1.097272 3.073223 0.847272 +v -1.149048 3.250000 0.795495 +v -1.097272 3.426776 0.847272 +v -0.972272 3.500000 0.972272 +v -0.847272 3.426776 1.097272 +v -0.758883 3.073223 1.008883 +v -0.707107 3.250000 1.060660 +v -1.060660 3.250000 0.707107 +v -1.008883 3.073223 0.758883 +v -1.008883 3.426776 0.758883 +v -0.883884 3.500000 0.883883 +v -0.758884 3.426776 1.008884 +v -0.883883 3.000000 0.883883 +v 1.500000 0.312500 -0.812500 +v 1.500000 0.687500 -0.812500 +v 1.500000 0.312500 -1.187500 +v 1.500000 0.687500 -1.187500 +v 1.375000 0.312500 -1.187500 +v 1.375000 0.312500 -0.812500 +v 1.375000 0.687500 -0.812500 +v 1.375000 0.687500 -1.187500 +v 1.500000 0.312500 1.187500 +v 1.500000 0.687500 1.187500 +v 1.500000 0.312500 0.812500 +v 1.500000 0.687500 0.812500 +v 1.375000 0.312500 0.812500 +v 1.375000 0.312500 1.187500 +v 1.375000 0.687500 1.187500 +v 1.375000 0.687500 0.812500 +v -1.500000 0.312500 0.812500 +v -1.500000 0.687500 0.812500 +v -1.500000 0.312500 1.187500 +v -1.500000 0.687500 1.187500 +v -1.375000 0.312500 1.187500 +v -1.375000 0.312500 0.812500 +v -1.375000 0.687500 0.812500 +v -1.375000 0.687500 1.187500 +v -1.500000 0.312500 -1.187500 +v -1.500000 0.687500 -1.187500 +v -1.500000 0.312500 -0.812500 +v -1.500000 0.687500 -0.812500 +v -1.375000 0.312500 -0.812500 +v -1.375000 0.312500 -1.187500 +v -1.375000 0.687500 -1.187500 +v -1.375000 0.687500 -0.812500 +v -0.812500 0.312500 -1.500000 +v -0.812500 0.687500 -1.500000 +v -1.187500 0.312500 -1.500000 +v -1.187500 0.687500 -1.500000 +v -1.187500 0.312500 -1.375000 +v -0.812500 0.312500 -1.375000 +v -0.812500 0.687500 -1.375000 +v -1.187500 0.687500 -1.375000 +v 1.187500 0.312500 -1.500000 +v 1.187500 0.687500 -1.500000 +v 0.812500 0.312500 -1.500000 +v 0.812500 0.687500 -1.500000 +v 0.812500 0.312500 -1.375000 +v 1.187500 0.312500 -1.375000 +v 1.187500 0.687500 -1.375000 +v 0.812500 0.687500 -1.375000 +v 0.812500 0.312500 1.500000 +v 0.812500 0.687500 1.500000 +v 1.187500 0.312500 1.500000 +v 1.187500 0.687500 1.500000 +v 1.187500 0.312500 1.375000 +v 0.812500 0.312500 1.375000 +v 0.812500 0.687500 1.375000 +v 1.187500 0.687500 1.375000 +v -1.187500 0.312500 1.500000 +v -1.187500 0.687500 1.500000 +v -0.812500 0.312500 1.500000 +v -0.812500 0.687500 1.500000 +v -0.812500 0.312500 1.375000 +v -1.187500 0.312500 1.375000 +v -1.187500 0.687500 1.375000 +v -0.812500 0.687500 1.375000 +vt 0.240000 -0.000000 +vt -0.000000 0.375000 +vt -0.000000 -0.000000 +vt -0.000000 0.500000 +vt 0.240000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.890625 +vt 0.010000 0.984375 +vt 0.000000 0.984375 +vt 0.230000 0.875000 +vt 0.010000 0.890625 +vt 0.010000 0.875000 +vt 0.240000 0.984375 +vt 0.230000 0.890625 +vt 0.240000 0.890625 +vt 0.000000 0.890625 +vt 0.010000 0.984375 +vt 0.000000 0.984375 +vt 0.010000 1.000000 +vt 0.230000 0.984375 +vt 0.230000 1.000000 +vt 0.230000 0.875000 +vt 0.010000 0.890625 +vt 0.010000 0.875000 +vt 0.240000 0.984375 +vt 0.230000 0.890625 +vt 0.240000 0.890625 +vt 0.010000 1.000000 +vt 0.230000 0.984375 +vt 0.230000 1.000000 +vt 0.000000 0.890625 +vt 0.010000 0.984375 +vt 0.000000 0.984375 +vt 0.230000 0.875000 +vt 0.010000 0.890625 +vt 0.010000 0.875000 +vt 0.240000 0.984375 +vt 0.230000 0.890625 +vt 0.240000 0.890625 +vt 0.000000 0.890625 +vt 0.010000 0.984375 +vt 0.000000 0.984375 +vt 0.010000 1.000000 +vt 0.230000 0.984375 +vt 0.230000 1.000000 +vt 0.230000 0.875000 +vt 0.010000 0.890625 +vt 0.010000 0.875000 +vt 0.240000 0.984375 +vt 0.230000 0.890625 +vt 0.240000 0.890625 +vt 0.010000 1.000000 +vt 0.230000 0.984375 +vt 0.230000 1.000000 +vt 0.230000 0.390625 +vt 0.240000 0.375000 +vt 0.230000 0.390625 +vt -0.000000 0.375000 +vt 0.240000 0.375000 +vt 0.230000 0.484375 +vt 0.240000 0.500000 +vt -0.000000 0.500000 +vt 0.230000 0.484375 +vt 0.240000 0.500000 +vt 0.010000 0.390625 +vt 0.010000 0.484375 +vt -0.000000 0.500000 +vt 0.230000 0.484375 +vt 0.240000 0.500000 +vt 0.230000 0.390625 +vt -0.000000 0.375000 +vt 0.240000 0.375000 +vt 0.230000 0.390625 +vt 0.000000 0.375000 +vt 0.240000 0.375000 +vt 0.000000 0.500000 +vt 0.230000 0.484375 +vt 0.240000 0.500000 +vt 0.010000 0.390625 +vt 0.010000 0.484375 +vt 0.010000 0.390625 +vt 0.010000 0.484375 +vt 0.010000 0.484375 +vt 0.010000 0.390625 +vt 0.600000 0.703125 +vt 0.560000 0.750000 +vt 0.560000 0.703125 +vt 0.280000 0.703125 +vt 0.315000 0.750000 +vt 0.280000 0.750000 +vt 0.640000 0.703125 +vt 0.600000 0.750000 +vt 0.320000 0.703125 +vt 0.355000 0.750000 +vt 0.320000 0.750000 +vt 0.680000 0.703125 +vt 0.640000 0.750000 +vt 0.360000 0.703125 +vt 0.395000 0.750000 +vt 0.360000 0.750000 +vt 0.760000 0.703125 +vt 0.720000 0.750000 +vt 0.720000 0.703125 +vt 0.680000 0.750000 +vt 0.400000 0.703125 +vt 0.435000 0.750000 +vt 0.400000 0.750000 +vt 0.800000 0.703125 +vt 0.760000 0.750000 +vt 0.440000 0.703125 +vt 0.475000 0.750000 +vt 0.445000 0.750000 +vt 0.835000 0.750000 +vt 0.800000 0.750000 +vt 0.480000 0.703125 +vt 0.515000 0.750000 +vt 0.480000 0.750000 +vt 0.840000 0.703125 +vt 0.875000 0.750000 +vt 0.840000 0.750000 +vt 0.520000 0.703125 +vt 0.555000 0.750000 +vt 0.520000 0.750000 +vt 0.240000 0.750000 +vt 0.240000 0.703125 +vt 0.999923 0.451491 +vt 0.941046 0.546755 +vt 0.880076 0.454759 +vt 0.640000 0.234375 +vt 0.680000 0.250000 +vt 0.640000 0.250000 +vt 0.600000 0.250000 +vt 0.600000 0.234375 +vt 0.560000 0.250000 +vt 0.560000 0.234375 +vt 0.520000 0.234375 +vt 0.520000 0.250000 +vt 0.480000 0.234375 +vt 0.480000 0.250000 +vt 0.440000 0.250000 +vt 0.440000 0.234375 +vt 0.400000 0.250000 +vt 0.400000 0.234375 +vt 0.360000 0.234375 +vt 0.360000 0.250000 +vt 0.320000 0.234375 +vt 0.320000 0.250000 +vt 0.280000 0.234375 +vt 0.280000 0.250000 +vt 0.240000 0.250000 +vt 0.240000 0.234375 +vt 0.880000 0.234375 +vt 0.840000 0.250000 +vt 0.840000 0.234375 +vt 0.800000 0.234375 +vt 0.800000 0.250000 +vt 0.760000 0.250000 +vt 0.760000 0.234375 +vt 0.720000 0.250000 +vt 0.720000 0.234375 +vt 0.680000 0.234375 +vt 0.560000 0.640625 +vt 0.600000 0.625000 +vt 0.600000 0.640625 +vt 0.640000 0.640625 +vt 0.680000 0.625000 +vt 0.680000 0.640625 +vt 0.720000 0.640625 +vt 0.720000 0.625000 +vt 0.760000 0.640625 +vt 0.760000 0.625000 +vt 0.800000 0.640625 +vt 0.840000 0.625000 +vt 0.840000 0.640625 +vt 0.880000 0.640625 +vt 0.240000 0.625000 +vt 0.280000 0.640625 +vt 0.240000 0.640625 +vt 0.320000 0.625000 +vt 0.320000 0.640625 +vt 0.360000 0.625000 +vt 0.360000 0.640625 +vt 0.400000 0.625000 +vt 0.400000 0.640625 +vt 0.440000 0.640625 +vt 0.440000 0.625000 +vt 0.480000 0.640625 +vt 0.480000 0.625000 +vt 0.520000 0.640625 +vt 0.520000 0.625000 +vt 0.280000 0.171875 +vt 0.240000 0.125000 +vt 0.275000 0.125000 +vt 0.600000 0.171875 +vt 0.560000 0.125000 +vt 0.595000 0.125000 +vt 0.315000 0.125000 +vt 0.320000 0.171875 +vt 0.640000 0.171875 +vt 0.600000 0.125000 +vt 0.635000 0.125000 +vt 0.355000 0.125000 +vt 0.360000 0.171875 +vt 0.675000 0.125000 +vt 0.680000 0.171875 +vt 0.395000 0.125000 +vt 0.400000 0.171875 +vt 0.760000 0.171875 +vt 0.715000 0.125000 +vt 0.755000 0.125000 +vt 0.720000 0.171875 +vt 0.680000 0.125000 +vt 0.435000 0.125000 +vt 0.440000 0.171875 +vt 0.800000 0.171875 +vt 0.760000 0.125000 +vt 0.795000 0.125000 +vt 0.475000 0.125000 +vt 0.480000 0.171875 +vt 0.835000 0.125000 +vt 0.840000 0.171875 +vt 0.515000 0.125000 +vt 0.520000 0.171875 +vt 0.875000 0.125000 +vt 0.880000 0.171875 +vt 0.555000 0.125000 +vt 0.560000 0.171875 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.360000 0.890625 +vt 0.330000 0.937500 +vt 0.330000 0.890625 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.370000 0.937500 +vt 0.360000 0.937500 +vt 0.320000 0.890625 +vt 0.330000 0.953125 +vt 0.360000 0.875000 +vt 0.595000 0.750000 +vt 0.635000 0.750000 +vt 0.675000 0.750000 +vt 0.755000 0.750000 +vt 0.715000 0.750000 +vt 0.795000 0.750000 +vt 0.880000 0.703125 +vt 0.275000 0.750000 +vt 0.995762 0.487446 +vt 0.983112 0.518176 +vt 0.963898 0.539003 +vt 0.918034 0.540254 +vt 0.898367 0.520487 +vt 0.885038 0.490466 +vt 0.884238 0.418804 +vt 0.896888 0.388074 +vt 0.916102 0.367247 +vt 0.938954 0.359495 +vt 0.961965 0.365996 +vt 0.981633 0.385763 +vt 0.994962 0.415784 +vt 0.880000 0.250000 +vt 0.560000 0.625000 +vt 0.640000 0.625000 +vt 0.800000 0.625000 +vt 0.880000 0.625000 +vt 0.280000 0.625000 +vt 0.240000 0.171875 +vt 0.280000 0.125000 +vt 0.320000 0.125000 +vt 0.640000 0.125000 +vt 0.360000 0.125000 +vt 0.400000 0.125000 +vt 0.440000 0.125000 +vt 0.800000 0.125000 +vt 0.480000 0.125000 +vt 0.840000 0.125000 +vt 0.520000 0.125000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.370000 0.890625 +vt 0.320000 0.937500 +vt 0.360000 0.953125 +vt 0.330000 0.875000 +vt 0.485000 0.875000 +vt 0.525000 0.875000 +vt 0.565000 0.875000 +vt 0.605000 0.875000 +vt 0.645000 0.875000 +vt 0.685000 0.875000 +vt 0.745000 0.875000 +vt 0.725000 0.875000 +vt 0.765000 0.875000 +vt 0.805000 0.875000 +vt 0.845000 0.875000 +vt 0.245000 0.875000 +vt 0.285000 0.875000 +vt 0.325000 0.875000 +vt 0.385000 0.875000 +vt 0.365000 0.875000 +vt 0.425000 0.875000 +vt 0.405000 0.875000 +vt 0.445000 0.875000 +vt 0.475000 0.000000 +vt 0.835000 0.000000 +vt 0.515000 0.000000 +vt 0.875000 0.000000 +vt 0.555000 0.000000 +vt 0.275000 0.000000 +vt 0.595000 0.000000 +vt 0.315000 -0.000000 +vt 0.635000 0.000000 +vt 0.355000 -0.000000 +vt 0.675000 -0.000000 +vt 0.395000 -0.000000 +vt 0.720000 0.125000 +vt 0.755000 -0.000000 +vt 0.715000 -0.000000 +vt 0.435000 0.000000 +vt 0.795000 -0.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 0.290000 0.875000 +vt 0.280000 1.000000 +vt 0.280000 0.875000 +vt 0.270000 0.875000 +vt 0.260000 1.000000 +vt 0.260000 0.875000 +vt 0.250000 0.875000 +vt 0.240000 1.000000 +vt 0.240000 0.875000 +vt 0.310000 0.875000 +vt 0.300000 1.000000 +vt 0.300000 0.875000 +vt 0.290000 1.000000 +vt 0.270000 1.000000 +vt 0.250000 1.000000 +vt 0.320000 0.875000 +vt 0.310000 1.000000 +vt 1.000000 -0.000000 +vt 0.985000 0.250000 +vt 0.985000 0.000000 +vt 0.955000 0.000000 +vt 0.940000 0.250000 +vt 0.940000 0.000000 +vt 0.925000 0.000000 +vt 0.910000 0.250000 +vt 0.910000 -0.000000 +vt 0.895000 0.000000 +vt 0.880000 0.250000 +vt 0.880000 -0.000000 +vt 0.970000 0.250000 +vt 0.970000 0.000000 +vt 0.955000 0.250000 +vt 0.925000 0.250000 +vt 0.895000 0.250000 +vt 0.910000 0.273438 +vt 0.925000 0.296875 +vt 0.910000 0.296875 +vt 0.985000 0.289062 +vt 0.970000 0.296875 +vt 0.970000 0.273438 +vt 0.955000 0.296875 +vt 0.955000 0.257812 +vt 0.925000 0.257812 +vt 0.895000 0.289062 +vt 0.895000 0.296875 +vt 0.940000 0.296875 +vt 0.940000 0.343750 +vt 0.925000 0.335938 +vt 0.910000 0.320312 +vt 0.985000 0.304688 +vt 0.970000 0.320312 +vt 0.955000 0.335938 +vt 0.895000 0.304688 +vt 0.880000 0.296875 +vt 1.000000 0.296875 +vt 0.985000 0.296875 +vt 0.955000 0.343750 +vt 0.940000 0.359375 +vt 1.000000 -0.000000 +vt 0.985000 0.250000 +vt 0.985000 0.000000 +vt 0.910000 0.343750 +vt 0.925000 0.359375 +vt 0.910000 0.359375 +vt 0.970000 0.343750 +vt 0.985000 0.359375 +vt 0.970000 0.359375 +vt 1.000000 0.343750 +vt 0.985000 0.343750 +vt 0.955000 0.359375 +vt 0.880000 0.343750 +vt 0.895000 0.359375 +vt 0.880000 0.359375 +vt 0.925000 0.343750 +vt 0.895000 0.343750 +vt 0.955000 0.000000 +vt 0.940000 0.250000 +vt 0.940000 0.000000 +vt 0.925000 0.000000 +vt 0.910000 0.250000 +vt 0.910000 -0.000000 +vt 0.895000 0.000000 +vt 0.880000 0.250000 +vt 0.880000 -0.000000 +vt 0.970000 0.250000 +vt 0.970000 0.000000 +vt 0.955000 0.250000 +vt 0.925000 0.250000 +vt 0.895000 0.250000 +vt 0.925000 0.257812 +vt 0.910000 0.296875 +vt 0.910000 0.273438 +vt 0.970000 0.273438 +vt 0.985000 0.296875 +vt 0.970000 0.296875 +vt 0.955000 0.257812 +vt 0.955000 0.296875 +vt 0.925000 0.296875 +vt 0.895000 0.296875 +vt 0.895000 0.289062 +vt 0.940000 0.296875 +vt 0.955000 0.335938 +vt 0.940000 0.343750 +vt 0.925000 0.335938 +vt 0.910000 0.320312 +vt 0.985000 0.304688 +vt 0.970000 0.320312 +vt 0.895000 0.304688 +vt 0.880000 0.296875 +vt 0.985000 0.289062 +vt 1.000000 0.296875 +vt 0.955000 0.343750 +vt 0.940000 0.359375 +vt 0.910000 0.343750 +vt 0.925000 0.359375 +vt 0.910000 0.359375 +vt 0.970000 0.343750 +vt 0.985000 0.359375 +vt 0.970000 0.359375 +vt 1.000000 0.343750 +vt 0.985000 0.343750 +vt 0.955000 0.359375 +vt 0.880000 0.343750 +vt 0.895000 0.359375 +vt 0.880000 0.359375 +vt 0.925000 0.343750 +vt 0.895000 0.343750 +vt 1.000000 -0.000000 +vt 0.985000 0.250000 +vt 0.985000 0.000000 +vt 0.955000 0.000000 +vt 0.940000 0.250000 +vt 0.940000 0.000000 +vt 0.925000 0.000000 +vt 0.910000 0.250000 +vt 0.910000 -0.000000 +vt 0.895000 0.000000 +vt 0.880000 0.250000 +vt 0.880000 -0.000000 +vt 0.970000 0.250000 +vt 0.970000 0.000000 +vt 0.955000 0.250000 +vt 0.925000 0.250000 +vt 0.895000 0.250000 +vt 0.910000 0.273438 +vt 0.925000 0.296875 +vt 0.910000 0.296875 +vt 0.985000 0.289062 +vt 0.970000 0.296875 +vt 0.970000 0.273438 +vt 0.955000 0.296875 +vt 0.955000 0.257812 +vt 0.925000 0.257812 +vt 0.895000 0.289062 +vt 0.895000 0.296875 +vt 0.940000 0.296875 +vt 0.955000 0.335938 +vt 0.940000 0.343750 +vt 0.925000 0.335938 +vt 0.910000 0.320312 +vt 0.985000 0.304688 +vt 0.970000 0.320312 +vt 0.895000 0.304688 +vt 0.880000 0.296875 +vt 1.000000 0.296875 +vt 0.985000 0.296875 +vt 0.955000 0.359375 +vt 0.940000 0.359375 +vt 1.000000 -0.000000 +vt 0.985000 0.250000 +vt 0.985000 0.000000 +vt 0.910000 0.343750 +vt 0.925000 0.359375 +vt 0.910000 0.359375 +vt 0.970000 0.343750 +vt 0.985000 0.359375 +vt 0.970000 0.359375 +vt 0.985000 0.343750 +vt 1.000000 0.359375 +vt 0.955000 0.343750 +vt 0.895000 0.343750 +vt 0.880000 0.359375 +vt 0.880000 0.343750 +vt 0.925000 0.343750 +vt 0.895000 0.359375 +vt 0.955000 0.000000 +vt 0.940000 0.250000 +vt 0.940000 0.000000 +vt 0.925000 0.000000 +vt 0.910000 0.250000 +vt 0.910000 -0.000000 +vt 0.895000 0.000000 +vt 0.880000 0.250000 +vt 0.880000 -0.000000 +vt 0.970000 0.250000 +vt 0.970000 0.000000 +vt 0.955000 0.250000 +vt 0.925000 0.250000 +vt 0.895000 0.250000 +vt 0.910000 0.273438 +vt 0.925000 0.296875 +vt 0.910000 0.296875 +vt 0.985000 0.289062 +vt 0.970000 0.296875 +vt 0.970000 0.273438 +vt 0.955000 0.296875 +vt 0.955000 0.257812 +vt 0.925000 0.257812 +vt 0.895000 0.289062 +vt 0.895000 0.296875 +vt 0.940000 0.296875 +vt 0.955000 0.335938 +vt 0.940000 0.343750 +vt 0.925000 0.335938 +vt 0.910000 0.320312 +vt 0.985000 0.304688 +vt 0.970000 0.320312 +vt 0.895000 0.304688 +vt 0.880000 0.296875 +vt 1.000000 0.296875 +vt 0.985000 0.296875 +vt 0.955000 0.359375 +vt 0.940000 0.359375 +vt 0.910000 0.343750 +vt 0.925000 0.359375 +vt 0.910000 0.359375 +vt 0.985000 0.343750 +vt 0.970000 0.359375 +vt 0.970000 0.343750 +vt 1.000000 0.343750 +vt 0.985000 0.359375 +vt 0.955000 0.343750 +vt 0.895000 0.343750 +vt 0.880000 0.359375 +vt 0.880000 0.343750 +vt 0.925000 0.343750 +vt 0.895000 0.359375 +vt 0.505000 0.875000 +vt 0.545000 0.875000 +vt 0.585000 0.875000 +vt 0.625000 0.875000 +vt 0.665000 0.875000 +vt 0.705000 0.875000 +vt 0.785000 0.875000 +vt 0.825000 0.875000 +vt 0.865000 0.875000 +vt 0.265000 0.875000 +vt 0.305000 0.875000 +vt 0.345000 0.875000 +vt 0.465000 0.875000 +vt 0.440000 -0.000000 +vt 0.800000 -0.000000 +vt 0.480000 -0.000000 +vt 0.840000 -0.000000 +vt 0.520000 -0.000000 +vt 0.240000 0.000000 +vt 0.560000 -0.000000 +vt 0.280000 -0.000000 +vt 0.600000 0.000000 +vt 0.320000 0.000000 +vt 0.640000 -0.000000 +vt 0.360000 0.000000 +vt 0.720000 -0.000000 +vt 0.680000 0.000000 +vt 0.400000 -0.000000 +vt 0.760000 -0.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 0.320000 1.000000 +vt 1.000000 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.359375 +vt 1.000000 0.359375 +vt 1.000000 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.343750 +vt 1.000000 0.359375 +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.9239 0.0000 -0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3827 0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 0.9239 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.8651 0.3511 0.3583 +vn 0.6621 0.3511 0.6621 +vn 0.9363 0.3511 0.0000 +vn 0.8651 0.3511 -0.3583 +vn 0.6621 0.3511 -0.6621 +vn 0.3583 0.3511 -0.8651 +vn -0.0000 0.3511 -0.9363 +vn -0.3583 0.3511 -0.8651 +vn -0.6621 0.3511 -0.6621 +vn -0.8651 0.3511 -0.3583 +vn -0.9363 0.3511 -0.0000 +vn -0.8651 0.3511 0.3583 +vn -0.6621 0.3511 0.6621 +vn -0.3583 0.3511 0.8651 +vn -0.0000 0.3511 0.9363 +vn 0.3583 0.3511 0.8651 +vn 0.8315 0.0000 -0.5556 +vn 0.9808 0.0000 0.1951 +vn 0.5556 0.0000 0.8315 +vn -0.1951 0.0000 0.9808 +vn -0.8315 0.0000 0.5556 +vn -0.9808 0.0000 -0.1951 +vn -0.5556 0.0000 -0.8315 +vn 0.1951 0.0000 -0.9808 +vn 0.5556 0.0000 -0.8315 +vn 0.9808 0.0000 -0.1951 +vn 0.8315 0.0000 0.5556 +vn 0.1951 0.0000 0.9808 +vn -0.5556 0.0000 0.8315 +vn -0.9808 0.0000 0.1951 +vn -0.8315 0.0000 -0.5556 +vn -0.1951 0.0000 -0.9808 +vn 0.0372 -0.1363 -0.9900 +vn 0.6947 0.1866 0.6947 +vn -0.6727 0.0196 0.7396 +vn -0.5000 -0.7071 -0.5000 +vn 0.7396 0.0196 -0.6727 +vn 0.9891 0.1448 0.0283 +vn 0.0283 0.1448 0.9891 +vn -0.9900 -0.1363 0.0372 +vn -0.0945 0.5294 0.8431 +vn -0.6565 0.0671 0.7513 +vn 0.7513 0.0671 -0.6565 +vn 0.8431 0.5294 -0.0945 +vn -0.8620 -0.4617 0.2090 +vn 0.5000 0.7071 0.5000 +vn 0.1319 0.9824 0.1319 +vn -0.3780 0.7194 0.5828 +vn -0.6923 0.0473 0.7200 +vn 0.4172 -0.6737 -0.6099 +vn 0.7200 0.0473 -0.6923 +vn 0.5828 0.7194 -0.3780 +vn -0.6099 -0.6737 0.4172 +vn 0.2090 -0.4617 -0.8620 +vn -0.0372 -0.1363 0.9900 +vn -0.5000 0.7071 0.5000 +vn 0.5000 -0.7071 -0.5000 +vn 0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn -0.6947 0.1866 -0.6947 +vn 0.6727 0.0196 -0.7396 +vn 0.5000 -0.7071 0.5000 +vn -0.7396 0.0196 0.6727 +vn -0.9891 0.1448 -0.0283 +vn -0.0283 0.1448 -0.9891 +vn 0.9900 -0.1363 -0.0372 +vn 0.6565 0.0671 -0.7513 +vn -0.2090 -0.4617 0.8620 +vn -0.7513 0.0671 0.6565 +vn -0.8431 0.5294 0.0945 +vn 0.0945 0.5294 -0.8431 +vn 0.8620 -0.4617 -0.2090 +vn -0.5000 0.7071 -0.5000 +vn -0.5828 0.7194 0.3780 +vn -0.1319 0.9824 -0.1319 +vn 0.3780 0.7194 -0.5828 +vn 0.6923 0.0473 -0.7200 +vn -0.4172 -0.6737 0.6099 +vn -0.7200 0.0473 0.6923 +vn 0.6099 -0.6737 -0.4172 +vn -0.9900 -0.1363 -0.0372 +vn 0.6947 0.1866 -0.6947 +vn 0.7396 0.0196 0.6727 +vn -0.6727 0.0196 -0.7396 +vn 0.0283 0.1448 -0.9891 +vn 0.9891 0.1448 -0.0283 +vn 0.0372 -0.1363 0.9900 +vn 0.8431 0.5294 0.0945 +vn 0.7513 0.0671 0.6565 +vn -0.6565 0.0671 -0.7513 +vn -0.0945 0.5294 -0.8431 +vn 0.2090 -0.4617 0.8620 +vn -0.3780 0.7194 -0.5828 +vn 0.1319 0.9824 -0.1319 +vn 0.5828 0.7194 0.3780 +vn 0.7200 0.0473 0.6923 +vn -0.6099 -0.6737 -0.4172 +vn -0.6923 0.0473 -0.7200 +vn 0.4172 -0.6737 0.6099 +vn -0.8620 -0.4617 -0.2090 +vn 0.9900 -0.1363 0.0372 +vn -0.6947 0.1866 0.6947 +vn -0.7396 0.0196 -0.6727 +vn 0.6727 0.0196 0.7396 +vn -0.0283 0.1448 0.9891 +vn -0.9891 0.1448 0.0283 +vn -0.0372 -0.1363 -0.9900 +vn -0.8431 0.5294 -0.0945 +vn -0.7513 0.0671 -0.6565 +vn 0.6565 0.0671 0.7513 +vn 0.0945 0.5294 0.8431 +vn -0.2090 -0.4617 -0.8620 +vn 0.3780 0.7194 0.5828 +vn -0.1319 0.9824 0.1319 +vn -0.5828 0.7194 -0.3780 +vn -0.7200 0.0473 -0.6923 +vn 0.6099 -0.6737 0.4172 +vn 0.6923 0.0473 0.7200 +vn -0.4172 -0.6737 -0.6099 +vn 0.8620 -0.4617 0.2090 +s off +f 3/1/1 2/2/1 1/3/1 +f 6/4/2 7/5/2 5/6/2 +f 9/7/3 15/8/3 11/9/3 +f 10/10/2 13/11/2 9/12/2 +f 12/13/4 14/14/4 10/15/4 +f 14/14/5 15/8/5 13/11/5 +f 17/16/4 23/17/4 19/18/4 +f 11/19/1 16/20/1 12/21/1 +f 18/22/2 21/23/2 17/24/2 +f 20/25/3 22/26/3 18/27/3 +f 22/26/6 23/17/6 21/23/6 +f 19/28/1 24/29/1 20/30/1 +f 25/31/6 31/32/6 27/33/6 +f 26/34/2 29/35/2 25/36/2 +f 28/37/5 30/38/5 26/39/5 +f 30/38/3 31/32/3 29/35/3 +f 33/40/5 39/41/5 35/42/5 +f 27/43/1 32/44/1 28/45/1 +f 34/46/2 37/47/2 33/48/2 +f 36/49/6 38/50/6 34/51/6 +f 38/50/4 39/41/4 37/47/4 +f 35/52/1 40/53/1 36/54/1 +f 10/55/5 2/2/5 4/56/5 +f 26/57/3 4/58/3 3/59/3 +f 6/4/5 12/60/5 8/61/5 +f 8/62/3 28/63/3 7/64/3 +f 8/62/3 25/65/3 27/66/3 +f 10/55/5 8/61/5 12/60/5 +f 7/67/6 20/68/6 5/69/6 +f 18/70/6 3/71/6 1/72/6 +f 34/73/4 1/74/4 2/75/4 +f 5/76/4 36/77/4 6/78/4 +f 5/76/4 33/79/4 35/80/4 +f 18/70/6 5/69/6 20/68/6 +f 34/73/4 6/78/4 36/77/4 +f 6/4/5 9/81/5 11/82/5 +f 19/83/6 3/71/6 17/84/6 +f 3/59/3 28/63/3 26/57/3 +f 54/85/2 85/86/2 53/87/2 +f 46/88/2 79/89/2 78/90/2 +f 55/91/2 86/92/2 54/85/2 +f 47/93/2 80/94/2 79/95/2 +f 56/96/2 87/97/2 55/91/2 +f 48/98/2 81/99/2 80/100/2 +f 42/101/2 73/102/2 41/103/2 +f 41/103/2 88/104/2 56/96/2 +f 49/105/2 82/106/2 81/107/2 +f 43/108/2 74/109/2 42/101/2 +f 50/110/2 83/111/2 82/112/2 +f 43/108/2 76/113/2 75/114/2 +f 51/115/2 84/116/2 83/117/2 +f 44/118/2 77/119/2 76/120/2 +f 52/121/2 85/122/2 84/123/2 +f 46/88/2 77/124/2 45/125/2 +f 89/126/2 93/127/2 97/128/2 +f 135/129/2 152/130/2 151/131/2 +f 135/129/2 150/132/2 134/133/2 +f 134/133/2 149/134/2 133/135/2 +f 132/136/2 149/134/2 148/137/2 +f 131/138/2 148/137/2 147/139/2 +f 131/138/2 146/140/2 130/141/2 +f 130/141/2 145/142/2 129/143/2 +f 128/144/2 145/142/2 144/145/2 +f 127/146/2 144/145/2 143/147/2 +f 126/148/2 143/147/2 142/149/2 +f 126/148/2 141/150/2 125/151/2 +f 125/152/2 140/153/2 124/154/2 +f 123/155/2 140/153/2 139/156/2 +f 123/155/2 138/157/2 122/158/2 +f 122/158/2 137/159/2 121/160/2 +f 121/160/2 152/130/2 136/161/2 +f 69/162/1 166/163/1 70/164/1 +f 166/163/1 71/165/1 70/164/1 +f 71/165/1 168/166/1 72/167/1 +f 168/166/1 57/168/1 72/167/1 +f 153/169/1 58/170/1 57/168/1 +f 154/171/1 59/172/1 58/170/1 +f 59/172/1 156/173/1 60/174/1 +f 156/173/1 61/175/1 60/174/1 +f 157/176/1 62/177/1 61/178/1 +f 62/177/1 159/179/1 63/180/1 +f 63/180/1 160/181/1 64/182/1 +f 64/182/1 161/183/1 65/184/1 +f 161/183/1 66/185/1 65/184/1 +f 162/186/1 67/187/1 66/185/1 +f 163/188/1 68/189/1 67/187/1 +f 164/190/1 69/162/1 68/189/1 +f 110/191/1 173/192/1 174/193/1 +f 118/194/1 181/195/1 182/196/1 +f 110/191/1 175/197/1 111/198/1 +f 119/199/1 182/200/1 183/201/1 +f 111/198/1 176/202/1 112/203/1 +f 119/199/1 184/204/1 120/205/1 +f 112/203/1 177/206/1 113/207/1 +f 106/208/1 169/209/1 170/210/1 +f 105/211/1 184/212/1 169/209/1 +f 113/207/1 178/213/1 114/214/1 +f 107/215/1 170/216/1 171/217/1 +f 114/214/1 179/218/1 115/219/1 +f 107/215/1 172/220/1 108/221/1 +f 115/219/1 180/222/1 116/223/1 +f 108/221/1 173/224/1 109/225/1 +f 116/223/1 181/226/1 117/227/1 +f 483/228/5 482/229/5 481/230/5 +f 491/231/5 490/232/5 489/233/5 +f 483/228/3 488/234/3 484/235/3 +f 482/229/4 486/236/4 481/230/4 +f 484/235/2 487/237/2 482/229/2 +f 481/230/1 485/238/1 483/228/1 +f 491/231/3 496/239/3 492/240/3 +f 490/232/4 494/241/4 489/233/4 +f 492/240/2 495/242/2 490/232/2 +f 489/233/1 493/243/1 491/231/1 +f 499/244/6 498/245/6 497/246/6 +f 507/247/6 506/248/6 505/249/6 +f 499/244/4 504/250/4 500/251/4 +f 498/245/3 502/252/3 497/246/3 +f 500/251/2 503/253/2 498/245/2 +f 497/246/1 501/254/1 499/244/1 +f 507/247/4 512/255/4 508/256/4 +f 506/248/3 510/257/3 505/249/3 +f 508/256/2 511/258/2 506/248/2 +f 505/249/1 509/259/1 507/247/1 +f 515/260/3 514/261/3 513/262/3 +f 523/263/3 522/264/3 521/265/3 +f 515/260/6 520/266/6 516/267/6 +f 514/261/5 518/268/5 513/262/5 +f 516/267/2 519/269/2 514/261/2 +f 513/262/1 517/270/1 515/260/1 +f 523/263/6 528/271/6 524/272/6 +f 522/264/5 526/273/5 521/265/5 +f 524/272/2 527/274/2 522/264/2 +f 521/265/1 525/275/1 523/263/1 +f 531/276/4 530/277/4 529/278/4 +f 539/279/4 538/280/4 537/281/4 +f 531/276/5 536/282/5 532/283/5 +f 530/277/6 534/284/6 529/278/6 +f 532/283/2 535/285/2 530/277/2 +f 529/278/1 533/286/1 531/276/1 +f 539/279/5 544/287/5 540/288/5 +f 538/280/6 542/289/6 537/281/6 +f 540/288/2 543/290/2 538/280/2 +f 537/281/1 541/291/1 539/279/1 +f 3/1/1 4/56/1 2/2/1 +f 6/4/2 8/61/2 7/5/2 +f 9/7/3 13/11/3 15/8/3 +f 10/10/2 14/14/2 13/11/2 +f 12/13/4 16/20/4 14/14/4 +f 14/14/5 16/20/5 15/8/5 +f 17/16/4 21/23/4 23/17/4 +f 11/19/1 15/8/1 16/20/1 +f 18/22/2 22/26/2 21/23/2 +f 20/25/3 24/29/3 22/26/3 +f 22/26/6 24/29/6 23/17/6 +f 19/28/1 23/17/1 24/29/1 +f 25/31/6 29/35/6 31/32/6 +f 26/34/2 30/38/2 29/35/2 +f 28/37/5 32/44/5 30/38/5 +f 30/38/3 32/44/3 31/32/3 +f 33/40/5 37/47/5 39/41/5 +f 27/43/1 31/32/1 32/44/1 +f 34/46/2 38/50/2 37/47/2 +f 36/49/6 40/53/6 38/50/6 +f 38/50/4 40/53/4 39/41/4 +f 35/52/1 39/41/1 40/53/1 +f 10/55/5 9/81/5 2/2/5 +f 26/57/3 25/65/3 4/58/3 +f 6/4/5 11/82/5 12/60/5 +f 8/62/3 27/66/3 28/63/3 +f 8/62/3 4/58/3 25/65/3 +f 10/55/5 4/56/5 8/61/5 +f 7/67/6 19/83/6 20/68/6 +f 18/70/6 17/84/6 3/71/6 +f 34/73/4 33/79/4 1/74/4 +f 5/76/4 35/80/4 36/77/4 +f 5/76/4 1/74/4 33/79/4 +f 18/70/6 1/72/6 5/69/6 +f 34/73/4 2/75/4 6/78/4 +f 6/4/5 2/2/5 9/81/5 +f 19/83/6 7/67/6 3/71/6 +f 3/59/3 7/64/3 28/63/3 +f 54/85/2 86/292/2 85/86/2 +f 46/88/2 47/93/2 79/89/2 +f 55/91/2 87/293/2 86/92/2 +f 47/93/2 48/98/2 80/94/2 +f 56/96/2 88/294/2 87/97/2 +f 48/98/2 49/105/2 81/99/2 +f 42/101/2 74/295/2 73/102/2 +f 41/103/2 73/296/2 88/104/2 +f 49/105/2 50/110/2 82/106/2 +f 43/108/2 75/297/2 74/109/2 +f 50/110/2 51/115/2 83/111/2 +f 43/108/2 44/118/2 76/113/2 +f 51/115/2 52/121/2 84/116/2 +f 44/118/2 45/298/2 77/119/2 +f 52/121/2 53/87/2 85/122/2 +f 46/88/2 78/299/2 77/124/2 +f 89/126/2 90/300/2 91/301/2 +f 91/301/2 92/302/2 89/126/2 +f 92/302/2 93/127/2 89/126/2 +f 93/127/2 94/303/2 97/128/2 +f 94/303/2 95/304/2 97/128/2 +f 95/304/2 96/305/2 97/128/2 +f 97/128/2 98/306/2 99/307/2 +f 99/307/2 100/308/2 101/309/2 +f 101/309/2 102/310/2 103/311/2 +f 103/311/2 104/312/2 89/126/2 +f 97/128/2 99/307/2 89/126/2 +f 99/307/2 101/309/2 89/126/2 +f 101/309/2 103/311/2 89/126/2 +f 135/129/2 136/161/2 152/130/2 +f 135/129/2 151/131/2 150/132/2 +f 134/133/2 150/132/2 149/134/2 +f 132/136/2 133/135/2 149/134/2 +f 131/138/2 132/136/2 148/137/2 +f 131/138/2 147/139/2 146/140/2 +f 130/141/2 146/140/2 145/142/2 +f 128/144/2 129/143/2 145/142/2 +f 127/146/2 128/144/2 144/145/2 +f 126/148/2 127/146/2 143/147/2 +f 126/148/2 142/149/2 141/150/2 +f 125/152/2 141/313/2 140/153/2 +f 123/155/2 124/154/2 140/153/2 +f 123/155/2 139/156/2 138/157/2 +f 122/158/2 138/157/2 137/159/2 +f 121/160/2 137/159/2 152/130/2 +f 69/162/1 165/314/1 166/163/1 +f 166/163/1 167/315/1 71/165/1 +f 71/165/1 167/315/1 168/166/1 +f 168/166/1 153/169/1 57/168/1 +f 153/169/1 154/171/1 58/170/1 +f 154/171/1 155/316/1 59/172/1 +f 59/172/1 155/316/1 156/173/1 +f 156/173/1 157/317/1 61/175/1 +f 157/176/1 158/318/1 62/177/1 +f 62/177/1 158/318/1 159/179/1 +f 63/180/1 159/179/1 160/181/1 +f 64/182/1 160/181/1 161/183/1 +f 161/183/1 162/186/1 66/185/1 +f 162/186/1 163/188/1 67/187/1 +f 163/188/1 164/190/1 68/189/1 +f 164/190/1 165/314/1 69/162/1 +f 110/191/1 109/319/1 173/192/1 +f 118/194/1 117/227/1 181/195/1 +f 110/191/1 174/320/1 175/197/1 +f 119/199/1 118/194/1 182/200/1 +f 111/198/1 175/321/1 176/202/1 +f 119/199/1 183/322/1 184/204/1 +f 112/203/1 176/323/1 177/206/1 +f 106/208/1 105/211/1 169/209/1 +f 105/211/1 120/205/1 184/212/1 +f 113/207/1 177/324/1 178/213/1 +f 107/215/1 106/208/1 170/216/1 +f 114/214/1 178/325/1 179/218/1 +f 107/215/1 171/326/1 172/220/1 +f 115/219/1 179/327/1 180/222/1 +f 108/221/1 172/328/1 173/224/1 +f 116/223/1 180/329/1 181/226/1 +f 483/228/5 484/235/5 482/229/5 +f 491/231/5 492/240/5 490/232/5 +f 483/228/3 485/330/3 488/234/3 +f 482/229/4 487/331/4 486/236/4 +f 484/235/2 488/332/2 487/237/2 +f 481/230/1 486/333/1 485/238/1 +f 491/231/3 493/334/3 496/239/3 +f 490/232/4 495/335/4 494/241/4 +f 492/240/2 496/336/2 495/242/2 +f 489/233/1 494/337/1 493/243/1 +f 499/244/6 500/251/6 498/245/6 +f 507/247/6 508/256/6 506/248/6 +f 499/244/4 501/338/4 504/250/4 +f 498/245/3 503/339/3 502/252/3 +f 500/251/2 504/340/2 503/253/2 +f 497/246/1 502/341/1 501/254/1 +f 507/247/4 509/342/4 512/255/4 +f 506/248/3 511/343/3 510/257/3 +f 508/256/2 512/344/2 511/258/2 +f 505/249/1 510/345/1 509/259/1 +f 515/260/3 516/267/3 514/261/3 +f 523/263/3 524/272/3 522/264/3 +f 515/260/6 517/346/6 520/266/6 +f 514/261/5 519/347/5 518/268/5 +f 516/267/2 520/348/2 519/269/2 +f 513/262/1 518/349/1 517/270/1 +f 523/263/6 525/350/6 528/271/6 +f 522/264/5 527/351/5 526/273/5 +f 524/272/2 528/352/2 527/274/2 +f 521/265/1 526/353/1 525/275/1 +f 531/276/4 532/283/4 530/277/4 +f 539/279/4 540/288/4 538/280/4 +f 531/276/5 533/354/5 536/282/5 +f 530/277/6 535/355/6 534/284/6 +f 532/283/2 536/356/2 535/285/2 +f 529/278/1 534/357/1 533/286/1 +f 539/279/5 541/358/5 544/287/5 +f 538/280/6 543/359/6 542/289/6 +f 540/288/2 544/360/2 543/290/2 +f 537/281/1 542/361/1 541/291/1 +s 1 +f 69/162/5 54/85/7 53/87/5 +f 62/177/8 47/93/9 46/88/8 +f 70/164/7 55/91/10 54/85/7 +f 63/180/9 48/98/11 47/93/9 +f 71/165/10 56/96/12 55/91/10 +f 64/182/11 49/105/4 48/98/11 +f 57/168/3 42/101/13 41/103/3 +f 72/167/12 41/103/3 56/96/12 +f 65/184/4 50/110/14 49/105/4 +f 58/170/13 43/108/15 42/101/13 +f 66/185/14 51/115/16 50/110/14 +f 59/172/15 44/118/17 43/108/15 +f 67/187/16 52/121/18 51/115/16 +f 60/174/17 45/298/6 44/118/17 +f 68/189/18 53/87/5 52/121/18 +f 61/178/6 46/88/8 45/125/6 +f 84/116/19 99/362/20 83/117/20 +f 85/122/21 100/363/19 84/123/19 +f 86/292/22 101/364/21 85/86/21 +f 87/293/23 102/365/22 86/92/22 +f 88/294/24 103/366/23 87/97/23 +f 73/296/25 104/367/24 88/104/24 +f 73/102/25 90/368/26 89/369/25 +f 75/297/27 90/370/26 74/109/26 +f 76/113/28 91/371/27 75/114/27 +f 77/119/29 92/372/28 76/120/28 +f 78/299/30 93/373/29 77/124/29 +f 79/89/31 94/374/30 78/90/30 +f 80/94/32 95/375/31 79/95/31 +f 80/100/32 97/376/33 96/377/32 +f 81/107/33 98/378/34 97/379/33 +f 83/111/20 98/380/34 82/112/34 +f 117/227/5 132/136/18 116/223/18 +f 110/191/8 125/151/6 109/319/6 +f 118/194/7 133/135/5 117/227/5 +f 111/198/9 126/148/8 110/191/8 +f 119/199/10 134/133/7 118/194/7 +f 112/203/11 127/146/9 111/198/9 +f 120/205/12 135/129/10 119/199/10 +f 113/207/4 128/144/11 112/203/11 +f 106/208/13 121/160/3 105/211/3 +f 105/211/3 136/161/12 120/205/12 +f 114/214/14 129/143/4 113/207/4 +f 107/215/15 122/158/13 106/208/13 +f 115/219/16 130/141/14 114/214/14 +f 108/221/17 123/155/15 107/215/15 +f 116/223/18 131/138/16 115/219/16 +f 109/225/6 124/154/17 108/221/17 +f 137/159/3 168/166/12 152/130/12 +f 146/140/14 161/183/4 145/142/4 +f 139/156/15 154/171/13 138/157/13 +f 147/139/16 162/186/14 146/140/14 +f 140/153/17 155/316/15 139/156/15 +f 148/137/18 163/188/16 147/139/16 +f 141/313/6 156/173/17 140/153/17 +f 149/134/5 164/190/18 148/137/18 +f 142/149/8 157/176/6 141/150/6 +f 150/132/7 165/314/5 149/134/5 +f 143/147/9 158/318/8 142/149/8 +f 151/131/10 166/163/7 150/132/7 +f 144/145/11 159/179/9 143/147/9 +f 152/130/12 167/315/10 151/131/10 +f 145/142/4 160/181/11 144/145/11 +f 138/157/13 153/169/3 137/159/3 +f 178/325/14 195/381/16 179/218/16 +f 171/326/15 188/382/17 172/220/17 +f 179/327/16 196/383/18 180/222/18 +f 172/328/17 189/384/6 173/224/6 +f 180/329/18 197/385/5 181/226/5 +f 173/192/6 190/386/8 174/193/8 +f 181/195/5 198/387/7 182/196/7 +f 174/320/8 191/388/9 175/197/9 +f 182/200/7 199/389/10 183/201/10 +f 175/321/9 192/390/11 176/202/11 +f 183/322/10 200/391/12 184/204/12 +f 176/323/11 193/392/4 177/206/4 +f 169/393/3 186/394/13 170/210/13 +f 184/212/12 185/395/3 169/209/3 +f 177/324/4 194/396/14 178/213/14 +f 170/216/13 187/397/15 171/217/15 +f 208/398/35 215/399/36 207/400/36 +f 206/401/37 213/402/38 205/403/38 +f 204/404/39 211/405/40 203/406/40 +f 202/407/41 209/408/42 201/409/42 +f 201/409/42 216/410/35 208/398/35 +f 207/400/36 214/411/37 206/401/37 +f 205/403/38 212/412/39 204/404/39 +f 203/413/40 210/414/41 202/407/41 +f 224/415/43 231/416/44 223/417/44 +f 222/418/45 229/419/46 221/420/46 +f 220/421/47 227/422/48 219/423/48 +f 218/424/49 225/425/50 217/426/50 +f 217/426/50 232/427/43 224/415/43 +f 223/417/44 230/428/45 222/418/45 +f 221/420/46 228/429/47 220/421/47 +f 219/430/48 226/431/49 218/424/49 +f 240/432/39 247/433/40 239/434/40 +f 238/435/41 245/436/42 237/437/42 +f 236/438/35 243/439/36 235/440/36 +f 234/441/37 241/442/38 233/443/38 +f 233/443/38 248/444/39 240/432/39 +f 239/434/40 246/445/41 238/435/41 +f 237/437/42 244/446/35 236/438/35 +f 235/447/36 242/448/37 234/441/37 +f 256/449/47 263/450/48 255/451/48 +f 254/452/49 261/453/50 253/454/50 +f 252/455/43 259/456/44 251/457/44 +f 250/458/45 257/459/46 249/460/46 +f 249/460/46 264/461/47 256/449/47 +f 255/451/48 262/462/49 254/452/49 +f 253/454/50 260/463/43 252/455/43 +f 251/464/44 258/465/45 250/458/45 +f 272/466/41 279/467/42 271/468/42 +f 270/469/35 277/470/36 269/471/36 +f 268/472/37 275/473/38 267/474/38 +f 266/475/39 273/476/40 265/477/40 +f 265/477/40 280/478/41 272/466/41 +f 271/468/42 278/479/35 270/469/35 +f 269/471/36 276/480/37 268/472/37 +f 267/481/38 274/482/39 266/475/39 +f 288/483/49 295/484/50 287/485/50 +f 286/486/43 293/487/44 285/488/44 +f 284/489/45 291/490/46 283/491/46 +f 282/492/47 289/493/48 281/494/48 +f 281/494/48 296/495/49 288/483/49 +f 287/485/50 294/496/43 286/486/43 +f 285/488/44 292/497/45 284/489/45 +f 283/498/46 290/499/47 282/492/47 +f 304/500/37 311/501/38 303/502/38 +f 302/503/39 309/504/40 301/505/40 +f 300/506/41 307/507/42 299/508/42 +f 298/509/35 305/510/36 297/511/36 +f 297/511/36 312/512/37 304/500/37 +f 303/502/38 310/513/39 302/503/39 +f 301/505/40 308/514/41 300/506/41 +f 299/515/42 306/516/35 298/509/35 +f 320/517/45 327/518/46 319/519/46 +f 318/520/47 325/521/48 317/522/48 +f 316/523/49 323/524/50 315/525/50 +f 314/526/43 321/527/44 313/528/44 +f 313/528/44 328/529/45 320/517/45 +f 319/519/46 326/530/47 318/520/47 +f 317/522/48 324/531/49 316/523/49 +f 315/532/50 322/533/43 314/526/43 +f 331/534/15 338/535/51 330/536/3 +f 336/537/5 343/538/52 335/539/16 +f 334/540/4 341/541/53 333/542/9 +f 332/543/6 339/544/54 331/545/15 +f 330/536/3 337/546/55 329/547/10 +f 329/547/10 344/548/56 336/537/5 +f 335/539/16 342/549/57 334/540/4 +f 333/542/9 340/550/58 332/543/6 +f 341/551/53 349/552/59 348/553/60 +f 338/554/51 345/555/61 337/556/55 +f 337/556/55 351/557/62 344/558/56 +f 343/538/52 349/552/59 342/559/57 +f 340/560/58 348/553/60 347/561/63 +f 343/538/52 351/557/62 350/562/64 +f 351/557/62 357/563/65 350/562/64 +f 348/553/60 356/564/66 355/565/67 +f 345/555/61 353/566/68 352/567/69 +f 345/555/61 358/568/70 351/557/62 +f 350/562/64 356/564/66 349/552/59 +f 348/553/60 354/569/71 347/561/63 +f 340/560/58 347/561/63 339/570/54 +f 347/561/63 354/569/71 339/570/54 +f 338/554/51 339/571/54 346/572/72 +f 346/572/72 339/571/54 353/566/68 +f 358/573/70 364/574/2 357/563/65 +f 369/575/16 376/576/73 368/577/4 +f 355/578/67 363/579/74 361/580/9 +f 352/581/69 359/582/75 360/583/10 +f 339/584/54 359/582/75 353/585/68 +f 352/581/69 365/586/76 358/573/70 +f 339/587/54 362/588/77 366/589/1 +f 357/563/65 363/579/74 356/590/66 +f 355/578/67 362/588/77 354/591/71 +f 374/592/6 381/593/78 373/594/15 +f 372/595/3 379/596/79 371/597/10 +f 370/598/5 377/599/80 369/600/16 +f 368/577/4 375/601/81 367/602/9 +f 367/602/9 382/603/82 374/592/6 +f 373/594/15 380/604/83 372/595/3 +f 371/597/10 378/605/84 370/598/5 +f 380/606/83 386/607/85 379/608/79 +f 375/609/81 384/610/86 383/611/87 +f 382/612/82 383/611/87 389/613/88 +f 381/593/78 387/614/89 380/606/83 +f 379/608/79 385/615/90 378/616/84 +f 382/612/82 388/617/91 381/593/78 +f 388/617/91 396/618/92 395/619/93 +f 386/607/85 394/620/94 393/621/95 +f 383/611/87 391/622/96 390/623/97 +f 389/613/88 390/623/97 396/618/92 +f 388/617/91 394/620/94 387/614/89 +f 386/607/85 392/624/98 385/615/90 +f 378/616/84 385/615/90 377/625/80 +f 385/615/90 392/624/98 377/625/80 +f 376/626/73 377/627/80 384/610/86 +f 384/610/86 377/627/80 391/622/96 +f 396/628/92 402/629/2 395/619/93 +f 393/630/95 401/631/76 399/632/10 +f 390/633/97 397/634/77 398/635/9 +f 377/636/80 397/634/77 391/637/96 +f 390/633/97 403/638/74 396/628/92 +f 377/639/80 400/640/75 404/641/1 +f 395/619/93 401/631/76 394/642/94 +f 393/630/95 400/640/75 392/643/98 +f 407/644/9 414/645/99 406/646/6 +f 412/647/3 419/648/100 411/649/10 +f 410/650/5 417/651/101 409/652/16 +f 408/653/4 415/654/77 407/655/9 +f 406/646/6 413/656/102 405/657/15 +f 405/657/15 420/658/103 412/647/3 +f 411/649/10 418/659/104 410/650/5 +f 409/652/16 416/660/105 408/653/4 +f 417/661/101 425/662/106 424/663/107 +f 414/664/99 421/665/108 413/666/102 +f 413/666/102 427/667/109 420/668/103 +f 419/648/100 425/662/106 418/669/104 +f 416/670/105 424/663/107 423/671/110 +f 420/668/103 426/672/76 419/648/100 +f 426/672/76 434/673/111 433/674/112 +f 424/663/107 432/675/113 431/676/114 +f 421/665/108 429/677/115 428/678/116 +f 421/665/108 434/673/111 427/667/109 +f 426/672/76 432/675/113 425/662/106 +f 424/663/107 430/679/117 423/671/110 +f 416/670/105 423/671/110 415/680/77 +f 423/671/110 430/679/117 415/680/77 +f 414/664/99 415/681/77 422/682/118 +f 422/682/118 415/681/77 429/677/115 +f 433/674/112 441/683/91 440/684/2 +f 445/685/10 452/686/119 444/687/5 +f 431/688/114 439/689/64 437/690/16 +f 428/691/116 435/692/54 436/693/15 +f 429/694/115 442/695/1 435/692/54 +f 434/696/111 436/693/15 441/683/91 +f 430/697/117 442/698/1 415/699/77 +f 433/674/112 439/689/64 432/700/113 +f 431/688/114 438/701/80 430/697/117 +f 450/702/4 457/703/120 449/704/9 +f 448/705/6 455/706/121 447/707/15 +f 446/708/3 453/709/75 445/710/10 +f 444/687/5 451/711/122 443/712/16 +f 443/712/16 458/713/123 450/702/4 +f 449/704/9 456/714/124 448/705/6 +f 447/707/15 454/715/125 446/708/3 +f 455/716/121 463/717/126 462/718/127 +f 452/719/119 459/720/128 451/721/122 +f 451/721/122 465/722/129 458/723/123 +f 457/703/120 463/717/126 456/724/124 +f 454/725/125 462/718/127 461/726/130 +f 458/723/123 464/727/74 457/703/120 +f 464/727/74 472/728/131 471/729/132 +f 462/718/127 470/730/133 469/731/134 +f 459/720/128 467/732/135 466/733/136 +f 465/722/129 466/733/136 472/728/131 +f 464/727/74 470/730/133 463/717/126 +f 462/718/127 468/734/137 461/726/130 +f 454/725/125 461/726/130 453/735/75 +f 461/726/130 468/734/137 453/735/75 +f 452/719/119 453/736/75 460/737/138 +f 460/737/138 453/736/75 467/732/135 +f 471/729/132 479/738/64 478/739/2 +f 469/740/134 477/741/91 475/742/15 +f 467/743/135 474/744/16 466/745/136 +f 453/746/75 473/747/80 467/743/135 +f 466/745/136 479/738/64 472/748/131 +f 468/749/137 480/750/1 453/751/75 +f 471/729/132 477/741/91 470/752/133 +f 469/740/134 476/753/54 468/749/137 +f 69/162/5 70/164/7 54/85/7 +f 62/177/8 63/180/9 47/93/9 +f 70/164/7 71/165/10 55/91/10 +f 63/180/9 64/182/11 48/98/11 +f 71/165/10 72/167/12 56/96/12 +f 64/182/11 65/184/4 49/105/4 +f 57/168/3 58/170/13 42/101/13 +f 72/167/12 57/168/3 41/103/3 +f 65/184/4 66/185/14 50/110/14 +f 58/170/13 59/172/15 43/108/15 +f 66/185/14 67/187/16 51/115/16 +f 59/172/15 60/174/17 44/118/17 +f 67/187/16 68/189/18 52/121/18 +f 60/174/17 61/175/6 45/298/6 +f 68/189/18 69/162/5 53/87/5 +f 61/178/6 62/177/8 46/88/8 +f 84/116/19 100/754/19 99/362/20 +f 85/122/21 101/755/21 100/363/19 +f 86/292/22 102/756/22 101/364/21 +f 87/293/23 103/757/23 102/365/22 +f 88/294/24 104/758/24 103/366/23 +f 73/296/25 89/759/25 104/367/24 +f 73/102/25 74/295/26 90/368/26 +f 75/297/27 91/760/27 90/370/26 +f 76/113/28 92/761/28 91/371/27 +f 77/119/29 93/762/29 92/372/28 +f 78/299/30 94/763/30 93/373/29 +f 79/89/31 95/764/31 94/374/30 +f 80/94/32 96/765/32 95/375/31 +f 80/100/32 81/99/33 97/376/33 +f 81/107/33 82/106/34 98/378/34 +f 83/111/20 99/766/20 98/380/34 +f 117/227/5 133/135/5 132/136/18 +f 110/191/8 126/148/8 125/151/6 +f 118/194/7 134/133/7 133/135/5 +f 111/198/9 127/146/9 126/148/8 +f 119/199/10 135/129/10 134/133/7 +f 112/203/11 128/144/11 127/146/9 +f 120/205/12 136/161/12 135/129/10 +f 113/207/4 129/143/4 128/144/11 +f 106/208/13 122/158/13 121/160/3 +f 105/211/3 121/160/3 136/161/12 +f 114/214/14 130/141/14 129/143/4 +f 107/215/15 123/155/15 122/158/13 +f 115/219/16 131/138/16 130/141/14 +f 108/221/17 124/154/17 123/155/15 +f 116/223/18 132/136/18 131/138/16 +f 109/225/6 125/152/6 124/154/17 +f 137/159/3 153/169/3 168/166/12 +f 146/140/14 162/186/14 161/183/4 +f 139/156/15 155/316/15 154/171/13 +f 147/139/16 163/188/16 162/186/14 +f 140/153/17 156/173/17 155/316/15 +f 148/137/18 164/190/18 163/188/16 +f 141/313/6 157/317/6 156/173/17 +f 149/134/5 165/314/5 164/190/18 +f 142/149/8 158/318/8 157/176/6 +f 150/132/7 166/163/7 165/314/5 +f 143/147/9 159/179/9 158/318/8 +f 151/131/10 167/315/10 166/163/7 +f 144/145/11 160/181/11 159/179/9 +f 152/130/12 168/166/12 167/315/10 +f 145/142/4 161/183/4 160/181/11 +f 138/157/13 154/171/13 153/169/3 +f 178/325/14 194/767/14 195/381/16 +f 171/326/15 187/768/15 188/382/17 +f 179/327/16 195/769/16 196/383/18 +f 172/328/17 188/770/17 189/384/6 +f 180/329/18 196/771/18 197/385/5 +f 173/192/6 189/772/6 190/386/8 +f 181/195/5 197/773/5 198/387/7 +f 174/320/8 190/774/8 191/388/9 +f 182/200/7 198/775/7 199/389/10 +f 175/321/9 191/776/9 192/390/11 +f 183/322/10 199/777/10 200/391/12 +f 176/323/11 192/778/11 193/392/4 +f 169/393/3 185/779/3 186/394/13 +f 184/212/12 200/780/12 185/395/3 +f 177/324/4 193/781/4 194/396/14 +f 170/216/13 186/782/13 187/397/15 +f 208/398/35 216/410/35 215/399/36 +f 206/401/37 214/411/37 213/402/38 +f 204/404/39 212/412/39 211/405/40 +f 202/407/41 210/414/41 209/408/42 +f 201/409/42 209/408/42 216/410/35 +f 207/400/36 215/399/36 214/411/37 +f 205/403/38 213/402/38 212/412/39 +f 203/413/40 211/783/40 210/414/41 +f 224/415/43 232/427/43 231/416/44 +f 222/418/45 230/428/45 229/419/46 +f 220/421/47 228/429/47 227/422/48 +f 218/424/49 226/431/49 225/425/50 +f 217/426/50 225/425/50 232/427/43 +f 223/417/44 231/416/44 230/428/45 +f 221/420/46 229/419/46 228/429/47 +f 219/430/48 227/784/48 226/431/49 +f 240/432/39 248/444/39 247/433/40 +f 238/435/41 246/445/41 245/436/42 +f 236/438/35 244/446/35 243/439/36 +f 234/441/37 242/448/37 241/442/38 +f 233/443/38 241/442/38 248/444/39 +f 239/434/40 247/433/40 246/445/41 +f 237/437/42 245/436/42 244/446/35 +f 235/447/36 243/785/36 242/448/37 +f 256/449/47 264/461/47 263/450/48 +f 254/452/49 262/462/49 261/453/50 +f 252/455/43 260/463/43 259/456/44 +f 250/458/45 258/465/45 257/459/46 +f 249/460/46 257/459/46 264/461/47 +f 255/451/48 263/450/48 262/462/49 +f 253/454/50 261/453/50 260/463/43 +f 251/464/44 259/786/44 258/465/45 +f 272/466/41 280/478/41 279/467/42 +f 270/469/35 278/479/35 277/470/36 +f 268/472/37 276/480/37 275/473/38 +f 266/475/39 274/482/39 273/476/40 +f 265/477/40 273/476/40 280/478/41 +f 271/468/42 279/467/42 278/479/35 +f 269/471/36 277/470/36 276/480/37 +f 267/481/38 275/787/38 274/482/39 +f 288/483/49 296/495/49 295/484/50 +f 286/486/43 294/496/43 293/487/44 +f 284/489/45 292/497/45 291/490/46 +f 282/492/47 290/499/47 289/493/48 +f 281/494/48 289/493/48 296/495/49 +f 287/485/50 295/484/50 294/496/43 +f 285/488/44 293/487/44 292/497/45 +f 283/498/46 291/788/46 290/499/47 +f 304/500/37 312/512/37 311/501/38 +f 302/503/39 310/513/39 309/504/40 +f 300/506/41 308/514/41 307/507/42 +f 298/509/35 306/516/35 305/510/36 +f 297/511/36 305/510/36 312/512/37 +f 303/502/38 311/501/38 310/513/39 +f 301/505/40 309/504/40 308/514/41 +f 299/515/42 307/789/42 306/516/35 +f 320/517/45 328/529/45 327/518/46 +f 318/520/47 326/530/47 325/521/48 +f 316/523/49 324/531/49 323/524/50 +f 314/526/43 322/533/43 321/527/44 +f 313/528/44 321/527/44 328/529/45 +f 319/519/46 327/518/46 326/530/47 +f 317/522/48 325/521/48 324/531/49 +f 315/532/50 323/790/50 322/533/43 +f 331/534/15 339/791/54 338/535/51 +f 336/537/5 344/548/56 343/538/52 +f 334/540/4 342/549/57 341/541/53 +f 332/543/6 340/550/58 339/544/54 +f 330/536/3 338/535/51 337/546/55 +f 329/547/10 337/546/55 344/548/56 +f 335/539/16 343/538/52 342/549/57 +f 333/542/9 341/541/53 340/550/58 +f 341/551/53 342/559/57 349/552/59 +f 338/554/51 346/572/72 345/555/61 +f 337/556/55 345/555/61 351/557/62 +f 343/538/52 350/562/64 349/552/59 +f 340/560/58 341/551/53 348/553/60 +f 343/538/52 344/558/56 351/557/62 +f 351/557/62 358/568/70 357/563/65 +f 348/553/60 349/552/59 356/564/66 +f 345/555/61 346/572/72 353/566/68 +f 345/555/61 352/567/69 358/568/70 +f 350/562/64 357/563/65 356/564/66 +f 348/553/60 355/565/67 354/569/71 +f 358/573/70 365/586/76 364/574/2 +f 369/575/16 377/792/80 376/576/73 +f 355/578/67 356/590/66 363/579/74 +f 352/581/69 353/585/68 359/582/75 +f 339/584/54 366/793/1 359/582/75 +f 352/581/69 360/583/10 365/586/76 +f 339/587/54 354/591/71 362/588/77 +f 357/563/65 364/574/2 363/579/74 +f 355/578/67 361/580/9 362/588/77 +f 374/592/6 382/603/82 381/593/78 +f 372/595/3 380/604/83 379/596/79 +f 370/598/5 378/605/84 377/599/80 +f 368/577/4 376/576/73 375/601/81 +f 367/602/9 375/601/81 382/603/82 +f 373/594/15 381/593/78 380/604/83 +f 371/597/10 379/596/79 378/605/84 +f 380/606/83 387/614/89 386/607/85 +f 375/609/81 376/626/73 384/610/86 +f 382/612/82 375/609/81 383/611/87 +f 381/593/78 388/617/91 387/614/89 +f 379/608/79 386/607/85 385/615/90 +f 382/612/82 389/613/88 388/617/91 +f 388/617/91 389/613/88 396/618/92 +f 386/607/85 387/614/89 394/620/94 +f 383/611/87 384/610/86 391/622/96 +f 389/613/88 383/611/87 390/623/97 +f 388/617/91 395/619/93 394/620/94 +f 386/607/85 393/621/95 392/624/98 +f 396/628/92 403/638/74 402/629/2 +f 393/630/95 394/642/94 401/631/76 +f 390/633/97 391/637/96 397/634/77 +f 377/636/80 404/794/1 397/634/77 +f 390/633/97 398/635/9 403/638/74 +f 377/639/80 392/643/98 400/640/75 +f 395/619/93 402/629/2 401/631/76 +f 393/630/95 399/632/10 400/640/75 +f 407/644/9 415/795/77 414/645/99 +f 412/647/3 420/658/103 419/648/100 +f 410/650/5 418/659/104 417/651/101 +f 408/653/4 416/660/105 415/654/77 +f 406/646/6 414/645/99 413/656/102 +f 405/657/15 413/656/102 420/658/103 +f 411/649/10 419/648/100 418/659/104 +f 409/652/16 417/651/101 416/660/105 +f 417/661/101 418/669/104 425/662/106 +f 414/664/99 422/682/118 421/665/108 +f 413/666/102 421/665/108 427/667/109 +f 419/648/100 426/672/76 425/662/106 +f 416/670/105 417/661/101 424/663/107 +f 420/668/103 427/667/109 426/672/76 +f 426/672/76 427/667/109 434/673/111 +f 424/663/107 425/662/106 432/675/113 +f 421/665/108 422/682/118 429/677/115 +f 421/665/108 428/678/116 434/673/111 +f 426/672/76 433/674/112 432/675/113 +f 424/663/107 431/676/114 430/679/117 +f 433/674/112 434/696/111 441/683/91 +f 445/685/10 453/796/75 452/686/119 +f 431/688/114 432/700/113 439/689/64 +f 428/691/116 429/694/115 435/692/54 +f 429/694/115 415/797/77 442/695/1 +f 434/696/111 428/691/116 436/693/15 +f 430/697/117 438/701/80 442/698/1 +f 433/674/112 440/684/2 439/689/64 +f 431/688/114 437/690/16 438/701/80 +f 450/702/4 458/713/123 457/703/120 +f 448/705/6 456/714/124 455/706/121 +f 446/708/3 454/715/125 453/709/75 +f 444/687/5 452/686/119 451/711/122 +f 443/712/16 451/711/122 458/713/123 +f 449/704/9 457/703/120 456/714/124 +f 447/707/15 455/706/121 454/715/125 +f 455/716/121 456/724/124 463/717/126 +f 452/719/119 460/737/138 459/720/128 +f 451/721/122 459/720/128 465/722/129 +f 457/703/120 464/727/74 463/717/126 +f 454/725/125 455/716/121 462/718/127 +f 458/723/123 465/722/129 464/727/74 +f 464/727/74 465/722/129 472/728/131 +f 462/718/127 463/717/126 470/730/133 +f 459/720/128 460/737/138 467/732/135 +f 465/722/129 459/720/128 466/733/136 +f 464/727/74 471/729/132 470/730/133 +f 462/718/127 469/731/134 468/734/137 +f 471/729/132 472/748/131 479/738/64 +f 469/740/134 470/752/133 477/741/91 +f 467/743/135 473/747/80 474/744/16 +f 453/746/75 480/798/1 473/747/80 +f 466/745/136 474/744/16 479/738/64 +f 468/749/137 476/753/54 480/750/1 +f 471/729/132 478/739/2 477/741/91 +f 469/740/134 475/742/15 476/753/54 diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_bottom.png b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_bottom.png new file mode 100644 index 000000000..6db8f00c0 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_bottom.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_off.png b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_off.png new file mode 100644 index 000000000..5c382d9f9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_off.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_on.png b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_on.png new file mode 100644 index 000000000..5738e17c1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_front_on.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_side.png b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_side.png new file mode 100644 index 000000000..f94f5ae4c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_top.png b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_top.png new file mode 100644 index 000000000..8c17a8dc8 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/machine_furnace_brick_top.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_brick.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_brick.png new file mode 100644 index 000000000..e2ffdd9f5 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_brick.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_lemegeton.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_lemegeton.png new file mode 100644 index 000000000..ffdd5c0ee Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_lemegeton.png differ diff --git a/src/main/resources/assets/hbm/textures/items/book_lemegeton.png b/src/main/resources/assets/hbm/textures/items/book_lemegeton.png new file mode 100644 index 000000000..4cb0fca9a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/book_lemegeton.png differ diff --git a/src/main/resources/assets/hbm/textures/items/chunk_base.png b/src/main/resources/assets/hbm/textures/items/chunk_base.png new file mode 100644 index 000000000..d7e0ed298 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/chunk_base.png differ diff --git a/src/main/resources/assets/hbm/textures/items/chunk_ore.rare.png b/src/main/resources/assets/hbm/textures/items/chunk_ore.rare.png new file mode 100644 index 000000000..ca81964dd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/chunk_ore.rare.png differ diff --git a/src/main/resources/assets/hbm/textures/items/definitelyfood.png b/src/main/resources/assets/hbm/textures/items/definitelyfood.png index 615a461c4..601e4b63d 100644 Binary files a/src/main/resources/assets/hbm/textures/items/definitelyfood.png and b/src/main/resources/assets/hbm/textures/items/definitelyfood.png differ diff --git a/src/main/resources/assets/hbm/textures/items/dwarven_pickaxe.png b/src/main/resources/assets/hbm/textures/items/dwarven_pickaxe.png new file mode 100644 index 000000000..a6540565c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/dwarven_pickaxe.png differ diff --git a/src/main/resources/assets/hbm/textures/items/key_red_cracked.png b/src/main/resources/assets/hbm/textures/items/key_red_cracked.png new file mode 100644 index 000000000..7abe81c3c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/key_red_cracked.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/hydrotreater.png b/src/main/resources/assets/hbm/textures/models/machines/hydrotreater.png new file mode 100644 index 000000000..51df73ed4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/hydrotreater.png differ