diff --git a/README.md b/README.md index f86803200..db2e42f5b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ * NTM Reloaded: https://github.com/TheOriginalGolem/Hbm-s-Nuclear-Tech-GIT/releases * NTM Extended Edition (Alcater): https://github.com/Alcatergit/Hbm-s-Nuclear-Tech-GIT/releases -* NTM WarFactory: https://github.com/MisterNorwood/Hbm-s-Nuclear-Tech-GIT/releases +* NTM Community Edition (WarFactory): https://codeberg.org/MrNorwood/Hbm-s-Nuclear-Tech-CE For 1.18, try Martin's remake: https://codeberg.org/MartinTheDragon/Nuclear-Tech-Mod-Remake/releases diff --git a/changelog b/changelog index a9ca40d00..0ba796cbe 100644 --- a/changelog +++ b/changelog @@ -1,12 +1,17 @@ ## Changed -* The toolbox' functionality has been completely changed (thanks gamma) - * Instead of a crappy backpack substitute that doesn't work half the time, the toolbox can quickly swap out the hotbar when used -* Updated StG 77 recipe to use two grips and a proper scope -* Buffed the RPA set -* Tiered damage and durability weapon mods are now craftable -* Duct tape is now cheaper and less ugly +* .75 bolts now work as advertised +* Updated lead pipe texture +* Removed recipes from a few ancient melee weapons, as well as the creative tab listing +* Removed flat magnets +* Taint should now also affect non-solid blocks that are full cubes +* Reduced the AoE size of 7.62mm, .50 BMG and 10 gauge explosive projectiles +* Removed the old gun mechanism items, turrets now use the new cast parts +* A secret weapon and its variant have become craftable +* NEI now shows RBMK fuel rod recycling and cooling +* Removed most of the old unused siege mobs ## Fixed -* Fixed a bunch of singleblocks not accepting fluids (thanks mellow) -* Fixed fluid valves not properly disconnecting -* Fixed a dupe regarding the weapon mod table +* Fixed taint destroying bedrock +* Fixed ferrouranium plate not being castable +* Fixed bayonet not rendering properly in third person +* Fixed xenon poison gauge in the RBMK control panel not showing up on colums (oops) \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 9e5a1e080..ef65fc1c4 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -276,6 +276,7 @@ public class ModBlocks { public static Block part_emitter; public static Block deco_loot; public static Block pedestal; + public static Block skeleton_holder; public static Block bobblehead; public static Block snowglobe; public static Block plushie; @@ -1467,6 +1468,7 @@ public class ModBlocks { part_emitter = new PartEmitter().setBlockName("part_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":part_top"); deco_loot = new BlockLoot().setBlockName("deco_loot").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); pedestal = new BlockPedestal().setBlockName("pedestal").setCreativeTab(null).setHardness(2.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":pedestal_top"); + skeleton_holder = new BlockSkeletonHolder().setBlockName("skeleton_holder").setCreativeTab(null).setHardness(2.0F).setResistance(10.0F).setBlockTextureName("soul_sand"); bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron"); plushie = new BlockPlushie().setBlockName("plushie").setStepSound(Block.soundTypeCloth).setResistance(50_0000.0F).setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_fiberglass_side"); @@ -2613,6 +2615,7 @@ public class ModBlocks { GameRegistry.registerBlock(part_emitter, ItemBlockBase.class, part_emitter.getUnlocalizedName()); GameRegistry.registerBlock(deco_loot, deco_loot.getUnlocalizedName()); GameRegistry.registerBlock(pedestal, pedestal.getUnlocalizedName()); + register(skeleton_holder); GameRegistry.registerBlock(bobblehead, ItemBlockMeta.class, bobblehead.getUnlocalizedName()); GameRegistry.registerBlock(snowglobe, ItemBlockMeta.class, snowglobe.getUnlocalizedName()); GameRegistry.registerBlock(plushie, ItemBlockBase.class, plushie.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/BlockTaint.java b/src/main/java/com/hbm/blocks/bomb/BlockTaint.java index 079058a64..c82d2526d 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockTaint.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockTaint.java @@ -19,6 +19,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; @@ -46,7 +47,7 @@ public class BlockTaint extends Block implements ITooltipProvider { if(Math.abs(i) + Math.abs(j) + Math.abs(k) > 4) continue; if(rand.nextFloat() > 0.25F) continue; Block b = world.getBlock(x + i, y + j, z + k); - if(!b.isNormalCube() || b.isAir(world, x + i, y + j, z + k)) continue; + if(!b.renderAsNormalBlock() || b.isAir(world, x + i, y + j, z + k) || b == Blocks.bedrock) continue; int targetMeta = meta + 1; boolean hasAir = false; for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockModDoor.java b/src/main/java/com/hbm/blocks/generic/BlockModDoor.java index b0ccc6634..233f8da71 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockModDoor.java +++ b/src/main/java/com/hbm/blocks/generic/BlockModDoor.java @@ -4,6 +4,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -20,7 +21,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockModDoor extends Block { +public class BlockModDoor extends Block implements INBTTransformable { @SideOnly(Side.CLIENT) private IIcon[] field_150017_a; @SideOnly(Side.CLIENT) @@ -234,7 +235,7 @@ public class BlockModDoor extends Block { } p_149727_1_.playSoundEffect(p_149727_2_, p_149727_3_, p_149727_4_, "hbm:block.openDoor", 1.0F, p_149727_1_.rand.nextFloat() * 0.1F + 0.9F); - + return true; } @@ -311,10 +312,10 @@ public class BlockModDoor extends Block { } public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { - + if((p_149650_1_ & 8) != 0) return null; - + if (this == ModBlocks.door_metal) return ModItems.door_metal; else if (this == ModBlocks.door_office) @@ -396,4 +397,9 @@ public class BlockModDoor extends Block { p_149681_1_.setBlockToAir(p_149681_2_, p_149681_3_ - 1, p_149681_4_); } } -} + + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTTransformable.transformMetaDoor(meta, coordBaseMode); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java index 5d4709b72..848065a84 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java @@ -5,6 +5,8 @@ import java.util.Random; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ITooltipProvider; +import com.hbm.world.gen.INBTTileEntityTransformable; +import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -27,7 +29,7 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.StatCollector; import net.minecraft.world.World; -public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider { +public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider, INBTTransformable { public BlockPlushie() { super(Material.cloth); @@ -37,7 +39,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public Item getItemDropped(int i, Random rand, int j) { return null; } - + @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { TileEntityPlushie entity = (TileEntityPlushie) world.getTileEntity(x, y, z); @@ -47,7 +49,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti @Override public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { - + if(!player.capabilities.isCreativeMode) { harvesters.set(player); if(!world.isRemote) { @@ -63,7 +65,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti harvesters.set(null); } } - + @Override public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); @@ -80,7 +82,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { int meta = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; world.setBlockMetadataWithNotify(x, y, z, meta, 2); - + TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); plushie.type = PlushieType.values()[Math.abs(stack.getItemDamage()) % PlushieType.values().length]; plushie.markDirty(); @@ -93,7 +95,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti @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) { TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); plushie.squishTimer = 11; @@ -104,8 +106,13 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti } } - public static class TileEntityPlushie extends TileEntity { - + @Override + public int transformMeta(int meta, int coordBaseMode) { + return (meta + coordBaseMode * 4) % 16; + } + + public static class TileEntityPlushie extends TileEntity implements INBTTileEntityTransformable { + public PlushieType type = PlushieType.NONE; public int squishTimer; @@ -120,7 +127,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti this.writeToNBT(nbt); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); } - + @Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { this.readFromNBT(pkt.func_148857_g()); @@ -137,8 +144,13 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti super.writeToNBT(nbt); nbt.setByte("type", (byte) type.ordinal()); } + + @Override + public void transformTE(World world, int coordBaseMode) { + type = PlushieType.values()[world.rand.nextInt(PlushieType.values().length - 1) + 1]; + } } - + public static enum PlushieType { NONE( "NONE", null), YOMI( "Yomi", "Hi! Can I be your rabbit friend?"), @@ -147,7 +159,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti public String label; public String inscription; - + private PlushieType(String label, String inscription) { this.label = label; this.inscription = inscription; diff --git a/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java b/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java new file mode 100644 index 000000000..e64243534 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java @@ -0,0 +1,114 @@ +package com.hbm.blocks.generic; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class BlockSkeletonHolder extends BlockContainer { + + public BlockSkeletonHolder() { + super(Material.rock); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntitySkeletonHolder(); + } + + @Override public int getRenderType() { return -1; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @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, 5, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + } + + @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; + if(player.isSneaking()) return false; + + TileEntitySkeletonHolder pedestal = (TileEntitySkeletonHolder) world.getTileEntity(x, y, z); + + if(pedestal.item == null && player.getHeldItem() != null) { + pedestal.item = player.getHeldItem().copy(); + player.inventory.mainInventory[player.inventory.currentItem] = null; + pedestal.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } else if(pedestal.item != null && player.getHeldItem() == null) { + player.inventory.mainInventory[player.inventory.currentItem] = pedestal.item.copy(); + pedestal.item = null; + pedestal.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } + + return false; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + + if(!world.isRemote) { + TileEntitySkeletonHolder entity = (TileEntitySkeletonHolder) world.getTileEntity(x, y, z); + if(entity != null && entity.item != null) { + EntityItem item = new EntityItem(world, x + 0.5, y, z + 0.5, entity.item.copy()); + world.spawnEntityInWorld(item); + } + } + + super.breakBlock(world, x, y, z, block, meta); + } + + public static class TileEntitySkeletonHolder extends TileEntity { + + public ItemStack item; + + @Override public boolean canUpdate() { return false; } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.item = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(this.item != null) { + NBTTagCompound stack = new NBTTagCompound(); + this.item.writeToNBT(stack); + nbt.setTag("item", stack); + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java index a8a44a55e..365c42e56 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java @@ -9,6 +9,7 @@ import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; @@ -144,6 +145,8 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio return true; } + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.wand_s) return false; + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); return true; diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index 80b1f3b92..2440a5d7d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -12,6 +12,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.StructureConfig; import com.hbm.itempool.ItemPool; import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; import com.hbm.util.I18nUtil; @@ -248,6 +249,11 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool } private void replace() { + if(!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandLoot)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a loot block but we're doing a TE update as if it is, cancelling!"); + return; + } + WeightedRandomChestContent[] pool = ItemPool.getPool(poolName); worldObj.setBlock(xCoord, yCoord, zCoord, replaceBlock, replaceMeta, 2); diff --git a/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java b/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java index 817914f5c..b5d111c13 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java +++ b/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.main.MainRegistry; +import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.Block; @@ -16,8 +17,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public abstract class BlockMachineBase extends BlockContainer { - +public abstract class BlockMachineBase extends BlockContainer implements INBTTransformable { + int guiID = -1; protected boolean rotatable = false; @@ -25,13 +26,13 @@ public abstract class BlockMachineBase extends BlockContainer { super(mat); this.guiID = guiID; } - + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - + if(guiID == -1) return false; - + if(world.isRemote) { return true; } else if(!player.isSneaking()) { @@ -41,9 +42,9 @@ public abstract class BlockMachineBase extends BlockContainer { return false; } } - + private static boolean keepInventory; - + @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { @@ -96,18 +97,24 @@ public abstract class BlockMachineBase extends BlockContainer { super.breakBlock(world, x, y, z, block, meta); } - + @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { - + if(!rotatable) return; - + 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); } -} + + @Override + public int transformMeta(int meta, int coordBaseMode) { + if(!rotatable) return meta; + return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index 3e3ea35ab..465ea6c69 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -4,6 +4,7 @@ import java.util.Random; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityMachineEPress; +import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.Block; @@ -19,7 +20,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class MachineEPress extends BlockContainer { +public class MachineEPress extends BlockContainer implements INBTTransformable { private final Random field_149933_a = new Random(); private static boolean keepInventory; @@ -120,4 +121,9 @@ public class MachineEPress extends BlockContainer { return false; } } -} + + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index f5a89d404..8c1c57663 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -15,6 +15,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -26,6 +27,8 @@ import net.minecraftforge.common.util.ForgeDirection; public class Spotlight extends Block implements ISpotlight, INBTTransformable { + public static boolean disableOnGeneration = true; + // I'd be extending the ReinforcedLamp class if it wasn't for the inverted behaviour of these specific lights // I want these blocks to be eminently useful, so removing the need for redstone by default is desired, // these act more like redstone torches, in that applying a signal turns them off @@ -220,6 +223,31 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { return ForgeDirection.getOrientation(metadata >> 1); } + // Replace bulbs on broken lights with a click + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + int meta = world.getBlockMetadata(x, y, z); + if(!isBroken(meta)) return false; + + repair(world, x, y, z); + return true; + } + + private void repair(World world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + if(!isBroken(meta)) return; + + world.setBlock(x, y, z, getOn(), meta - 1, 2); + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + int ox = x + dir.offsetX; + int oy = y + dir.offsetY; + int oz = z + dir.offsetZ; + Block block = world.getBlock(ox, oy, oz); + if(block == this) repair(world, ox, oy, oz); + } + } + public boolean isBroken(int metadata) { return (metadata & 1) == 1; } @@ -326,11 +354,13 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { @Override public int transformMeta(int meta, int coordBaseMode) { // +1 to set as broken, won't turn on until broken and replaced - return (INBTTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + 1; + int disabled = disableOnGeneration ? 1 : 0; + return (INBTTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + disabled; } @Override public Block transformBlock(Block block) { + if(!disableOnGeneration) return block; if(block == ModBlocks.spotlight_incandescent) return ModBlocks.spotlight_incandescent_off; if(block == ModBlocks.spotlight_fluoro) return ModBlocks.spotlight_fluoro_off; if(block == ModBlocks.spotlight_halogen) return ModBlocks.spotlight_halogen_off; diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java index 6dba321ce..df7899d3a 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKBase.java @@ -206,4 +206,9 @@ public abstract class RBMKBase extends BlockDummyable implements IToolable, ILoo public static int renderIDRods = RenderingRegistry.getNextAvailableRenderId(); public static int renderIDPassive = RenderingRegistry.getNextAvailableRenderId(); public static int renderIDControl = RenderingRegistry.getNextAvailableRenderId(); -} + + @Override + public int transformMeta(int meta, int coordBaseMode) { + return meta; + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 84c9df2a6..4399f08c3 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -108,11 +108,6 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.lead_gavel, 1), new Object[] { "PIP", "IGI", "PIP", 'P', ModItems.pellet_buckshot, 'I', PB.ingot(), 'G', ModItems.wood_gavel }); //Misc weapons - CraftingManager.addRecipeAuto(new ItemStack(ModItems.saw, 1), new Object[] { "IIL", "PP ", 'P', STEEL.plate(), 'I', STEEL.ingot(), 'L', Items.leather }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bat, 1), new Object[] { "P", "P", "S", 'S', STEEL.plate(), 'P', KEY_PLANKS }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.bat_nail, 1), new Object[] { ModItems.bat, STEEL.plate() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.golf_club, 1), new Object[] { "IP", " P", " P", 'P', STEEL.plate(), 'I', STEEL.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipe_rusty, 1), new Object[] { "II", " I", " I", 'I', IRON.pipe() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipe_lead, 1), new Object[] { "II", " I", " I", 'I', PB.pipe() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ullapool_caber, 1), new Object[] { "ITI", " S ", " S ", 'I', IRON.plate(), 'T', Blocks.tnt, 'S', KEY_STICK }); @@ -197,14 +192,6 @@ public class ToolRecipes { addShovel( SA326.ingot(), ModItems.schrabidium_shovel); addHoe( SA326.ingot(), ModItems.schrabidium_hoe); } else { - /* - CraftingManager.addRecipeAuto(new ItemStack(ModItems.cobalt_decorated_sword, 1), new Object[] { " I ", " I ", "SBS", 'I', CO.ingot(), 'S', ModItems.ingot_meteorite_forged, 'B', ModItems.cobalt_sword }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.cobalt_decorated_pickaxe, 1), new Object[] { "III", " B ", " S ", 'I', CO.ingot(), 'S', ModItems.ingot_meteorite_forged, 'B', ModItems.cobalt_pickaxe }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.cobalt_decorated_axe, 1), new Object[] { "II", "IB", " S", 'I', CO.ingot(), 'S', ModItems.ingot_meteorite_forged, 'B', ModItems.cobalt_axe }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.cobalt_decorated_shovel, 1), new Object[] { "I", "B", "S", 'I', CO.ingot(), 'S', ModItems.ingot_meteorite_forged, 'B', ModItems.cobalt_shovel }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.cobalt_decorated_hoe, 1), new Object[] { "II", " B", " S", 'I', CO.ingot(), 'S', ModItems.ingot_meteorite_forged, 'B', ModItems.cobalt_hoe }); - - */ CraftingManager.addRecipeAuto(new ItemStack(ModItems.starmetal_sword, 1), new Object[] { " I ", " B ", "ISI", 'I', STAR.ingot(), 'S', ModItems.ring_starmetal, 'B', ModItems.cobalt_decorated_sword }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.starmetal_pickaxe, 1), new Object[] { "ISI", " B ", " I ", 'I', STAR.ingot(), 'S', ModItems.ring_starmetal, 'B', ModItems.cobalt_decorated_pickaxe }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.starmetal_axe, 1), new Object[] { "IS", "IB", " I", 'I', STAR.ingot(), 'S', ModItems.ring_starmetal, 'B', ModItems.cobalt_decorated_axe }); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 49c31e360..959d5eabc 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -187,7 +187,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.mp_chip_5, 1), new Object[] { "P", "C", "S", 'P', ANY_RUBBER.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'S', ModBlocks.steel_scaffold }); //Turrets - CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.turret_sentry, 1), new Object[] { "PPL", " MD", " SC", 'P', STEEL.plate(), 'M', ModItems.motor, 'L', ModItems.mechanism_rifle_1, 'S', ModBlocks.steel_scaffold, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'D', ModItems.crt_display }); + CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.turret_sentry, 1), new Object[] { "PPL", " MD", " SC", 'P', STEEL.plate(), 'M', ModItems.motor, 'L', GUNMETAL.mechanism(), 'S', ModBlocks.steel_scaffold, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'D', ModItems.crt_display }); //Guns CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_b92), new Object[] { "DDD", "SSC", " R", 'D', ModItems.plate_dineutronium, 'S', STAR.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'R', ModItems.gun_lasrifle }); diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 9d0437c72..b9e6bb10d 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -17,7 +17,6 @@ import com.hbm.entity.missile.EntityMissileTier4.*; import com.hbm.entity.mob.*; import com.hbm.entity.mob.botprime.*; import com.hbm.entity.mob.glyphid.*; -import com.hbm.entity.mob.siege.*; import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; import com.hbm.entity.train.EntityRailCarBase.BoundingBoxDummyEntity; @@ -198,7 +197,6 @@ public class EntityMappings { addEntity(EntityNukeTorex.class, "entity_effect_torex", 250, false); addEntity(EntityArtilleryShell.class, "entity_artillery_shell", 1000); addEntity(EntityArtilleryRocket.class, "entity_himars", 1000); - addEntity(EntitySiegeTunneler.class, "entity_meme_tunneler", 1000); addEntity(EntityCog.class, "entity_stray_cog", 1000); addEntity(EntitySawblade.class, "entity_stray_saw", 1000); addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000); @@ -237,10 +235,6 @@ public class EntityMappings { addMob(EntityFBI.class, "entity_ntm_fbi", 0x008000, 0x404040); addMob(EntityFBIDrone.class, "entity_ntm_fbi_drone", 0x008000, 0x404040); addMob(EntityRADBeast.class, "entity_ntm_radiation_blaze", 0x303030, 0x008000); - addMob(EntitySiegeZombie.class, "entity_meme_zombie", 0x303030, 0x008000); - addMob(EntitySiegeSkeleton.class, "entity_meme_skeleton", 0x303030, 0x000080); - addMob(EntitySiegeUFO.class, "entity_meme_ufo", 0x303030, 0x800000); - addMob(EntitySiegeCraft.class, "entity_meme_craft", 0x303030, 0x808000); addMob(EntityGlyphid.class, "entity_glyphid", 0x724A21, 0xD2BB72); addMob(EntityGlyphidBrawler.class, "entity_glyphid_brawler", 0x273038, 0xD2BB72); addMob(EntityGlyphidBehemoth.class, "entity_glyphid_behemoth", 0x267F00, 0xD2BB72); @@ -253,6 +247,7 @@ public class EntityMappings { addMob(EntityPlasticBag.class, "entity_plastic_bag", 0xd0d0d0, 0x808080); addMob(EntityParasiteMaggot.class, "entity_parasite_maggot", 0xd0d0d0, 0x808080); addMob(EntityDummy.class, "entity_ntm_test_dummy", 0xffffff, 0x000000); + addMob(EntityUndeadSoldier.class, "entity_ntm_undead_soldier", 0x749F30, 0x6C5B44); addSpawn(EntityCreeperPhosgene.class, 5, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityCreeperVolatile.class, 10, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); diff --git a/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java new file mode 100644 index 000000000..c540dd03b --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java @@ -0,0 +1,111 @@ +package com.hbm.entity.mob; + +import com.hbm.items.ModItems; + +import net.minecraft.block.Block; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class EntityUndeadSoldier extends EntityMob { + + public static final int DW_TYPE = 12; + public static final byte TYPE_ZOMBIE = 0; + public static final byte TYPE_SKELETON = 1; + + public EntityUndeadSoldier(World world) { + super(world); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityVillager.class, 0, true)); + } + + protected void entityInit() { + super.entityInit(); + this.getDataWatcher().addObject(DW_TYPE, Byte.valueOf((byte) 0)); + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(5.0D); + } + + @Override + protected boolean isAIEnabled() { + return true; + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + this.addRandomArmor(); + this.dataWatcher.updateObject(DW_TYPE, rand.nextBoolean() ? TYPE_ZOMBIE : TYPE_SKELETON); + return super.onSpawnWithEgg(data); + } + + @Override + protected void addRandomArmor() { + this.setCurrentItemOrArmor(4, new ItemStack(ModItems.taurun_helmet)); + this.setCurrentItemOrArmor(3, new ItemStack(ModItems.taurun_plate)); + this.setCurrentItemOrArmor(2, new ItemStack(ModItems.taurun_legs)); + this.setCurrentItemOrArmor(1, new ItemStack(ModItems.taurun_boots)); + + this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_heavy_revolver)); + } + + @Override + protected String getLivingSound() { + byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); + if(type == TYPE_ZOMBIE) return "mob.zombie.say"; + if(type == TYPE_SKELETON) return "mob.skeleton.say"; + return super.getLivingSound(); + } + + @Override + protected String getHurtSound() { + byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); + if(type == TYPE_ZOMBIE) return "mob.zombie.hurt"; + if(type == TYPE_SKELETON) return "mob.skeleton.hurt"; + return super.getHurtSound(); + } + + @Override + protected String getDeathSound() { + byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); + if(type == TYPE_ZOMBIE) return "mob.zombie.death"; + if(type == TYPE_SKELETON) return "mob.skeleton.death"; + return super.getDeathSound(); + } + + @Override + protected void func_145780_a(int x, int y, int z, Block blck) { + byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); + if(type == TYPE_ZOMBIE) this.playSound("mob.zombie.step", 0.15F, 1.0F); + if(type == TYPE_SKELETON) this.playSound("mob.skeleton.step", 0.15F, 1.0F); + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEAD; + } + + @Override protected void dropFewItems(boolean player, int loot) { } + @Override protected void dropEquipment(boolean player, int loot) { } +} diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java deleted file mode 100644 index 46e685a52..000000000 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.hbm.entity.mob.siege; - -import com.hbm.entity.projectile.EntitySiegeLaser; -import com.hbm.items.ModItems; - -import api.hbm.entity.IRadiationImmune; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IEntityLivingData; -import net.minecraft.entity.IRangedAttackMob; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIArrowAttack; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, IRadiationImmune { - - public EntitySiegeSkeleton(World world) { - super(world); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 20, 60, 15.0F)); - this.tasks.addTask(3, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(5, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float damage) { - - if(this.isEntityInvulnerable()) - return false; - - SiegeTier tier = this.getTier(); - - if(tier.fireProof && source.isFireDamage()) { - this.extinguish(); - return false; - } - - if(tier.noFall && source == DamageSource.fall) - return false; - - //noFF can't be harmed by other mobs - if(tier.noFriendlyFire && source instanceof EntityDamageSource && !(((EntityDamageSource) source).getEntity() instanceof EntityPlayer)) - return false; - - damage -= tier.dt; - - if(damage < 0) { - worldObj.playSoundAtEntity(this, "random.break", 5F, 1.0F + rand.nextFloat() * 0.5F); - return false; - } - - damage *= (1F - tier.dr); - - return super.attackEntityFrom(source, damage); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.getDataWatcher().addObject(12, (int) 0); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23D); - this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D); - } - - public void setTier(SiegeTier tier) { - this.getDataWatcher().updateObject(12, tier.id); - - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).applyModifier(new AttributeModifier("Tier Speed Mod", tier.speedMod, 1)); - this.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier("Tier Damage Mod", tier.damageMod, 1)); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(tier.health); - this.setHealth(this.getMaxHealth()); - } - - public SiegeTier getTier() { - SiegeTier tier = SiegeTier.tiers[this.getDataWatcher().getWatchableObjectInt(12)]; - return tier != null ? tier : SiegeTier.CLAY; - } - - @Override - protected void addRandomArmor() { - super.addRandomArmor(); - this.setCurrentItemOrArmor(0, new ItemStack(ModItems.detonator_laser)); - } - - @Override - public void writeEntityToNBT(NBTTagCompound nbt) { - super.writeEntityToNBT(nbt); - nbt.setInteger("siegeTier", this.getTier().id); - } - - @Override - public void readEntityFromNBT(NBTTagCompound nbt) { - super.readEntityFromNBT(nbt); - this.setTier(SiegeTier.tiers[nbt.getInteger("siegeTier")]); - } - - @Override - public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { - this.setTier(SiegeTier.tiers[rand.nextInt(SiegeTier.getLength())]); - this.addRandomArmor(); - return super.onSpawnWithEgg(data); - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { - - double x = posX; - double y = posY + this.getEyeHeight(); - double z = posZ; - - Vec3 vec = Vec3.createVectorHelper(target.posX - x, target.posY + target.getYOffset() + target.height * 0.5 - y, target.posZ - z).normalize(); - - SiegeTier tier = this.getTier(); - - for(int i = 0; i < 3; i++) { - EntitySiegeLaser laser = new EntitySiegeLaser(worldObj, this); - laser.setPosition(x, y, z); - laser.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 1F, i == 1 ? 0.15F : 5F); - laser.setColor(0x808000); - laser.setDamage(tier.damageMod); - laser.setExplosive(tier.laserExplosive); - laser.setBreakChance(tier.laserBreak); - if(tier.laserIncendiary) laser.setIncendiary(); - worldObj.spawnEntityInWorld(laser); - } - - this.playSound("hbm:weapon.ballsLaser", 2.0F, 0.9F + rand.nextFloat() * 0.2F); - } - - @Override - protected boolean isAIEnabled() { - return true; - } - - @Override - protected String getLivingSound() { - return "hbm:entity.siegeIdle"; - } - - @Override - protected String getHurtSound() { - return "hbm:entity.siegeHurt"; - } - - @Override - protected String getDeathSound() { - return "hbm:entity.siegeDeath"; - } - - @Override - protected void dropFewItems(boolean byPlayer, int fortune) { - - if(byPlayer) { - for(ItemStack drop : this.getTier().dropItem) { - this.entityDropItem(drop.copy(), 0F); - } - } - } -} diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java deleted file mode 100644 index 12551252a..000000000 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.hbm.entity.mob.siege; - -import com.hbm.entity.mob.EntityUFOBase; -import com.hbm.entity.projectile.EntitySiegeLaser; -import api.hbm.entity.IRadiationImmune; -import net.minecraft.entity.IEntityLivingData; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class EntitySiegeUFO extends EntityUFOBase implements IRadiationImmune { - - private int attackCooldown; - - public EntitySiegeUFO(World world) { - super(world); - this.setSize(1.5F, 1F); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.getDataWatcher().addObject(12, (int) 0); - } - - public void setTier(SiegeTier tier) { - this.getDataWatcher().updateObject(12, tier.id); - - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(tier.speedMod); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(tier.health * 0.25); - this.setHealth(this.getMaxHealth()); - } - - public SiegeTier getTier() { - SiegeTier tier = SiegeTier.tiers[this.getDataWatcher().getWatchableObjectInt(12)]; - return tier != null ? tier : SiegeTier.CLAY; - } - - @Override - public boolean attackEntityFrom(DamageSource source, float damage) { - - if(this.isEntityInvulnerable()) - return false; - - SiegeTier tier = this.getTier(); - - if(tier.fireProof && source.isFireDamage()) { - this.extinguish(); - return false; - } - - //noFF can't be harmed by other mobs - if(tier.noFriendlyFire && source instanceof EntityDamageSource && !(((EntityDamageSource) source).getEntity() instanceof EntityPlayer)) - return false; - - damage -= tier.dt; - - if(damage < 0) { - worldObj.playSoundAtEntity(this, "random.break", 5F, 1.0F + rand.nextFloat() * 0.5F); - return false; - } - - damage *= (1F - tier.dr); - - return super.attackEntityFrom(source, damage); - } - - @Override - protected void updateEntityActionState() { - super.updateEntityActionState(); - - if(this.courseChangeCooldown > 0) { - this.courseChangeCooldown--; - } - if(this.scanCooldown > 0) { - this.scanCooldown--; - } - - if(!worldObj.isRemote) { - if(this.attackCooldown > 0) { - this.attackCooldown--; - } - - if(this.attackCooldown == 0 && this.target != null) { - this.attackCooldown = 20 + rand.nextInt(5); - - double x = posX; - double y = posY; - double z = posZ; - - Vec3 vec = Vec3.createVectorHelper(target.posX - x, target.posY + target.height * 0.5 - y, target.posZ - z).normalize(); - SiegeTier tier = this.getTier(); - - EntitySiegeLaser laser = new EntitySiegeLaser(worldObj, this); - laser.setPosition(x, y, z); - laser.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 1F, 0.15F); - laser.setColor(0x802000); - laser.setDamage(tier.damageMod); - laser.setExplosive(tier.laserExplosive); - laser.setBreakChance(tier.laserBreak); - if(tier.laserIncendiary) laser.setIncendiary(); - worldObj.spawnEntityInWorld(laser); - this.playSound("hbm:weapon.ballsLaser", 2.0F, 1.0F); - } - } - - if(this.courseChangeCooldown > 0) { - approachPosition(this.target == null ? 0.25D : 0.5D + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue() * 1); - } - } - - @Override - public void writeEntityToNBT(NBTTagCompound nbt) { - super.writeEntityToNBT(nbt); - nbt.setInteger("siegeTier", this.getTier().id); - } - - @Override - public void readEntityFromNBT(NBTTagCompound nbt) { - super.readEntityFromNBT(nbt); - this.setTier(SiegeTier.tiers[nbt.getInteger("siegeTier")]); - } - - @Override - public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { - this.setTier(SiegeTier.tiers[rand.nextInt(SiegeTier.getLength())]); - return super.onSpawnWithEgg(data); - } - - @Override - protected void dropFewItems(boolean byPlayer, int fortune) { - - if(byPlayer) { - for(ItemStack drop : this.getTier().dropItem) { - this.entityDropItem(drop.copy(), 0F); - } - } - } -} diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java deleted file mode 100644 index 82ac62ce8..000000000 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.hbm.entity.mob.siege; - -import api.hbm.entity.IRadiationImmune; -import net.minecraft.entity.IEntityLivingData; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.world.World; - -public class EntitySiegeZombie extends EntityMob implements IRadiationImmune { - - public EntitySiegeZombie(World world) { - super(world); - this.getNavigator().setBreakDoors(true); - this.tasks.addTask(0, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false)); - this.tasks.addTask(3, new EntityAIMoveTowardsRestriction(this, 1.0D)); - this.tasks.addTask(4, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(5, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); - this.setSize(0.6F, 1.8F); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float damage) { - - if(this.isEntityInvulnerable()) - return false; - - SiegeTier tier = this.getTier(); - - if(tier.fireProof && source.isFireDamage()) { - this.extinguish(); - return false; - } - - if(tier.noFall && source == DamageSource.fall) - return false; - - //noFF can't be harmed by other mobs - if(tier.noFriendlyFire && source instanceof EntityDamageSource && !(((EntityDamageSource) source).getEntity() instanceof EntityPlayer)) - return false; - - damage -= tier.dt; - - if(damage < 0) { - worldObj.playSoundAtEntity(this, "random.break", 5F, 1.0F + rand.nextFloat() * 0.5F); - return false; - } - - damage *= (1F - tier.dr); - - return super.attackEntityFrom(source, damage); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.getDataWatcher().addObject(12, (int) 0); - this.getDataWatcher().addObject(13, (byte) 0); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23D); - this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D); - } - - public void setTier(SiegeTier tier) { - this.getDataWatcher().updateObject(12, tier.id); - - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).applyModifier(new AttributeModifier("Tier Speed Mod", tier.speedMod, 1)); - this.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier("Tier Damage Mod", tier.damageMod, 1)); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(tier.health); - this.setHealth(this.getMaxHealth()); - } - - public SiegeTier getTier() { - SiegeTier tier = SiegeTier.tiers[this.getDataWatcher().getWatchableObjectInt(12)]; - return tier != null ? tier : SiegeTier.CLAY; - } - - @Override - protected boolean isAIEnabled() { - return true; - } - - @Override - protected String getLivingSound() { - return "hbm:entity.siegeIdle"; - } - - @Override - protected String getHurtSound() { - return "hbm:entity.siegeHurt"; - } - - @Override - protected String getDeathSound() { - return "hbm:entity.siegeDeath"; - } - - @Override - protected void dropFewItems(boolean byPlayer, int fortune) { - - if(byPlayer) { - for(ItemStack drop : this.getTier().dropItem) { - this.entityDropItem(drop.copy(), 0F); - } - } - } - - @Override - public void onUpdate() { - - super.onUpdate(); - if(!worldObj.isRemote) { - this.dataWatcher.updateObject(13, (byte)(this.getAttackTarget() != null ? 1 : 0)); - } - } - - @Override - public void writeEntityToNBT(NBTTagCompound nbt) { - super.writeEntityToNBT(nbt); - nbt.setInteger("siegeTier", this.getTier().id); - } - - @Override - public void readEntityFromNBT(NBTTagCompound nbt) { - super.readEntityFromNBT(nbt); - this.setTier(SiegeTier.tiers[nbt.getInteger("siegeTier")]); - } - - @Override - public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { - this.setTier(SiegeTier.tiers[rand.nextInt(SiegeTier.getLength())]); - return super.onSpawnWithEgg(data); - } -} \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java b/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java index cdbce5b5c..92b08e2c7 100644 --- a/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java +++ b/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java @@ -2,6 +2,9 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.FuelPoolRecipes; +import com.hbm.items.machine.ItemRBMKRod; + +import net.minecraft.item.ItemStack; public class FuelPoolHandler extends NEIUniversalHandler { @@ -13,4 +16,22 @@ public class FuelPoolHandler extends NEIUniversalHandler { public String getKey() { return "ntmSpentDrum"; } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + if(ingredient != null && ingredient.getItem() != null && ingredient.getItem() instanceof ItemRBMKRod) { + if(ItemRBMKRod.getCoreHeat(ingredient) < 50 && ItemRBMKRod.getHullHeat(ingredient) < 50) return; + } + + super.loadUsageRecipes(ingredient); + } + + @Override + public void loadCraftingRecipes(ItemStack ingredient) { + if(ingredient != null && ingredient.getItem() != null && ingredient.getItem() instanceof ItemRBMKRod) { + if(ItemRBMKRod.getCoreHeat(ingredient) >= 50 || ItemRBMKRod.getHullHeat(ingredient) >= 50) return; + } + + super.loadCraftingRecipes(ingredient); + } } diff --git a/src/main/java/com/hbm/handler/nei/RBMKRodDisassemblyHandler.java b/src/main/java/com/hbm/handler/nei/RBMKRodDisassemblyHandler.java new file mode 100644 index 000000000..1e7decef2 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/RBMKRodDisassemblyHandler.java @@ -0,0 +1,94 @@ +package com.hbm.handler.nei; + +import java.util.HashMap; + +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.machine.ItemRBMKRod; + +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class RBMKRodDisassemblyHandler extends NEIUniversalHandler { + + public RBMKRodDisassemblyHandler() { + super("RBMK Rod Disassembly", Blocks.crafting_table, getRecipes()); + } + + @Override + public String getKey() { + return "ntmRBMKDisassembly"; + } + + public static HashMap getRecipes() { + HashMap map = new HashMap<>(); + + for(ItemRBMKRod rod : ItemRBMKRod.craftableRods) { + for(int enrichment = 0; enrichment <= 4; enrichment++) { + ItemStack result = new ItemStack(rod.pellet, 8, enrichment); + map.put(new ComparableStackHeat(rod, false, enrichment, false), result); + + if(rod.pellet.isXenonEnabled()) { + ItemStack resultPoison = new ItemStack(rod.pellet, 8, enrichment + 5); + map.put(new ComparableStackHeat(rod, false, enrichment, true), resultPoison); + } + } + } + + return map; + } + + // Don't show recipes for hot rods (which will cause it to only show cooling recipes) + @Override + public void loadUsageRecipes(ItemStack ingredient) { + if(ingredient != null && ingredient.getItem() != null && ingredient.getItem() instanceof ItemRBMKRod) { + if(ItemRBMKRod.getCoreHeat(ingredient) > 50 || ItemRBMKRod.getHullHeat(ingredient) > 50) return; + } + + super.loadUsageRecipes(ingredient); + } + + public static class ComparableStackHeat extends ComparableStack { + + // I was going to filter by all of these, but found it is just best to show all possible recipes for everything but heat + private final boolean isHot; + private final int enrichment; + private final boolean hasPoison; + + public ComparableStackHeat(Item item, boolean isHot) { + this(item, isHot, -1, false); + } + + public ComparableStackHeat(Item item, boolean isHot, int enrichment, boolean hasPoison) { + super(item); + this.isHot = isHot; + this.enrichment = enrichment; + this.hasPoison = hasPoison; + } + + public ItemStack toStack() { + ItemStack stack = super.toStack(); + ItemRBMKRod rod = (ItemRBMKRod) stack.getItem(); + if(enrichment >= 0) { + ItemRBMKRod.setYield(stack, Math.min(1 - ((double) enrichment) / 5, 0.99) * rod.yield); + } else { + ItemRBMKRod.setYield(stack, 0.2 * rod.yield); + } + if(hasPoison) ItemRBMKRod.setPoison(stack, 50); + if(!isHot) return stack; + ItemRBMKRod.setCoreHeat(stack, 100); + ItemRBMKRod.setHullHeat(stack, 50); + return stack; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + enrichment; + result = prime * result + (hasPoison ? 1 : 0); + return result; + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/nei/RBMKWasteDecayHandler.java b/src/main/java/com/hbm/handler/nei/RBMKWasteDecayHandler.java new file mode 100644 index 000000000..9be5a6ae2 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/RBMKWasteDecayHandler.java @@ -0,0 +1,40 @@ +package com.hbm.handler.nei; + +import java.util.HashMap; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemWasteLong; +import com.hbm.items.special.ItemWasteShort; + +import net.minecraft.item.ItemStack; + +public class RBMKWasteDecayHandler extends NEIUniversalHandler { + + public RBMKWasteDecayHandler() { + super("Nuclear Waste Decay", ModBlocks.machine_storage_drum, getRecipes()); + } + + @Override + public String getKey() { + return "ntmRBMKWaste"; + } + + public static HashMap getRecipes() { + HashMap map = new HashMap<>(); + + for(ItemWasteShort.WasteClass waste : ItemWasteShort.WasteClass.values()) { + map.put(new ComparableStack(ModItems.nuclear_waste_short, 1, waste), new ItemStack(ModItems.nuclear_waste_short_depleted, 1, waste.ordinal())); + map.put(new ComparableStack(ModItems.nuclear_waste_short_tiny, 1, waste), new ItemStack(ModItems.nuclear_waste_short_depleted_tiny, 1, waste.ordinal())); + } + + for(ItemWasteLong.WasteClass waste : ItemWasteLong.WasteClass.values()) { + map.put(new ComparableStack(ModItems.nuclear_waste_long, 1, waste), new ItemStack(ModItems.nuclear_waste_long_depleted, 1, waste.ordinal())); + map.put(new ComparableStack(ModItems.nuclear_waste_long_tiny, 1, waste), new ItemStack(ModItems.nuclear_waste_long_depleted_tiny, 1, waste.ordinal())); + } + + return map; + } + +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java index b19725c1f..84df7fad8 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java @@ -1,5 +1,6 @@ package com.hbm.inventory.container; +import com.hbm.items.block.ItemBlockStorageCrate; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; @@ -18,8 +19,15 @@ public class ContainerCrateBase extends ContainerBase { @Override public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { // prevents the player from moving around the currently open box - if(mode == 2 && button == player.inventory.currentItem) return null; - if(index == player.inventory.currentItem + 27 + this.tile.getSizeInventory()) return null; + if(player.inventory.getStackInSlot(player.inventory.currentItem) != null && + player.inventory.getStackInSlot(player.inventory.currentItem).getItem() instanceof ItemBlockStorageCrate) { + if (mode == 2 && button == player.inventory.currentItem) { + return null; + } + if (index == player.inventory.currentItem + 27 + this.tile.getSizeInventory()) { + return null; + } + } return super.slotClick(index, button, mode, player); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 7867f1bc2..542ddb96b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -366,6 +366,10 @@ public class GUIRBMKConsole extends GuiScreen { int fe = (int)Math.ceil((col.data.getDouble("enrichment")) * 8); if(fe > 8) fe = 8; drawTexturedModalRect(guiLeft + x + 4, guiTop + y + size - fe - 1, 14, 191 - fe, 2, fe); + + int fx = (int)Math.ceil((col.data.getDouble("xenon")) * 8 / 100); + if(fx > 8) fx = 8; + drawTexturedModalRect(guiLeft + x + 7, guiTop + y + size - fx - 1, 17, 191 - fx, 2, fx); } break; diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 16bc6378b..4a61981ff 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -141,7 +141,7 @@ public class Mats { public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setAutogen(BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m(); public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setAutogen(DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setAutogen(HEAVYBARREL, HEAVYRECEIVER).m(); + public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setAutogen(CASTPLATE, HEAVYBARREL, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setAutogen(DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setAutogen(CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setAutogen(CASTPLATE, LIGHTBARREL, LIGHTRECEIVER).m(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index c1949152a..c9aaeb836 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -74,7 +74,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.asbestos_cloth, 4), new AStack[] {new OreDictStack(ASBESTOS.ingot(), 2), new ComparableStack(Items.string, 6), new ComparableStack(Blocks.wool, 1), },50); makeRecipe(new ComparableStack(ModItems.filter_coal, 1), new AStack[] {new OreDictStack(COAL.dust(), 4), new ComparableStack(Items.string, 2), new ComparableStack(Items.paper, 1), },50); makeRecipe(new ComparableStack(ModItems.centrifuge_element, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 4), new OreDictStack(TI.plate528(), 4), new ComparableStack(ModItems.motor, 1), }, 100); - makeRecipe(new ComparableStack(ModItems.magnet_circular, 1), new AStack[] {new ComparableStack(ModBlocks.fusion_conductor, 5), new OreDictStack(STEEL.ingot(), 4), new OreDictStack(ALLOY.plate(), 6), },150); makeRecipe(new ComparableStack(ModItems.reactor_core, 1), new AStack[] {new OreDictStack(PB.ingot(), 8), new OreDictStack(BE.ingot(), 6), new OreDictStack(STEEL.plate(), 16), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(FIBER.ingot(), 2) },100); makeRecipe(new ComparableStack(ModItems.rtg_unit, 1), new AStack[] {new ComparableStack(ModItems.thermo_element, 2), new OreDictStack(CU.plateCast(), 1), new OreDictStack(PB.ingot(), 2), new OreDictStack(STEEL.plate(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CAPACITOR.ordinal()), },100); makeRecipe(new ComparableStack(ModItems.levitation_unit, 1), new AStack[] {new ComparableStack(ModItems.coil_copper, 4), new ComparableStack(ModItems.coil_tungsten, 2), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.nugget_schrabidium, 2), },100); @@ -626,34 +625,31 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.turret_chekhov, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(DURA.ingot(), 4), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), - new ComparableStack(ModItems.mechanism_rifle_2, 1), + new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_friendly, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(DURA.ingot(), 4), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), new OreDictStack(STEEL.pipe(), 3), - new ComparableStack(ModItems.mechanism_rifle_1, 1), + new OreDictStack(GUNMETAL.mechanism(), 1), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_jeremy, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(DURA.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), - new ComparableStack(ModItems.mechanism_launcher_2, 1), + new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); @@ -665,42 +661,39 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), - new ComparableStack(ModItems.mechanism_special, 1), + new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_richard, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(DURA.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), - new ComparableStack(ModItems.mechanism_launcher_2, 1), + new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_howard, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 24), - new OreDictStack(DURA.ingot(), 6), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), - new ComparableStack(ModItems.mechanism_rifle_2, 2), + new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_maxwell, 1), new AStack[] { new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 24), - new OreDictStack(DURA.ingot(), 6), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), - new ComparableStack(ModItems.mechanism_special, 3), + new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1) @@ -708,33 +701,30 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.turret_fritz, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(DURA.ingot(), 4), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), - new ComparableStack(ModItems.mechanism_launcher_1, 1), + new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_arty, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), - new OreDictStack(DURA.ingot(), 32), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), - new ComparableStack(ModItems.mechanism_launcher_2, 3), + new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.turret_himars, 1), new AStack[] { new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), - new OreDictStack(DURA.ingot(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.mechanism_launcher_2, 5), + new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1) }, 300); diff --git a/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java b/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java index 9f01c9d80..12bf21f4e 100644 --- a/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java @@ -8,15 +8,17 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.handler.nei.RBMKRodDisassemblyHandler; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemRBMKRod; import net.minecraft.item.ItemStack; public class FuelPoolRecipes extends SerializableRecipe { - + public static final HashMap recipes = new HashMap(); public static final FuelPoolRecipes instance = new FuelPoolRecipes(); @@ -38,8 +40,14 @@ public class FuelPoolRecipes extends SerializableRecipe { recipes.put(new ComparableStack(ModItems.waste_plate_sa326, 1, 1), new ItemStack(ModItems.waste_plate_sa326)); recipes.put(new ComparableStack(ModItems.waste_plate_ra226be, 1, 1), new ItemStack(ModItems.waste_plate_ra226be)); recipes.put(new ComparableStack(ModItems.waste_plate_pu238be, 1, 1), new ItemStack(ModItems.waste_plate_pu238be)); - + for(EnumPWRFuel pwr : EnumPWRFuel.values()) recipes.put(new ComparableStack(ModItems.pwr_fuel_hot, 1, pwr.ordinal()), new ItemStack(ModItems.pwr_fuel_depleted, 1, pwr.ordinal())); + + for(ItemRBMKRod rod : ItemRBMKRod.craftableRods) { + ItemStack result = new ItemStack(rod); + ItemRBMKRod.setYield(result, 0.2 * rod.yield); + recipes.put(new RBMKRodDisassemblyHandler.ComparableStackHeat(rod, true), result); + } } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index c5d5c95bb..cba9cb424 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -74,6 +74,15 @@ public class PedestalRecipes extends SerializableRecipe { new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL)) .extra(PedestalExtraCondition.FULL_MOON)); + recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator), + null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null, + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new OreDictStack(BIGMT.mechanism(), 4), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), + null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null)); + recipes.add(new PedestalRecipe(new ItemStack(ModItems.gun_aberrator_eott), + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new OreDictStack(BIGMT.mechanism(), 16), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR))); + recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_SM.ordinal()), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new ComparableStack(ModBlocks.moon_turf), new ComparableStack(ModItems.powder_magic), @@ -84,6 +93,10 @@ public class PedestalRecipes extends SerializableRecipe { new ComparableStack(ModItems.powder_magic), new ComparableStack(ModItems.ammo_standard, 4, EnumAmmo.NUKE_HIGH), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1)) .extra(PedestalExtraCondition.FULL_MOON)); + recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 5, EnumAmmoSecret.P35_800.ordinal()), + null, null, null, + null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null, + null, null, null)); } @Override diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index 1adbc375b..e832c102a 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -79,7 +79,7 @@ public class ItemEnums { } public static enum EnumSecretType { - CANISTER, CONTROLLER, SELENIUM_STEEL + CANISTER, CONTROLLER, SELENIUM_STEEL, ABERRATOR } public static enum EnumCasingType { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 694b18910..38e67f3ea 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -570,7 +570,6 @@ public class ModItems { public static Item coil_magnetized_tungsten; public static Item coil_gold; public static Item coil_gold_torus; - public static Item magnet_circular; public static Item component_limiter; public static Item component_emitter; public static Item chlorine_pinwheel; @@ -585,14 +584,6 @@ public class ModItems { public static ItemEnumMulti circuit_star_component; public static Item circuit_star; - public static Item mechanism_revolver_1; - public static Item mechanism_revolver_2; - public static Item mechanism_rifle_1; - public static Item mechanism_rifle_2; - public static Item mechanism_launcher_1; - public static Item mechanism_launcher_2; - public static Item mechanism_special; - public static Item assembly_nuke; public static Item casing; @@ -1864,6 +1855,10 @@ public class ModItems { public static Item dns_plate; public static Item dns_legs; public static Item dns_boots; + public static Item taurun_helmet; + public static Item taurun_plate; + public static Item taurun_legs; + public static Item taurun_boots; public static Item trenchmaster_helmet; public static Item trenchmaster_plate; public static Item trenchmaster_legs; @@ -2747,7 +2742,6 @@ public class ModItems { coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); - magnet_circular = new Item().setUnlocalizedName("magnet_circular").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnet_circular"); component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter"); component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter"); chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel"); @@ -2832,13 +2826,6 @@ public class ModItems { circuit_star_piece = (ItemEnumMulti) new ItemEnumMulti(ScrapType.class, true, true).setUnlocalizedName("circuit_star_piece").setCreativeTab(null); circuit_star_component = (ItemEnumMulti) new ItemCircuitStarComponent().setUnlocalizedName("circuit_star_component").setCreativeTab(null); circuit_star = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_star").setCreativeTab(null).setTextureName(RefStrings.MODID + ":circuit_star"); - mechanism_revolver_1 = new Item().setUnlocalizedName("mechanism_revolver_1").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_1"); - mechanism_revolver_2 = new Item().setUnlocalizedName("mechanism_revolver_2").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_3"); - mechanism_rifle_1 = new Item().setUnlocalizedName("mechanism_rifle_1").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_2"); - mechanism_rifle_2 = new Item().setUnlocalizedName("mechanism_rifle_2").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_4"); - mechanism_launcher_1 = new Item().setUnlocalizedName("mechanism_launcher_1").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_5"); - mechanism_launcher_2 = new Item().setUnlocalizedName("mechanism_launcher_2").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_6"); - mechanism_special = new Item().setUnlocalizedName("mechanism_special").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":mechanism_7"); assembly_nuke = new Item().setUnlocalizedName("assembly_nuke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":assembly_nuke"); casing = new ItemEnumMulti(ItemEnums.EnumCasingType.class, true, true).setUnlocalizedName("casing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":casing"); @@ -4495,6 +4482,16 @@ public class ModItems { dns_legs = new ArmorDNT(aMatDNS, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_legs").setTextureName(RefStrings.MODID + ":dns_legs"); dns_boots = new ArmorDNT(aMatDNS, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_boots").setTextureName(RefStrings.MODID + ":dns_boots"); + ArmorMaterial aMatTaurun = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatTaurun.customCraftingMaterial = ModItems.plate_iron; + taurun_helmet = new ArmorTaurun(aMatTaurun, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .setStepSize(1) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("taurun_helmet").setTextureName(RefStrings.MODID + ":taurun_helmet"); + taurun_plate = new ArmorTaurun(aMatTaurun, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_plate").setTextureName(RefStrings.MODID + ":taurun_plate"); + taurun_legs = new ArmorTaurun(aMatTaurun, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_legs").setTextureName(RefStrings.MODID + ":taurun_legs"); + taurun_boots = new ArmorTaurun(aMatTaurun, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_boots").setTextureName(RefStrings.MODID + ":taurun_boots"); ArmorMaterial aMatTrench = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); aMatTrench.customCraftingMaterial = ModItems.plate_iron; trenchmaster_helmet = new ArmorTrenchmaster(aMatTrench, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") @@ -4940,11 +4937,11 @@ public class ModItems { multitool_joule = new ItemMultitoolPassive().setUnlocalizedName("multitool_joule").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); multitool_decon = new ItemMultitoolPassive().setUnlocalizedName("multitool_decon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); - saw = new ModSword(MainRegistry.enumToolMaterialSaw).setUnlocalizedName("weapon_saw").setFull3D().setTextureName(RefStrings.MODID + ":saw"); - bat = new ModSword(MainRegistry.enumToolMaterialBat).setUnlocalizedName("weapon_bat").setFull3D().setTextureName(RefStrings.MODID + ":bat"); - bat_nail = new ModSword(MainRegistry.enumToolMaterialBatNail).setUnlocalizedName("weapon_bat_nail").setFull3D().setTextureName(RefStrings.MODID + ":bat_nail"); - golf_club = new ModSword(MainRegistry.enumToolMaterialGolfClub).setUnlocalizedName("weapon_golf_club").setFull3D().setTextureName(RefStrings.MODID + ":golf_club"); - pipe_rusty = new ModSword(MainRegistry.enumToolMaterialPipeRusty).setUnlocalizedName("weapon_pipe_rusty").setFull3D().setTextureName(RefStrings.MODID + ":pipe_rusty"); + saw = new ModSword(MainRegistry.enumToolMaterialSaw).setUnlocalizedName("weapon_saw").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":saw"); + bat = new ModSword(MainRegistry.enumToolMaterialBat).setUnlocalizedName("weapon_bat").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat"); + bat_nail = new ModSword(MainRegistry.enumToolMaterialBatNail).setUnlocalizedName("weapon_bat_nail").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat_nail"); + golf_club = new ModSword(MainRegistry.enumToolMaterialGolfClub).setUnlocalizedName("weapon_golf_club").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":golf_club"); + pipe_rusty = new ModSword(MainRegistry.enumToolMaterialPipeRusty).setUnlocalizedName("weapon_pipe_rusty").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":pipe_rusty"); pipe_lead = new ModSword(MainRegistry.enumToolMaterialPipeLead).setUnlocalizedName("weapon_pipe_lead").setFull3D().setTextureName(RefStrings.MODID + ":pipe_lead"); reer_graar = new ModSword(MainRegistry.tMatTitan).setUnlocalizedName("reer_graar").setFull3D().setTextureName(RefStrings.MODID + ":reer_graar_hd"); stopsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("stopsign").setTextureName(RefStrings.MODID + ":stopsign"); @@ -5562,7 +5559,6 @@ public class ModItems { GameRegistry.registerItem(motor_desh, motor_desh.getUnlocalizedName()); GameRegistry.registerItem(motor_bismuth, motor_bismuth.getUnlocalizedName()); GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); - GameRegistry.registerItem(magnet_circular, magnet_circular.getUnlocalizedName()); GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); @@ -5669,15 +5665,6 @@ public class ModItems { GameRegistry.registerItem(circuit_star_component, circuit_star_component.getUnlocalizedName()); GameRegistry.registerItem(circuit_star, circuit_star.getUnlocalizedName()); - //Gun Mechanisms - GameRegistry.registerItem(mechanism_revolver_1, mechanism_revolver_1.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_revolver_2, mechanism_revolver_2.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_rifle_1, mechanism_rifle_1.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_rifle_2, mechanism_rifle_2.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_launcher_1, mechanism_launcher_1.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_launcher_2, mechanism_launcher_2.getUnlocalizedName()); - GameRegistry.registerItem(mechanism_special, mechanism_special.getUnlocalizedName()); - //Casing GameRegistry.registerItem(casing, casing.getUnlocalizedName()); @@ -7023,6 +7010,10 @@ public class ModItems { GameRegistry.registerItem(dns_plate, dns_plate.getUnlocalizedName()); GameRegistry.registerItem(dns_legs, dns_legs.getUnlocalizedName()); GameRegistry.registerItem(dns_boots, dns_boots.getUnlocalizedName()); + GameRegistry.registerItem(taurun_helmet, taurun_helmet.getUnlocalizedName()); + GameRegistry.registerItem(taurun_plate, taurun_plate.getUnlocalizedName()); + GameRegistry.registerItem(taurun_legs, taurun_legs.getUnlocalizedName()); + GameRegistry.registerItem(taurun_boots, taurun_boots.getUnlocalizedName()); GameRegistry.registerItem(trenchmaster_helmet, trenchmaster_helmet.getUnlocalizedName()); GameRegistry.registerItem(trenchmaster_plate, trenchmaster_plate.getUnlocalizedName()); GameRegistry.registerItem(trenchmaster_legs, trenchmaster_legs.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorTaurun.java b/src/main/java/com/hbm/items/armor/ArmorTaurun.java new file mode 100644 index 000000000..d927935b4 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/ArmorTaurun.java @@ -0,0 +1,34 @@ +package com.hbm.items.armor; + +import com.hbm.render.model.ModelArmorTaurun; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +public class ArmorTaurun extends ArmorFSB { + + public ArmorTaurun(ArmorMaterial material, int slot, String texture) { + super(material, slot, texture); + this.setMaxDamage(0); + } + + @SideOnly(Side.CLIENT) + ModelArmorTaurun[] models; + + @Override + @SideOnly(Side.CLIENT) + public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { + + if(models == null) { + models = new ModelArmorTaurun[4]; + + for(int i = 0; i < 4; i++) + models[i] = new ModelArmorTaurun(i); + } + + return models[armorSlot]; + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKPellet.java b/src/main/java/com/hbm/items/machine/ItemRBMKPellet.java index e50dbcd66..2b252f2ff 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKPellet.java @@ -16,7 +16,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; public class ItemRBMKPellet extends ItemNuclearWaste { - + public String fullName = ""; protected boolean hasXenon = true; @@ -26,12 +26,16 @@ public class ItemRBMKPellet extends ItemNuclearWaste { this.setMaxDamage(0); this.setCreativeTab(MainRegistry.controlTab); } - + public ItemRBMKPellet disableXenon() { this.hasXenon = false; return this; } + public boolean isXenonEnabled() { + return hasXenon; + } + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tabs, List list) { @@ -39,10 +43,10 @@ public class ItemRBMKPellet extends ItemNuclearWaste { list.add(new ItemStack(item, 1, i)); } } - + @SideOnly(Side.CLIENT) private IIcon[] enrichmentOverlays; - + @SideOnly(Side.CLIENT) private IIcon xenonOverlay; @@ -50,13 +54,13 @@ public class ItemRBMKPellet extends ItemNuclearWaste { @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { super.registerIcons(iconRegister); - + this.enrichmentOverlays = new IIcon[5]; - + for(int i = 0; i < enrichmentOverlays.length; i++) { enrichmentOverlays[i] = iconRegister.registerIcon("hbm:rbmk_pellet_overlay_e" + i); } - + if(this.hasXenon) xenonOverlay = iconRegister.registerIcon("hbm:rbmk_pellet_overlay_xenon"); } @@ -71,16 +75,16 @@ public class ItemRBMKPellet extends ItemNuclearWaste { public int getRenderPasses(int meta) { return hasXenon(meta) ? 3 : 2; } - + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { super.addInformation(stack, player, list, bool); list.add(EnumChatFormatting.ITALIC + this.fullName); list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "Pellet for recycling"); - + int meta = rectify(stack.getItemDamage()); - + switch(meta % 5) { case 0: list.add(EnumChatFormatting.GOLD + "Brand New"); break; case 1: list.add(EnumChatFormatting.YELLOW + "Barely Depleted"); break; @@ -88,7 +92,7 @@ public class ItemRBMKPellet extends ItemNuclearWaste { case 3: list.add(EnumChatFormatting.DARK_GREEN + "Highly Depleted"); break; case 4: list.add(EnumChatFormatting.DARK_GRAY + "Fully Depleted"); break; } - + if(hasXenon(meta)) list.add(EnumChatFormatting.DARK_PURPLE + "High Xenon Poison"); } @@ -96,20 +100,20 @@ public class ItemRBMKPellet extends ItemNuclearWaste { @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamageForRenderPass(int meta, int pass) { - + if(pass == 0) return this.itemIcon; - + if(pass == 2) return this.xenonOverlay; - + return this.enrichmentOverlays[rectify(meta) % 5]; } - + public static boolean hasXenon(int meta) { return rectify(meta) >= 5; } - + public static int rectify(int meta) { return Math.abs(meta) % 10; } diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 895c788c6..59635dcdd 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -1,5 +1,6 @@ package com.hbm.items.machine; +import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.function.BiFunction; @@ -20,7 +21,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class ItemRBMKRod extends Item { - + public ItemRBMKPellet pellet; public String fullName = ""; //full name of the fuel rod public double reactivity; //endpoint of the function @@ -35,7 +36,7 @@ public class ItemRBMKRod extends Item { public double diffusion = 0.02D; //the speed at which the core heats the hull public NType nType = NType.SLOW; //neutronType, the most efficient neutron type for fission public NType rType = NType.FAST; //releaseType, the type of neutrons released by this fuel - + /* _____ * ,I I I I, * |'-----'| @@ -52,18 +53,22 @@ public class ItemRBMKRod extends Item { * | | * '-----' * I I I I - * + * * i drew a fuel rod yay */ + public static List craftableRods = new ArrayList<>(); + public ItemRBMKRod(ItemRBMKPellet pellet) { this(pellet.fullName); this.pellet = pellet; + + craftableRods.add(this); } public ItemRBMKRod(String fullName) { this.fullName = fullName; - + this.setContainerItem(ModItems.rbmk_fuel_empty); this.setMaxStackSize(1); this.setCreativeTab(MainRegistry.controlTab); @@ -93,7 +98,7 @@ public class ItemRBMKRod extends Item { this.depFunc = func; return this; } - + public ItemRBMKRod setXenon(double gen, double burn) { this.xGen = gen; this.xBurn = burn; @@ -120,7 +125,7 @@ public class ItemRBMKRod extends Item { this.rType = rType; return this; } - + /** * Adjusts the input flux using the poison level * Generates, then burns poison @@ -131,82 +136,82 @@ public class ItemRBMKRod extends Item { * @return outFlux */ public double burn(World world, ItemStack stack, double inFlux) { - + inFlux += selfRate; - + //if xenon poison is enabled if(RBMKDials.getXenon(world)) { double xenon = getPoison(stack); xenon -= xenonBurnFunc(inFlux); - + inFlux *= (1D - getPoisonLevel(stack)); - + xenon += xenonGenFunc(inFlux); - + if(xenon < 0D) xenon = 0D; if(xenon > 100D) xenon = 100D; - + setPoison(stack, xenon); } - + double outFlux = reactivityFunc(inFlux, getEnrichment(stack)) * RBMKDials.getReactivityMod(world); //if depletion is enabled if(RBMKDials.getDepletion(world)) { double y = getYield(stack); y -= inFlux; - + if(y < 0D) y = 0D; - + setYield(stack, y); } - + double coreHeat = this.getCoreHeat(stack); coreHeat += outFlux * heat; - + this.setCoreHeat(stack, rectify(coreHeat)); - + return outFlux; } - + private double rectify(double num) { - + if(num > 1_000_000D) num = 1_000_000D; if(num < 20D || Double.isNaN(num)) num = 20D; - + return num; } - + /** * Heat up the core based on the outFlux, then move some heat to the hull * @param stack */ public void updateHeat(World world, ItemStack stack, double mod) { - + double coreHeat = this.getCoreHeat(stack); double hullHeat = this.getHullHeat(stack); - + if(coreHeat > hullHeat) { - + double mid = (coreHeat - hullHeat) / 2D; - + coreHeat -= mid * this.diffusion * RBMKDials.getFuelDiffusionMod(world) * mod; hullHeat += mid * this.diffusion * RBMKDials.getFuelDiffusionMod(world) * mod; - + this.setCoreHeat(stack, rectify(coreHeat)); this.setHullHeat(stack, rectify(hullHeat)); } } - + /** * return one tick's worth of heat and cool the hull of the fuel rod, this heat goes into the fuel rod assembly block * @param stack * @return */ public double provideHeat(World world, ItemStack stack, double heat, double mod) { - + double hullHeat = this.getHullHeat(stack); - + //metldown! the hull melts so the entire structure stops making sense //hull and core heats are instantly equalized into 33% of their sum each, //the rest is sent to the component which is always fatal @@ -217,20 +222,20 @@ public class ItemRBMKRod extends Item { this.setHullHeat(stack, avg); return avg - heat; } - + if(hullHeat <= heat) return 0; - + double ret = (hullHeat - heat) / 2; - + ret *= RBMKDials.getFuelHeatProvision(world) * mod; - + hullHeat -= ret; this.setHullHeat(stack, hullHeat); - + return ret; } - + public static enum EnumBurnFunc { PASSIVE(EnumChatFormatting.DARK_GREEN + "SAFE / PASSIVE"), //const, no reactivity LOG_TEN(EnumChatFormatting.YELLOW + "MEDIUM / LOGARITHMIC"), //log10(x + 1) * reactivity * 50 @@ -241,22 +246,22 @@ public class ItemRBMKRod extends Item { LINEAR(EnumChatFormatting.RED + "DANGEROUS / LINEAR"), //x * reactivity QUADRATIC(EnumChatFormatting.RED + "DANGEROUS / QUADRATIC"), //x^2 / 100 * reactivity EXPERIMENTAL(EnumChatFormatting.RED + "EXPERIMENTAL / SINE SLOPE"); //x * (sin(x) + 1) - + public String title = ""; - + private EnumBurnFunc(String title) { this.title = title; } } - + /** * @param enrichment [0;100] ...or at least those are sane levels * @return the amount of reactivity yielded, unmodified by xenon */ public double reactivityFunc(double in, double enrichment) { - + double flux = in * reactivityModByEnrichment(enrichment); - + switch(this.function) { case PASSIVE: return selfRate * enrichment; case LOG_TEN: return Math.log10(flux + 1) * 0.5D * reactivity; @@ -268,20 +273,20 @@ public class ItemRBMKRod extends Item { case QUADRATIC: return flux * flux / 10000D * reactivity; case EXPERIMENTAL: return flux * (Math.sin(flux) + 1) * reactivity; } - + return 0; } - + public String getFuncDescription(ItemStack stack) { - + String function; - + switch(this.function) { case PASSIVE: function = EnumChatFormatting.RED + "" + selfRate; break; case LOG_TEN: function = "log10(%1$s + 1) * 0.5 * %2$s"; break; - case PLATEU: function = "(1 - e^-%1$s / 25)) * %2$s"; + case PLATEU: function = "(1 - e^(-%1$s / 25)) * %2$s"; break; case ARCH: function = "(%1$s - %1$s² / 10000) / 100 * %2$s [0;∞]"; break; @@ -297,20 +302,20 @@ public class ItemRBMKRod extends Item { break; default: function = "ERROR"; } - + double enrichment = getEnrichment(stack); - + if(enrichment < 1) { enrichment = reactivityModByEnrichment(enrichment); String reactivity = EnumChatFormatting.YELLOW + "" + ((int)(this.reactivity * enrichment * 1000D) / 1000D) + EnumChatFormatting.WHITE; String enrichmentPer = EnumChatFormatting.GOLD + " (" + ((int)(enrichment * 1000D) / 10D) + "%)"; - + return String.format(Locale.US, function, selfRate > 0 ? "(x" + EnumChatFormatting.RED + " + " + selfRate + "" + EnumChatFormatting.WHITE + ")" : "x", reactivity).concat(enrichmentPer); } - + return String.format(Locale.US, function, selfRate > 0 ? "(x" + EnumChatFormatting.RED + " + " + selfRate + "" + EnumChatFormatting.WHITE + ")" : "x", reactivity); } - + public static enum EnumDepleteFunc { LINEAR, //old function RAISING_SLOPE, //for breeding fuels such as MEU, maximum of 110% at 28% depletion @@ -318,9 +323,9 @@ public class ItemRBMKRod extends Item { GENTLE_SLOPE, //recommended for most fuels, maximum barely over the start, near the beginning STATIC; //for arcade-style neutron sources } - + public double reactivityModByEnrichment(double enrichment) { - + switch(this.depFunc) { default: case LINEAR: return enrichment; @@ -330,7 +335,7 @@ public class ItemRBMKRod extends Item { case GENTLE_SLOPE: return enrichment + (Math.sin(enrichment * Math.PI) / 3D); //x + (sin(x * pi) / 3) also works } } - + /** * Xenon generated per tick, linear function * @param flux @@ -339,7 +344,7 @@ public class ItemRBMKRod extends Item { public double xenonGenFunc(double flux) { return flux * xGen; } - + /** * Xenon burned away per tick, quadratic function * @param flux @@ -348,7 +353,7 @@ public class ItemRBMKRod extends Item { public double xenonBurnFunc(double flux) { return (flux * flux) / xBurn; } - + /** * @param stack * @return enrichment [0;1] @@ -356,7 +361,7 @@ public class ItemRBMKRod extends Item { public static double getEnrichment(ItemStack stack) { return getYield(stack) / ((ItemRBMKRod) stack.getItem()).yield; } - + /** * @param stack * @return poison [0;1] @@ -415,15 +420,19 @@ public class ItemRBMKRod extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - + list.add(EnumChatFormatting.ITALIC + this.fullName); - + if(this == ModItems.rbmk_fuel_drx) { - + + if(ItemRBMKRod.getHullHeat(stack) >= 50 || ItemRBMKRod.getCoreHeat(stack) >= 50) { + list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("desc.item.wasteCooling")); + } + if(selfRate > 0 || this.function == EnumBurnFunc.SIGMOID) { list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmx.source")); } - + list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("trait.rbmx.depletion", ((int)(((yield - getYield(stack)) / yield) * 100000)) / 1000D + "%")); list.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("trait.rbmx.xenon", ((int)(getPoison(stack) * 1000D) / 1000D) + "%")); list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmx.splitsWith", I18nUtil.resolveKey(nType.unlocalized + ".x"))); @@ -437,13 +446,17 @@ public class ItemRBMKRod extends Item { list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmx.skinTemp", ((int)(getHullHeat(stack) * 10D) / 10D) + "m")); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmx.coreTemp", ((int)(getCoreHeat(stack) * 10D) / 10D) + "m")); list.add(EnumChatFormatting.DARK_RED + I18nUtil.resolveKey("trait.rbmx.melt", meltingPoint + "m")); - + } else { + if(ItemRBMKRod.getHullHeat(stack) >= 50 || ItemRBMKRod.getCoreHeat(stack) >= 50) { + list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("desc.item.wasteCooling")); + } + if(selfRate > 0 || this.function == EnumBurnFunc.SIGMOID) { list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmk.source")); } - + list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("trait.rbmk.depletion", ((int)(((yield - getYield(stack)) / yield) * 100000D)) / 1000D + "%")); list.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("trait.rbmk.xenon", ((int)(getPoison(stack) * 1000D) / 1000D) + "%")); list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("trait.rbmk.splitsWith", I18nUtil.resolveKey(nType.unlocalized))); @@ -471,10 +484,10 @@ public class ItemRBMKRod extends Item { list.add(EnumChatFormatting.RED + "Skin temp: " + ((int)(getHullHeat(stack) * 10D) / 10D) + "°C"); list.add(EnumChatFormatting.RED + "Core temp: " + ((int)(getCoreHeat(stack) * 10D) / 10D) + "°C"); list.add(EnumChatFormatting.DARK_RED + "Melting point: " + meltingPoint + "°C");*/ - + super.addInformation(stack, player, list, bool); } - + /* __ __ ____ ________ * | \ | | | __ \ |__ __| * | \ | | | |__| | | | @@ -482,40 +495,40 @@ public class ItemRBMKRod extends Item { * | | \ | | |__| | | | * |__| \__| |_____/ |__| */ - + public static void setYield(ItemStack stack, double yield) { setDouble(stack, "yield", yield); } - + public static double getYield(ItemStack stack) { - + if(stack.getItem() instanceof ItemRBMKRod) { return getDouble(stack, "yield"); } - + return 0; } - + public static void setPoison(ItemStack stack, double xenon) { setDouble(stack, "xenon", xenon); } - + public static double getPoison(ItemStack stack) { return getDouble(stack, "xenon"); } - + public static void setCoreHeat(ItemStack stack, double heat) { setDouble(stack, "core", heat); } - + public static double getCoreHeat(ItemStack stack) { return getDouble(stack, "core"); } - + public static void setHullHeat(ItemStack stack, double heat) { setDouble(stack, "hull", heat); } - + public static double getHullHeat(ItemStack stack) { return getDouble(stack, "hull"); } @@ -529,23 +542,23 @@ public class ItemRBMKRod extends Item { public double getDurabilityForDisplay(ItemStack stack) { return 1D - getEnrichment(stack); } - + public static void setDouble(ItemStack stack, String key, double yield) { - + if(!stack.hasTagCompound()) setNBTDefaults(stack); - + stack.stackTagCompound.setDouble(key, yield); } - + public static double getDouble(ItemStack stack, String key) { - + if(!stack.hasTagCompound()) setNBTDefaults(stack); return stack.stackTagCompound.getDouble(key); } - + /** * Sets up the default values for all NBT data because doing it one-by-one will only correctly set the first called value and the rest stays 0 which is very not good * @param stack @@ -557,7 +570,7 @@ public class ItemRBMKRod extends Item { setCoreHeat(stack, 20.0D); setHullHeat(stack, 20.0D); } - + @Override public void onCreated(ItemStack stack, World world, EntityPlayer player) { setNBTDefaults(stack); //minimize the window where NBT screwups can happen diff --git a/src/main/java/com/hbm/items/tool/ItemWand.java b/src/main/java/com/hbm/items/tool/ItemWand.java index 9bb6dc6ca..69d05195d 100644 --- a/src/main/java/com/hbm/items/tool/ItemWand.java +++ b/src/main/java/com/hbm/items/tool/ItemWand.java @@ -2,8 +2,11 @@ package com.hbm.items.tool; import java.util.List; +import com.hbm.blocks.ModBlocks; + import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -11,98 +14,87 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; public class ItemWand extends Item { - + + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { list.add("Creative-only item"); list.add("\"Destruction brings creation\""); list.add("(Set positions with right click,"); list.add("set block with shift-right click!)"); - - if(itemstack.stackTagCompound != null && - !(itemstack.stackTagCompound.getInteger("x") == 0 && - itemstack.stackTagCompound.getInteger("y") == 0 && - itemstack.stackTagCompound.getInteger("z") == 0)) - { - list.add("Pos: " + itemstack.stackTagCompound.getInteger("x") + ", " + itemstack.stackTagCompound.getInteger("y") + ", " + itemstack.stackTagCompound.getInteger("z")); + + if(stack.stackTagCompound != null && !(stack.stackTagCompound.getInteger("x") == 0 && stack.stackTagCompound.getInteger("y") == 0 && stack.stackTagCompound.getInteger("z") == 0)) { + list.add("Pos: " + stack.stackTagCompound.getInteger("x") + ", " + stack.stackTagCompound.getInteger("y") + ", " + stack.stackTagCompound.getInteger("z")); } else { list.add("Positions not set!"); } - if(itemstack.stackTagCompound != null) - list.add("Block saved: " + Block.getBlockById(itemstack.stackTagCompound.getInteger("block")).getUnlocalizedName()); + if(stack.stackTagCompound != null) + list.add("Block saved: " + Block.getBlockById(stack.stackTagCompound.getInteger("block")).getUnlocalizedName()); } - + @Override - public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World p_77648_3_, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_) - { - if(p_77648_1_.stackTagCompound == null) - { - p_77648_1_.stackTagCompound = new NBTTagCompound(); + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); } - - if(p_77648_2_.isSneaking()) - { - p_77648_1_.stackTagCompound.setInteger("block", Block.getIdFromBlock(p_77648_3_.getBlock(p_77648_4_, p_77648_5_, p_77648_6_))); - p_77648_1_.stackTagCompound.setInteger("meta", p_77648_3_.getBlockMetadata(p_77648_4_, p_77648_5_, p_77648_6_)); - if(p_77648_3_.isRemote) - p_77648_2_.addChatMessage(new ChatComponentText("Set block " + Block.getBlockById(p_77648_1_.stackTagCompound.getInteger("block")).getUnlocalizedName())); + + if(player.isSneaking()) { + stack.stackTagCompound.setInteger("block", Block.getIdFromBlock(world.getBlock(x, y, z))); + stack.stackTagCompound.setInteger("meta", world.getBlockMetadata(x, y, z)); + if(world.isRemote) + player.addChatMessage(new ChatComponentText("Set block " + Block.getBlockById(stack.stackTagCompound.getInteger("block")).getUnlocalizedName())); } else { - if(p_77648_1_.stackTagCompound.getInteger("x") == 0 && - p_77648_1_.stackTagCompound.getInteger("y") == 0 && - p_77648_1_.stackTagCompound.getInteger("z") == 0) - { - p_77648_1_.stackTagCompound.setInteger("x", p_77648_4_); - p_77648_1_.stackTagCompound.setInteger("y", p_77648_5_); - p_77648_1_.stackTagCompound.setInteger("z", p_77648_6_); - if(p_77648_3_.isRemote) - p_77648_2_.addChatMessage(new ChatComponentText("Position set!")); + if(stack.stackTagCompound.getInteger("x") == 0 && stack.stackTagCompound.getInteger("y") == 0 && stack.stackTagCompound.getInteger("z") == 0) { + stack.stackTagCompound.setInteger("x", x); + stack.stackTagCompound.setInteger("y", y); + stack.stackTagCompound.setInteger("z", z); + if(world.isRemote) + player.addChatMessage(new ChatComponentText("Position set!")); } else { - - int x = p_77648_1_.stackTagCompound.getInteger("x"); - int y = p_77648_1_.stackTagCompound.getInteger("y"); - int z = p_77648_1_.stackTagCompound.getInteger("z"); - - p_77648_1_.stackTagCompound.setInteger("x", 0); - p_77648_1_.stackTagCompound.setInteger("y", 0); - p_77648_1_.stackTagCompound.setInteger("z", 0); - - if(!p_77648_3_.isRemote) - { - for(int i = Math.min(x, p_77648_4_); i <= Math.max(x, p_77648_4_); i++) - { - for(int j = Math.min(y, p_77648_5_); j <= Math.max(y, p_77648_5_); j++) - { - for(int k = Math.min(z, p_77648_6_); k <= Math.max(z, p_77648_6_); k++) - { - p_77648_3_.setBlock(i, j, k, Block.getBlockById(p_77648_1_.stackTagCompound.getInteger("block")), p_77648_1_.stackTagCompound.getInteger("meta"), 3); + + int ox = stack.stackTagCompound.getInteger("x"); + int oy = stack.stackTagCompound.getInteger("y"); + int oz = stack.stackTagCompound.getInteger("z"); + + stack.stackTagCompound.setInteger("x", 0); + stack.stackTagCompound.setInteger("y", 0); + stack.stackTagCompound.setInteger("z", 0); + + if(!world.isRemote) { + Block block = Block.getBlockById(stack.stackTagCompound.getInteger("block")); + int meta = stack.stackTagCompound.getInteger("meta"); + boolean replaceAir = block == ModBlocks.wand_air; + + for(int i = Math.min(ox, x); i <= Math.max(ox, x); i++) { + for(int j = Math.min(oy, y); j <= Math.max(oy, y); j++) { + for(int k = Math.min(oz, z); k <= Math.max(oz, z); k++) { + if(replaceAir && world.getBlock(i, j, k) != Blocks.air) continue; + world.setBlock(i, j, k, block, meta, 3); } } } } - if(p_77648_3_.isRemote) - p_77648_2_.addChatMessage(new ChatComponentText("Selection filled!")); + if(world.isRemote) + player.addChatMessage(new ChatComponentText("Selection filled!")); } } - - return true; - } + + return true; + } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(stack.stackTagCompound == null) - { + if(stack.stackTagCompound == null) { stack.stackTagCompound = new NBTTagCompound(); } - if(player.isSneaking()) - { + if(player.isSneaking()) { stack.stackTagCompound.setInteger("block", 0); stack.stackTagCompound.setInteger("meta", 0); if(world.isRemote) player.addChatMessage(new ChatComponentText("Set block " + Block.getBlockById(stack.stackTagCompound.getInteger("block")).getUnlocalizedName())); } - + return stack; } -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 9658c3cf4..cceceed9e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -1301,7 +1301,7 @@ public class Orchestras { if(timer == 1) { int cba = (stack.getItem() == ModItems.gun_aberrator_eott && ctx.configIndex == 0) ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D * cba, -0.05, 0.25, -0.05 * cba, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 10F, (float)entity.getRNG().nextGaussian() * 12.5F, casing.getName()); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.5, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D * cba, -0.05, 0.25, -0.05 * cba, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 10F, (float)entity.getRNG().nextGaussian() * 12.5F, casing.getName()); } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java index e875b7800..c452655d3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java @@ -35,7 +35,7 @@ public class XFactory10ga { public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; - Lego.tinyExplode(bullet, mop, 2F); bullet.setDead(); + Lego.tinyExplode(bullet, mop, 1.5F); bullet.setDead(); }; public static void init() { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index 1dded0aab..e67396128 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -36,7 +36,7 @@ public class XFactory50 { public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; - Lego.tinyExplode(bullet, mop, 3.5F); bullet.setDead(); + Lego.tinyExplode(bullet, mop, 2F); bullet.setDead(); }; public static void init() { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java index 92d47c361..1638a2794 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java @@ -3,6 +3,8 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -19,7 +21,9 @@ import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; public class XFactory75Bolt { @@ -27,15 +31,29 @@ public class XFactory75Bolt { public static BulletConfig b75_inc; public static BulletConfig b75_exp; + public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; + Lego.tinyExplode(bullet, mop, 2F); bullet.setDead(); + }; + public static BiConsumer LAMBDA_INC = (bullet, mop) -> { + if(mop.entityHit != null && mop.entityHit instanceof EntityLivingBase) { + HbmLivingProps data = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); + if(data.phosphorus < 300) data.phosphorus = 300; + } + }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { + Lego.standardExplode(bullet, mop, 5F); bullet.setDead(); + }; + public static void init() { SpentCasing casing75 = new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(2F, 2F, 1.5F); b75 = new BulletConfig().setItem(EnumAmmo.B75) - .setCasing(casing75.clone().register("b75")); + .setCasing(casing75.clone().register("b75")).setOnImpact(LAMBDA_TINY_EXPLODE); b75_inc = new BulletConfig().setItem(EnumAmmo.B75_INC).setDamage(0.8F).setArmorPiercing(0.1F) - .setCasing(casing75.clone().register("b75inc")); + .setCasing(casing75.clone().register("b75inc")).setOnImpact(LAMBDA_INC); b75_exp = new BulletConfig().setItem(EnumAmmo.B75_EXP).setDamage(1.5F).setArmorPiercing(-0.25F) - .setCasing(casing75.clone().register("b75exp")); + .setCasing(casing75.clone().register("b75exp")).setOnImpact(LAMBDA_STANDARD_EXPLODE); ModItems.gun_bolter = new ItemGunBaseNT(WeaponQuality.SPECIAL, new GunConfig() .dura(3_000).draw(20).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index eb7b7b79e..b87fba86d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -43,7 +43,7 @@ public class XFactory762mm { public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; - Lego.tinyExplode(bullet, mop, 2F); bullet.setDead(); + Lego.tinyExplode(bullet, mop, 1.5F); bullet.setDead(); }; public static void init() { diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index 359936bd2..f586acccc 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -71,8 +71,7 @@ public class WeaponModManager { Item[] steelGuns = new Item[] { ModItems.gun_light_revolver, ModItems.gun_light_revolver_atlas, - ModItems.gun_henry, - ModItems.gun_henry_lincoln, + ModItems.gun_henry, ModItems.gun_henry_lincoln, ModItems.gun_greasegun, ModItems.gun_maresleg, ModItems.gun_maresleg_akimbo, ModItems.gun_flaregun }; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index ccdb1a05d..368191b97 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -6,7 +6,8 @@ import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; - import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; +import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; +import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight; import com.hbm.blocks.machine.MachineFan.TileEntityFan; import com.hbm.blocks.machine.PistonInserter.TileEntityPistonInserter; @@ -201,6 +202,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFloodlight.class, new RenderFloodlight()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLoot.class, new RenderLoot()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPedestal.class, new RenderPedestalTile()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySkeletonHolder.class, new RenderSkeletonHolder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBobble.class, new RenderBobble()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySnowglobe.class, new RenderSnowglobe()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlushie.class, new RenderPlushie()); @@ -740,10 +742,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityRADBeast.class, new RenderRADBeast()); RenderingRegistry.registerEntityRenderingHandler(EntityBlockSpider.class, new RenderBlockSpider()); RenderingRegistry.registerEntityRenderingHandler(EntityUFO.class, new RenderUFO()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeZombie.class, new RenderSiegeZombie()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeUFO.class, new RenderSiegeUFO()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeCraft.class, new RenderSiegeCraft()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeSkeleton.class, new RenderSiegeSkeleton()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeTunneler.class, new RenderSiegeTunneler()); RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); RenderingRegistry.registerEntityRenderingHandler(EntityGlyphid.class, new RenderGlyphid()); @@ -759,6 +758,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityPlasticBag.class, new RenderPlasticBag()); RenderingRegistry.registerEntityRenderingHandler(EntityPigeon.class, new RenderPigeon(new ModelPigeon(), 0.3F)); RenderingRegistry.registerEntityRenderingHandler(EntityDummy.class, new RenderDummy()); + RenderingRegistry.registerEntityRenderingHandler(EntityUndeadSoldier.class, new RenderUndeadSoldier()); //"particles" RenderingRegistry.registerEntityRenderingHandler(EntityChlorineFX.class, new MultiCloudRenderer(new Item[] { ModItems.chlorine1, ModItems.chlorine2, ModItems.chlorine3, ModItems.chlorine4, ModItems.chlorine5, ModItems.chlorine6, ModItems.chlorine7, ModItems.chlorine8 })); RenderingRegistry.registerEntityRenderingHandler(EntityPinkCloudFX.class, new MultiCloudRenderer(new Item[] { ModItems.pc1, ModItems.pc2, ModItems.pc3, ModItems.pc4, ModItems.pc5, ModItems.pc6, ModItems.pc7, ModItems.pc8 })); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index ff321331f..c9c6a1eeb 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -351,14 +351,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.stamp_desh_flat, 1), new Object[] { "BDB", "DSD", "BDB", 'B', brick, 'D', DESH.ingot(), 'S', FERRO.ingot() }); } - addRecipeAuto(new ItemStack(ModItems.mechanism_revolver_1, 1), new Object[] { "ICI", "CAC", "ICI", 'I', IRON.plate(), 'C', CU.ingot(), 'A', AL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.mechanism_revolver_2, 1), new Object[] { "ATA", "TDT", "ATA", 'A', ALLOY.plate(), 'T', W.ingot(), 'D', DURA.ingot() }); - addRecipeAuto(new ItemStack(ModItems.mechanism_rifle_1, 1), new Object[] { "ICI", "MAM", "ICI", 'I', IRON.plate(), 'C', CU.ingot(), 'A', AL.ingot(), 'M', ModItems.mechanism_revolver_1 }); - addRecipeAuto(new ItemStack(ModItems.mechanism_rifle_2, 1), new Object[] { "ATA", "MDM", "ATA", 'A', ALLOY.plate(), 'T', W.ingot(), 'D', DURA.ingot(), 'M', ModItems.mechanism_revolver_2 }); - addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_1, 1), new Object[] { "TTT", "SSS", "BBI", 'T', TI.plate(), 'S', STEEL.ingot(), 'B', W.bolt(), 'I', MINGRADE.ingot() }); - addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_2, 1), new Object[] { "TTT", "SSS", "BBI", 'T', ALLOY.plate(), 'S', ANY_PLASTIC.ingot(), 'B', W.bolt(), 'I', DESH.ingot() }); - addRecipeAuto(new ItemStack(ModItems.mechanism_special, 1), new Object[] { "PCI", "ISS", "PCI", 'P', ModItems.plate_desh, 'C', ModItems.coil_advanced_alloy, 'I', STAR.ingot(), 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); - addRecipeAuto(new ItemStack(ModBlocks.watz_pump, 1), new Object[] { "MPM", "PCP", "PSP", 'M', ModItems.motor_desh, 'P', ANY_RESISTANTALLOY.plateCast(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'S', ModItems.pipes_steel }); addRecipeAuto(new ItemStack(ModBlocks.reinforced_stone, 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.cobblestone, 'B', Blocks.stone }); @@ -740,7 +732,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser }); addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModBlocks.block_dineutronium, 'L', STEEL.shell() }); addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel }); - addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModItems.magnet_circular, 'L', ModItems.crystal_xen }); + addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModBlocks.fusion_conductor, 'L', ModItems.crystal_xen }); addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_iron, 1), new Object[] { "IPI", "I I", "IPI", 'I', IRON.plate(), 'P', IRON.ingot() }); addShapelessAuto(new ItemStack(ModBlocks.barrel_iron, 1), new Object[] { ModBlocks.barrel_corroded, ANY_TAR.any() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index dd4323118..35e7e03e3 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -131,7 +131,7 @@ public class MainRegistry { public static ToolMaterial enumToolMaterialBatNail = EnumHelper.addToolMaterial("BATNAIL", 0, 450, 1.0F, 4F, 25); public static ToolMaterial enumToolMaterialGolfClub = EnumHelper.addToolMaterial("GOLFCLUB", 1, 1000, 2.0F, 5F, 25); public static ToolMaterial enumToolMaterialPipeRusty = EnumHelper.addToolMaterial("PIPERUSTY", 1, 350, 1.5F, 4.5F, 25); - public static ToolMaterial enumToolMaterialPipeLead = EnumHelper.addToolMaterial("PIPELEAD", 1, 250, 1.5F, 5.5F, 25); + public static ToolMaterial enumToolMaterialPipeLead = EnumHelper.addToolMaterial("PIPELEAD", 1, 250, 1.5F, 3F, 25); public static ToolMaterial enumToolMaterialBottleOpener = EnumHelper.addToolMaterial("OPENER", 1, 250, 1.5F, 0.5F, 200); public static ToolMaterial enumToolMaterialSledge = EnumHelper.addToolMaterial("SHIMMERSLEDGE", 1, 0, 25.0F, 26F, 200); @@ -1665,6 +1665,14 @@ public class MainRegistry { ignoreMappings.add("hbm:item.bobmazon_weapons"); ignoreMappings.add("hbm:item.bobmazon_tools"); ignoreMappings.add("hbm:item.missile_carrier"); + ignoreMappings.add("hbm:item.magnet_circular"); + ignoreMappings.add("hbm:item.mechanism_revolver_1"); + ignoreMappings.add("hbm:item.mechanism_revolver_2"); + ignoreMappings.add("hbm:item.mechanism_rifle_1"); + ignoreMappings.add("hbm:item.mechanism_rifle_2"); + ignoreMappings.add("hbm:item.mechanism_launcher_1"); + ignoreMappings.add("hbm:item.mechanism_launcher_2"); + ignoreMappings.add("hbm:item.mechanism_special"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index bdba621ca..7415566d7 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -370,12 +370,10 @@ public class ModEventHandler { if(rand.nextInt(1024) == 0) entity.setCurrentItemOrArmor(3, new ItemStack(ModItems.starmetal_plate, 1, world.rand.nextInt(ModItems.starmetal_plate.getMaxDamage()))); - if(rand.nextInt(128) == 0) + if(rand.nextInt(64) == 0) entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.pipe_lead, 1, world.rand.nextInt(100))); if(rand.nextInt(128) == 0) entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.reer_graar, 1, world.rand.nextInt(100))); - if(rand.nextInt(128) == 0) - entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.pipe_rusty, 1, world.rand.nextInt(100))); if(rand.nextInt(128) == 0) entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.crowbar, 1, world.rand.nextInt(100))); if(rand.nextInt(128) == 0) diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 12d7101c7..a7f6b916b 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -38,6 +38,8 @@ public class NEIRegistry { handlers.add(new FusionRecipeHandler()); handlers.add(new SILEXRecipeHandler()); handlers.add(new FuelPoolHandler()); + handlers.add(new RBMKRodDisassemblyHandler()); + handlers.add(new RBMKWasteDecayHandler()); handlers.add(new CrucibleSmeltingHandler()); handlers.add(new CrucibleAlloyingHandler()); handlers.add(new CrucibleCastingHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 2590f5b63..e9ebcbe80 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -351,6 +351,9 @@ public class ResourceManager { public static IModelCustomNamed silo_hatch_large = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch_large.obj")).asVBO(); + //Skeleton + public static final IModelCustom skeleton_holder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/skeleton_holder.obj"),false).asVBO(); + //Lights public static final IModelCustom lantern = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/trinkets/lantern.obj")); public static final IModelCustom cage_lamp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/lights/cage_lamp.obj")); @@ -763,6 +766,9 @@ public class ResourceManager { public static final ResourceLocation transition_seal_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/transition_seal.png"); public static final ResourceLocation fire_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/fire_door.png"); + //Skeleton + public static final ResourceLocation skeleton_holder_tex = new ResourceLocation(RefStrings.MODID, "textures/particle/skeleton.png"); + //Lantern public static final ResourceLocation lantern_tex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/lantern.png"); public static final ResourceLocation lantern_rusty_tex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/lantern_rusty.png"); @@ -900,6 +906,7 @@ public class ResourceManager { public static final IModelCustom armor_tail = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/tail_peep.obj")); public static final IModelCustom player_manly_af = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/armor/player_fem.obj")); public static final IModelCustom armor_envsuit = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/envsuit.obj")); + public static final IModelCustom armor_taurun = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/taurun.obj")); public static final IModelCustom armor_trenchmaster = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/trenchmaster.obj")); ////Texture Items @@ -1051,6 +1058,10 @@ public class ResourceManager { public static final ResourceLocation rpa_chest = new ResourceLocation(RefStrings.MODID, "textures/armor/rpa_chest.png"); public static final ResourceLocation rpa_arm = new ResourceLocation(RefStrings.MODID, "textures/armor/rpa_arm.png"); + public static final ResourceLocation taurun_helmet = new ResourceLocation(RefStrings.MODID, "textures/armor/taurun_helmet.png"); + public static final ResourceLocation taurun_leg = new ResourceLocation(RefStrings.MODID, "textures/armor/taurun_leg.png"); + public static final ResourceLocation taurun_chest = new ResourceLocation(RefStrings.MODID, "textures/armor/taurun_chest.png"); + public static final ResourceLocation taurun_arm = new ResourceLocation(RefStrings.MODID, "textures/armor/taurun_arm.png"); public static final ResourceLocation trenchmaster_helmet = new ResourceLocation(RefStrings.MODID, "textures/armor/trenchmaster_helmet.png"); public static final ResourceLocation trenchmaster_leg = new ResourceLocation(RefStrings.MODID, "textures/armor/trenchmaster_leg.png"); public static final ResourceLocation trenchmaster_chest = new ResourceLocation(RefStrings.MODID, "textures/armor/trenchmaster_chest.png"); diff --git a/src/main/java/com/hbm/render/entity/mob/RenderGhost.java b/src/main/java/com/hbm/render/entity/mob/RenderGhost.java index 98c1484a9..812107d0c 100644 --- a/src/main/java/com/hbm/render/entity/mob/RenderGhost.java +++ b/src/main/java/com/hbm/render/entity/mob/RenderGhost.java @@ -4,8 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.entity.mob.EntityGhost; import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelSiegeZombie; +import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.RenderBiped; import net.minecraft.entity.Entity; @@ -15,7 +15,7 @@ import net.minecraft.util.ResourceLocation; public class RenderGhost extends RenderBiped { public RenderGhost() { - super(new ModelSiegeZombie(0.0F), 0.5F, 1.0F); + super(new ModelBiped(0.0F), 0.5F, 1.0F); } @Override diff --git a/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java b/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java deleted file mode 100644 index 932e739ec..000000000 --- a/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.hbm.render.entity.mob; - -import com.hbm.entity.mob.siege.EntitySiegeSkeleton; -import com.hbm.entity.mob.siege.SiegeTier; -import com.hbm.lib.RefStrings; - -import net.minecraft.client.model.ModelSkeleton; -import net.minecraft.client.renderer.entity.RenderBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.ResourceLocation; - -public class RenderSiegeSkeleton extends RenderBiped { - - public RenderSiegeSkeleton() { - super(new ModelSkeleton() { - - @Override - public void setLivingAnimations(EntityLivingBase entity, float f0, float f1, float f2) { - this.aimedBow = true; - } - }, 0.5F); - } - - @Override - protected ResourceLocation getEntityTexture(EntityLiving entity) { - return this.getEntityTexture((EntitySiegeSkeleton) entity); - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) { - return this.getEntityTexture((EntitySiegeSkeleton) entity); - } - - protected ResourceLocation getEntityTexture(EntitySiegeSkeleton entity) { - SiegeTier tier = entity.getTier(); - return new ResourceLocation(RefStrings.MODID + ":textures/entity/siege_" + tier.name + ".png"); - } -} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderSiegeUFO.java b/src/main/java/com/hbm/render/entity/mob/RenderSiegeUFO.java deleted file mode 100644 index ad9ad0793..000000000 --- a/src/main/java/com/hbm/render/entity/mob/RenderSiegeUFO.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.hbm.render.entity.mob; - -import org.lwjgl.opengl.GL11; - -import com.hbm.entity.mob.siege.EntitySiegeUFO; -import com.hbm.entity.mob.siege.SiegeTier; -import com.hbm.lib.RefStrings; -import com.hbm.main.ResourceManager; - -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; - -public class RenderSiegeUFO extends Render { - - @Override - public void doRender(Entity entity, double x, double y, double z, float f0, float f1) { - - GL11.glPushMatrix(); - GL11.glTranslated(x, y + 0.25, z); - - EntitySiegeUFO ufo = (EntitySiegeUFO) entity; - - this.bindTexture(getEntityTexture(entity)); - - double rot = (entity.ticksExisted + f1) * 5 % 360D; - GL11.glRotated(rot, 0, 1, 0); - - - if(!ufo.isEntityAlive()) { - float tilt = ufo.deathTime + f1; - GL11.glRotatef(tilt * 5, 1, 0, 1); - } else if(entity.hurtResistantTime > 0) { - GL11.glRotated(Math.sin(System.currentTimeMillis() * 0.01D) * (entity.hurtResistantTime - f1), 1, 0, 0); - } - - GL11.glShadeModel(GL11.GL_SMOOTH); - GL11.glDisable(GL11.GL_CULL_FACE); - ResourceManager.mini_ufo.renderAll(); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glShadeModel(GL11.GL_FLAT); - - GL11.glPopMatrix(); - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) { - return this.getEntityTexture((EntitySiegeUFO) entity); - } - - protected ResourceLocation getEntityTexture(EntitySiegeUFO entity) { - SiegeTier tier = entity.getTier(); - return new ResourceLocation(RefStrings.MODID + ":textures/entity/ufo_siege_" + tier.name + ".png"); - } -} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderSiegeZombie.java b/src/main/java/com/hbm/render/entity/mob/RenderSiegeZombie.java deleted file mode 100644 index 679d0a9d7..000000000 --- a/src/main/java/com/hbm/render/entity/mob/RenderSiegeZombie.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.hbm.render.entity.mob; - -import com.hbm.entity.mob.siege.EntitySiegeZombie; -import com.hbm.entity.mob.siege.SiegeTier; -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelSiegeZombie; - -import net.minecraft.client.renderer.entity.RenderBiped; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.util.ResourceLocation; - -public class RenderSiegeZombie extends RenderBiped { - - public RenderSiegeZombie() { - super(new ModelSiegeZombie(0.0F), 0.5F, 1.0F); - } - - @Override - protected ResourceLocation getEntityTexture(EntityLiving entity) { - return this.getEntityTexture((EntitySiegeZombie) entity); - } - - @Override - protected ResourceLocation getEntityTexture(Entity entity) { - return this.getEntityTexture((EntitySiegeZombie) entity); - } - - protected ResourceLocation getEntityTexture(EntitySiegeZombie entity) { - SiegeTier tier = entity.getTier(); - return new ResourceLocation(RefStrings.MODID + ":textures/entity/siege_" + tier.name + ".png"); - } - - @Override - protected void func_82421_b() { - this.field_82423_g = new ModelSiegeZombie(1.0F); //armor slots 1, 2, 4 - this.field_82425_h = new ModelSiegeZombie(0.5F); //armor slot 3 - } -} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderUndeadSoldier.java b/src/main/java/com/hbm/render/entity/mob/RenderUndeadSoldier.java new file mode 100644 index 000000000..7f43d82bc --- /dev/null +++ b/src/main/java/com/hbm/render/entity/mob/RenderUndeadSoldier.java @@ -0,0 +1,39 @@ +package com.hbm.render.entity.mob; + +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.render.model.ModelSkeletonNT; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; + +public class RenderUndeadSoldier extends RenderBiped { + + public static ResourceLocation textureZombie = new ResourceLocation("textures/entity/zombie/zombie.png"); + public static ResourceLocation textureSkeleton = new ResourceLocation("textures/entity/skeleton/skeleton.png"); + + public static ModelBiped modelZombie = new ModelZombie(); + public static ModelBiped modelSkeleton = new ModelSkeletonNT(); + + public RenderUndeadSoldier() { + super(modelZombie, 0.5F); + } + + @Override + protected void preRenderCallback(EntityLivingBase living, float interp) { + byte type = living.getDataWatcher().getWatchableObjectByte(EntityUndeadSoldier.DW_TYPE); + if(type == EntityUndeadSoldier.TYPE_ZOMBIE) this.mainModel = this.modelBipedMain = modelZombie; + if(type == EntityUndeadSoldier.TYPE_SKELETON) this.mainModel = this.modelBipedMain = modelSkeleton; + } + + @Override + protected ResourceLocation getEntityTexture(EntityLiving living) { + byte type = living.getDataWatcher().getWatchableObjectByte(EntityUndeadSoldier.DW_TYPE); + if(type == EntityUndeadSoldier.TYPE_ZOMBIE) return textureZombie; + if(type == EntityUndeadSoldier.TYPE_SKELETON) return textureSkeleton; + return null; + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMAS36.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMAS36.java index b43620e10..7d2a59a56 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMAS36.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMAS36.java @@ -187,7 +187,7 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase { ResourceManager.mas36.renderPart("Stock"); ResourceManager.mas36.renderPart("Bolt"); if(isScoped(stack)) ResourceManager.mas36.renderPart("Scope"); - GL11.glTranslated(0, -1, -6); + if(type != ItemRenderType.EQUIPPED) GL11.glTranslated(0, -1, -6); if(hasBayonet(stack)) ResourceManager.mas36.renderPart("Bayonet"); GL11.glShadeModel(GL11.GL_FLAT); } diff --git a/src/main/java/com/hbm/render/model/ModelArmorBase.java b/src/main/java/com/hbm/render/model/ModelArmorBase.java index 99085fa94..be561bcaa 100644 --- a/src/main/java/com/hbm/render/model/ModelArmorBase.java +++ b/src/main/java/com/hbm/render/model/ModelArmorBase.java @@ -5,6 +5,7 @@ import com.hbm.render.loader.ModelRendererObj; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderBiped; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.Entity; @@ -174,6 +175,13 @@ public class ModelArmorBase extends ModelBiped { leftArm.copyRotationFrom(render.modelBipedMain.bipedLeftArm); rightArm.copyRotationFrom(render.modelBipedMain.bipedRightArm); } + } else { + Object o = RenderManager.instance.entityRenderMap.get(entity.getClass()); + if(o instanceof RenderBiped) { + RenderBiped render = (RenderBiped) o; + leftArm.copyRotationFrom(render.modelBipedMain.bipedLeftArm); + rightArm.copyRotationFrom(render.modelBipedMain.bipedRightArm); + } } } diff --git a/src/main/java/com/hbm/render/model/ModelArmorTaurun.java b/src/main/java/com/hbm/render/model/ModelArmorTaurun.java new file mode 100644 index 000000000..282be3f7b --- /dev/null +++ b/src/main/java/com/hbm/render/model/ModelArmorTaurun.java @@ -0,0 +1,60 @@ +package com.hbm.render.model; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.render.loader.ModelRendererObj; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; + +public class ModelArmorTaurun extends ModelArmorBase { + + public ModelArmorTaurun(int type) { + super(type); + + head = new ModelRendererObj(ResourceManager.armor_taurun, "Helmet"); + body = new ModelRendererObj(ResourceManager.armor_taurun, "Chest"); + leftArm = new ModelRendererObj(ResourceManager.armor_taurun, "LeftArm").setRotationPoint(-5.0F, 2.0F, 0.0F); + rightArm = new ModelRendererObj(ResourceManager.armor_taurun, "RightArm").setRotationPoint(5.0F, 2.0F, 0.0F); + leftLeg = new ModelRendererObj(ResourceManager.armor_taurun, "LeftLeg").setRotationPoint(1.9F, 12.0F, 0.0F); + rightLeg = new ModelRendererObj(ResourceManager.armor_taurun, "RightLeg").setRotationPoint(-1.9F, 12.0F, 0.0F); + leftFoot = new ModelRendererObj(ResourceManager.armor_taurun, "LeftBoot").setRotationPoint(1.9F, 12.0F, 0.0F); + rightFoot = new ModelRendererObj(ResourceManager.armor_taurun, "RightBoot").setRotationPoint(-1.9F, 12.0F, 0.0F); + } + + @Override + public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) { + setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity); + + GL11.glPushMatrix(); + + if(type == 0) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.taurun_helmet); + head.render(par7); + } + if(type == 1) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.taurun_chest); + body.render(par7); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.taurun_arm); + leftArm.render(par7); + rightArm.render(par7); + } + if(type == 2) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.taurun_leg); + GL11.glTranslated(-0.01, 0, 0); + leftLeg.render(par7); + GL11.glTranslated(0.02, 0, 0); + rightLeg.render(par7); + } + if(type == 3) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.taurun_leg); + GL11.glTranslated(-0.01, 0, 0); + leftFoot.render(par7); + GL11.glTranslated(0.02, 0, 0); + rightFoot.render(par7); + } + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/model/ModelArmorTrenchmaster.java b/src/main/java/com/hbm/render/model/ModelArmorTrenchmaster.java index 533190861..16fc1aa88 100644 --- a/src/main/java/com/hbm/render/model/ModelArmorTrenchmaster.java +++ b/src/main/java/com/hbm/render/model/ModelArmorTrenchmaster.java @@ -62,12 +62,16 @@ public class ModelArmorTrenchmaster extends ModelArmorBase { } if(type == 2) { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.trenchmaster_leg); + GL11.glTranslated(-0.01, 0, 0); leftLeg.render(par7); + GL11.glTranslated(0.02, 0, 0); rightLeg.render(par7); } if(type == 3) { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.trenchmaster_leg); + GL11.glTranslated(-0.01, 0, 0); leftFoot.render(par7); + GL11.glTranslated(0.02, 0, 0); rightFoot.render(par7); } diff --git a/src/main/java/com/hbm/render/model/ModelSiegeZombie.java b/src/main/java/com/hbm/render/model/ModelSiegeZombie.java deleted file mode 100644 index 76bd7c883..000000000 --- a/src/main/java/com/hbm/render/model/ModelSiegeZombie.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.hbm.render.model; - -import com.hbm.entity.mob.siege.EntitySiegeZombie; - -import net.minecraft.client.model.ModelBiped; -import net.minecraft.entity.Entity; -import net.minecraft.util.MathHelper; - -public class ModelSiegeZombie extends ModelBiped { - - public ModelSiegeZombie(float p_i1168_1_) { - super(p_i1168_1_, 0.0F, 64, 32); - } - - public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entity) { - super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, entity); - - if(entity instanceof EntitySiegeZombie && ((EntitySiegeZombie)entity).getDataWatcher().getWatchableObjectByte(13) != 0) { - float f6 = MathHelper.sin(this.onGround * (float) Math.PI); - float f7 = MathHelper.sin((1.0F - (1.0F - this.onGround) * (1.0F - this.onGround)) * (float) Math.PI); - this.bipedRightArm.rotateAngleZ = 0.0F; - this.bipedLeftArm.rotateAngleZ = 0.0F; - this.bipedRightArm.rotateAngleY = -(0.1F - f6 * 0.6F); - this.bipedLeftArm.rotateAngleY = 0.1F - f6 * 0.6F; - this.bipedRightArm.rotateAngleX = -((float) Math.PI / 2F); - this.bipedLeftArm.rotateAngleX = -((float) Math.PI / 2F); - this.bipedRightArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; - this.bipedLeftArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; - this.bipedRightArm.rotateAngleZ += MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; - this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; - this.bipedRightArm.rotateAngleX += MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; - this.bipedLeftArm.rotateAngleX -= MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; - } - } -} diff --git a/src/main/java/com/hbm/render/model/ModelSkeletonNT.java b/src/main/java/com/hbm/render/model/ModelSkeletonNT.java new file mode 100644 index 000000000..987519f54 --- /dev/null +++ b/src/main/java/com/hbm/render/model/ModelSkeletonNT.java @@ -0,0 +1,29 @@ +package com.hbm.render.model; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelZombie; + +public class ModelSkeletonNT extends ModelZombie { + + public ModelSkeletonNT() { + this(0.0F); + } + + public ModelSkeletonNT(float scale) { + super(scale, 0.0F, 64, 32); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, scale); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, scale); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, scale); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, scale); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F, 0.0F); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPedestalTile.java b/src/main/java/com/hbm/render/tileentity/RenderPedestalTile.java index 6f39d7389..76c606e18 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPedestalTile.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPedestalTile.java @@ -37,10 +37,6 @@ public class RenderPedestalTile extends TileEntitySpecialRenderer { if(!(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType()))) { GL11.glTranslated(0, 0.125, 0); GL11.glRotatef(player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * interp + 180, 0.0F, -1.0F, 0.0F); - - if(!RenderManager.instance.options.fancyGraphics) { - GL11.glRotatef(180F, 0.0F, 1.0F, 0.0F); - } GL11.glTranslated(0, Math.sin((player.ticksExisted + interp) * 0.1) * 0.0625, 0); } else { diff --git a/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java new file mode 100644 index 000000000..c40bf33c4 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java @@ -0,0 +1,72 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.main.ResourceManager; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class RenderSkeletonHolder extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + + switch(te.getBlockMetadata()) { + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + RenderHelper.enableStandardItemLighting(); + + bindTexture(ResourceManager.skeleton_holder_tex); + ResourceManager.skeleton_holder.renderPart("Holder1"); + + TileEntitySkeletonHolder pedestal = (TileEntitySkeletonHolder) te; + + if(pedestal.item != null) { + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + ItemStack stack = pedestal.item.copy(); + + GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); + + if(stack.getItem() instanceof ItemGunBaseNT) { + GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F); + } + + if(!(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType()))) { + GL11.glScaled(1.5, 1.5, 1.5); + } + + GL11.glTranslated(0, 0.125, 0); + + EntityItem dummy = new EntityItem(te.getWorldObj(), 0, 0, 0, stack); + dummy.hoverStart = 0.0F; + + RenderItem.renderInFrame = true; + RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + RenderItem.renderInFrame = false; + } + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index d383cdd29..16b57c2ec 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,6 +14,7 @@ import com.hbm.blocks.generic.BlockGlyphidSpawner.TileEntityGlpyhidSpawner; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; @@ -212,6 +213,7 @@ public class TileMappings { put(TileEntityLoot.class, "tileentity_ntm_loot"); put(TileEntityPedestal.class, "tileentity_ntm_pedestal"); + put(TileEntitySkeletonHolder.class, "tileentity_ntm_skeleton"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); put(TileEntitySnowglobe.class, "tileentity_ntm_snowglobe"); put(TileEntityPlushie.class, "tileentity_ntm_plushie"); diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index 1075f264f..320dcf897 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -151,6 +151,12 @@ public class DamageResistanceHandler { registerSet(ModItems.dns_helmet, ModItems.dns_plate, ModItems.dns_legs, ModItems.dns_boots, new ResistanceStats() .addCategory(CATEGORY_EXPLOSION, 100F, 0.99F) .setOther(100F, 1F)); + registerSet(ModItems.taurun_helmet, ModItems.taurun_plate, ModItems.taurun_legs, ModItems.taurun_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_FIRE, 1F, 0.25F) + .addCategory(CATEGORY_EXPLOSION, 0F, 0.25F) + .addExact(DamageSource.fall.damageType, 4F, 0.5F) + .setOther(2F, 0.1F)); registerSet(ModItems.trenchmaster_helmet, ModItems.trenchmaster_plate, ModItems.trenchmaster_legs, ModItems.trenchmaster_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) diff --git a/src/main/java/com/hbm/world/feature/DepthDeposit.java b/src/main/java/com/hbm/world/feature/DepthDeposit.java index f3ac76f35..3a99b6198 100644 --- a/src/main/java/com/hbm/world/feature/DepthDeposit.java +++ b/src/main/java/com/hbm/world/feature/DepthDeposit.java @@ -12,40 +12,40 @@ import net.minecraft.world.World; public class DepthDeposit { public static void generateConditionOverworld(World world, int x, int yMin, int yDev, int z, int size, double fill, Block block, Random rand, int chance) { - + if(rand.nextInt(chance) == 0) - generate(world, x + rand.nextInt(16), yMin + rand.nextInt(yDev), z + rand.nextInt(16), size, fill, block, rand, Blocks.stone, ModBlocks.stone_depth); + generate(world, x + rand.nextInt(16) + 8, yMin + rand.nextInt(yDev), z + rand.nextInt(16) + 8, size, fill, block, rand, Blocks.stone, ModBlocks.stone_depth); } public static void generateConditionNether(World world, int x, int yMin, int yDev, int z, int size, double fill, Block block, Random rand, int chance) { - + if(rand.nextInt(chance) == 0) - generate(world, x + rand.nextInt(16), yMin + rand.nextInt(yDev), z + rand.nextInt(16), size, fill, block, rand, Blocks.netherrack, ModBlocks.stone_depth_nether); + generate(world, x + rand.nextInt(16) + 8, yMin + rand.nextInt(yDev), z + rand.nextInt(16) + 8, size, fill, block, rand, Blocks.netherrack, ModBlocks.stone_depth_nether); } public static void generateCondition(World world, int x, int yMin, int yDev, int z, int size, double fill, Block block, Random rand, int chance, Block genTarget, Block filler) { - + if(rand.nextInt(chance) == 0) - generate(world, x + rand.nextInt(16), yMin + rand.nextInt(yDev), z + rand.nextInt(16), size, fill, block, rand, genTarget, filler); + generate(world, x + rand.nextInt(16) + 8, yMin + rand.nextInt(yDev), z + rand.nextInt(16) + 8, size, fill, block, rand, genTarget, filler); } public static void generate(World world, int x, int y, int z, int size, double fill, Block block, Random rand, Block genTarget, Block filler) { - + for(int i = x - size; i <= x + size; i++) { for(int j = y - size; j <= y + size; j++) { for(int k = z - size; k <= z + size; k++) { - + if(j < 1 || j > 126) continue; - + double len = Vec3.createVectorHelper(x - i, y - j, z - k).lengthVector(); Block target = world.getBlock(i, j, k); - + if(target.isReplaceableOreGen(world, i, j, k, genTarget) || target.isReplaceableOreGen(world, i, j, k, Blocks.bedrock)) { //yes you've heard right, bedrock - + if(len + rand.nextInt(2) < size * fill) { world.setBlock(i, j, k, block); - + } else if(len + rand.nextInt(2) <= size) { world.setBlock(i, j, k, filler); } diff --git a/src/main/java/com/hbm/world/gen/NBTStructure.java b/src/main/java/com/hbm/world/gen/NBTStructure.java index 6ec619378..e7e03185c 100644 --- a/src/main/java/com/hbm/world/gen/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/NBTStructure.java @@ -16,6 +16,7 @@ import com.hbm.handler.ThreeInts; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Quartet; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.*; @@ -94,7 +95,7 @@ public class NBTStructure { } } - public static void registerStructure(SpawnCondition spawn, int... dimensionIds) { + public static void registerStructure(SpawnCondition spawn, int[] dimensionIds) { for(int dimensionId : dimensionIds) { registerStructure(dimensionId, spawn); } @@ -265,6 +266,10 @@ public class NBTStructure { } palette[i] = new BlockDefinition(blockName, meta); + + if(StructureConfig.debugStructures && palette[i].block == Blocks.air) { + palette[i] = new BlockDefinition(ModBlocks.wand_air, meta); + } } @@ -349,7 +354,7 @@ public class NBTStructure { if(connections.size() > 0) { fromConnections = new ArrayList<>(); - connections.sort((a, b) -> a.selectionPriority - b.selectionPriority); // sort by descending priority, highest first + connections.sort((a, b) -> b.selectionPriority - a.selectionPriority); // sort by descending priority, highest first // Sort out our from connections, splitting into individual lists for each priority level List innerList = null; @@ -439,7 +444,7 @@ public class NBTStructure { int ry = by + y; Block block = transformBlock(state.definition, null, world.rand); - int meta = coordBaseMode != 0 ? transformMeta(state.definition, coordBaseMode) : state.definition.meta; + int meta = transformMeta(state.definition, null, coordBaseMode); world.setBlock(rx, ry, rz, block, meta, 2); @@ -496,7 +501,7 @@ public class NBTStructure { int ry = by + oy; Block block = transformBlock(state.definition, piece.blockTable, world.rand); - int meta = coordBaseMode != 0 ? transformMeta(state.definition, coordBaseMode) : state.definition.meta; + int meta = transformMeta(state.definition, piece.blockTable, coordBaseMode); world.setBlock(rx, ry, rz, block, meta, 2); @@ -552,10 +557,16 @@ public class NBTStructure { return definition.block; } - private int transformMeta(BlockDefinition definition, int coordBaseMode) { + private int transformMeta(BlockDefinition definition, Map blockTable, int coordBaseMode) { + if(blockTable != null && blockTable.containsKey(definition.block)) { + return blockTable.get(definition.block).getSelectedBlockMetaData(); + } + // Our shit if(definition.block instanceof INBTTransformable) return ((INBTTransformable) definition.block).transformMeta(definition.meta, coordBaseMode); + if(coordBaseMode == 0) return definition.meta; + // Vanilla shit if(definition.block instanceof BlockStairs) return INBTTransformable.transformMetaStairs(definition.meta, coordBaseMode); if(definition.block instanceof BlockRotatedPillar) return INBTTransformable.transformMetaPillar(definition.meta, coordBaseMode); @@ -566,6 +577,7 @@ public class NBTStructure { if(definition.block instanceof BlockLever) return INBTTransformable.transformMetaLever(definition.meta, coordBaseMode); if(definition.block instanceof BlockSign) return INBTTransformable.transformMetaDeco(definition.meta, coordBaseMode); if(definition.block instanceof BlockLadder) return INBTTransformable.transformMetaDeco(definition.meta, coordBaseMode); + if(definition.block instanceof BlockTripWireHook) return INBTTransformable.transformMetaDirectional(definition.meta, coordBaseMode); return definition.meta; } @@ -630,6 +642,11 @@ public class NBTStructure { this.meta = meta; } + BlockDefinition(Block block, int meta) { + this.block = block; + this.meta = meta; + } + } public static class SpawnCondition { @@ -670,6 +687,31 @@ public class NBTStructure { return pools.get(name).clone(); } + // Builds all of the pools into neat rows and columns, for editing and debugging! + // Make sure structure debug is enabled, or it will no-op + // Do not use in generation + public void buildAll(World world, int x, int y, int z) { + if(!StructureConfig.debugStructures) return; + + int padding = 5; + int oz = 0; + + for(JigsawPool pool : pools.values()) { + int highestWidth = 0; + int ox = 0; + + for(Pair entry : pool.pieces) { + NBTStructure structure = entry.key.structure; + structure.build(world, x + ox + (structure.size.x / 2), y, z + oz + (structure.size.z / 2)); + + ox += structure.size.x + padding; + highestWidth = Math.max(highestWidth, structure.size.z); + } + + oz += highestWidth + padding; + } + } + } // A set of pieces with weights @@ -790,7 +832,7 @@ public class NBTStructure { boolean heightUpdated = false; - int priority; // placement priority not yet implemented because selection priority is far more useful whatever + int priority; // this is fucking hacky but we need a way to update ALL component bounds once a Y-level is determined private Start parent; @@ -941,6 +983,17 @@ public class NBTStructure { return false; } + protected boolean isInsideIgnoringSelf(LinkedList components, int x, int y, int z) { + for(StructureComponent component : components) { + if(component == this) continue; + if(component.getBoundingBox() == null) continue; + + if(component.getBoundingBox().isVecInside(x, y, z)) return true; + } + + return false; + } + } public static class Start extends StructureStart { @@ -966,7 +1019,15 @@ public class NBTStructure { // Iterate through and build out all the components we intend to spawn while(!queuedComponents.isEmpty()) { - final int i = rand.nextInt(queuedComponents.size()); + queuedComponents.sort((a, b) -> b.priority - a.priority); // sort by placement priority descending + int matchPriority = queuedComponents.get(0).priority; + int max = 1; + while(max < queuedComponents.size()) { + if(queuedComponents.get(max).priority != matchPriority) break; + max++; + } + + final int i = rand.nextInt(max); Component fromComponent = queuedComponents.remove(i); if(fromComponent.piece.structure.fromConnections == null) continue; @@ -1008,9 +1069,14 @@ public class NBTStructure { queuedComponents.add(nextComponent); } else { // If we failed to fit anything in, grab something from the fallback pool, ignoring bounds check + // unless we are perfectly abutting another piece, so grid layouts can work! if(nextPool.fallback != null) { - nextComponent = buildNextComponent(rand, spawn, spawn.pools.get(nextPool.fallback), fromComponent, fromConnection); - addComponent(nextComponent, fromConnection.placementPriority); // don't add to queued list, we don't want to try continue from fallback + BlockPos checkPos = getConnectionTargetPosition(fromComponent, fromConnection); + + if(!fromComponent.isInsideIgnoringSelf(components, checkPos.getX(), checkPos.getY(), checkPos.getZ())) { + nextComponent = buildNextComponent(rand, spawn, spawn.pools.get(nextPool.fallback), fromComponent, fromConnection); + addComponent(nextComponent, fromConnection.placementPriority); // don't add to queued list, we don't want to try continue from fallback + } } } } @@ -1031,12 +1097,25 @@ public class NBTStructure { @SuppressWarnings("unchecked") private void addComponent(Component component, int placementPriority) { + if(component == null) return; components.add(component); component.parent = this; component.priority = placementPriority; } + private BlockPos getConnectionTargetPosition(Component component, JigsawConnection connection) { + // The direction this component is extending towards in ABSOLUTE direction + ForgeDirection extendDir = component.rotateDir(connection.dir); + + // Set the starting point for the next structure to the location of the connector block + int x = component.getXWithOffset(connection.pos.x, connection.pos.z) + extendDir.offsetX; + int y = component.getYWithOffset(connection.pos.y) + extendDir.offsetY; + int z = component.getZWithOffset(connection.pos.x, connection.pos.z) + extendDir.offsetZ; + + return new BlockPos(x, y, z); + } + private Component buildNextComponent(Random rand, SpawnCondition spawn, JigsawPool pool, Component fromComponent, JigsawConnection fromConnection) { JigsawPiece nextPiece = pool.get(rand); if(nextPiece == null) return null; @@ -1046,23 +1125,17 @@ public class NBTStructure { JigsawConnection toConnection = connectionPool.get(rand.nextInt(connectionPool.size())); - // The direction this component is extending towards in ABSOLUTE direction - ForgeDirection extendDir = fromComponent.rotateDir(fromConnection.dir); - // Rotate our incoming piece to plug it in int nextCoordBase = fromComponent.getNextCoordBase(fromConnection, toConnection, rand); - // Set the starting point for the next structure to the location of the connector block - int nextX = fromComponent.getXWithOffset(fromConnection.pos.x, fromConnection.pos.z) + extendDir.offsetX; - int nextY = fromComponent.getYWithOffset(fromConnection.pos.y) + extendDir.offsetY; - int nextZ = fromComponent.getZWithOffset(fromConnection.pos.x, fromConnection.pos.z) + extendDir.offsetZ; + BlockPos pos = getConnectionTargetPosition(fromComponent, fromConnection); // offset the starting point to the connecting point - nextX -= nextPiece.structure.rotateX(toConnection.pos.x, toConnection.pos.z, nextCoordBase); - nextY -= toConnection.pos.y; - nextZ -= nextPiece.structure.rotateZ(toConnection.pos.x, toConnection.pos.z, nextCoordBase); + int ox = nextPiece.structure.rotateX(toConnection.pos.x, toConnection.pos.z, nextCoordBase); + int oy = toConnection.pos.y; + int oz = nextPiece.structure.rotateZ(toConnection.pos.x, toConnection.pos.z, nextCoordBase); - return new Component(spawn, nextPiece, rand, nextX, nextY, nextZ, nextCoordBase).connectedFrom(toConnection); + return new Component(spawn, nextPiece, rand, pos.getX() - ox, pos.getY() - oy, pos.getZ() - oz, nextCoordBase).connectedFrom(toConnection); } private List getConnectionPool(JigsawPiece nextPiece, JigsawConnection fromConnection) { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 401f3fcaa..9d6a1ae4b 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2447,6 +2447,7 @@ item.insert_polonium.name=Poloniumeinlage item.insert_steel.name=Schwere Stahleinlage item.insert_xsapi.name=XSAPI-Einlage item.insert_yharonite.name=Yharoniteinlage +item.item_secret.aberrator.name=Aberrator-Teil item.item_secret.canister.name=Komposit SB-26 item.item_secret.controller.name=Proprietäre Steuereinheit item.item_secret.selenium_steel.name=Selen-Stahl @@ -4889,6 +4890,7 @@ tile.sellafield_slaked.name=Gelöschtes Sellafit tile.semtex.name=Semtex tile.silo_hatch.name=Siloluke tile.silo_hatch_large.name=Große Siloluke +tile.skeleton_holder.name=Oh, ich glaub' der ist tot tile.sliding_blast_door.name=Sprengtür tile.solar_mirror.name=Heliostatspiegel tile.soyuz_capsule.name=Landekapsel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e682e78e0..a5c9482a0 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3270,6 +3270,7 @@ item.insert_polonium.name=Polonium Insert item.insert_steel.name=Heavy Steel Insert item.insert_xsapi.name=XSAPI Insert item.insert_yharonite.name=Yharonite Insert +item.item_secret.aberrator.name=Aberrator Part item.item_secret.canister.name=Composition SB-26 item.item_secret.controller.name=Proprietary Control Unit item.item_secret.selenium_steel.name=Selenium Steel @@ -6036,6 +6037,7 @@ tile.sellafield_slaked.name=Slaked Sellafite tile.semtex.name=Semtex tile.silo_hatch.name=Silo Hatch tile.silo_hatch_large.name=Large Silo Hatch +tile.skeleton_holder.name=Oh, that's a dead guy tile.sliding_blast_door.name=Sliding Blast Door tile.solar_mirror.name=Heliostat Mirror tile.soyuz_capsule.name=Cargo Landing Capsule diff --git a/src/main/resources/assets/hbm/models/armor/taurun.obj b/src/main/resources/assets/hbm/models/armor/taurun.obj new file mode 100644 index 000000000..4590617e3 --- /dev/null +++ b/src/main/resources/assets/hbm/models/armor/taurun.obj @@ -0,0 +1,1871 @@ +# Blender v2.79 (sub 0) OBJ File: 'taurun_scaled.blend' +# www.blender.org +o RightBoot +v -4.625000 24.300001 2.625000 +v 0.625000 24.299999 2.625000 +v -4.625000 24.300001 -2.625000 +v 0.625000 24.299999 -2.625000 +v -3.575000 24.300001 -3.675000 +v -0.425000 24.299999 -3.675000 +v -3.575001 22.200003 -3.675000 +v -0.425001 22.200001 -3.675000 +v -3.575001 21.150002 -2.625000 +v -0.425001 21.150000 -2.625000 +v -4.625000 22.200003 -2.625000 +v 0.624999 22.200001 -2.625000 +v 0.099999 20.100000 -2.100000 +v -4.100001 20.100002 -2.100000 +v 0.099999 20.100000 2.100000 +v -4.100001 20.100002 2.100000 +v -4.625001 20.100002 2.625000 +v 0.624999 20.100000 2.625000 +v -4.625001 20.100002 -2.625000 +v 0.624999 20.100000 -2.625000 +vt 0.000000 0.222222 +vt 0.250000 0.000000 +vt 0.000000 -0.000000 +vt 0.300000 0.044444 +vt 0.500000 0.000000 +vt 0.250000 0.000000 +vt 0.450000 0.133333 +vt 0.450000 0.044444 +vt 0.300000 0.133333 +vt 0.450000 0.177778 +vt 0.525000 0.422222 +vt 0.750000 0.400000 +vt 0.500000 0.400000 +vt 0.500000 0.311111 +vt 0.275000 0.422222 +vt 0.250000 0.400000 +vt 0.500000 0.044444 +vt 0.500000 0.133333 +vt 0.250000 0.133333 +vt 0.250000 0.044444 +vt 0.300000 0.355556 +vt 0.300000 0.177778 +vt 0.775000 0.422222 +vt 1.000000 0.400000 +vt 0.025000 0.422222 +vt 0.000000 0.400000 +vt 0.250000 0.311111 +vt 0.750000 0.222222 +vt 1.000000 0.222222 +vt 0.250000 0.222222 +vt 0.725000 0.422222 +vt 0.500000 0.222222 +vt 0.475000 0.422222 +vt 0.450000 0.355556 +vt 0.975000 0.422222 +vt 0.225000 0.422222 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 -0.7071 +vn -0.5774 -0.5774 -0.5773 +vn 0.5773 -0.5773 -0.5774 +vn 1.0000 -0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +s off +f 2/1/1 3/2/1 1/3/1 +f 6/4/1 3/5/1 4/6/1 +f 6/4/2 7/7/2 5/8/2 +f 8/9/3 9/10/3 7/7/3 +f 14/11/4 17/12/4 19/13/4 +f 11/14/5 19/13/5 17/12/5 +f 13/15/4 19/13/4 20/16/4 +f 3/17/6 7/7/6 11/18/6 +f 12/19/7 6/4/7 4/20/7 +f 9/10/8 11/18/8 7/7/8 +f 20/16/2 19/13/2 10/21/2 +f 8/9/9 12/19/9 10/22/9 +f 16/23/4 18/24/4 17/12/4 +f 15/25/4 20/16/4 18/26/4 +f 18/26/10 12/27/10 2/1/10 +f 1/28/11 18/24/11 2/29/11 +f 2/1/1 4/30/1 3/2/1 +f 6/4/1 5/8/1 3/5/1 +f 6/4/2 8/9/2 7/7/2 +f 8/9/3 10/22/3 9/10/3 +f 14/11/4 16/31/4 17/12/4 +f 17/12/5 1/28/5 11/14/5 +f 1/28/5 3/32/5 11/14/5 +f 13/15/4 14/33/4 19/13/4 +f 3/17/6 5/8/6 7/7/6 +f 12/19/7 8/9/7 6/4/7 +f 19/13/2 11/14/2 9/34/2 +f 10/21/2 12/27/2 20/16/2 +f 19/13/2 9/34/2 10/21/2 +f 16/23/4 15/35/4 18/24/4 +f 15/25/4 13/36/4 20/16/4 +f 20/16/10 12/27/10 18/26/10 +f 12/27/10 4/30/10 2/1/10 +f 1/28/11 17/12/11 18/24/11 +o LeftBoot +v 4.625000 24.299997 2.625000 +v -0.625000 24.299999 2.625000 +v 4.625000 24.299997 -2.625000 +v -0.625000 24.299999 -2.625000 +v 3.575000 24.299997 -3.675000 +v 0.425000 24.299999 -3.675000 +v 3.574999 22.199999 -3.675000 +v 0.425000 22.200001 -3.675000 +v 3.574999 21.149998 -2.625000 +v 0.424999 21.150000 -2.625000 +v 4.625000 22.199999 -2.625000 +v -0.625001 22.200001 -2.625000 +v -0.100001 20.100000 -2.100000 +v 4.099999 20.099998 -2.100000 +v -0.100001 20.100000 2.100000 +v 4.099999 20.099998 2.100000 +v 4.624999 20.099998 2.625000 +v -0.625001 20.100000 2.625000 +v 4.624999 20.099998 -2.625000 +v -0.625001 20.100000 -2.625000 +vt 0.250000 0.000000 +vt 0.000000 0.222222 +vt 0.000000 -0.000000 +vt 0.250000 0.000000 +vt 0.450000 0.044444 +vt 0.300000 0.044444 +vt 0.300000 0.133333 +vt 0.450000 0.133333 +vt 0.300000 0.177778 +vt 0.750000 0.400000 +vt 0.525000 0.422222 +vt 0.500000 0.400000 +vt 0.500000 0.311111 +vt 0.275000 0.422222 +vt 0.250000 0.400000 +vt 0.500000 0.133333 +vt 0.500000 0.044444 +vt 0.250000 0.044444 +vt 0.250000 0.133333 +vt 0.450000 0.177778 +vt 0.450000 0.355556 +vt 1.000000 0.400000 +vt 0.775000 0.422222 +vt 0.025000 0.422222 +vt 0.000000 0.400000 +vt 0.250000 0.311111 +vt 0.750000 0.222222 +vt 1.000000 0.222222 +vt 0.250000 0.222222 +vt 0.500000 0.000000 +vt 0.725000 0.422222 +vt 0.500000 0.222222 +vt 0.475000 0.422222 +vt 0.300000 0.355556 +vt 0.975000 0.422222 +vt 0.225000 0.422222 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 -0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5774 -0.5774 -0.5774 +vn -0.5773 -0.5773 -0.5774 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +s off +f 23/37/12 22/38/12 21/39/12 +f 24/40/12 25/41/12 26/42/12 +f 25/41/13 28/43/13 26/42/13 +f 27/44/14 30/45/14 28/43/14 +f 37/46/15 34/47/15 39/48/15 +f 37/46/16 39/48/16 31/49/16 +f 39/48/15 33/50/15 40/51/15 +f 31/52/17 25/41/17 23/53/17 +f 24/54/18 28/43/18 32/55/18 +f 29/56/19 27/44/19 31/52/19 +f 40/51/13 29/57/13 39/48/13 +f 28/43/20 30/45/20 32/55/20 +f 38/58/15 36/59/15 37/46/15 +f 40/51/15 35/60/15 38/61/15 +f 22/38/21 32/62/21 38/61/21 +f 38/58/22 21/63/22 22/64/22 +f 23/37/12 24/65/12 22/38/12 +f 24/40/12 23/66/12 25/41/12 +f 25/41/13 27/44/13 28/43/13 +f 27/44/14 29/56/14 30/45/14 +f 37/46/15 36/67/15 34/47/15 +f 23/68/16 21/63/16 31/49/16 +f 21/63/16 37/46/16 31/49/16 +f 39/48/15 34/69/15 33/50/15 +f 31/52/17 27/44/17 25/41/17 +f 24/54/18 26/42/18 28/43/18 +f 40/51/13 32/62/13 30/70/13 +f 29/57/13 31/49/13 39/48/13 +f 40/51/13 30/70/13 29/57/13 +f 38/58/15 35/71/15 36/59/15 +f 40/51/15 33/72/15 35/60/15 +f 24/65/21 32/62/21 22/38/21 +f 32/62/21 40/51/21 38/61/21 +f 38/58/22 37/46/22 21/63/22 +o RightArm +v -3.900008 -0.299998 2.100000 +v -3.900008 -0.299998 -2.100000 +v -8.100008 -0.299997 -2.100000 +v -8.100008 -0.299997 2.100000 +v -3.900005 9.150001 2.100000 +v -8.100005 9.150002 2.100000 +v -8.100005 9.150002 -2.100000 +v -3.900005 9.150001 -2.100000 +vt 0.250000 0.692308 +vt 0.000000 0.000000 +vt 0.000000 0.692308 +vt 0.500000 0.692308 +vt 0.250000 0.000000 +vt 1.000000 0.692308 +vt 0.750000 0.000000 +vt 0.750000 0.692308 +vt 0.500000 0.000000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 1.000000 0.000000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +s off +f 42/73/23 45/74/23 41/75/23 +f 43/76/24 48/77/24 42/73/24 +f 41/78/25 46/79/25 44/80/25 +f 44/80/26 47/81/26 43/76/26 +f 44/82/27 42/73/27 41/83/27 +f 42/73/23 48/77/23 45/74/23 +f 43/76/24 47/81/24 48/77/24 +f 41/78/25 45/84/25 46/79/25 +f 44/80/26 46/79/26 47/81/26 +f 44/82/27 43/76/27 42/73/27 +o RightLeg +v -4.100004 11.700002 2.100000 +v 0.099996 11.700001 2.100000 +v -4.100004 11.700002 -2.100000 +v 0.099996 11.700001 -2.100000 +v 0.099999 20.100000 -2.100000 +v -4.100001 20.100002 -2.100000 +v 0.099999 20.100000 2.100000 +v -4.100001 20.100002 2.100000 +vt 0.225000 0.955556 +vt 0.025000 0.777778 +vt 0.025000 0.955556 +vt 0.225000 0.422222 +vt 0.025000 0.422222 +vt 0.775000 0.422222 +vt 0.975000 0.777778 +vt 0.975000 0.422222 +vt 0.275000 0.777778 +vt 0.475000 0.422222 +vt 0.275000 0.422222 +vt 0.525000 0.777778 +vt 0.725000 0.422222 +vt 0.525000 0.422222 +vt 0.225000 0.777778 +vt 0.775000 0.777778 +vt 0.475000 0.777778 +vt 0.725000 0.777778 +vn -0.0000 -1.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +s off +f 51/85/28 50/86/28 49/87/28 +f 50/86/29 53/88/29 55/89/29 +f 56/90/30 50/91/30 55/92/30 +f 52/93/31 54/94/31 53/95/31 +f 51/96/32 56/97/32 54/98/32 +f 51/85/28 52/99/28 50/86/28 +f 50/86/29 52/99/29 53/88/29 +f 56/90/30 49/100/30 50/91/30 +f 52/93/31 51/101/31 54/94/31 +f 51/96/32 49/102/32 56/97/32 +o LeftLeg +v 4.099996 11.700000 2.100000 +v -0.100004 11.700001 2.100000 +v 4.099996 11.700000 -2.100000 +v -0.100004 11.700001 -2.100000 +v -0.100001 20.100000 -2.100000 +v 4.099999 20.099998 -2.100000 +v -0.100001 20.100000 2.100000 +v 4.099999 20.099998 2.100000 +vt 0.025000 0.777778 +vt 0.225000 0.955556 +vt 0.025000 0.955556 +vt 0.225000 0.422222 +vt 0.025000 0.422222 +vt 0.975000 0.422222 +vt 0.775000 0.777778 +vt 0.775000 0.422222 +vt 0.475000 0.422222 +vt 0.275000 0.777778 +vt 0.275000 0.422222 +vt 0.725000 0.422222 +vt 0.525000 0.777778 +vt 0.525000 0.422222 +vt 0.225000 0.777778 +vt 0.975000 0.777778 +vt 0.475000 0.777778 +vt 0.725000 0.777778 +vn -0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 -0.0000 0.0000 +s off +f 58/103/33 59/104/33 57/105/33 +f 61/106/34 58/103/34 63/107/34 +f 63/108/35 57/109/35 64/110/35 +f 62/111/36 60/112/36 61/113/36 +f 64/114/37 59/115/37 62/116/37 +f 58/103/33 60/117/33 59/104/33 +f 61/106/34 60/117/34 58/103/34 +f 63/108/35 58/118/35 57/109/35 +f 62/111/36 59/119/36 60/112/36 +f 64/114/37 57/120/37 59/115/37 +o LeftArm +v 3.899992 -0.300001 2.100000 +v 3.899992 -0.300001 -2.100000 +v 8.099993 -0.300002 -2.100000 +v 8.099993 -0.300002 2.100000 +v 3.899995 9.149999 2.100000 +v 8.099996 9.149997 2.100000 +v 8.099996 9.149997 -2.100000 +v 3.899995 9.149999 -2.100000 +vt 0.000000 0.000000 +vt 0.250000 0.692308 +vt 0.000000 0.692308 +vt 0.250000 0.000000 +vt 0.500000 0.692308 +vt 0.750000 0.000000 +vt 1.000000 0.692308 +vt 0.750000 0.692308 +vt 0.500000 0.000000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 1.000000 0.000000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn 1.0000 -0.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +s off +f 69/121/38 66/122/38 65/123/38 +f 72/124/39 67/125/39 66/122/39 +f 70/126/40 65/127/40 68/128/40 +f 71/129/41 68/128/41 67/125/41 +f 66/122/42 68/130/42 65/131/42 +f 69/121/38 72/124/38 66/122/38 +f 72/124/39 71/129/39 67/125/39 +f 70/126/40 69/132/40 65/127/40 +f 71/129/41 70/126/41 68/128/41 +f 66/122/42 67/125/42 68/130/42 +o Helmet +v 5.249990 -8.200003 -4.200000 +v 5.249990 -8.200003 4.200000 +v -4.200010 -8.200000 5.250000 +v 4.199989 -8.200002 5.250000 +v -4.200010 -8.200000 -5.250000 +v 4.199989 -8.200002 -5.250000 +v -5.250010 -8.199999 4.200000 +v -5.250010 -8.199999 -4.200000 +v 5.249990 -6.100002 -4.200000 +v 5.249990 -6.100002 4.200000 +v -4.200009 -6.099999 5.250000 +v 4.199990 -6.100002 5.250000 +v -4.200009 -6.099999 -5.250000 +v 4.199990 -6.100002 -5.250000 +v -5.250010 -6.099998 4.200000 +v -5.250010 -6.099998 -4.200000 +v 7.349990 -5.050002 -4.200000 +v 7.349990 -5.050002 4.200000 +v -4.200009 -5.049998 7.349999 +v 4.199991 -5.050001 7.349999 +v -4.200009 -5.049998 -7.349999 +v 4.199991 -5.050001 -7.349999 +v -7.350008 -5.049997 4.200000 +v -7.350008 -5.049997 -4.200000 +v -3.150011 -10.299998 3.150000 +v -3.150011 -10.299998 -3.150000 +v 3.149989 -10.300000 -3.150000 +v 3.149989 -10.300000 3.150000 +v 4.724989 -8.200003 -3.675000 +v 4.724989 -8.200003 3.675000 +v -3.675010 -8.200000 4.725000 +v 3.674989 -8.200002 4.725000 +v -3.675010 -8.200000 -4.725000 +v 3.674989 -8.200002 -4.725000 +v -4.725010 -8.199999 3.675000 +v -4.725010 -8.199999 -3.675000 +v 4.724992 0.199999 -3.675000 +v 4.724992 0.199999 3.675000 +v -3.675008 0.200002 4.725000 +v 3.674992 0.200000 4.725000 +v -3.675008 0.200002 -4.725000 +v 3.674992 0.200000 -4.725000 +v -4.725008 0.200002 3.675000 +v -4.725008 0.200002 -3.675000 +v -3.675007 1.250001 3.675000 +v -3.675007 1.250001 -3.675000 +v 3.674992 1.249999 -3.675000 +v 3.674992 1.249999 3.675000 +v 1.574991 -2.950001 -4.725000 +v -1.575009 -2.950000 -4.725000 +v 1.574992 0.200000 -4.725000 +v -1.575008 0.200001 -4.725000 +v 1.574992 0.200000 -5.775000 +v 1.574991 -1.900000 -5.775000 +v -1.575008 -1.899999 -5.775000 +v -1.575008 0.200001 -5.775000 +v -2.100010 -5.575000 -4.725000 +v -0.736019 -4.787500 -4.725000 +v -0.736019 -3.212499 -4.725000 +v -2.100008 -2.424999 -4.725000 +v -3.463999 -3.212498 -4.725000 +v -3.463999 -4.787499 -4.725000 +v 2.099990 -5.575001 -4.725000 +v 3.463980 -4.787501 -4.725000 +v 3.463981 -3.212501 -4.725000 +v 2.099991 -2.425000 -4.725000 +v 0.736001 -3.212500 -4.725000 +v 0.736001 -4.787501 -4.725000 +v 2.099990 -5.575001 -5.250000 +v 3.463980 -4.787501 -5.250000 +v 3.463981 -3.212501 -5.250000 +v 2.099991 -2.425000 -5.250000 +v 0.736001 -3.212500 -5.250000 +v 0.736001 -4.787501 -5.250000 +v -2.100010 -5.575000 -5.250000 +v -0.736019 -4.787500 -5.250000 +v -0.736019 -3.212499 -5.250000 +v -2.100008 -2.424999 -5.250000 +v -3.463999 -3.212498 -5.250000 +v -3.463999 -4.787499 -5.250000 +v 1.574993 1.377384 -5.467462 +v 1.049993 1.748615 -5.096232 +v -1.050007 1.748616 -5.096232 +v -1.575007 1.377385 -5.467462 +v 1.049992 -0.478770 -7.323617 +v 1.574992 -0.107537 -6.952385 +v -1.575008 -0.107536 -6.952385 +v -1.050008 -0.478769 -7.323617 +v 1.574993 1.377388 -8.437310 +v 1.049992 1.006157 -8.808541 +v 1.049993 3.233541 -6.581155 +v 1.574993 2.862312 -6.952386 +v -1.575007 2.862313 -6.952386 +v -1.050007 3.233542 -6.581155 +v -1.050007 1.006157 -8.808541 +v -1.575007 1.377388 -8.437310 +v 1.049992 -0.478770 -4.353768 +v 0.524992 -0.107536 -3.982538 +v -0.525008 -0.107536 -3.982538 +v -1.050008 -0.478769 -4.353768 +v 0.524992 -1.592463 -5.467462 +v 1.049992 -1.221232 -5.096231 +v -1.050008 -1.221231 -5.096231 +v -0.525008 -1.592462 -5.467462 +v 1.049992 0.263694 -6.581154 +v 0.524992 -0.107536 -6.952386 +v 0.524993 1.377384 -5.467462 +v 1.049992 1.006153 -5.838693 +v -1.050007 1.006153 -5.838693 +v -0.525007 1.377384 -5.467462 +v -0.525008 -0.107536 -6.952386 +v -1.050008 0.263695 -6.581154 +v 1.443740 -6.625000 -5.355000 +v -1.443760 -6.625000 -5.355000 +v 1.443739 -8.200001 -5.355000 +v -1.443760 -8.200001 -5.355000 +vt 0.280000 0.093023 +vt 0.600000 0.046512 +vt 0.600000 0.093023 +vt 0.280000 0.093023 +vt 0.600000 0.046512 +vt 0.600000 0.093023 +vt 0.280000 0.093023 +vt 0.600000 0.046512 +vt 0.600000 0.093023 +vt 0.280000 0.093023 +vt 0.600000 0.046512 +vt 0.600000 0.093023 +vt 0.720000 0.046512 +vt 0.640000 0.093023 +vt 0.640000 0.046512 +vt 0.720000 0.093023 +vt 0.640000 0.046512 +vt 0.720000 0.046512 +vt 0.640000 0.046512 +vt 0.720000 0.093023 +vt 0.640000 0.093023 +vt 0.640000 0.093023 +vt 0.720000 0.046512 +vt 0.720000 0.093023 +vt 0.640000 0.046512 +vt 0.760000 0.000000 +vt 0.600000 0.000000 +vt 0.720000 0.046512 +vt 0.280000 0.000000 +vt 0.600000 0.000000 +vt 0.280000 0.046512 +vt 0.600000 -0.000000 +vt 0.760000 0.000000 +vt 0.280000 0.046512 +vt 0.600000 -0.000000 +vt 0.760000 0.000000 +vt 0.280000 -0.000000 +vt 0.280000 0.046512 +vt 0.560000 0.162791 +vt 0.320000 0.302326 +vt 0.320000 0.162791 +vt 0.560000 0.162791 +vt 0.320000 0.162791 +vt 0.560000 0.162791 +vt 0.680000 0.162791 +vt 0.680000 0.162791 +vt 0.720000 0.093023 +vt 0.680000 0.162791 +vt 0.640000 0.093023 +vt 0.680000 0.162791 +vt 0.320000 0.372093 +vt 0.280000 0.186047 +vt 0.320000 0.186047 +vt -0.000000 0.372093 +vt 0.280000 0.372093 +vt 0.000000 0.744186 +vt 0.280000 0.558140 +vt 0.280000 0.744186 +vt 0.920000 0.558140 +vt 0.960000 0.744186 +vt 0.920000 0.744186 +vt 0.320000 0.558140 +vt 0.320000 0.744186 +vt 0.640000 0.744186 +vt 0.600000 0.744186 +vt 0.640000 0.558140 +vt -0.000000 -0.000000 +vt 0.280000 0.162791 +vt -0.000000 0.162791 +vt -0.000000 0.186047 +vt 0.920000 0.534884 +vt 0.940000 0.534884 +vt 0.960000 0.558140 +vt 0.000000 0.558140 +vt 0.280000 0.534884 +vt 0.300000 0.162791 +vt 0.320000 0.534884 +vt 0.600000 0.558140 +vt 0.300000 0.534884 +vt 0.620000 0.534884 +vt 0.040000 0.441860 +vt 0.160000 0.395349 +vt 0.160000 0.441860 +vt 0.160000 0.372093 +vt 0.040000 0.395349 +vt 0.040000 0.372093 +vt 0.040000 0.465116 +vt 0.160000 0.465116 +vt -0.000000 0.395349 +vt -0.000000 0.465116 +vt 0.200000 0.395349 +vt 0.280000 0.372093 +vt 0.320000 0.418605 +vt 0.280000 0.418605 +vt 0.400000 0.418605 +vt 0.440000 0.372093 +vt 0.440000 0.418605 +vt 0.220000 0.372093 +vt 0.260000 0.418605 +vt 0.220000 0.418605 +vt 0.660000 0.465116 +vt 0.740000 0.418605 +vt 0.740000 0.465116 +vt 0.440000 0.406977 +vt 0.440000 0.360465 +vt 0.460000 0.348837 +vt 0.360000 0.465116 +vt 0.440000 0.418605 +vt 0.440000 0.465116 +vt 0.460000 0.465116 +vt 0.540000 0.418605 +vt 0.540000 0.465116 +vt 0.560000 0.476744 +vt 0.800000 0.406977 +vt 0.740000 0.395349 +vt 0.800000 0.395349 +vt 0.920000 0.406977 +vt 0.860000 0.395349 +vt 0.920000 0.395349 +vt 0.680000 0.406977 +vt 0.620000 0.395349 +vt 0.680000 0.395349 +vt 0.860000 0.406977 +vt 0.620000 0.406977 +vt 0.560000 0.395349 +vt 0.740000 0.406977 +vt 0.770035 0.411685 +vt 0.829965 0.411685 +vt 0.859930 0.441860 +vt 0.620000 0.406977 +vt 0.560000 0.395349 +vt 0.620000 0.395349 +vt 0.740000 0.406977 +vt 0.680000 0.395349 +vt 0.740000 0.395349 +vt 0.800000 0.406977 +vt 0.800000 0.395349 +vt 0.920000 0.406977 +vt 0.860000 0.395349 +vt 0.920000 0.395349 +vt 0.680000 0.406977 +vt 0.860000 0.406977 +vt 0.770035 0.411685 +vt 0.829965 0.411685 +vt 0.859930 0.441860 +vt 0.460000 0.418605 +vt 0.560000 0.465116 +vt 0.560000 0.418605 +vt 0.640000 0.418605 +vt 0.640000 0.465116 +vt 0.340000 0.418605 +vt 0.360000 0.418605 +vt 0.200000 0.418605 +vt 0.200000 0.372093 +vt 0.380000 0.372093 +vt 0.380000 0.418605 +vt 0.340000 0.418605 +vt 0.320000 0.372093 +vt 0.340000 0.372093 +vt 1.000000 0.302326 +vt 0.560000 0.162791 +vt 1.000000 0.162791 +vt 0.280000 0.046512 +vt 0.760000 0.000000 +vt 0.280000 -0.000000 +vt 0.280000 -0.000000 +vt 0.560000 0.302326 +vt 0.320000 0.162791 +vt 0.560000 0.162791 +vt 0.320000 0.162791 +vt 0.280000 -0.000000 +vt 0.640000 0.534884 +vt 0.000000 0.534884 +vt 0.600000 0.534884 +vt 0.200000 0.465116 +vt 0.400000 0.372093 +vt 0.260000 0.372093 +vt 0.660000 0.418605 +vt 0.540000 0.348837 +vt 0.560000 0.360465 +vt 0.560000 0.406977 +vt 0.560000 0.523256 +vt 0.540000 0.534884 +vt 0.460000 0.534884 +vt 0.440000 0.523256 +vt 0.440000 0.476744 +vt 0.560000 0.406977 +vt 0.829965 0.472036 +vt 0.770035 0.472036 +vt 0.740070 0.441860 +vt 0.560000 0.406977 +vt 0.829965 0.472036 +vt 0.770035 0.472036 +vt 0.740070 0.441860 +vt 0.340000 0.465116 +vt 0.560000 0.302326 +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.7071 -0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.4082 -0.8165 -0.4082 +vn -0.4082 -0.8165 0.4082 +vn -0.0000 -0.8944 -0.4472 +vn 0.4472 -0.8944 0.0000 +vn 0.4082 -0.8165 0.4082 +vn -0.4472 -0.8944 0.0000 +vn 0.4082 -0.8165 -0.4082 +vn -0.0000 -0.8944 0.4472 +vn -0.0000 -1.0000 0.0000 +vn -0.0000 -0.7071 -0.7071 +vn 0.7071 -0.7071 0.0000 +vn -0.0000 -0.7071 0.7071 +vn -0.7071 -0.7071 0.0000 +vn -0.4851 -0.7276 0.4851 +vn -0.4851 -0.7276 -0.4851 +vn 0.4851 -0.7276 -0.4851 +vn 0.4851 -0.7276 0.4851 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.7071 0.7071 0.0000 +vn -0.5774 0.5774 -0.5774 +vn 0.7071 0.7071 0.0000 +vn 0.5774 0.5774 -0.5774 +vn 0.0000 0.7071 0.7071 +vn 0.5774 0.5774 0.5774 +vn -0.5774 0.5774 0.5774 +vn -0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.7071 -0.5000 -0.5000 +vn 0.7071 -0.5000 -0.5000 +vn 0.7071 0.5000 0.5000 +vn -0.7071 0.5000 0.5000 +s off +f 76/133/43 83/134/43 75/135/43 +f 77/136/44 86/137/44 78/138/44 +f 73/139/45 82/140/45 74/141/45 +f 79/142/46 88/143/46 80/144/46 +f 81/145/47 78/146/47 86/147/47 +f 76/148/48 82/149/48 84/150/48 +f 83/151/49 79/152/49 75/153/49 +f 80/154/50 85/155/50 77/156/50 +f 88/157/51 93/158/51 85/155/51 +f 91/159/52 87/160/52 83/151/52 +f 86/137/53 93/161/53 94/162/53 +f 81/163/54 90/164/54 82/140/54 +f 82/149/55 92/165/55 84/150/55 +f 87/166/56 96/167/56 88/143/56 +f 86/147/57 89/168/57 81/145/57 +f 92/169/58 83/134/58 84/170/58 +f 99/171/59 97/172/59 98/173/59 +f 99/171/60 77/136/60 78/138/60 +f 100/174/61 73/139/61 74/141/61 +f 75/135/62 100/175/62 76/133/62 +f 98/176/63 79/142/63 80/144/63 +f 79/152/64 97/177/64 75/153/64 +f 80/154/65 77/156/65 98/178/65 +f 73/179/66 99/180/66 78/146/66 +f 74/181/67 76/148/67 100/182/67 +f 101/183/47 114/184/47 109/185/47 +f 105/186/44 114/184/44 106/187/44 +f 101/188/45 110/189/45 102/190/45 +f 116/191/50 105/192/50 108/193/50 +f 102/190/48 112/194/48 104/195/48 +f 107/196/46 116/191/46 108/193/46 +f 112/194/43 103/197/43 104/195/43 +f 103/197/49 115/198/49 107/196/49 +f 117/199/68 119/200/68 118/201/68 +f 113/202/69 119/200/69 114/184/69 +f 115/198/70 118/203/70 116/191/70 +f 116/191/71 118/204/71 113/205/71 +f 109/206/72 120/207/72 110/189/72 +f 109/185/73 114/184/73 119/208/73 +f 120/209/74 111/210/74 112/194/74 +f 110/189/75 120/211/75 112/194/75 +f 115/198/76 111/210/76 117/212/76 +f 127/213/44 125/214/44 126/215/44 +f 123/216/68 128/217/68 124/218/68 +f 122/219/60 126/215/60 121/220/60 +f 124/221/46 127/213/46 122/222/46 +f 123/223/45 126/215/45 125/214/45 +f 183/224/60 173/225/60 176/226/60 +f 170/227/74 182/228/74 171/229/74 +f 181/230/46 175/231/46 172/232/46 +f 154/233/74 166/234/74 155/235/74 +f 168/236/69 165/237/69 166/238/69 +f 156/239/46 168/240/46 159/241/46 +f 160/242/60 162/243/60 157/244/60 +f 160/242/62 157/244/62 158/245/62 +f 146/246/77 135/247/77 140/248/77 +f 144/249/78 139/250/78 138/251/78 +f 142/252/45 137/253/45 136/254/45 +f 145/255/46 140/248/46 139/250/46 +f 143/256/79 138/257/79 137/253/79 +f 141/258/80 136/254/80 135/247/80 +f 145/259/44 144/260/44 143/261/44 +f 149/262/79 132/263/79 131/264/79 +f 147/265/80 130/266/80 129/267/80 +f 152/268/77 129/267/77 134/269/77 +f 150/270/78 133/271/78 132/272/78 +f 148/273/45 131/264/45 130/266/45 +f 151/274/46 134/269/46 133/271/46 +f 151/275/44 150/276/44 149/277/44 +f 159/241/81 167/278/81 160/242/81 +f 158/279/82 162/243/82 161/280/82 +f 164/281/83 154/233/83 153/282/83 +f 156/239/84 166/283/84 165/284/84 +f 153/282/45 161/280/45 164/281/45 +f 175/231/81 183/224/81 176/226/81 +f 181/230/84 171/285/84 182/286/84 +f 180/287/83 170/227/83 169/288/83 +f 174/289/82 178/290/82 177/291/82 +f 174/289/45 180/287/45 169/288/45 +f 187/292/44 186/293/44 185/294/44 +f 76/133/43 84/170/43 83/134/43 +f 77/136/44 85/295/44 86/137/44 +f 73/139/45 81/163/45 82/140/45 +f 79/142/46 87/166/46 88/143/46 +f 81/145/47 73/179/47 78/146/47 +f 76/148/48 74/181/48 82/149/48 +f 83/151/49 87/160/49 79/152/49 +f 80/154/50 88/157/50 85/155/50 +f 88/157/51 96/167/51 93/158/51 +f 91/159/52 95/296/52 87/160/52 +f 86/137/53 85/295/53 93/161/53 +f 81/163/54 89/297/54 90/164/54 +f 82/149/55 90/164/55 92/165/55 +f 87/166/56 95/298/56 96/167/56 +f 86/147/57 94/162/57 89/168/57 +f 92/169/58 91/159/58 83/134/58 +f 99/171/59 100/299/59 97/172/59 +f 99/171/60 98/173/60 77/136/60 +f 100/174/61 99/300/61 73/139/61 +f 75/135/62 97/301/62 100/175/62 +f 98/176/63 97/302/63 79/142/63 +f 101/183/47 106/187/47 114/184/47 +f 105/186/44 113/202/44 114/184/44 +f 101/188/45 109/206/45 110/189/45 +f 116/191/50 113/205/50 105/192/50 +f 102/190/48 110/189/48 112/194/48 +f 107/196/46 115/198/46 116/191/46 +f 112/194/43 111/210/43 103/197/43 +f 103/197/49 111/210/49 115/198/49 +f 117/199/68 120/303/68 119/200/68 +f 113/202/69 118/201/69 119/200/69 +f 115/198/70 117/304/70 118/203/70 +f 109/206/72 119/305/72 120/207/72 +f 120/209/74 117/306/74 111/210/74 +f 127/213/44 128/217/44 125/214/44 +f 123/216/68 125/214/68 128/217/68 +f 122/219/60 127/213/60 126/215/60 +f 124/221/46 128/217/46 127/213/46 +f 123/223/45 121/307/45 126/215/45 +f 183/224/60 178/290/60 173/225/60 +f 170/227/74 179/308/74 182/228/74 +f 181/230/46 184/309/46 175/231/46 +f 154/233/74 163/310/74 166/234/74 +f 166/238/69 163/311/69 162/243/69 +f 163/311/69 164/312/69 162/243/69 +f 164/312/69 161/313/69 162/243/69 +f 162/243/69 167/278/69 166/238/69 +f 167/278/69 168/236/69 166/238/69 +f 156/239/46 165/284/46 168/240/46 +f 160/242/60 167/278/60 162/243/60 +f 158/245/62 153/314/62 154/315/62 +f 154/315/62 155/316/62 158/245/62 +f 155/316/62 156/317/62 158/245/62 +f 156/317/62 159/318/62 158/245/62 +f 159/318/62 160/242/62 158/245/62 +f 146/246/77 141/258/77 135/247/77 +f 144/249/78 145/255/78 139/250/78 +f 142/252/45 143/256/45 137/253/45 +f 145/255/46 146/246/46 140/248/46 +f 143/256/79 144/319/79 138/257/79 +f 141/258/80 142/252/80 136/254/80 +f 143/261/44 142/320/44 145/259/44 +f 142/320/44 141/321/44 145/259/44 +f 141/321/44 146/322/44 145/259/44 +f 149/262/79 150/323/79 132/263/79 +f 147/265/80 148/273/80 130/266/80 +f 152/268/77 147/265/77 129/267/77 +f 150/270/78 151/274/78 133/271/78 +f 148/273/45 149/262/45 131/264/45 +f 151/274/46 152/268/46 134/269/46 +f 149/277/44 148/324/44 151/275/44 +f 148/324/44 147/325/44 151/275/44 +f 147/325/44 152/326/44 151/275/44 +f 159/241/81 168/240/81 167/278/81 +f 158/279/82 157/244/82 162/243/82 +f 164/281/83 163/310/83 154/233/83 +f 156/239/84 155/327/84 166/283/84 +f 153/282/45 158/279/45 161/280/45 +f 175/231/81 184/309/81 183/224/81 +f 181/230/84 172/232/84 171/285/84 +f 180/287/83 179/308/83 170/227/83 +f 174/289/82 173/225/82 178/290/82 +f 174/289/45 177/291/45 180/287/45 +f 187/292/44 188/328/44 186/293/44 +o Chest +v 4.199992 -0.300001 2.100000 +v 4.199992 -0.300001 -2.100000 +v -4.200007 -0.299998 -2.100000 +v -4.200007 -0.299998 2.100000 +v 4.199994 7.994998 -2.100000 +v -4.200005 7.995000 -2.100000 +v 4.199995 10.094998 -2.100000 +v -4.200004 10.095000 -2.100000 +v 4.199995 10.094998 -2.625000 +v 4.199994 7.994998 -2.625000 +v -4.200005 7.995000 -2.625000 +v -4.200004 10.095000 -2.625000 +v 4.199994 7.994998 2.100000 +v -4.200005 7.995000 2.100000 +v 4.199995 10.094998 2.100000 +v -4.200004 10.095000 2.100000 +v 4.199994 7.994998 2.625000 +v -4.200005 7.995000 2.625000 +v 4.199995 10.094998 2.625000 +v -4.200004 10.095000 2.625000 +v -4.725005 7.995000 -2.100000 +v -4.725004 10.095001 -2.100000 +v -4.725005 7.995000 2.100000 +v -4.725004 10.095001 2.100000 +v 4.724995 7.994998 -2.100000 +v 4.724996 10.094997 -2.100000 +v 4.724995 7.994998 2.100000 +v 4.724996 10.094997 2.100000 +v -4.200005 9.150001 2.100000 +v -4.200005 9.150001 -2.100000 +v 4.199995 9.149999 2.100000 +v 4.199995 9.149999 -2.100000 +v -4.200000 22.800001 5.250000 +v 4.200000 22.799997 5.250000 +v 5.249998 17.549997 2.100000 +v 5.249998 17.549997 -2.100000 +v -5.250002 17.550001 2.100000 +v -5.250002 17.550001 -2.100000 +v -0.000005 9.150000 -2.100000 +v -4.200002 15.450001 -3.150000 +v -2.100003 15.450001 -3.150000 +v 4.199997 15.449999 -3.150000 +v 2.099997 15.449999 -3.150000 +v 4.199996 12.299998 2.100000 +v 4.199996 12.299998 -2.100000 +v -4.200004 12.300000 -2.100000 +v -4.200004 12.300000 2.100000 +v 3.149995 11.249999 3.150000 +v -3.150004 11.250001 3.150000 +v 3.149992 0.749999 3.150000 +v -3.150007 0.750001 3.150000 +v 3.149992 0.749999 5.250000 +v -3.150007 0.750001 5.250000 +v 3.149993 2.849999 7.349999 +v 3.149995 11.249999 7.349999 +v -3.150004 11.250001 7.349999 +v -3.150007 2.850001 7.349999 +v 4.199993 4.949999 6.300000 +v 4.199995 10.199999 6.300000 +v 4.199995 10.199999 4.200000 +v 4.199993 4.949999 4.200000 +v 3.149995 11.249999 6.300000 +v 3.149993 4.950000 6.300000 +v 3.149995 11.249999 4.200000 +v 3.149993 4.950000 4.200000 +v 3.937494 4.949999 5.512500 +v 3.412494 4.950000 5.512500 +v 3.937494 4.949999 4.987500 +v 3.412494 4.950000 4.987500 +v 3.412493 3.899998 4.987500 +v 3.937493 3.899998 4.987500 +v 3.412493 3.899998 5.512500 +v 3.937493 3.899998 5.512500 +v 4.199993 3.899998 6.300000 +v 4.199993 3.899998 4.200000 +v 3.149993 3.899999 6.300000 +v 3.149993 3.899999 4.200000 +v 4.199992 1.799998 4.200000 +v 3.674992 1.799998 4.200000 +v 3.674992 1.799998 6.300000 +v 4.199992 1.799998 6.300000 +v 3.674993 3.899998 6.825000 +v 4.199993 3.899998 6.825000 +v 3.674993 2.849999 6.825000 +v 4.199993 2.849999 6.825000 +v 4.199993 3.899998 3.675000 +v 3.674993 3.899998 3.675000 +v 4.199993 2.849999 3.675000 +v 3.674993 2.849999 3.675000 +v -4.200006 4.950002 6.300000 +v -4.200004 10.200001 6.300000 +v -4.200004 10.200001 4.200000 +v -4.200006 4.950002 4.200000 +v -3.150006 4.950002 4.200000 +v -3.150004 11.250001 4.200000 +v -3.150006 4.950002 6.300000 +v -3.150004 11.250001 6.300000 +v -3.412506 4.950002 5.512500 +v -3.937506 4.950002 5.512500 +v -3.412506 4.950002 4.987500 +v -3.937506 4.950002 4.987500 +v -3.412507 1.800000 4.987500 +v -3.412507 1.800000 5.512500 +v -3.937507 1.800001 5.512500 +v -3.937507 1.800001 4.987500 +v -3.150007 2.325002 4.725000 +v -3.150007 2.325002 5.775000 +v -4.200006 2.325002 5.775000 +v -4.200006 2.325002 4.725000 +v -3.150007 3.900001 4.725000 +v -3.150007 3.900001 5.775000 +v -4.200006 3.900001 5.775000 +v -4.200006 3.900001 4.725000 +v -3.412507 2.587501 5.775000 +v -3.937507 2.587501 5.775000 +v -3.412507 3.637502 5.775000 +v -3.937506 3.637502 5.775000 +v -3.412507 3.112500 6.825000 +v -3.937507 3.112500 6.825000 +v -3.412507 3.637502 6.825000 +v -3.937506 3.637502 6.825000 +v -3.412507 3.637502 7.875000 +v -3.937506 3.637502 7.875000 +v -3.412506 4.162501 7.875000 +v -3.937506 4.162502 7.875000 +v -3.412507 2.587501 4.725000 +v -3.937507 2.587501 4.725000 +v -3.412507 3.637502 4.725000 +v -3.937506 3.637502 4.725000 +v -3.412507 3.112500 3.675000 +v -3.937507 3.112500 3.675000 +v -3.412507 3.637502 3.675000 +v -3.937506 3.637502 3.675000 +v -3.412507 3.637502 2.625000 +v -3.937506 3.637502 2.625000 +v -3.412506 4.162501 2.625000 +v -3.937506 4.162502 2.625000 +v 4.199993 0.749999 6.300000 +v -4.200007 0.750001 6.300000 +v 4.199993 2.234923 6.915076 +v -4.200006 2.234926 6.915076 +v 4.199994 2.849999 8.400000 +v -4.200006 2.850002 8.400000 +v 4.199993 2.234923 9.884923 +v -4.200006 2.234926 9.884923 +v 4.199993 0.749999 10.500000 +v -4.200006 0.750001 10.500000 +v 4.199991 -0.734926 9.884923 +v -4.200008 -0.734923 9.884923 +v 4.199991 -1.350000 8.400000 +v -4.200008 -1.349997 8.400000 +v 4.199991 -0.734926 6.915076 +v -4.200008 -0.734923 6.915076 +v 2.099995 10.199999 7.349999 +v -2.100004 10.200001 7.349999 +v 2.099994 6.000000 7.349999 +v -2.100006 6.000000 7.349999 +v 2.099994 6.000000 9.450000 +v 2.099995 10.199999 9.450000 +v -2.100004 10.200001 9.450000 +v -2.100006 6.000000 9.450000 +v 2.957832 11.899478 6.163495 +v 3.412495 11.874217 5.902212 +v 3.412496 11.899478 6.163495 +v 3.412495 8.764097 6.466626 +v 3.185164 11.912108 6.294134 +v 3.185163 8.776729 6.597267 +v 3.185164 11.937369 6.555416 +v 3.185163 8.801990 6.858547 +v 3.412496 11.950000 6.686055 +v 3.412495 8.814620 6.989188 +v 3.639827 11.937369 6.555416 +v 3.639826 8.801990 6.858547 +v 3.639827 11.912108 6.294134 +v 3.639826 8.776729 6.597267 +v 2.957832 11.950000 6.686055 +v 3.412495 11.975261 6.947338 +v 3.867158 11.950000 6.686055 +v 3.867158 11.899478 6.163495 +v 4.094491 12.931973 5.931808 +v 3.412496 12.894082 5.539885 +v 4.094491 13.007758 6.715653 +v 3.412496 13.045648 7.107575 +v 2.730501 13.007758 6.715653 +v 2.730501 12.931973 5.931808 +v 4.094491 13.977101 5.830763 +v 3.412496 13.939210 5.438842 +v 4.094491 14.052884 6.614610 +v 3.412496 14.090775 7.006532 +v 2.730501 14.052884 6.614610 +v 2.730501 13.977101 5.830763 +v 2.957832 12.447959 7.446981 +v 3.412496 12.491173 7.188064 +v 3.412496 12.447959 7.446981 +v 3.412495 9.340938 6.928412 +v 3.185164 12.426353 7.576441 +v 3.185163 9.319330 7.057871 +v 3.185164 12.383138 7.835360 +v 3.185163 9.276116 7.316791 +v 3.412496 12.361531 7.964818 +v 3.412495 9.254509 7.446248 +v 3.639827 12.383138 7.835360 +v 3.639826 9.276116 7.316791 +v 3.639827 12.426353 7.576441 +v 3.639826 9.319330 7.057871 +v 2.957832 12.361531 7.964818 +v 3.412496 12.318316 8.223737 +v 3.867159 12.361531 7.964818 +v 3.867159 12.447959 7.446981 +v 4.094491 13.505240 7.490378 +v 3.412496 13.570062 7.102001 +v 4.094491 13.375598 8.267134 +v 3.412496 13.310778 8.655512 +v 2.730501 13.375598 8.267134 +v 2.730501 13.505240 7.490378 +v 4.094491 14.540915 7.663234 +v 3.412496 14.605736 7.274856 +v 4.094491 14.411272 8.439990 +v 3.412496 14.346450 8.828368 +v 2.730502 14.411272 8.439990 +v 2.730502 14.540915 7.663234 +vt 0.333333 0.400000 +vt 0.481481 0.387500 +vt 0.481481 0.400000 +vt 0.240741 0.387500 +vt 0.092593 0.337500 +vt 0.240741 0.337500 +vt 0.240741 0.325000 +vt 0.092593 0.325000 +vt 0.092593 0.400000 +vt 0.240741 0.400000 +vt 0.092593 0.325000 +vt 0.166667 0.125000 +vt 0.166667 0.325000 +vt 0.203704 0.325000 +vt 0.351852 0.000000 +vt 0.351852 0.325000 +vt 0.481481 0.325000 +vt 0.333333 0.337500 +vt 0.333333 0.325000 +vt 0.481481 0.337500 +vt 0.333333 0.387500 +vt 0.009259 0.400000 +vt 0.083333 0.387500 +vt 0.083333 0.400000 +vt 0.083333 0.325000 +vt 0.009259 0.337500 +vt 0.009259 0.325000 +vt 0.250000 0.400000 +vt 0.324074 0.387500 +vt 0.324074 0.400000 +vt 0.324074 0.325000 +vt 0.250000 0.337500 +vt 0.250000 0.325000 +vt 0.324074 0.337500 +vt 0.083333 0.337500 +vt 0.092593 0.387500 +vt 0.083333 0.400000 +vt 0.083333 0.325000 +vt 0.000000 0.325000 +vt -0.000000 0.337500 +vt 0.009259 0.387500 +vt -0.000000 0.387500 +vt 0.000000 0.400000 +vt 0.324074 0.325000 +vt 0.324074 0.400000 +vt 0.240741 0.325000 +vt 0.250000 0.387500 +vt 0.240741 0.400000 +vt 0.388889 0.325000 +vt 0.462963 0.125000 +vt 0.462963 0.325000 +vt 0.203704 0.000000 +vt 0.388889 0.125000 +vt 0.481481 0.325000 +vt 0.518519 0.175000 +vt 0.555556 0.325000 +vt 0.074074 0.325000 +vt 0.037037 0.175000 +vt 0.074074 0.175000 +vt 0.481481 0.175000 +vt 0.092593 0.125000 +vt 0.296296 0.400000 +vt 0.444444 0.700000 +vt 0.296296 0.700000 +vt 0.222222 0.700000 +vt 0.074074 0.700000 +vt 0.222222 0.400000 +vt 0.000000 0.700000 +vt 0.074074 0.400000 +vt 0.222222 0.800000 +vt 0.555556 0.775000 +vt 0.444444 0.525000 +vt 0.555556 0.525000 +vt 0.629630 0.825000 +vt 0.740741 0.775000 +vt 0.740741 0.825000 +vt 0.740741 0.725000 +vt 0.814815 0.525000 +vt 0.814815 0.775000 +vt 0.740741 0.525000 +vt 0.629630 0.425000 +vt 0.740741 0.425000 +vt 0.629630 0.725000 +vt 0.629630 0.525000 +vt 0.629630 0.775000 +vt 0.592593 0.775000 +vt 0.537037 0.850000 +vt 0.500000 0.900000 +vt 0.500000 0.850000 +vt 0.555556 0.900000 +vt 0.546296 0.875000 +vt 0.555556 0.875000 +vt 0.500000 0.775000 +vt 0.500000 0.825000 +vt 0.490741 0.800000 +vt 0.018519 0.850000 +vt 0.055556 0.875000 +vt 0.018519 0.875000 +vt 0.453704 0.775000 +vt 0.444444 0.800000 +vt 0.444444 0.775000 +vt 0.018519 0.700000 +vt 0.055556 0.725000 +vt 0.018519 0.725000 +vt 0.462963 0.775000 +vt 0.453704 0.800000 +vt 0.074074 0.850000 +vt 0.074074 0.700000 +vt 0.472222 0.800000 +vt 0.462963 0.800000 +vt 0.537037 0.912500 +vt 0.500000 0.912500 +vt 0.481481 0.775000 +vt 0.472222 0.775000 +vt 0.000000 0.850000 +vt 0.000000 0.700000 +vt 0.055556 0.850000 +vt 0.537037 0.825000 +vt 0.537037 0.775000 +vt 0.555556 0.850000 +vt 0.546296 0.850000 +vt 0.546296 0.837500 +vt 0.537037 0.900000 +vt 0.546296 0.800000 +vt 0.546296 0.825000 +vt 0.490741 0.850000 +vt 0.481481 0.875000 +vt 0.481481 0.850000 +vt 0.481481 0.900000 +vt 0.490741 0.875000 +vt 0.490741 0.900000 +vt 0.490741 0.837500 +vt 0.055556 0.725000 +vt 0.018519 0.850000 +vt 0.018519 0.725000 +vt 0.611111 0.887500 +vt 0.629630 0.912500 +vt 0.611111 0.912500 +vt 0.000000 0.850000 +vt 0.000000 0.700000 +vt 0.074074 0.850000 +vt 0.055556 0.850000 +vt 0.055556 0.700000 +vt 0.018519 0.875000 +vt 0.564815 0.850000 +vt 0.574074 0.862500 +vt 0.564815 0.862500 +vt 0.583333 0.775000 +vt 0.574074 0.850000 +vt 0.574074 0.775000 +vt 0.564815 0.775000 +vt 0.555556 0.850000 +vt 0.555556 0.775000 +vt 0.592593 0.775000 +vt 0.583333 0.850000 +vt 0.629630 0.825000 +vt 0.611111 0.850000 +vt 0.611111 0.825000 +vt 0.629630 0.887500 +vt 0.648148 0.850000 +vt 0.666667 0.887500 +vt 0.648148 0.887500 +vt 0.592593 0.850000 +vt 0.592593 0.887500 +vt 0.666667 0.862500 +vt 0.675926 0.837500 +vt 0.675926 0.862500 +vt 0.666667 0.887500 +vt 0.675926 0.887500 +vt 0.694444 0.887500 +vt 0.703704 0.862500 +vt 0.703704 0.887500 +vt 0.685185 0.862500 +vt 0.694444 0.862500 +vt 0.685185 0.887500 +vt 0.675926 0.825000 +vt 0.685185 0.837500 +vt 0.703704 0.837500 +vt 0.694444 0.837500 +vt 0.694444 0.862500 +vt 0.685185 0.837500 +vt 0.694444 0.837500 +vt 0.694444 0.887500 +vt 0.685185 0.862500 +vt 0.703704 0.862500 +vt 0.703704 0.887500 +vt 0.666667 0.887500 +vt 0.675926 0.862500 +vt 0.675926 0.887500 +vt 0.685185 0.887500 +vt 0.675926 0.837500 +vt 0.685185 0.825000 +vt 0.703704 0.837500 +vt 0.666667 0.862500 +vt 0.814815 0.662500 +vt 0.962963 0.700000 +vt 0.814815 0.700000 +vt 0.962963 0.737500 +vt 0.814815 0.737500 +vt 0.962963 0.437500 +vt 0.814815 0.475000 +vt 0.814815 0.437500 +vt 0.962963 0.475000 +vt 0.814815 0.512500 +vt 0.962963 0.512500 +vt 0.814815 0.550000 +vt 0.962963 0.550000 +vt 0.814815 0.587500 +vt 0.937455 0.253064 +vt 0.962963 0.238801 +vt 0.962963 0.336199 +vt 0.962963 0.625000 +vt 0.814815 0.625000 +vt 0.962963 0.662500 +vt 0.937455 0.421935 +vt 0.937455 0.353064 +vt 0.988471 0.353064 +vt 0.814815 0.225000 +vt 0.740741 0.325000 +vt 0.740741 0.225000 +vt 0.740741 0.375000 +vt 0.814815 0.325000 +vt 0.814815 0.375000 +vt 0.814815 0.175000 +vt 0.740741 0.175000 +vt 0.851852 0.325000 +vt 0.851852 0.225000 +vt 0.703704 0.225000 +vt 0.703704 0.325000 +vt 0.425926 0.800000 +vt 0.435185 0.825000 +vt 0.425926 0.825000 +vt 0.398148 0.787500 +vt 0.388889 0.800000 +vt 0.388889 0.787500 +vt 0.398148 0.712500 +vt 0.407407 0.800000 +vt 0.416667 0.825000 +vt 0.407407 0.825000 +vt 0.425926 0.787500 +vt 0.435185 0.800000 +vt 0.407407 0.787500 +vt 0.444444 0.800000 +vt 0.435185 0.787500 +vt 0.407407 0.712500 +vt 0.416667 0.787500 +vt 0.398148 0.850000 +vt 0.398148 0.825000 +vt 0.416667 0.800000 +vt 0.416667 0.712500 +vt 0.397836 0.706250 +vt 0.391360 0.711298 +vt 0.391360 0.701202 +vt 0.388889 0.825000 +vt 0.435185 0.712500 +vt 0.398148 0.800000 +vt 0.444444 0.787500 +vt 0.390314 0.856394 +vt 0.398148 0.850287 +vt 0.405982 0.856394 +vt 0.416667 0.850000 +vt 0.444444 0.825000 +vt 0.435185 0.850000 +vt 0.388889 0.850000 +vt 0.407407 0.850000 +vt 0.425926 0.850000 +vt 0.425926 0.800000 +vt 0.435185 0.825000 +vt 0.425926 0.825000 +vt 0.398148 0.787500 +vt 0.388889 0.800000 +vt 0.388889 0.787500 +vt 0.388889 0.712500 +vt 0.407407 0.800000 +vt 0.416667 0.825000 +vt 0.407407 0.825000 +vt 0.435185 0.787500 +vt 0.425926 0.787500 +vt 0.407407 0.712500 +vt 0.407407 0.787500 +vt 0.444444 0.800000 +vt 0.435185 0.800000 +vt 0.444444 0.787500 +vt 0.416667 0.712500 +vt 0.416667 0.787500 +vt 0.398148 0.850000 +vt 0.398148 0.825000 +vt 0.416667 0.800000 +vt 0.389201 0.706250 +vt 0.391360 0.701202 +vt 0.397836 0.706250 +vt 0.398148 0.800000 +vt 0.388889 0.825000 +vt 0.425926 0.712500 +vt 0.435185 0.712500 +vt 0.393625 0.851924 +vt 0.402671 0.851924 +vt 0.402671 0.873076 +vt 0.416667 0.850000 +vt 0.444444 0.850000 +vt 0.435185 0.850000 +vt 0.388889 0.850000 +vt 0.407407 0.850000 +vt 0.425926 0.850000 +vt 0.490741 0.825000 +vt -0.000000 0.325000 +vt 0.444444 0.400000 +vt 0.000000 0.400000 +vt 0.074074 0.800000 +vt 0.444444 0.775000 +vt 0.777778 0.775000 +vt 0.546296 0.900000 +vt 0.055556 0.700000 +vt 0.481481 0.800000 +vt 0.074074 0.700000 +vt 0.018519 0.700000 +vt 0.055556 0.875000 +vt 0.592593 0.850000 +vt 0.629630 0.850000 +vt 0.666667 0.850000 +vt 0.666667 0.837500 +vt 0.685185 0.825000 +vt 0.675926 0.825000 +vt 0.666667 0.837500 +vt 0.962963 0.587500 +vt 0.988471 0.253064 +vt 0.999037 0.287500 +vt 0.988471 0.321936 +vt 0.937455 0.321936 +vt 0.926890 0.287500 +vt 0.926889 0.387500 +vt 0.962963 0.338801 +vt 0.999036 0.387500 +vt 0.988471 0.421936 +vt 0.962963 0.436199 +vt 0.388889 0.712500 +vt 0.425926 0.712500 +vt 0.395677 0.701202 +vt 0.395677 0.711298 +vt 0.389201 0.706250 +vt 0.444444 0.712500 +vt 0.405982 0.868606 +vt 0.398148 0.874712 +vt 0.390314 0.868606 +vt 0.444444 0.850000 +vt 0.398148 0.712500 +vt 0.444444 0.825000 +vt 0.395677 0.701202 +vt 0.395677 0.711298 +vt 0.391360 0.711298 +vt 0.444444 0.712500 +vt 0.407194 0.862500 +vt 0.393625 0.873076 +vt 0.389102 0.862500 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.9923 -0.1240 0.0000 +vn -0.0000 -0.2249 0.9744 +vn 0.0000 0.0000 1.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 -0.0000 -0.7071 +vn -0.9923 -0.1240 0.0000 +vn 0.8740 -0.1093 0.4734 +vn -0.8740 -0.1093 0.4734 +vn 0.0000 -0.1644 -0.9864 +vn -0.7960 -0.0995 -0.5970 +vn 0.7960 -0.0995 -0.5970 +vn -0.0000 -0.7071 0.7071 +vn 0.0000 -0.4472 0.8944 +vn -0.8729 -0.2182 -0.4364 +vn 0.7071 0.7071 0.0000 +vn -0.9701 -0.2425 0.0000 +vn 0.0000 -0.4472 -0.8944 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -0.8944 0.4472 +vn 0.0000 0.8944 -0.4472 +vn 0.0000 -0.8944 -0.4472 +vn 0.0000 0.8944 0.4472 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.3827 0.9239 +vn -0.0000 -0.3827 0.9239 +vn -0.0000 -0.9239 0.3827 +vn -0.0000 -0.9239 -0.3827 +vn -0.0000 -0.3827 -0.9239 +vn 0.9774 -0.2106 0.0204 +vn -0.0000 -0.9954 0.0962 +vn -0.5000 -0.0833 -0.8620 +vn -0.4887 -0.1292 0.8628 +vn 0.4887 -0.2921 -0.8221 +vn -0.5000 0.0833 0.8620 +vn 0.5000 0.0833 0.8620 +vn -0.4887 -0.2921 -0.8221 +vn 0.4887 -0.1292 0.8628 +vn 0.5000 -0.0833 -0.8620 +vn -0.9774 -0.2106 0.0204 +vn 0.0000 0.9954 -0.0962 +vn 0.9774 -0.2087 -0.0348 +vn -0.0000 -0.9864 -0.1646 +vn -0.5000 0.1426 -0.8542 +vn -0.4887 -0.3481 0.8000 +vn 0.4887 -0.0694 -0.8697 +vn -0.5000 -0.1426 0.8542 +vn 0.5000 -0.1426 0.8542 +vn -0.4887 -0.0694 -0.8697 +vn 0.4887 -0.3481 0.8000 +vn 0.5000 0.1426 -0.8542 +vn -0.9774 -0.2087 -0.0348 +vn 0.0000 0.9864 0.1646 +vn -0.8729 -0.2182 0.4364 +s off +f 201/329/85 206/330/85 202/331/85 +f 198/332/86 200/333/86 197/334/86 +f 195/335/87 200/333/87 196/336/87 +f 194/337/85 198/332/85 193/338/85 +f 220/339/88 223/340/88 219/341/88 +f 219/342/89 221/343/89 217/344/89 +f 204/345/87 207/346/87 203/347/87 +f 208/348/90 205/349/90 207/346/90 +f 202/350/85 209/351/85 194/352/85 +f 196/353/87 212/354/87 204/355/87 +f 193/356/85 215/357/85 201/358/85 +f 203/359/87 214/360/87 195/361/87 +f 215/357/91 214/360/91 216/362/91 +f 209/351/92 212/354/92 210/363/92 +f 209/351/93 200/333/93 199/364/93 +f 194/337/85 209/365/85 199/364/85 +f 196/336/87 200/333/87 210/366/87 +f 204/355/87 212/354/87 208/367/87 +f 208/368/94 211/369/94 206/370/94 +f 202/350/85 206/371/85 211/369/85 +f 203/347/87 207/346/87 216/372/87 +f 215/357/95 207/346/95 205/349/95 +f 201/329/85 215/373/85 205/349/85 +f 195/361/87 214/360/87 197/374/87 +f 197/334/96 213/375/96 198/332/96 +f 193/356/85 198/376/85 213/375/85 +f 217/377/97 226/378/97 218/379/97 +f 219/342/98 223/340/98 222/380/98 +f 217/344/99 221/343/99 225/381/99 +f 218/382/100 229/383/100 227/384/100 +f 220/385/100 231/386/100 230/387/100 +f 218/379/101 226/378/101 228/388/101 +f 220/339/102 230/387/102 224/389/102 +f 232/390/90 192/391/90 189/392/90 +f 190/393/91 232/390/91 189/392/91 +f 191/394/86 233/395/86 190/393/86 +f 192/396/92 234/397/92 191/394/92 +f 189/398/85 191/394/85 190/393/85 +f 238/399/86 237/400/86 236/401/86 +f 238/402/85 241/403/85 239/404/85 +f 245/405/92 237/406/92 239/407/92 +f 244/408/87 236/409/87 237/410/87 +f 244/408/90 242/411/90 243/412/90 +f 240/413/103 245/405/103 241/403/103 +f 242/411/91 240/414/91 238/399/91 +f 262/415/91 266/416/91 263/417/91 +f 268/418/104 273/419/104 272/420/104 +f 267/421/105 265/422/105 277/423/105 +f 249/424/85 251/425/85 253/426/85 +f 256/427/86 258/428/86 257/429/86 +f 252/430/106 247/431/106 248/432/106 +f 254/433/91 259/434/91 256/427/91 +f 251/435/90 247/431/90 250/436/90 +f 254/433/90 260/437/90 261/438/90 +f 266/416/85 268/439/85 267/440/85 +f 257/441/92 260/437/92 255/442/92 +f 248/432/86 253/443/86 252/444/86 +f 246/445/91 248/432/91 247/431/91 +f 264/446/87 263/417/87 265/422/87 +f 265/422/107 268/447/107 264/446/107 +f 270/448/90 273/419/90 271/449/90 +f 262/415/87 270/450/87 271/449/87 +f 262/415/91 273/419/91 269/451/91 +f 264/446/94 272/452/94 270/453/94 +f 274/454/86 277/455/86 275/456/86 +f 267/457/108 276/458/108 266/459/108 +f 263/417/87 275/460/87 265/422/87 +f 263/417/91 276/458/91 274/454/91 +f 280/461/92 278/462/92 279/463/92 +f 296/464/85 294/465/85 295/466/85 +f 279/463/90 284/467/90 285/468/90 +f 280/461/86 282/469/86 281/470/86 +f 279/463/109 283/471/109 280/461/109 +f 281/470/85 284/472/85 278/462/85 +f 292/473/85 290/474/85 291/475/85 +f 288/476/86 293/477/86 289/478/86 +f 287/479/90 291/480/90 286/481/90 +f 289/478/92 292/473/92 287/479/92 +f 286/482/91 290/483/91 288/476/91 +f 298/484/87 300/485/87 299/486/87 +f 300/485/92 297/487/92 296/464/92 +f 298/488/91 295/489/91 294/490/91 +f 297/487/86 298/488/86 294/490/86 +f 299/491/90 296/464/90 295/492/90 +f 308/493/91 310/494/91 306/495/91 +f 304/496/91 306/495/91 302/497/91 +f 305/498/87 308/499/87 304/500/87 +f 305/498/92 307/501/92 309/502/92 +f 302/497/110 307/501/110 303/503/110 +f 312/504/90 311/505/90 310/494/90 +f 309/502/111 312/506/111 308/499/111 +f 309/502/92 311/505/92 313/507/92 +f 306/495/110 311/505/110 307/501/110 +f 320/508/91 322/509/91 324/510/91 +f 316/511/91 318/512/91 320/508/91 +f 316/511/87 321/513/87 317/514/87 +f 317/515/92 319/516/92 315/517/92 +f 315/517/112 318/512/112 314/518/112 +f 323/519/86 324/520/86 322/509/86 +f 320/508/113 325/521/113 321/513/113 +f 321/522/92 323/519/92 319/516/92 +f 318/512/112 323/519/112 322/509/112 +f 326/523/114 329/524/114 328/525/114 +f 328/525/115 331/526/115 330/527/115 +f 331/528/116 332/529/116 330/530/116 +f 333/531/117 334/532/117 332/529/117 +f 335/533/118 336/534/118 334/532/118 +f 337/535/119 338/536/119 336/534/119 +f 333/537/92 331/538/92 339/539/92 +f 338/536/120 341/540/120 340/541/120 +f 340/541/121 327/542/121 326/523/121 +f 340/543/91 328/544/91 332/545/91 +f 348/546/90 346/547/90 347/548/90 +f 344/549/85 349/550/85 345/551/85 +f 343/552/87 347/548/87 342/553/87 +f 345/554/92 348/546/92 343/555/92 +f 342/556/91 346/547/91 344/557/91 +f 366/558/122 368/559/122 370/560/122 +f 354/561/123 351/562/123 352/563/123 +f 352/563/124 355/564/124 354/561/124 +f 364/565/125 371/566/125 372/567/125 +f 360/568/123 367/569/123 366/558/123 +f 355/564/92 356/570/92 354/561/92 +f 351/571/126 368/559/126 367/569/126 +f 362/572/123 351/571/123 367/569/123 +f 357/573/127 358/574/127 356/570/127 +f 372/567/92 379/575/92 373/576/92 +f 360/568/123 365/577/123 358/574/123 +f 359/578/128 360/568/128 358/574/128 +f 353/579/123 361/580/123 357/581/123 +f 351/562/129 373/576/129 369/582/129 +f 360/568/91 363/583/91 362/572/91 +f 366/558/130 371/566/130 365/577/130 +f 354/561/123 364/565/123 350/584/123 +f 363/583/131 352/585/131 362/572/131 +f 356/570/123 365/577/123 364/565/123 +f 364/565/132 373/576/132 350/584/132 +f 377/586/133 376/587/133 374/588/133 +f 370/560/128 377/589/128 371/566/128 +f 369/590/131 374/591/131 368/559/131 +f 369/582/124 379/575/124 375/592/124 +f 371/566/127 378/593/127 372/567/127 +f 370/560/91 374/591/91 376/594/91 +f 396/595/134 398/596/134 400/597/134 +f 384/598/135 381/599/135 382/600/135 +f 383/601/136 384/598/136 382/600/136 +f 394/602/137 401/603/137 402/604/137 +f 392/605/135 396/595/135 390/606/135 +f 384/598/92 387/607/92 386/608/92 +f 381/609/138 398/596/138 397/610/138 +f 382/611/135 397/610/135 392/605/135 +f 386/608/139 389/612/139 388/613/139 +f 402/604/92 409/614/92 403/615/92 +f 390/606/135 395/616/135 388/613/135 +f 389/612/140 390/606/140 388/613/140 +f 389/617/135 387/618/135 383/619/135 +f 380/620/141 399/621/141 381/599/141 +f 391/622/91 392/605/91 390/606/91 +f 395/616/142 400/597/142 401/603/142 +f 384/598/135 394/602/135 380/620/135 +f 393/623/143 382/611/143 392/605/143 +f 386/608/135 395/616/135 394/602/135 +f 380/620/144 402/604/144 403/615/144 +f 406/624/145 404/625/145 409/626/145 +f 400/597/140 407/627/140 401/603/140 +f 398/596/143 405/628/143 404/629/143 +f 399/621/136 409/614/136 405/630/136 +f 401/603/139 408/631/139 402/604/139 +f 398/596/91 406/632/91 400/597/91 +f 272/452/146 264/446/146 268/447/146 +f 277/423/93 265/422/93 275/633/93 +f 201/329/85 205/349/85 206/330/85 +f 198/332/86 199/364/86 200/333/86 +f 195/335/87 197/334/87 200/333/87 +f 194/337/85 199/364/85 198/332/85 +f 220/339/88 224/389/88 223/340/88 +f 219/342/89 222/380/89 221/343/89 +f 204/345/87 208/348/87 207/346/87 +f 208/348/90 206/330/90 205/349/90 +f 202/350/85 211/369/85 209/351/85 +f 196/353/87 210/363/87 212/354/87 +f 193/356/85 213/375/85 215/357/85 +f 203/359/87 216/362/87 214/360/87 +f 215/357/91 213/375/91 214/360/91 +f 209/351/92 211/369/92 212/354/92 +f 209/351/93 210/363/93 200/333/93 +f 208/368/94 212/354/94 211/369/94 +f 215/357/95 216/362/95 207/346/95 +f 197/334/96 214/360/96 213/375/96 +f 217/377/97 225/381/97 226/378/97 +f 218/382/100 228/388/100 229/383/100 +f 220/385/100 227/634/100 231/386/100 +f 232/390/90 235/635/90 192/391/90 +f 190/393/91 233/395/91 232/390/91 +f 191/394/86 234/397/86 233/395/86 +f 192/396/92 235/636/92 234/397/92 +f 189/398/85 192/637/85 191/394/85 +f 238/399/86 239/638/86 237/400/86 +f 238/402/85 240/413/85 241/403/85 +f 239/407/92 241/639/92 245/405/92 +f 245/405/92 244/408/92 237/406/92 +f 244/408/87 243/412/87 236/409/87 +f 244/408/90 245/405/90 242/411/90 +f 240/413/103 242/411/103 245/405/103 +f 238/399/91 236/401/91 242/411/91 +f 236/401/91 243/412/91 242/411/91 +f 262/415/91 269/451/91 266/416/91 +f 268/418/104 269/640/104 273/419/104 +f 249/424/85 246/445/85 251/425/85 +f 256/427/86 259/434/86 258/428/86 +f 252/430/106 250/641/106 247/431/106 +f 254/433/91 261/438/91 259/434/91 +f 251/435/90 246/445/90 247/431/90 +f 254/433/90 255/442/90 260/437/90 +f 266/416/85 269/451/85 268/439/85 +f 257/441/92 258/642/92 260/437/92 +f 248/432/86 249/424/86 253/443/86 +f 246/445/91 249/424/91 248/432/91 +f 264/446/87 262/415/87 263/417/87 +f 265/422/107 267/421/107 268/447/107 +f 270/448/90 272/420/90 273/419/90 +f 262/415/87 264/446/87 270/450/87 +f 262/415/91 271/449/91 273/419/91 +f 274/454/86 276/458/86 277/455/86 +f 267/457/108 277/455/108 276/458/108 +f 263/417/87 274/454/87 275/460/87 +f 263/417/91 266/416/91 276/458/91 +f 280/461/92 281/470/92 278/462/92 +f 296/464/85 297/487/85 294/465/85 +f 279/463/90 278/462/90 284/467/90 +f 280/461/86 283/643/86 282/469/86 +f 279/463/109 285/644/109 283/471/109 +f 281/470/85 282/645/85 284/472/85 +f 292/473/85 293/477/85 290/474/85 +f 288/476/86 290/483/86 293/477/86 +f 287/479/90 292/473/90 291/480/90 +f 289/478/92 293/477/92 292/473/92 +f 286/482/91 291/646/91 290/483/91 +f 298/484/87 301/647/87 300/485/87 +f 300/485/92 301/647/92 297/487/92 +f 298/488/91 299/648/91 295/489/91 +f 297/487/86 301/647/86 298/488/86 +f 299/491/90 300/485/90 296/464/90 +f 308/493/91 312/649/91 310/494/91 +f 304/496/91 308/493/91 306/495/91 +f 305/498/87 309/502/87 308/499/87 +f 305/498/92 303/503/92 307/501/92 +f 302/497/110 306/495/110 307/501/110 +f 312/504/90 313/650/90 311/505/90 +f 309/502/111 313/507/111 312/506/111 +f 309/502/92 307/501/92 311/505/92 +f 306/495/110 310/494/110 311/505/110 +f 320/508/91 318/512/91 322/509/91 +f 316/511/91 314/518/91 318/512/91 +f 316/511/87 320/508/87 321/513/87 +f 317/515/92 321/522/92 319/516/92 +f 315/517/112 319/516/112 318/512/112 +f 323/519/86 325/651/86 324/520/86 +f 320/508/113 324/510/113 325/521/113 +f 321/522/92 325/652/92 323/519/92 +f 318/512/112 319/516/112 323/519/112 +f 326/523/114 327/542/114 329/524/114 +f 328/525/115 329/524/115 331/526/115 +f 331/528/116 333/531/116 332/529/116 +f 333/531/117 335/533/117 334/532/117 +f 335/533/118 337/535/118 336/534/118 +f 337/535/119 339/653/119 338/536/119 +f 331/538/92 329/654/92 339/539/92 +f 329/654/92 327/655/92 339/539/92 +f 327/655/92 341/656/92 339/539/92 +f 339/539/92 337/657/92 335/658/92 +f 335/658/92 333/537/92 339/539/92 +f 338/536/120 339/653/120 341/540/120 +f 340/541/121 341/540/121 327/542/121 +f 340/543/91 326/659/91 328/544/91 +f 328/544/91 330/660/91 332/545/91 +f 332/545/91 334/661/91 336/662/91 +f 336/662/91 338/663/91 332/545/91 +f 338/663/91 340/543/91 332/545/91 +f 348/546/90 349/550/90 346/547/90 +f 344/549/85 346/547/85 349/550/85 +f 343/552/87 348/546/87 347/548/87 +f 345/554/92 349/550/92 348/546/92 +f 342/556/91 347/548/91 346/547/91 +f 366/558/122 367/569/122 368/559/122 +f 354/561/123 350/584/123 351/562/123 +f 352/563/124 353/664/124 355/564/124 +f 364/565/125 365/577/125 371/566/125 +f 360/568/123 362/572/123 367/569/123 +f 355/564/92 357/573/92 356/570/92 +f 351/571/126 369/590/126 368/559/126 +f 362/572/123 352/585/123 351/571/123 +f 357/573/127 359/578/127 358/574/127 +f 372/567/92 378/593/92 379/575/92 +f 360/568/123 366/558/123 365/577/123 +f 359/578/128 361/665/128 360/568/128 +f 357/581/123 355/666/123 353/579/123 +f 353/579/123 363/667/123 361/580/123 +f 361/580/123 359/668/123 357/581/123 +f 351/562/129 350/584/129 373/576/129 +f 360/568/91 361/665/91 363/583/91 +f 366/558/130 370/560/130 371/566/130 +f 354/561/123 356/570/123 364/565/123 +f 363/583/131 353/669/131 352/585/131 +f 356/570/123 358/574/123 365/577/123 +f 364/565/132 372/567/132 373/576/132 +f 374/588/133 375/670/133 377/586/133 +f 375/670/133 379/671/133 377/586/133 +f 379/671/133 378/672/133 377/586/133 +f 370/560/128 376/594/128 377/589/128 +f 369/590/131 375/673/131 374/591/131 +f 369/582/124 373/576/124 379/575/124 +f 371/566/127 377/589/127 378/593/127 +f 370/560/91 368/559/91 374/591/91 +f 396/595/134 397/610/134 398/596/134 +f 384/598/135 380/620/135 381/599/135 +f 383/601/136 385/674/136 384/598/136 +f 394/602/137 395/616/137 401/603/137 +f 392/605/135 397/610/135 396/595/135 +f 384/598/92 385/674/92 387/607/92 +f 381/609/138 399/675/138 398/596/138 +f 382/611/135 381/609/135 397/610/135 +f 386/608/139 387/607/139 389/612/139 +f 402/604/92 408/631/92 409/614/92 +f 390/606/135 396/595/135 395/616/135 +f 389/612/140 391/622/140 390/606/140 +f 387/618/135 385/676/135 383/619/135 +f 383/619/135 393/677/135 391/678/135 +f 391/678/135 389/617/135 383/619/135 +f 380/620/141 403/615/141 399/621/141 +f 391/622/91 393/623/91 392/605/91 +f 395/616/142 396/595/142 400/597/142 +f 384/598/135 386/608/135 394/602/135 +f 393/623/143 383/679/143 382/611/143 +f 386/608/135 388/613/135 395/616/135 +f 380/620/144 394/602/144 402/604/144 +f 404/625/145 405/680/145 409/626/145 +f 409/626/145 408/681/145 407/682/145 +f 407/682/145 406/624/145 409/626/145 +f 400/597/140 406/632/140 407/627/140 +f 398/596/143 399/675/143 405/628/143 +f 399/621/136 403/615/136 409/614/136 +f 401/603/139 407/627/139 408/631/139 +f 398/596/91 404/629/91 406/632/91 diff --git a/src/main/resources/assets/hbm/models/blocks/skeleton_holder.obj b/src/main/resources/assets/hbm/models/blocks/skeleton_holder.obj new file mode 100644 index 000000000..8b874c6c3 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/skeleton_holder.obj @@ -0,0 +1,330 @@ +# Blender v2.79 (sub 0) OBJ File: 'skeleton_holder.blend' +# www.blender.org +o Holder1 +v -0.007506 0.185094 0.287769 +v -0.369728 0.834613 0.384826 +v -0.039858 0.185094 0.167028 +v -0.402080 0.834613 0.264085 +v 0.097059 0.247594 0.259751 +v -0.265163 0.897113 0.356808 +v 0.064706 0.247594 0.139010 +v -0.297516 0.897113 0.236067 +v 0.365620 0.000000 -0.258745 +v -0.358824 0.000000 -0.064630 +v 0.333268 0.000000 -0.379485 +v -0.391176 0.000000 -0.185371 +v 0.365620 0.125000 -0.258745 +v -0.358824 0.125000 -0.064630 +v 0.333268 0.125000 -0.379485 +v -0.391176 0.125000 -0.185371 +v -0.491581 1.016218 0.267475 +v -0.205884 1.425794 0.242480 +v -0.535159 1.016218 -0.230622 +v -0.249462 1.425794 -0.255617 +v -0.083563 0.729430 0.231779 +v 0.202134 1.139006 0.206783 +v -0.127141 0.729430 -0.266319 +v 0.158556 1.139006 -0.291314 +v -0.491581 1.016218 0.267475 +v -0.205884 1.425794 0.242480 +v -0.535159 1.016218 -0.230622 +v -0.249462 1.425794 -0.255617 +v -0.083563 0.729430 0.231779 +v 0.202134 1.139006 0.206783 +v -0.127141 0.729430 -0.266319 +v 0.158556 1.139006 -0.291314 +v -0.250476 0.114105 0.250000 +v -0.185109 0.861251 0.250000 +v -0.250476 0.114105 -0.250000 +v -0.185109 0.861251 -0.250000 +v -0.499524 0.135894 0.250000 +v -0.434158 0.883040 0.250000 +v -0.499524 0.135894 -0.250000 +v -0.434158 0.883040 -0.250000 +v -0.250476 0.114105 0.250000 +v -0.185109 0.861251 0.250000 +v -0.250476 0.114105 -0.250000 +v -0.185109 0.861251 -0.250000 +v -0.499524 0.135894 0.250000 +v -0.434158 0.883040 0.250000 +v -0.499524 0.135894 -0.250000 +v -0.434158 0.883040 -0.250000 +v 0.333268 -0.000000 0.379485 +v -0.391176 0.000000 0.185371 +v 0.365620 -0.000000 0.258745 +v -0.358824 0.000000 0.064630 +v 0.333268 0.125000 0.379485 +v -0.391176 0.125000 0.185371 +v 0.365620 0.125000 0.258745 +v -0.358824 0.125000 0.064630 +v -0.039858 0.185094 -0.167028 +v -0.402080 0.834613 -0.264085 +v -0.007506 0.185094 -0.287769 +v -0.369728 0.834613 -0.384826 +v 0.064706 0.247594 -0.139010 +v -0.297516 0.897113 -0.236067 +v 0.097059 0.247594 -0.259751 +v -0.265163 0.897113 -0.356808 +vt 0.125000 0.437500 +vt 0.093750 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.437500 +vt 0.062500 0.062500 +vt 0.062500 0.437500 +vt 0.031250 0.062500 +vt -0.000000 0.437500 +vt 0.000000 0.062500 +vt 0.062500 0.500000 +vt 0.093750 0.437500 +vt 0.093750 0.500000 +vt 0.062500 0.500000 +vt 0.031250 0.437500 +vt 0.125000 0.062500 +vt 0.093750 0.437500 +vt 0.093750 0.062500 +vt 0.062500 0.062500 +vt 0.062500 0.437500 +vt 0.031250 0.062500 +vt 0.031250 0.437500 +vt 0.000000 0.062500 +vt 0.062500 0.437500 +vt 0.093750 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.500000 +vt 0.500000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt -0.000000 0.500000 +vt 0.250000 0.750000 +vt 0.375000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 1.000000 +vt 0.500000 0.500000 +vt 0.375000 0.750000 +vt 0.500000 0.750000 +vt 0.250000 0.500000 +vt 0.375000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 0.750000 +vt -0.000000 0.500000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.250000 0.750000 +vt 0.250000 1.000000 +vt 0.250000 1.000000 +vt 0.312500 0.000000 +vt 0.437500 0.375000 +vt 0.437500 0.000000 +vt 0.500000 0.000000 +vt 0.437500 0.375000 +vt 0.437500 0.000000 +vt 0.625000 0.000000 +vt 0.500000 0.375000 +vt 0.312500 0.000000 +vt 0.250000 0.375000 +vt 0.250000 0.000000 +vt 0.437500 0.500000 +vt 0.562500 0.375000 +vt 0.562500 0.500000 +vt 0.437500 0.500000 +vt 0.312500 0.375000 +vt 0.437500 0.375000 +vt 0.312500 0.000000 +vt 0.437500 0.000000 +vt 0.437500 0.375000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.500000 0.375000 +vt 0.625000 0.000000 +vt 0.250000 0.375000 +vt 0.312500 0.000000 +vt 0.250000 0.000000 +vt 0.562500 0.375000 +vt 0.437500 0.500000 +vt 0.562500 0.500000 +vt 0.437500 0.500000 +vt 0.312500 0.375000 +vt 0.312500 0.500000 +vt 0.125000 0.437500 +vt 0.093750 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.437500 +vt 0.062500 0.062500 +vt 0.062500 0.437500 +vt 0.031250 0.062500 +vt -0.000000 0.437500 +vt 0.000000 0.062500 +vt 0.062500 0.500000 +vt 0.093750 0.437500 +vt 0.093750 0.500000 +vt 0.062500 0.500000 +vt 0.031250 0.437500 +vt 0.125000 0.437500 +vt 0.093750 0.062500 +vt 0.125000 0.062500 +vt 0.062500 0.437500 +vt 0.062500 0.062500 +vt 0.031250 0.062500 +vt 0.031250 0.437500 +vt 0.000000 0.062500 +vt 0.062500 0.500000 +vt 0.093750 0.437500 +vt 0.093750 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.437500 +vt 0.031250 0.500000 +vt 0.125000 0.437500 +vt -0.000000 0.437500 +vt 0.093750 0.437500 +vt 0.031250 0.500000 +vt 0.500000 0.750000 +vt -0.000000 0.750000 +vt 0.375000 0.750000 +vt 0.125000 1.000000 +vt -0.000000 0.750000 +vt 0.375000 0.750000 +vt 0.125000 1.000000 +vt 0.312500 0.375000 +vt 0.625000 0.375000 +vt 0.437500 0.375000 +vt 0.312500 0.500000 +vt 0.312500 0.375000 +vt 0.625000 0.375000 +vt 0.437500 0.375000 +vt 0.062500 0.437500 +vt 0.031250 0.500000 +vt 0.093750 0.437500 +vt -0.000000 0.437500 +vt 0.062500 0.437500 +vt 0.031250 0.500000 +vn -0.8365 -0.5000 0.2241 +vn -0.2588 -0.0000 -0.9659 +vn 0.8365 0.5000 -0.2241 +vn 0.2588 0.0000 0.9659 +vn 0.4830 -0.8660 -0.1294 +vn -0.4830 0.8660 0.1294 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.9659 0.0000 -0.2588 +vn -0.9659 0.0000 0.2588 +vn -0.8160 0.5736 0.0714 +vn -0.0872 -0.0000 -0.9962 +vn 0.8160 -0.5736 -0.0714 +vn 0.0872 0.0000 0.9962 +vn -0.5714 -0.8192 0.0500 +vn 0.5714 0.8192 -0.0500 +vn 0.9962 -0.0872 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -0.9962 0.0872 0.0000 +vn -0.0000 0.0000 1.0000 +vn -0.0872 -0.9962 0.0000 +vn 0.0872 0.9962 0.0000 +vn 0.2588 0.0000 -0.9659 +vn -0.2588 0.0000 0.9659 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 -0.2588 +vn -0.8365 -0.5000 -0.2241 +vn 0.8365 0.5000 0.2241 +vn 0.4830 -0.8660 0.1294 +vn -0.4830 0.8660 -0.1294 +s off +f 2/1/1 3/2/1 1/3/1 +f 4/4/2 7/5/2 3/2/2 +f 8/6/3 5/7/3 7/5/3 +f 5/7/4 2/8/4 1/9/4 +f 3/10/5 5/11/5 1/12/5 +f 4/13/6 6/14/6 8/6/6 +f 9/15/7 12/16/7 11/17/7 +f 12/16/2 15/18/2 11/17/2 +f 16/19/8 13/20/8 15/18/8 +f 14/21/4 9/22/4 13/20/4 +f 15/23/9 9/24/9 11/25/9 +f 12/26/10 14/21/10 16/19/10 +f 17/27/11 20/28/11 19/29/11 +f 20/28/12 23/30/12 19/29/12 +f 24/31/13 21/32/13 23/30/13 +f 22/33/14 17/34/14 21/32/14 +f 23/35/15 17/36/15 19/37/15 +f 20/38/16 22/33/16 24/31/16 +f 25/39/13 28/40/13 26/41/13 +f 31/42/14 28/40/14 27/43/14 +f 29/44/11 32/45/11 31/42/11 +f 25/46/12 30/47/12 29/44/12 +f 25/48/16 31/49/16 27/50/16 +f 30/47/15 28/51/15 32/45/15 +f 35/52/17 34/53/17 33/54/17 +f 39/55/18 36/56/18 35/57/18 +f 37/58/19 40/59/19 39/55/19 +f 33/60/20 38/61/20 37/62/20 +f 33/63/21 39/64/21 35/65/21 +f 40/66/22 34/67/22 36/56/22 +f 42/68/19 43/69/19 41/70/19 +f 44/71/20 47/72/20 43/73/20 +f 48/74/17 45/75/17 47/72/17 +f 46/76/18 41/77/18 45/78/18 +f 47/79/22 41/80/22 43/81/22 +f 48/82/21 42/83/21 46/84/21 +f 50/85/7 51/86/7 49/87/7 +f 52/88/23 55/89/23 51/86/23 +f 56/90/8 53/91/8 55/89/8 +f 53/91/24 50/92/24 49/93/24 +f 51/94/25 53/95/25 49/96/25 +f 52/97/26 54/98/26 56/90/26 +f 58/99/27 59/100/27 57/101/27 +f 59/100/23 64/102/23 63/103/23 +f 64/102/28 61/104/28 63/103/28 +f 62/105/24 57/106/24 61/104/24 +f 59/107/29 61/108/29 57/109/29 +f 60/110/30 62/105/30 64/102/30 +f 2/1/1 4/4/1 3/2/1 +f 4/4/2 8/6/2 7/5/2 +f 8/6/3 6/14/3 5/7/3 +f 5/7/4 6/14/4 2/8/4 +f 3/10/5 7/111/5 5/11/5 +f 4/13/6 2/112/6 6/14/6 +f 9/15/7 10/113/7 12/16/7 +f 12/16/2 16/19/2 15/18/2 +f 16/19/8 14/21/8 13/20/8 +f 14/21/4 10/114/4 9/22/4 +f 15/23/9 13/115/9 9/24/9 +f 12/26/10 10/116/10 14/21/10 +f 17/27/11 18/117/11 20/28/11 +f 20/28/12 24/31/12 23/30/12 +f 24/31/13 22/33/13 21/32/13 +f 22/33/14 18/118/14 17/34/14 +f 23/35/15 21/119/15 17/36/15 +f 20/38/16 18/120/16 22/33/16 +f 25/39/13 27/43/13 28/40/13 +f 31/42/14 32/45/14 28/40/14 +f 29/44/11 30/47/11 32/45/11 +f 25/46/12 26/121/12 30/47/12 +f 25/48/16 29/122/16 31/49/16 +f 30/47/15 26/123/15 28/51/15 +f 35/52/17 36/124/17 34/53/17 +f 39/55/18 40/59/18 36/56/18 +f 37/58/19 38/125/19 40/59/19 +f 33/60/20 34/67/20 38/61/20 +f 33/63/21 37/126/21 39/64/21 +f 40/66/22 38/127/22 34/67/22 +f 42/68/19 44/128/19 43/69/19 +f 44/71/20 48/74/20 47/72/20 +f 48/74/17 46/129/17 45/75/17 +f 46/76/18 42/83/18 41/77/18 +f 47/79/22 45/130/22 41/80/22 +f 48/82/21 44/71/21 42/83/21 +f 50/85/7 52/88/7 51/86/7 +f 52/88/23 56/90/23 55/89/23 +f 56/90/8 54/98/8 53/91/8 +f 53/91/24 54/98/24 50/92/24 +f 51/94/25 55/131/25 53/95/25 +f 52/97/26 50/132/26 54/98/26 +f 58/99/27 60/133/27 59/100/27 +f 59/100/23 60/133/23 64/102/23 +f 64/102/28 62/105/28 61/104/28 +f 62/105/24 58/134/24 57/106/24 +f 59/107/29 63/135/29 61/108/29 +f 60/110/30 58/136/30 62/105/30 diff --git a/src/main/resources/assets/hbm/textures/armor/taurun_arm.png b/src/main/resources/assets/hbm/textures/armor/taurun_arm.png new file mode 100644 index 000000000..121b5cae3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/taurun_arm.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/taurun_chest.png b/src/main/resources/assets/hbm/textures/armor/taurun_chest.png new file mode 100644 index 000000000..696b0e7a7 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/taurun_chest.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/taurun_helmet.png b/src/main/resources/assets/hbm/textures/armor/taurun_helmet.png new file mode 100644 index 000000000..656f40f8b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/taurun_helmet.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/taurun_leg.png b/src/main/resources/assets/hbm/textures/armor/taurun_leg.png new file mode 100644 index 000000000..c5e595eeb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/taurun_leg.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/dungeon_spawner.png b/src/main/resources/assets/hbm/textures/blocks/dungeon_spawner.png new file mode 100644 index 000000000..66c1990fc Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/dungeon_spawner.png differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_buff.png b/src/main/resources/assets/hbm/textures/entity/siege_buff.png deleted file mode 100644 index f95ba419a..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_buff.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_clay.png b/src/main/resources/assets/hbm/textures/entity/siege_clay.png deleted file mode 100644 index cf5ccb8ed..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_clay.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_desh.png b/src/main/resources/assets/hbm/textures/entity/siege_desh.png deleted file mode 100644 index 21e5cea37..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_desh.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_dnt.png b/src/main/resources/assets/hbm/textures/entity/siege_dnt.png deleted file mode 100644 index 3886788d5..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_dnt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_buff.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_buff.png deleted file mode 100644 index bf5c5145c..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_buff.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_clay.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_clay.png deleted file mode 100644 index a62854104..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_clay.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_desh.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_desh.png deleted file mode 100644 index 29386e3fb..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_desh.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_dnt.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_dnt.png deleted file mode 100644 index 922fcf854..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_dnt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_gold.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_gold.png deleted file mode 100644 index 767ae055b..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_gold.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_iron.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_iron.png deleted file mode 100644 index 72ac3298e..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_iron.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_schrab.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_schrab.png deleted file mode 100644 index 5bf4346b8..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_schrab.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_silver.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_silver.png deleted file mode 100644 index 8584831ca..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_silver.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill_stone.png b/src/main/resources/assets/hbm/textures/entity/siege_drill_stone.png deleted file mode 100644 index 4cd317e2d..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill_stone.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_gold.png b/src/main/resources/assets/hbm/textures/entity/siege_gold.png deleted file mode 100644 index 3a21166ce..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_gold.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_iron.png b/src/main/resources/assets/hbm/textures/entity/siege_iron.png deleted file mode 100644 index dfaa2333c..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_iron.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_schrab.png b/src/main/resources/assets/hbm/textures/entity/siege_schrab.png deleted file mode 100644 index f92e5e2b9..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_schrab.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_silver.png b/src/main/resources/assets/hbm/textures/entity/siege_silver.png deleted file mode 100644 index 1be7bb6fa..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_silver.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/siege_stone.png b/src/main/resources/assets/hbm/textures/entity/siege_stone.png deleted file mode 100644 index eae23ffbb..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_stone.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_buff.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_buff.png deleted file mode 100644 index f2d6b27cb..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_buff.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_clay.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_clay.png deleted file mode 100644 index f9736160b..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_clay.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_desh.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_desh.png deleted file mode 100644 index ae7851cec..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_desh.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_dnt.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_dnt.png deleted file mode 100644 index 5ddd978cb..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_dnt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_gold.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_gold.png deleted file mode 100644 index 39d9164de..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_gold.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_iron.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_iron.png deleted file mode 100644 index 52c1584b5..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_iron.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_schrab.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_schrab.png deleted file mode 100644 index 5fc11f60a..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_schrab.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_silver.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_silver.png deleted file mode 100644 index b35162465..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_silver.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/entity/ufo_siege_stone.png b/src/main/resources/assets/hbm/textures/entity/ufo_siege_stone.png deleted file mode 100644 index 0da005db9..000000000 Binary files a/src/main/resources/assets/hbm/textures/entity/ufo_siege_stone.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/assembly_template_alt.png b/src/main/resources/assets/hbm/textures/items/assembly_template_alt.png deleted file mode 100644 index 2537c2fc2..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/assembly_template_alt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/item_secret.aberrator.png b/src/main/resources/assets/hbm/textures/items/item_secret.aberrator.png new file mode 100644 index 000000000..dc8901a93 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/item_secret.aberrator.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_1.png b/src/main/resources/assets/hbm/textures/items/ln2_1.png deleted file mode 100644 index afdd4453c..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_1.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_10.png b/src/main/resources/assets/hbm/textures/items/ln2_10.png deleted file mode 100644 index d6e6b40a7..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_10.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_2.png b/src/main/resources/assets/hbm/textures/items/ln2_2.png deleted file mode 100644 index af7187803..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_2.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_3.png b/src/main/resources/assets/hbm/textures/items/ln2_3.png deleted file mode 100644 index 55b04d07a..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_3.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_4.png b/src/main/resources/assets/hbm/textures/items/ln2_4.png deleted file mode 100644 index f33742080..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_4.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_5.png b/src/main/resources/assets/hbm/textures/items/ln2_5.png deleted file mode 100644 index 20e0fcefd..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_5.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_6.png b/src/main/resources/assets/hbm/textures/items/ln2_6.png deleted file mode 100644 index 41256391a..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_6.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_7.png b/src/main/resources/assets/hbm/textures/items/ln2_7.png deleted file mode 100644 index bd3a7ba0f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_7.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_8.png b/src/main/resources/assets/hbm/textures/items/ln2_8.png deleted file mode 100644 index 18195c822..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_8.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ln2_9.png b/src/main/resources/assets/hbm/textures/items/ln2_9.png deleted file mode 100644 index 8cc282346..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ln2_9.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/magnet_circular.png b/src/main/resources/assets/hbm/textures/items/magnet_circular.png deleted file mode 100644 index 4d8f16620..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/magnet_circular.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/magnet_dee.png b/src/main/resources/assets/hbm/textures/items/magnet_dee.png deleted file mode 100644 index 8815f2837..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/magnet_dee.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/magnetron.png b/src/main/resources/assets/hbm/textures/items/magnetron.png deleted file mode 100644 index 5f160f01f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/magnetron.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_daffergon.png b/src/main/resources/assets/hbm/textures/items/nugget_daffergon.png deleted file mode 100644 index 6e8922ebb..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_daffergon.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_reiium.png b/src/main/resources/assets/hbm/textures/items/nugget_reiium.png deleted file mode 100644 index b6b8a5d3f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_reiium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_u238m2.png b/src/main/resources/assets/hbm/textures/items/nugget_u238m2.png deleted file mode 100644 index 95a04822b..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_u238m2.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_unobtainium.png b/src/main/resources/assets/hbm/textures/items/nugget_unobtainium.png deleted file mode 100644 index a4aa40b77..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_unobtainium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_verticium.png b/src/main/resources/assets/hbm/textures/items/nugget_verticium.png deleted file mode 100644 index c8f9333ec..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_verticium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/nugget_weidanium.png b/src/main/resources/assets/hbm/textures/items/nugget_weidanium.png deleted file mode 100644 index 86ad834db..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/nugget_weidanium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pellets_canister.png b/src/main/resources/assets/hbm/textures/items/pellets_canister.png deleted file mode 100644 index a443f38c3..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pellets_canister.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pellets_chlorophyte.png b/src/main/resources/assets/hbm/textures/items/pellets_chlorophyte.png deleted file mode 100644 index 6a5489d55..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pellets_chlorophyte.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pellets_claws.png b/src/main/resources/assets/hbm/textures/items/pellets_claws.png deleted file mode 100644 index 00dd97af9..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pellets_claws.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pellets_flechette.png b/src/main/resources/assets/hbm/textures/items/pellets_flechette.png deleted file mode 100644 index b0711e2ac..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pellets_flechette.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pill_salt.png b/src/main/resources/assets/hbm/textures/items/pill_salt.png deleted file mode 100644 index decab9dba..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pill_salt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pill_zinc.png b/src/main/resources/assets/hbm/textures/items/pill_zinc.png deleted file mode 100644 index d93286d73..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pill_zinc.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pipe_lead.png b/src/main/resources/assets/hbm/textures/items/pipe_lead.png index 830e00f3c..57e6c10a9 100644 Binary files a/src/main/resources/assets/hbm/textures/items/pipe_lead.png and b/src/main/resources/assets/hbm/textures/items/pipe_lead.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pirfenidone.png b/src/main/resources/assets/hbm/textures/items/pirfenidone.png deleted file mode 100644 index 9ab831d0f..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pirfenidone.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/powder_daffergon.png b/src/main/resources/assets/hbm/textures/items/powder_daffergon.png deleted file mode 100644 index f9afea212..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/powder_daffergon.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/powder_reiium.png b/src/main/resources/assets/hbm/textures/items/powder_reiium.png deleted file mode 100644 index 52bd800c8..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/powder_reiium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/powder_unobtainium.png b/src/main/resources/assets/hbm/textures/items/powder_unobtainium.png deleted file mode 100644 index 2f26e8148..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/powder_unobtainium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/powder_verticium.png b/src/main/resources/assets/hbm/textures/items/powder_verticium.png deleted file mode 100644 index 5346e7b44..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/powder_verticium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/powder_weidanium.png b/src/main/resources/assets/hbm/textures/items/powder_weidanium.png deleted file mode 100644 index cc7c044d1..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/powder_weidanium.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/ring_starmetal_alt.png b/src/main/resources/assets/hbm/textures/items/ring_starmetal_alt.png deleted file mode 100644 index ebdca2cc5..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/ring_starmetal_alt.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/singularity_2.png b/src/main/resources/assets/hbm/textures/items/singularity_2.png deleted file mode 100644 index be5b273d3..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/singularity_2.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/singularity_3.png b/src/main/resources/assets/hbm/textures/items/singularity_3.png deleted file mode 100644 index a171074f1..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/singularity_3.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/singularity_micro.png b/src/main/resources/assets/hbm/textures/items/singularity_micro.png deleted file mode 100644 index b1c9e4765..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/singularity_micro.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/singularity_spark.png b/src/main/resources/assets/hbm/textures/items/singularity_spark.png deleted file mode 100644 index c2e97f9a6..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/singularity_spark.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/singularity_special.png b/src/main/resources/assets/hbm/textures/items/singularity_special.png deleted file mode 100644 index 423f4544c..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/singularity_special.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/taurun_boots.png b/src/main/resources/assets/hbm/textures/items/taurun_boots.png new file mode 100644 index 000000000..228a5ca81 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/taurun_boots.png differ diff --git a/src/main/resources/assets/hbm/textures/items/taurun_helmet.png b/src/main/resources/assets/hbm/textures/items/taurun_helmet.png new file mode 100644 index 000000000..9c33872ac Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/taurun_helmet.png differ diff --git a/src/main/resources/assets/hbm/textures/items/taurun_legs.png b/src/main/resources/assets/hbm/textures/items/taurun_legs.png new file mode 100644 index 000000000..0be64f1d7 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/taurun_legs.png differ diff --git a/src/main/resources/assets/hbm/textures/items/taurun_plate.png b/src/main/resources/assets/hbm/textures/items/taurun_plate.png new file mode 100644 index 000000000..a235a28f8 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/taurun_plate.png differ