From 42f6778b86aded3b58c62713431b01ae6e23052c Mon Sep 17 00:00:00 2001 From: Vaern Date: Sat, 5 Mar 2022 11:45:05 -0800 Subject: [PATCH 01/31] aaaaaa i can't be bothered --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 + .../blocks/machine/CustomPartAssembler.java | 121 ++++++++++++++++++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../items/bomb/ItemCustomNukeComponent.java | 61 +++++++++ .../java/com/hbm/main/CraftingManager.java | 3 +- .../TileEntityCustomPartAssembler.java | 23 ++++ 6 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java create mode 100644 src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 8fde28704..85f8752fa 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -883,6 +883,8 @@ public class ModBlocks { public static Block machine_powerrtg; public static Block machine_radiolysis; + public static Block custom_part_assembler; + public static Block machine_well; public static Block oil_pipe; public static final int guiID_machine_well = 40; @@ -1815,6 +1817,8 @@ public class ModBlocks { machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); + custom_part_assembler = new CustomPartAssembler(Material.iron).setBlockName("custom_part_assembler").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); + red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); @@ -2860,6 +2864,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_bottom, machine_spp_bottom.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_top, machine_spp_top.getUnlocalizedName()); + GameRegistry.registerBlock(custom_part_assembler, custom_part_assembler.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating, hadron_plating.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating_blue, hadron_plating_blue.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java b/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java new file mode 100644 index 000000000..090f2eebe --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java @@ -0,0 +1,121 @@ +package com.hbm.blocks.machine; + +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityCustomPartAssembler; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class CustomPartAssembler extends BlockContainer { + + public CustomPartAssembler(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int type) { + return new TileEntityCustomPartAssembler(); + } + + @SideOnly(Side.CLIENT) + private IIcon iconTop; + private IIcon iconBottom; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":block_steel_machine"); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":block_steel"); + //this.blockIcon = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_side"); + //this.iconTop = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_top"); + this.iconBottom = reg.registerIcon(RefStrings.MODID + ":block_steel"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + + switch(side) { + case 0: + return iconBottom; + case 1: + return iconTop; + default: + return blockIcon; + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) { + return true; + } else if(!player.isSneaking()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } else { + return true; + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block b, int i) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof ISidedInventory) { + + ISidedInventory sidedinv = (ISidedInventory) te; + + if(sidedinv != null) { + for(int i1 = 0; i1 < sidedinv.getSizeInventory(); ++i1) { + ItemStack itemstack = sidedinv.getStackInSlot(i1); + + if(itemstack != null) { + float f = world.rand.nextFloat() * 0.8F + 0.1F; + float f1 = world.rand.nextFloat() * 0.8F + 0.1F; + float f2 = world.rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + int j1 = world.rand.nextInt(21) + 10; + + if(j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if(itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float) world.rand.nextGaussian() * f3; + entityitem.motionY = (float) world.rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) world.rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, b); + } + } + + super.breakBlock(world, x, y, z, b, i); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ca2ce4839..7a729d872 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1815,7 +1815,7 @@ public class ModItems { public static Item n2_charge; public static Item egg_balefire_shard; public static Item egg_balefire; - + public static Item custom_tnt; public static Item custom_nuke; public static Item custom_hydro; diff --git a/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java b/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java new file mode 100644 index 000000000..a55b21493 --- /dev/null +++ b/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java @@ -0,0 +1,61 @@ +package com.hbm.items.bomb; + +import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumBombType; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemCustomNukeComponent extends Item { + + //Use getItemDamage() for the boolean type + public void writeToNBT(ItemStack stack, EnumBombType stage, float value, float multiplier) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setByte("stage", (byte)stage.ordinal()); + stack.stackTagCompound.setFloat("value", value); + stack.stackTagCompound.setFloat("multiplier", multiplier); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + if(!world.isRemote) { + player.addChatComponentMessage(new ChatComponentText("eat this, you gay pony").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + } + + return stack; + } + + private IIcon secondaryIcon; + + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + + if(getHasSubtypes()) { + secondaryIcon = reg.registerIcon(this.getIconString() + ".secondary"); + } + } + + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + + if(meta == 1 && secondaryIcon != null) { + return this.secondaryIcon; + } else { + return this.itemIcon; + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 9a26dad9d..b20e373a0 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -270,7 +270,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.anvil_murky, 1), new Object[] { "UUU", "UAU", "UUU", 'U', ModItems.undefined, 'A', ModBlocks.anvil_steel }); addRecipeAuto(new ItemStack(ModBlocks.machine_fraction_tower), new Object[] { "SHS", "SGS", "SHS", 'S', STEEL.plate(), 'H', ModItems.hull_big_steel, 'G', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(ModBlocks.fraction_spacer), new Object[] { "BHB", 'H', ModItems.hull_big_steel, 'B', Blocks.iron_bars }); - + addRecipeAuto(new ItemStack(ModBlocks.custom_part_assembler), new Object[] { "HBH", "STD", "PCP", 'H', ModItems.coil_tungsten, 'B', ItemBattery.getFullBattery(ModItems.battery_advanced), 'S', ModItems.screwdriver, 'T', ModBlocks.machine_armor_table, 'D', ModItems.hand_drill, 'P', ModItems.plate_steel, 'C', ModItems.circuit_copper }); + addRecipeAuto(new ItemStack(ModBlocks.muffler, 1), new Object[] { "III", "IWI", "III", 'I', ModItems.plate_polymer, 'W', Blocks.wool }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 1), new Object[] { "PIP", "I I", "PIP", 'P', TI.plate(), 'I', TI.ingot() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java new file mode 100644 index 000000000..f44f015ac --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -0,0 +1,23 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityMachineBase; + +public class TileEntityCustomPartAssembler extends TileEntityMachineBase { + + public TileEntityCustomPartAssembler() { + super(13); //12 input, 1 output + } + + @Override + public String getName() { + return "container.customPartAssembler"; + } + + @Override + public void updateEntity() { + + } + + + +} From 9c0cc8080504804f24574347d05cf924ff1db62f Mon Sep 17 00:00:00 2001 From: Vaern Date: Wed, 9 Mar 2022 19:38:10 -0800 Subject: [PATCH 02/31] very, very preliminary recipe stuff --- .../inventory/recipes/CustomNukeRecipes.java | 56 +++++++++++++++++++ .../TileEntityCustomPartAssembler.java | 21 ++++++- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java diff --git a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java new file mode 100644 index 000000000..977617081 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java @@ -0,0 +1,56 @@ +package com.hbm.inventory.recipes; + +import java.util.HashMap; + +import com.hbm.inventory.OreDictManager; +import com.hbm.inventory.OreDictManager.DictFrame; + +public class CustomNukeRecipes { + + //a bit hacky, i'll probably just straight copy that system bob has yet to make + public static float getQuantity(String key) { + if(key.startsWith("nugget")) { + return 1; + } else if(key.startsWith("billet")) { + return 6; + } else if(key.startsWith("ingot")) { + return 9; + } else if(key.startsWith("block")) { + return 81; + } else { + return 0; + } + } + + private static boolean containsMatch(DictFrame frame, String key) { + String[] mats = frame.anys(); + + for(String mat : mats) { + if(mat.contains(key)) { + return true; + } + } + + return false; + } + + public static float nonPredetonatingFissile(String key) { + float multiplier = getQuantity(key); + if(multiplier == 0) { + return 0; + } + + if(containsMatch(OreDictManager.U233, key)) { + return 1.05f * multiplier; + } else if(containsMatch(OreDictManager.U235, key)) { + return 1.0f * multiplier; + } else if(containsMatch(OreDictManager.NP237, key)) { + return 0.95f * multiplier; + } else if(containsMatch(OreDictManager.SA326, key)) { + return 10.0f * multiplier; + } + + return 0; + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java index f44f015ac..e9508d324 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -2,8 +2,12 @@ package com.hbm.tileentity.machine; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityCustomPartAssembler extends TileEntityMachineBase { +import net.minecraft.item.ItemStack; +public class TileEntityCustomPartAssembler extends TileEntityMachineBase { + + private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + public TileEntityCustomPartAssembler() { super(13); //12 input, 1 output } @@ -12,6 +16,21 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { public String getName() { return "container.customPartAssembler"; } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return i <= 11; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return slot_io; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 12; + } @Override public void updateEntity() { From a7fd72f76fc4796db6c1f9e6866b5d30edc1ea01 Mon Sep 17 00:00:00 2001 From: Vaern Date: Thu, 10 Mar 2022 17:10:37 -0800 Subject: [PATCH 03/31] Preliminary stuff gonna have to make a gui and do packet fuckery for this, shouldn't be too hard --- .../com/hbm/inventory/OreDictManager.java | 6 ++- .../inventory/recipes/CustomNukeRecipes.java | 23 ++++++++++- .../TileEntityCustomPartAssembler.java | 38 ++++++++++++++++--- 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index e7378d2cf..994771b2c 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -490,7 +490,11 @@ public class OreDictManager { public DictFrame(String... mats) { this.mats = mats; } - + + public String[] getMaterials() { + return this.mats; + } + /* * Quick access methods to grab ore names for recipes. */ diff --git a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java index 977617081..1994dc23b 100644 --- a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java @@ -22,8 +22,29 @@ public class CustomNukeRecipes { } } + /** + * Checks if the OreDict key fits the material, but not the form + * @param frame DictFrame + * @param key Input key + */ private static boolean containsMatch(DictFrame frame, String key) { - String[] mats = frame.anys(); + String[] mats = frame.getMaterials(); + + for(String mat : mats) { + if(key.contains(mat)) { + return true; + } + } + + return false; + } + + /** + * Checks if the OreDict key fits the material and the form thereof. + * @param mats Ore names + * @param key Input key + */ + private static boolean containsMatch(String[] mats, String key) { for(String mat : mats) { if(mat.contains(key)) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java index e9508d324..60073a416 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java @@ -3,13 +3,18 @@ package com.hbm.tileentity.machine; import com.hbm.tileentity.TileEntityMachineBase; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; public class TileEntityCustomPartAssembler extends TileEntityMachineBase { - private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + //Save the item and the mode for automation purposes + public byte item; + public byte mode; + + private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; public TileEntityCustomPartAssembler() { - super(13); //12 input, 1 output + super(17); //16 input, 1 output } @Override @@ -19,7 +24,7 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - return i <= 11; + return i <= 15; } @Override @@ -29,14 +34,35 @@ public class TileEntityCustomPartAssembler extends TileEntityMachineBase { @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { - return i == 12; + return i == 16; } - + @Override public void updateEntity() { - + /* + * String troll = "trolling"; + * + * System.Console.WriteLine($"We do a little bit of {troll}!"); + */ } + @Override + public boolean canUpdate() { + return false; + } + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + item = nbt.getByte("item"); + mode = nbt.getByte("mode"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("item", item); + nbt.setByte("mode", mode); + } } From c47072ab1d984f0e60cb1bb381d9da354087eddc Mon Sep 17 00:00:00 2001 From: Vaern Date: Fri, 18 Mar 2022 19:22:05 -0700 Subject: [PATCH 04/31] Revert "Merge remote-tracking branch 'origin/master'" This reverts commit e62144b627398e8e2fa39be3d686ee963fa631c1. --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 - .../blocks/machine/CustomPartAssembler.java | 121 ------------------ .../com/hbm/inventory/OreDictManager.java | 6 +- .../inventory/recipes/CustomNukeRecipes.java | 77 ----------- src/main/java/com/hbm/items/ModItems.java | 2 +- .../items/bomb/ItemCustomNukeComponent.java | 61 --------- .../java/com/hbm/main/CraftingManager.java | 3 +- .../TileEntityCustomPartAssembler.java | 68 ---------- 8 files changed, 3 insertions(+), 340 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java delete mode 100644 src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java delete mode 100644 src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index df6586940..aee4890f9 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -888,8 +888,6 @@ public class ModBlocks { public static Block machine_powerrtg; public static Block machine_radiolysis; - public static Block custom_part_assembler; - public static Block machine_well; public static Block oil_pipe; public static final int guiID_machine_well = 40; @@ -1827,8 +1825,6 @@ public class ModBlocks { machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); - custom_part_assembler = new CustomPartAssembler(Material.iron).setBlockName("custom_part_assembler").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); - red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); @@ -2880,7 +2876,6 @@ public class ModBlocks { GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_bottom, machine_spp_bottom.getUnlocalizedName()); GameRegistry.registerBlock(machine_spp_top, machine_spp_top.getUnlocalizedName()); - GameRegistry.registerBlock(custom_part_assembler, custom_part_assembler.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating, hadron_plating.getUnlocalizedName()); GameRegistry.registerBlock(hadron_plating_blue, hadron_plating_blue.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java b/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java deleted file mode 100644 index 090f2eebe..000000000 --- a/src/main/java/com/hbm/blocks/machine/CustomPartAssembler.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.hbm.blocks.machine; - -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.machine.TileEntityCustomPartAssembler; - -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -public class CustomPartAssembler extends BlockContainer { - - public CustomPartAssembler(Material mat) { - super(mat); - } - - @Override - public TileEntity createNewTileEntity(World world, int type) { - return new TileEntityCustomPartAssembler(); - } - - @SideOnly(Side.CLIENT) - private IIcon iconTop; - private IIcon iconBottom; - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - this.blockIcon = reg.registerIcon(RefStrings.MODID + ":block_steel_machine"); - this.iconTop = reg.registerIcon(RefStrings.MODID + ":block_steel"); - //this.blockIcon = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_side"); - //this.iconTop = reg.registerIcon(RefStrings.MODID + ":custom_part_assembler_top"); - this.iconBottom = reg.registerIcon(RefStrings.MODID + ":block_steel"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int metadata) { - - switch(side) { - case 0: - return iconBottom; - case 1: - return iconTop; - default: - return blockIcon; - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { - return true; - } else if(!player.isSneaking()) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - return true; - } else { - return true; - } - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block b, int i) { - - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof ISidedInventory) { - - ISidedInventory sidedinv = (ISidedInventory) te; - - if(sidedinv != null) { - for(int i1 = 0; i1 < sidedinv.getSizeInventory(); ++i1) { - ItemStack itemstack = sidedinv.getStackInSlot(i1); - - if(itemstack != null) { - float f = world.rand.nextFloat() * 0.8F + 0.1F; - float f1 = world.rand.nextFloat() * 0.8F + 0.1F; - float f2 = world.rand.nextFloat() * 0.8F + 0.1F; - - while(itemstack.stackSize > 0) { - int j1 = world.rand.nextInt(21) + 10; - - if(j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if(itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) world.rand.nextGaussian() * f3; - entityitem.motionY = (float) world.rand.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) world.rand.nextGaussian() * f3; - world.spawnEntityInWorld(entityitem); - } - } - } - - world.func_147453_f(x, y, z, b); - } - } - - super.breakBlock(world, x, y, z, b, i); - } -} diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 25ad52d3b..e70a3fe3f 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -515,11 +515,7 @@ public class OreDictManager { public DictFrame(String... mats) { this.mats = mats; } - - public String[] getMaterials() { - return this.mats; - } - + /* * Quick access methods to grab ore names for recipes. */ diff --git a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java deleted file mode 100644 index 1994dc23b..000000000 --- a/src/main/java/com/hbm/inventory/recipes/CustomNukeRecipes.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.hbm.inventory.recipes; - -import java.util.HashMap; - -import com.hbm.inventory.OreDictManager; -import com.hbm.inventory.OreDictManager.DictFrame; - -public class CustomNukeRecipes { - - //a bit hacky, i'll probably just straight copy that system bob has yet to make - public static float getQuantity(String key) { - if(key.startsWith("nugget")) { - return 1; - } else if(key.startsWith("billet")) { - return 6; - } else if(key.startsWith("ingot")) { - return 9; - } else if(key.startsWith("block")) { - return 81; - } else { - return 0; - } - } - - /** - * Checks if the OreDict key fits the material, but not the form - * @param frame DictFrame - * @param key Input key - */ - private static boolean containsMatch(DictFrame frame, String key) { - String[] mats = frame.getMaterials(); - - for(String mat : mats) { - if(key.contains(mat)) { - return true; - } - } - - return false; - } - - /** - * Checks if the OreDict key fits the material and the form thereof. - * @param mats Ore names - * @param key Input key - */ - private static boolean containsMatch(String[] mats, String key) { - - for(String mat : mats) { - if(mat.contains(key)) { - return true; - } - } - - return false; - } - - public static float nonPredetonatingFissile(String key) { - float multiplier = getQuantity(key); - if(multiplier == 0) { - return 0; - } - - if(containsMatch(OreDictManager.U233, key)) { - return 1.05f * multiplier; - } else if(containsMatch(OreDictManager.U235, key)) { - return 1.0f * multiplier; - } else if(containsMatch(OreDictManager.NP237, key)) { - return 0.95f * multiplier; - } else if(containsMatch(OreDictManager.SA326, key)) { - return 10.0f * multiplier; - } - - return 0; - } - -} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d3d28ebd8..3960a4489 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1818,7 +1818,7 @@ public class ModItems { public static Item n2_charge; public static Item egg_balefire_shard; public static Item egg_balefire; - + public static Item custom_tnt; public static Item custom_nuke; public static Item custom_hydro; diff --git a/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java b/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java deleted file mode 100644 index a55b21493..000000000 --- a/src/main/java/com/hbm/items/bomb/ItemCustomNukeComponent.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.hbm.items.bomb; - -import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumBombType; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -public class ItemCustomNukeComponent extends Item { - - //Use getItemDamage() for the boolean type - public void writeToNBT(ItemStack stack, EnumBombType stage, float value, float multiplier) { - - if(!stack.hasTagCompound()) - stack.stackTagCompound = new NBTTagCompound(); - - stack.stackTagCompound.setByte("stage", (byte)stage.ordinal()); - stack.stackTagCompound.setFloat("value", value); - stack.stackTagCompound.setFloat("multiplier", multiplier); - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - - if(!world.isRemote) { - player.addChatComponentMessage(new ChatComponentText("eat this, you gay pony").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); - } - - return stack; - } - - private IIcon secondaryIcon; - - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister reg) { - super.registerIcons(reg); - - if(getHasSubtypes()) { - secondaryIcon = reg.registerIcon(this.getIconString() + ".secondary"); - } - } - - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int meta) { - - if(meta == 1 && secondaryIcon != null) { - return this.secondaryIcon; - } else { - return this.itemIcon; - } - } -} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index e936e4831..ab51cbad6 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -271,8 +271,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.anvil_murky, 1), new Object[] { "UUU", "UAU", "UUU", 'U', ModItems.undefined, 'A', ModBlocks.anvil_steel }); addRecipeAuto(new ItemStack(ModBlocks.machine_fraction_tower), new Object[] { "SHS", "SGS", "SHS", 'S', STEEL.plate(), 'H', ModItems.hull_big_steel, 'G', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(ModBlocks.fraction_spacer), new Object[] { "BHB", 'H', ModItems.hull_big_steel, 'B', Blocks.iron_bars }); - addRecipeAuto(new ItemStack(ModBlocks.custom_part_assembler), new Object[] { "HBH", "STD", "PCP", 'H', ModItems.coil_tungsten, 'B', ItemBattery.getFullBattery(ModItems.battery_advanced), 'S', ModItems.screwdriver, 'T', ModBlocks.machine_armor_table, 'D', ModItems.hand_drill, 'P', ModItems.plate_steel, 'C', ModItems.circuit_copper }); - + addRecipeAuto(new ItemStack(ModBlocks.muffler, 1), new Object[] { "III", "IWI", "III", 'I', ModItems.plate_polymer, 'W', Blocks.wool }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.factory_titanium_hull), 1), new Object[] { "PIP", "I I", "PIP", 'P', TI.plate(), 'I', TI.ingot() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java deleted file mode 100644 index 60073a416..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomPartAssembler.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.tileentity.TileEntityMachineBase; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class TileEntityCustomPartAssembler extends TileEntityMachineBase { - - //Save the item and the mode for automation purposes - public byte item; - public byte mode; - - private static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - - public TileEntityCustomPartAssembler() { - super(17); //16 input, 1 output - } - - @Override - public String getName() { - return "container.customPartAssembler"; - } - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemStack) { - return i <= 15; - } - - @Override - public int[] getAccessibleSlotsFromSide(int side) { - return slot_io; - } - - @Override - public boolean canExtractItem(int i, ItemStack itemStack, int j) { - return i == 16; - } - - @Override - public void updateEntity() { - /* - * String troll = "trolling"; - * - * System.Console.WriteLine($"We do a little bit of {troll}!"); - */ - } - - @Override - public boolean canUpdate() { - return false; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - item = nbt.getByte("item"); - mode = nbt.getByte("mode"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setByte("item", item); - nbt.setByte("mode", mode); - } - -} From c662895f8e13c7c4fa6caa7977bd0f3b7f6400dc Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 22 Mar 2022 14:48:02 +0100 Subject: [PATCH 05/31] implemented re-eval for power nets this should keep power nets intact when links (i.e. cables) are removed instead of outright destroying them they are re-calculated. this should keep unloaded and cached links intact which would otherwise not reconnect on their own. --- .../java/api/hbm/energy/IEnergyConductor.java | 79 +- src/main/java/api/hbm/energy/PowerNet.java | 36 +- .../java/api/hbm/fluid/IFluidConductor.java | 4 +- .../java/api/hbm/fluid/IFluidConnector.java | 53 + src/main/java/api/hbm/fluid/IFluidUser.java | 13 + src/main/java/api/hbm/fluid/IPipeNet.java | 23 +- src/main/java/api/hbm/fluid/PipeNet.java | 99 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + src/main/java/com/hbm/blocks/test/TestBB.java | 7 - .../java/com/hbm/blocks/test/TestPipe.java | 38 + .../com/hbm/handler/EntityEffectHandler.java | 15 +- src/main/java/com/hbm/main/MainRegistry.java | 2 - .../java/com/hbm/main/ModEventHandler.java | 12 + .../com/hbm/main/ModEventHandlerClient.java | 8 +- .../machine/TileEntityMachineMiningDrill.java | 2 +- .../network/TileEntityCableBaseNT.java | 3 +- .../network/TileEntityCableSwitch.java | 6 +- .../network/TileEntityPipeBaseNT.java | 96 + .../tileentity/network/TileEntityPylon.java | 32 +- .../network/TileEntityPylonBase.java | 11 +- .../network/TileEntitySubstation.java | 44 +- .../assets/hbm/models/armor/bismuth.obj | 3848 ++++++++--------- src/main/resources/assets/hbm/sounds.json | 32 +- 23 files changed, 2397 insertions(+), 2069 deletions(-) create mode 100644 src/main/java/api/hbm/fluid/IFluidUser.java create mode 100644 src/main/java/api/hbm/fluid/PipeNet.java create mode 100644 src/main/java/com/hbm/blocks/test/TestPipe.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index 154ccced3..84f9bbfad 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -1,6 +1,11 @@ package api.hbm.energy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; /** * For compatible cables with no buffer, using the IPowertNet. You can make your own cables with IEnergyConnector as well, but they won't join their power network. @@ -17,14 +22,76 @@ public interface IEnergyConductor extends IEnergyConnector { * @return */ public default int getIdentity() { - - TileEntity te = (TileEntity) this; - + return getIdentityFromTile((TileEntity) this); + } + + public static int getIdentityFromTile(TileEntity te) { + return getIdentityFromPos(te.xCoord, te.yCoord, te.zCoord); + } + + public static int getIdentityFromPos(int x, int y, int z) { final int prime = 31; int result = 1; - result = prime * result + te.xCoord; - result = prime * result + te.yCoord; - result = prime * result + te.zCoord; + result = prime * result + x; + result = prime * result + y; + result = prime * result + z; return result; } + + /** + * Whether the link should be part of reeval when the network is changed. + * I.e. if this link should join any of the new networks (FALSE for switches that are turned off for example) + * @return + */ + public default boolean canReevaluate() { + return !((TileEntity) this).isInvalid(); + } + + /** + * When a link leaves the network, the net has to manually calculate the resulting networks. + * Each link has to decide what other links will join the same net. + * @param copy + */ + public default void reevaluate(HashMap copy) { + + for(int[] pos : getConnectionPoints()) { + int newX = pos[0]; + int newY = pos[1]; + int newZ = pos[2]; + int id = IEnergyConductor.getIdentityFromPos(newX, newY, newZ); + + IEnergyConductor neighbor = copy.get(id); + + if(neighbor != null && neighbor.getPowerNet() != null && this.canReevaluate() && neighbor.canReevaluate()) { + + if(this.getPowerNet() == null) { + neighbor.getPowerNet().joinLink(this); + } else { + this.getPowerNet().joinNetworks(neighbor.getPowerNet()); + } + } + } + } + + /** + * Creates a list of positions for the reeval process. In short - what positions should be considered as connected. + * Also used by pylons to quickly figure out what positions to connect to. + * DEFAULT: Connects to all six neighboring blocks. + * @return + */ + public default List getConnectionPoints() { + + List pos = new ArrayList(); + TileEntity tile = (TileEntity) this; + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + int newX = tile.xCoord + dir.offsetX; + int newY = tile.yCoord + dir.offsetY; + int newZ = tile.zCoord + dir.offsetZ; + + pos.add(new int[] {newX, newY, newZ}); + } + + return pos; + } } diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 97af6d4b4..12012eb1e 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -1,6 +1,7 @@ package api.hbm.energy; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import net.minecraft.tileentity.TileEntity; @@ -13,7 +14,7 @@ import net.minecraft.tileentity.TileEntity; public class PowerNet implements IPowerNet { private boolean valid = true; - private List links = new ArrayList(); + private HashMap links = new HashMap(); private List subscribers = new ArrayList(); @Override @@ -23,8 +24,7 @@ public class PowerNet implements IPowerNet { return; //wtf?! for(IEnergyConductor conductor : network.getLinks()) { - conductor.setPowerNet(this); - this.getLinks().add(conductor); + joinLink(conductor); } network.getLinks().clear(); @@ -42,14 +42,14 @@ public class PowerNet implements IPowerNet { conductor.getPowerNet().leaveLink(conductor); conductor.setPowerNet(this); - this.getLinks().add(conductor); + this.links.put(conductor.getIdentity(), conductor); return this; } @Override public void leaveLink(IEnergyConductor conductor) { conductor.setPowerNet(null); - this.getLinks().remove(conductor); + this.links.remove(conductor.getIdentity()); } @Override @@ -69,7 +69,9 @@ public class PowerNet implements IPowerNet { @Override public List getLinks() { - return this.links; + List linkList = new ArrayList(); + linkList.addAll(this.links.values()); + return linkList; } @Override @@ -80,10 +82,9 @@ public class PowerNet implements IPowerNet { @Override public void destroy() { this.valid = false; - this.subscribers.clear(); - for(IEnergyConductor link : this.links) { + for(IEnergyConductor link : this.links.values()) { link.setPowerNet(null); } @@ -135,5 +136,22 @@ public class PowerNet implements IPowerNet { } @Override - public void reevaluate() { } + public void reevaluate() { + + HashMap copy = new HashMap(links); + + for(IEnergyConductor link : copy.values()) { + this.leaveLink(link); + } + + for(IEnergyConductor link : copy.values()) { + + link.setPowerNet(null); + link.reevaluate(copy); + + if(link.getPowerNet() == null) { + link.setPowerNet(new PowerNet().joinLink(link)); + } + } + } } diff --git a/src/main/java/api/hbm/fluid/IFluidConductor.java b/src/main/java/api/hbm/fluid/IFluidConductor.java index 152e9524e..6c8298a54 100644 --- a/src/main/java/api/hbm/fluid/IFluidConductor.java +++ b/src/main/java/api/hbm/fluid/IFluidConductor.java @@ -2,9 +2,9 @@ package api.hbm.fluid; import com.hbm.inventory.fluid.FluidType; -public interface IFluidConductor { +public interface IFluidConductor extends IFluidConnector { public IPipeNet getPipeNet(FluidType type); - public void setPipeNet(FluidType type, FluidType network); + public void setPipeNet(FluidType type, IPipeNet network); } diff --git a/src/main/java/api/hbm/fluid/IFluidConnector.java b/src/main/java/api/hbm/fluid/IFluidConnector.java index 3430cc739..dd8c2c4ab 100644 --- a/src/main/java/api/hbm/fluid/IFluidConnector.java +++ b/src/main/java/api/hbm/fluid/IFluidConnector.java @@ -1,7 +1,13 @@ package api.hbm.fluid; import com.hbm.inventory.fluid.FluidType; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public interface IFluidConnector { @@ -28,4 +34,51 @@ public interface IFluidConnector { * @return */ public int getDemand(FluidType type); + + /** + * Basic implementation of subscribing to a nearby power grid + * @param world + * @param x + * @param y + * @param z + */ + public default void trySubscribe(FluidType type, World world, int x, int y, int z, ForgeDirection dir) { + + TileEntity te = world.getTileEntity(x, y, z); + boolean red = false; + + if(te instanceof IFluidConductor) { + IFluidConductor con = (IFluidConductor) te; + + if(!con.canConnect(type, dir)) + return; + + if(con.getPipeNet(type) != null && !con.getPipeNet(type).isSubscribed(this)) + con.getPipeNet(type).subscribe(this); + + if(con.getPipeNet(type) != null) + red = true; + } + + if(particleDebug) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", red ? "reddust" : "bluedust"); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25)); + } + } + + public default void tryUnsubscribe(FluidType type, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof IFluidConductor) { + IFluidConductor con = (IFluidConductor) te; + + if(con.getPipeNet(type) != null && con.getPipeNet(type).isSubscribed(this)) + con.getPipeNet(type).unsubscribe(this); + } + } + + public static final boolean particleDebug = false; } diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java new file mode 100644 index 000000000..534380946 --- /dev/null +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -0,0 +1,13 @@ +package api.hbm.fluid; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public interface IFluidUser extends IFluidConnector { + + /*public default void updateStandardPipes(World world, int x, int y, int z) { + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + this.trySubscribe(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir); + }*/ +} diff --git a/src/main/java/api/hbm/fluid/IPipeNet.java b/src/main/java/api/hbm/fluid/IPipeNet.java index c0f20eae9..8571f16e9 100644 --- a/src/main/java/api/hbm/fluid/IPipeNet.java +++ b/src/main/java/api/hbm/fluid/IPipeNet.java @@ -1,8 +1,27 @@ package api.hbm.fluid; -import api.hbm.energy.IPowerNet; +import java.util.List; + +import com.hbm.inventory.fluid.FluidType; public interface IPipeNet { - public void joinNetworks(IPowerNet network); + public void joinNetworks(IPipeNet network); + + public List getLinks(); + public List getSubscribers(); + + public IPipeNet joinLink(IFluidConductor conductor); + public void leaveLink(IFluidConductor conductor); + + public void subscribe(IFluidConnector connector); + public void unsubscribe(IFluidConnector connector); + public boolean isSubscribed(IFluidConnector connector); + + public void destroy(); + + public boolean isValid(); + + public long transferFluid(long power); + public FluidType getType(); } diff --git a/src/main/java/api/hbm/fluid/PipeNet.java b/src/main/java/api/hbm/fluid/PipeNet.java new file mode 100644 index 000000000..6e15a06d0 --- /dev/null +++ b/src/main/java/api/hbm/fluid/PipeNet.java @@ -0,0 +1,99 @@ +package api.hbm.fluid; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.inventory.fluid.FluidType; + +public class PipeNet implements IPipeNet { + + private FluidType type; + private List links = new ArrayList(); + private List subscribers = new ArrayList(); + + public PipeNet(FluidType type) { + this.type = type; + } + + @Override + public void joinNetworks(IPipeNet network) { + + if(network == this) + return; + + for(IFluidConductor conductor : network.getLinks()) { + conductor.setPipeNet(type, this); + this.getLinks().add(conductor); + } + network.getLinks().clear(); + + for(IFluidConnector connector : network.getSubscribers()) { + this.subscribe(connector); + } + + network.destroy(); + } + + @Override + public List getLinks() { + return links; + } + + @Override + public List getSubscribers() { + return subscribers; + } + + @Override + public IPipeNet joinLink(IFluidConductor conductor) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void leaveLink(IFluidConductor conductor) { + // TODO Auto-generated method stub + + } + + @Override + public void subscribe(IFluidConnector connector) { + // TODO Auto-generated method stub + + } + + @Override + public void unsubscribe(IFluidConnector connector) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isSubscribed(IFluidConnector connector) { + // TODO Auto-generated method stub + return false; + } + + @Override + public long transferFluid(long power) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public FluidType getType() { + return type; + } + + @Override + public void destroy() { + // TODO Auto-generated method stub + + } + + @Override + public boolean isValid() { + // TODO Auto-generated method stub + return false; + } +} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1e1a89399..21c9a450d 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -50,6 +50,7 @@ public class ModBlocks { public static Block test_core; public static Block test_charge; public static Block test_conductor; + public static Block test_pipe; public static Block test_ct; public static Block test_rail; public static Block test_bb_bork; @@ -1252,6 +1253,7 @@ public class ModBlocks { test_core = new TestCore(Material.iron).setBlockName("test_core").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":test_core"); test_charge = new TestCharge(Material.iron).setBlockName("test_charge").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F); test_conductor = new TestConductor(Material.iron).setBlockName("test_conductor").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cable_neo"); + test_pipe = new TestPipe(Material.iron).setBlockName("test_pipe").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":pipe_neo"); test_ct = new TestCT(Material.iron).setBlockName("test_ct").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":test_ct"); test_rail = new TestRail(Material.iron).setBlockName("test_rail").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":test_rail"); test_bb_bork = new TestBB(Material.iron).setBlockName("test_bb_bork").setCreativeTab(null).setHardness(2.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":test_bb_bork"); @@ -2260,6 +2262,7 @@ public class ModBlocks { GameRegistry.registerBlock(test_core, test_core.getUnlocalizedName()); GameRegistry.registerBlock(test_charge, test_charge.getUnlocalizedName()); GameRegistry.registerBlock(test_conductor, test_conductor.getUnlocalizedName()); + GameRegistry.registerBlock(test_pipe, test_pipe.getUnlocalizedName()); GameRegistry.registerBlock(test_ct, test_ct.getUnlocalizedName()); GameRegistry.registerBlock(test_rail, test_rail.getUnlocalizedName()); GameRegistry.registerBlock(test_bb_bork, test_bb_bork.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/test/TestBB.java b/src/main/java/com/hbm/blocks/test/TestBB.java index 20d2bfa5c..573cc0804 100644 --- a/src/main/java/com/hbm/blocks/test/TestBB.java +++ b/src/main/java/com/hbm/blocks/test/TestBB.java @@ -1,7 +1,5 @@ package com.hbm.blocks.test; -import com.hbm.blocks.ModBlocks; - import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -9,10 +7,5 @@ public class TestBB extends Block { public TestBB(Material mat) { super(mat); - - if(this == ModBlocks.test_bb_bork) - this.setBlockBounds(-1000F, -1000F, -1000F, 1001F, 1001F, 1001F); - else - this.setBlockBounds(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY); } } diff --git a/src/main/java/com/hbm/blocks/test/TestPipe.java b/src/main/java/com/hbm/blocks/test/TestPipe.java new file mode 100644 index 000000000..7b5563a9c --- /dev/null +++ b/src/main/java/com/hbm/blocks/test/TestPipe.java @@ -0,0 +1,38 @@ +package com.hbm.blocks.test; + +import com.hbm.tileentity.network.TileEntityPipeBaseNT; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class TestPipe extends BlockContainer { + + public TestPipe(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityPipeBaseNT(); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 7354eeae9..c3cb37de1 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -441,7 +441,6 @@ public class EntityEffectHandler { ItemStack armorStack = player.inventory.armorInventory[armorSlot]; if(armorStack != null && armorStack.getItem() instanceof ItemArmor) { - ItemArmor armor = (ItemArmor)armorStack.getItem(); for(int modSlot = 0; modSlot < 8; modSlot++) { ItemStack mod = ArmorModHandler.pryMods(armorStack)[modSlot]; @@ -472,10 +471,18 @@ public class EntityEffectHandler { if(props.getDashCooldown() <= 0) { if(!player.capabilities.isFlying && player.isSneaking() && stamina >= perDash) { - - Vec3 lookingIn = player.getLookVec(); - player.addVelocity(lookingIn.xCoord, 0, lookingIn.zCoord); + Vec3 lookingIn = player.getLookVec(); + Vec3 strafeVec = player.getLookVec(); + strafeVec.rotateAroundY((float)Math.PI * 0.5F); + + int forward = (int) Math.signum(player.moveForward); + int strafe = (int) Math.signum(player.moveStrafing); + + if(forward == 0 && strafe == 0) + forward = 1; + + player.addVelocity(lookingIn.xCoord * forward + strafeVec.xCoord * strafe, 0, lookingIn.zCoord * forward + strafeVec.zCoord * strafe); player.playSound("hbm:player.dash", 1.0F, 1.0F); props.setDashCooldown(HbmPlayerProps.dashCooldownLength); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 54d82a424..26e7c2c1b 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -5,7 +5,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.dispenser.BehaviorProjectileDispense; import net.minecraft.dispenser.IPosition; import net.minecraft.entity.IProjectile; -import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; @@ -72,7 +71,6 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.rbmk.RBMKDials; import com.hbm.util.ArmorUtil; -import com.hbm.world.feature.OreLayer; import com.hbm.world.feature.SchistStratum; import com.hbm.world.generator.CellularDungeonFactory; diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 10d4ea820..4673e984f 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -62,6 +62,7 @@ import com.hbm.util.EntityDamageUtil; import com.hbm.world.WorldProviderNTM; import com.hbm.world.generator.TimedGenerator; +import api.hbm.energy.IEnergyConductor; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -1160,6 +1161,17 @@ public class ModEventHandler { } /// PU RADIATION END /// + + if(player instanceof EntityPlayerMP) { + + int x = (int) Math.floor(player.posX); + int y = (int) Math.floor(player.posY - 0.01); + int z = (int) Math.floor(player.posZ); + + if(player.worldObj.getTileEntity(x, y, z) instanceof IEnergyConductor) { + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(((IEnergyConductor) player.worldObj.getTileEntity(x, y, z)).getPowerNet() + ""), (EntityPlayerMP) player); + } + } /// NEW ITEM SYS START /// HazardSystem.updatePlayerInventory(player); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 4114ab191..bd4d894f2 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -59,6 +59,7 @@ import com.hbm.util.ArmorUtil; import com.hbm.util.ArmorRegistry.HazardClass; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import api.hbm.energy.IEnergyConductor; import api.hbm.item.IButtonReceiver; import api.hbm.item.IClickReceiver; @@ -245,13 +246,16 @@ public class ModEventHandlerClient { GL11.glEnable(GL11.GL_TEXTURE_2D); - } + } + + } + if(!event.isCanceled() && event.type == event.type.HOTBAR) { + HbmPlayerProps props = HbmPlayerProps.getData(player); if(props.getDashCount() > 0) { RenderScreenOverlay.renderDashBar(event.resolution, Minecraft.getMinecraft().ingameGUI, props); } - } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java index ccd1a6d5c..e7a56664b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningDrill.java @@ -291,7 +291,7 @@ public class TileEntityMachineMiningDrill extends TileEntityMachineBase implemen Block b = worldObj.getBlock(x, y, z); float hardness = b.getBlockHardness(worldObj, x, y, z); - return hardness < 70 && hardness >= 0; + return (hardness < 70 && hardness >= 0) || b instanceof IDrillInteraction; } /** diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java index a1095eaa9..63216f451 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCableBaseNT.java @@ -56,7 +56,8 @@ public class TileEntityCableBaseNT extends TileEntity implements IEnergyConducto if(!worldObj.isRemote) { if(this.network != null) { - this.network.destroy(); + this.network.reevaluate(); + this.network = null; } } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCableSwitch.java b/src/main/java/com/hbm/tileentity/network/TileEntityCableSwitch.java index b9e16c84d..e8a80f871 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCableSwitch.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCableSwitch.java @@ -14,7 +14,7 @@ public class TileEntityCableSwitch extends TileEntityCableBaseNT { //if the meta is 0 (OFF) and there is a net present, destroy and de-reference it. //that should be all, since the state being 0 also prevents the TE from updating and joining the new net. if(this.getBlockMetadata() == 0 && this.network != null) { - this.network.destroy(); + this.network.reevaluate(); this.network = null; } @@ -26,4 +26,8 @@ public class TileEntityCableSwitch extends TileEntityCableBaseNT { } } } + + public boolean canReevaluate() { + return super.canReevaluate() && this.getBlockMetadata() == 1; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java new file mode 100644 index 000000000..c55922b77 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -0,0 +1,96 @@ +package com.hbm.tileentity.network; + +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; + +import api.hbm.fluid.IFluidConductor; +import api.hbm.fluid.IPipeNet; +import api.hbm.fluid.PipeNet; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor { + + private IPipeNet network; + protected FluidType type = Fluids.NONE; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote && canUpdate()) { + + //we got here either because the net doesn't exist or because it's not valid, so that's safe to assume + this.setPipeNet(type, null); + + this.connect(); + + if(this.getPipeNet(type) == null) { + this.setPipeNet(type, new PipeNet(type).joinLink(this)); + } + } + } + + protected void connect() { + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + + TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + + if(te instanceof IFluidConductor) { + + IFluidConductor conductor = (IFluidConductor) te; + + if(!conductor.canConnect(type, dir.getOpposite())) + continue; + + if(this.getPipeNet(type) == null && conductor.getPipeNet(type) != null) { + conductor.getPipeNet(type).joinLink(this); + } + + if(this.getPipeNet(type) != null && conductor.getPipeNet(type) != null && this.getPipeNet(type) != conductor.getPipeNet(type)) { + conductor.getPipeNet(type).joinNetworks(this.getPipeNet(type)); + } + } + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.network != null) { + this.network.destroy(); + } + } + } + + /** + * Only update until a power net is formed, in >99% of the cases it should be the first tick. Everything else is handled by neighbors and the net itself. + */ + @Override + public boolean canUpdate() { + return (this.network == null || !this.network.isValid()) && !this.isInvalid(); + } + + @Override + public int transferFluid(FluidType type, int fluid) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getDemand(FluidType type) { + return 0; + } + + @Override + public IPipeNet getPipeNet(FluidType type) { + return type == this.type ? this.network : null; + } + + @Override + public void setPipeNet(FluidType type, IPipeNet network) { + this.network = network; + } +} diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java index 6a63f4003..3dde2245e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java @@ -1,7 +1,8 @@ package com.hbm.tileentity.network; -import api.hbm.energy.IEnergyConductor; -import net.minecraft.tileentity.TileEntity; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; @@ -23,31 +24,12 @@ public class TileEntityPylon extends TileEntityPylonBase { } @Override - protected void connect() { - - /* - * Apparently super.super does not exist, and the mentally damaged folk from heckoverflow pretend like that's a good thing. - * Look at this shit, you think that's good? "Write Everything Twice"? You like that, huh? - */ + public List getConnectionPoints() { + List pos = new ArrayList(connected); for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - - TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); - - if(te instanceof IEnergyConductor) { - - IEnergyConductor conductor = (IEnergyConductor) te; - - if(this.getPowerNet() == null && conductor.getPowerNet() != null) { - conductor.getPowerNet().joinLink(this); - } - - if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) { - conductor.getPowerNet().joinNetworks(this.getPowerNet()); - } - } + pos.add(new int[] {xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ}); } - - super.connect(); + return pos; } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPylonBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityPylonBase.java index bee551249..c55fe51d7 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPylonBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPylonBase.java @@ -46,8 +46,8 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT { connected.add(new int[] {x, y, z}); if(this.getPowerNet() != null) { - this.getPowerNet().destroy(); - this.setPowerNet(null); + this.getPowerNet().reevaluate(); + this.network = null; } this.markDirty(); @@ -92,7 +92,7 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT { @Override protected void connect() { - for(int[] pos : connected) { + for(int[] pos : getConnectionPoints()) { TileEntity te = worldObj.getTileEntity(pos[0], pos[1], pos[2]); @@ -111,6 +111,11 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT { } } + @Override + public List getConnectionPoints() { + return new ArrayList(connected); + } + public abstract ConnectionType getConnectionType(); public abstract Vec3[] getMountPos(); public abstract double getMaxWireLength(); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java b/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java index b40a7179e..bcb29c5e0 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java @@ -1,9 +1,10 @@ package com.hbm.tileentity.network; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; -import api.hbm.energy.IEnergyConductor; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; public class TileEntitySubstation extends TileEntityPylonBase { @@ -45,33 +46,16 @@ public class TileEntitySubstation extends TileEntityPylonBase { } @Override - protected void connect() { - - manageNets(worldObj.getTileEntity(xCoord + 2, yCoord, zCoord - 1)); - manageNets(worldObj.getTileEntity(xCoord + 2, yCoord, zCoord + 1)); - manageNets(worldObj.getTileEntity(xCoord - 2, yCoord, zCoord - 1)); - manageNets(worldObj.getTileEntity(xCoord - 2, yCoord, zCoord + 1)); - manageNets(worldObj.getTileEntity(xCoord - 1, yCoord, zCoord + 2)); - manageNets(worldObj.getTileEntity(xCoord + 1, yCoord, zCoord + 2)); - manageNets(worldObj.getTileEntity(xCoord - 1, yCoord, zCoord - 2)); - manageNets(worldObj.getTileEntity(xCoord + 1, yCoord, zCoord - 2)); - - super.connect(); - } - - private void manageNets(TileEntity te) { - - if(te instanceof IEnergyConductor) { - - IEnergyConductor conductor = (IEnergyConductor) te; - - if(this.getPowerNet() == null && conductor.getPowerNet() != null) { - conductor.getPowerNet().joinLink(this); - } - - if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) { - conductor.getPowerNet().joinNetworks(this.getPowerNet()); - } - } + public List getConnectionPoints() { + List pos = new ArrayList(connected); + pos.add(new int[] {xCoord + 2, yCoord, zCoord - 1}); + pos.add(new int[] {xCoord + 2, yCoord, zCoord + 1}); + pos.add(new int[] {xCoord - 2, yCoord, zCoord - 1}); + pos.add(new int[] {xCoord - 2, yCoord, zCoord + 1}); + pos.add(new int[] {xCoord - 1, yCoord, zCoord + 2}); + pos.add(new int[] {xCoord + 1, yCoord, zCoord + 2}); + pos.add(new int[] {xCoord - 1, yCoord, zCoord - 2}); + pos.add(new int[] {xCoord + 1, yCoord, zCoord - 2}); + return pos; } } diff --git a/src/main/resources/assets/hbm/models/armor/bismuth.obj b/src/main/resources/assets/hbm/models/armor/bismuth.obj index d07f664f0..f81faca67 100644 --- a/src/main/resources/assets/hbm/models/armor/bismuth.obj +++ b/src/main/resources/assets/hbm/models/armor/bismuth.obj @@ -1,218 +1,408 @@ -# Blender v2.79 (sub 0) OBJ File: 'bismuth_armor.blend' +# Blender v2.79 (sub 0) OBJ File: '' # www.blender.org -mtllib bismuth.mtl -o RightFoot -v -4.141729 24.067028 2.136320 -v 0.124961 24.067026 2.136320 -v -4.141729 24.067028 -2.130370 -v -4.141729 22.765120 -2.130370 -v 0.124961 24.067026 -2.130370 -v 0.124961 22.765116 -2.130370 -v -2.008385 21.575682 -3.487657 -v -2.008384 24.067026 -3.487657 -vt 0.144578 0.823529 -vt 0.180723 0.941176 -vt 0.144578 0.941176 -vt 0.048193 0.941176 -vt 0.144578 0.941176 -vt 0.096386 0.970588 -vt 0.048193 0.941176 -vt 0.012048 0.941176 -vt 0.048193 0.823529 -vt 0.144578 1.000000 -vt 0.048193 1.000000 -vt 0.000000 1.000000 -vt 0.096386 0.970588 -vt 0.192771 1.000000 -vn 1.0000 -0.0000 0.0000 -vn -0.0000 -0.7521 0.6591 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.5368 -0.0000 -0.8437 -vn -0.5368 0.0000 -0.8437 -usemtl None -s off -f 2/1/1 6/2/1 5/3/1 -f 6/4/2 4/5/2 7/6/2 -f 3/7/3 4/8/3 1/9/3 -f 5/3/4 1/9/4 2/1/4 -f 6/2/5 8/10/5 5/3/5 -f 4/8/6 8/11/6 7/12/6 -f 3/7/4 5/3/4 8/13/4 -f 5/3/4 3/7/4 1/9/4 -f 6/2/5 7/14/5 8/10/5 -f 4/8/6 3/7/6 8/11/6 -o RightArm -v -3.868196 -1.385486 2.089541 -v -3.868194 2.482796 2.089541 -v -6.727931 -1.385484 2.089541 -v -6.727929 2.482797 2.089541 -v -3.868196 -1.385486 -2.083592 -v -3.868194 2.482796 -2.083592 -v -6.727931 -1.385484 -2.083592 -v -6.727929 2.482797 -2.083592 -v -5.583236 4.039337 2.089541 -v -8.419424 4.039339 2.089541 -v -8.419426 0.171058 2.089541 -v -8.419426 0.171058 -2.083591 -v -8.419424 4.039339 -2.083591 -v -5.583236 4.039337 -2.083592 -v -5.721349 -2.606914 1.081455 -v -4.874778 -2.606915 1.081455 -v -4.874778 -2.606915 -1.075505 -v -5.721349 -2.606914 -1.075505 -v -9.559078 0.957293 1.081455 -v -9.559078 0.957293 -1.075505 -v -9.559076 3.253101 -1.075505 -v -9.559076 3.253101 1.081455 -v -8.000977 -1.823888 -1.075505 -v -8.631191 -1.243954 -1.075505 -v -8.631191 -1.243954 1.081455 -v -8.000977 -1.823888 1.081455 -v -4.496462 -2.606915 1.567900 -v -6.099665 -2.606914 1.567900 -v -4.496462 -2.606915 -1.561950 -v -6.099665 -2.606914 -1.561950 -v -9.559078 0.439535 -1.561950 -v -9.559078 0.439535 1.567900 -v -9.559076 3.770859 -1.561950 -v -9.559076 3.770859 1.567900 -v -8.950394 -0.950218 -1.561950 -v -7.681774 -2.117624 -1.561950 -v -8.950394 -0.950218 1.567900 -v -7.681774 -2.117624 1.567900 -v -5.721350 -4.274494 1.081455 -v -4.874779 -4.274494 1.081455 -v -4.874779 -4.274494 -1.075505 -v -5.721350 -4.274494 -1.075505 -v -11.115009 0.957294 1.081455 -v -11.115009 0.957294 -1.075505 -v -11.115007 3.253102 -1.075505 -v -11.115007 3.253102 1.081455 -v -9.014559 -3.089092 -1.075505 -v -9.644773 -2.509160 -1.075505 -v -9.644773 -2.509159 1.081455 -v -9.014559 -3.089093 1.081455 -v -6.110137 7.776291 1.993027 -v -6.110137 7.592242 2.319573 -v -6.110137 7.399228 1.993027 -v -5.221390 7.408160 1.993027 -v -5.351533 7.278018 2.319573 -v -5.488015 7.141536 1.993027 -v -4.853261 6.519414 1.993027 -v -5.037309 6.519414 2.319573 -v -5.230323 6.519414 1.993027 -v -5.221392 5.630669 1.993027 -v -5.351534 5.760811 2.319573 -v -5.488016 5.897292 1.993027 -v -6.110137 5.262538 1.993027 -v -6.110137 5.446588 2.319573 -v -6.110137 5.639601 1.993027 -v -6.998883 5.630669 1.993027 -v -6.868741 5.760811 2.319573 -v -6.732259 5.897293 1.993027 -v -7.367013 6.519414 1.993027 -v -7.182964 6.519414 2.319573 -v -6.989950 6.519414 1.993027 -v -6.998883 7.408160 1.993027 -v -6.868741 7.278018 2.319573 -v -6.732259 7.141537 1.993027 -v -8.033747 6.630578 -2.020720 -v -8.033749 6.394355 -2.020720 -v -3.986356 6.630577 -2.020720 -v -3.986357 6.394354 -2.020720 -v -8.033747 6.917206 2.026670 -v -8.033749 6.107728 2.026670 -v -3.986357 6.917205 2.026670 -v -3.986358 6.107727 2.026670 -v -7.099485 6.917206 2.026670 -v -5.142802 6.107728 2.026670 -v -7.099486 6.107728 2.026670 -v -5.142801 6.917206 2.026670 -vt 0.058610 0.440457 +o Body +v -0.010055 8.739575 -1.996005 +v 0.755152 6.975003 -1.996005 +v -0.010056 6.975003 -2.761213 +v -0.775265 6.975004 -1.996004 +v -0.010057 5.273831 -1.996004 +v 2.354269 3.663156 -2.018208 +v 1.989216 4.604462 -2.018208 +v 2.600215 4.054568 -2.018208 +v -4.533662 -0.309302 -2.018208 +v -4.982747 -0.020212 -2.018208 +v -4.488976 -0.014130 -2.018208 +v 4.770588 -0.229360 -2.018208 +v 5.125850 0.166797 -2.018208 +v 5.277726 -0.258708 -2.018208 +v -2.749345 3.180070 -2.018208 +v -2.520314 4.106030 -2.018208 +v -2.266752 3.709597 -2.018208 +v 1.222840 4.547728 -2.018208 +v 1.802872 4.159407 -2.018208 +v 4.633528 0.154637 -2.018208 +v 4.882992 0.713097 -2.018208 +v -3.186286 2.606869 -2.018208 +v -3.055072 3.519263 -2.018208 +v 0.621810 4.797125 -2.018208 +v 1.346485 5.034757 -2.018208 +v 4.414360 0.647646 -2.018208 +v 4.557615 1.345852 -2.018208 +v -3.571939 2.015710 -2.018208 +v -3.539243 2.884101 -2.018208 +v 0.007423 4.876606 -2.018208 +v 0.680488 5.311113 -2.018208 +v 4.120724 1.218675 -2.018208 +v 4.158184 2.030718 -2.018208 +v -3.900671 1.432314 -2.018208 +v -3.966585 2.229043 -2.018208 +v -0.674968 5.290979 -2.018208 +v -0.000312 5.399186 -2.018208 +v 3.760257 1.836732 -2.018208 +v 3.693165 2.733354 -2.018209 +v -4.166844 0.882396 -2.018208 +v -4.330851 1.582583 -2.018208 +v -0.601421 4.778955 -2.018208 +v -1.324017 5.020385 -2.018208 +v 3.340600 2.470827 -2.018208 +v 3.171020 3.419418 -2.018208 +v -4.364824 0.391676 -2.018208 +v -4.625796 0.973223 -2.018208 +v -1.744144 4.169732 -2.018208 +v -1.187155 4.534758 -2.018208 +v 2.869391 3.089965 -2.018208 +v -4.845176 0.429459 -2.018208 +v 4.817903 -0.473352 -2.018208 +v 5.330154 -0.529075 -2.018208 +v -1.941214 4.615903 -2.018208 +v -5.032264 -0.347291 -2.018208 +v -0.010054 11.098518 2.124614 +v 4.198537 14.357351 2.124615 +v -0.010052 14.471598 2.124615 +v 4.198535 11.132282 2.124614 +v 4.198536 12.932452 -2.118665 +v -0.010054 11.832909 -2.118665 +v -4.218642 12.932457 -2.118665 +v -0.010053 13.633080 -2.118665 +v -4.218643 11.132286 2.124614 +v -4.218641 14.357357 2.124615 +v 4.198535 11.132282 -2.118665 +v -4.218643 11.132286 -2.118664 +v -2.084779 16.857933 -2.060404 +v 1.337637 12.947863 -2.060404 +v -1.357744 12.947865 -2.060404 +v 2.064677 16.857931 -2.060404 +vt 0.144578 0.617647 +vt 0.096386 0.558824 +vt 0.144578 0.529412 +vt 0.192771 0.558824 +vt 0.192771 0.558824 +vt 0.144578 0.617647 +vt 0.096386 0.558824 +vt 0.325301 0.617647 +vt 0.303449 0.588235 +vt 0.325301 0.588235 +vt 0.626506 0.588235 +vt 0.590361 0.617647 +vt 0.590361 0.588235 +vt 0.590361 0.617647 +vt 0.554217 0.588235 +vt 0.590361 0.588235 +vt 0.373494 0.588235 +vt 0.337349 0.617647 +vt 0.337349 0.588235 +vt 0.265680 0.617647 +vt 0.303449 0.617647 +vt 0.554217 0.617647 +vt 0.518072 0.588235 +vt 0.409639 0.588235 +vt 0.373494 0.617647 +vt 0.228916 0.617647 +vt 0.265680 0.588235 +vt 0.518072 0.617647 +vt 0.481928 0.588235 +vt 0.445783 0.588235 +vt 0.409639 0.617647 +vt 0.192771 0.617647 +vt 0.228916 0.588235 +vt 0.481928 0.617647 +vt 0.445783 0.588235 +vt 0.481928 0.588235 +vt 0.445783 0.617647 +vt 0.192771 0.588235 +vt 0.228916 0.617647 +vt 0.192771 0.617647 +vt 0.445783 0.617647 +vt 0.409639 0.588235 +vt 0.518072 0.588235 +vt 0.481928 0.617647 +vt 0.228916 0.588235 +vt 0.265060 0.617647 +vt 0.409639 0.617647 +vt 0.373494 0.588235 +vt 0.554217 0.588235 +vt 0.518072 0.617647 +vt 0.301205 0.588235 +vt 0.265060 0.588235 +vt 0.373494 0.617647 +vt 0.554217 0.617647 +vt 0.626506 0.617647 +vt 0.626506 0.588235 +vt 0.301205 0.617647 +vt 0.626506 0.617647 +vt 0.192771 0.588235 +vt 0.289157 0.735294 +vt 0.192771 0.632353 +vt 0.289157 0.632353 +vt 0.192771 0.735294 +vt 0.096386 0.676471 +vt 0.578313 0.735294 +vt 0.481928 0.676471 +vt 0.578313 0.676471 +vt 0.385542 0.735294 +vt 0.385542 0.632353 +vt 0.000000 0.735294 +vt 0.000000 0.676471 +vt 0.096386 0.735294 +vt 0.481928 0.735294 vt 0.000000 0.441176 +vt 0.080123 0.556041 +vt 0.016262 0.556041 +vt 0.096386 0.441176 +vn 0.6760 0.2932 -0.6760 +vn -0.6760 0.2932 -0.6760 +vn 0.6738 -0.3031 -0.6738 +vn -0.6738 -0.3031 -0.6738 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vn 0.6152 -0.0000 0.7884 +vn 0.7053 -0.0000 0.7089 +vn 0.7374 -0.0000 -0.6755 +vn -0.7374 0.0000 -0.6755 +vn -0.7053 0.0000 0.7089 +vn -0.6152 0.0000 0.7884 +vn 0.7452 -0.0000 -0.6669 +vn -0.7452 0.0000 -0.6669 +s off +f 1/1/1 2/2/1 3/3/1 +f 1/1/2 3/3/2 4/4/2 +f 3/3/3 2/5/3 5/6/3 +f 4/7/4 3/3/4 5/6/4 +f 6/8/5 7/9/5 8/10/5 +f 9/11/5 10/12/5 11/13/5 +f 12/14/5 13/15/5 14/16/5 +f 15/17/5 16/18/5 17/19/5 +f 18/20/5 7/9/5 19/21/5 +f 20/22/5 21/23/5 13/15/5 +f 22/24/5 23/25/5 15/17/5 +f 24/26/5 25/27/5 18/20/5 +f 26/28/5 27/29/5 21/23/5 +f 28/30/5 29/31/5 22/24/5 +f 30/32/5 31/33/5 24/26/5 +f 32/34/5 33/35/5 27/29/5 +f 34/36/5 35/37/5 28/30/5 +f 30/38/5 36/39/5 37/40/5 +f 38/41/5 39/42/5 33/35/5 +f 40/43/5 41/44/5 34/36/5 +f 42/45/5 43/46/5 36/39/5 +f 44/47/5 45/48/5 39/42/5 +f 46/49/5 47/50/5 40/43/5 +f 48/51/5 43/46/5 49/52/5 +f 50/53/5 8/10/5 45/48/5 +f 11/13/5 51/54/5 46/49/5 +f 52/55/5 14/16/5 53/56/5 +f 17/19/5 54/57/5 48/51/5 +f 6/8/5 19/21/5 7/9/5 +f 9/11/5 55/58/5 10/12/5 +f 12/14/5 20/22/5 13/15/5 +f 15/17/5 23/25/5 16/18/5 +f 18/20/5 25/27/5 7/9/5 +f 20/22/5 26/28/5 21/23/5 +f 22/24/5 29/31/5 23/25/5 +f 24/26/5 31/33/5 25/27/5 +f 26/28/5 32/34/5 27/29/5 +f 28/30/5 35/37/5 29/31/5 +f 30/32/5 37/59/5 31/33/5 +f 32/34/5 38/41/5 33/35/5 +f 34/36/5 41/44/5 35/37/5 +f 30/38/5 42/45/5 36/39/5 +f 38/41/5 44/47/5 39/42/5 +f 40/43/5 47/50/5 41/44/5 +f 42/45/5 49/52/5 43/46/5 +f 44/47/5 50/53/5 45/48/5 +f 46/49/5 51/54/5 47/50/5 +f 48/51/5 54/57/5 43/46/5 +f 50/53/5 6/8/5 8/10/5 +f 11/13/5 10/12/5 51/54/5 +f 52/55/5 12/14/5 14/16/5 +f 17/19/5 16/18/5 54/57/5 +s 1 +f 56/60/6 57/61/7 58/62/6 +f 59/63/8 60/64/9 57/61/7 +f 61/65/5 62/66/10 63/67/5 +f 62/66/10 64/68/11 65/69/12 +f 60/64/9 61/70/5 63/71/5 +f 65/69/12 56/60/6 58/62/6 +f 56/60/6 59/63/8 57/61/7 +f 59/63/8 66/72/13 60/64/9 +f 61/65/5 67/73/14 62/66/10 +f 62/66/10 67/73/14 64/68/11 +f 60/64/9 66/72/13 61/70/5 +f 65/69/12 64/68/11 56/60/6 +s off +f 68/74/5 69/75/5 70/76/5 +f 68/74/5 71/77/5 69/75/5 +o LeftArm +v 6.707815 -1.385498 2.089541 +v 3.848082 2.482785 2.089541 +v 3.848080 -1.385496 2.089541 +v 3.848080 -1.385496 -2.083592 +v 6.707817 2.482783 -2.083592 +v 6.707815 -1.385498 -2.083592 +v 6.707817 2.482783 2.089541 +v 5.563126 4.039324 2.089541 +v 8.399311 0.171042 2.089541 +v 5.563126 4.039324 -2.083592 +v 3.848082 2.482785 -2.083592 +v 8.399311 0.171042 -2.083592 +v 4.854660 -4.274506 1.081455 +v 5.701231 -4.274506 -1.075505 +v 5.701231 -4.274506 1.081455 +v 5.701231 -2.606927 1.081455 +v 4.854661 -2.606926 1.081455 +v 4.854660 -4.274506 -1.075505 +v 4.854661 -2.606926 -1.075505 +v 5.701231 -2.606927 -1.075505 +v 11.094896 0.957275 -1.075506 +v 11.094898 3.253083 1.081455 +v 11.094896 0.957275 1.081455 +v 9.538965 0.957276 1.081455 +v 9.538965 0.957276 -1.075506 +v 11.094898 3.253083 -1.075506 +v 9.538967 3.253084 -1.075506 +v 9.538967 3.253084 1.081455 +v 9.624655 -2.509177 -1.075506 +v 8.994442 -3.089109 1.081455 +v 8.994442 -3.089109 -1.075506 +v 8.611074 -1.243971 -1.075506 +v 7.980860 -1.823903 -1.075506 +v 9.624655 -2.509176 1.081455 +v 8.611074 -1.243970 1.081455 +v 7.980860 -1.823903 1.081455 +v 8.399313 4.039323 2.089541 +v 8.399313 4.039323 -2.083592 +v 4.476345 -2.606926 1.567900 +v 4.476345 -2.606926 -1.561950 +v 6.079547 -2.606927 -1.561950 +v 6.079547 -2.606927 1.567900 +v 9.538965 0.439518 -1.561950 +v 9.538967 3.770842 -1.561950 +v 9.538967 3.770842 1.567899 +v 7.661656 -2.117639 -1.561950 +v 8.930279 -0.950234 1.567900 +v 7.661656 -2.117639 1.567900 +v 9.538965 0.439518 1.567899 +v 8.930279 -0.950234 -1.561950 +v 5.889863 7.776278 1.993027 +v 6.648466 7.278004 2.319573 +v 6.778609 7.408146 1.993027 +v 5.889863 7.592228 2.319573 +v 6.511984 7.141523 1.993027 +v 6.962690 6.519400 2.319573 +v 7.146739 6.519400 1.993027 +v 6.769676 6.519400 1.993027 +v 6.778607 5.630654 1.993027 +v 6.648465 5.760797 2.319573 +v 5.889862 5.262525 1.993027 +v 6.511983 5.897279 1.993027 +v 5.889862 5.446574 2.319573 +v 5.131258 5.760798 2.319573 +v 5.001116 5.630656 1.993027 +v 5.267740 5.897280 1.993027 +v 4.817035 6.519403 2.319573 +v 4.632987 6.519403 1.993027 +v 5.010049 6.519402 1.993027 +v 5.001116 7.408147 1.993027 +v 5.131258 7.278005 2.319573 +v 5.267740 7.141523 1.993027 +v 8.013643 6.630563 -2.020720 +v 3.966251 6.394344 -2.020720 +v 3.966252 6.630567 -2.020720 +v 8.013641 6.107713 2.026670 +v 8.013641 6.394340 -2.020720 +v 4.900514 6.917193 2.026670 +v 3.966251 6.107717 2.026670 +v 4.900513 6.107715 2.026670 +v 3.966252 6.917194 2.026670 +v 8.013641 6.917191 2.026670 +v 6.857197 6.107714 2.026670 +v 5.889863 7.399215 1.993027 +v 5.889862 5.639588 1.993027 +v 6.857198 6.917192 2.026670 +vt 0.058610 0.440457 vt 0.000000 0.338235 vt 0.000000 0.441176 +vt 0.000000 0.441176 +vt 0.060241 0.335919 vt 0.058533 0.440018 -vt 0.060241 0.337540 -vt 0.060241 0.337540 +vt 0.060241 0.335919 vt 0.035980 0.295068 vt 0.096386 0.397059 vt 0.035955 0.295044 vt 0.000000 0.338235 vt 0.096386 0.397059 vt 0.132530 0.455882 -vt 0.132530 0.485294 vt 0.180723 0.485294 -vt 0.096386 0.455882 +vt 0.132530 0.485294 vt 0.096386 0.485294 +vt 0.096386 0.455882 vt 0.180723 0.455882 -vt 0.180723 0.411765 vt 0.132530 0.411765 -vt 0.216867 0.485294 +vt 0.180723 0.411765 vt 0.216867 0.455882 -vt 0.132530 0.529412 +vt 0.216867 0.485294 vt 0.180723 0.529412 +vt 0.132530 0.529412 vt 0.180723 0.308824 -vt 0.132530 0.308824 vt 0.132530 0.367647 -vt 0.180723 0.264706 +vt 0.132530 0.308824 vt 0.132530 0.264706 +vt 0.180723 0.264706 vt 0.180723 0.367647 -vt 0.216867 0.367647 vt 0.216867 0.308824 -vt 0.132530 0.411765 +vt 0.216867 0.367647 vt 0.180723 0.411765 -vt 0.096386 0.308824 +vt 0.132530 0.411765 vt 0.096386 0.367647 +vt 0.096386 0.308824 vt 0.253012 0.455882 -vt 0.253012 0.485294 vt 0.301205 0.485294 +vt 0.253012 0.485294 vt 0.216867 0.455882 vt 0.216867 0.485294 vt 0.301205 0.455882 -vt 0.301205 0.411765 vt 0.253012 0.411765 +vt 0.301205 0.411765 vt 0.337349 0.485294 vt 0.337349 0.455882 -vt 0.253012 0.529412 vt 0.301205 0.529412 +vt 0.253012 0.529412 vt 0.096386 0.294118 vt 0.096386 0.294118 vt 0.084337 0.132353 -vt 0.108434 0.132353 vt 0.108434 0.088235 +vt 0.108434 0.132353 vt 0.024096 0.132353 -vt 0.024096 0.161765 vt 0.084337 0.161765 +vt 0.024096 0.161765 vt 0.024096 0.088235 -vt 0.000000 0.088235 vt 0.000000 0.132353 +vt 0.000000 0.088235 vt 0.084337 0.088235 -vt 0.084337 0.058824 vt 0.024096 0.058824 +vt 0.084337 0.058824 vt 0.084337 0.191176 -vt 0.084337 0.161765 vt 0.024096 0.161765 +vt 0.084337 0.161765 vt 0.084337 0.264706 -vt 0.108434 0.264706 vt 0.108434 0.191176 +vt 0.108434 0.264706 vt 0.024096 0.264706 -vt 0.024096 0.294118 vt 0.084337 0.294118 +vt 0.024096 0.294118 vt -0.000000 0.191176 vt 0.000000 0.264706 vt 0.000000 0.088235 -vt 0.000000 0.132353 vt 0.024096 0.132353 +vt 0.000000 0.132353 vt 0.084337 0.088235 -vt 0.084337 0.058824 vt 0.024096 0.058824 +vt 0.084337 0.058824 vt 0.084337 0.132353 -vt 0.108434 0.132353 vt 0.108434 0.088235 -vt 0.024096 0.161765 +vt 0.108434 0.132353 vt 0.084337 0.161765 +vt 0.024096 0.161765 vt 0.072289 0.102941 vt 0.072289 0.117647 vt 0.036145 0.117647 @@ -223,297 +413,296 @@ vt 0.072289 0.250000 vt 0.036145 0.250000 vt 0.024096 0.191176 vt 0.036145 0.117647 -vt 0.036145 0.102941 vt 0.024096 0.088235 +vt 0.036145 0.102941 vt 0.072289 0.102941 vt 0.072289 0.117647 vt 0.192771 0.794118 -vt 0.192771 0.764706 vt 0.144578 0.764706 -vt 0.180723 0.735294 -vt 0.156627 0.735294 vt 0.144578 0.794118 +vt 0.192771 0.764706 +vt 0.156627 0.735294 vt 0.096386 0.764706 -vt 0.132530 0.735294 +vt 0.096386 0.794118 vt 0.108434 0.735294 vt 0.048193 0.794118 -vt 0.096386 0.794118 -vt 0.048193 0.764706 vt 0.084337 0.735294 +vt 0.048193 0.764706 vt 0.000000 0.794118 -vt 0.000000 0.764706 vt 0.036145 0.735294 +vt 0.000000 0.764706 vt 0.385542 0.794118 -vt 0.385542 0.764706 vt 0.337349 0.764706 -vt 0.373494 0.735294 -vt 0.349398 0.735294 vt 0.337349 0.794118 +vt 0.385542 0.764706 +vt 0.349398 0.735294 vt 0.289157 0.764706 -vt 0.325301 0.735294 +vt 0.289157 0.794118 vt 0.301205 0.735294 vt 0.240964 0.794118 -vt 0.289157 0.794118 -vt 0.240964 0.764706 vt 0.277108 0.735294 +vt 0.240964 0.764706 vt 0.228916 0.735294 +vt 0.120482 0.823529 vt 0.072289 0.794118 vt 0.072289 0.823529 -vt 0.120482 0.823529 -vt 0.120482 0.794118 -vt 0.168675 0.823529 -vt 0.000000 0.794118 -vt 0.000000 0.823529 -vt 0.024096 0.823529 -vt 0.024096 0.794118 vt 0.168675 0.794118 -vt 0.192771 0.823529 +vt 0.120482 0.794118 +vt 0.000000 0.823529 +vt 0.024096 0.794118 +vt 0.000000 0.794118 +vt 0.024096 0.823529 +vt 0.168675 0.823529 +vt 0.192771 0.794118 +vt 0.180723 0.735294 +vt 0.132530 0.735294 vt 0.060241 0.735294 vt 0.012048 0.735294 +vt 0.373494 0.735294 +vt 0.325301 0.735294 vt 0.253012 0.735294 vt 0.204819 0.735294 -vt 0.192771 0.794118 -vn 0.0000 0.0000 1.0000 +vt 0.192771 0.823529 +vn -0.0000 0.0000 1.0000 vn 0.0000 0.0000 -1.0000 -vn -0.0000 -1.0000 0.0000 -vn 1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 -vn -0.6771 -0.7359 -0.0000 -vn -0.7804 0.6252 0.0000 -vn 0.7804 -0.6252 0.0000 -vn 0.4181 -0.7891 0.4500 -vn 0.3590 -0.3328 0.8720 -vn -0.1412 -0.4385 0.8876 -vn 0.4181 -0.7891 -0.4500 -vn 0.3590 -0.3328 -0.8720 -vn -0.4181 -0.7891 -0.4500 -vn -0.1412 -0.4385 -0.8876 +vn 0.6771 -0.7359 0.0000 +vn 0.7804 0.6252 -0.0000 +vn -0.7804 -0.6252 0.0000 vn -0.4181 -0.7891 0.4500 -vn -0.7388 -0.5169 -0.4324 -vn -0.4205 -0.1879 -0.8876 -vn -0.4205 -0.1879 0.8876 -vn -0.7388 0.5169 -0.4324 -vn -0.2648 0.3576 -0.8955 -vn -0.7388 0.5169 0.4324 -vn -0.2648 0.3576 0.8955 -vn -0.0911 -0.8948 -0.4370 -vn -0.8699 -0.2238 0.4395 -vn -0.0911 -0.8948 0.4370 -vn -0.3015 -0.9045 0.3015 +vn 0.1412 -0.4385 0.8876 +vn -0.3589 -0.3328 0.8720 +vn -0.4181 -0.7891 -0.4500 +vn -0.3590 -0.3328 -0.8720 +vn 0.4181 -0.7891 -0.4500 +vn 0.1412 -0.4385 -0.8876 +vn 0.4181 -0.7891 0.4500 +vn 0.7388 -0.5169 -0.4324 +vn 0.4205 -0.1879 0.8876 +vn 0.4205 -0.1879 -0.8876 +vn 0.7389 0.5169 -0.4324 +vn 0.2649 0.3576 -0.8955 +vn 0.7388 0.5169 0.4324 +vn 0.2648 0.3576 0.8955 +vn 0.0911 -0.8948 -0.4370 +vn 0.8699 -0.2238 0.4396 +vn 0.0911 -0.8948 0.4370 vn 0.3015 -0.9045 0.3015 -vn 0.3015 -0.9045 -0.3015 +vn -0.3015 -0.9045 0.3015 vn -0.3015 -0.9045 -0.3015 -vn -0.9045 -0.3015 0.3015 -vn -0.9045 -0.3015 -0.3015 -vn -0.9045 0.3015 -0.3015 -vn -0.9045 0.3015 0.3015 -vn -0.7388 -0.5169 0.4324 -vn -0.3828 -0.8668 -0.3193 -vn -0.8355 -0.4702 -0.2842 -vn -0.8699 -0.2238 -0.4395 -vn -0.8355 -0.4702 0.2842 -vn -0.3828 -0.8668 0.3193 +vn 0.3015 -0.9045 -0.3015 +vn 0.9045 -0.3015 0.3015 +vn 0.9045 -0.3015 -0.3015 +vn 0.9045 0.3015 -0.3015 +vn 0.9045 0.3015 0.3015 +vn 0.7388 -0.5169 0.4324 +vn 0.3828 -0.8669 -0.3193 +vn 0.8699 -0.2238 -0.4396 +vn 0.8355 -0.4702 -0.2842 +vn 0.8355 -0.4702 0.2842 +vn 0.3828 -0.8669 0.3193 vn 0.0000 0.8712 0.4910 -vn 0.0000 0.2171 0.9761 -vn 0.1535 0.1535 0.9761 -vn 0.0000 -0.8608 0.5088 -vn -0.6087 -0.6087 0.5088 +vn 0.1535 0.1535 0.9762 vn 0.6160 0.6160 0.4910 -vn 0.2171 0.0000 0.9761 -vn -0.8608 0.0000 0.5088 +vn -0.0000 0.2171 0.9762 +vn -0.6087 -0.6087 0.5088 +vn 0.2171 -0.0000 0.9762 +vn 0.8712 -0.0000 0.4910 +vn -0.8609 0.0000 0.5088 vn 0.6160 -0.6160 0.4910 -vn 0.8712 0.0000 0.4910 -vn 0.1535 -0.1535 0.9761 +vn 0.1535 -0.1535 0.9762 vn 0.0000 -0.8712 0.4910 -vn 0.0000 -0.2171 0.9761 vn -0.6087 0.6087 0.5088 -vn -0.1535 -0.1535 0.9761 -vn 0.0000 0.8608 0.5088 -vn 0.6087 0.6087 0.5088 +vn 0.0000 -0.2171 0.9762 +vn -0.1535 -0.1535 0.9762 vn -0.6160 -0.6160 0.4910 -vn -0.2171 0.0000 0.9761 -vn 0.8608 0.0000 0.5088 -vn -0.6160 0.6160 0.4910 +vn 0.6087 0.6087 0.5088 +vn -0.2171 -0.0000 0.9762 vn -0.8712 0.0000 0.4910 -vn -0.1535 0.1535 0.9761 +vn 0.8609 0.0000 0.5088 +vn -0.6160 0.6160 0.4910 +vn -0.1535 0.1535 0.9762 vn 0.6087 -0.6087 0.5088 +vn 0.7225 -0.0000 -0.6914 vn -0.7225 0.0000 -0.6914 -vn 0.7225 0.0000 -0.6914 -vn 0.6906 0.0000 0.7232 +vn 0.6906 -0.0000 0.7232 vn -0.6906 0.0000 0.7232 -usemtl None +vn -0.0000 -0.8609 0.5088 +vn 0.0000 0.8609 0.5088 s off -f 11/15/7 9/16/7 10/17/7 -f 13/18/8 15/19/8 16/20/8 -f 12/21/7 10/17/7 17/22/7 -f 19/23/7 11/15/7 12/21/7 -f 22/24/8 14/25/8 16/20/8 -f 16/20/8 15/19/8 20/26/8 -f 48/27/9 47/28/9 50/29/9 -f 48/27/7 24/30/7 23/31/7 -f 49/32/10 25/33/10 24/34/10 -f 50/29/8 26/35/8 25/36/8 -f 47/28/11 23/37/11 26/38/11 -f 52/39/11 51/40/11 54/41/11 -f 52/39/9 28/42/9 27/43/9 -f 53/44/8 29/45/8 28/46/8 -f 54/41/12 30/47/12 29/48/12 -f 51/40/7 27/49/7 30/50/7 -f 56/51/13 55/52/13 58/53/13 -f 32/54/8 31/55/8 55/52/8 -f 57/56/14 33/57/14 32/58/14 -f 34/59/7 33/60/7 57/56/7 -f 55/52/15 31/61/15 34/62/15 -f 11/15/7 10/17/7 12/21/7 -f 13/18/8 16/20/8 14/25/8 -f 12/21/7 17/22/7 18/63/7 -f 19/23/7 12/21/7 18/63/7 -f 22/24/8 16/20/8 21/64/8 -f 16/20/8 20/26/8 21/64/8 -f 48/27/9 50/29/9 49/32/9 -f 48/27/7 23/31/7 47/28/7 -f 49/32/10 24/34/10 48/27/10 -f 50/29/8 25/36/8 49/32/8 -f 47/28/11 26/38/11 50/29/11 -f 52/39/11 54/41/11 53/44/11 -f 52/39/9 27/43/9 51/40/9 -f 53/44/8 28/46/8 52/39/8 -f 54/41/12 29/48/12 53/44/12 -f 51/40/7 30/50/7 54/41/7 -f 56/51/13 58/53/13 57/56/13 -f 32/54/8 55/52/8 56/51/8 -f 57/56/14 32/58/14 56/51/14 -f 34/59/7 57/56/7 58/53/7 -f 55/52/15 34/62/15 58/53/15 +f 72/78/15 73/79/15 74/80/15 +f 75/81/16 76/82/16 77/83/16 +f 78/84/15 79/85/15 73/79/15 +f 80/86/15 78/84/15 72/78/15 +f 81/87/16 76/82/16 82/88/16 +f 76/82/16 83/89/16 77/83/16 +f 84/90/17 85/91/17 86/92/17 +f 84/90/15 87/93/15 88/94/15 +f 89/95/18 88/96/18 90/97/18 +f 85/91/16 90/98/16 91/99/16 +f 86/92/19 91/100/19 87/101/19 +f 92/102/19 93/103/19 94/104/19 +f 92/102/17 95/105/17 96/106/17 +f 97/107/16 96/108/16 98/109/16 +f 93/103/20 98/110/20 99/111/20 +f 94/104/15 99/112/15 95/113/15 +f 100/114/21 101/115/21 102/116/21 +f 103/117/16 102/116/16 104/118/16 +f 105/119/22 103/120/22 106/121/22 +f 107/122/15 105/119/15 106/123/15 +f 102/116/23 107/124/23 104/125/23 +f 72/78/15 78/84/15 73/79/15 +f 75/81/16 82/88/16 76/82/16 +f 78/84/15 108/126/15 79/85/15 +f 80/86/15 108/126/15 78/84/15 +f 81/87/16 109/127/16 76/82/16 +f 76/82/16 109/127/16 83/89/16 +f 84/90/17 89/95/17 85/91/17 +f 84/90/15 86/92/15 87/93/15 +f 89/95/18 84/90/18 88/96/18 +f 85/91/16 89/95/16 90/98/16 +f 86/92/19 85/91/19 91/100/19 +f 92/102/19 97/107/19 93/103/19 +f 92/102/17 94/104/17 95/105/17 +f 97/107/16 92/102/16 96/108/16 +f 93/103/20 97/107/20 98/110/20 +f 94/104/15 93/103/15 99/112/15 +f 100/114/21 105/119/21 101/115/21 +f 103/117/16 100/114/16 102/116/16 +f 105/119/22 100/114/22 103/120/22 +f 107/122/15 101/115/15 105/119/15 +f 102/116/23 101/115/23 107/124/23 s 1 -f 35/65/16 9/66/17 11/67/18 -f 37/68/19 13/69/20 9/70/17 -f 38/71/21 15/72/22 13/73/20 -f 36/74/23 11/75/18 15/76/22 -f 39/77/24 20/78/25 19/79/26 -f 41/80/27 21/81/28 20/82/25 -f 42/83/29 18/84/30 21/85/28 -f 19/86/26 18/87/30 42/83/29 -f 20/88/25 15/89/22 44/90/31 -f 45/91/32 19/92/26 20/93/25 -f 46/94/33 11/95/18 19/96/26 -f 44/90/31 15/97/22 11/98/18 -f 23/99/34 24/100/35 35/65/16 -f 24/100/35 25/101/36 37/68/19 -f 26/102/37 38/71/21 37/68/19 -f 26/102/37 23/99/34 36/74/23 -f 27/103/38 28/104/39 39/77/24 -f 28/104/39 29/105/40 41/80/27 -f 29/105/40 30/106/41 42/83/29 -f 30/106/41 27/103/38 40/107/42 -f 31/108/43 32/109/44 43/110/45 -f 32/109/44 33/111/46 45/91/32 -f 34/112/47 46/94/33 45/91/32 -f 31/108/43 44/90/31 46/94/33 -f 59/113/48 60/114/49 63/115/50 -f 60/114/49 61/116/51 64/117/52 -f 62/118/53 63/115/50 66/119/54 -f 63/115/50 64/120/52 67/121/55 -f 68/122/56 65/123/57 66/119/54 -f 69/124/58 66/119/54 67/125/55 -f 71/126/59 68/122/56 69/124/58 -f 72/127/60 69/124/58 70/128/61 -f 71/129/59 72/130/60 75/131/62 -f 72/130/60 73/132/63 76/133/64 -f 74/134/65 75/131/62 78/135/66 -f 75/131/62 76/136/64 79/137/67 -f 80/138/68 77/139/69 78/135/66 -f 81/140/70 78/135/66 79/141/67 -f 59/113/48 80/138/68 81/140/70 -f 60/114/49 81/140/70 82/142/71 -f 84/143/72 83/144/72 85/145/73 -f 86/146/73 85/145/73 89/147/74 -f 93/148/7 91/149/7 87/150/75 -f 88/151/75 87/150/75 83/144/72 -f 90/152/74 89/147/74 94/153/7 -f 35/65/16 11/67/18 36/74/23 -f 37/68/19 9/70/17 35/65/16 -f 38/71/21 13/73/20 37/68/19 -f 36/74/23 15/76/22 38/71/21 -f 39/77/24 19/79/26 40/107/42 -f 41/80/27 20/82/25 39/77/24 -f 42/83/29 21/85/28 41/80/27 -f 19/86/26 42/83/29 40/107/42 -f 20/88/25 44/90/31 43/110/45 -f 45/91/32 20/93/25 43/110/45 -f 46/94/33 19/96/26 45/91/32 -f 44/90/31 11/98/18 46/94/33 -f 23/99/34 35/65/16 36/74/23 -f 24/100/35 37/68/19 35/65/16 -f 26/102/37 37/68/19 25/101/36 -f 26/102/37 36/74/23 38/71/21 -f 27/103/38 39/77/24 40/107/42 -f 28/104/39 41/80/27 39/77/24 -f 29/105/40 42/83/29 41/80/27 -f 30/106/41 40/107/42 42/83/29 -f 31/108/43 43/110/45 44/90/31 -f 32/109/44 45/91/32 43/110/45 -f 34/112/47 45/91/32 33/111/46 -f 31/108/43 46/94/33 34/112/47 -f 59/113/48 63/115/50 62/118/53 -f 60/114/49 64/117/52 63/115/50 -f 62/118/53 66/119/54 65/123/57 -f 63/115/50 67/121/55 66/119/54 -f 68/122/56 66/119/54 69/124/58 -f 69/124/58 67/125/55 70/154/61 -f 71/126/59 69/124/58 72/127/60 -f 72/127/60 70/128/61 73/155/63 -f 71/129/59 75/131/62 74/134/65 -f 72/130/60 76/133/64 75/131/62 -f 74/134/65 78/135/66 77/139/69 -f 75/131/62 79/137/67 78/135/66 -f 80/138/68 78/135/66 81/140/70 -f 81/140/70 79/141/67 82/156/71 -f 59/113/48 81/140/70 60/114/49 -f 60/114/49 82/142/71 61/157/51 -f 84/143/72 85/145/73 86/146/73 -f 86/146/73 89/147/74 90/152/74 -f 93/148/7 87/150/75 88/151/75 -f 88/151/75 83/144/72 84/143/72 -f 90/152/74 94/153/7 92/158/7 -o RightLeg -v -2.110140 19.857271 -1.987077 -v -2.110140 19.673222 -2.313623 -v -2.110140 19.480209 -1.987077 -v -1.221394 19.489141 -1.987077 -v -1.351537 19.358999 -2.313623 -v -1.488018 19.222517 -1.987077 -v -0.853264 18.600395 -1.987077 -v -1.037313 18.600395 -2.313623 -v -1.230327 18.600395 -1.987077 -v -1.221395 17.711649 -1.987077 -v -1.351537 17.841791 -2.313623 -v -1.488018 17.978273 -1.987077 -v -2.110140 17.343519 -1.987077 -v -2.110140 17.527569 -2.313623 -v -2.110140 17.720581 -1.987077 -v -2.998886 17.711649 -1.987077 -v -2.868743 17.841791 -2.313623 -v -2.732262 17.978273 -1.987077 -v -3.367016 18.600395 -1.987077 -v -3.182967 18.600395 -2.313623 -v -2.989954 18.600395 -1.987077 -v -2.998886 19.489140 -1.987077 -v -2.868744 19.358997 -2.313623 -v -2.732262 19.222517 -1.987077 -v -4.033751 18.711559 2.026670 -v -4.033751 18.475336 2.026670 -v 0.013640 18.711559 2.026670 -v 0.013640 18.475336 2.026670 -v -4.033751 18.998186 -2.020720 -v -4.033751 18.188709 -2.020720 -v 0.013639 18.998186 -2.020720 -v 0.013639 18.188707 -2.020720 -v -3.099488 18.998186 -2.020720 -v -1.142804 18.188707 -2.020720 -v -3.099488 18.188709 -2.020720 -v -1.142804 18.998186 -2.020720 +f 110/128/24 72/129/25 74/130/26 +f 111/131/27 74/132/26 75/133/28 +f 112/134/29 75/135/28 77/136/30 +f 113/137/31 77/138/30 72/139/25 +f 114/140/32 80/141/33 83/142/34 +f 115/143/35 83/144/34 109/145/36 +f 116/146/37 109/147/36 108/148/38 +f 80/149/33 116/146/37 108/150/38 +f 83/151/34 117/152/39 77/153/30 +f 118/154/40 83/155/34 80/156/33 +f 119/157/41 80/158/33 72/159/25 +f 117/152/39 72/160/25 77/161/30 +f 87/162/42 110/128/24 88/163/43 +f 88/163/43 111/131/27 90/164/44 +f 91/165/45 111/131/27 112/134/29 +f 91/165/45 113/137/31 87/162/42 +f 95/166/46 114/140/32 96/167/47 +f 96/167/47 115/143/35 98/168/48 +f 98/168/48 116/146/37 99/169/49 +f 99/169/49 120/170/50 95/166/46 +f 104/171/51 121/172/52 103/173/53 +f 103/173/53 118/154/40 106/174/54 +f 107/175/55 118/154/40 119/157/41 +f 104/171/51 119/157/41 117/152/39 +f 122/176/56 123/177/57 124/178/58 +f 125/179/59 126/180/60 123/177/57 +f 124/178/58 127/181/61 128/182/62 +f 123/177/57 129/183/63 127/181/61 +f 127/181/61 130/184/64 128/182/62 +f 129/185/63 131/186/65 127/181/61 +f 131/186/65 132/187/66 130/184/64 +f 133/188/67 134/189/68 131/186/65 +f 132/190/66 135/191/69 136/192/70 +f 134/193/68 137/194/71 135/191/69 +f 136/192/70 138/195/72 139/196/73 +f 135/191/69 140/197/74 138/195/72 +f 138/195/72 141/198/75 139/196/73 +f 140/199/74 142/200/76 138/195/72 +f 142/200/76 122/176/56 141/198/75 +f 143/201/77 125/179/59 142/200/76 +f 144/202/78 145/203/79 146/204/79 +f 144/202/78 147/205/80 148/206/78 +f 149/207/15 150/208/81 151/209/15 +f 146/204/79 150/208/81 152/210/81 +f 153/211/80 154/212/15 147/205/80 +f 110/128/24 113/137/31 72/129/25 +f 111/131/27 110/128/24 74/132/26 +f 112/134/29 111/131/27 75/135/28 +f 113/137/31 112/134/29 77/138/30 +f 114/140/32 120/170/50 80/141/33 +f 115/143/35 114/140/32 83/144/34 +f 116/146/37 115/143/35 109/147/36 +f 80/149/33 120/170/50 116/146/37 +f 83/151/34 121/172/52 117/152/39 +f 118/154/40 121/172/52 83/155/34 +f 119/157/41 118/154/40 80/158/33 +f 117/152/39 119/157/41 72/160/25 +f 87/162/42 113/137/31 110/128/24 +f 88/163/43 110/128/24 111/131/27 +f 91/165/45 90/164/44 111/131/27 +f 91/165/45 112/134/29 113/137/31 +f 95/166/46 120/170/50 114/140/32 +f 96/167/47 114/140/32 115/143/35 +f 98/168/48 115/143/35 116/146/37 +f 99/169/49 116/146/37 120/170/50 +f 104/171/51 117/152/39 121/172/52 +f 103/173/53 121/172/52 118/154/40 +f 107/175/55 106/174/54 118/154/40 +f 104/171/51 107/175/55 119/157/41 +f 122/176/56 125/179/59 123/177/57 +f 125/179/59 155/213/82 126/180/60 +f 124/178/58 123/177/57 127/181/61 +f 123/177/57 126/214/60 129/183/63 +f 127/181/61 131/186/65 130/184/64 +f 129/185/63 133/215/67 131/186/65 +f 131/186/65 134/189/68 132/187/66 +f 133/188/67 156/216/83 134/189/68 +f 132/190/66 134/193/68 135/191/69 +f 134/193/68 156/217/83 137/194/71 +f 136/192/70 135/191/69 138/195/72 +f 135/191/69 137/218/71 140/197/74 +f 138/195/72 142/200/76 141/198/75 +f 140/199/74 143/219/77 142/200/76 +f 142/200/76 125/179/59 122/176/56 +f 143/201/77 155/220/82 125/179/59 +f 144/202/78 148/206/78 145/203/79 +f 144/202/78 153/211/80 147/205/80 +f 149/207/15 152/210/81 150/208/81 +f 146/204/79 145/203/79 150/208/81 +f 153/211/80 157/221/15 154/212/15 +o LeftLeg +v 2.778606 19.489141 -1.987076 +v 1.889860 19.673222 -2.313623 +v 1.889860 19.857271 -1.987076 +v 2.648463 19.358999 -2.313623 +v 1.889860 19.480209 -1.987077 +v 3.146736 18.600395 -1.987077 +v 2.962687 18.600395 -2.313623 +v 2.511982 19.222517 -1.987076 +v 2.778605 17.711649 -1.987077 +v 2.648463 17.841791 -2.313623 +v 2.769673 18.600395 -1.987077 +v 1.889860 17.527569 -2.313623 +v 2.511982 17.978273 -1.987077 +v 1.001114 17.711649 -1.987077 +v 1.889860 17.343519 -1.987077 +v 1.131257 17.841791 -2.313623 +v 1.889860 17.720581 -1.987077 +v 0.632984 18.600395 -1.987077 +v 0.817033 18.600395 -2.313623 +v 1.267738 17.978273 -1.987077 +v 1.131256 19.358997 -2.313623 +v 1.010046 18.600395 -1.987077 +v 1.001114 19.489140 -1.987077 +v 1.267738 19.222517 -1.987077 +v -0.033751 18.475336 2.026671 +v 4.013639 18.711559 2.026671 +v -0.033751 18.711559 2.026671 +v 4.013639 18.475336 2.026671 +v 4.013639 18.998186 -2.020719 +v 0.900512 18.188709 -2.020719 +v -0.033751 18.998186 -2.020719 +v 0.900512 18.998186 -2.020719 +v -0.033751 18.188709 -2.020719 +v 4.013639 18.188707 -2.020719 +v 2.857196 18.998186 -2.020719 +v 2.857196 18.188707 -2.020719 vt 0.144578 0.794118 vt 0.192771 0.764706 vt 0.192771 0.794118 @@ -561,27 +750,27 @@ vt 0.253012 0.735294 vt 0.204819 0.735294 vt 0.192771 0.794118 vn 0.6160 0.6160 -0.4910 -vn 0.0000 0.2170 -0.9761 -vn 0.0000 0.8712 -0.4910 -vn 0.1535 0.1535 -0.9761 +vn -0.0000 0.2171 -0.9762 +vn -0.0000 0.8712 -0.4910 +vn 0.1535 0.1535 -0.9762 vn 0.0000 -0.8609 -0.5088 vn 0.8712 0.0000 -0.4910 -vn 0.2171 0.0000 -0.9761 +vn 0.2171 -0.0000 -0.9762 vn -0.6087 -0.6087 -0.5088 vn 0.6160 -0.6160 -0.4910 -vn 0.1535 -0.1535 -0.9761 -vn -0.8608 0.0000 -0.5088 -vn 0.0000 -0.2170 -0.9761 +vn 0.1535 -0.1535 -0.9762 +vn -0.8609 0.0000 -0.5088 +vn -0.0000 -0.2171 -0.9762 vn -0.6087 0.6087 -0.5088 vn -0.6160 -0.6160 -0.4910 vn 0.0000 -0.8712 -0.4910 -vn -0.1535 -0.1535 -0.9761 -vn 0.0000 0.8609 -0.5088 +vn -0.1535 -0.1535 -0.9762 +vn -0.0000 0.8609 -0.5088 vn -0.8712 0.0000 -0.4910 -vn -0.2171 0.0000 -0.9761 +vn -0.2171 0.0000 -0.9762 vn 0.6087 0.6087 -0.5088 -vn -0.1535 0.1535 -0.9761 -vn 0.8608 0.0000 -0.5088 +vn -0.1535 0.1535 -0.9762 +vn 0.8609 0.0000 -0.5088 vn -0.6160 0.6160 -0.4910 vn 0.6087 -0.6087 -0.5088 vn -0.7225 0.0000 0.6914 @@ -589,415 +778,398 @@ vn 0.7225 0.0000 0.6914 vn 0.6906 0.0000 -0.7232 vn 0.0000 0.0000 -1.0000 vn -0.6906 0.0000 -0.7232 -usemtl None s 1 -f 98/159/76 96/160/77 95/161/78 -f 99/162/79 97/163/80 96/160/77 -f 101/164/81 99/162/79 98/159/76 -f 102/165/82 100/166/83 99/162/79 -f 104/167/84 102/165/82 101/164/81 -f 105/168/85 103/169/86 102/165/82 -f 104/167/84 108/170/87 105/168/85 -f 108/170/87 106/171/88 105/168/85 -f 110/172/89 108/173/87 107/174/90 -f 111/175/91 109/176/92 108/173/87 -f 113/177/93 111/175/91 110/172/89 -f 114/178/94 112/179/95 111/175/91 -f 113/177/93 117/180/96 114/178/94 -f 117/180/96 115/181/97 114/178/94 -f 95/161/78 117/180/96 116/182/98 -f 96/160/77 118/183/99 117/180/96 -f 120/184/100 121/185/101 119/186/100 -f 122/187/101 125/188/102 121/185/101 -f 129/189/103 123/190/104 127/191/103 -f 124/192/104 119/186/100 123/190/104 -f 126/193/102 130/194/103 125/188/102 -f 98/159/76 99/162/79 96/160/77 -f 99/162/79 100/195/83 97/163/80 -f 101/164/81 102/165/82 99/162/79 -f 102/165/82 103/196/86 100/166/83 -f 104/167/84 105/168/85 102/165/82 -f 105/168/85 106/197/88 103/169/86 -f 104/167/84 107/198/90 108/170/87 -f 108/170/87 109/199/92 106/171/88 -f 110/172/89 111/175/91 108/173/87 -f 111/175/91 112/200/95 109/176/92 -f 113/177/93 114/178/94 111/175/91 -f 114/178/94 115/201/97 112/179/95 -f 113/177/93 116/182/98 117/180/96 -f 117/180/96 118/202/99 115/181/97 -f 95/161/78 96/160/77 117/180/96 -f 96/160/77 97/203/80 118/183/99 -f 120/184/100 122/187/101 121/185/101 -f 122/187/101 126/193/102 125/188/102 -f 129/189/103 124/192/104 123/190/104 -f 124/192/104 120/184/100 119/186/100 -f 126/193/102 128/204/103 130/194/103 +f 158/222/84 159/223/85 160/224/86 +f 161/225/87 162/226/88 159/223/85 +f 163/227/89 161/225/87 158/222/84 +f 164/228/90 165/229/91 161/225/87 +f 166/230/92 164/228/90 163/227/89 +f 167/231/93 168/232/94 164/228/90 +f 166/230/92 169/233/95 167/231/93 +f 169/233/95 170/234/96 167/231/93 +f 171/235/97 169/236/95 172/237/98 +f 173/238/99 174/239/100 169/236/95 +f 175/240/101 173/238/99 171/235/97 +f 176/241/102 177/242/103 173/238/99 +f 175/240/101 178/243/104 176/241/102 +f 178/243/104 179/244/105 176/241/102 +f 160/224/86 178/243/104 180/245/106 +f 159/223/85 181/246/107 178/243/104 +f 182/247/108 183/248/109 184/249/108 +f 185/250/109 186/251/110 183/248/109 +f 187/252/111 188/253/112 189/254/111 +f 190/255/112 184/249/108 188/253/112 +f 191/256/110 192/257/111 186/251/110 +f 158/222/84 161/225/87 159/223/85 +f 161/225/87 165/258/91 162/226/88 +f 163/227/89 164/228/90 161/225/87 +f 164/228/90 168/259/94 165/229/91 +f 166/230/92 167/231/93 164/228/90 +f 167/231/93 170/260/96 168/232/94 +f 166/230/92 172/261/98 169/233/95 +f 169/233/95 174/262/100 170/234/96 +f 171/235/97 173/238/99 169/236/95 +f 173/238/99 177/263/103 174/239/100 +f 175/240/101 176/241/102 173/238/99 +f 176/241/102 179/264/105 177/242/103 +f 175/240/101 180/245/106 178/243/104 +f 178/243/104 181/265/107 179/244/105 +f 160/224/86 159/223/85 178/243/104 +f 159/223/85 162/266/88 181/246/107 +f 182/247/108 185/250/109 183/248/109 +f 185/250/109 191/256/110 186/251/110 +f 187/252/111 190/255/112 188/253/112 +f 190/255/112 182/247/108 184/249/108 +f 191/256/110 193/267/111 192/257/111 +o LeftFoot +v 4.121621 24.067026 2.136321 +v 4.121620 22.765116 -2.130369 +v 4.121621 24.067026 -2.130369 +v -0.145070 22.765120 -2.130369 +v 1.988274 21.575682 -3.487656 +v -0.145070 24.067028 -2.130369 +v -0.145070 24.067028 2.136321 +v 1.988275 24.067026 -3.487656 +vt 0.144578 0.823529 +vt 0.180723 0.941176 +vt 0.144578 0.941176 +vt 0.048193 0.941176 +vt 0.144578 0.941176 +vt 0.096386 0.970588 +vt 0.048193 0.941176 +vt 0.012048 0.941176 +vt 0.048193 0.823529 +vt 0.144578 1.000000 +vt 0.048193 1.000000 +vt 0.000000 1.000000 +vt 0.096386 0.970588 +vt 0.192771 1.000000 +vn 1.0000 -0.0000 0.0000 +vn -0.0000 -0.7521 0.6591 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.5368 -0.0000 -0.8437 +vn -0.5368 0.0000 -0.8437 +s off +f 194/268/113 195/269/113 196/270/113 +f 195/271/114 197/272/114 198/273/114 +f 199/274/115 197/275/115 200/276/115 +f 196/270/116 200/276/116 194/268/116 +f 195/269/117 201/277/117 196/270/117 +f 197/275/118 201/278/118 198/279/118 +f 199/274/116 196/270/116 201/280/116 +f 196/270/116 199/274/116 200/276/116 +f 195/269/117 198/281/117 201/277/117 +f 197/275/118 199/274/118 201/278/118 o Head -v -1.508368 -8.285352 3.802689 -v -1.508372 -14.278589 3.802688 +v -1.508372 -14.278589 3.802687 v 1.488250 -8.285354 3.802689 -v 1.488247 -14.278592 3.802688 -v -1.508368 -8.285347 -2.190549 -v -1.508371 -14.278585 -2.190550 +v -1.508368 -8.285352 3.802689 +v 1.488248 -14.278587 -2.190551 v 1.488251 -8.285350 -2.190549 -v 1.488248 -14.278587 -2.190550 -v -1.273192 -5.900111 5.032125 +v -1.508371 -14.278585 -2.190551 +v -1.508368 -8.285347 -2.190549 +v 1.488247 -14.278592 3.802687 v -1.273195 -9.457933 8.619613 v 1.253076 -5.900113 5.032125 -v 1.253075 -9.457935 8.619614 -v -1.273194 -9.487597 1.474305 -v -1.273196 -13.045419 5.061792 +v -1.273192 -5.900111 5.032125 +v 1.253072 -13.045421 5.061792 v 1.253075 -9.487598 1.474305 -v 1.253072 -13.045421 5.061793 -v -0.980570 -1.235440 9.273873 +v -1.273194 -9.487597 1.474305 +v -1.273196 -13.045419 5.061791 +v 1.253075 -9.457935 8.619614 v -0.980572 -6.999479 9.297806 v 0.960457 -1.235441 9.273874 -v 0.960454 -6.999480 9.297807 -v -0.980569 -1.267190 1.626005 -v -0.980572 -7.031229 1.649937 -v 0.960459 -1.267191 1.626004 +v -0.980570 -1.235440 9.273873 v 0.960455 -7.031230 1.649937 -v -1.281824 3.370458 8.560949 +v 0.960459 -1.267191 1.626004 +v -0.980572 -7.031229 1.649937 +v -0.980569 -1.267190 1.626005 +v 0.960454 -6.999480 9.297807 v -1.281827 -1.716582 8.582069 v 1.261716 3.370455 8.560948 -v 1.261714 -1.716584 8.582069 -v -1.281823 3.349338 3.473909 -v -1.281826 -1.737700 3.495030 -v 1.261717 3.349337 3.473909 +v -1.281824 3.370457 8.560949 v 1.261715 -1.737702 3.495030 -v -0.938246 6.794746 7.686372 -v -0.938248 3.082000 7.701787 -v 0.918143 6.794745 7.686372 +v 1.261717 3.349337 3.473909 +v -1.281826 -1.737700 3.495030 +v -1.281823 3.349338 3.473909 +v 1.261714 -1.716584 8.582069 +v -0.938246 6.794745 7.686372 v 0.918141 3.081999 7.701787 -v -0.938246 6.779333 3.973624 -v -0.938247 3.066586 3.989039 -v 0.918144 6.779332 3.973624 +v 0.918143 6.794744 7.686372 v 0.918142 3.066585 3.989039 -v -0.665263 7.681831 6.846099 +v 0.918144 6.779332 3.973624 +v -0.938247 3.066586 3.989039 +v -0.938246 6.779333 3.973624 v -0.665264 5.820934 5.000589 -v 0.645162 7.681829 6.846099 -v 0.645161 5.820933 5.000589 +v 0.645162 7.681828 6.846099 +v -0.665263 7.681830 6.846099 +v 0.645162 7.666443 3.139690 +v 0.645163 9.527342 4.985200 v -0.665262 9.527344 4.985200 v -0.665263 7.666443 3.139690 -v 0.645163 9.527342 4.985200 -v 0.645162 7.666443 3.139690 -v -4.410054 0.192320 4.402977 +v 0.645161 5.820933 5.000589 v -4.410059 -8.607680 4.402976 -v 4.389945 0.192312 4.402977 -v 4.389940 -8.607687 4.402976 -v -4.410053 0.192326 -4.397024 -v -4.410058 -9.299909 -3.372829 -v 4.389946 0.192319 -4.397024 -v 4.389941 -9.299915 -3.372831 -v -4.410056 -2.354111 4.402977 -v -4.410058 -6.061250 4.402976 v 4.389942 -6.061256 4.402976 -v 4.389944 -2.354118 4.402977 -v 4.389943 -6.061251 -4.397025 -v 4.389945 -1.759964 -4.397025 -v -4.410056 -6.061244 -4.397025 -v -4.410054 -1.759957 -4.397025 -v 4.389945 0.192314 2.222194 -v 4.389940 -9.299918 0.356267 -v -4.410054 0.192321 2.222193 -v -4.410059 -9.299911 0.356267 -v -4.410056 -3.091842 2.493567 -v -4.410057 -5.765733 -0.772733 -v 4.389943 -3.091849 2.493567 +v -4.410058 -6.061250 4.402976 v 4.389942 -5.765739 -0.772733 -v -0.010055 -3.490466 -9.097178 -v -0.010054 -1.538183 -9.097178 -v 2.486246 -8.607678 -7.519540 +v 4.389941 -8.607681 -4.397027 +v 4.389943 -6.061251 -4.397026 v -2.506362 -8.607675 -7.519540 -v 2.486247 -6.061247 -7.519539 -v -2.506361 -6.061244 -7.519539 -v 4.389939 -10.583710 -0.159607 -v 4.389940 -10.583708 -2.856956 -v -4.410059 -10.583701 -2.856956 -v -4.410060 -10.583703 -0.159607 -v 2.486246 -9.631669 -10.148378 -v -2.506362 -9.631665 -10.148378 -v 2.486247 -7.085238 -10.148378 -v -2.506361 -7.085234 -10.148378 -v 2.486244 -11.852020 -8.006340 -v -2.506363 -11.852015 -8.006340 -v 2.486245 -11.852019 -9.310804 -v -2.506363 -11.852015 -9.310804 -v -0.010058 -9.631667 -10.148378 -v -0.010059 -11.852016 -9.310804 -v 0.633919 -10.234200 -9.921087 -v 1.842269 -10.234200 -9.921087 -v 1.842268 -11.249486 -9.538094 -v 0.633918 -11.249485 -9.538094 -v -1.862386 -10.234198 -9.921087 -v -0.654035 -10.234199 -9.921087 -v -0.654036 -11.249484 -9.538094 -v -1.862386 -11.249483 -9.538094 -v 1.842269 -9.798319 -8.765591 -v 0.633919 -9.798318 -8.765591 -v 0.633919 -10.813603 -8.382599 -v 1.842269 -10.813604 -8.382599 -v -0.654035 -9.798317 -8.765591 -v -1.862385 -9.798316 -8.765591 -v -1.862385 -10.813601 -8.382599 -v -0.654036 -10.813602 -8.382599 -v 4.389940 -8.607686 1.380462 -v 4.389941 -8.607681 -4.397026 -v -4.410058 -8.607675 -4.397026 +v 2.486246 -8.607678 -7.519540 v -4.410058 -8.607678 1.380462 +v -4.410057 -5.765733 -0.772733 +v 4.389940 -8.607687 4.402976 +v 4.389940 -8.607686 1.380462 +v -4.410054 0.192321 2.222193 +v -4.410056 -2.354111 4.402977 +v -4.410054 0.192320 4.402977 +v -4.410056 -3.091842 2.493567 +v 4.389945 -1.759964 -4.397025 +v -0.010054 -1.538183 -9.097178 +v 4.389946 0.192319 -4.397024 +v 4.389945 0.192314 2.222194 +v 4.389944 -2.354118 4.402977 +v 4.389945 0.192312 4.402977 +v 4.389943 -3.091849 2.493567 +v -4.410054 -1.759957 -4.397025 +v -4.410053 0.192326 -4.397024 +v -4.410059 -11.275934 -3.324822 +v -4.410058 -8.607675 -4.397027 +v -4.410056 -6.061244 -4.397026 +v -0.010055 -3.490466 -9.097178 +v 2.486247 -6.061246 -7.519539 +v -2.506361 -7.085234 -10.148378 +v -2.506361 -6.061244 -7.519539 v 4.389939 -11.275944 0.308259 v 4.389940 -11.275941 -3.324822 -v -4.410059 -11.275934 -3.324822 -v -4.410060 -11.275937 0.308259 +v -4.410059 -10.583701 -2.856956 v -3.610058 -9.299910 -3.372830 +v -4.410058 -9.299909 -3.372829 +v 4.389940 -10.583708 -2.856956 +v 3.589941 -9.299915 -3.372830 +v 3.589940 -10.583708 -2.856956 +v 2.486246 -9.631669 -10.148378 +v -0.010058 -9.631667 -10.148378 +v 2.486247 -7.085238 -10.148378 +v -2.506362 -9.631665 -10.148378 +v 0.633918 -11.249485 -9.538095 +v 0.633919 -9.798318 -8.765591 +v 0.633919 -10.813603 -8.382599 +v -2.506363 -11.852015 -8.006341 +v -0.010059 -11.852016 -9.310805 +v 2.486244 -11.852020 -8.006341 +v 2.486245 -11.852019 -9.310805 +v 1.842268 -11.249486 -9.538095 +v 1.842269 -10.813604 -8.382599 +v 1.842269 -10.234200 -9.921087 +v 0.633919 -10.234200 -9.921087 +v -1.862386 -10.234198 -9.921087 +v -0.654035 -10.234199 -9.921087 +v -2.506363 -11.852015 -9.310805 +v -0.654036 -11.249484 -9.538095 +v -1.862386 -11.249483 -9.538095 +v 1.842269 -9.798319 -8.765591 +v -0.654035 -9.798317 -8.765591 +v -1.862385 -10.813601 -8.382599 +v -1.862385 -9.798316 -8.765591 +v -0.654036 -10.813602 -8.382599 +v 4.389941 -9.299915 -3.372832 +v 4.389940 -9.299918 0.356267 +v 4.389939 -10.583710 -0.159607 +v -4.410060 -11.275937 0.308259 +v -4.410060 -10.583703 -0.159607 +v -4.410059 -9.299911 0.356267 v -3.610059 -9.299911 0.356267 v -3.610059 -10.583702 -2.856956 v -3.610060 -10.583703 -0.159607 v 3.589941 -9.299917 0.356267 -v 3.589941 -9.299915 -3.372830 v 3.589939 -10.583709 -0.159608 -v 3.589940 -10.583708 -2.856956 -v 5.645875 -8.217163 4.660890 -v 5.645875 -9.817163 4.660890 -v 4.163136 -8.217162 5.262124 -v 4.163136 -9.817162 5.262124 -v 5.044641 -8.217161 3.178150 -v 5.044641 -9.817162 3.178150 -v 3.561902 -8.217160 3.779384 -v 3.561902 -9.817161 3.779384 -v 3.896814 -2.763540 7.254127 -v 3.801686 -8.680468 4.249980 -v 4.032371 -1.908365 6.272345 -v 3.853090 -8.356171 3.877670 -v 5.014153 -1.554140 5.482267 -v 4.225400 -8.221842 3.578059 -v 6.267045 -1.908366 5.346712 -v 4.700520 -8.356171 3.526654 -v 7.057123 -2.763540 5.945084 -v 5.000132 -8.680469 3.753567 -v 6.921567 -3.618715 6.926867 -v 4.948727 -9.004766 4.125877 -v 5.939785 -3.972939 7.716943 -v 4.576417 -9.139093 4.425488 -v 4.686890 -3.618714 7.852498 -v 4.101297 -9.004766 4.476893 -v -5.172473 5.369970 8.408375 -v -5.172474 5.562243 6.053672 -v -5.172478 -3.465167 7.706107 +v -5.172473 5.369969 8.408375 v -5.172478 -3.269783 5.313330 +v -5.172474 5.562243 6.053672 v -4.095266 -8.217159 5.262125 +v -5.578005 -9.817158 4.660890 v -4.095266 -9.817160 5.262124 v -5.578005 -8.217158 4.660890 -v -5.578005 -9.817158 4.660890 -v -3.494032 -8.217157 3.779385 -v -3.494032 -9.817157 3.779384 -v -4.976771 -8.217155 3.178150 v -4.976771 -9.817156 3.178149 -v -7.156473 -2.763536 5.904851 -v -5.132457 -8.680464 3.682846 -v -6.375424 -1.908360 5.294742 -v -4.836269 -8.356166 3.451482 -v -5.120644 -1.554137 5.411564 -v -4.360434 -8.221838 3.495784 -v -4.127169 -1.908363 6.186887 -v -3.983691 -8.356167 3.789800 -v -3.976962 -2.763537 7.166533 -v -3.926729 -8.680464 4.161299 +v -3.494032 -8.217157 3.779385 +v -4.976771 -8.217155 3.178149 +v -3.494032 -9.817157 3.779383 v -4.758012 -3.618712 7.776642 -v -4.222918 -9.004762 4.392663 -v -6.012789 -3.972937 7.659819 -v -4.698752 -9.139090 4.348361 +v -4.127169 -1.908363 6.186887 v -7.006265 -3.618711 6.884498 -v -5.075496 -9.004761 4.054346 -v 5.288472 -3.271343 5.332368 -v 5.288471 -3.463617 7.687073 -v 5.288476 5.563792 6.034633 -v 5.288477 5.368412 8.427410 -v -5.185373 -3.465167 7.706107 -v -5.185368 5.369970 8.408375 -v -5.185369 5.562245 6.053672 +v -5.185368 5.369969 8.408375 v -5.185372 -3.269783 5.313330 -v -5.712929 -8.217155 4.814359 -v -5.712930 -9.817155 4.814359 -v -4.221374 -8.217156 5.393374 -v -4.221375 -9.817156 5.393374 -v -5.133913 -8.217155 3.322803 -v -5.133914 -9.817154 3.322802 -v -3.642358 -8.217155 3.901819 -v -3.642359 -9.817156 3.901819 -v -3.925316 -2.763535 7.381176 -v -3.875084 -8.680463 4.375944 -v -4.075523 -1.908360 6.401529 -v -3.932045 -8.356165 4.004445 -v -5.068998 -1.554133 5.626207 -v -4.308788 -8.221836 3.710428 -v -6.323776 -1.908357 5.509384 -v -4.784623 -8.356164 3.666127 -v -7.104827 -2.763530 6.119492 -v -5.080811 -8.680461 3.897491 -v -6.954621 -3.618704 7.099140 -v -5.023851 -9.004759 4.268991 -v -5.961145 -3.972931 7.874462 -v -4.647107 -9.139088 4.563006 -v -4.706366 -3.618708 7.991283 -v -4.171273 -9.004760 4.607308 -v 5.160210 5.369962 8.399809 -v 5.125034 5.562235 6.045368 +v -5.185373 -3.465167 7.706107 +v -5.172478 -3.465167 7.706107 +v -5.185369 5.562244 6.053672 v 5.149714 -3.465176 7.697618 -v 5.113968 -3.269792 5.305109 -v 4.036106 -8.217167 5.270001 -v 4.036106 -9.817166 5.270001 +v 5.125034 5.562234 6.045369 +v 5.160210 5.369962 8.399809 v 5.509698 -8.217167 4.646683 -v 5.509698 -9.817167 4.646683 -v 3.412788 -8.217164 3.796409 -v 3.412787 -9.817163 3.796409 -v 4.886380 -8.217164 3.173090 +v 4.036106 -9.817166 5.270000 +v 4.036106 -8.217167 5.270000 v 4.886380 -9.817164 3.173090 -v 7.106581 -2.763548 5.866924 -v 5.049588 -8.680472 3.675405 -v 6.316504 -1.908371 5.268551 -v 4.749977 -8.356174 3.448492 -v 5.063610 -1.554145 5.404106 -v 4.274858 -8.221846 3.499897 -v 4.081829 -1.908370 6.194184 -v 3.902549 -8.356174 3.799508 -v 3.946273 -2.763545 7.175965 -v 3.851143 -8.680471 4.171817 +v 5.509698 -9.817167 4.646683 +v 3.412788 -8.217164 3.796408 +v 4.886380 -8.217164 3.173090 +v 3.412787 -9.817163 3.796408 v 4.736349 -3.618721 7.774338 -v 4.150755 -9.004769 4.398731 -v 5.989241 -3.972946 7.638782 -v 4.625875 -9.139097 4.347325 +v 4.081829 -1.908370 6.194184 v 6.971023 -3.618722 6.848705 -v 4.998183 -9.004769 4.047714 -v -5.345529 -3.271336 5.480423 -v -5.310351 -3.463610 7.834865 -v -5.335032 5.563800 6.182609 -v -5.299286 5.368419 8.575117 -v 5.162607 -3.465176 7.697426 v 5.173103 5.369962 8.399616 -v 5.137928 5.562235 6.045175 v 5.126861 -3.269792 5.304916 -v 3.316185 -6.993679 -5.128780 +v 5.162607 -3.465176 7.697426 +v 5.113968 -3.269792 5.305109 +v 5.137928 5.562234 6.045176 v 3.316186 -5.821070 -5.128779 -v 2.306064 -6.993678 -4.533243 -v 2.306065 -5.821069 -4.533242 -v 2.720647 -6.993677 -6.138901 -v 2.720649 -5.821068 -6.138902 -v 1.710526 -6.993675 -5.543364 -v 1.710527 -5.821067 -5.543363 -v 1.114989 -5.821065 -6.553485 -v 1.114987 -6.993674 -6.553485 -v 2.125108 -6.993676 -7.149024 -v 2.125110 -5.821066 -7.149024 -v 0.519451 -5.821064 -7.563606 -v 0.519449 -6.993672 -7.563608 -v 1.529571 -6.993674 -8.159145 -v 1.529572 -5.821064 -8.159145 +v 2.306064 -6.993678 -4.533244 +v 3.316185 -6.993679 -5.128780 +v 2.306065 -5.821069 -4.533243 +v 1.710526 -6.993675 -5.543365 +v 1.710527 -5.821066 -5.543364 +v 2.125110 -5.821065 -7.149024 +v 1.114989 -5.821064 -6.553485 +v 2.720647 -6.993677 -6.138902 v 3.316187 -5.234766 -5.128781 v 2.306066 -5.234764 -4.533242 -v 1.710527 -5.234763 -5.543363 +v 1.529571 -6.993673 -8.159145 +v 1.529572 -5.821064 -8.159145 +v 1.114987 -6.993673 -6.553485 +v 2.720649 -5.821067 -6.138903 +v 2.125108 -6.993676 -7.149024 +v 0.519449 -6.993671 -7.563609 v 2.720649 -5.234764 -6.138902 -v 1.114989 -5.234761 -6.553485 +v 1.710527 -5.234763 -5.543363 v 2.125111 -5.234762 -7.149024 -v 0.519451 -5.234759 -7.563606 +v 0.519451 -5.234758 -7.563606 +v 1.114989 -5.234761 -6.553485 +v 0.519451 -5.821064 -7.563606 v 1.529572 -5.234761 -8.159145 v -3.396486 -6.993674 -5.128779 -v -3.396485 -5.821067 -5.128778 -v -2.386364 -6.993676 -4.533241 v -2.386365 -5.821069 -4.533240 -v -2.800947 -6.993675 -6.138901 -v -2.800947 -5.821068 -6.138901 -v -1.790826 -6.993676 -5.543362 -v -1.790826 -5.821069 -5.543364 -v -1.195287 -5.821067 -6.553484 -v -1.195287 -6.993677 -6.553484 -v -2.205408 -6.993676 -7.149024 -v -2.205409 -5.821068 -7.149022 -v -0.599749 -5.821067 -7.563604 -v -0.599750 -6.993677 -7.563605 -v -1.609871 -6.993676 -8.159142 -v -1.609871 -5.821066 -8.159142 -v -3.396486 -5.234763 -5.128779 +v -3.396485 -5.821067 -5.128778 +v -1.790826 -6.993676 -5.543363 +v -2.386364 -6.993676 -4.533241 +v -1.790826 -5.821068 -5.543365 +v -2.205409 -5.821067 -7.149023 +v -2.800947 -5.821067 -6.138902 +v -2.800947 -6.993675 -6.138902 v -2.386365 -5.234761 -4.533240 -v -1.790826 -5.234762 -5.543364 +v -1.609871 -6.993676 -8.159142 +v -2.205408 -6.993676 -7.149024 +v -1.195287 -6.993677 -6.553484 +v -0.599749 -5.821066 -7.563604 +v -0.599750 -6.993677 -7.563605 v -2.800947 -5.234764 -6.138901 +v -1.195287 -5.821066 -6.553484 +v -1.790826 -5.234762 -5.543364 v -1.195288 -5.234763 -6.553484 -v -2.205409 -5.234762 -7.149023 -v -0.599749 -5.234764 -7.563604 v -1.609871 -5.234762 -8.159142 -v 1.704096 -7.845215 -9.860027 +v -2.205409 -5.234762 -7.149023 +v -1.609871 -5.821065 -8.159142 +v -0.599749 -5.234764 -7.563604 v 1.704097 -6.672606 -9.860027 -v 1.703341 -7.845214 -8.687418 +v 1.703341 -7.845213 -8.687418 +v 1.704096 -7.845214 -9.860027 v 1.703342 -6.672605 -8.687418 -v 0.531487 -7.845212 -9.860781 -v 0.531488 -6.672604 -9.860781 v 0.530734 -7.845212 -8.688173 v 0.530734 -6.672604 -8.688173 -v -0.641875 -6.672601 -8.688927 -v -0.641875 -7.845210 -8.688927 -v -0.641121 -7.845211 -9.861536 v -0.641120 -6.672602 -9.861536 -v -1.814482 -6.672599 -8.689682 -v -1.814483 -7.845208 -8.689682 +v -0.641875 -6.672601 -8.688927 +v 0.531487 -7.845212 -9.860781 +v 1.704096 -6.086301 -9.860025 +v 1.703342 -6.086300 -8.687418 v -1.813730 -7.845209 -9.862289 -v -1.813729 -6.672600 -9.862289 -v 1.704096 -6.086302 -9.860025 -v 1.703342 -6.086301 -8.687418 -v 0.530734 -6.086299 -8.688171 -v 0.531488 -6.086300 -9.860781 +v -1.813729 -6.672599 -9.862289 +v -0.641875 -7.845210 -8.688927 +v 0.531488 -6.672604 -9.860781 +v -0.641121 -7.845211 -9.861536 +v -1.814483 -7.845208 -8.689682 +v 0.531488 -6.086299 -9.860781 +v 0.530734 -6.086298 -8.688171 v -0.641875 -6.086297 -8.688927 -v -0.641120 -6.086298 -9.861536 -v -1.814482 -6.086295 -8.689680 v -1.813727 -6.086296 -9.862289 +v -1.814482 -6.086295 -8.689680 +v -1.814482 -6.672598 -8.689682 +v -0.641120 -6.086298 -9.861536 v -2.474616 -1.420238 -4.557697 -v -2.493140 -2.558242 -4.275535 -v -3.339206 -1.597586 -5.329736 v -3.357730 -2.735590 -5.047575 -v -1.682685 -1.640480 -5.393971 -v -1.701210 -2.778483 -5.111809 +v -2.493140 -2.558242 -4.275535 v -2.547275 -1.817827 -6.166008 -v -2.565799 -2.955831 -5.883848 +v -3.339206 -1.597586 -5.329736 v -1.773869 -3.176071 -6.720119 -v -1.755345 -2.038068 -7.002281 -v -0.890756 -1.860719 -6.230242 +v -1.701210 -2.778483 -5.111809 +v -2.565799 -2.955831 -5.883848 +v -1.682685 -1.640480 -5.393971 +v -2.502402 -3.127246 -4.134454 v -0.909280 -2.998723 -5.948082 +v -0.098825 -2.080959 -7.066516 +v -0.890756 -1.860719 -6.230242 +v -1.755345 -2.038068 -7.002281 v -0.981939 -3.396310 -7.556392 v -0.963415 -2.258307 -7.838554 -v -0.098825 -2.080959 -7.066516 -v -0.117349 -3.218962 -6.784357 -v -2.502402 -3.127246 -4.134454 +v -1.710471 -3.347486 -4.970729 v -3.366992 -3.304594 -4.906494 v -2.575060 -3.524835 -5.742768 -v -1.710471 -3.347486 -4.970729 -v -1.783131 -3.745074 -6.579041 -v -0.918541 -3.567726 -5.807003 v -0.991202 -3.965313 -7.415312 +v -0.918541 -3.567726 -5.807003 +v -1.783131 -3.745074 -6.579041 v -0.126611 -3.787967 -6.643275 -v 2.425965 -1.420243 -4.557696 +v -0.117349 -3.218962 -6.784357 v 2.444487 -2.558248 -4.275535 v 3.290554 -1.597593 -5.329733 +v 2.425965 -1.420243 -4.557696 v 3.309077 -2.735597 -5.047574 -v 1.634034 -1.640481 -5.393968 -v 1.652557 -2.778485 -5.111808 v 2.498624 -1.817831 -6.166008 -v 2.517147 -2.955835 -5.883847 +v 1.652557 -2.778485 -5.111808 v 1.725216 -3.176074 -6.720120 -v 1.706694 -2.038069 -7.002281 +v 2.517147 -2.955835 -5.883847 +v 1.634034 -1.640481 -5.393968 +v 3.318337 -3.304599 -4.906492 v 0.842104 -1.860718 -6.230242 +v 0.068697 -3.218961 -6.784354 v 0.860628 -2.998724 -5.948081 -v 0.933287 -3.396311 -7.556393 +v 1.706694 -2.038069 -7.002281 v 0.914763 -2.258307 -7.838553 v 0.050174 -2.080956 -7.066514 -v 0.068697 -3.218961 -6.784354 -v 2.453748 -3.127249 -4.134454 -v 3.318337 -3.304599 -4.906492 v 2.526407 -3.524837 -5.742766 v 1.661818 -3.347488 -4.970726 -v 1.734478 -3.745075 -6.579039 v 0.869887 -3.567725 -5.807002 v 0.942548 -3.965313 -7.415312 +v 1.734478 -3.745075 -6.579039 +v 0.933287 -3.396311 -7.556393 v 0.077959 -3.787963 -6.643274 +v 2.453748 -3.127249 -4.134454 +v -0.938248 3.082000 7.701787 +v -6.375424 -1.908360 5.294742 +v -7.156473 -2.763536 5.904851 +v -6.012789 -3.972937 7.659819 +v -3.976962 -2.763537 7.166533 +v -5.120644 -1.554137 5.411564 +v 6.316504 -1.908371 5.268551 +v 7.106581 -2.763548 5.866924 +v 5.989241 -3.972946 7.638782 +v 3.946273 -2.763545 7.175965 +v 5.063610 -1.554145 5.404106 +v -3.396486 -5.234763 -5.128779 +v -4.836269 -8.356166 3.451482 +v -5.132457 -8.680464 3.682846 +v -4.360434 -8.221838 3.495784 +v -3.983691 -8.356167 3.789799 +v -3.926729 -8.680464 4.161299 +v -4.222918 -9.004762 4.392663 +v -5.075496 -9.004761 4.054346 +v -4.698752 -9.139090 4.348361 +v 4.749977 -8.356174 3.448492 +v 5.049588 -8.680472 3.675405 +v 4.274858 -8.221846 3.499897 +v 3.902549 -8.356174 3.799508 +v 3.851143 -8.680471 4.171816 +v 4.150755 -9.004769 4.398731 +v 4.998183 -9.004769 4.047714 +v 4.625875 -9.139097 4.347324 vt 0.409639 0.411765 vt 0.445783 0.500000 vt 0.409639 0.500000 @@ -1231,33 +1403,33 @@ vt 0.987952 0.676471 vt 0.987952 0.735294 vt 0.963855 0.676471 vt 0.626506 1.000000 -vt 0.722892 0.647059 vt 0.626506 0.647059 +vt 0.722892 0.647059 vt 0.301205 0.955882 -vt 0.265060 0.911765 vt 0.301205 0.911765 +vt 0.265060 0.911765 vt 0.265060 1.000000 -vt 0.228916 0.955882 vt 0.265060 0.955882 +vt 0.228916 0.955882 vt 0.192771 0.911765 vt 0.192771 0.955882 vt 0.265060 0.867647 -vt 0.228916 0.911765 vt 0.228916 0.867647 -vt 0.337349 0.911765 +vt 0.228916 0.911765 vt 0.337349 0.955882 +vt 0.337349 0.911765 vt 0.337349 0.823529 -vt 0.313253 0.882353 vt 0.289157 0.794118 +vt 0.313253 0.882353 vt 0.626506 0.647059 -vt 0.722892 1.000000 vt 0.626506 1.000000 +vt 0.722892 1.000000 +vt 0.963855 0.750000 vt 0.963855 0.750000 vt 0.987952 0.735294 -vt 0.963855 0.750000 +vt 0.987952 0.676471 vt 0.987952 0.676471 vt 0.963855 0.676471 -vt 0.987952 0.676471 vt 0.987952 0.735294 vt 0.963855 0.676471 vt 0.469880 0.558824 @@ -1538,8 +1710,8 @@ vt 0.373494 1.000000 vt 0.337349 1.000000 vt 0.373494 0.794118 vt 0.409639 0.794118 -vt 0.445783 1.000000 vt 0.409639 1.000000 +vt 0.445783 1.000000 vt 0.445783 0.794118 vt 0.481928 1.000000 vt 0.518072 0.794118 @@ -1551,15 +1723,15 @@ vt 0.554217 1.000000 vt 0.626506 0.794118 vt 0.590361 1.000000 vt 0.337349 0.794118 -vt 0.373494 1.000000 vt 0.337349 1.000000 +vt 0.373494 1.000000 vt 0.373494 0.794118 vt 0.626506 1.000000 vt 0.626506 1.000000 vn -0.0000 -0.0000 1.0000 vn 1.0000 -0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 -0.0000 +vn -0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 vn -0.0000 -1.0000 -0.0000 vn 0.0000 0.7100 0.7042 vn -0.0000 -0.7100 -0.7042 @@ -1582,8 +1754,8 @@ vn 0.0000 0.3729 0.9279 vn -0.0000 -0.3729 0.9279 vn -0.0000 -0.1484 0.9889 vn 0.0000 0.9356 -0.3529 -vn 0.0000 -0.3529 -0.9356 vn 0.0000 -0.3530 -0.9356 +vn -0.0000 -0.3529 -0.9356 vn -0.0000 -0.9356 0.3529 vn 0.0000 0.3729 -0.9279 vn -0.3758 -0.0000 0.9267 @@ -1595,17 +1767,17 @@ vn 0.0000 -0.9967 -0.0814 vn 0.0001 0.9967 0.0814 vn 0.0000 0.0835 -0.9965 vn 0.0000 -0.0792 0.9969 -vn 0.9999 -0.0000 -0.0149 +vn -0.9999 0.0000 0.0149 +vn 0.3896 0.0000 0.9210 +vn 0.9210 0.0000 -0.3896 vn -0.3896 0.0000 -0.9210 vn -0.9210 0.0000 0.3896 -vn 0.3896 -0.0000 0.9210 -vn 0.9210 -0.0000 -0.3896 -vn -0.2706 -0.7071 -0.6533 -vn -0.9999 0.0000 0.0149 -vn 0.0012 0.9967 0.0814 +vn 0.2706 0.7071 0.6533 +vn 0.9999 -0.0000 -0.0149 vn -0.0012 -0.9967 -0.0814 -vn 0.0149 -0.0835 0.9964 -vn -0.0148 0.0792 -0.9967 +vn 0.0012 0.9967 0.0814 +vn -0.0149 0.0835 -0.9964 +vn 0.0148 -0.0792 0.9967 vn 0.5079 -0.0000 0.8614 vn -0.8614 0.0000 0.5079 vn 0.8614 -0.0000 -0.5079 @@ -1630,10 +1802,8 @@ vn 0.0158 -0.9705 0.2406 vn -0.7373 0.1512 0.6584 vn -0.6754 -0.1878 -0.7132 vn 0.0000 0.9967 0.0814 -vn -0.0001 -0.0792 0.9969 -vn 0.0150 -0.0835 0.9964 -vn -0.0150 0.0792 -0.9967 -vn -0.8990 0.4375 0.0163 +vn 0.0150 -0.0792 0.9967 +vn -0.8991 0.4375 0.0163 vn -0.3889 0.1662 -0.9061 vn -0.9031 -0.1591 -0.3988 vn -0.5033 0.7950 -0.3385 @@ -1643,601 +1813,559 @@ vn 0.1189 0.9466 -0.2996 vn 0.6432 0.4375 0.6283 vn 0.9044 0.1662 -0.3929 vn 0.2257 0.1078 0.9682 -vn 0.9308 -0.1591 0.3289 +vn 0.9309 -0.1591 0.3289 vn -0.3688 -0.0140 0.9294 vn 0.3969 -0.4597 0.7944 vn -0.8336 -0.4597 0.3061 vn -0.3036 -0.5677 0.7652 vn -0.8282 0.1078 0.5500 -vn -0.8992 -0.4375 -0.0029 -vn -0.3753 -0.1662 0.9118 -vn -0.8970 0.1591 0.4123 -vn -0.4982 -0.7950 0.3460 -vn 0.3656 -0.2953 0.8827 -vn 0.5969 -0.7950 -0.1076 -vn 0.1233 -0.9466 0.2978 -vn 0.6338 -0.4375 -0.6379 -vn 0.9102 -0.1662 0.3793 -vn 0.2112 -0.1078 -0.9715 -vn 0.9258 0.1591 -0.3428 -vn -0.3826 0.0140 -0.9238 -vn 0.3850 0.4597 -0.8003 -vn -0.8381 0.4597 -0.2936 -vn -0.3150 0.5677 -0.7606 -vn -0.8363 -0.1078 -0.5376 -usemtl None +vn 0.0575 -0.6201 -0.7824 +vn 0.8970 -0.1591 -0.4123 +vn 0.3754 0.1662 -0.9119 +vn -0.2971 -0.6771 -0.6733 +vn -0.3656 0.2953 -0.8827 +vn -0.2660 -0.6771 -0.6862 +vn -0.2173 -0.8231 -0.5247 +vn -0.5940 -0.6201 -0.5125 +vn -0.9102 0.1662 -0.3794 +vn -0.5499 -0.8333 0.0569 +vn -0.9258 -0.1591 0.3428 +vn 0.0901 -0.9719 0.2176 +vn -0.3850 -0.4597 0.8003 +vn 0.3150 -0.5677 0.7606 +vn 0.8381 -0.4597 0.2936 +vn 0.4291 -0.8333 -0.3486 s off -f 132/205/105 133/206/105 131/207/105 -f 133/208/106 138/209/106 137/210/106 -f 137/211/107 136/212/107 135/213/107 -f 136/212/108 131/214/108 135/215/108 -f 134/216/109 136/212/109 138/209/109 -f 140/217/110 141/218/110 139/219/110 -f 141/220/106 146/221/106 145/222/106 -f 146/221/111 143/223/111 145/224/111 -f 144/225/108 139/226/108 143/227/108 -f 142/228/112 144/225/112 146/221/112 -f 148/229/113 149/230/113 147/231/113 -f 149/230/106 154/232/106 153/233/106 -f 152/234/108 147/231/108 151/235/108 -f 153/236/114 147/231/114 149/230/114 -f 150/237/115 152/238/115 154/239/115 -f 156/240/113 157/241/113 155/242/113 -f 157/241/106 162/243/106 161/244/106 -f 160/245/108 155/246/108 159/247/108 -f 157/241/114 159/248/114 155/249/114 -f 158/250/115 160/245/115 162/243/115 -f 161/244/116 160/251/116 159/252/116 -f 163/253/113 166/254/113 165/255/113 -f 165/255/106 170/256/106 169/257/106 -f 168/258/108 163/253/108 167/259/108 -f 169/257/114 163/253/114 165/255/114 -f 170/260/116 167/259/116 169/257/116 -f 172/261/112 173/262/112 171/263/112 -f 173/262/106 178/264/106 177/265/106 -f 178/264/117 175/266/117 177/265/117 -f 176/267/108 171/263/108 175/268/108 -f 177/265/110 171/269/110 173/262/110 -f 176/270/111 174/271/111 172/272/111 -f 180/273/105 189/274/105 188/275/105 -f 202/276/106 240/277/106 191/278/106 -f 240/279/109 206/280/109 205/281/109 -f 242/282/108 188/283/108 200/284/108 -f 182/285/109 242/286/109 239/287/109 -f 197/288/108 187/289/108 179/290/108 -f 199/291/108 188/283/108 187/289/108 -f 192/292/118 204/293/118 185/294/118 -f 195/295/106 192/292/106 185/294/106 -f 179/296/105 190/297/105 181/298/105 -f 188/275/105 190/297/105 187/299/105 -f 189/300/106 201/301/106 190/302/106 -f 190/302/106 195/295/106 181/303/106 -f 194/304/108 197/288/108 183/305/108 -f 240/279/119 245/306/119 241/307/119 -f 195/308/120 179/296/120 181/298/120 -f 241/309/108 200/284/108 193/310/108 -f 189/300/106 239/311/106 202/276/106 -f 194/304/121 204/312/121 203/313/121 -f 192/314/122 194/315/122 203/316/122 -f 183/317/123 185/318/123 204/319/123 -f 207/320/124 216/321/124 208/322/124 -f 193/310/125 206/323/125 241/309/125 -f 191/278/126 205/324/126 207/325/126 -f 191/326/120 208/322/120 193/327/120 -f 243/328/109 245/329/109 244/330/109 -f 211/331/127 247/332/127 184/333/127 -f 210/334/127 252/335/127 254/336/127 -f 242/286/128 243/328/128 239/287/128 -f 213/337/107 221/338/107 215/339/107 -f 205/324/106 215/340/106 207/325/106 -f 206/323/108 216/341/108 214/342/108 -f 226/343/106 232/344/106 233/345/106 -f 218/346/109 222/347/109 217/348/109 -f 214/342/108 218/349/108 206/323/108 -f 205/281/129 218/346/129 217/348/129 -f 213/350/106 217/351/106 219/352/106 -f 225/353/130 233/345/130 234/354/130 -f 221/338/131 224/355/131 223/356/131 -f 219/357/131 224/355/131 213/337/131 -f 219/357/131 226/358/131 225/359/131 -f 222/347/131 223/356/131 226/358/131 -f 221/338/131 227/360/131 214/361/131 -f 222/347/131 228/362/131 221/338/131 -f 220/363/131 229/364/131 222/347/131 -f 220/363/132 227/360/132 230/365/132 -f 231/366/131 233/345/131 232/344/131 -f 235/367/131 237/368/131 236/369/131 -f 229/370/108 235/367/108 228/371/108 -f 228/372/133 236/369/133 227/373/133 -f 225/374/108 231/366/108 224/375/108 -f 229/376/130 237/368/130 238/377/130 -f 223/378/133 231/366/133 232/344/133 -f 230/379/106 236/369/106 237/368/106 -f 186/380/106 239/311/106 196/381/106 -f 184/382/108 242/282/108 241/309/108 -f 209/383/106 244/384/106 210/385/106 -f 211/386/108 246/387/108 212/388/108 -f 186/380/106 244/384/106 240/277/106 -f 184/382/108 245/389/108 211/386/108 -f 198/390/108 246/387/108 242/282/108 -f 196/381/106 243/391/106 209/383/106 -f 248/392/108 249/393/108 250/394/108 -f 211/395/120 250/394/120 249/393/120 -f 184/396/109 248/392/109 198/397/109 -f 198/398/134 250/394/134 212/399/134 -f 251/400/106 254/336/106 252/335/106 -f 210/401/120 253/402/120 209/403/120 -f 196/404/109 252/335/109 186/405/109 -f 196/406/134 253/402/134 251/400/134 -f 279/407/106 282/408/106 280/409/106 -f 283/410/135 286/411/135 284/412/135 -f 285/413/136 290/414/136 286/411/136 -f 287/415/137 290/414/137 289/416/137 -f 283/417/138 288/418/138 287/419/138 -f 285/420/120 287/421/120 289/422/120 -f 288/418/109 286/411/109 290/414/109 -f 301/423/139 297/424/139 305/425/139 -f 312/426/108 314/427/108 311/428/108 -f 311/429/140 282/430/140 281/431/140 -f 313/432/141 279/433/141 280/434/141 -f 314/435/142 280/434/142 282/430/142 -f 312/436/143 281/431/143 279/433/143 -f 341/437/144 340/438/144 339/439/144 -f 345/440/145 344/441/145 343/442/145 -f 345/443/146 350/444/146 346/445/146 -f 347/446/147 350/444/147 349/447/147 -f 343/448/148 348/449/148 347/450/148 -f 345/440/109 347/451/109 349/452/109 -f 348/449/120 346/445/120 350/444/120 -f 361/453/149 357/454/149 365/455/149 -f 372/456/150 374/457/150 371/458/150 -f 371/459/151 342/460/151 341/461/151 -f 373/462/152 339/463/152 340/464/152 -f 374/465/153 340/464/153 342/460/153 -f 372/466/154 341/461/154 339/463/154 -f 376/467/155 377/468/155 375/469/155 -f 378/470/156 381/471/156 377/468/156 -f 382/472/120 386/473/120 383/474/120 -f 379/475/157 376/467/157 375/469/157 -f 378/476/155 391/477/155 392/478/155 -f 386/473/157 389/479/157 390/480/157 -f 382/472/156 384/481/156 381/482/156 -f 380/483/157 385/484/157 386/473/157 -f 388/485/158 390/480/158 389/479/158 -f 382/486/158 394/487/158 380/488/158 -f 383/489/156 388/485/156 384/490/156 -f 393/491/120 391/477/120 394/487/120 -f 396/492/120 397/493/120 395/494/120 -f 387/495/158 398/496/158 390/497/158 -f 380/498/157 391/477/157 376/499/157 -f 387/500/156 395/494/156 397/493/156 -f 382/501/156 392/478/156 393/491/156 -f 390/502/157 396/492/157 386/503/157 -f 386/504/155 395/494/155 383/505/155 -f 399/506/159 402/507/159 400/508/159 -f 405/509/160 402/507/160 401/510/160 -f 406/511/120 410/512/120 404/513/120 -f 399/506/161 404/513/161 403/514/161 -f 416/515/159 400/516/159 402/517/159 -f 410/512/161 413/518/161 409/519/161 -f 408/520/160 406/511/160 405/521/160 -f 410/512/161 403/514/161 404/513/161 -f 413/518/162 411/522/162 412/523/162 -f 418/524/162 406/525/162 404/526/162 -f 412/523/160 407/527/160 408/528/160 -f 418/524/120 416/515/120 417/529/120 -f 419/530/120 422/531/120 420/532/120 -f 414/533/162 421/534/162 411/535/162 -f 400/536/161 418/524/161 404/537/161 -f 421/534/160 407/538/160 411/539/160 -f 417/529/160 402/540/160 406/541/160 -f 420/532/161 414/542/161 410/543/161 -f 419/530/159 410/544/159 407/545/159 -f 424/546/163 425/547/163 423/548/163 -f 426/549/164 429/550/164 425/547/164 -f 430/551/120 434/552/120 431/553/120 -f 427/554/165 424/546/165 423/548/165 -f 426/555/163 439/556/163 440/557/163 -f 434/552/165 437/558/165 438/559/165 -f 430/551/164 432/560/164 429/561/164 -f 428/562/165 433/563/165 434/552/165 -f 436/564/166 438/559/166 437/558/166 -f 430/565/166 442/566/166 428/567/166 -f 431/568/164 436/564/164 432/569/164 -f 441/570/120 439/556/120 442/566/120 -f 443/571/120 446/572/120 445/573/120 -f 438/574/166 445/573/166 446/572/166 -f 428/575/165 439/556/165 424/576/165 -f 435/577/164 443/571/164 445/573/164 -f 430/578/164 440/557/164 441/570/164 -f 438/579/165 444/580/165 434/581/165 -f 434/582/163 443/571/163 431/583/163 -f 447/584/167 450/585/167 448/586/167 -f 453/587/168 450/585/168 449/588/168 -f 455/589/169 452/590/169 454/591/169 -f 451/592/170 448/586/170 452/590/170 -f 450/593/167 463/594/167 448/595/167 -f 458/596/170 461/597/170 457/598/170 -f 456/599/168 454/591/168 453/600/168 -f 452/590/170 457/598/170 451/592/170 -f 461/597/171 459/601/171 460/602/171 -f 466/603/171 454/604/171 452/605/171 -f 456/606/168 459/601/168 455/607/168 -f 466/603/169 464/608/169 465/609/169 -f 469/610/169 468/611/169 467/612/169 -f 470/613/171 459/614/171 462/615/171 -f 463/594/170 452/616/170 448/617/170 -f 459/618/168 467/612/168 455/619/168 -f 454/620/168 464/608/168 450/621/168 -f 468/611/170 462/622/170 458/623/170 -f 467/612/167 458/624/167 455/625/167 -f 451/592/172 456/599/172 453/587/172 -f 472/626/173 473/627/173 471/628/173 -f 474/629/174 477/630/174 473/627/174 -f 476/631/175 479/632/175 478/633/175 -f 476/631/176 471/628/176 475/634/176 -f 472/635/173 488/636/173 474/637/173 -f 481/638/176 486/639/176 482/640/176 -f 478/633/174 480/641/174 477/642/174 -f 475/634/176 482/640/176 476/631/176 -f 484/643/177 486/639/177 485/644/177 -f 476/645/177 489/646/177 490/647/177 -f 479/648/174 484/643/174 480/649/174 -f 488/636/175 490/647/175 489/646/175 -f 492/650/175 493/651/175 491/652/175 -f 483/653/177 494/654/177 486/655/177 -f 476/656/176 487/657/176 472/658/176 -f 479/659/174 493/651/174 483/660/174 -f 474/661/174 489/646/174 478/662/174 -f 486/663/176 492/650/176 482/664/176 -f 482/665/173 491/652/173 479/666/173 -f 132/205/105 134/216/105 133/206/105 -f 133/208/106 134/216/106 138/209/106 -f 137/211/107 138/209/107 136/212/107 -f 136/212/108 132/205/108 131/214/108 -f 134/216/109 132/205/109 136/212/109 -f 140/217/110 142/228/110 141/218/110 -f 141/220/106 142/228/106 146/221/106 -f 146/221/111 144/225/111 143/223/111 -f 144/225/108 140/217/108 139/226/108 -f 142/228/112 140/217/112 144/225/112 -f 148/229/113 150/237/113 149/230/113 -f 149/230/106 150/237/106 154/232/106 -f 152/234/108 148/229/108 147/231/108 -f 153/236/114 151/667/114 147/231/114 -f 150/237/115 148/229/115 152/238/115 -f 156/240/113 158/250/113 157/241/113 -f 157/241/106 158/250/106 162/243/106 -f 160/245/108 156/668/108 155/246/108 -f 157/241/114 161/244/114 159/248/114 -f 158/250/115 156/668/115 160/245/115 -f 161/244/116 162/243/116 160/251/116 -f 163/253/113 164/669/113 166/254/113 -f 165/255/106 166/670/106 170/256/106 -f 168/258/108 164/671/108 163/253/108 -f 169/257/114 167/259/114 163/253/114 -f 170/260/116 168/672/116 167/259/116 -f 172/261/112 174/271/112 173/262/112 -f 173/262/106 174/271/106 178/264/106 -f 178/264/117 176/673/117 175/266/117 -f 176/267/108 172/261/108 171/263/108 -f 177/265/110 175/674/110 171/269/110 -f 176/270/111 178/264/111 174/271/111 -f 180/273/105 182/285/105 189/274/105 -f 202/276/106 239/311/106 240/277/106 -f 240/279/109 241/307/109 206/280/109 -f 242/282/108 180/675/108 188/283/108 -f 182/285/109 180/273/109 242/286/109 -f 197/288/108 199/291/108 187/289/108 -f 199/291/108 200/284/108 188/283/108 -f 192/292/118 203/676/118 204/293/118 -f 195/295/106 201/301/106 192/292/106 -f 179/296/105 187/299/105 190/297/105 -f 188/275/105 189/274/105 190/297/105 -f 189/300/106 202/276/106 201/301/106 -f 190/302/106 201/301/106 195/295/106 -f 194/304/108 199/291/108 197/288/108 -f 240/279/119 244/677/119 245/306/119 -f 195/308/120 197/678/120 179/296/120 -f 241/309/108 242/282/108 200/284/108 -f 189/300/106 182/679/106 239/311/106 -f 194/304/121 183/305/121 204/312/121 -f 207/320/124 215/339/124 216/321/124 -f 193/310/125 208/680/125 206/323/125 -f 191/278/126 240/277/126 205/324/126 -f 191/326/120 207/320/120 208/322/120 -f 243/328/109 246/681/109 245/329/109 -f 211/331/127 249/393/127 247/332/127 -f 210/334/127 186/682/127 252/335/127 -f 242/286/128 246/681/128 243/328/128 -f 216/321/107 215/339/107 221/338/107 -f 221/338/107 214/361/107 216/321/107 -f 205/324/106 213/350/106 215/340/106 -f 206/323/108 208/680/108 216/341/108 -f 226/343/106 223/683/106 232/344/106 -f 219/357/109 217/348/109 222/347/109 -f 218/346/109 220/363/109 222/347/109 -f 214/342/108 220/684/108 218/349/108 -f 205/281/129 206/280/129 218/346/129 -f 213/350/106 205/324/106 217/351/106 -f 225/353/130 226/685/130 233/345/130 -f 221/338/131 213/337/131 224/355/131 -f 219/357/132 225/359/132 224/355/132 -f 219/357/131 222/347/131 226/358/131 -f 222/347/131 221/338/131 223/356/131 -f 221/338/131 228/362/131 227/360/131 -f 222/347/132 229/364/132 228/362/132 -f 220/363/131 230/365/131 229/364/131 -f 220/363/131 214/361/131 227/360/131 -f 231/366/131 234/354/131 233/345/131 -f 235/367/131 238/377/131 237/368/131 -f 229/370/108 238/377/108 235/367/108 -f 228/372/133 235/367/133 236/369/133 -f 225/374/108 234/354/108 231/366/108 -f 229/376/130 230/686/130 237/368/130 -f 223/378/133 224/687/133 231/366/133 -f 230/379/106 227/688/106 236/369/106 -f 186/380/106 240/277/106 239/311/106 -f 184/382/108 198/390/108 242/282/108 -f 209/383/106 243/391/106 244/384/106 -f 211/386/108 245/389/108 246/387/108 -f 186/380/106 210/385/106 244/384/106 -f 184/382/108 241/309/108 245/389/108 -f 198/390/108 212/388/108 246/387/108 -f 196/381/106 239/311/106 243/391/106 -f 248/392/108 247/332/108 249/393/108 -f 211/395/120 212/689/120 250/394/120 -f 184/396/109 247/332/109 248/392/109 -f 198/398/134 248/392/134 250/394/134 -f 251/400/106 253/402/106 254/336/106 -f 210/401/120 254/336/120 253/402/120 -f 196/404/109 251/400/109 252/335/109 -f 196/406/134 209/690/134 253/402/134 -f 279/407/106 281/691/106 282/408/106 -f 283/410/135 285/420/135 286/411/135 -f 285/413/136 289/692/136 290/414/136 -f 287/415/137 288/418/137 290/414/137 -f 283/417/138 284/412/138 288/418/138 -f 285/420/120 283/410/120 287/421/120 -f 288/418/109 284/412/109 286/411/109 -f 293/693/139 291/694/139 305/425/139 -f 305/425/139 303/695/139 301/423/139 -f 301/423/139 299/696/139 297/424/139 -f 297/424/139 295/697/139 293/693/139 -f 293/693/139 305/425/139 297/424/139 -f 312/426/108 313/698/108 314/427/108 -f 311/429/140 314/435/140 282/430/140 -f 313/432/178 312/436/178 279/433/178 -f 314/435/142 313/432/142 280/434/142 -f 312/436/179 311/429/179 281/431/179 -f 341/437/144 342/699/144 340/438/144 -f 345/440/145 346/445/145 344/441/145 -f 345/443/146 349/700/146 350/444/146 -f 347/446/147 348/449/147 350/444/147 -f 343/448/148 344/441/148 348/449/148 -f 345/440/109 343/442/109 347/451/109 -f 348/449/120 344/441/120 346/445/120 -f 353/701/149 351/702/149 365/455/149 -f 365/455/149 363/703/149 361/453/149 -f 361/453/149 359/704/149 357/454/149 -f 357/454/149 355/705/149 353/701/149 -f 353/701/149 365/455/149 357/454/149 -f 372/456/150 373/706/150 374/457/150 -f 371/459/151 374/465/151 342/460/151 -f 373/462/152 372/466/152 339/463/152 -f 374/465/180 373/462/180 340/464/180 -f 372/466/181 371/459/181 341/461/181 -f 376/467/155 378/470/155 377/468/155 -f 378/470/156 382/707/156 381/471/156 -f 382/472/120 380/483/120 386/473/120 -f 379/475/157 380/483/157 376/467/157 -f 378/476/155 376/708/155 391/477/155 -f 386/473/157 385/484/157 389/479/157 -f 382/472/156 383/474/156 384/481/156 -f 380/483/157 379/475/157 385/484/157 -f 388/485/158 387/709/158 390/480/158 -f 382/486/158 393/491/158 394/487/158 -f 383/489/156 387/709/156 388/485/156 -f 393/491/120 392/478/120 391/477/120 -f 396/492/120 398/496/120 397/493/120 -f 387/495/158 397/493/158 398/496/158 -f 380/498/157 394/487/157 391/477/157 -f 387/500/156 383/710/156 395/494/156 -f 382/501/156 378/711/156 392/478/156 -f 390/502/157 398/496/157 396/492/157 -f 386/504/155 396/492/155 395/494/155 -f 399/506/159 401/510/159 402/507/159 -f 405/509/160 406/712/160 402/507/160 -f 406/511/120 407/713/120 410/512/120 -f 399/506/161 400/508/161 404/513/161 -f 416/515/159 415/714/159 400/516/159 -f 410/512/161 414/715/161 413/518/161 -f 408/520/160 407/713/160 406/511/160 -f 410/512/161 409/519/161 403/514/161 -f 413/518/162 414/715/162 411/522/162 -f 418/524/162 417/529/162 406/525/162 -f 412/523/160 411/522/160 407/527/160 -f 418/524/120 415/714/120 416/515/120 -f 419/530/120 421/534/120 422/531/120 -f 414/533/162 422/531/162 421/534/162 -f 400/536/161 415/714/161 418/524/161 -f 421/534/160 419/530/160 407/538/160 -f 417/529/160 416/515/160 402/540/160 -f 420/532/161 422/531/161 414/542/161 -f 419/530/159 420/532/159 410/544/159 -f 424/546/163 426/549/163 425/547/163 -f 426/549/164 430/716/164 429/550/164 -f 430/551/120 428/562/120 434/552/120 -f 427/554/165 428/562/165 424/546/165 -f 426/555/163 424/717/163 439/556/163 -f 434/552/165 433/563/165 437/558/165 -f 430/551/164 431/553/164 432/560/164 -f 428/562/165 427/554/165 433/563/165 -f 436/564/166 435/718/166 438/559/166 -f 430/565/166 441/570/166 442/566/166 -f 431/568/164 435/718/164 436/564/164 -f 441/570/120 440/557/120 439/556/120 -f 443/571/120 444/580/120 446/572/120 -f 438/574/166 435/719/166 445/573/166 -f 428/575/165 442/566/165 439/556/165 -f 435/577/164 431/720/164 443/571/164 -f 430/578/164 426/721/164 440/557/164 -f 438/579/165 446/572/165 444/580/165 -f 434/582/163 444/580/163 443/571/163 -f 447/584/167 449/588/167 450/585/167 -f 453/587/168 454/722/168 450/585/168 -f 455/589/169 458/596/169 452/590/169 -f 451/592/170 447/584/170 448/586/170 -f 450/593/167 464/608/167 463/594/167 -f 458/596/170 462/723/170 461/597/170 -f 456/599/168 455/589/168 454/591/168 -f 452/590/170 458/596/170 457/598/170 -f 461/597/171 462/723/171 459/601/171 -f 466/603/171 465/609/171 454/604/171 -f 456/606/168 460/602/168 459/601/168 -f 466/603/169 463/594/169 464/608/169 -f 469/610/169 470/613/169 468/611/169 -f 470/613/171 469/610/171 459/614/171 -f 463/594/170 466/603/170 452/616/170 -f 459/618/168 469/610/168 467/612/168 -f 454/620/168 465/609/168 464/608/168 -f 468/611/170 470/613/170 462/622/170 -f 467/612/167 468/611/167 458/624/167 -f 453/587/172 449/588/172 447/584/172 -f 451/592/172 457/598/172 456/599/172 -f 453/587/172 447/584/172 451/592/172 -f 460/602/172 456/599/172 457/598/172 -f 457/598/172 461/597/172 460/602/172 -f 472/626/173 474/629/173 473/627/173 -f 474/629/174 478/724/174 477/630/174 -f 476/631/175 482/640/175 479/632/175 -f 476/631/176 472/626/176 471/628/176 -f 472/635/173 487/657/173 488/636/173 -f 481/638/176 485/644/176 486/639/176 -f 478/633/174 479/632/174 480/641/174 -f 475/634/176 481/638/176 482/640/176 -f 484/643/177 483/725/177 486/639/177 -f 476/645/177 478/726/177 489/646/177 -f 479/648/174 483/725/174 484/643/174 -f 488/636/175 487/657/175 490/647/175 -f 492/650/175 494/654/175 493/651/175 -f 483/653/177 493/651/177 494/654/177 -f 476/656/176 490/647/176 487/657/176 -f 479/659/174 491/652/174 493/651/174 -f 474/661/174 488/636/174 489/646/174 -f 486/663/176 494/654/176 492/650/176 -f 482/665/173 492/650/173 491/652/173 +f 202/282/119 203/283/119 204/284/119 +f 203/285/120 205/286/120 206/287/120 +f 206/288/121 207/289/121 208/290/121 +f 207/289/122 204/291/122 208/292/122 +f 209/293/123 207/289/123 205/286/123 +f 210/294/124 211/295/124 212/296/124 +f 211/297/120 213/298/120 214/299/120 +f 213/298/125 215/300/125 214/301/125 +f 216/302/122 212/303/122 215/304/122 +f 217/305/126 216/302/126 213/298/126 +f 218/306/127 219/307/127 220/308/127 +f 219/307/120 221/309/120 222/310/120 +f 223/311/122 220/308/122 224/312/122 +f 222/313/128 220/308/128 219/307/128 +f 225/314/129 223/315/129 221/316/129 +f 226/317/127 227/318/127 228/319/127 +f 227/318/120 229/320/120 230/321/120 +f 231/322/122 228/323/122 232/324/122 +f 227/318/128 232/325/128 228/326/128 +f 233/327/129 231/322/129 229/320/129 +f 230/321/130 231/328/130 232/329/130 +f 234/330/127 235/331/127 236/332/127 +f 236/332/120 237/333/120 238/334/120 +f 239/335/122 234/330/122 240/336/122 +f 238/334/128 234/330/128 236/332/128 +f 237/337/130 240/336/130 238/334/130 +f 241/338/126 242/339/126 243/340/126 +f 242/339/120 244/341/120 245/342/120 +f 244/341/131 246/343/131 245/342/131 +f 247/344/122 243/340/122 246/345/122 +f 245/342/124 243/346/124 242/339/124 +f 247/347/125 248/348/125 241/349/125 +f 249/350/119 250/351/119 251/352/119 +f 252/353/120 253/354/120 254/355/120 +f 253/356/123 255/357/123 256/358/123 +f 257/359/122 251/360/122 258/361/122 +f 259/362/123 257/363/123 260/364/123 +f 261/365/122 262/366/122 263/367/122 +f 264/368/122 251/360/122 262/366/122 +f 265/369/132 266/370/132 267/371/132 +f 268/372/120 265/369/120 267/371/120 +f 263/373/119 269/374/119 270/375/119 +f 251/352/119 269/374/119 262/376/119 +f 250/377/120 271/378/120 269/379/120 +f 269/379/120 268/372/120 270/380/120 +f 272/381/122 261/365/122 273/382/122 +f 253/356/133 274/383/133 275/384/133 +f 268/385/134 263/373/134 270/375/134 +f 275/386/122 258/361/122 276/387/122 +f 250/377/120 260/388/120 252/353/120 +f 272/381/135 266/389/135 277/390/135 +f 265/391/136 272/392/136 277/393/136 +f 273/394/137 267/395/137 266/396/137 +f 278/397/138 279/398/138 280/399/138 +f 276/387/139 255/400/139 275/386/139 +f 254/355/140 256/401/140 278/402/140 +f 254/403/134 280/399/134 276/404/134 +f 281/405/123 274/406/123 282/407/123 +f 283/408/141 284/409/141 285/410/141 +f 286/411/141 287/412/141 288/413/141 +f 257/363/142 281/405/142 260/364/142 +f 289/414/121 290/415/121 291/416/121 +f 256/401/120 291/417/120 278/402/120 +f 255/400/122 279/418/122 292/419/122 +f 293/420/120 294/421/120 295/422/120 +f 296/423/123 297/424/123 298/425/123 +f 292/419/122 296/426/122 255/400/122 +f 256/358/143 296/423/143 298/425/143 +f 289/427/120 298/428/120 299/429/120 +f 300/430/144 295/422/144 301/431/144 +f 290/415/145 302/432/145 303/433/145 +f 299/434/146 302/432/146 289/414/146 +f 299/434/146 293/435/146 300/436/146 +f 297/424/146 303/433/146 293/435/146 +f 290/415/145 304/437/145 292/438/145 +f 297/424/146 305/439/146 290/415/146 +f 306/440/146 307/441/146 297/424/146 +f 306/440/146 304/437/146 308/442/146 +f 309/443/146 295/422/146 294/421/146 +f 310/444/146 311/445/146 312/446/146 +f 307/447/122 310/444/122 305/448/122 +f 305/449/147 312/446/147 304/450/147 +f 300/451/122 309/443/122 302/452/122 +f 307/453/144 311/445/144 313/454/144 +f 303/455/147 309/443/147 294/421/147 +f 308/456/120 312/446/120 311/445/120 +f 314/457/120 260/388/120 315/458/120 +f 285/459/122 257/359/122 275/386/122 +f 316/460/120 282/461/120 286/462/120 +f 283/463/122 317/464/122 318/465/122 +f 314/457/120 282/461/120 253/354/120 +f 285/459/122 274/466/122 283/463/122 +f 319/467/122 317/464/122 257/359/122 +f 315/458/120 281/468/120 316/460/120 +f 320/469/122 321/470/122 322/471/122 +f 283/472/134 322/471/134 321/470/134 +f 285/473/123 320/469/123 319/474/123 +f 319/475/148 322/471/148 318/476/148 +f 323/477/120 288/413/120 287/412/120 +f 286/478/134 324/479/134 316/480/134 +f 315/481/123 287/412/123 314/482/123 +f 315/483/148 324/479/148 323/477/148 +f 325/484/120 326/485/120 327/486/120 +f 328/487/149 329/488/149 330/489/149 +f 331/490/150 332/491/150 329/488/150 +f 333/492/151 332/491/151 334/493/151 +f 328/494/152 335/495/152 333/496/152 +f 331/497/134 333/498/134 334/499/134 +f 335/495/123 329/488/123 332/491/123 +f 336/500/153 337/501/153 338/502/153 +f 339/503/122 340/504/122 341/505/122 +f 341/506/154 326/507/154 342/508/154 +f 343/509/155 325/510/155 327/511/155 +f 340/512/156 327/511/156 326/507/156 +f 339/513/157 342/508/157 325/510/157 +f 344/514/158 346/515/158 345/516/158 +f 347/517/159 349/518/159 348/519/159 +f 347/520/160 351/521/160 350/522/160 +f 352/523/161 353/524/161 350/522/161 +f 349/525/162 352/526/162 354/527/162 +f 347/517/134 353/528/134 352/529/134 +f 354/527/123 350/522/123 351/521/123 +f 355/530/163 357/531/163 356/532/163 +f 358/533/164 360/534/164 359/535/164 +f 360/536/165 344/537/165 361/538/165 +f 362/539/166 345/540/166 346/541/166 +f 359/542/167 361/538/167 345/540/167 +f 358/543/168 346/541/168 344/537/168 +f 363/544/169 364/545/169 365/546/169 +f 366/547/170 367/548/170 364/545/170 +f 368/549/134 369/550/134 370/551/134 +f 371/552/171 363/544/171 365/546/171 +f 366/553/169 372/554/169 373/555/169 +f 369/550/171 374/556/171 375/557/171 +f 368/549/170 376/558/170 367/559/170 +f 377/560/171 378/561/171 369/550/171 +f 379/562/172 375/557/172 374/556/172 +f 368/563/172 380/564/172 377/565/172 +f 370/566/170 379/562/170 376/567/170 +f 381/568/134 372/554/134 380/564/134 +f 382/569/134 383/570/134 384/571/134 +f 385/572/172 386/573/172 375/574/172 +f 377/575/171 372/554/171 363/576/171 +f 385/577/170 384/571/170 383/570/170 +f 368/578/170 373/555/170 381/568/170 +f 375/579/171 382/569/171 369/580/171 +f 369/581/169 384/571/169 370/582/169 +f 387/583/173 388/584/173 389/585/173 +f 390/586/174 388/584/174 391/587/174 +f 392/588/134 393/589/134 394/590/134 +f 387/583/175 394/590/175 395/591/175 +f 396/592/173 389/593/173 388/594/173 +f 393/589/175 397/595/175 398/596/175 +f 399/597/174 392/588/174 390/598/174 +f 393/589/175 395/591/175 394/590/175 +f 397/595/176 400/599/176 401/600/176 +f 402/601/176 392/602/176 394/603/176 +f 401/600/174 403/604/174 399/605/174 +f 402/601/134 396/592/134 404/606/134 +f 405/607/134 406/608/134 407/609/134 +f 408/610/176 409/611/176 400/612/176 +f 389/613/175 402/601/175 394/614/175 +f 409/611/174 403/615/174 400/616/174 +f 404/606/174 388/617/174 392/618/174 +f 407/609/175 408/619/175 393/620/175 +f 405/607/173 393/621/173 403/622/173 +f 410/623/177 411/624/177 412/625/177 +f 413/626/178 414/627/178 411/624/178 +f 415/628/134 416/629/134 417/630/134 +f 418/631/179 410/623/179 412/625/179 +f 413/632/177 419/633/177 420/634/177 +f 416/629/179 421/635/179 422/636/179 +f 415/628/178 423/637/178 414/638/178 +f 424/639/179 425/640/179 416/629/179 +f 426/641/180 422/636/180 421/635/180 +f 415/642/180 427/643/180 424/644/180 +f 417/645/178 426/641/178 423/646/178 +f 428/647/134 419/633/134 427/643/134 +f 429/648/134 430/649/134 431/650/134 +f 422/651/180 431/650/180 430/649/180 +f 424/652/179 419/633/179 410/653/179 +f 432/654/178 429/648/178 431/650/178 +f 415/655/178 420/634/178 428/647/178 +f 422/656/179 433/657/179 416/658/179 +f 416/659/177 429/648/177 417/660/177 +f 434/661/181 435/662/181 436/663/181 +f 437/664/182 435/662/182 438/665/182 +f 439/666/183 440/667/183 441/668/183 +f 442/669/184 436/663/184 440/667/184 +f 435/670/181 443/671/181 436/672/181 +f 444/673/184 445/674/184 446/675/184 +f 447/676/182 441/668/182 437/677/182 +f 440/667/184 446/675/184 442/669/184 +f 445/674/185 448/678/185 449/679/185 +f 450/680/185 441/681/185 440/682/185 +f 447/683/182 448/678/182 439/684/182 +f 450/680/183 451/685/183 452/686/183 +f 453/687/183 454/688/183 455/689/183 +f 456/690/185 448/691/185 457/692/185 +f 443/671/184 440/693/184 436/694/184 +f 448/695/182 455/689/182 439/696/182 +f 441/697/182 451/685/182 435/698/182 +f 454/688/184 457/699/184 444/700/184 +f 455/689/181 444/701/181 439/702/181 +f 442/669/186 447/676/186 437/664/186 +f 458/703/187 459/704/187 460/705/187 +f 461/706/188 462/707/188 459/704/188 +f 463/708/189 464/709/189 465/710/189 +f 463/708/190 460/705/190 466/711/190 +f 458/712/187 467/713/187 461/714/187 +f 468/715/190 469/716/190 470/717/190 +f 465/710/188 471/718/188 462/719/188 +f 466/711/190 470/717/190 463/708/190 +f 472/720/191 469/716/191 473/721/191 +f 463/722/191 474/723/191 475/724/191 +f 464/725/188 472/720/188 471/726/188 +f 467/713/189 475/724/189 474/723/189 +f 476/727/189 477/728/189 478/729/189 +f 479/730/191 480/731/191 469/732/191 +f 463/733/190 481/734/190 458/735/190 +f 464/736/188 477/728/188 479/737/188 +f 461/738/188 474/723/188 465/739/188 +f 469/740/190 476/727/190 470/741/190 +f 470/742/187 478/729/187 464/743/187 +f 202/282/119 209/293/119 203/283/119 +f 203/285/120 209/293/120 205/286/120 +f 206/288/121 205/286/121 207/289/121 +f 207/289/122 202/282/122 204/291/122 +f 209/293/123 202/282/123 207/289/123 +f 210/294/124 217/305/124 211/295/124 +f 211/297/120 217/305/120 213/298/120 +f 213/298/125 216/302/125 215/300/125 +f 216/302/122 210/294/122 212/303/122 +f 217/305/126 210/294/126 216/302/126 +f 218/306/127 225/314/127 219/307/127 +f 219/307/120 225/314/120 221/309/120 +f 223/311/122 218/306/122 220/308/122 +f 222/313/128 224/744/128 220/308/128 +f 225/314/129 218/306/129 223/315/129 +f 226/317/127 233/327/127 227/318/127 +f 227/318/120 233/327/120 229/320/120 +f 231/322/122 226/745/122 228/323/122 +f 227/318/128 230/321/128 232/325/128 +f 233/327/129 226/745/129 231/322/129 +f 230/321/130 229/320/130 231/328/130 +f 234/330/127 482/746/127 235/331/127 +f 236/332/120 235/747/120 237/333/120 +f 239/335/122 482/748/122 234/330/122 +f 238/334/128 240/336/128 234/330/128 +f 237/337/130 239/749/130 240/336/130 +f 241/338/126 248/348/126 242/339/126 +f 242/339/120 248/348/120 244/341/120 +f 244/341/131 247/750/131 246/343/131 +f 247/344/122 241/338/122 243/340/122 +f 245/342/124 246/751/124 243/346/124 +f 247/347/125 244/341/125 248/348/125 +f 249/350/119 259/362/119 250/351/119 +f 252/353/120 260/388/120 253/354/120 +f 253/356/123 275/384/123 255/357/123 +f 257/359/122 249/752/122 251/360/122 +f 259/362/123 249/350/123 257/363/123 +f 261/365/122 264/368/122 262/366/122 +f 264/368/122 258/361/122 251/360/122 +f 265/369/132 277/753/132 266/370/132 +f 268/372/120 271/378/120 265/369/120 +f 263/373/119 262/376/119 269/374/119 +f 251/352/119 250/351/119 269/374/119 +f 250/377/120 252/353/120 271/378/120 +f 269/379/120 271/378/120 268/372/120 +f 272/381/122 264/368/122 261/365/122 +f 253/356/133 282/754/133 274/383/133 +f 268/385/134 261/755/134 263/373/134 +f 275/386/122 257/359/122 258/361/122 +f 250/377/120 259/756/120 260/388/120 +f 272/381/135 273/382/135 266/389/135 +f 278/397/138 291/416/138 279/398/138 +f 276/387/139 280/757/139 255/400/139 +f 254/355/140 253/354/140 256/401/140 +f 254/403/134 278/397/134 280/399/134 +f 281/405/123 317/758/123 274/406/123 +f 283/408/141 321/470/141 284/409/141 +f 286/411/141 314/759/141 287/412/141 +f 257/363/142 317/758/142 281/405/142 +f 279/398/121 291/416/121 290/415/121 +f 290/415/121 292/438/121 279/398/121 +f 256/401/120 289/427/120 291/417/120 +f 255/400/122 280/757/122 279/418/122 +f 293/420/120 303/760/120 294/421/120 +f 299/434/123 298/425/123 297/424/123 +f 296/423/123 306/440/123 297/424/123 +f 292/419/122 306/761/122 296/426/122 +f 256/358/143 255/357/143 296/423/143 +f 289/427/120 256/401/120 298/428/120 +f 300/430/144 293/762/144 295/422/144 +f 290/415/146 289/414/146 302/432/146 +f 299/434/146 300/436/146 302/432/146 +f 299/434/146 297/424/146 293/435/146 +f 297/424/146 290/415/146 303/433/146 +f 290/415/146 305/439/146 304/437/146 +f 297/424/146 307/441/146 305/439/146 +f 306/440/146 308/442/146 307/441/146 +f 306/440/146 292/438/146 304/437/146 +f 309/443/146 301/431/146 295/422/146 +f 310/444/146 313/454/146 311/445/146 +f 307/447/122 313/454/122 310/444/122 +f 305/449/147 310/444/147 312/446/147 +f 300/451/122 301/431/122 309/443/122 +f 307/453/144 308/763/144 311/445/144 +f 303/455/147 302/764/147 309/443/147 +f 308/456/120 304/765/120 312/446/120 +f 314/457/120 253/354/120 260/388/120 +f 285/459/122 319/467/122 257/359/122 +f 316/460/120 281/468/120 282/461/120 +f 283/463/122 274/466/122 317/464/122 +f 314/457/120 286/462/120 282/461/120 +f 285/459/122 275/386/122 274/466/122 +f 319/467/122 318/465/122 317/464/122 +f 315/458/120 260/388/120 281/468/120 +f 320/469/122 284/409/122 321/470/122 +f 283/472/134 318/766/134 322/471/134 +f 285/473/123 284/409/123 320/469/123 +f 319/475/148 320/469/148 322/471/148 +f 323/477/120 324/479/120 288/413/120 +f 286/478/134 288/413/134 324/479/134 +f 315/481/123 323/477/123 287/412/123 +f 315/483/148 316/767/148 324/479/148 +f 325/484/120 342/768/120 326/485/120 +f 328/487/149 331/497/149 329/488/149 +f 331/490/150 334/769/150 332/491/150 +f 333/492/151 335/495/151 332/491/151 +f 328/494/152 330/489/152 335/495/152 +f 331/497/134 328/487/134 333/498/134 +f 335/495/123 330/489/123 329/488/123 +f 483/770/153 484/771/153 338/502/153 +f 338/502/153 485/772/153 336/500/153 +f 336/500/153 486/773/153 337/501/153 +f 337/501/153 487/774/153 483/770/153 +f 483/770/153 338/502/153 337/501/153 +f 339/503/122 343/775/122 340/504/122 +f 341/506/154 340/512/154 326/507/154 +f 343/509/192 339/513/192 325/510/192 +f 340/512/156 343/509/156 327/511/156 +f 339/513/157 341/506/157 342/508/157 +f 344/514/158 345/516/158 361/776/158 +f 347/517/159 348/519/159 351/521/159 +f 347/520/160 350/522/160 353/777/160 +f 352/523/161 350/522/161 354/527/161 +f 349/525/162 354/527/162 348/519/162 +f 347/517/134 352/529/134 349/518/134 +f 354/527/123 351/521/123 348/519/123 +f 488/778/163 357/531/163 489/779/163 +f 357/531/163 355/530/163 490/780/163 +f 355/530/163 356/532/163 491/781/163 +f 356/532/163 488/778/163 492/782/163 +f 488/778/163 356/532/163 357/531/163 +f 358/533/164 359/535/164 362/783/164 +f 360/536/165 361/538/165 359/542/165 +f 362/539/166 346/541/166 358/543/166 +f 359/542/167 345/540/167 362/539/167 +f 358/543/193 344/537/193 360/536/193 +f 363/544/169 366/547/169 364/545/169 +f 366/547/170 368/784/170 367/548/170 +f 368/549/134 377/560/134 369/550/134 +f 371/552/171 377/560/171 363/544/171 +f 366/553/169 363/785/169 372/554/169 +f 369/550/171 378/561/171 374/556/171 +f 368/549/170 370/551/170 376/558/170 +f 377/560/171 371/552/171 378/561/171 +f 379/562/172 385/786/172 375/557/172 +f 368/563/172 381/568/172 380/564/172 +f 370/566/170 385/786/170 379/562/170 +f 381/568/134 373/555/134 372/554/134 +f 382/569/134 386/573/134 383/570/134 +f 385/572/172 383/570/172 386/573/172 +f 377/575/171 380/564/171 372/554/171 +f 385/577/170 370/787/170 384/571/170 +f 368/578/170 366/788/170 373/555/170 +f 375/579/171 386/573/171 382/569/171 +f 369/581/169 382/569/169 384/571/169 +f 387/583/173 391/587/173 388/584/173 +f 390/586/174 392/789/174 388/584/174 +f 392/588/134 403/790/134 393/589/134 +f 387/583/175 389/585/175 394/590/175 +f 396/592/173 493/791/173 389/593/173 +f 393/589/175 408/792/175 397/595/175 +f 399/597/174 403/790/174 392/588/174 +f 393/589/175 398/596/175 395/591/175 +f 397/595/176 408/792/176 400/599/176 +f 402/601/176 404/606/176 392/602/176 +f 401/600/174 400/599/174 403/604/174 +f 402/601/134 493/791/134 396/592/134 +f 405/607/134 409/611/134 406/608/134 +f 408/610/176 406/608/176 409/611/176 +f 389/613/175 493/791/175 402/601/175 +f 409/611/174 405/607/174 403/615/174 +f 404/606/174 396/592/174 388/617/174 +f 407/609/175 406/608/175 408/619/175 +f 405/607/173 407/609/173 393/621/173 +f 410/623/177 413/626/177 411/624/177 +f 413/626/178 415/793/178 414/627/178 +f 415/628/134 424/639/134 416/629/134 +f 418/631/179 424/639/179 410/623/179 +f 413/632/177 410/794/177 419/633/177 +f 416/629/179 425/640/179 421/635/179 +f 415/628/178 417/630/178 423/637/178 +f 424/639/179 418/631/179 425/640/179 +f 426/641/180 432/795/180 422/636/180 +f 415/642/180 428/647/180 427/643/180 +f 417/645/178 432/795/178 426/641/178 +f 428/647/134 420/634/134 419/633/134 +f 429/648/134 433/657/134 430/649/134 +f 422/651/180 432/796/180 431/650/180 +f 424/652/179 427/643/179 419/633/179 +f 432/654/178 417/797/178 429/648/178 +f 415/655/178 413/798/178 420/634/178 +f 422/656/179 430/649/179 433/657/179 +f 416/659/177 433/657/177 429/648/177 +f 434/661/181 438/665/181 435/662/181 +f 437/664/182 441/799/182 435/662/182 +f 439/666/183 444/673/183 440/667/183 +f 442/669/184 434/661/184 436/663/184 +f 435/670/181 451/685/181 443/671/181 +f 444/673/184 457/800/184 445/674/184 +f 447/676/182 439/666/182 441/668/182 +f 440/667/184 444/673/184 446/675/184 +f 445/674/185 457/800/185 448/678/185 +f 450/680/185 452/686/185 441/681/185 +f 447/683/182 449/679/182 448/678/182 +f 450/680/183 443/671/183 451/685/183 +f 453/687/183 456/690/183 454/688/183 +f 456/690/185 453/687/185 448/691/185 +f 443/671/184 450/680/184 440/693/184 +f 448/695/182 453/687/182 455/689/182 +f 441/697/182 452/686/182 451/685/182 +f 454/688/184 456/690/184 457/699/184 +f 455/689/181 454/688/181 444/701/181 +f 437/664/186 438/665/186 434/661/186 +f 442/669/186 446/675/186 447/676/186 +f 437/664/186 434/661/186 442/669/186 +f 449/679/186 447/676/186 446/675/186 +f 446/675/186 445/674/186 449/679/186 +f 458/703/187 461/706/187 459/704/187 +f 461/706/188 465/801/188 462/707/188 +f 463/708/189 470/717/189 464/709/189 +f 463/708/190 458/703/190 460/705/190 +f 458/712/187 481/734/187 467/713/187 +f 468/715/190 473/721/190 469/716/190 +f 465/710/188 464/709/188 471/718/188 +f 466/711/190 468/715/190 470/717/190 +f 472/720/191 479/802/191 469/716/191 +f 463/722/191 465/803/191 474/723/191 +f 464/725/188 479/802/188 472/720/188 +f 467/713/189 481/734/189 475/724/189 +f 476/727/189 480/731/189 477/728/189 +f 479/730/191 477/728/191 480/731/191 +f 463/733/190 475/724/190 481/734/190 +f 464/736/188 478/729/188 477/728/188 +f 461/738/188 467/713/188 474/723/188 +f 469/740/190 480/731/190 476/727/190 +f 470/742/187 476/727/187 478/729/187 s 1 -f 291/727/182 294/728/183 292/729/184 -f 293/730/185 296/731/186 294/728/183 -f 297/732/187 296/731/186 295/733/188 -f 299/734/189 298/735/190 297/732/187 -f 301/736/191 300/737/192 299/734/189 -f 303/738/193 302/739/194 301/736/191 -f 303/740/193 306/741/195 304/742/196 -f 305/743/197 292/729/184 306/741/195 -f 351/744/198 354/745/199 352/746/200 -f 353/747/201 356/748/202 354/745/199 -f 357/749/203 356/748/202 355/750/204 -f 359/751/205 358/752/206 357/749/203 -f 361/753/207 360/754/208 359/751/205 -f 363/755/209 362/756/210 361/753/207 -f 363/757/209 366/758/211 364/759/212 -f 365/760/213 352/746/200 366/758/211 -f 291/727/182 293/730/185 294/728/183 -f 293/730/185 295/733/188 296/731/186 -f 297/732/187 298/735/190 296/731/186 -f 299/734/189 300/737/192 298/735/190 -f 301/736/191 302/739/194 300/737/192 -f 303/738/193 304/761/196 302/739/194 -f 303/740/193 305/743/197 306/741/195 -f 305/743/197 291/727/182 292/729/184 -f 351/744/198 353/747/201 354/745/199 -f 353/747/201 355/750/204 356/748/202 -f 357/749/203 358/752/206 356/748/202 -f 359/751/205 360/754/208 358/752/206 -f 361/753/207 362/756/210 360/754/208 -f 363/755/209 364/762/212 362/756/210 -f 363/757/209 365/760/213 366/758/211 -f 365/760/213 351/744/198 352/746/200 -o LeftFoot -v -0.145070 24.067028 2.136320 -v 4.121621 24.067026 2.136320 -v -0.145070 24.067028 -2.130370 -v -0.145070 22.765120 -2.130370 -v 4.121621 24.067026 -2.130370 -v 4.121620 22.765116 -2.130370 -v 1.988274 21.575682 -3.487657 -v 1.988275 24.067026 -3.487657 -vt 0.144578 0.823529 -vt 0.180723 0.941176 -vt 0.144578 0.941176 -vt 0.048193 0.941176 -vt 0.144578 0.941176 -vt 0.096386 0.970588 -vt 0.048193 0.941176 -vt 0.012048 0.941176 -vt 0.048193 0.823529 -vt 0.144578 1.000000 -vt 0.048193 1.000000 -vt 0.000000 1.000000 -vt 0.096386 0.970588 -vt 0.192771 1.000000 -vn 1.0000 -0.0000 0.0000 -vn -0.0000 -0.7521 0.6591 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.5368 0.0000 -0.8437 -vn -0.5368 0.0000 -0.8437 -usemtl None -s off -f 496/763/214 500/764/214 499/765/214 -f 500/766/215 498/767/215 501/768/215 -f 497/769/216 498/770/216 495/771/216 -f 499/765/217 495/771/217 496/763/217 -f 500/764/218 502/772/218 499/765/218 -f 498/770/219 502/773/219 501/774/219 -f 497/769/217 499/765/217 502/775/217 -f 499/765/217 497/769/217 495/771/217 -f 500/764/218 501/776/218 502/772/218 -f 498/770/219 497/769/219 502/773/219 -o LeftLeg -v 1.889860 19.857271 -1.987077 -v 1.889860 19.673222 -2.313624 -v 1.889860 19.480209 -1.987078 -v 2.778606 19.489141 -1.987077 -v 2.648463 19.358999 -2.313624 -v 2.511982 19.222517 -1.987077 -v 3.146736 18.600395 -1.987078 -v 2.962687 18.600395 -2.313624 -v 2.769673 18.600395 -1.987078 -v 2.778605 17.711649 -1.987078 -v 2.648463 17.841791 -2.313624 -v 2.511982 17.978273 -1.987078 -v 1.889860 17.343519 -1.987078 -v 1.889860 17.527569 -2.313624 -v 1.889860 17.720581 -1.987078 -v 1.001114 17.711649 -1.987078 -v 1.131257 17.841791 -2.313624 -v 1.267738 17.978273 -1.987078 -v 0.632984 18.600395 -1.987078 -v 0.817033 18.600395 -2.313624 -v 1.010046 18.600395 -1.987078 -v 1.001114 19.489140 -1.987078 -v 1.131256 19.358997 -2.313624 -v 1.267738 19.222517 -1.987078 -v -0.033751 18.711559 2.026670 -v -0.033751 18.475336 2.026670 -v 4.013639 18.711559 2.026670 -v 4.013639 18.475336 2.026670 -v -0.033751 18.998186 -2.020720 -v -0.033751 18.188709 -2.020720 -v 4.013639 18.998186 -2.020720 -v 4.013639 18.188707 -2.020720 -v 0.900512 18.998186 -2.020720 -v 2.857196 18.188707 -2.020720 -v 0.900512 18.188709 -2.020720 -v 2.857196 18.998186 -2.020720 +f 484/804/194 494/805/195 495/806/196 +f 483/807/197 496/808/198 494/805/195 +f 337/809/199 496/808/198 487/810/200 +f 486/811/201 497/812/202 337/809/199 +f 336/813/203 498/814/204 486/811/201 +f 485/815/205 499/816/206 336/813/203 +f 485/817/205 500/818/207 501/819/208 +f 338/820/209 495/806/196 500/818/207 +f 489/821/210 503/822/211 502/823/212 +f 488/824/213 502/823/212 504/825/214 +f 356/826/215 492/827/216 504/825/214 +f 491/828/217 356/826/215 505/829/218 +f 355/830/219 491/828/217 506/831/220 +f 490/832/221 355/830/219 507/833/222 +f 490/834/221 509/835/223 508/836/224 +f 357/837/225 508/836/224 503/822/211 +f 484/804/194 483/807/197 494/805/195 +f 483/807/197 487/810/200 496/808/198 +f 337/809/199 497/812/202 496/808/198 +f 486/811/201 498/814/204 497/812/202 +f 336/813/203 499/816/206 498/814/204 +f 485/815/205 501/838/208 499/816/206 +f 485/817/205 338/820/209 500/818/207 +f 338/820/209 484/804/194 495/806/196 +f 489/821/210 502/823/212 488/824/213 +f 488/824/213 504/825/214 492/827/216 +f 356/826/215 504/825/214 505/829/218 +f 491/828/217 505/829/218 506/831/220 +f 355/830/219 506/831/220 507/833/222 +f 490/832/221 507/833/222 509/839/223 +f 490/834/221 508/836/224 357/837/225 +f 357/837/225 503/822/211 489/821/210 +o RightLeg +v -1.221394 19.489141 -1.987076 +v -2.110140 19.673222 -2.313622 +v -2.110140 19.857271 -1.987076 +v -1.351537 19.358999 -2.313622 +v -2.110140 19.480209 -1.987076 +v -0.853264 18.600395 -1.987076 +v -1.037313 18.600395 -2.313622 +v -1.488018 19.222517 -1.987076 +v -1.221395 17.711649 -1.987076 +v -1.351537 17.841791 -2.313622 +v -1.230327 18.600395 -1.987076 +v -2.110140 17.527569 -2.313622 +v -1.488018 17.978273 -1.987076 +v -2.998886 17.711649 -1.987076 +v -2.110140 17.343519 -1.987076 +v -2.868743 17.841791 -2.313622 +v -2.110140 17.720581 -1.987076 +v -3.367016 18.600395 -1.987076 +v -3.182967 18.600395 -2.313622 +v -2.732262 17.978273 -1.987076 +v -2.868744 19.358997 -2.313622 +v -2.989954 18.600395 -1.987076 +v -2.998886 19.489140 -1.987076 +v -2.732262 19.222517 -1.987076 +v -4.033751 18.475336 2.026671 +v 0.013640 18.711559 2.026671 +v -4.033751 18.711559 2.026671 +v 0.013640 18.475336 2.026671 +v 0.013639 18.998186 -2.020719 +v -3.099488 18.188709 -2.020719 +v -4.033751 18.998186 -2.020719 +v -3.099488 18.998186 -2.020719 +v -4.033751 18.188709 -2.020719 +v 0.013639 18.188707 -2.020719 +v -1.142804 18.998186 -2.020719 +v -1.142804 18.188707 -2.020719 vt 0.144578 0.794118 vt 0.192771 0.764706 vt 0.192771 0.794118 @@ -2285,27 +2413,27 @@ vt 0.253012 0.735294 vt 0.204819 0.735294 vt 0.192771 0.794118 vn 0.6160 0.6160 -0.4910 -vn 0.0000 0.2170 -0.9761 -vn 0.0000 0.8712 -0.4910 -vn 0.1535 0.1535 -0.9761 +vn 0.0000 0.2171 -0.9762 +vn -0.0000 0.8712 -0.4910 +vn 0.1535 0.1535 -0.9762 vn 0.0000 -0.8609 -0.5088 vn 0.8712 0.0000 -0.4910 -vn 0.2171 0.0000 -0.9761 +vn 0.2171 -0.0000 -0.9762 vn -0.6087 -0.6087 -0.5088 vn 0.6160 -0.6160 -0.4910 -vn 0.1535 -0.1535 -0.9761 -vn -0.8608 0.0000 -0.5088 -vn 0.0000 -0.2170 -0.9761 +vn 0.1535 -0.1535 -0.9762 +vn -0.8609 -0.0000 -0.5088 +vn -0.0000 -0.2171 -0.9762 vn -0.6087 0.6087 -0.5088 vn -0.6160 -0.6160 -0.4910 -vn 0.0000 -0.8712 -0.4910 -vn -0.1535 -0.1535 -0.9761 -vn 0.0000 0.8609 -0.5088 +vn -0.0000 -0.8712 -0.4910 +vn -0.1535 -0.1535 -0.9762 +vn -0.0000 0.8609 -0.5088 vn -0.8712 0.0000 -0.4910 -vn -0.2171 0.0000 -0.9761 +vn -0.2171 0.0000 -0.9762 vn 0.6087 0.6087 -0.5088 -vn -0.1535 0.1535 -0.9761 -vn 0.8608 0.0000 -0.5088 +vn -0.1535 0.1535 -0.9762 +vn 0.8609 0.0000 -0.5088 vn -0.6160 0.6160 -0.4910 vn 0.6087 -0.6087 -0.5088 vn -0.7225 0.0000 0.6914 @@ -2313,221 +2441,220 @@ vn 0.7225 0.0000 0.6914 vn 0.6906 0.0000 -0.7232 vn 0.0000 0.0000 -1.0000 vn -0.6906 0.0000 -0.7232 -usemtl None s 1 -f 506/777/220 504/778/221 503/779/222 -f 507/780/223 505/781/224 504/778/221 -f 509/782/225 507/780/223 506/777/220 -f 510/783/226 508/784/227 507/780/223 -f 512/785/228 510/783/226 509/782/225 -f 513/786/229 511/787/230 510/783/226 -f 512/785/228 516/788/231 513/786/229 -f 516/788/231 514/789/232 513/786/229 -f 518/790/233 516/791/231 515/792/234 -f 519/793/235 517/794/236 516/791/231 -f 521/795/237 519/793/235 518/790/233 -f 522/796/238 520/797/239 519/793/235 -f 521/795/237 525/798/240 522/796/238 -f 525/798/240 523/799/241 522/796/238 -f 503/779/222 525/798/240 524/800/242 -f 504/778/221 526/801/243 525/798/240 -f 528/802/244 529/803/245 527/804/244 -f 530/805/245 533/806/246 529/803/245 -f 537/807/247 531/808/248 535/809/247 -f 532/810/248 527/804/244 531/808/248 -f 534/811/246 538/812/247 533/806/246 -f 506/777/220 507/780/223 504/778/221 -f 507/780/223 508/813/227 505/781/224 -f 509/782/225 510/783/226 507/780/223 -f 510/783/226 511/814/230 508/784/227 -f 512/785/228 513/786/229 510/783/226 -f 513/786/229 514/815/232 511/787/230 -f 512/785/228 515/816/234 516/788/231 -f 516/788/231 517/817/236 514/789/232 -f 518/790/233 519/793/235 516/791/231 -f 519/793/235 520/818/239 517/794/236 -f 521/795/237 522/796/238 519/793/235 -f 522/796/238 523/819/241 520/797/239 -f 521/795/237 524/800/242 525/798/240 -f 525/798/240 526/820/243 523/799/241 -f 503/779/222 504/778/221 525/798/240 -f 504/778/221 505/821/224 526/801/243 -f 528/802/244 530/805/245 529/803/245 -f 530/805/245 534/811/246 533/806/246 -f 537/807/247 532/810/248 531/808/248 -f 532/810/248 528/802/244 527/804/244 -f 534/811/246 536/822/247 538/812/247 -o LeftArm -v 3.848080 -1.385496 2.089541 -v 3.848082 2.482785 2.089541 -v 6.707815 -1.385498 2.089541 -v 6.707817 2.482783 2.089541 -v 3.848080 -1.385496 -2.083592 -v 3.848082 2.482785 -2.083592 -v 6.707815 -1.385498 -2.083592 -v 6.707817 2.482783 -2.083592 -v 5.563126 4.039324 2.089541 -v 8.399313 4.039323 2.089541 -v 8.399311 0.171042 2.089541 -v 8.399311 0.171042 -2.083592 -v 8.399313 4.039323 -2.083592 -v 5.563126 4.039324 -2.083592 -v 5.701231 -2.606927 1.081455 -v 4.854661 -2.606926 1.081455 -v 4.854661 -2.606926 -1.075505 -v 5.701231 -2.606927 -1.075505 -v 9.538965 0.957276 1.081455 -v 9.538965 0.957276 -1.075506 -v 9.538967 3.253084 -1.075506 -v 9.538967 3.253084 1.081455 -v 7.980860 -1.823903 -1.075506 -v 8.611074 -1.243971 -1.075506 -v 8.611074 -1.243970 1.081455 -v 7.980860 -1.823903 1.081455 -v 4.476345 -2.606926 1.567900 -v 6.079547 -2.606927 1.567900 -v 4.476345 -2.606926 -1.561950 -v 6.079547 -2.606927 -1.561950 -v 9.538965 0.439518 -1.561950 -v 9.538965 0.439518 1.567899 -v 9.538967 3.770842 -1.561950 -v 9.538967 3.770842 1.567899 -v 8.930279 -0.950234 -1.561950 -v 7.661656 -2.117639 -1.561950 -v 8.930279 -0.950234 1.567900 -v 7.661656 -2.117639 1.567900 -v 5.701231 -4.274506 1.081455 -v 4.854660 -4.274506 1.081455 -v 4.854660 -4.274506 -1.075505 -v 5.701231 -4.274506 -1.075505 -v 11.094896 0.957275 1.081455 -v 11.094896 0.957275 -1.075506 -v 11.094898 3.253083 -1.075506 -v 11.094898 3.253083 1.081455 -v 8.994442 -3.089109 -1.075506 -v 9.624655 -2.509177 -1.075506 -v 9.624655 -2.509176 1.081455 -v 8.994442 -3.089109 1.081455 -v 5.889863 7.776278 1.993027 -v 5.889863 7.592228 2.319573 -v 5.889863 7.399215 1.993027 -v 6.778609 7.408146 1.993027 -v 6.648466 7.278004 2.319573 -v 6.511984 7.141523 1.993027 -v 7.146739 6.519400 1.993027 -v 6.962690 6.519400 2.319573 -v 6.769676 6.519400 1.993027 -v 6.778607 5.630654 1.993027 -v 6.648465 5.760797 2.319573 -v 6.511983 5.897279 1.993027 -v 5.889862 5.262525 1.993027 -v 5.889862 5.446574 2.319573 -v 5.889862 5.639588 1.993027 -v 5.001116 5.630656 1.993027 -v 5.131258 5.760798 2.319573 -v 5.267740 5.897280 1.993027 -v 4.632987 6.519403 1.993027 -v 4.817035 6.519403 2.319573 -v 5.010049 6.519402 1.993027 -v 5.001116 7.408147 1.993027 -v 5.131258 7.278005 2.319573 -v 5.267740 7.141523 1.993027 -v 3.966252 6.630567 -2.020720 -v 3.966251 6.394344 -2.020720 -v 8.013643 6.630563 -2.020720 -v 8.013641 6.394340 -2.020720 -v 3.966252 6.917194 2.026670 -v 3.966251 6.107717 2.026670 -v 8.013641 6.917191 2.026670 -v 8.013641 6.107713 2.026670 -v 4.900514 6.917193 2.026670 -v 6.857197 6.107714 2.026670 -v 4.900513 6.107715 2.026670 -v 6.857198 6.917192 2.026670 +f 510/840/226 511/841/227 512/842/228 +f 513/843/229 514/844/230 511/841/227 +f 515/845/231 513/843/229 510/840/226 +f 516/846/232 517/847/233 513/843/229 +f 518/848/234 516/846/232 515/845/231 +f 519/849/235 520/850/236 516/846/232 +f 518/848/234 521/851/237 519/849/235 +f 521/851/237 522/852/238 519/849/235 +f 523/853/239 521/854/237 524/855/240 +f 525/856/241 526/857/242 521/854/237 +f 527/858/243 525/856/241 523/853/239 +f 528/859/244 529/860/245 525/856/241 +f 527/858/243 530/861/246 528/859/244 +f 530/861/246 531/862/247 528/859/244 +f 512/842/228 530/861/246 532/863/248 +f 511/841/227 533/864/249 530/861/246 +f 534/865/250 535/866/251 536/867/250 +f 537/868/251 538/869/252 535/866/251 +f 539/870/253 540/871/254 541/872/253 +f 542/873/254 536/867/250 540/871/254 +f 543/874/252 544/875/253 538/869/252 +f 510/840/226 513/843/229 511/841/227 +f 513/843/229 517/876/233 514/844/230 +f 515/845/231 516/846/232 513/843/229 +f 516/846/232 520/877/236 517/847/233 +f 518/848/234 519/849/235 516/846/232 +f 519/849/235 522/878/238 520/850/236 +f 518/848/234 524/879/240 521/851/237 +f 521/851/237 526/880/242 522/852/238 +f 523/853/239 525/856/241 521/854/237 +f 525/856/241 529/881/245 526/857/242 +f 527/858/243 528/859/244 525/856/241 +f 528/859/244 531/882/247 529/860/245 +f 527/858/243 532/863/248 530/861/246 +f 530/861/246 533/883/249 531/862/247 +f 512/842/228 511/841/227 530/861/246 +f 511/841/227 514/884/230 533/864/249 +f 534/865/250 537/868/251 535/866/251 +f 537/868/251 543/874/252 538/869/252 +f 539/870/253 542/873/254 540/871/254 +f 542/873/254 534/865/250 536/867/250 +f 543/874/252 545/885/253 544/875/253 +o RightArm +v -6.727931 -1.385484 2.089541 +v -3.868196 -1.385486 2.089541 +v -3.868194 2.482796 2.089541 +v -3.868196 -1.385486 -2.083592 +v -6.727931 -1.385484 -2.083592 +v -6.727929 2.482797 -2.083592 +v -6.727929 2.482797 2.089541 +v -5.583236 4.039337 2.089541 +v -8.419426 0.171058 2.089541 +v -5.583236 4.039337 -2.083592 +v -3.868194 2.482796 -2.083592 +v -8.419426 0.171058 -2.083591 +v -4.874779 -4.274494 1.081455 +v -5.721350 -4.274494 1.081455 +v -5.721350 -4.274494 -1.075505 +v -4.874778 -2.606915 1.081455 +v -5.721349 -2.606914 1.081455 +v -4.874779 -4.274494 -1.075505 +v -4.874778 -2.606915 -1.075505 +v -5.721349 -2.606914 -1.075505 +v -11.115009 0.957294 -1.075505 +v -11.115009 0.957294 1.081455 +v -11.115007 3.253102 1.081455 +v -9.559078 0.957293 -1.075505 +v -9.559078 0.957293 1.081455 +v -11.115007 3.253102 -1.075505 +v -9.559076 3.253101 -1.075505 +v -9.559076 3.253101 1.081455 +v -9.644773 -2.509160 -1.075505 +v -9.014559 -3.089092 -1.075505 +v -9.014559 -3.089093 1.081455 +v -8.631191 -1.243954 -1.075505 +v -8.000977 -1.823888 -1.075505 +v -9.644773 -2.509159 1.081455 +v -8.631191 -1.243954 1.081455 +v -8.000977 -1.823888 1.081455 +v -8.419424 4.039339 2.089541 +v -8.419424 4.039339 -2.083591 +v -4.496462 -2.606915 1.567900 +v -4.496462 -2.606915 -1.561950 +v -6.099665 -2.606914 -1.561950 +v -6.099665 -2.606914 1.567900 +v -9.559078 0.439535 -1.561950 +v -9.559076 3.770859 -1.561950 +v -9.559076 3.770859 1.567900 +v -7.681774 -2.117624 -1.561950 +v -8.950394 -0.950218 1.567900 +v -7.681774 -2.117624 1.567900 +v -9.559078 0.439535 1.567900 +v -8.950394 -0.950218 -1.561950 +v -6.110137 7.776291 1.993027 +v -6.110137 7.592242 2.319573 +v -5.351533 7.278018 2.319573 +v -6.110137 7.399228 1.993027 +v -5.488015 7.141536 1.993027 +v -5.221390 7.408160 1.993027 +v -5.037309 6.519414 2.319573 +v -5.230323 6.519414 1.993027 +v -5.221392 5.630669 1.993027 +v -4.853261 6.519414 1.993027 +v -5.351534 5.760811 2.319573 +v -6.110137 5.262538 1.993027 +v -6.110137 5.446588 2.319573 +v -5.488016 5.897292 1.993027 +v -6.868741 5.760811 2.319573 +v -6.110137 5.639601 1.993027 +v -6.732259 5.897293 1.993027 +v -6.998883 5.630669 1.993027 +v -7.182964 6.519414 2.319573 +v -6.989950 6.519414 1.993027 +v -6.998883 7.408160 1.993027 +v -7.367013 6.519414 1.993027 +v -6.868741 7.278018 2.319573 +v -6.732259 7.141537 1.993027 +v -8.033749 6.394355 -2.020720 +v -8.033747 6.630578 -2.020720 +v -3.986356 6.630577 -2.020720 +v -3.986357 6.394354 -2.020720 +v -3.986357 6.917205 2.026670 +v -7.099486 6.107728 2.026670 +v -7.099485 6.917206 2.026670 +v -8.033747 6.917206 2.026670 +v -8.033749 6.107728 2.026670 +v -3.986358 6.107727 2.026670 +v -5.142801 6.917206 2.026670 +v -5.142802 6.107728 2.026670 vt 0.058610 0.440457 +vt 0.000000 0.441176 vt 0.000000 0.338235 vt 0.000000 0.441176 -vt 0.000000 0.441176 -vt 0.060241 0.335919 vt 0.058533 0.440018 -vt 0.060241 0.335919 +vt 0.060241 0.337540 +vt 0.060241 0.337540 vt 0.035980 0.295068 vt 0.096386 0.397059 vt 0.035955 0.295044 vt 0.000000 0.338235 vt 0.096386 0.397059 vt 0.132530 0.455882 -vt 0.180723 0.485294 vt 0.132530 0.485294 -vt 0.096386 0.485294 +vt 0.180723 0.485294 vt 0.096386 0.455882 +vt 0.096386 0.485294 vt 0.180723 0.455882 -vt 0.132530 0.411765 vt 0.180723 0.411765 -vt 0.216867 0.455882 +vt 0.132530 0.411765 vt 0.216867 0.485294 -vt 0.180723 0.529412 +vt 0.216867 0.455882 vt 0.132530 0.529412 +vt 0.180723 0.529412 vt 0.180723 0.308824 -vt 0.132530 0.367647 vt 0.132530 0.308824 -vt 0.132530 0.264706 +vt 0.132530 0.367647 vt 0.180723 0.264706 +vt 0.132530 0.264706 vt 0.180723 0.367647 -vt 0.216867 0.308824 vt 0.216867 0.367647 -vt 0.180723 0.411765 +vt 0.216867 0.308824 vt 0.132530 0.411765 -vt 0.096386 0.367647 +vt 0.180723 0.411765 vt 0.096386 0.308824 +vt 0.096386 0.367647 vt 0.253012 0.455882 -vt 0.301205 0.485294 vt 0.253012 0.485294 +vt 0.301205 0.485294 vt 0.216867 0.455882 vt 0.216867 0.485294 vt 0.301205 0.455882 -vt 0.253012 0.411765 vt 0.301205 0.411765 +vt 0.253012 0.411765 vt 0.337349 0.485294 vt 0.337349 0.455882 -vt 0.301205 0.529412 vt 0.253012 0.529412 +vt 0.301205 0.529412 vt 0.096386 0.294118 vt 0.096386 0.294118 vt 0.084337 0.132353 -vt 0.108434 0.088235 vt 0.108434 0.132353 +vt 0.108434 0.088235 vt 0.024096 0.132353 -vt 0.084337 0.161765 vt 0.024096 0.161765 +vt 0.084337 0.161765 vt 0.024096 0.088235 -vt 0.000000 0.132353 vt 0.000000 0.088235 +vt 0.000000 0.132353 vt 0.084337 0.088235 -vt 0.024096 0.058824 vt 0.084337 0.058824 +vt 0.024096 0.058824 vt 0.084337 0.191176 -vt 0.024096 0.161765 vt 0.084337 0.161765 +vt 0.024096 0.161765 vt 0.084337 0.264706 -vt 0.108434 0.191176 vt 0.108434 0.264706 +vt 0.108434 0.191176 vt 0.024096 0.264706 -vt 0.084337 0.294118 vt 0.024096 0.294118 +vt 0.084337 0.294118 vt -0.000000 0.191176 vt 0.000000 0.264706 vt 0.000000 0.088235 -vt 0.024096 0.132353 vt 0.000000 0.132353 +vt 0.024096 0.132353 vt 0.084337 0.088235 -vt 0.024096 0.058824 vt 0.084337 0.058824 +vt 0.024096 0.058824 vt 0.084337 0.132353 -vt 0.108434 0.088235 vt 0.108434 0.132353 -vt 0.084337 0.161765 +vt 0.108434 0.088235 vt 0.024096 0.161765 +vt 0.084337 0.161765 vt 0.072289 0.102941 vt 0.072289 0.117647 vt 0.036145 0.117647 @@ -2538,491 +2665,296 @@ vt 0.072289 0.250000 vt 0.036145 0.250000 vt 0.024096 0.191176 vt 0.036145 0.117647 -vt 0.024096 0.088235 vt 0.036145 0.102941 +vt 0.024096 0.088235 vt 0.072289 0.102941 vt 0.072289 0.117647 vt 0.192771 0.794118 -vt 0.144578 0.764706 -vt 0.144578 0.794118 vt 0.192771 0.764706 +vt 0.144578 0.764706 +vt 0.180723 0.735294 vt 0.156627 0.735294 +vt 0.144578 0.794118 vt 0.096386 0.764706 -vt 0.096386 0.794118 +vt 0.132530 0.735294 vt 0.108434 0.735294 vt 0.048193 0.794118 -vt 0.084337 0.735294 +vt 0.096386 0.794118 vt 0.048193 0.764706 +vt 0.084337 0.735294 vt 0.000000 0.794118 -vt 0.036145 0.735294 vt 0.000000 0.764706 +vt 0.036145 0.735294 vt 0.385542 0.794118 -vt 0.337349 0.764706 -vt 0.337349 0.794118 vt 0.385542 0.764706 +vt 0.337349 0.764706 +vt 0.373494 0.735294 vt 0.349398 0.735294 +vt 0.337349 0.794118 vt 0.289157 0.764706 -vt 0.289157 0.794118 +vt 0.325301 0.735294 vt 0.301205 0.735294 vt 0.240964 0.794118 -vt 0.277108 0.735294 +vt 0.289157 0.794118 vt 0.240964 0.764706 +vt 0.277108 0.735294 vt 0.228916 0.735294 -vt 0.120482 0.823529 vt 0.072289 0.794118 vt 0.072289 0.823529 -vt 0.168675 0.794118 +vt 0.120482 0.823529 vt 0.120482 0.794118 -vt 0.000000 0.823529 -vt 0.024096 0.794118 -vt 0.000000 0.794118 -vt 0.024096 0.823529 vt 0.168675 0.823529 -vt 0.192771 0.794118 -vt 0.180723 0.735294 -vt 0.132530 0.735294 +vt 0.000000 0.794118 +vt 0.000000 0.823529 +vt 0.024096 0.823529 +vt 0.024096 0.794118 +vt 0.168675 0.794118 +vt 0.192771 0.823529 vt 0.060241 0.735294 vt 0.012048 0.735294 -vt 0.373494 0.735294 -vt 0.325301 0.735294 vt 0.253012 0.735294 vt 0.204819 0.735294 -vt 0.192771 0.823529 +vt 0.192771 0.794118 vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn -0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 vn 1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 -vn 0.6771 -0.7359 -0.0000 -vn 0.7804 0.6252 0.0000 -vn -0.7804 -0.6252 0.0000 -vn -0.4181 -0.7891 0.4500 -vn 0.1412 -0.4385 0.8876 -vn -0.3590 -0.3328 0.8720 -vn -0.4181 -0.7891 -0.4500 -vn -0.3590 -0.3328 -0.8720 -vn 0.4181 -0.7891 -0.4500 -vn 0.1412 -0.4385 -0.8876 +vn -0.6771 -0.7359 -0.0000 +vn -0.7804 0.6252 0.0000 +vn 0.7804 -0.6252 0.0000 vn 0.4181 -0.7891 0.4500 -vn 0.7388 -0.5169 -0.4324 -vn 0.4205 -0.1879 0.8876 -vn 0.4205 -0.1879 -0.8876 -vn 0.7388 0.5169 -0.4324 -vn 0.2648 0.3576 -0.8955 -vn 0.7388 0.5169 0.4324 -vn 0.2648 0.3576 0.8955 -vn 0.0911 -0.8948 -0.4370 -vn 0.8699 -0.2238 0.4395 -vn 0.0911 -0.8948 0.4370 -vn 0.3015 -0.9045 0.3015 +vn 0.3590 -0.3328 0.8720 +vn -0.1412 -0.4385 0.8876 +vn 0.4181 -0.7891 -0.4500 +vn 0.3591 -0.3327 -0.8720 +vn -0.4181 -0.7891 -0.4500 +vn -0.1412 -0.4385 -0.8876 +vn -0.4181 -0.7891 0.4500 +vn -0.7388 -0.5169 -0.4324 +vn -0.4205 -0.1879 -0.8876 +vn -0.4205 -0.1879 0.8876 +vn -0.7389 0.5169 -0.4324 +vn -0.2648 0.3576 -0.8955 +vn -0.7388 0.5169 0.4324 +vn -0.2648 0.3577 0.8955 +vn -0.0911 -0.8948 -0.4370 +vn -0.8699 -0.2238 0.4396 +vn -0.0911 -0.8948 0.4370 vn -0.3015 -0.9045 0.3015 -vn -0.3015 -0.9045 -0.3015 +vn 0.3015 -0.9045 0.3015 vn 0.3015 -0.9045 -0.3015 -vn 0.9045 -0.3015 0.3015 -vn 0.9045 -0.3015 -0.3015 -vn 0.9045 0.3015 -0.3015 -vn 0.9045 0.3015 0.3015 -vn 0.7388 -0.5169 0.4324 -vn 0.3828 -0.8668 -0.3193 -vn 0.8699 -0.2238 -0.4395 -vn 0.8355 -0.4702 -0.2842 -vn 0.8355 -0.4702 0.2842 -vn 0.3828 -0.8668 0.3193 +vn -0.3015 -0.9045 -0.3015 +vn -0.9045 -0.3015 0.3015 +vn -0.9045 -0.3015 -0.3015 +vn -0.9045 0.3015 -0.3015 +vn -0.9045 0.3015 0.3015 +vn -0.7388 -0.5169 0.4324 +vn -0.3829 -0.8669 -0.3193 +vn -0.8355 -0.4702 -0.2842 +vn -0.8699 -0.2238 -0.4396 +vn -0.8355 -0.4702 0.2842 +vn -0.3829 -0.8669 0.3193 vn 0.0000 0.8712 0.4910 -vn 0.1535 0.1535 0.9761 -vn 0.6160 0.6160 0.4910 -vn 0.0000 0.2171 0.9761 +vn -0.0000 0.2171 0.9762 +vn 0.1535 0.1535 0.9762 +vn -0.0000 -0.8609 0.5088 vn -0.6087 -0.6087 0.5088 -vn 0.2171 0.0000 0.9761 -vn 0.8712 0.0000 0.4910 -vn -0.8608 0.0000 0.5088 +vn 0.6160 0.6160 0.4910 +vn 0.2171 -0.0000 0.9762 +vn -0.8609 0.0000 0.5088 vn 0.6160 -0.6160 0.4910 -vn 0.1535 -0.1535 0.9761 +vn 0.8712 -0.0000 0.4910 +vn 0.1535 -0.1535 0.9762 vn 0.0000 -0.8712 0.4910 +vn 0.0000 -0.2171 0.9762 vn -0.6087 0.6087 0.5088 -vn 0.0000 -0.2171 0.9761 -vn -0.1535 -0.1535 0.9761 -vn -0.6160 -0.6160 0.4910 +vn -0.1535 -0.1535 0.9762 +vn 0.0000 0.8609 0.5088 vn 0.6087 0.6087 0.5088 -vn -0.2171 0.0000 0.9761 -vn -0.8712 0.0000 0.4910 -vn 0.8608 0.0000 0.5088 +vn -0.6160 -0.6160 0.4910 +vn -0.2171 -0.0000 0.9762 +vn 0.8609 0.0000 0.5088 vn -0.6160 0.6160 0.4910 -vn -0.1535 0.1535 0.9761 +vn -0.8712 -0.0000 0.4910 +vn -0.1535 0.1535 0.9762 vn 0.6087 -0.6087 0.5088 -vn 0.7225 0.0000 -0.6914 vn -0.7225 0.0000 -0.6914 -vn 0.6906 0.0000 0.7232 +vn 0.7225 -0.0000 -0.6914 +vn 0.6906 -0.0000 0.7232 vn -0.6906 0.0000 0.7232 -vn 0.0000 -0.8608 0.5088 -vn 0.0000 0.8608 0.5088 -usemtl None s off -f 541/823/249 540/824/249 539/825/249 -f 543/826/250 546/827/250 545/828/250 -f 542/829/249 547/830/249 540/824/249 -f 549/831/249 542/829/249 541/823/249 -f 552/832/250 546/827/250 544/833/250 -f 546/827/250 550/834/250 545/828/250 -f 578/835/251 580/836/251 577/837/251 -f 578/835/249 553/838/249 554/839/249 -f 579/840/252 554/841/252 555/842/252 -f 580/836/250 555/843/250 556/844/250 -f 577/837/253 556/845/253 553/846/253 -f 582/847/253 584/848/253 581/849/253 -f 582/847/251 557/850/251 558/851/251 -f 583/852/250 558/853/250 559/854/250 -f 584/848/254 559/855/254 560/856/254 -f 581/849/249 560/857/249 557/858/249 -f 586/859/255 588/860/255 585/861/255 -f 562/862/250 585/861/250 561/863/250 -f 587/864/256 562/865/256 563/866/256 -f 564/867/249 587/864/249 563/868/249 -f 585/861/257 564/869/257 561/870/257 -f 541/823/249 542/829/249 540/824/249 -f 543/826/250 544/833/250 546/827/250 -f 542/829/249 548/871/249 547/830/249 -f 549/831/249 548/871/249 542/829/249 -f 552/832/250 551/872/250 546/827/250 -f 546/827/250 551/872/250 550/834/250 -f 578/835/251 579/840/251 580/836/251 -f 578/835/249 577/837/249 553/838/249 -f 579/840/252 578/835/252 554/841/252 -f 580/836/250 579/840/250 555/843/250 -f 577/837/253 580/836/253 556/845/253 -f 582/847/253 583/852/253 584/848/253 -f 582/847/251 581/849/251 557/850/251 -f 583/852/250 582/847/250 558/853/250 -f 584/848/254 583/852/254 559/855/254 -f 581/849/249 584/848/249 560/857/249 -f 586/859/255 587/864/255 588/860/255 -f 562/862/250 586/859/250 585/861/250 -f 587/864/256 586/859/256 562/865/256 -f 564/867/249 588/860/249 587/864/249 -f 585/861/257 588/860/257 564/869/257 +f 546/886/255 547/887/255 548/888/255 +f 549/889/256 550/890/256 551/891/256 +f 552/892/255 548/888/255 553/893/255 +f 554/894/255 546/886/255 552/892/255 +f 555/895/256 556/896/256 551/891/256 +f 551/891/256 550/890/256 557/897/256 +f 558/898/257 559/899/257 560/900/257 +f 558/898/255 561/901/255 562/902/255 +f 563/903/258 564/904/258 561/905/258 +f 560/900/256 565/906/256 564/907/256 +f 559/899/259 562/908/259 565/909/259 +f 566/910/259 567/911/259 568/912/259 +f 566/910/257 569/913/257 570/914/257 +f 571/915/256 572/916/256 569/917/256 +f 568/912/260 573/918/260 572/919/260 +f 567/911/255 570/920/255 573/921/255 +f 574/922/261 575/923/261 576/924/261 +f 577/925/256 578/926/256 575/923/256 +f 579/927/262 580/928/262 577/929/262 +f 581/930/255 580/931/255 579/927/255 +f 575/923/263 578/932/263 581/933/263 +f 546/886/255 548/888/255 552/892/255 +f 549/889/256 551/891/256 556/896/256 +f 552/892/255 553/893/255 582/934/255 +f 554/894/255 552/892/255 582/934/255 +f 555/895/256 551/891/256 583/935/256 +f 551/891/256 557/897/256 583/935/256 +f 558/898/257 560/900/257 563/903/257 +f 558/898/255 562/902/255 559/899/255 +f 563/903/258 561/905/258 558/898/258 +f 560/900/256 564/907/256 563/903/256 +f 559/899/259 565/909/259 560/900/259 +f 566/910/259 568/912/259 571/915/259 +f 566/910/257 570/914/257 567/911/257 +f 571/915/256 569/917/256 566/910/256 +f 568/912/260 572/919/260 571/915/260 +f 567/911/255 573/921/255 568/912/255 +f 574/922/261 576/924/261 579/927/261 +f 577/925/256 575/923/256 574/922/256 +f 579/927/262 577/929/262 574/922/262 +f 581/930/255 579/927/255 576/924/255 +f 575/923/263 581/933/263 576/924/263 s 1 -f 565/873/258 541/874/259 539/875/260 -f 567/876/261 539/877/260 543/878/262 -f 568/879/263 543/880/262 545/881/264 -f 566/882/265 545/883/264 541/884/259 -f 569/885/266 549/886/267 550/887/268 -f 571/888/269 550/889/268 551/890/270 -f 572/891/271 551/892/270 548/893/272 -f 549/894/267 572/891/271 548/895/272 -f 550/896/268 574/897/273 545/898/264 -f 575/899/274 550/900/268 549/901/267 -f 576/902/275 549/903/267 541/904/259 -f 574/897/273 541/905/259 545/906/264 -f 553/907/276 565/873/258 554/908/277 -f 554/908/277 567/876/261 555/909/278 -f 556/910/279 567/876/261 568/879/263 -f 556/910/279 566/882/265 553/907/276 -f 557/911/280 569/885/266 558/912/281 -f 558/912/281 571/888/269 559/913/282 -f 559/913/282 572/891/271 560/914/283 -f 560/914/283 570/915/284 557/911/280 -f 561/916/285 573/917/286 562/918/287 -f 562/918/287 575/899/274 563/919/288 -f 564/920/289 575/899/274 576/902/275 -f 561/916/285 576/902/275 574/897/273 -f 589/921/290 593/922/291 592/923/292 -f 590/924/293 594/925/294 593/922/291 -f 592/923/292 596/926/295 595/927/296 -f 593/922/291 597/928/297 596/926/295 -f 596/926/295 598/929/298 595/927/296 -f 597/930/297 599/931/299 596/926/295 -f 599/931/299 601/932/300 598/929/298 -f 600/933/301 602/934/302 599/931/299 -f 601/935/300 605/936/303 604/937/304 -f 602/938/302 606/939/305 605/936/303 -f 604/937/304 608/940/306 607/941/307 -f 605/936/303 609/942/308 608/940/306 -f 608/940/306 610/943/309 607/941/307 -f 609/944/308 611/945/310 608/940/306 -f 611/945/310 589/921/290 610/943/309 -f 612/946/311 590/924/293 611/945/310 -f 615/947/312 614/948/313 613/949/313 -f 615/947/312 620/950/314 616/951/312 -f 621/952/249 618/953/315 623/954/249 -f 613/949/313 618/953/315 617/955/315 -f 619/956/314 622/957/249 620/950/314 -f 565/873/258 566/882/265 541/874/259 -f 567/876/261 565/873/258 539/877/260 -f 568/879/263 567/876/261 543/880/262 -f 566/882/265 568/879/263 545/883/264 -f 569/885/266 570/915/284 549/886/267 -f 571/888/269 569/885/266 550/889/268 -f 572/891/271 571/888/269 551/892/270 -f 549/894/267 570/915/284 572/891/271 -f 550/896/268 573/917/286 574/897/273 -f 575/899/274 573/917/286 550/900/268 -f 576/902/275 575/899/274 549/903/267 -f 574/897/273 576/902/275 541/905/259 -f 553/907/276 566/882/265 565/873/258 -f 554/908/277 565/873/258 567/876/261 -f 556/910/279 555/909/278 567/876/261 -f 556/910/279 568/879/263 566/882/265 -f 557/911/280 570/915/284 569/885/266 -f 558/912/281 569/885/266 571/888/269 -f 559/913/282 571/888/269 572/891/271 -f 560/914/283 572/891/271 570/915/284 -f 561/916/285 574/897/273 573/917/286 -f 562/918/287 573/917/286 575/899/274 -f 564/920/289 563/919/288 575/899/274 -f 561/916/285 564/920/289 576/902/275 -f 589/921/290 590/924/293 593/922/291 -f 590/924/293 591/958/316 594/925/294 -f 592/923/292 593/922/291 596/926/295 -f 593/922/291 594/959/294 597/928/297 -f 596/926/295 599/931/299 598/929/298 -f 597/930/297 600/960/301 599/931/299 -f 599/931/299 602/934/302 601/932/300 -f 600/933/301 603/961/317 602/934/302 -f 601/935/300 602/938/302 605/936/303 -f 602/938/302 603/962/317 606/939/305 -f 604/937/304 605/936/303 608/940/306 -f 605/936/303 606/963/305 609/942/308 -f 608/940/306 611/945/310 610/943/309 -f 609/944/308 612/964/311 611/945/310 -f 611/945/310 590/924/293 589/921/290 -f 612/946/311 591/965/316 590/924/293 -f 615/947/312 616/951/312 614/948/313 -f 615/947/312 619/956/314 620/950/314 -f 621/952/249 617/955/315 618/953/315 -f 613/949/313 614/948/313 618/953/315 -f 619/956/314 624/966/249 622/957/249 -o Body -v -1.357744 12.947865 -2.060404 -v -2.084779 16.857933 -2.060405 -v 1.337637 12.947863 -2.060404 -v 2.064677 16.857931 -2.060405 -v 0.755152 6.975003 -1.996005 -v -0.010055 8.739575 -1.996005 -v -0.010056 6.975003 -2.761213 -v -0.775265 6.975004 -1.996004 -v -0.010057 5.273831 -1.996004 -v 4.817903 -0.473352 -2.018208 -v 4.770588 -0.229360 -2.018208 -v 4.633528 0.154637 -2.018208 -v 4.414360 0.647646 -2.018208 -v 4.120724 1.218675 -2.018208 -v 3.760257 1.836732 -2.018208 -v 3.340600 2.470827 -2.018208 -v 2.869391 3.089965 -2.018208 -v 2.354269 3.663156 -2.018208 -v 1.802872 4.159407 -2.018208 -v 1.222840 4.547728 -2.018208 -v 0.621810 4.797125 -2.018208 -v 0.007423 4.876606 -2.018208 -v -0.601421 4.778955 -2.018208 -v -1.187155 4.534758 -2.018208 -v -1.744144 4.169732 -2.018208 -v -2.266752 3.709597 -2.018208 -v -2.749345 3.180070 -2.018208 -v -3.186286 2.606869 -2.018208 -v -3.571939 2.015710 -2.018208 -v -3.900671 1.432314 -2.018208 -v -4.166844 0.882396 -2.018208 -v -4.364824 0.391676 -2.018208 -v -4.488976 -0.014130 -2.018208 -v -4.533662 -0.309302 -2.018208 -v 5.330154 -0.529075 -2.018208 -v 5.277726 -0.258708 -2.018208 -v 5.125850 0.166797 -2.018208 -v 4.882992 0.713097 -2.018208 -v 4.557615 1.345852 -2.018208 -v 4.158184 2.030718 -2.018208 -v 3.693165 2.733354 -2.018209 -v 3.171020 3.419418 -2.018208 -v 2.600215 4.054568 -2.018208 -v 1.989216 4.604462 -2.018208 -v 1.346485 5.034757 -2.018208 -v 0.680488 5.311113 -2.018208 -v -0.000312 5.399186 -2.018208 -v -0.674968 5.290979 -2.018208 -v -1.324017 5.020385 -2.018208 -v -1.941214 4.615903 -2.018208 -v -2.520314 4.106030 -2.018208 -v -3.055072 3.519263 -2.018208 -v -3.539243 2.884101 -2.018208 -v -3.966585 2.229043 -2.018208 -v -4.330851 1.582583 -2.018208 -v -4.625796 0.973223 -2.018208 -v -4.845176 0.429459 -2.018208 -v -4.982747 -0.020212 -2.018208 -v -5.032264 -0.347291 -2.018208 -v -4.218641 14.357357 2.124614 -v -4.218643 11.132286 2.124614 -v 4.198537 14.357351 2.124614 -v 4.198535 11.132282 2.124614 -v -4.218642 12.932457 -2.118665 -v -4.218643 11.132286 -2.118664 -v 4.198536 12.932452 -2.118665 -v 4.198535 11.132282 -2.118665 -v -0.010052 14.471598 2.124614 -v -0.010054 11.098518 2.124614 -v -0.010053 13.633080 -2.118665 -v -0.010054 11.832909 -2.118665 -vt 0.144578 0.617647 -vt 0.096386 0.558824 -vt 0.144578 0.529412 -vt 0.192771 0.558824 -vt 0.192771 0.558824 -vt 0.144578 0.617647 -vt 0.096386 0.558824 -vt 0.325301 0.617647 -vt 0.303449 0.588235 -vt 0.325301 0.588235 -vt 0.626506 0.588235 -vt 0.590361 0.617647 -vt 0.590361 0.588235 -vt 0.590361 0.617647 -vt 0.554217 0.588235 -vt 0.590361 0.588235 -vt 0.373494 0.588235 -vt 0.337349 0.617647 -vt 0.337349 0.588235 -vt 0.265680 0.617647 -vt 0.303449 0.617647 -vt 0.554217 0.617647 -vt 0.518072 0.588235 -vt 0.409639 0.588235 -vt 0.373494 0.617647 -vt 0.228916 0.617647 -vt 0.265680 0.588235 -vt 0.518072 0.617647 -vt 0.481928 0.588235 -vt 0.445783 0.588235 -vt 0.409639 0.617647 -vt 0.192771 0.617647 -vt 0.228916 0.588235 -vt 0.481928 0.617647 -vt 0.445783 0.588235 -vt 0.481928 0.588235 -vt 0.445783 0.617647 -vt 0.192771 0.588235 -vt 0.228916 0.617647 -vt 0.192771 0.617647 -vt 0.445783 0.617647 -vt 0.409639 0.588235 -vt 0.518072 0.588235 -vt 0.481928 0.617647 -vt 0.228916 0.588235 -vt 0.265060 0.617647 -vt 0.409639 0.617647 -vt 0.373494 0.588235 -vt 0.554217 0.588235 -vt 0.518072 0.617647 -vt 0.301205 0.588235 -vt 0.265060 0.588235 -vt 0.373494 0.617647 -vt 0.554217 0.617647 -vt 0.626506 0.617647 -vt 0.626506 0.588235 -vt 0.301205 0.617647 -vt 0.626506 0.617647 -vt 0.192771 0.588235 -vt 0.289157 0.735294 -vt 0.192771 0.632353 -vt 0.289157 0.632353 -vt 0.192771 0.735294 -vt 0.096386 0.676471 -vt 0.578313 0.735294 -vt 0.481928 0.676471 -vt 0.578313 0.676471 -vt 0.385542 0.735294 -vt 0.385542 0.632353 -vt 0.000000 0.735294 -vt 0.000000 0.676471 -vt 0.096386 0.735294 -vt 0.481928 0.735294 -vt 0.000000 0.441176 -vt 0.080123 0.556041 -vt 0.016262 0.556041 -vt 0.096386 0.441176 -vn 0.6760 0.2932 -0.6760 -vn -0.6760 0.2932 -0.6760 -vn 0.6738 -0.3031 -0.6738 -vn -0.6738 -0.3031 -0.6738 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.6152 0.0000 0.7884 -vn 0.7053 0.0000 0.7089 -vn 0.7374 0.0000 -0.6755 -vn -0.7374 0.0000 -0.6755 -vn -0.7053 0.0000 0.7089 -vn -0.6152 0.0000 0.7884 -vn 0.7451 0.0000 -0.6669 -vn -0.7451 0.0000 -0.6669 -usemtl None +f 584/936/264 547/937/265 546/938/266 +f 585/939/267 549/940/268 547/941/265 +f 586/942/269 550/943/270 549/944/268 +f 587/945/271 546/946/266 550/947/270 +f 588/948/272 557/949/273 554/950/274 +f 589/951/275 583/952/276 557/953/273 +f 590/954/277 582/955/278 583/956/276 +f 554/957/274 582/958/278 590/954/277 +f 557/959/273 550/960/270 591/961/279 +f 592/962/280 554/963/274 557/964/273 +f 593/965/281 546/966/266 554/967/274 +f 591/961/279 550/968/270 546/969/266 +f 562/970/282 561/971/283 584/936/264 +f 561/971/283 564/972/284 585/939/267 +f 565/973/285 586/942/269 585/939/267 +f 565/973/285 562/970/282 587/945/271 +f 570/974/286 569/975/287 588/948/272 +f 569/975/287 572/976/288 589/951/275 +f 572/976/288 573/977/289 590/954/277 +f 573/977/289 570/974/286 594/978/290 +f 578/979/291 577/980/292 595/981/293 +f 577/980/292 580/982/294 592/962/280 +f 581/983/295 593/965/281 592/962/280 +f 578/979/291 591/961/279 593/965/281 +f 596/984/296 597/985/297 598/986/298 +f 597/985/297 599/987/299 600/988/300 +f 601/989/301 598/986/298 602/990/302 +f 598/986/298 600/991/300 603/992/303 +f 604/993/304 605/994/305 602/990/302 +f 606/995/306 602/990/302 603/996/303 +f 607/997/307 604/993/304 606/995/306 +f 608/998/308 606/995/306 609/999/309 +f 607/1000/307 608/1001/308 610/1002/310 +f 608/1001/308 611/1003/311 612/1004/312 +f 613/1005/313 610/1002/310 614/1006/314 +f 610/1002/310 612/1007/312 615/1008/315 +f 616/1009/316 617/1010/317 614/1006/314 +f 618/1011/318 614/1006/314 615/1012/315 +f 596/984/296 616/1009/316 618/1011/318 +f 597/985/297 618/1011/318 619/1013/319 +f 620/1014/320 621/1015/320 622/1016/321 +f 623/1017/321 622/1016/321 624/1018/322 +f 625/1019/255 626/1020/255 627/1021/323 +f 628/1022/323 627/1021/323 621/1015/320 +f 629/1023/322 624/1018/322 630/1024/255 +f 584/936/264 546/938/266 587/945/271 +f 585/939/267 547/941/265 584/936/264 +f 586/942/269 549/944/268 585/939/267 +f 587/945/271 550/947/270 586/942/269 +f 588/948/272 554/950/274 594/978/290 +f 589/951/275 557/953/273 588/948/272 +f 590/954/277 583/956/276 589/951/275 +f 554/957/274 590/954/277 594/978/290 +f 557/959/273 591/961/279 595/981/293 +f 592/962/280 557/964/273 595/981/293 +f 593/965/281 554/967/274 592/962/280 +f 591/961/279 546/969/266 593/965/281 +f 562/970/282 584/936/264 587/945/271 +f 561/971/283 585/939/267 584/936/264 +f 565/973/285 585/939/267 564/972/284 +f 565/973/285 587/945/271 586/942/269 +f 570/974/286 588/948/272 594/978/290 +f 569/975/287 589/951/275 588/948/272 +f 572/976/288 590/954/277 589/951/275 +f 573/977/289 594/978/290 590/954/277 +f 578/979/291 595/981/293 591/961/279 +f 577/980/292 592/962/280 595/981/293 +f 581/983/295 592/962/280 580/982/294 +f 578/979/291 593/965/281 581/983/295 +f 596/984/296 598/986/298 601/989/301 +f 597/985/297 600/988/300 598/986/298 +f 601/989/301 602/990/302 605/994/305 +f 598/986/298 603/992/303 602/990/302 +f 604/993/304 602/990/302 606/995/306 +f 606/995/306 603/996/303 609/1025/309 +f 607/997/307 606/995/306 608/998/308 +f 608/998/308 609/999/309 611/1026/311 +f 607/1000/307 610/1002/310 613/1005/313 +f 608/1001/308 612/1004/312 610/1002/310 +f 613/1005/313 614/1006/314 617/1010/317 +f 610/1002/310 615/1008/315 614/1006/314 +f 616/1009/316 614/1006/314 618/1011/318 +f 618/1011/318 615/1012/315 619/1027/319 +f 596/984/296 618/1011/318 597/985/297 +f 597/985/297 619/1013/319 599/1028/299 +f 620/1014/320 622/1016/321 623/1017/321 +f 623/1017/321 624/1018/322 629/1023/322 +f 625/1019/255 627/1021/323 628/1022/323 +f 628/1022/323 621/1015/320 620/1014/320 +f 629/1023/322 630/1024/255 631/1029/255 +o RightFoot +v 0.124961 24.067026 2.136321 +v 0.124961 22.765116 -2.130369 +v 0.124961 24.067026 -2.130369 +v -4.141729 22.765120 -2.130369 +v -2.008385 21.575682 -3.487656 +v -4.141729 24.067028 -2.130369 +v -4.141729 24.067028 2.136321 +v -2.008384 24.067026 -3.487656 +vt 0.144578 0.823529 +vt 0.180723 0.941176 +vt 0.144578 0.941176 +vt 0.048193 0.941176 +vt 0.144578 0.941176 +vt 0.096386 0.970588 +vt 0.048193 0.941176 +vt 0.012048 0.941176 +vt 0.048193 0.823529 +vt 0.144578 1.000000 +vt 0.048193 1.000000 +vt 0.000000 1.000000 +vt 0.096386 0.970588 +vt 0.192771 1.000000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 -0.7521 0.6591 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.5368 0.0000 -0.8437 +vn -0.5368 0.0000 -0.8437 s off -f 630/967/318 629/968/318 631/969/318 -f 630/967/319 631/969/319 632/970/319 -f 631/969/320 629/971/320 633/972/320 -f 632/973/321 631/969/321 633/972/321 -f 642/974/322 668/975/322 667/976/322 -f 658/977/322 682/978/322 657/979/322 -f 635/980/322 661/981/322 660/982/322 -f 651/983/322 675/984/322 650/985/322 -f 644/986/322 668/975/322 643/987/322 -f 636/988/322 662/989/322 661/981/322 -f 652/990/322 676/991/322 651/983/322 -f 645/992/322 669/993/322 644/986/322 -f 637/994/322 663/995/322 662/989/322 -f 653/996/322 677/997/322 652/990/322 -f 646/998/322 670/999/322 645/992/322 -f 638/1000/322 664/1001/322 663/995/322 -f 654/1002/322 678/1003/322 653/996/322 -f 646/1004/322 672/1005/322 671/1006/322 -f 639/1007/322 665/1008/322 664/1001/322 -f 655/1009/322 679/1010/322 654/1002/322 -f 647/1011/322 673/1012/322 672/1005/322 -f 640/1013/322 666/1014/322 665/1008/322 -f 656/1015/322 680/1016/322 655/1009/322 -f 649/1017/322 673/1012/322 648/1018/322 -f 641/1019/322 667/976/322 666/1014/322 -f 657/979/322 681/1020/322 656/1015/322 -f 634/1021/322 660/982/322 659/1022/322 -f 650/985/322 674/1023/322 649/1017/322 -f 642/974/322 643/987/322 668/975/322 -f 658/977/322 683/1024/322 682/978/322 -f 635/980/322 636/988/322 661/981/322 -f 651/983/322 676/991/322 675/984/322 -f 644/986/322 669/993/322 668/975/322 -f 636/988/322 637/994/322 662/989/322 -f 652/990/322 677/997/322 676/991/322 -f 645/992/322 670/999/322 669/993/322 -f 637/994/322 638/1000/322 663/995/322 -f 653/996/322 678/1003/322 677/997/322 -f 646/998/322 671/1025/322 670/999/322 -f 638/1000/322 639/1007/322 664/1001/322 -f 654/1002/322 679/1010/322 678/1003/322 -f 646/1004/322 647/1011/322 672/1005/322 -f 639/1007/322 640/1013/322 665/1008/322 -f 655/1009/322 680/1016/322 679/1010/322 -f 647/1011/322 648/1018/322 673/1012/322 -f 640/1013/322 641/1019/322 666/1014/322 -f 656/1015/322 681/1020/322 680/1016/322 -f 649/1017/322 674/1023/322 673/1012/322 -f 641/1019/322 642/974/322 667/976/322 -f 657/979/322 682/978/322 681/1020/322 -f 634/1021/322 635/980/322 660/982/322 -f 650/985/322 675/984/322 674/1023/322 -s 1 -f 693/1026/323 686/1027/324 692/1028/323 -f 687/1029/325 690/1030/326 686/1027/324 -f 695/1031/322 688/1032/327 694/1033/322 -f 688/1032/327 685/1034/328 684/1035/329 -f 690/1030/326 695/1036/322 694/1037/322 -f 684/1035/329 693/1026/323 692/1028/323 -f 693/1026/323 687/1029/325 686/1027/324 -f 687/1029/325 691/1038/330 690/1030/326 -f 695/1031/322 689/1039/331 688/1032/327 -f 688/1032/327 689/1039/331 685/1034/328 -f 690/1030/326 691/1038/330 695/1036/322 -f 684/1035/329 685/1034/328 693/1026/323 -usemtl None_bismuth_armor.png.001 -s off -f 626/1040/322 627/1041/322 625/1042/322 -f 626/1040/322 628/1043/322 627/1041/322 +f 632/1030/324 633/1031/324 634/1032/324 +f 633/1033/325 635/1034/325 636/1035/325 +f 637/1036/326 635/1037/326 638/1038/326 +f 634/1032/327 638/1038/327 632/1030/327 +f 633/1031/328 639/1039/328 634/1032/328 +f 635/1037/329 639/1040/329 636/1041/329 +f 637/1036/327 634/1032/327 639/1042/327 +f 634/1032/327 637/1036/327 638/1038/327 +f 633/1031/328 636/1043/328 639/1039/328 +f 635/1037/329 637/1036/329 639/1040/329 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 6c9c290f8..1f118e536 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -5,20 +5,20 @@ "misc.nullMine": {"category": "player", "sounds": [{"name": "misc/null", "stream": false}]}, "block.crateBreak": {"category": "block", "sounds": ["block/crateBreak1", "block/crateBreak2", "block/crateBreak3", "block/crateBreak4", "block/crateBreak5"]}, - "block.shutdown": {"category": "ntmMachines", "sounds": [{"name": "block/shutdown", "stream": true}]}, - "block.minerOperate": {"category": "ntmMachines", "sounds": [{"name": "block/minerOperate", "stream": true}]}, - "block.assemblerOperate": {"category": "ntmMachines", "sounds": [{"name": "block/assemblerOperate", "stream": true}]}, - "block.chemplantOperate": {"category": "ntmMachines", "sounds": [{"name": "block/chemplantOperate", "stream": true}]}, - "block.dieselOperate": {"category": "ntmMachines", "sounds": [{"name": "block/dieselOperate", "stream": true}]}, - "block.igeneratorOperate": {"category": "ntmMachines", "sounds": [{"name": "block/igeneratorOperate", "stream": true}]}, - "block.turbofanOperate": {"category": "ntmMachines", "sounds": [{"name": "block/turbofanOperate", "stream": true}]}, - "block.pressOperate": {"category": "ntmMachines", "sounds": [{"name": "block/pressOperate", "stream": false}]}, + "block.shutdown": {"category": "block", "sounds": [{"name": "block/shutdown", "stream": true}]}, + "block.minerOperate": {"category": "block", "sounds": [{"name": "block/minerOperate", "stream": true}]}, + "block.assemblerOperate": {"category": "block", "sounds": [{"name": "block/assemblerOperate", "stream": true}]}, + "block.chemplantOperate": {"category": "block", "sounds": [{"name": "block/chemplantOperate", "stream": true}]}, + "block.dieselOperate": {"category": "block", "sounds": [{"name": "block/dieselOperate", "stream": true}]}, + "block.igeneratorOperate": {"category": "block", "sounds": [{"name": "block/igeneratorOperate", "stream": true}]}, + "block.turbofanOperate": {"category": "block", "sounds": [{"name": "block/turbofanOperate", "stream": true}]}, + "block.pressOperate": {"category": "block", "sounds": [{"name": "block/pressOperate", "stream": false}]}, "block.broadcast1": {"category": "block", "sounds": [{"name": "block/broadcast1", "stream": true}]}, "block.broadcast2": {"category": "block", "sounds": [{"name": "block/broadcast2", "stream": true}]}, "block.broadcast3": {"category": "block", "sounds": [{"name": "block/broadcast3", "stream": true}]}, - "block.sonarPing": {"category": "ntmMachines", "sounds": [{"name": "block/sonarPing", "stream": false}]}, - "block.reactorStart": {"category": "ntmMachines", "sounds": [{"name": "block/reactorStart", "stream": false}]}, - "block.reactorStop": {"category": "ntmMachines", "sounds": [{"name": "block/reactorStop", "stream": false}]}, + "block.sonarPing": {"category": "block", "sounds": [{"name": "block/sonarPing", "stream": false}]}, + "block.reactorStart": {"category": "block", "sounds": [{"name": "block/reactorStart", "stream": false}]}, + "block.reactorStop": {"category": "block", "sounds": [{"name": "block/reactorStop", "stream": false}]}, "block.vaultScrape": {"category": "block", "sounds": [{"name": "block/vaultScrape", "stream": false}]}, "block.vaultThud": {"category": "block", "sounds": [{"name": "block/vaultThud", "stream": false}]}, "block.vaultScrapeNew": {"category": "block", "sounds": [{"name": "block/vaultScrapeNew", "stream": false}]}, @@ -26,17 +26,17 @@ "block.lockOpen": {"category": "block", "sounds": [{"name": "block/lockOpen", "stream": false}]}, "block.lockHang": {"category": "block", "sounds": [{"name": "block/lockHang", "stream": false}]}, "block.debris": {"category": "block", "sounds": ["block/debris1", "block/debris2", "block/debris3"]}, - "block.centrifugeOperate": {"category": "ntmMachines", "sounds": [{"name": "block/centrifugeOperate", "stream": true}]}, + "block.centrifugeOperate": {"category": "block", "sounds": [{"name": "block/centrifugeOperate", "stream": true}]}, "block.pipePlaced": {"category": "block", "sounds": [{"name": "block/pipePlaced", "stream": false}]}, - "block.missileAssembly": {"category": "ntmMachines", "sounds": [{"name": "block/missileAssembly", "stream": false}]}, - "block.missileAssembly2": {"category": "ntmMachines", "sounds": [{"name": "block/missileAssembly2", "stream": false}]}, + "block.missileAssembly": {"category": "block", "sounds": [{"name": "block/missileAssembly", "stream": false}]}, + "block.missileAssembly2": {"category": "block", "sounds": [{"name": "block/missileAssembly2", "stream": false}]}, "block.openDoor": {"category": "block", "sounds": ["block/door_open_1", "block/door_open_2"]}, "block.closeDoor": {"category": "block", "sounds": ["block/door_close_1", "block/door_close_2"]}, - "block.soyuzReady": {"category": "ntmMachines", "sounds": [{"name": "block/soyuzReady", "stream": true}]}, + "block.soyuzReady": {"category": "block", "sounds": [{"name": "block/soyuzReady", "stream": true}]}, "block.screm": {"category": "block", "sounds": ["screm/scream1", "screm/scream01", "screm/scream2", "screm/scream02", "screm/scream3", "screm/scream03", "screm/scream4", "screm/scream04", "screm/scream5", "screm/scream05", "screm/scream6", "screm/scream06", "screm/scream7", "screm/scream07", "screm/scream08", "screm/scream09", "screm/scream10", "screm/scream11", "screm/scream12", "screm/scream13", "screm/scream14", "screm/scream15", "screm/scream16", "screm/scream17", "screm/scream18", "screm/scream19", "screm/scream20", "screm/scream21", "screm/scream22", "screm/scream23", "screm/scream24", "screm/scream25"]}, "block.rbmk_explosion": {"category": "block", "sounds": [{"name": "block/rbmk_explosion", "stream": false}]}, "block.rbmk_az5_cover": {"category": "block", "sounds": [{"name": "block/rbmk_az5_cover", "stream": false}]}, - "block.chungusLever": {"category": "ntmMachines", "sounds": [{"name": "block/chungusLever", "stream": false}]}, + "block.chungusLever": {"category": "block", "sounds": [{"name": "block/chungusLever", "stream": false}]}, "block.bobble": {"category": "block", "sounds": [{"name": "block/bobble", "stream": false}]}, "item.techBleep": {"category": "player", "sounds": [{"name": "tool/techBleep", "stream": false}]}, From d517d665dff549b4e659e6d7f1ec9737ad76ebf6 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 26 Mar 2022 23:35:05 +0100 Subject: [PATCH 06/31] sulfur caves, new test pipe --- .../java/api/hbm/fluid/IFluidConnector.java | 4 +- src/main/java/api/hbm/fluid/IPipeNet.java | 5 +- src/main/java/api/hbm/fluid/PipeNet.java | 81 ++- .../java/com/hbm/blocks/BlockEnumMulti.java | 64 ++ src/main/java/com/hbm/blocks/BlockEnums.java | 8 + src/main/java/com/hbm/blocks/ModBlocks.java | 20 + .../hbm/blocks/generic/BlockStalagmite.java | 70 ++ .../com/hbm/blocks/machine/BlockObserver.java | 83 +++ .../com/hbm/blocks/machine/SoyuzLauncher.java | 92 ++- .../java/com/hbm/blocks/test/TestPipe.java | 20 + .../com/hbm/handler/MultiblockHandlerXR.java | 2 +- .../com/hbm/handler/guncfg/GunNPCFactory.java | 5 + .../com/hbm/inventory/OreDictManager.java | 9 +- .../inventory/recipes/AssemblerRecipes.java | 1 + .../inventory/recipes/ChemplantRecipes.java | 6 + .../com/hbm/items/block/ItemBlockBase.java | 27 + src/main/java/com/hbm/main/ClientProxy.java | 20 +- src/main/java/com/hbm/main/MainRegistry.java | 6 +- .../java/com/hbm/main/ResourceManager.java | 1 + .../com/hbm/render/block/RenderTestPipe.java | 130 ++++ .../java/com/hbm/render/util/ObjUtil.java | 29 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../network/TileEntityPipeBaseNT.java | 5 +- .../java/com/hbm/world/feature/OreCave.java | 125 ++++ src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../assets/hbm/models/blocks/pipe_neo.obj | 664 ++++++++++++++++++ .../hbm/textures/blocks/observer_back_off.png | Bin 0 -> 655 bytes .../hbm/textures/blocks/observer_back_on.png | Bin 0 -> 697 bytes .../hbm/textures/blocks/observer_front.png | Bin 0 -> 876 bytes .../textures/blocks/observer_front.png.mcmeta | 105 +++ .../hbm/textures/blocks/observer_side.png | Bin 0 -> 539 bytes .../assets/hbm/textures/blocks/pipe_neo.png | Bin 0 -> 246 bytes .../hbm/textures/blocks/pipe_neo_overlay.png | Bin 0 -> 98 bytes .../textures/blocks/stalactite.fluorite.png | Bin 0 -> 270 bytes .../hbm/textures/blocks/stalactite.sulfur.png | Bin 0 -> 278 bytes .../textures/blocks/stalagmite.fluorite.png | Bin 0 -> 262 bytes .../hbm/textures/blocks/stalagmite.sulfur.png | Bin 0 -> 267 bytes .../blocks/stone_resource.fluorite.png | Bin 0 -> 342 bytes .../textures/blocks/stone_resource.sulfur.png | Bin 0 -> 798 bytes .../blocks/stone_resource.sulfur_alt.png | Bin 0 -> 372 bytes .../assets/hbm/textures/items/can_mug.png | Bin 0 -> 419 bytes .../hbm/textures/items/chem_icon_DYNAMITE.png | Bin 0 -> 409 bytes 43 files changed, 1502 insertions(+), 89 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/BlockEnumMulti.java create mode 100644 src/main/java/com/hbm/blocks/BlockEnums.java create mode 100644 src/main/java/com/hbm/blocks/generic/BlockStalagmite.java create mode 100644 src/main/java/com/hbm/blocks/machine/BlockObserver.java create mode 100644 src/main/java/com/hbm/render/block/RenderTestPipe.java create mode 100644 src/main/java/com/hbm/world/feature/OreCave.java create mode 100644 src/main/resources/assets/hbm/models/blocks/pipe_neo.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/observer_back_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/observer_back_on.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/observer_front.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta create mode 100644 src/main/resources/assets/hbm/textures/blocks/observer_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pipe_neo.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalagmite.fluorite.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalagmite.sulfur.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur_alt.png create mode 100644 src/main/resources/assets/hbm/textures/items/can_mug.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png diff --git a/src/main/java/api/hbm/fluid/IFluidConnector.java b/src/main/java/api/hbm/fluid/IFluidConnector.java index dd8c2c4ab..9ec663305 100644 --- a/src/main/java/api/hbm/fluid/IFluidConnector.java +++ b/src/main/java/api/hbm/fluid/IFluidConnector.java @@ -17,7 +17,7 @@ public interface IFluidConnector { * @param power * @return */ - public int transferFluid(FluidType type, int fluid); + public long transferFluid(FluidType type, long fluid); /** * Whether the given side can be connected to @@ -33,7 +33,7 @@ public interface IFluidConnector { * @param type * @return */ - public int getDemand(FluidType type); + public long getDemand(FluidType type); /** * Basic implementation of subscribing to a nearby power grid diff --git a/src/main/java/api/hbm/fluid/IPipeNet.java b/src/main/java/api/hbm/fluid/IPipeNet.java index 8571f16e9..e218df51f 100644 --- a/src/main/java/api/hbm/fluid/IPipeNet.java +++ b/src/main/java/api/hbm/fluid/IPipeNet.java @@ -1,5 +1,6 @@ package api.hbm.fluid; +import java.util.HashSet; import java.util.List; import com.hbm.inventory.fluid.FluidType; @@ -9,7 +10,7 @@ public interface IPipeNet { public void joinNetworks(IPipeNet network); public List getLinks(); - public List getSubscribers(); + public HashSet getSubscribers(); public IPipeNet joinLink(IFluidConductor conductor); public void leaveLink(IFluidConductor conductor); @@ -22,6 +23,6 @@ public interface IPipeNet { public boolean isValid(); - public long transferFluid(long power); + public long transferFluid(long fill); public FluidType getType(); } diff --git a/src/main/java/api/hbm/fluid/PipeNet.java b/src/main/java/api/hbm/fluid/PipeNet.java index 6e15a06d0..2a2c6bf78 100644 --- a/src/main/java/api/hbm/fluid/PipeNet.java +++ b/src/main/java/api/hbm/fluid/PipeNet.java @@ -1,15 +1,19 @@ package api.hbm.fluid; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import com.hbm.inventory.fluid.FluidType; +import net.minecraft.tileentity.TileEntity; + public class PipeNet implements IPipeNet { - + + private boolean valid = true; private FluidType type; private List links = new ArrayList(); - private List subscribers = new ArrayList(); + private HashSet subscribers = new HashSet(); public PipeNet(FluidType type) { this.type = type; @@ -40,44 +44,79 @@ public class PipeNet implements IPipeNet { } @Override - public List getSubscribers() { + public HashSet getSubscribers() { return subscribers; } @Override public IPipeNet joinLink(IFluidConductor conductor) { - // TODO Auto-generated method stub - return null; + + if(conductor.getPipeNet(type) != null) + conductor.getPipeNet(type).leaveLink(conductor); + + conductor.setPipeNet(type, this); + this.links.add(conductor); + return this; } @Override public void leaveLink(IFluidConductor conductor) { - // TODO Auto-generated method stub - + conductor.setPipeNet(type, null); + this.links.remove(conductor); } @Override public void subscribe(IFluidConnector connector) { - // TODO Auto-generated method stub - + this.subscribers.add(connector); } @Override public void unsubscribe(IFluidConnector connector) { - // TODO Auto-generated method stub - + this.subscribers.remove(connector); } @Override public boolean isSubscribed(IFluidConnector connector) { - // TODO Auto-generated method stub - return false; + return this.subscribers.contains(connector); } @Override - public long transferFluid(long power) { - // TODO Auto-generated method stub - return 0; + public long transferFluid(long fill) { + + this.subscribers.removeIf(x -> + x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() + ); + + if(this.subscribers.isEmpty()) + return fill; + + List subList = new ArrayList(subscribers); + + List weight = new ArrayList(); + long totalReq = 0; + + for(IFluidConnector con : subList) { + long req = con.getDemand(type); + weight.add(req); + totalReq += req; + } + + if(totalReq == 0) + return fill; + + long totalGiven = 0; + + for(int i = 0; i < subList.size(); i++) { + IFluidConnector con = subList.get(i); + long req = weight.get(i); + double fraction = (double)req / (double)totalReq; + + long given = (long) Math.floor(fraction * fill); + + totalGiven += (given - con.transferFluid(type, given)); + } + + return fill - totalGiven; } @Override @@ -87,13 +126,17 @@ public class PipeNet implements IPipeNet { @Override public void destroy() { - // TODO Auto-generated method stub + this.valid = false; + this.subscribers.clear(); + for(IFluidConductor con : this.links) + con.setPipeNet(type, null); + + this.links.clear(); } @Override public boolean isValid() { - // TODO Auto-generated method stub - return false; + return this.valid; } } diff --git a/src/main/java/com/hbm/blocks/BlockEnumMulti.java b/src/main/java/com/hbm/blocks/BlockEnumMulti.java new file mode 100644 index 000000000..5ece200f7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/BlockEnumMulti.java @@ -0,0 +1,64 @@ +package com.hbm.blocks; + +import java.util.List; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +public class BlockEnumMulti extends BlockBase { + + public Class theEnum; + public boolean multiName; + private boolean multiTexture; + + public BlockEnumMulti(Material mat, Class theEnum, boolean multiName, boolean multiTexture) { + super(mat); + this.theEnum = theEnum; + this.multiName = multiName; + this.multiTexture = multiTexture; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < theEnum.getEnumConstants().length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + + private IIcon[] icons; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + + if(multiTexture) { + Enum[] enums = theEnum.getEnumConstants(); + this.icons = new IIcon[enums.length]; + + for(int i = 0; i < icons.length; i++) { + Enum num = enums[i]; + this.icons[i] = reg.registerIcon(this.getTextureName() + "." + num.name().toLowerCase()); + } + } else { + this.blockIcon = reg.registerIcon(this.getTextureName()); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return this.icons[meta % this.icons.length]; + } +} diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java new file mode 100644 index 000000000..8b069a935 --- /dev/null +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -0,0 +1,8 @@ +package com.hbm.blocks; + +public class BlockEnums { + + public static enum EnumStoneType { + SULFUR + } +} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 21c9a450d..5f71c7651 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -133,6 +133,9 @@ public class ModBlocks { public static Block ore_depth_nether_neodymium; public static Block stone_porous; + public static Block stone_resource; + public static Block stalagmite; + public static Block stalactite; public static Block depth_brick; public static Block depth_tiles; @@ -476,6 +479,9 @@ public class ModBlocks { public static Block geysir_vapor; public static Block geysir_nether; + public static Block observer_off; + public static Block observer_on; + public static Block flame_war; public static Block float_bomb; public static Block therm_endo; @@ -1340,6 +1346,9 @@ public class ModBlocks { ore_depth_nether_neodymium = new BlockDepthOre().setBlockName("ore_depth_nether_neodymium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_depth_nether_neodymium"); stone_porous = new BlockPorous().setBlockName("stone_porous").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":stone_porous"); + stone_resource = new BlockEnumMulti(Material.rock, BlockEnums.EnumStoneType.class, true, true).setBlockName("stone_resource").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); + stalagmite = new BlockStalagmite().setBlockName("stalagmite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); + stalactite = new BlockStalagmite().setBlockName("stalactite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); basalt = new BlockGeneric(Material.rock).setBlockName("basalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt"); basalt_sulfur = new BlockOre(Material.rock).setBlockName("basalt_sulfur").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_sulfur"); @@ -1679,6 +1688,9 @@ public class ModBlocks { geysir_vapor = new BlockGeysir(Material.rock).setBlockName("geysir_vapor").setStepSound(Block.soundTypeStone).setHardness(5.0F); geysir_nether = new BlockGeysir(Material.rock).setBlockName("geysir_nether").setLightLevel(1.0F).setStepSound(Block.soundTypeStone).setHardness(2.0F); + observer_off = new BlockObserver(Material.iron, false).setBlockName("observer_off").setStepSound(Block.soundTypeStone).setHardness(2.0F); + observer_on = new BlockObserver(Material.iron, true).setBlockName("observer_on").setStepSound(Block.soundTypeStone).setHardness(2.0F); + nuke_gadget = new NukeGadget(Material.iron).setBlockName("nuke_gadget").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":theGadget"); nuke_boy = new NukeBoy(Material.iron).setBlockName("nuke_boy").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":lilBoy"); nuke_man = new NukeMan(Material.iron).setBlockName("nuke_man").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":fatMan"); @@ -2377,6 +2389,11 @@ public class ModBlocks { GameRegistry.registerBlock(crystal_robust, crystal_robust.getUnlocalizedName()); GameRegistry.registerBlock(crystal_trixite, crystal_trixite.getUnlocalizedName()); + //Resource-bearing Stones + GameRegistry.registerBlock(stone_resource, ItemBlockBase.class, stone_resource.getUnlocalizedName()); + GameRegistry.registerBlock(stalagmite, ItemBlockBase.class, stalagmite.getUnlocalizedName()); + GameRegistry.registerBlock(stalactite, ItemBlockBase.class, stalactite.getUnlocalizedName()); + //Stone Variants GameRegistry.registerBlock(stone_porous, stone_porous.getUnlocalizedName()); GameRegistry.registerBlock(stone_gneiss, stone_gneiss.getUnlocalizedName()); @@ -2829,6 +2846,9 @@ public class ModBlocks { GameRegistry.registerBlock(bomber, bomber.getUnlocalizedName()); //Machines + //GameRegistry.registerBlock(observer_off, observer_off.getUnlocalizedName()); + //GameRegistry.registerBlock(observer_on, observer_on.getUnlocalizedName()); + GameRegistry.registerBlock(anvil_iron, ItemBlockBase.class, anvil_iron.getUnlocalizedName()); GameRegistry.registerBlock(anvil_lead, ItemBlockBase.class, anvil_lead.getUnlocalizedName()); GameRegistry.registerBlock(anvil_steel, ItemBlockBase.class, anvil_steel.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java new file mode 100644 index 000000000..9358ab147 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java @@ -0,0 +1,70 @@ +package com.hbm.blocks.generic; + +import java.util.Random; + +import com.hbm.blocks.BlockEnumMulti; +import com.hbm.blocks.BlockEnums; +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockStalagmite extends BlockEnumMulti { + + public BlockStalagmite() { + super(Material.rock, BlockEnums.EnumStoneType.class, true, true); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return 1; + } + + @Override + public Item getItemDropped(int meta, Random rang, int fortune) { + + switch(meta) { + case 0: return ModItems.sulfur; + } + + return null; + } + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + + if(this == ModBlocks.stalagmite) + return World.doesBlockHaveSolidTopSurface(world, x, y - 1, z); + if(this == ModBlocks.stalactite) + return world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN); + + return true; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + if(!canPlaceBlockAt(world, x, y, z)) { + world.func_147480_a(x, y, z, true); + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + return null; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/BlockObserver.java b/src/main/java/com/hbm/blocks/machine/BlockObserver.java new file mode 100644 index 000000000..e1dfa027f --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/BlockObserver.java @@ -0,0 +1,83 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockObserver extends Block { + + private boolean isActive; + + @SideOnly(Side.CLIENT) + private IIcon iconFront; + @SideOnly(Side.CLIENT) + private IIcon iconBack; + + public BlockObserver(Material mat, boolean isActive) { + super(mat); + this.isActive = isActive; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconBack = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":observer_back_on" : ":observer_back_off")); + this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":observer_front"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":observer_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + ForgeDirection dir = ForgeDirection.getOrientation(metadata); + ForgeDirection opp = dir.getOpposite(); + return side == dir.ordinal() ? iconFront : side == opp.ordinal() ? iconBack : blockIcon; + } + + @Override + public Item getItemDropped(int meta, Random rand, int luck) { + return Item.getItemFromBlock(ModBlocks.observer_off); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int l = BlockPistonBase.determineOrientation(world, x, y, z, player); + world.setBlockMetadataWithNotify(x, y, z, l, 2); + + if(this.isActive) + world.scheduleBlockUpdate(x, y, z, this, 2); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + + if(!this.isActive) { + + } + } + + @Override + public boolean canProvidePower() { + return this.isActive; + } + + @Override + public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) { + return this.isActive ? 15 : 0; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java index 8e066e31f..480073153 100644 --- a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java +++ b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java @@ -160,63 +160,55 @@ public class SoyuzLauncher extends BlockDummyable { private static boolean keepInventory; @Override - public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i) - { - if (!keepInventory) - { - ISidedInventory tileentityfurnace = (ISidedInventory)world.getTileEntity(x, y, z); + public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i) { + if(!keepInventory) { + ISidedInventory tileentityfurnace = (ISidedInventory) world.getTileEntity(x, y, z); - if (tileentityfurnace != null) - { - for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) - { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); + if(tileentityfurnace != null) { + for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { + ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - if (itemstack != null) - { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + if(itemstack != null) { + float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - while (itemstack.stackSize > 0) - { - int j1 = this.field_149933_a.nextInt(21) + 10; + while(itemstack.stackSize > 0) { + int j1 = this.field_149933_a.nextInt(21) + 10; - if (j1 > itemstack.stackSize) - { - j1 = itemstack.stackSize; - } + if(j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - if (itemstack.hasTagCompound()) - { - entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); - } + if(itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } - float f3 = 0.05F; - entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; - world.spawnEntityInWorld(entityitem); - } - } - } - - for(int l = 0; l < 10; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38))); - for(int l = 0; l < 8; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41))); - for(int l = 0; l < 6; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64))); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53))); - - world.func_147453_f(x, y, z, p_149749_5_); - } - } + float f3 = 0.05F; + entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; + entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } - super.breakBlock(world, x, y, z, p_149749_5_, i); - } + for(int l = 0; l < 10; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38))); + for(int l = 0; l < 8; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41))); + for(int l = 0; l < 6; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53))); + + world.func_147453_f(x, y, z, p_149749_5_); + } + } + + super.breakBlock(world, x, y, z, p_149749_5_, i); + } } diff --git a/src/main/java/com/hbm/blocks/test/TestPipe.java b/src/main/java/com/hbm/blocks/test/TestPipe.java index 7b5563a9c..598b0e794 100644 --- a/src/main/java/com/hbm/blocks/test/TestPipe.java +++ b/src/main/java/com/hbm/blocks/test/TestPipe.java @@ -3,16 +3,36 @@ package com.hbm.blocks.test; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; import net.minecraft.world.World; public class TestPipe extends BlockContainer { + @SideOnly(Side.CLIENT) + protected IIcon overlay; + public TestPipe(Material mat) { super(mat); } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.overlay = iconRegister.registerIcon(this.getTextureName() + "_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return side == 0 ? this.blockIcon : this.overlay; + } @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { diff --git a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java index 95b599547..80ed65dc5 100644 --- a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java +++ b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java @@ -29,7 +29,7 @@ public class MultiblockHandlerXR { if(a == ox && b == oy && c == oz) continue; - if(!world.getBlock(a, b, c).canPlaceBlockAt(world, a, b, c)) { + if(!world.getBlock(a, b, c).isReplaceable(world, a, b, c)) { return false; } diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index d2482addc..d9c8407e3 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -10,6 +10,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.interfaces.IBulletImpactBehavior; import com.hbm.interfaces.IBulletUpdateBehavior; import com.hbm.items.ModItems; +import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; @@ -92,6 +93,7 @@ public class GunNPCFactory { bullet.explosive = 0.5F; bullet.setToBolt(BulletConfiguration.BOLT_LACUNAE); bullet.vPFX = "reddust"; + bullet.damageType = ModDamageSource.s_laser; return bullet; } @@ -124,6 +126,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.setToBolt(BulletConfiguration.BOLT_NIGHTMARE); bullet.vPFX = "reddust"; + bullet.damageType = ModDamageSource.s_laser; bullet.bImpact = new IBulletImpactBehavior() { @@ -210,6 +213,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.doesRicochet = false; bullet.setToBolt(BulletConfiguration.BOLT_WORM); + bullet.damageType = ModDamageSource.s_laser; return bullet; } @@ -226,6 +230,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.doesRicochet = false; bullet.setToBolt(BulletConfiguration.BOLT_LASER); + bullet.damageType = ModDamageSource.s_laser; return bullet; } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index e70a3fe3f..753106a53 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -10,6 +10,7 @@ import static com.hbm.items.ModItems.*; import static com.hbm.blocks.ModBlocks.*; import static com.hbm.inventory.OreDictManager.DictFrame.*; +import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.config.GeneralConfig; import com.hbm.hazard.HazardData; import com.hbm.hazard.HazardEntry; @@ -349,7 +350,7 @@ public class OreDictManager { /* * DUST AND GEM ORES */ - S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur) .oreNether(ore_nether_sulfur); + S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur, DictFrame.fromOne(stone_resource, EnumStoneType.SULFUR)) .oreNether(ore_nether_sulfur); KNO .dust(niter) .block(block_niter) .ore(ore_niter); F .dust(fluorite) .block(block_fluorite) .ore(ore_fluorite, basalt_fluorite); LIGNITE .gem(lignite) .dust(powder_lignite) .ore(ore_lignite); @@ -572,9 +573,15 @@ public class OreDictManager { public static ItemStack fromOne(Item item, Enum en) { return new ItemStack(item, 1, en.ordinal()); } + public static ItemStack fromOne(Block block, Enum en) { + return new ItemStack(block, 1, en.ordinal()); + } public static ItemStack fromOne(Item item, Enum en, int stacksize) { return new ItemStack(item, stacksize, en.ordinal()); } + public static ItemStack fromOne(Block block, Enum en, int stacksize) { + return new ItemStack(block, stacksize, en.ordinal()); + } /** Same as fromOne but with an array of ItemStacks. The array type is Object[] so that the ODM methods work with it. Generates ItemStacks for the entire enum class. */ public static Object[] fromAll(Item item, Class en) { Enum[] vals = en.getEnumConstants(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 7a27b4aca..8b7518cb3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -178,6 +178,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.warhead_buster_medium, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModBlocks.det_cord, 4), new ComparableStack(ModBlocks.det_charge, 4), },150); makeRecipe(new ComparableStack(ModItems.warhead_buster_large, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModBlocks.det_charge, 8), },200); makeRecipe(new ComparableStack(ModItems.warhead_nuclear, 1), new AStack[] {new ComparableStack(ModItems.boy_shielding, 1), new ComparableStack(ModItems.boy_target, 1), new ComparableStack(ModItems.boy_bullet, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), },300); + makeRecipe(new ComparableStack(ModItems.warhead_mirv, 1), new AStack[] {new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), new OreDictStack(PU239.ingot(), 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new OreDictStack(OreDictManager.getReflector(), 6), new OreDictStack(LI.ingot(), 4), new ComparableStack(ModItems.cell_deuterium, 6), },500); makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit_tantalium, 5) }, 600); makeRecipe(new ComparableStack(ModItems.warhead_thermo_endo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_endo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300); makeRecipe(new ComparableStack(ModItems.warhead_thermo_exo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_exo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java index 43045d169..3a4a67f97 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java @@ -93,6 +93,12 @@ public class ChemplantRecipes { .inputItems(new OreDictStack(KNO.dust())) .inputFluids(new FluidStack(Fluids.AROMATICS, 500)) .outputItems(new ItemStack(ModItems.ball_tnt, 4))); + recipes.add(new ChemRecipe(89, "DYNAMITE", 50) + .inputItems( + new ComparableStack(Items.sugar), + new OreDictStack(KNO.dust()), + new OreDictStack("sand")) + .outputItems(new ItemStack(ModItems.ball_dynamite, 2))); recipes.add(new ChemRecipe(84, "C4", 150) .inputItems(new OreDictStack(KNO.dust())) .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500)) diff --git a/src/main/java/com/hbm/items/block/ItemBlockBase.java b/src/main/java/com/hbm/items/block/ItemBlockBase.java index ee230584b..25d85b537 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockBase.java +++ b/src/main/java/com/hbm/items/block/ItemBlockBase.java @@ -2,7 +2,9 @@ package com.hbm.items.block; import java.util.List; +import com.hbm.blocks.BlockEnumMulti; import com.hbm.blocks.ITooltipProvider; +import com.hbm.util.EnumUtil; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -14,6 +16,31 @@ public class ItemBlockBase extends ItemBlock { public ItemBlockBase(Block block) { super(block); + + if(block instanceof BlockEnumMulti) { + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + } + + @Override + public int getMetadata(int meta) { + if(field_150939_a instanceof BlockEnumMulti) + return meta; + else + return super.getMetadata(meta); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + + if(field_150939_a instanceof BlockEnumMulti && ((BlockEnumMulti)field_150939_a).multiName) { + + Enum num = EnumUtil.grabEnumSafely(((BlockEnumMulti)field_150939_a).theEnum, stack.getItemDamage()); + return super.getUnlocalizedName() + "." + num.name().toLowerCase(); + } else { + return super.getUnlocalizedName(stack); + } } @Override diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index faa039536..21cb9e94c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -679,6 +679,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderAnvil()); RenderingRegistry.registerBlockHandler(new RenderCrystal()); RenderingRegistry.registerBlockHandler(new RenderTestCable()); + RenderingRegistry.registerBlockHandler(new RenderTestPipe()); RenderingRegistry.registerBlockHandler(new RenderBlockCT()); RenderingRegistry.registerBlockHandler(new RenderDetCord()); RenderingRegistry.registerBlockHandler(new RenderBlockMultipass()); @@ -1161,17 +1162,20 @@ public class ClientProxy extends ServerProxy { } } } - - double motionX = BobMathUtil.safeClamp(p.motionX + moX, -5, 5); - double motionY = BobMathUtil.safeClamp(p.motionY + moY, -2, 2); - double motionZ = BobMathUtil.safeClamp(p.motionZ + moZ, -5, 5); - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, motionX * 2, motionY * 2, motionZ * 2)); - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, motionX * 2, motionY * 2, motionZ * 2)); + double mX2 = BobMathUtil.safeClamp(p.motionX + moX * 2, -5, 5); + double mY2 = BobMathUtil.safeClamp(p.motionY + moY * 2, -5, 5); + double mZ2 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -5, 5); + double mX3 = BobMathUtil.safeClamp(p.motionX + moX * 2, -10, 10); + double mY3 = BobMathUtil.safeClamp(p.motionY + moY * 2, -10, 10); + double mZ3 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -10, 10); + + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, mX2, mY2, mZ2)); + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, mX2, mY2, mZ2)); if(particleSetting == 0) { - Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, motionX * 3, motionY * 3, motionZ * 3)); - Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, motionX * 3, motionY * 3, motionZ * 3)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, mX3, mY3, mZ3)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, mX3, mY3, mZ3)); } } } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 26e7c2c1b..1963143b1 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -71,6 +71,7 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.rbmk.RBMKDials; import com.hbm.util.ArmorUtil; +import com.hbm.world.feature.OreCave; import com.hbm.world.feature.SchistStratum; import com.hbm.world.generator.CellularDungeonFactory; @@ -973,6 +974,9 @@ public class MainRegistry { //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); + + new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20); + //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); } @EventHandler @@ -989,8 +993,6 @@ public class MainRegistry { SchistStratum schist = new SchistStratum(); MinecraftForge.EVENT_BUS.register(schist); //DecorateBiomeEvent.Pre - //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); - OreDictManager oreMan = new OreDictManager(); MinecraftForge.EVENT_BUS.register(oreMan); //OreRegisterEvent diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 4f67e998b..8c32969af 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1179,6 +1179,7 @@ public class ResourceManager { public static final IModelCustom crystal_robust = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_robust.obj")); public static final IModelCustom crystal_trixite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_trixite.obj")); public static final IModelCustom cable_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/cable_neo.obj")); + public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj")); public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj")); public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderTestPipe.java b/src/main/java/com/hbm/render/block/RenderTestPipe.java new file mode 100644 index 000000000..849fcd0ba --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderTestPipe.java @@ -0,0 +1,130 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.test.TestPipe; +import com.hbm.lib.Library; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import api.hbm.fluid.IFluidConductor; +import api.hbm.fluid.IFluidConnector; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderTestPipe implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + GL11.glRotated(180, 0, 1, 0); + GL11.glScaled(1.25D, 1.25D, 1.25D); + tessellator.startDrawingQuads(); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pX", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nX", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pZ", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nZ", iicon, tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + IIcon overlay = block.getIcon(1, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + boolean pX = world.getTileEntity(x + 1, y, z) instanceof IFluidConductor; + boolean nX = world.getTileEntity(x - 1, y, z) instanceof IFluidConductor; + boolean pY = world.getTileEntity(x, y + 1, z) instanceof IFluidConductor; + boolean nY = world.getTileEntity(x, y - 1, z) instanceof IFluidConductor; + boolean pZ = world.getTileEntity(x, y, z + 1) instanceof IFluidConductor; + boolean nZ = world.getTileEntity(x, y, z - 1) instanceof IFluidConductor; + + int mask = 0 + (pX ? 32 : 0) + (nX ? 16 : 0) + (pY ? 8 : 0) + (nY ? 4 : 0) + (pZ ? 2 : 0) + (nZ ? 1 : 0); + + tessellator.addTranslation(x + 0.5F, y + 0.5F, z + 0.5F); + + int color = 0xff0000; + + if(mask == 0) { + renderDuct(iicon, overlay, color, tessellator, "pX"); + renderDuct(iicon, overlay, color, tessellator, "nX"); + renderDuct(iicon, overlay, color, tessellator, "pY"); + renderDuct(iicon, overlay, color, tessellator, "nY"); + renderDuct(iicon, overlay, color, tessellator, "pZ"); + renderDuct(iicon, overlay, color, tessellator, "nZ"); + } else if(mask == 0b100000 || mask == 0b010000) { + renderDuct(iicon, overlay, color, tessellator, "pX"); + renderDuct(iicon, overlay, color, tessellator, "nX"); + } else if(mask == 0b001000 || mask == 0b000100) { + renderDuct(iicon, overlay, color, tessellator, "pY"); + renderDuct(iicon, overlay, color, tessellator, "nY"); + } else if(mask == 0b000010 || mask == 0b000001) { + renderDuct(iicon, overlay, color, tessellator, "pZ"); + renderDuct(iicon, overlay, color, tessellator, "nZ"); + } else { + + if(pX) renderDuct(iicon, overlay, color, tessellator, "pX"); + if(nX) renderDuct(iicon, overlay, color, tessellator, "nX"); + if(pY) renderDuct(iicon, overlay, color, tessellator, "pY"); + if(nY) renderDuct(iicon, overlay, color, tessellator, "nY"); + if(pZ) renderDuct(iicon, overlay, color, tessellator, "nZ"); + if(nZ) renderDuct(iicon, overlay, color, tessellator, "pZ"); + + if(!pX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppn", iicon, tessellator, 0, true); + if(!pX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppp", iicon, tessellator, 0, true); + if(!nX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npn", iicon, tessellator, 0, true); + if(!nX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npp", iicon, tessellator, 0, true); + if(!pX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnn", iicon, tessellator, 0, true); + if(!pX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnp", iicon, tessellator, 0, true); + if(!nX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnn", iicon, tessellator, 0, true); + if(!nX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnp", iicon, tessellator, 0, true); + } + + tessellator.addTranslation(-x - 0.5F, -y - 0.5F, -z - 0.5F); + + return true; + } + + private void renderDuct(IIcon iicon, IIcon overlay, int color, Tessellator tessellator, String part) { + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, iicon, tessellator, 0, true); + ObjUtil.setColor(color); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, overlay, tessellator, 0, true); + ObjUtil.clearColor(); + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return TestPipe.renderID; + } +} diff --git a/src/main/java/com/hbm/render/util/ObjUtil.java b/src/main/java/com/hbm/render/util/ObjUtil.java index 108b90308..b58628541 100644 --- a/src/main/java/com/hbm/render/util/ObjUtil.java +++ b/src/main/java/com/hbm/render/util/ObjUtil.java @@ -91,7 +91,11 @@ public class ObjUtil { if(brightness < 0.45F) brightness = 0.45F; - tes.setColorOpaque_F(brightness, brightness, brightness); + if(hasColor) { + tes.setColorOpaque((int)(red * brightness), (int)(green * brightness), (int)(blue * brightness)); + } else { + tes.setColorOpaque_F(brightness, brightness, brightness); + } } for(int i = 0; i < f.vertices.length; i++) { @@ -116,4 +120,27 @@ public class ObjUtil { } } } + + private static int red; + private static int green; + private static int blue; + private static boolean hasColor = false; + + public static void setColor(int color) { + red = (color & 0xff0000) >> 16; + green = (color & 0x00ff00) >> 8; + blue = color & 0x0000ff; + hasColor = true; + } + + public static void setColor(int r, int g, int b) { + red = r; + green = g; + blue = b; + hasColor = true; + } + + public static void clearColor() { + hasColor = false; + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 873d7d66c..3b044c1ea 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -184,6 +184,7 @@ public class TileMappings { put(TileEntityDeaerator.class, "tileentity_deaerator"); put(TileEntityChungus.class, "tileentity_chungus"); put(TileEntityCableBaseNT.class, "tileentity_ohgod"); + put(TileEntityPipeBaseNT.class, "tileentity_pipe_base"); put(TileEntityWatz.class, "tileentity_watz"); put(TileEntityMachineBAT9000.class, "tileentity_bat9000"); put(TileEntityMachineOrbus.class, "tileentity_orbus"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index c55922b77..76f026db5 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -74,13 +74,12 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor } @Override - public int transferFluid(FluidType type, int fluid) { - // TODO Auto-generated method stub + public long transferFluid(FluidType type, long fluid) { return 0; } @Override - public int getDemand(FluidType type) { + public long getDemand(FluidType type) { return 0; } diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java new file mode 100644 index 000000000..17ec19c43 --- /dev/null +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -0,0 +1,125 @@ +package com.hbm.world.feature; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockStalagmite; +import com.hbm.inventory.RecipesCommon.MetaBlock; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.NoiseGeneratorPerlin; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.terraingen.DecorateBiomeEvent; + +public class OreCave { + + private NoiseGeneratorPerlin noise; + private MetaBlock ore; + /** The number that is being deducted flat from the result of the perlin noise before all other processing. Increase this to make strata rarer. */ + private double threshold = 2D; + /** The mulitplier for the remaining bit after the threshold has been deducted. Increase to make strata wavier. */ + private int rangeMult = 3; + /** The maximum range after multiplying - anything above this will be subtracted from (maxRange * 2) to yield the proper range. Increase this to make strata thicker. */ + private int maxRange = 4; + /** The y-level around which the stratum is centered. */ + private int yLevel = 30; + + public OreCave(Block ore) { + this(ore, 0); + } + + public OreCave(Block ore, int meta) { + this.ore = new MetaBlock(ore, meta); + MinecraftForge.EVENT_BUS.register(this); + } + + public OreCave setThreshold(double threshold) { + this.threshold = threshold; + return this; + } + + public OreCave setRangeMult(int rangeMult) { + this.rangeMult = rangeMult; + return this; + } + + public OreCave setMaxRange(int maxRange) { + this.maxRange = maxRange; + return this; + } + + public OreCave setYLevel(int yLevel) { + this.yLevel = yLevel; + return this; + } + + @SubscribeEvent + public void onDecorate(DecorateBiomeEvent.Pre event) { + + if(this.noise == null) { + this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + (ore.getID() * 31) + yLevel), 2); + } + + World world = event.world; + + if(world.provider.dimensionId != 0) + return; + + int cX = event.chunkX; + int cZ = event.chunkZ; + + double scale = 0.01D; + + for(int x = cX; x < cX + 16; x++) { + for(int z = cZ; z < cZ + 16; z++) { + + double n = noise.func_151601_a(x * scale, z * scale); + + if(n > threshold) { + int range = (int)((n - threshold) * rangeMult); + + if(range > maxRange) + range = (maxRange * 2) - range; + + if(range < 0) + continue; + + for(int y = yLevel - range; y <= yLevel + range; y++) { + Block genTarget = world.getBlock(x, y, z); + + if(genTarget.isNormalCube() && (genTarget.getMaterial() == Material.rock || genTarget.getMaterial() == Material.ground)) { + + boolean shouldGen = false; + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + Block neighbor = world.getBlock(MathHelper.clamp_int(x + dir.offsetX, cX, cX + 16), y + dir.offsetY, MathHelper.clamp_int(z + dir.offsetZ, cZ, cZ + 16)); + if(neighbor.getMaterial() == Material.air || neighbor instanceof BlockStalagmite) { + shouldGen = true; + break; + } + } + if(shouldGen) world.setBlock(x, y, z, ore.block, ore.meta, 2); + } else { + + if((genTarget.getMaterial() == Material.air || !genTarget.isNormalCube()) && event.rand.nextInt(5) == 0) { + + if(ModBlocks.stalactite.canPlaceBlockAt(world, x, y, z)) { + world.setBlock(x, y, z, ModBlocks.stalactite, ore.meta, 2); + } else { + if(ModBlocks.stalagmite.canPlaceBlockAt(world, x, y, z)) { + world.setBlock(x, y, z, ModBlocks.stalagmite, ore.meta, 2); + } + } + } + } + } + } + } + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index e9c2e7d07..2e0bdc918 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -137,6 +137,7 @@ chem.DEUTERIUM=Deuteriumextrahierung chem.DYN_DNT=Dineutronium-Dynosynthese chem.DYN_EUPH=Euphemium-Dynosynthese chem.DYN_SCHRAB=Schrabidium-Dynosynthese +chem.DYNAMITE=Dynamitherstellung chem.ELECTROLYSIS=Kryo-Elektrolyse chem.EPEARL=Enderperlen-Synthese chem.ETHANOL=Ethanolherstellung @@ -3553,6 +3554,8 @@ tile.solar_mirror.name=Heliostatspiegel tile.soyuz_capsule.name=Landekapsel tile.soyuz_launcher.name=Soyuz-Startplatform tile.spikes.name=Stacheln +tile.stalactite.sulfur.name=Schwefelhaltiger Stalaktit +tile.stalagmite.sulfur.name=Schwefelhaltiger Stalagmit tile.steel_beam.name=Stahlträger tile.steel_corner.name=Stahlwand (Ecke) tile.steel_grate.name=Stahlgitter @@ -3564,6 +3567,7 @@ tile.stone_depth.name=Tiefenfels tile.stone_depth_nether.name=Nether-Tiefenfels tile.stone_gneiss.name=Graphitschiefer tile.stone_porous.name=Poröser Stein +tile.stone_resource.sulfur.name=Schwefelhaltiger Stein tile.struct_iter_core.name=Fusionsreaktor-Kernkomponente tile.struct_launcher.name=Startrampe-Komponentenblock tile.struct_launcher_core.name=Kompaktrampe-Kernkomponente diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6e2a95097..25745b257 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -306,6 +306,7 @@ chem.DUCRETE=Ducrete Production chem.DYN_DNT=Dineutronium Dynosynthesis chem.DYN_EUPH=Euphemium Dynosynthesis chem.DYN_SCHRAB=Schrabidium Dynosynthesis +chem.DYNAMITE=Dynamite Synthesis chem.ELECTROLYSIS=Cryo-Electrolysis chem.EPEARL=Ender Pearl Synthesis chem.ETHANOL=Ethanol Production @@ -3926,6 +3927,8 @@ tile.solar_mirror.name=Heliostat Mirror tile.soyuz_capsule.name=Cargo Landing Capsule tile.soyuz_launcher.name=Soyuz Launch Platform tile.spikes.name=Spikes +tile.stalactite.sulfur.name=Sulfurous Stalactite +tile.stalagmite.sulfur.name=Sulfurous Stalagmite tile.steel_beam.name=Steel Beam tile.steel_corner.name=Steel Wall Corner tile.steel_grate.name=Steel Grate @@ -3937,6 +3940,7 @@ tile.stone_depth.name=Depth Rock tile.stone_depth_nether.name=Nether Depth Rock tile.stone_gneiss.name=Graphitic Schist tile.stone_porous.name=Porous Stone +tile.stone_resource.sulfur.name=Sulfurous Stone tile.struct_iter_core.name=Fusion Reactor Core Component tile.struct_launcher.name=Launch Pad Component Block tile.struct_launcher_core.name=Compact Launcher Core Component diff --git a/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj b/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj new file mode 100644 index 000000000..2273b5e22 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj @@ -0,0 +1,664 @@ +# Blender v2.79 (sub 0) OBJ File: 'pipe_neo.blend' +# www.blender.org +o pZ +v 0.187500 0.000000 -0.500000 +v 0.132582 -0.132582 -0.500000 +v -0.000000 -0.187500 -0.500000 +v -0.132583 -0.132582 -0.500000 +v -0.187500 0.000000 -0.500000 +v -0.132583 0.132583 -0.500000 +v -0.000000 0.187500 -0.500000 +v 0.132582 0.132583 -0.500000 +v -0.132582 0.132583 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 0.000000 0.000000 +v 0.132582 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132582 0.132583 0.000000 +v 0.187500 -0.000000 0.000000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.624326 0.187500 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.437500 0.374326 +vn -0.3827 0.9239 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +vn -0.3827 -0.9239 -0.0000 +vn 0.9239 -0.3827 -0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.0000 0.0000 -1.0000 +s off +f 7/1/1 9/2/1 10/3/1 +f 5/4/2 11/5/2 12/6/2 +f 3/7/3 13/8/3 14/9/3 +f 8/10/4 10/3/4 15/11/4 +f 9/12/5 5/4/5 12/6/5 +f 11/13/6 3/7/6 14/9/6 +f 2/14/7 16/15/7 13/16/7 +f 1/17/8 15/18/8 16/15/8 +f 8/19/9 1/20/9 5/21/9 +f 7/1/1 6/22/1 9/2/1 +f 5/4/2 4/23/2 11/5/2 +f 3/7/3 2/24/3 13/8/3 +f 8/10/4 7/1/4 10/3/4 +f 9/12/5 6/25/5 5/4/5 +f 11/13/6 4/26/6 3/7/6 +f 2/14/7 1/17/7 16/15/7 +f 1/17/8 8/27/8 15/18/8 +f 1/20/9 2/28/9 3/29/9 +f 3/29/9 4/30/9 1/20/9 +f 4/30/9 5/21/9 1/20/9 +f 5/21/9 6/31/9 7/32/9 +f 7/32/9 8/19/9 5/21/9 +o pX +v 0.500000 0.000000 0.187500 +v 0.500000 -0.132582 0.132582 +v 0.500000 -0.187500 0.000000 +v 0.500000 -0.132582 -0.132582 +v 0.500000 0.000000 -0.187500 +v 0.500000 0.132583 -0.132582 +v 0.500000 0.187500 0.000000 +v 0.500000 0.132583 0.132582 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132583 0.132582 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.132583 0.132582 +v 0.000000 0.000000 -0.187500 +v 0.000000 -0.132583 -0.132582 +v 0.000000 0.187500 0.000000 +v 0.000000 0.132583 -0.132582 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 0.500000 +vt -0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.624326 0.187500 +vt -0.000000 1.000000 +vt 0.125000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.437500 0.374326 +vn -0.0000 0.9239 -0.3827 +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.9239 -0.3827 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 0.3827 0.9239 +vn 1.0000 0.0000 0.0000 +s off +f 23/33/10 32/34/10 31/35/10 +f 29/36/11 20/37/11 30/38/11 +f 19/39/12 28/40/12 27/41/12 +f 24/42/13 31/35/13 26/43/13 +f 22/44/14 29/36/14 32/45/14 +f 20/46/15 27/41/15 30/47/15 +f 18/48/16 25/49/16 28/50/16 +f 17/51/17 26/52/17 25/49/17 +f 24/53/18 17/54/18 21/55/18 +f 23/33/10 22/56/10 32/34/10 +f 29/36/11 21/57/11 20/37/11 +f 19/39/12 18/58/12 28/40/12 +f 24/42/13 23/33/13 31/35/13 +f 22/44/14 21/57/14 29/36/14 +f 20/46/15 19/39/15 27/41/15 +f 18/48/16 17/51/16 25/49/16 +f 17/51/17 24/59/17 26/52/17 +f 17/54/18 18/60/18 19/61/18 +f 19/61/18 20/62/18 17/54/18 +f 20/62/18 21/55/18 17/54/18 +f 21/55/18 22/63/18 23/64/18 +f 23/64/18 24/53/18 21/55/18 +o nZ +v 0.187500 -0.000000 0.500000 +v 0.132583 -0.132583 0.500000 +v 0.000000 -0.187500 0.500000 +v -0.132582 -0.132583 0.500000 +v -0.187500 -0.000000 0.500000 +v -0.132582 0.132582 0.500000 +v 0.000000 0.187500 0.500000 +v 0.132583 0.132582 0.500000 +v -0.132582 0.132583 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 0.000000 0.000000 +v 0.132582 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132582 0.132583 0.000000 +v 0.187500 -0.000000 0.000000 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.250674 0.187500 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 0.000000 +vt 0.250000 0.000000 +vt -0.000000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 0.000000 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.305394 0.055394 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn 0.0000 0.0000 1.0000 +vn 0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 -0.0000 +vn -0.3827 -0.9239 -0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.3827 0.9239 0.0000 +vn 0.3827 -0.9239 -0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.3827 0.9239 0.0000 +s off +f 33/65/19 39/66/19 37/67/19 +f 48/68/20 40/69/20 33/70/20 +f 45/71/21 33/70/21 34/72/21 +f 36/73/22 46/74/22 35/75/22 +f 41/76/23 37/77/23 38/78/23 +f 47/79/24 39/80/24 40/81/24 +f 46/74/25 34/82/25 35/75/25 +f 44/83/26 36/84/26 37/77/26 +f 42/85/27 38/86/27 39/80/27 +f 35/87/19 34/88/19 33/65/19 +f 33/65/19 40/89/19 39/66/19 +f 39/66/19 38/90/19 37/67/19 +f 37/67/19 36/91/19 35/87/19 +f 35/87/19 33/65/19 37/67/19 +f 48/68/20 47/92/20 40/69/20 +f 45/71/21 48/68/21 33/70/21 +f 36/73/22 43/93/22 46/74/22 +f 41/76/23 44/83/23 37/77/23 +f 47/79/24 42/85/24 39/80/24 +f 46/74/25 45/94/25 34/82/25 +f 44/83/26 43/95/26 36/84/26 +f 42/85/27 41/96/27 38/86/27 +o nX +v -0.500000 -0.000000 0.187500 +v -0.500000 -0.132583 0.132583 +v -0.500000 -0.187500 0.000000 +v -0.500000 -0.132583 -0.132582 +v -0.500000 -0.000000 -0.187500 +v -0.500000 0.132582 -0.132582 +v -0.500000 0.187500 0.000000 +v -0.500000 0.132582 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132583 0.132582 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.132583 0.132582 +v 0.000000 0.000000 -0.187500 +v 0.000000 -0.132583 -0.132582 +v 0.000000 0.187500 0.000000 +v 0.000000 0.132583 -0.132582 +vt 0.437500 0.000674 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.125000 0.000000 +vt 0.000000 0.500000 +vt -0.000000 0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.305394 0.055394 +vt 0.125000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.9239 -0.3827 +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.9239 -0.3827 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 0.3827 0.9239 +s off +f 51/97/28 49/98/28 55/99/28 +f 55/100/29 64/101/29 54/102/29 +f 61/103/30 52/104/30 53/105/30 +f 59/106/31 50/107/31 51/108/31 +f 58/109/32 55/100/32 56/110/32 +f 64/111/33 53/105/33 54/112/33 +f 62/113/34 51/108/34 52/114/34 +f 60/115/35 49/116/35 50/117/35 +f 57/118/36 56/119/36 49/116/36 +f 51/97/28 50/120/28 49/98/28 +f 49/98/28 56/121/28 55/99/28 +f 55/99/28 54/122/28 53/123/28 +f 53/123/28 52/124/28 55/99/28 +f 52/124/28 51/97/28 55/99/28 +f 55/100/29 63/125/29 64/101/29 +f 61/103/30 62/126/30 52/104/30 +f 59/106/31 60/127/31 50/107/31 +f 58/109/32 63/125/32 55/100/32 +f 64/111/33 61/103/33 53/105/33 +f 62/113/34 59/106/34 51/108/34 +f 60/115/35 57/118/35 49/116/35 +f 57/118/36 58/128/36 56/119/36 +o pY +v -0.000000 0.500000 -0.187500 +v -0.132583 0.500000 -0.132582 +v -0.187500 0.500000 0.000000 +v -0.132583 0.500000 0.132582 +v 0.000000 0.500000 0.187500 +v 0.132583 0.500000 0.132582 +v 0.187500 0.500000 0.000000 +v 0.132583 0.500000 -0.132582 +v -0.000000 0.000000 -0.187500 +v 0.132583 0.000000 -0.132582 +v -0.187500 0.000000 0.000000 +v -0.132583 0.000000 -0.132582 +v 0.000000 0.000000 0.187500 +v -0.132583 0.000000 0.132582 +v 0.187500 0.000000 0.000000 +v 0.132583 0.000000 0.132582 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.250674 0.187500 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.0000 1.0000 0.0000 +s off +f 71/129/37 80/130/37 79/131/37 +f 69/132/38 78/133/38 77/134/38 +f 67/135/39 76/136/39 75/137/39 +f 72/138/40 79/131/40 74/139/40 +f 70/140/41 77/134/41 80/141/41 +f 68/142/42 75/137/42 78/143/42 +f 66/144/43 73/145/43 76/146/43 +f 65/147/44 74/148/44 73/145/44 +f 69/149/45 71/150/45 65/151/45 +f 71/129/37 70/152/37 80/130/37 +f 69/132/38 68/153/38 78/133/38 +f 67/135/39 66/154/39 76/136/39 +f 72/138/40 71/129/40 79/131/40 +f 70/140/41 69/132/41 77/134/41 +f 68/142/42 67/135/42 75/137/42 +f 66/144/43 65/147/43 73/145/43 +f 65/147/44 72/155/44 74/148/44 +f 65/151/45 66/156/45 69/149/45 +f 66/156/45 67/157/45 69/149/45 +f 67/157/45 68/158/45 69/149/45 +f 69/149/45 70/159/45 71/150/45 +f 71/150/45 72/160/45 65/151/45 +o nnn +v 0.000000 -0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 -0.000000 0.000000 +v -0.132582 -0.000000 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 -0.132583 0.132583 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vn -0.3574 -0.8629 0.3574 +vn -0.3574 -0.3574 0.8629 +vn -0.5774 -0.5774 0.5774 +vn -0.8629 -0.3574 0.3574 +s off +f 81/161/46 86/162/46 82/163/46 +f 84/164/47 86/162/47 85/165/47 +f 86/162/48 84/164/48 82/163/48 +f 82/163/49 84/164/49 83/166/49 +o nnp +v 0.000000 -0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 -0.000000 0.000000 +v 0.000000 -0.000000 -0.187500 +v -0.132582 -0.000000 -0.132583 +v 0.000000 -0.132583 -0.132583 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vn -0.3574 -0.8629 -0.3574 +vn -0.3574 -0.3574 -0.8629 +vn -0.5774 -0.5774 -0.5774 +vn -0.8629 -0.3574 -0.3574 +s off +f 87/167/50 88/168/50 92/169/50 +f 90/170/51 92/169/51 91/171/51 +f 92/169/52 88/168/52 91/171/52 +f 88/168/53 89/172/53 91/171/53 +o pnp +v 0.187500 -0.000000 0.000000 +v 0.132583 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132583 -0.000000 -0.132583 +v 0.000000 -0.000000 -0.187500 +v 0.000000 -0.132583 -0.132583 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vn 0.3574 -0.8629 -0.3574 +vn 0.3574 -0.3574 -0.8629 +vn 0.5774 -0.5774 -0.5774 +vn 0.8629 -0.3574 -0.3574 +s off +f 94/173/54 95/174/54 98/175/54 +f 96/176/55 98/175/55 97/177/55 +f 98/175/56 96/176/56 94/173/56 +f 93/178/57 94/173/57 96/176/57 +o pnn +v 0.187500 -0.000000 0.000000 +v 0.132583 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.000000 0.187500 +v 0.132583 -0.000000 0.132583 +v 0.000000 -0.132583 0.132583 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.625000 0.625000 +vn 0.3574 -0.8629 0.3574 +vn 0.8629 -0.3574 0.3574 +vn 0.5774 -0.5774 0.5774 +vn 0.3574 -0.3574 0.8629 +s off +f 100/179/58 104/180/58 101/181/58 +f 99/182/59 103/183/59 100/179/59 +f 104/180/60 100/179/60 103/183/60 +f 103/183/61 102/184/61 104/180/61 +o ppn +v 0.187500 -0.000000 0.000000 +v 0.000000 0.187500 0.000000 +v 0.132583 0.132582 0.000000 +v 0.000000 -0.000000 0.187500 +v 0.132583 -0.000000 0.132583 +v 0.000000 0.132582 0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.250000 0.500000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vn 0.3574 0.3574 0.8629 +vn 0.3574 0.8629 0.3574 +vn 0.8629 0.3574 0.3574 +vn 0.5774 0.5774 0.5774 +s off +f 108/185/62 109/186/62 110/187/62 +f 106/188/63 110/187/63 107/189/63 +f 107/189/64 109/186/64 105/190/64 +f 109/186/65 107/189/65 110/187/65 +o npn +v -0.187500 -0.000000 0.000000 +v -0.132582 0.132582 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.000000 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132582 0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vt 0.250000 0.500000 +vn -0.8629 0.3574 0.3574 +vn -0.5774 0.5774 0.5774 +vn -0.3574 0.3574 0.8629 +vn -0.3574 0.8629 0.3574 +s off +f 111/191/66 114/192/66 112/193/66 +f 114/192/67 116/194/67 112/193/67 +f 114/192/68 115/195/68 116/194/68 +f 112/193/69 116/194/69 113/196/69 +o npp +v -0.187500 -0.000000 0.000000 +v -0.132582 0.132582 0.000000 +v 0.000000 0.187500 0.000000 +v 0.000000 -0.000000 -0.187500 +v -0.132582 -0.000000 -0.132583 +v 0.000000 0.132582 -0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.625000 0.625000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vn -0.3574 0.3574 -0.8629 +vn -0.8629 0.3574 -0.3574 +vn -0.5774 0.5774 -0.5774 +vn -0.3574 0.8629 -0.3574 +s off +f 120/197/70 121/198/70 122/199/70 +f 117/200/71 118/201/71 121/198/71 +f 121/198/72 118/201/72 122/199/72 +f 118/201/73 119/202/73 122/199/73 +o ppp +v 0.187500 -0.000000 0.000000 +v 0.000000 0.187500 0.000000 +v 0.132583 0.132582 0.000000 +v 0.132583 -0.000000 -0.132583 +v 0.000000 -0.000000 -0.187500 +v 0.000000 0.132582 -0.132583 +vt 0.500000 0.500000 +vt 0.625000 0.625000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.625000 0.375000 +vn 0.3574 0.3574 -0.8629 +vn 0.3574 0.8629 -0.3574 +vn 0.5774 0.5774 -0.5774 +vn 0.8629 0.3574 -0.3574 +s off +f 126/203/74 127/204/74 128/205/74 +f 124/206/75 125/207/75 128/205/75 +f 128/205/76 125/207/76 126/203/76 +f 125/207/77 123/208/77 126/203/77 +o nY +v -0.000000 -0.500000 -0.187500 +v -0.132583 -0.500000 -0.132582 +v -0.187500 -0.500000 0.000000 +v -0.132583 -0.500000 0.132582 +v 0.000000 -0.500000 0.187500 +v 0.132583 -0.500000 0.132582 +v 0.187500 -0.500000 0.000000 +v 0.132583 -0.500000 -0.132582 +v -0.000000 0.000000 -0.187500 +v 0.132583 0.000000 -0.132582 +v -0.187500 0.000000 0.000000 +v -0.132583 0.000000 -0.132582 +v 0.000000 0.000000 0.187500 +v -0.132583 0.000000 0.132582 +v 0.187500 0.000000 0.000000 +v 0.132583 0.000000 0.132582 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.437500 0.374326 +vt 0.125000 0.500000 +vt -0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.569606 0.055394 +vt 0.624326 0.187500 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn 0.0000 -1.0000 0.0000 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +s off +f 132/209/78 131/210/78 135/211/78 +f 143/212/79 134/213/79 135/214/79 +f 141/215/80 132/216/80 133/217/80 +f 139/218/81 130/219/81 131/220/81 +f 138/221/82 135/214/82 136/222/82 +f 144/223/83 133/217/83 134/224/83 +f 142/225/84 131/220/84 132/226/84 +f 140/227/85 129/228/85 130/229/85 +f 137/230/86 136/231/86 129/228/86 +f 131/210/78 130/232/78 135/211/78 +f 130/232/78 129/233/78 135/211/78 +f 129/233/78 136/234/78 135/211/78 +f 135/211/78 134/235/78 133/236/78 +f 133/236/78 132/209/78 135/211/78 +f 143/212/79 144/237/79 134/213/79 +f 141/215/80 142/238/80 132/216/80 +f 139/218/81 140/239/81 130/219/81 +f 138/221/82 143/212/82 135/214/82 +f 144/223/83 141/215/83 133/217/83 +f 142/225/84 139/218/84 131/220/84 +f 140/227/85 137/230/85 129/228/85 +f 137/230/86 138/240/86 136/231/86 diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_back_off.png b/src/main/resources/assets/hbm/textures/blocks/observer_back_off.png new file mode 100644 index 0000000000000000000000000000000000000000..5f770a5a4e2bd6f31256428e0e8bf70f9ac05ae7 GIT binary patch literal 655 zcmV;A0&x9_P)C z;<`zorG0^tTDB!?FM`b;!GJDCqksPSCb_-6jUqyfkr*RdYXC$9V+=|uk|Y5jNfNyG zc<&Jr>bgdhQan99p_HQQy6J(n7Ogc(De^qW7(S zmrJUuLPXG76Jwl=R!NeOWf>wu2!UZ3@ZR(I_()Y%q-n}_yQQisx~{`}Kji@@546@S z77LckB_Ra*zGpU@VgCJxUm;=j*PoM;QNcK3Nz;@VBXwP~-EL7zQ4|Ft!mp4}lW;A< z;c(#d^OFz)^ZA?*0^i@?rvjsKquXU!^8EbFA3y)*M~rk`N1o?gUS9I`^~GYb;O_2@ zrfE=GYeWPQ;q2^;EX&yKcI@|iLI}LPyzu`1jxmO|ZE?;KLLg1kQyVeH2_RsiZ@pf# zUa!$wv)ODYih{oH8P7Ok8HV9Bj{hM%a*?L#gm~9=gb?uFGk&U+LP7|L2xVEaTCK3w z0!-jsUtcqy&uQD1wrv>~Z_JaCK!E*zkF}P*?0mPE7^bjPw8i002ovPDHLkV1jweE7<@5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_back_on.png b/src/main/resources/assets/hbm/textures/blocks/observer_back_on.png new file mode 100644 index 0000000000000000000000000000000000000000..25d538d750ac4ff0010eddd66733883607537c9f GIT binary patch literal 697 zcmV;q0!ICbP)GA=X-Q&Qw)JRaF2yK0YGO zIW8_PczAfAZQH(zwU+DaYo4E+j9q9_Q_<@0|6F`1^fM; z*=*L2a6BHF&*vE zIeb;|^J0Mxfx>%!y1HUA9<$l)NFwML!aJh1Qi`G|5D{XGMBd62poIoi>N{QKQ zhE9q3n>Xw}ed4cQKag`KQ^Wo!9iv0(D<9lj_i-@fH)GNB29?xd8+ zIU^~h^E&<`VedT@1>zjpT6~Q7wk5_$2!XDs)*6X1A|lM^b7r#{&N+ZyjW;(pj7B58 z_jvE=jMw3$Qy{=@x5GI{+qS(rkH;hT_xIFwjkUISY4?_=rzf`C?f>lDwHiX8uIrv7 f5$WS~T?6nhKC)LLlV?O-00000NkvXXu0mjfYPm%F literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_front.png b/src/main/resources/assets/hbm/textures/blocks/observer_front.png new file mode 100644 index 0000000000000000000000000000000000000000..a52922d72ba1866f0526aed0b1d300434a1e189d GIT binary patch literal 876 zcmV-y1C#uTP)8fe}VFF3S%>RxleNfGrTA5jlk9pboGc zunNb$03<*l141fe9x^NN*sgLtZU=7Pfo?|A2^m*9QeD-3opb*G6UWELMr(~R24f6L zDFC$AIF5sq5+MWtLI{#1AxRRn)&xO-mQr$idyABk>2zv0c%Fw+3MnP|d>+SfFvc*M zOqfh206aWApgqrHVPSz@uSXom_7=x+SX*1;_4O6Uac~@m>2yjMhODftkYyQh9M4`b zKYev|)h+~RG#b3Tyx{x3O<^<|QLELsyu6&H5{4mB6xjuhM#CPEWf`SXiBhSA5Q2Wc zkLP*hayjz(JW@)uQi^$ao=28t+}+*LYPEPf_V)G|3x zq1)}!Znr6y%NS#9i?!>z7-I;6fcyJCsDHIB%Y07v! zM!K$x5P~er@O__py>5lm!O+3j0&A@)7K>D?RffYMlgR|Bl$sSoYZez5aU6&J{e6TG z@8aPKR+i7!&%NhT{{2PkB^T8LGaGbX_{KwhGA%Hq_wvH z!!Vq^U}JMh0e zI6Xb(qp`cY`)53u)9CM|nJ2#eGn*eA9Q?)u{VNY@wHnQ46JreDf3jd+;H|AKmY0_) zm&=@;oqh4(iw9pk_;emZ00008UO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta new file mode 100644 index 000000000..754e4e96f --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta @@ -0,0 +1,105 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1 + ] + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_side.png b/src/main/resources/assets/hbm/textures/blocks/observer_side.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0d38dca333aad744b5839badf4e525506600d1 GIT binary patch literal 539 zcmV+$0_6RPP)@B&d15&}ha zby1j?mlqWgR25alIR}7<;JwFMi!lZOV+^%cYORO}*XtFr*7ElDhP9TQ^Sls3z&VGt zmTlYc-lM9V=gE1V0DOFWARz?yedqoCol?rIGODlZiuWGxJvnD$j66O*(tD?ra#t|e zpPrs35MbLjM1*BoW(&u0aJgJ~eSM|Yij6UnQkno`483=H@3huXRbq^jG=#vqu58hIL&L5n5~W!Z1=q=)DtTWVAbQz}*Aq z9IA>jW&)OF!Fx|i31iHBrQSQLI!%^kS!M>t0l*+$*Ogl9Bq^nkbLRW|o7?SnCm6^;I1XZr|5~&IJmNai zCn6YQW~6Vo8>JM+7+%Pb{x`yZb1_~e=S*wupF(Rb(pp1AxLhtgKR**f0GPq)y>p%? zDJ4=$jE^^PGAaRletr@{pp-II9LK@W&kr$1y!W%Ev6io|FRs_?zwbPx)>?@%PLD)n dp2rvg_yq&!QF9fhi*x`0002ovPDHLkV1m+;?m_?n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pipe_neo.png b/src/main/resources/assets/hbm/textures/blocks/pipe_neo.png new file mode 100644 index 0000000000000000000000000000000000000000..37c9b3699b571c0d7622652ee36e3d1c87d68175 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-KUWhC$JIW(6CESqNIKY6D)p!FZ>(#3s7nbxXb#wN06*!4=*bCK6 z6^=aLXTMzPwx_%Qxk$hETGxd=#oJ8E1C+C0m%KQBw4wjhf7Sy$v3}{FpZN4}O(=c# z-T%iw9;c2Lf&1(XYo>AU`OeV6@%rpH(}wT!w&ezf&RSM^!?BEQl~=5Nd~Weq$-H^p r9;bP0l+XkKCgNOf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png b/src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..7e999b57b048552a8c34a06379b54da647a4c80b GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfP=H<8Mv;->@qhl0m2P)3fQlGAUHx3vIVCg!0Hl2v0RR91 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png b/src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png new file mode 100644 index 0000000000000000000000000000000000000000..a17615c9138834ba06ba4e6819174bceb49df99d GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf*1Fho6RhY?jYW zTMiiTOk zuihFQc--aSVqna$=lc-}PQ@6v9WLi8W2dFc9xt?ip0S-T$ZOq{rd5kp{WjXoX_j;C zdF4Op#+iyr`Lo|Ed1&s8dcF2nIQxOze|k*s|NiIj(v<&P{_yhua_b+KaXB0@>G|S< R^*|3Xc)I$ztaD0e0s!jzXdwUq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png b/src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ffcd47d25ef1bea2c794975def03fd224ee2fa GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfQ!&Nk3A5?Tf$Lelc)LFQbL9hs!iJ!N_y&*W3IV4H6fw)0

{&J4%L;w3K z3^S5fXsy~c>zz6CoNYWVETOCiqP*v&9hoT8ZE*a=<(#d11Zt-*(2y?PdtbusxWTT} znbEgQW|%Ive!kB*Ak^iF>c4f4fo9JxZry$Pz7WIipZt;$+4aUd?&a%$mJj-|)n4t# a?sr`e=@h#>|+1dpv$a0yZwzv$%-DKsS~_bczAdmEAKZxU@vZb zeYf@b$jQ--)?MC=Y3uI&wrr}s|D44o#V;XJ%;I^QWeMwyokD^xEXQUj9?X6sm+W$` zQlsD}iy)(5W5y#kZC2!|>Ojmf`Bj6;x*zj4A(sCXX8-@+n zm>8TmoF5(E_%ov5+}6#zvNycmwQZkp{@7l{)JnC@w3dbJ2&Tc|Lsc@++fXb$hy8La+-V-zd^ijV%|c*tw7%} Nc)I$ztaD0e0sy&QVy6HA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png new file mode 100644 index 0000000000000000000000000000000000000000..1d499399ae1e2a17b010fb7289cdc8909a8a1466 GIT binary patch literal 342 zcmV-c0jd6pP)$DtF;b)+qU87oQW|4psH7cQVQ$30?=9; zz7^M65s?uKA<%mVxElBXKq-Y7<1KNff0JPJJ?+`N3@_)Ss;DX=GH7}<5uudwcx$Z@ zV`Mpw;{9Asg+R*Mc92S%;WwI^MB6Uz`(u? z^rN&t$*B4W8*qLgCt^u&BVXFi`}Sr(4tFdPnXU6)p?#mC17d7hK!In`>F zD2mAQ9OL2Pfl{f2)*2ziuEJum$m!`RVHgs}F|Ae$!!R&SlOPDtTGQ+GFqBecS%%{{ zl*?sI(W7M5jEtJP3SvDs`eeBZ~mZPGO5@$r%MdX3{a z2qCz=y=AdjptZ)fZQAWNQc9-NDF8P&HyBYAv0kqM=yW=~y}j}B^1}1;Gf9$Q+cv)M z^T(GjOdcL~n0cNvolbuTbUGaXJkP`PJc1w~2m*ZHCyryDo}Q@J>l}1C@E>vz1XQb4 z3WJ}2ZP)8HM@L5pA;_|f)oR84{XL~pi8zi?O8u@(2)f-a)oPXV^K)F+r7*twy470q z>GNmMn!mq)M+kwGlEq@d{{B8f2(;GZd5+eaFbq*j(QGy`cK6eot6#r}<9K(hD2m9k z3?T%DVIZX>iXwWw9+qWseSM7)h9Tqen89E`k|anecl!r8JUm2e4M3$*;q~ZuF3`HLjV0 zk>vo02+7>k`!J11;=0N44B(t&Sr)8)#f&j{?*X0-!T`W9jTBjaN{r>J@}og0`wq^z zORViXQV~H!u+|y#pr;B62W>arGZ6Nam*A!@@hngH>g~ zbB)?{m_{CDb(#8|e?@Y4NFj@EBv$C0!+U=|B;A5C>buTFm3r@Ackui3wJU=r$48?@ zaqJl4I}3MeVvA{*6heO(LLZac$4>B?&1QT!OOKf-~rT1mvoz6Y?`##Qh&pFWJ>2rE8 z45RrSODTy&B1)_>X&6RR*L46Yl?nht2&G7WH?nD(2qEzM{UnpgW;@>1o)~?(i)oXy zXqpCq$K%24^&*5In~rmzf7|s^tW676@2A z#_K}>JX`Mo6s;N$?qUbF;}Zeqj&@i$J8Z=OdTi_e6?~L$xmn8+I9}#rGl8C1D9&6Wuv==U?|G@ z$pK@-p8%AqHmO`|5DZ00Wg>rD0DBtS+c>kntsLd9%Os@)a9pOI&lemLf7MQ^`^W$Q N002ovPDHLkV1g?YuqOZj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png b/src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png new file mode 100644 index 0000000000000000000000000000000000000000..f044bbf390c7d2c72d71594d009c84b6e9ddc2e7 GIT binary patch literal 409 zcmV;K0cQS*P)-V$xL1kR#!_;9H~4svoXXmZji zXzL(os%UOZXs=B$@J^z|1`jgndM(}S?#e$6eYf}L^ZWk(ya)fGS~V+c)vTQ5?tByk zFwF`*#{rN4^+rn@7eF1UG%y$Vr z$3fQ<%Gq@Xp*4VU)TBT17=A#1HVnbZvX0vk*dBmZhl@0&|uCyAO|J;h=u> zpx$U{ez&K=5O|5c{sM=35Y+jmA%ThTR5jO^X8MhvG`HSLx5M1O00000NkvXXu0mjf DmOi+h literal 0 HcmV?d00001 From 6e3f40f0d2a84393944269a7a320a6b35e3a2023 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 27 Mar 2022 21:50:29 +0200 Subject: [PATCH 07/31] test fluid ducts, hazard tweaks --- src/main/java/com/hbm/hazard/HazardRegistry.java | 11 +++-------- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../hbm/render/entity/item/RenderTNTPrimedBase.java | 2 ++ .../hbm/tileentity/network/TileEntityPipeBaseNT.java | 6 +++++- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- src/main/resources/mcmod.info | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 86e1e392e..4c8e4838c 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -153,23 +153,18 @@ public class HazardRegistry { HazardSystem.register(Items.pumpkin_pie, makeData(EXPLOSIVE, 1F)); HazardSystem.register(ball_dynamite, makeData(EXPLOSIVE, 2F)); - HazardSystem.register(ball_tnt, makeData(EXPLOSIVE, 3F)); - HazardSystem.register(ingot_semtex, makeData(EXPLOSIVE, 5F)); - HazardSystem.register(ingot_c4, makeData(EXPLOSIVE, 5F)); HazardSystem.register(stick_dynamite, makeData(EXPLOSIVE, 1F)); HazardSystem.register(stick_tnt, makeData(EXPLOSIVE, 1.5F)); HazardSystem.register(stick_semtex, makeData(EXPLOSIVE, 2.5F)); HazardSystem.register(stick_c4, makeData(EXPLOSIVE, 2.5F)); + HazardSystem.register(cordite, makeData(EXPLOSIVE, 2F)); + HazardSystem.register(ballistite, makeData(EXPLOSIVE, 1F)); + HazardSystem.register("dustCoal", makeData(COAL, powder)); HazardSystem.register("dustTinyCoal", makeData(COAL, powder_tiny)); HazardSystem.register("dustLignite", makeData(COAL, powder)); HazardSystem.register("dustTinyLignite", makeData(COAL, powder_tiny)); - - HazardSystem.register(block_semtex, makeData(EXPLOSIVE, 25F)); - HazardSystem.register(block_c4, makeData(EXPLOSIVE, 25F)); - HazardSystem.register(cordite, makeData(EXPLOSIVE, 2F)); - HazardSystem.register(ballistite, makeData(EXPLOSIVE, 1F)); HazardSystem.register(insert_polonium, makeData(RADIATION, 100F)); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 5de3b052f..9235430d4 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4179)"; + public static final String VERSION = "1.0.27 BETA (4186)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/entity/item/RenderTNTPrimedBase.java b/src/main/java/com/hbm/render/entity/item/RenderTNTPrimedBase.java index e2a3be62e..9776f4aef 100644 --- a/src/main/java/com/hbm/render/entity/item/RenderTNTPrimedBase.java +++ b/src/main/java/com/hbm/render/entity/item/RenderTNTPrimedBase.java @@ -23,6 +23,8 @@ public class RenderTNTPrimedBase extends Render { public void doRender(EntityTNTPrimedBase tnt, double x, double y, double z, float f0, float f1) { GL11.glPushMatrix(); GL11.glTranslatef((float) x, (float) y, (float) z); + GL11.glRotatef(-90F, 0F, 1F, 0F); + float f2; if((float) tnt.fuse - f1 + 1.0F < 10.0F) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 76f026db5..826a62809 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -75,7 +75,11 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor @Override public long transferFluid(FluidType type, long fluid) { - return 0; + + if(this.network == null) + return fluid; + + return this.network.transferFluid(fluid); } @Override diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 25745b257..78a4494a2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1839,7 +1839,7 @@ item.ingot_am241.name=Americium-241 Ingot item.ingot_am242.name=Americium-242 Ingot item.ingot_americium_fuel.name=Ingot of Americium Fuel item.ingot_asbestos.name=Asbestos Sheet -item.ingot_asbestos.desc=§o\"Filled with life, self-doubt and asbestos. That comes with the air.\"§r +item.ingot_asbestos.desc=§o"Filled with life, self-doubt and asbestos. That comes with the air."§r item.ingot_au198.name=Gold-198 Ingot item.ingot_australium.name=Australium Ingot item.ingot_bakelite.name=Bakelite Bar diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 07980a6b6..be645a79a 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "hbm", "name": "Hbm's Nuclear Tech", "description": "A mod that adds weapons, nuclear themed stuff and machines", - "version":"1.0.27_X4179", + "version":"1.0.27_X4186", "mcversion": "1.7.10", "url": "", "updateUrl": "", From 202a31ff2f9d12ac77e1eb7a0d7102d64af8068b Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Mon, 28 Mar 2022 10:01:40 +0300 Subject: [PATCH 08/31] Updated ru_RU.lang aaaa --- src/main/resources/assets/hbm/lang/ru_RU.lang | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 2148361ee..a712dae2f 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -206,6 +206,7 @@ armor.ignoreLimit=Сопротивление не зависит от преде armor.rocketBoots=Ракетные ботинки armor.sprintBoost=Ускоренный бег armor.projectileProtection=Модификатор урона %s от снарядов +armor.dash=Даёт %s дешей hazard.prot=Защищает от: hazard.noprot=НЕ защищает от: @@ -1033,6 +1034,7 @@ chem.LUBRICANT=Смешивание машинной смазки chem.PETROIL_LEADED=Смешивание этилированного бензина chem.RUBBER=Производство резины chem.TNT=Синтез ТНТ +chem.DYNAMITE=Синтез динамита item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep @@ -1894,7 +1896,7 @@ item.ingot_electronium.name=Электрониевый слиток item.ingot_fiberglass.name=Стекловолокно item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Все, что нужно организму. item.ingot_asbestos.name=Асбестовый лист -item.ingot_asbestos.desc=§o\"Наполненный жизнью, неуверенностью в себе и асбестом. Это приходит вместе с воздухом.\"§r +item.ingot_asbestos.desc=§o"Наполненный жизнью, неуверенностью в себе и асбестом. Это приходит вместе с воздухом."§r item.solid_fuel.name=Твердое топливо item.solid_fuel_presto.name=Топливное полено @@ -2365,6 +2367,9 @@ tile.tile_lab.name=Лабораторная плитка tile.tile_lab_broken.name=Разбитая лабораторная плитка tile.tile_lab_cracked.name=Треснувшая лабораторная плитка tile.spikes.name=Шипы +tile.stalactite.sulfur.name=Сернистый сталактит +tile.stalagmite.sulfur.name=Сернистый сталагмит +tile.stone_resource.sulfur.name=Сернистый камень tile.gas_asbestos.name=Частицы асбеста в воздухе tile.gas_flammable.name=Горючий газ tile.gas_monoxide.name=Угарный газ @@ -3656,6 +3661,8 @@ item.rod_quad_euphemium.name=Выгоревший счетверённый шр item.plate_euphemium.name=Составная пластина из эвфемия item.plate_dineutronium.name=Составная пластина из динейтрония item.plate_desh.name=Составная пластина из деш +item.plate_bismuth.name=Составная пластина из висмута +item.plate_bismuth.desc=Ребята, клянусь, это алхимический символ Висмута. item.plate_fuel_mox.name=МОКС-топливная пластина item.plate_fuel_pu238be.name=Плутоний-238-Бериллевая топливная пластина @@ -4002,6 +4009,10 @@ item.hev_helmet.name=Шлем H.E.V Модели IV item.hev_legs.name=Поножи H.E.V Модели IV item.hev_battery.name=Батарея костюма tile.hev_battery.name=Батарея костюма +item.bismuth_boots.name=Сандали из висмута +item.bismuth_helmet.name=Головной убор из висмута +item.bismuth_legs.name=Наколенники из висмута +item.bismuth_plate.name=Наплечники, ожерелье и набедренная повязка из висмута tile.mush.name=Светящийся гриб tile.waste_mycelium.name=Светящийся мицелий From dcb7ad550cecafedfd8436a0abb38a3a6c849356 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 28 Mar 2022 16:33:19 +0200 Subject: [PATCH 09/31] more fluidAPI, sulfuric acid, asbestos caves --- .../api/hbm/fluid/IFluidConnectorBlock.java | 11 ++++ src/main/java/api/hbm/fluid/IFluidUser.java | 58 +++++++++++++++++- src/main/java/com/hbm/blocks/BlockEnums.java | 3 +- src/main/java/com/hbm/blocks/ModBlocks.java | 20 +++++- .../java/com/hbm/blocks/fluid/AcidFluid.java | 26 ++++---- .../blocks/generic/BlockResourceStone.java | 25 ++++++++ .../hbm/blocks/generic/BlockStalagmite.java | 1 + .../com/hbm/inventory/OreDictManager.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 5 +- .../textures/blocks/stalactite.asbestos.png | Bin 0 -> 260 bytes .../textures/blocks/stalagmite.asbestos.png | Bin 0 -> 244 bytes .../assets/hbm/textures/blocks/stone_gems.png | Bin 0 -> 768 bytes .../blocks/stone_resource.asbestos.png | Bin 0 -> 320 bytes .../hbm/textures/blocks/sulfuric_flow.png | Bin 0 -> 9859 bytes .../textures/blocks/sulfuric_flow.png.mcmeta | 3 + .../hbm/textures/blocks/sulfuric_still.png | Bin 0 -> 14357 bytes .../textures/blocks/sulfuric_still.png.mcmeta | 5 ++ .../assets/hbm/textures/blocks/water_flow.png | Bin 0 -> 10198 bytes .../hbm/textures/blocks/water_flow.png.mcmeta | 3 + .../hbm/textures/blocks/water_still.png | Bin 0 -> 14567 bytes .../textures/blocks/water_still.png.mcmeta | 5 ++ 21 files changed, 148 insertions(+), 19 deletions(-) create mode 100644 src/main/java/api/hbm/fluid/IFluidConnectorBlock.java create mode 100644 src/main/java/com/hbm/blocks/generic/BlockResourceStone.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalactite.asbestos.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stalagmite.asbestos.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_gems.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_resource.asbestos.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png.mcmeta create mode 100644 src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta create mode 100644 src/main/resources/assets/hbm/textures/blocks/water_flow.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/water_flow.png.mcmeta create mode 100644 src/main/resources/assets/hbm/textures/blocks/water_still.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/water_still.png.mcmeta diff --git a/src/main/java/api/hbm/fluid/IFluidConnectorBlock.java b/src/main/java/api/hbm/fluid/IFluidConnectorBlock.java new file mode 100644 index 000000000..65ff758ba --- /dev/null +++ b/src/main/java/api/hbm/fluid/IFluidConnectorBlock.java @@ -0,0 +1,11 @@ +package api.hbm.fluid; + +import com.hbm.inventory.fluid.FluidType; + +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +public interface IFluidConnectorBlock { + + public boolean canConnect(FluidType type, IBlockAccess world, int x, int y, int z, ForgeDirection dir); +} diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java index 534380946..bf975fa3b 100644 --- a/src/main/java/api/hbm/fluid/IFluidUser.java +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -1,13 +1,65 @@ package api.hbm.fluid; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public interface IFluidUser extends IFluidConnector { - /*public default void updateStandardPipes(World world, int x, int y, int z) { + public default void sendFluid(FluidType type, World world, int x, int y, int z, ForgeDirection dir) { + + TileEntity te = world.getTileEntity(x, y, z); + boolean wasSubscribed = false; + boolean red = false; + + if(te instanceof IFluidConductor) { + IFluidConductor con = (IFluidConductor) te; + + if(con.getPipeNet(type) != null && con.getPipeNet(type).isSubscribed(this)) { + con.getPipeNet(type).unsubscribe(this); + wasSubscribed = true; + } + } + + if(te instanceof IFluidConnector) { + IFluidConnector con = (IFluidConnector) te; + + if(con.canConnect(type, dir.getOpposite())) { + long toSend = this.getTotalFluidForSend(type); + long transfer = toSend - con.transferFluid(type, toSend); + this.removeFluidForTransfer(type, transfer); + red = true; + } + } + + if(wasSubscribed && te instanceof IFluidConductor) { + IFluidConductor con = (IFluidConductor) te; + + if(con.getPipeNet(type) != null && !con.getPipeNet(type).isSubscribed(this)) { + con.getPipeNet(type).subscribe(this); + } + } + + if(particleDebug) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", red ? "reddust" : "greendust"); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25)); + } + } + + public long getTotalFluidForSend(FluidType type); + public void removeFluidForTransfer(FluidType type, long amount); + + public default void updateStandardPipes(FluidType type, World world, int x, int y, int z) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - this.trySubscribe(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir); - }*/ + this.trySubscribe(type, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir); + } } diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java index 8b069a935..945f2493d 100644 --- a/src/main/java/com/hbm/blocks/BlockEnums.java +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -3,6 +3,7 @@ package com.hbm.blocks; public class BlockEnums { public static enum EnumStoneType { - SULFUR + SULFUR, + ASBESTOS } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5f71c7651..f204f84b6 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -21,9 +21,12 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.DoorDecl; import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; import net.minecraft.block.material.*; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; @@ -1183,6 +1186,9 @@ public class ModBlocks { public static Fluid volcanic_lava_fluid; public static final Material fluidvolcanic = (new MaterialLiquid(MapColor.redColor)); + public static Block sulfuric_acid_block; + public static Fluid sulfuric_acid_fluid; + public static Block volcano_core; public static Block dummy_block_flare; @@ -1346,7 +1352,7 @@ public class ModBlocks { ore_depth_nether_neodymium = new BlockDepthOre().setBlockName("ore_depth_nether_neodymium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_depth_nether_neodymium"); stone_porous = new BlockPorous().setBlockName("stone_porous").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":stone_porous"); - stone_resource = new BlockEnumMulti(Material.rock, BlockEnums.EnumStoneType.class, true, true).setBlockName("stone_resource").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); + stone_resource = new BlockResourceStone().setBlockName("stone_resource").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); stalagmite = new BlockStalagmite().setBlockName("stalagmite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); stalactite = new BlockStalagmite().setBlockName("stalactite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); @@ -2212,6 +2218,17 @@ public class ModBlocks { FluidRegistry.registerFluid(volcanic_lava_fluid); volcanic_lava_block = new VolcanicBlock(volcanic_lava_fluid, Material.lava).setBlockName("volcanic_lava_block").setResistance(500F); + sulfuric_acid_fluid = new SchrabidicFluid().setDensity(1840).setViscosity(1000).setTemperature(273).setUnlocalizedName("sulfuric_acid_fluid"); + FluidRegistry.registerFluid(sulfuric_acid_fluid); + sulfuric_acid_block = new SchrabidicBlock(sulfuric_acid_fluid, Material.water, ModDamageSource.acid) { //TODO: make a new block class + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister register) { + stillIcon = register.registerIcon(RefStrings.MODID + ":sulfuric_acid_still"); + flowingIcon = register.registerIcon(RefStrings.MODID + ":sulfuric_acid_flowing"); + } + }.setBlockName("sulfuric_acid_block").setResistance(500F); + dummy_block_flare = new DummyBlockFlare(Material.iron, false).setBlockName("dummy_block_flare").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); dummy_port_flare = new DummyBlockFlare(Material.iron, true).setBlockName("dummy_port_flare").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); dummy_block_drill = new DummyBlockDrill(Material.iron, false).setBlockName("dummy_block_drill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_lead"); @@ -3201,6 +3218,7 @@ public class ModBlocks { GameRegistry.registerBlock(schrabidic_block, schrabidic_block.getUnlocalizedName()); GameRegistry.registerBlock(corium_block, corium_block.getUnlocalizedName()); GameRegistry.registerBlock(volcanic_lava_block, volcanic_lava_block.getUnlocalizedName()); + GameRegistry.registerBlock(sulfuric_acid_block, sulfuric_acid_block.getUnlocalizedName()); //Multiblock Dummy Blocks GameRegistry.registerBlock(dummy_block_flare, dummy_block_flare.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/fluid/AcidFluid.java b/src/main/java/com/hbm/blocks/fluid/AcidFluid.java index 6b8d576c4..7914731f0 100644 --- a/src/main/java/com/hbm/blocks/fluid/AcidFluid.java +++ b/src/main/java/com/hbm/blocks/fluid/AcidFluid.java @@ -11,21 +11,25 @@ public class AcidFluid extends Fluid { super("acid_fluid"); } - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon() { - return getStillIcon(); - } + public AcidFluid(String name) { + super(name); + } @Override @SideOnly(Side.CLIENT) - public IIcon getStillIcon() { - return AcidBlock.stillIcon; - } + public IIcon getIcon() { + return getStillIcon(); + } @Override @SideOnly(Side.CLIENT) - public IIcon getFlowingIcon() { - return AcidBlock.flowingIcon; - } + public IIcon getStillIcon() { + return AcidBlock.stillIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getFlowingIcon() { + return AcidBlock.flowingIcon; + } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockResourceStone.java b/src/main/java/com/hbm/blocks/generic/BlockResourceStone.java new file mode 100644 index 000000000..7100843ab --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockResourceStone.java @@ -0,0 +1,25 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.BlockEnumMulti; +import com.hbm.blocks.BlockEnums; +import com.hbm.blocks.ModBlocks; + +import net.minecraft.block.material.Material; +import net.minecraft.world.World; + +public class BlockResourceStone extends BlockEnumMulti { + + public BlockResourceStone() { + super(Material.rock, BlockEnums.EnumStoneType.class, true, true); + } + + @Override + public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int fortune) { + + if(meta == BlockEnums.EnumStoneType.ASBESTOS.ordinal()) { + world.setBlock(x, y, z, ModBlocks.gas_asbestos); + } + + super.dropBlockAsItemWithChance(world, x, y, z, meta, chance, fortune); + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java index 9358ab147..f219fb30a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java @@ -40,6 +40,7 @@ public class BlockStalagmite extends BlockEnumMulti { switch(meta) { case 0: return ModItems.sulfur; + case 1: return ModItems.powder_asbestos; } return null; diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 753106a53..7a133f322 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -344,7 +344,7 @@ public class OreDictManager { EUPH .nugget(nugget_euphemium) .ingot(ingot_euphemium) .dust(powder_euphemium) .block(block_euphemium); DNT .nugget(nugget_dineutronium) .ingot(ingot_dineutronium) .dust(powder_dineutronium) .block(block_dineutronium); FIBER .ingot(ingot_fiberglass) .block(block_fiberglass); - ASBESTOS .asbestos(1F) .ingot(ingot_asbestos) .dust(powder_asbestos) .block(block_asbestos) .ore(ore_asbestos, ore_gneiss_asbestos, basalt_asbestos); + ASBESTOS .asbestos(1F) .ingot(ingot_asbestos) .dust(powder_asbestos) .block(block_asbestos) .ore(ore_asbestos, ore_gneiss_asbestos, basalt_asbestos, DictFrame.fromOne(stone_resource, EnumStoneType.ASBESTOS)); OSMIRIDIUM .nugget(nugget_osmiridium) .ingot(ingot_osmiridium); /* diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 1963143b1..daaecb10b 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -974,8 +974,9 @@ public class MainRegistry { //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); - - new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20); + + new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20); //sulfur + new OreCave(ModBlocks.stone_resource, 1).setThreshold(1.75D).setRangeMult(20).setYLevel(25).setMaxRange(20); //asbestos //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); } diff --git a/src/main/resources/assets/hbm/textures/blocks/stalactite.asbestos.png b/src/main/resources/assets/hbm/textures/blocks/stalactite.asbestos.png new file mode 100644 index 0000000000000000000000000000000000000000..49a66bd495d960397cacaddbd6456339ee5700d6 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfS&E z_jG&2I)yR{2nKl_v1tAEuYe)q`t`gth8@&QihzJ`e-`?i@_hUufm;2ESf{rdL ze2dPly=JzcZo#T2b7ucy*dAthOmm0zs#BFKrt^56Gv1LCuxQnc$m@@^7w}xVTloDx zzCx^edTlEj_b~eGP4a-eB-_^>bP0 Hl+XkKvV>+F literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/stalagmite.asbestos.png b/src/main/resources/assets/hbm/textures/blocks/stalagmite.asbestos.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2704ed34cd4a9eb2a07b577a3640b4863ae73a GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfN=PeZQ+fFA#K5;?`9t_pUf0Lt-AI*%kh&woI0nbt_C`r!PC{xWt~$(69A^6T1@}| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_gems.png b/src/main/resources/assets/hbm/textures/blocks/stone_gems.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf8cf21b8a3d6dcc7e81af00a45b5e2ccb22e45 GIT binary patch literal 768 zcmV+b1ONPqP)76k}Q#>McG~dnM9^=ynuM! zd!u>p_rCd!@H}stWf`N+e?B8)LiCKKM<-Q{F^n>#OFu(Y%^Q&6o|XI;Pen*9&HAx%@fqa%o8k|aS& zNuKA_+HGzEQ52D7831JfA;fIwZVpFdEX(5L!Sm*Tg6x+5DK@dzE zjzh=u5JGT!rA6<#i`KI_Ns<)Q^E_v5ZLP?|Fr<8be$LJ7LYk)Zp3k1@`1qJosZ`W0 z%OcNn`u#q(Z6l?`wrxs_i;L_90ZJ*-G%Y4umWAJJBBkW3oqd}3eBRu8M73H)YfZb= zLMb(a7)22P`}gnT_Iia}uhSupW4b-~{S@K>WR<`8{zQcn3!2BjDet@TV|H;2v) zq?D4T@6!c-177z1;sdR&t`h9Mk5cL%29wDIV+;Vp;gIF!Ww^c=11bmra2gHVgM*@( ya9wwLb#;X?hDxQvU@%~7YwLd|n)8{*oYUXe1~Z4S8WSb}0000pp2CvXQDn}$rn-5CPfNi+P z>-Bs`1OTA-j?9F+Lx&^)z|3$uZH%!bk(^0NB#AKw+#T+Y%$(TE%$AO3HoK8TMBs!W z33tb(s(L(8J#|-36R1j16r0REzE272su&S)_nD;P5wWl&iKYjVOQ+0SWGT8k>eQNC zS3<2`@0FpxjWNC^o_wgXcG~xS&*Ia>-unc};eUIfiCk6d?!#{G9s!{JoB!^MHnujo z>g-j$E|$P%Hf2_ZO^Z@ZtRUShn`(TMA-{Bsf&SFWGBdvts_T+e!S!Aj3jjWWxbq9| Svxk`g0000F!db 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

  • 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 P00000NkvXXu0mjfvoR>z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta new file mode 100644 index 000000000..4b721e09a --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/water_flow.png b/src/main/resources/assets/hbm/textures/blocks/water_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..e72280c42cf4d21e80c1e1733fda94d4217beedd GIT binary patch literal 10198 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 WQVtXyOu?VYBT!Y+Qml}-3j04On!Z{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/water_flow.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/water_flow.png.mcmeta new file mode 100644 index 000000000..de3267f0d --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/water_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/hbm/textures/blocks/water_still.png b/src/main/resources/assets/hbm/textures/blocks/water_still.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e90b07308c58daeab5432659e9ac45095204fc GIT binary patch literal 14567 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRafZAnByRCwBSz3G}H$E_@AaEHf|Sy@{*DN#Dh=+3;tJjXopJjL95=bLjR9dYZf zt|cqCSbV|!06a2^)U6+6vze6{8R2dK3}$fpKmV`O|2IFXo=ulkG@`68gPaH1QdpTN)kb?ztG-bR}xZ=m;pF)aL$9B z2hA4@+|FI5@a8>Zd}#COd~vW=w3~-2(s$QV|sL zaG}Gl*cE^Pzr`*NxJX8njFjxExw*k@j!06FL2wWhDL@=>CW3bi2LSPc3xK@&gzudv zPabaE%buGpcH8gh^ZA=RjRzb{!~_DG4Yp~*2tg5h!~k%4!LwuWVS^1hIBvGIna{XL z0enEy-_t|8!*)E#(H`UMJRE@5F`V;g(u^?;7@HgH`1P;ySLja$faxHw$6o=6{Vf4R z@FL5-I+KT!f|4c->=+KBkEH&P(-#2x{mB8I(K-gF2@?eHE!vV0SqcgS8Gr|nMd0n1 z0U+8EUsfa$JUO^LVIT*`QuHtF34lm1+rEMa*_+$msC!04U&AhdB_jbS4YNzo=CrD{bc~leJBJVPl)7nb2S@mw%^g`l2LB|j6c8sC_lylBLtCs zgEsWorU?^(5;oZO_jF$}%H>(U<%l_s7!SY5mpo&Tf&zl`j8K5U%@(`)g0ro_Jig&| zc#-D?4+2^#C^=&w2k%?-p+mp@o<27lbbNWiv-5BzqYxpJNANBBde=+DWOz_SFk!@H zK4O1)mM0NpT?b?j9PpA+a#4f=0gk~S_|T&f(aTQ*&Zz&J976pR5I_uWHrPr*$q};w zixZ&ufF_Q(kV63JCvr);dB}kQz%jyn!qM=+5upgd_JE(B+8H7MF7YO&W2Qj8Y<|JnL0+*x;rlL@B@u4`Lh;0XQGf0zew|d-socbb%V@ z5yri|Djs}KpU+S7G@WoR5feGMW{cZ6Vh~Z7w>?vaH@uP;*KDyP2ghMco9Tcf0C0=0 z{Y;;m8*Ilt4mnAbgailpfR;R5y^(3a+}vQx`@hS70`RsYF}}$&aNWvwgS`}FatKjy zAdesgQ=SzMf^A=Y6Wy+1g$Kn}Bs-5bN4-znqR$bLCF|Z7yMnr14TWO;yOIzyFc}^o zEqGu7h3NV)+XHoEU10AVUE54cd}yOB1{SiUw6dlnf>ZaA$aM#1RFB?2+>l zjSW~u??uTo2C}6cI&8ZKx+j9){eV9mev+ST2kRC123?7mL2%6$eS1rHQjjmt@{%Lw z9Fc|>c}+8B$%y0;xJ935%-q~y7cUq@P$VM`uQ*?x1@d5W@L_|U z6eM!ssQCc{NKD@FK(2TYI`jgRJYR2ciAcTyrwKC=0H+b1E11+Paf}cLoNe>erOYW} zN~6J0K+6rfIN-?3BeW=7W(;uP<_5bwV>Cp9WAu5#EE!XoahWDu0D!qepY?|6eGn8B zlsMqH#)CX#0D$fukG`eOHweRvymE7cUH?E2mlt`NFF2QkNFKhuQMi|)t5mXnrSTnm z@)DX2wjem>j@t1c@8p2cqwntMhtQ+DyvnQd;F6IDaJ~UM2Kxpfo^ehSre=$t-+z?9 z+s*P2U=;Kdg>j+@BWDI4?oMV^95%V6n4#m zN`(k$w%9c{bR!vgc$3#0kwlQ@vmDce`S>fMV+8ID54v02$3YW^Qjjk%c)C2x6Rw}m zC8Lx{ugC|q+@s%qrcd1+c6@opGkG}4x_upkokz$KlO)8HFai2liy&vg6fZapuex5C z92@{g-nMN*l7dp-kQ|sie51iO`36nA;Al^*unP!zUg3d*^9@>Za7z*{$Z5vt1G+Tg z0?pDg2##x*Hau|k4K3hg5Ih`QNl1CrT*9~Lxxr>WU-2N@Iw)mEfrD#qu+0&(l>zVp zZBCd_fIMPI15NawGTziju-%!IHy331v<7R`tyQe>0 zUgR~67z;2tkG9?6ZaU$ZXT9td9=wv5&}^{<;Mh0RjPLU11A_DL-97z@JG7S+ltGtOzm)NHZk(--+-TQ)<0iuWr#@Q&f~giBIfC@!FtgkhL5u@w|pB^kb! zbTt}7G-q~r1`-%^t34jc{<1;N6bWUk|CF8c{+c?lVgO?p-+YfyEtMh z6XsGdT}BKL(afwt>sj$2kD5z5M&K6R?vM0`c8ARs53Ex2jg@yJhB9L^$Sd}=a+xut z3r^#k79~thld75@*$Td$Sri)K3FotJ==F@fNh{9uP&nlLWh z3L{8HhM=Sohd5ZpVufe1g43ZOS$=Q^G{J5=Q{%7rvmZ zDts@72hPK@Z_($;R^s)?S?TX21FlgD0082M(LP-RQ5rCm)snSG79}G}LUIgm#d-1# z+Qu#Uh&`#_i4nGCJZH^ zC}$?h+_c#G22CkQ>7skaDLv5aexM)PTWtCAjIZRis33yl7F)+~alko^IH%EI&LF=i zr+69PeiG*qpw~R}LHO!iF~U zQ4VRw3IZXWuHb2+@k0Ch+}#hk%(cF?9TUuYP2vq;=7!0wj6{`xrT!~5M4t>4T zHMulUamHf6w+NxfRtj>SG3U6Xg>dnVb4i*XSQX+S$da|1cZ@&|oD-sN5FQi{wy>*Y zVle3qYn_AR9=*}P$Pu|DB;P1jj0fz;cRBjT3f37jZyxa&2TXCmF(;*Z>l5G(y$@(g zLQGorf;`|n`1a5A=VptJ&rf(F2E(YZpjW{28OM0RISLMd^2)~ZB9FL?d&2`4v>uQQ zF9k6T7>sDD>%+r=+YRnYK?)tV(+S5~tSf(@TwbVCK%Ox9fQCD?-5os;fiAD|YMd(IG&gLvwDkdDc$3%pjKMc(I1Yvf zmU&&iE&M@E^E@#SFF2-AMiFFg(Pm|S%0dTPrM^aDzu-aT-vto_q!EK-t?sz4FiF>X z!N`~ocp!o-xc+y}mLIr))^1XDgWUD8t&2N37$8f@Hq|`;()WvnC2OSh{l7k!Ok&Uj)-Z*xnxYvBRB`X z{WJX#w&?l%grAAg*6$R0?2J2opHFzN>%V4l1&C?DW!%d%NRzBhtq)5?j04Wruw1q` z99+}mP6Q=%Xy+5oHJ-3>LX%u;#AU%4a|;Mcyx>S4Ay1fbjpmN?guy7kP&q}(NS0hI zB-Ij`$nao?-F(*kz>(9%QnM7NU5=%{SVLMxsCdSCKH)(05f9+_TCLRnBKO$-77w_k zCTy`eeUY#18#K;glV^-Y--vySHgwp|nxUU7fC9j{$1}0Co$=5Npp=Z{0yu2Yx3_dF z85j@pRx@@GLenW8xCYJeDsOSn3WoE9WYt-bjCgte$S0ChLTWza7)KeQc+lsF**9n^ ztDDIoKr!J%h!;^x7^ESc2#AUYK3#C;N&(iMYVB}Bkjphz_$80f!aqyW)SrEe)}nE$ zT^^7nn_89RRY%aThzjpK9CL#vDg}Vr(XgrnlC97T2);p6Y=M=uRJzVhN9^l;SYjcJ zthc8?UTHCI(Lel!{+&CefFxh>KzoQD!3D4n2qhs~mICgnCji5nyuJNZ{^r7x9}J2I z7o6jWbBP#A1fn(Qnj74a1Eo=hG+@lhG8Tfn`#1VCcWC(hgfC>p6-XlzdARw6<8;7V zrG^$fm@%abu;d5ap(h55$_1wRtlM@~y?gTDc7q2gD9sIR$GyB&@|Vej(|~i$*6jvP zRPg{x&dq1MgW%#QM@z~h0B{<$mp~4lytanyv&)Lz@#HL9Rcf%|o%UuJwWDcNa3y0c zI-jK|9*8LH5y8bXj`In7B6ux%v?bsc_99`Ljv8dR$CdzBn-%RXcH9^qe3ftPSaGq2 zFza$}xkDcZ#e;QKJHBBembO8! zU12LW&sm!g#nwhu%0L!8K!$E{=1$A{+A40=+dNjdg-@a zNeD+C&NrIDm!xl0isER+gV%-KrUegtjZ6SMS#zIzv=4uwf8`ckjbOFpsm~2*FO$WSz^y}0PsbplXo5eB_u8DQ6 zB`v|My(j=Ej?sq=+B9O~3f+uG&=n7qpmA}~H8Ae6=Zfzi5{sG-*y?j0zT_3pkT7LfQ5H711;N#>E(8S*6>Po1 zU0QVmb4^0X!Leg-nlT$5Xb>q#@CykM99!vUiH6aI%C}BO?6WnYYhtl(6ED4%f)sl6 zkAI=RaDy#?A_>z6JOC*r!b$-a&tS*!%?;fGz~x!Kz5gUXI)(-$g5%96e6NtL3|5IK z^Q_N5bm&D;rlTCvgvrQB76;t_EB%{qu6W=oLEqgeh)gFOFE4mnHF2{DkjEOK3=f(c z?0kceBXS&YR;dh}q!qjG!QCw$OG57M=;87vFD55w7z8)IW537+u+#!oRtCvP;~uYy z9a0mJD1ylGqNOhpl&jEZ?rYC!AtwCwW;+MRTij>UCl-555k(h=YtS|u^poZX*$R*X z($}UDr#Rq51aQ^Vkk@`vp0znMM(ud{fYw<`CjxYLxc4pfp+j^2CeJLk<3zMUQ}Mtz z@M%U&1I}5lQEPa`vkTI8cen$=v1c^dzMNq~C(2lR$D}xA1th$Rcg6J{c}zLd9+ETWo~%G zD_i01{s|t`jRePbvnk`VPnD$psQg0drNP~Xe;Z?qY0B&#bz#ZB=W1i1AU!L() zIrd7zIEHI)aW5IUyQhcYRbKLp*|+FezZ;&gmWydWspbczM3mtb&*b2yqr5M80Km;B zyf5sf*IJRBF5#7O6jnpKTG2K)*lFY1R$I+f$pPFd5kH@CE~ZajDjHqVQyOt0GFh47 z0gR+R=ZGP{o7#aFJeWn04G&sw&|Y5Tg-y7rcX%|topyRSC!{oB$Vy5?0DgE?KC!#S z9XUAm4I0dgxEns8Gcnsm3g7}f1m1P%n;YzWpfDZfP&86|w)_W@FqMoFVc~wYGs%NX z(tZMwC>}(_u*I%sY3rZ7EF5cEEI~J8BGoKkoCjZ?@r6rTX_0=fkY18)Q_5zU5zD+} zFom02+!DdX0RwbB6cE@4^tOnu8LO@fXIJQ*M^I8WVqSP83-bjZ@SxtSXet<2lB!AF ze8R!-p!^08BCdOZ9m6#n>*^6c3s$9_EW&;)tO{#GH^kqag*ifG*ndTGDrzcfI89LScAar-wNdfu?y1Tr{TbeL&hn6A0`ANQtR$^IX zRVP@&St6#(3nub#-n1(mJE`@n5#xIM$UHQcR5uckI+U5yyI?DU; zi~MS(Zd&Rn57*!0bIC}XM|v3E zwiwID^)jpR$u^d+o|TdpF`KJqh>{VVM<`hxRkc!yA{vE!gO)q=@uKaLk`RsIC}K&6 zsp!GJ!8U8U%iN;1>MT}n$py4ci*3b&_Ez~*ZBeW=n3jBv*_etaiR)c$s=%1nA5Cn(S=W}_B-=2SR*G}YuPQ#HoSz{4wE0TfbE zd%yWapYtq3nlN2n@NAX?SL0_KEcMx&IaslmNcu?6rK7W%hD^ePD z5t&NJEuC?tg|cx=2|!L6k(ZWuHNSZ^J8_FP4mgXm{2(oPBGyZreL$OS?OWv@^VRTF zTtM4&*yagm5pcW1t#7CU0rOFgTugUpj*()kFIXctm4sN7?JH7Df8eEUw%GUvfkTfj zYDmu(RN6cv)u?QG-Aqb}HJ-sD+Ps3ODJ(e;&J&^(^>oR~HGpDbAJW8I8uZ$Sl4G-_ z-S6<=gYrWZfmiuKC<%!~W9Iq!BOX+t=f?)cmGv!B5cBkrf8_QS_m06v0WVM%HrNt@ zqm{ZKL{jy5UawH4L?@NpSH6r0i0Y_acRL*%;K&M4BQH76))w<%LXj`_Q2a8}#o#%1_f#_RfPHqZNXpJHE*wHW=g^zQqBPWAy-r4SFIt9^dc`z>x}>`~HC*(?npf1poNq-;LZr|E#hbd-}1@Em&D zp1#W095LrlqSZQ*Igh}O5o~p_4`@r)EnLNGE}-QOO`b5C{@~Uz z8Yw7o#87+h#biYTuFg6y1>RJ_v1&EPJ@(|`xWm>5unL!~v?0ZVKF^p-v^DR|Wu)w; zBL+JM*KFxV0O1@l`39UWm`VXk#D2Ldf^&i(qOl=oz!O}~DAQ3+VS}F2u;2lHg9nQ( z(JHkCk;%ao!F+ke`M3GOnnPIQ0oUmLyZoTJ#l2^Q`HX`VRt^rXy}>PPTUQG*DGj)Y zn#gN-KPN0MQivc@fuD}pFP^3=M!KciU-=tL&4)kOHBHLLJ+@A>(?kwzz4!M#U-7^# zc+jDhjN-id8ES#y1AKdj-TOb}m-!@T=fP6(puNQ%1e7LBRT`0tdU{&x^!pa=@P_v| zU~nF;2#OD2a$ufR?FXkii?)BD&+#HhDZuHQ;elmuODA}Z2mK=+yL-CN5ovmt_w%zn zEp`N4UDumO`XmBuKH+gb<21g@!Fe#ZJGwo8lb1YUOj`Ej)hBq1nU~X7iM~NQ?D6IU zn)({v|Cd_#S0$e}B|s>7(WiJ~xSSB3hmRNabKp{&_v>0Ypfx{ZBccjG)R?JwfDb|z z(_?0GYDE`|iI%}<&uCo$8y=w98da#O>co}@M2Pu!*G^j?=ZGmQJzk`sOb0|L=h*sy zhMOB~=aZ(g&VJF}eX1OztkAjIx7%B~L4k0ZF!=^ux!_n5irLcgVq33>kqBL2K7E1*fM!d4oeQVX1tIf+59t4BT0{EXs(m6f!G3(8`oemsr(sMQIW4 zv8}|l^`Upw-u}D%fIHk2D>STrY&M_hlk;$!&vO7Js`_<7gB`V>nX=I1fLcmmakO zBV-|`&j@UC2qrcXddWAG$>2`!cAk_!XtvmaKqi7$&$oy! z3iInJzidF0My+61c<{d1wp(=E-e5N!QHl|;&VzGW8WM}0yLNlXBX|b4JGvD>TpV%c z4x1Xv)1=GPDwVP*g-j*sJX}sl!(R4jl!4QLK{C$&6c2!0qp`USL#0V7)5i<_|J$hx z^c$mOL0O4{UCr*8H`tf~cC6pqnCv_9<}R=dro^RDpHejY}zp%$!DCj5;fIcz`pJ`)w_2t!dqDKGP=v*!_S{ zum34O&KDeQoj`jLHV`AHD;^k=$^8S}Pe(a~p8B`H;pce4;2EuGdjyWbJfHL(xkv9A zjpYXy062b;pCzLVuOAypwqsTJ+dty5y`{T6W1dfP8u#*QZsS;MMc<;|{gM8VC(PX= z9`lHC*vp;>;O%$x{rQ_b#Sv4wXm{^-`N4?c{YUu+_t;KH9BbJ_4A0;Gr~LQ2P}cQ= zYtWk}ZGy(bwkqc1pm-ofcOzF%igByK+_uqTBG;=hkLOgImgEt5WrTC&;mvjH%&uR! zK}SyKp@@LP2HRQ+=ZM5!3yvZgu|%YTg{|_Ek!_GdW%kN+zxq`}G}wdzc~$O=FHTy={26HFx$f78V9>^p3Hu*plxW;F~4ssxkt(mV|UwjDob|`MJ5F zO_~tnMK043=Vg?W%?IHY{q6_)Q<^buKH*b5<1*}J4?*GW_w@PlEU)o`Aztua^6&G5 zG-25PL;e!!Hej3DF&^;lJRHXh&hd=HGKu6j!xIb-axFg6V1=mu!|{i_@S}6WFJmmMAh%?r zngrB1?;C9Fj>lT&5~J-O@G11vjqkG0mW0&mrs4rDgLUGEsVtrfrt=eiAt#Hw&hS8O zTlJ|F6n7=nuvtM^HsuSNE$+M)qs}67OV_Wp#e6}HTsMH+41R|S-})c?EjUG|};?f&ohC5;%kLz@N^aVRc;IbLwAW(OgputlF| zH98!AmY*dfUW$CJgQpfe0D#dtp4`(mPco#86fYR8Rer7;jC8$h z)3BF)Nr-&&NBZINEZ@?IDGoXtXmJl!JQy*&{oU|D$3bNxkPm42+y9XNXN3p(e~AYk zZ5%QBpvvmnLS@ry16o)Fd&Xroc!{N`nOp=pkJqS0&L;EJN8$q7%D=jRrbHy}(279P zpan(v{Fz@bM!pK$h#4wkC2IqUjX z+eIyLTKl)Nh^2TCHt5F#_Qv4n->5(!*AXY#D>)PAlQ!|V8oYkTCDKY2W|}0c7be?a zYCrgpSgb~#*@jUU&9(TrHY>cYOm?iaPaP5gLa0o(&W_VAckMl{9GRLQhz8ZXl2F8w zP)=Xv7y7n%e5!Ho10G05a;7~9p+{fUaFzZ50nHA(Dl32(POK@>I>sqSL~cI}-SXU` z*?vdgOF_B$10G-hQ~ql@;ApQYL~!g|{p6BS7FlJ0cZ_E9nZ6tM^5#3M7e-9JLnk8& zLEFci)Q;$y8y!#JdnMrW-Vv$uv{rp6Ztw8m0(_pe28s!T(@8i4S!R`n8!}*&$mxwVzM?;)ru8X!E3_Pb6XDwZ6ihc`?gbTn4RJy#N4lUaUJF zbR{IOctAiYC{5Lox}HEoUT4Ee!W7Rq66p*{6y)iEJ%9oa z_KcRfM;k8~T%%}I%C-2Yrm)(uqeia~rj8+Noll`dKb>$W2?rW0L=PQE)=m3T4ZZ9j{a#>4E7jVfR@F0jFeiZjrO)4Yw z_jqXUXg9pdo8f^ozi(XV072ljPI*=A#PbuT%d%M)g2b}Mplho9vqNtggp zWUeC~)_h{9{)Jg@N}6y6bf;PI?YYJF{@>|e;~B%|Gak;*c$*HYmgSp2&>t=@@*>&d zpcP$MW#xIo@cLKz8@K4D6ONU8@(lvN{Z;_XySNDy4{q>SWoL1~z&@zG zAkP?<5f+TLQswh$X{R~>WqMaUAPtF*eTy!S7=2^fT*ZUD#6SZRo8s56=ujq7d*bYL zl->C^c<{kZP@U$+bjCEHIH%gYgSmv_T8C7Bsg6Ue{YIGg89>USpbFIP{)#&gEPr2Z zNQ;B0K5hVot5=l= zlZE+gnuI6?#g(kdL)d)41DJTJ_LYLD5LPX0N|(6>52|FKP9-6y_l6tv+wbWQ0HlAw z-Tv?LkLiT-GQ`^4g}ah4mweTt*dT?by`}rpdn1x9j&-UjlvG)I%_&dOmto9OTRG^!TBCNoX*S(TlA74 z+@Z}A=6KP9qq)H&x73M9nNK*fV=x>z>!_=9P3vvoPM!{U`wbqvP9%=Bnc>*1J2 z0QzdjtRmpGHq!^RFgBAkkJ4YZ1Zr6Hy7Eu(;3_5XfKDcGf>7}QOR{}+jV$TEsmG(e zQN;tKr~?=^($I$l!>?M&-c)0*&c=f1R7WB>cIt0k`&B#zw2clee;D@K#3Gx_R94f` z6%Podsvk{z1!PRab^ebd59d@69>{C`WKHejN=Al~aW|wqlCL%_#|w|_OGYfJ7Uhy{ zLkSAoya!kttQBX3i;nnfHlOJ`B2agS-Toi)(|p!}{zlY-n=N)Zsrto6c{r!8TW)S> zHy`C7f^vDrbGAn=fa9&sQseoAW1VoGX3XB0dvg_hsr}YE(7isjc(HncJM^y6h+AcJ zWc$Hvd+ZyucmG0viUa2E0k`L`@@>B0ED4Fb2YQ%}a$GX@qHQx9(whPJJfZCWAwRhQ zHyyCI!DGcSm``8imzvTL0i>MiBz4lSC7f1_d*NmJvx~z=JODJXPIX`a%5_Al2^n-) zwYh7w>|@(q1o#d;JRCAg*kUUgg?sAKC}Y$Pc<%2M4?w_lkazY0EwwtzVKLCFwB}eM z^7t;VYmT+zfeQ#CHcPZb%(Y&yd;odY;W0~l%pv$jD;!BkqP+;Ps3lZwiut4V;DZJs zW6JTGE7ow&b(XxSrWqfKZ3Ejy5h%;}+yotmmUv;NXyFeRscHGxHpM!tcMdIi6s`_| zWsZpRo?1w?i_zJCebpKO2pNPD;Zf|JfGyT8p#dO43$w z*x<&-6?h_e=M)cE2Q&NH#I085TGeu;!E(d|{W_u65I&&m@9CaAe0z(V_kYNbi{#Qq zU~$;uE=P=_c(6!^9IMEAI?1sV$nh(FT{Qkm7wovDmggg09V3Jdb~eGdsYgi+uXtK_ z8dq}!OFZEK60mQvaoXiMOGb(6wr@+)S;FK{e2eYfpXrBrz|ie*cl;_}@`$MvBpn&A z%_lEKSE3YLAn-!E4)Tce+keU59V1NdIOM3OW;h4t;T2yOzk>PQ4UI|#6;p}1QZS*p za_wotzzfBzFdaqXuy?`6B4Qc;7eVl5sLk~h2qsoCs-A%399RG}8}ub3bB8`pSn!~^ z!L6P{Kw;R+o_(Ve{o_T?Vkyw!D)U)G{P>Qym4XuE9|DEClwXIwOoe^m03fVWE@rlhOW$ALdmiW7f{`%=zygQeoG%z()CJx zpa?P*HH6jrI@^F|znp|&2}R`+t>?7VOo9*fg7eNWaW%bh>9e_j?dB6b4sY^WCp49W zXpa1B1xaGZa3$JgPGc@|M$QrGFvxOnhjV5gwk*}0w#DTc5kTgRb~;vg0B2_}Ku5w( zIvyQco9dW!cAzB`C8~@T?y7w9LFFRE;C74c;aB-Jo^cQ?f``K09Ujtz(F*E1b0GQ# zy>HN_L57?VFW>M*>a=SQ*KV=no?4#X@kV?dpy2|VYQdP^u@}+7{ZjLTIzRAec;Fh< z=;nwdH9x2`1j$ml4%?eQ(D!M;(A;2mdXgv8>J_&0XlApZ787wy^}j3q^Zt|kY&;b%ffoAIw&Kv9iefZAu88HO=`BX3~bHI;8wLHL?m9o#4MWTBGf6qSHti!dwF3v z3622-ckjWEP$MgPabR!C79_W4PcA>K~?Ej!C4 zQ1ms$Rbh&6wclu=-P;Fw4g#7j?a0H29_{H# zUPe8FXK7S$bBnuF$3BbkB-(5DKA?*iIp>UY{-y|2yPn;S?m~}_r@i8V?{vfu+tDFK z$NwFFS1;Ho%XpN-5*r<(wFwL*CY)_vQlaZ{3jNI==nrv_OXz8HewJ?~B9(%;%zh)- zbs;Q1`)qUSP1=am9ET5Kq$L(*e4*5@zSQB#r;osoBr(dG$f zHoZZydLia|3YN76>ddxEJXv$X)qXrXtrv9Cimrv_ARlWbw`s%>2aG7l?H%s)C?3Ou z&|?=i)Q@|4&k++8Oc^?PWtdNR$7(~FKGAU}ZOL|0*mRVm^Lj!~vq4Xucs^Z+$5hjt z4`9 zr`Zg>@eR)q?dUiLb7O|`dZyh8KA`Kg$!rtT{mBc89xYibrVs=a@}i?HHT{r6egiVG32Y}pe(N30ho^(vDiid`$`2SE4~*alrdPFPxLvC za^{x$ac@V>6l7jbIjK$jsz+08UaUjhPv7K=4`|XTQ=MMte63usU0!yYAH?Kq)k zXqp@PI)j_4vhA zv|ZtWBL&;*$!T>0d|8SP^>7qBpRJyDP~Whu_ySAsLA7EtJ2#ug!kc!z5SDg;Yqoft zRdbM?UuLK24b^d}(?ZIYygKa7Mx9MZ?3Zn=L#)~CDaqOe(G``FDSzlyDQb=SsssqN zD@p`xKGA2hXhq40Ox}i-TlyMWG~A-MX&ZyLRMg} zxX?*o3r`Gtc{71h*WA!&ZV}8irpGBccqk?Ad_a?D%sC-(hn_Dlc&(fO3gUc}_un|r zm;M6j;kflNrxG!-36|>F3Kc*W)6a66rneTMIgW_YqPosSjHz{Sr2u4%%?CUv$Vk`Z z6WYjMMmYG&UaErC4mR0hmnICgfoE8dWR;Mz3D~BRS3MPb!7}k)^Tw@XxHRHoV&9B{ z;%WoRrV4oliJUM|rO&r8&0mTox;D%N^SOksiVZ8y?>9R*xTso@?AX z>!GYiV4C?OW#AGo@PiKaxARQ40 z=pnYlU$i4ytfio;uqx`a7GO3S$l2~=8;v*KIJ2^IUJR-8|64`9)sllNkjI zVhCtb)GoidOD700yy2M~IBaA~fMXx184q%V=s=zJhCXqRem=_4veN_y=bfFl9l$vv z(WPM0#hPS7Z?JVF3568>go2vfPg2q*C_Hsz5yPm);#kyc}#e;

    |NJRJB2jmbz# z)D!9#6^QP8TL+Henk^nm*0XHa>IWC#1RJR*O#3 zaL*qoah*PrH2SKeWNC#5Y~!d$Z%RhW*1+b_V_RyI&cT`U&F84=!>K*Hq!A+lzI(vE z3)GMUjqh^cW~*A0^OJlXk2s1A3#jLC)q>ON=rX(^l9v#AbVPc-^L9GwoM|7>GO=q%fr<9n>2`NpOn+;O6s_Jk|4^*Y(2xKLB$&!Rh$s RLHPgx002ovPDHLkV1n%S)6xI{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/water_still.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/water_still.png.mcmeta new file mode 100644 index 000000000..4b721e09a --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/water_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} From ff87b1a062c773f3ba465c955e79939a7e8b7f76 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 28 Mar 2022 23:55:03 +0200 Subject: [PATCH 10/31] proper sulfuric acid --- src/main/java/com/hbm/blocks/ModBlocks.java | 11 +- .../com/hbm/blocks/fluid/GenericFluid.java | 31 ++++++ .../hbm/blocks/fluid/GenericFluidBlock.java | 96 ++++++++++++++++++ .../com/hbm/blocks/fluid/SchrabidicBlock.java | 6 +- .../blocks/stone_resource.asbestos.png | Bin 320 -> 325 bytes ...ric_flow.png => sulfuric_acid_flowing.png} | Bin ...cmeta => sulfuric_acid_flowing.png.mcmeta} | 0 ...uric_still.png => sulfuric_acid_still.png} | Bin ....mcmeta => sulfuric_acid_still.png.mcmeta} | 0 9 files changed, 133 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/fluid/GenericFluid.java create mode 100644 src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java rename src/main/resources/assets/hbm/textures/blocks/{sulfuric_flow.png => sulfuric_acid_flowing.png} (100%) rename src/main/resources/assets/hbm/textures/blocks/{sulfuric_flow.png.mcmeta => sulfuric_acid_flowing.png.mcmeta} (100%) rename src/main/resources/assets/hbm/textures/blocks/{sulfuric_still.png => sulfuric_acid_still.png} (100%) rename src/main/resources/assets/hbm/textures/blocks/{sulfuric_still.png.mcmeta => sulfuric_acid_still.png.mcmeta} (100%) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f204f84b6..d355520dd 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2218,16 +2218,9 @@ public class ModBlocks { FluidRegistry.registerFluid(volcanic_lava_fluid); volcanic_lava_block = new VolcanicBlock(volcanic_lava_fluid, Material.lava).setBlockName("volcanic_lava_block").setResistance(500F); - sulfuric_acid_fluid = new SchrabidicFluid().setDensity(1840).setViscosity(1000).setTemperature(273).setUnlocalizedName("sulfuric_acid_fluid"); + sulfuric_acid_fluid = new GenericFluid("sulfuric_acid_fluid").setDensity(1840).setViscosity(1000).setTemperature(273); FluidRegistry.registerFluid(sulfuric_acid_fluid); - sulfuric_acid_block = new SchrabidicBlock(sulfuric_acid_fluid, Material.water, ModDamageSource.acid) { //TODO: make a new block class - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister register) { - stillIcon = register.registerIcon(RefStrings.MODID + ":sulfuric_acid_still"); - flowingIcon = register.registerIcon(RefStrings.MODID + ":sulfuric_acid_flowing"); - } - }.setBlockName("sulfuric_acid_block").setResistance(500F); + sulfuric_acid_block = new GenericFluidBlock(sulfuric_acid_fluid, Material.water, "sulfuric_acid_still", "sulfuric_acid_flowing").setDamage(ModDamageSource.acid, 5F).setBlockName("sulfuric_acid_block").setResistance(500F); dummy_block_flare = new DummyBlockFlare(Material.iron, false).setBlockName("dummy_block_flare").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); dummy_port_flare = new DummyBlockFlare(Material.iron, true).setBlockName("dummy_port_flare").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); diff --git a/src/main/java/com/hbm/blocks/fluid/GenericFluid.java b/src/main/java/com/hbm/blocks/fluid/GenericFluid.java new file mode 100644 index 000000000..d3005cb2d --- /dev/null +++ b/src/main/java/com/hbm/blocks/fluid/GenericFluid.java @@ -0,0 +1,31 @@ +package com.hbm.blocks.fluid; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; + +public class GenericFluid extends Fluid { + + public GenericFluid(String name) { + super("corium_fluid"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return getStillIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getStillIcon() { + return this.block.getIcon(0, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getFlowingIcon() { + return this.block.getIcon(1, 0); + } +} diff --git a/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java b/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java new file mode 100644 index 000000000..ebd04d324 --- /dev/null +++ b/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java @@ -0,0 +1,96 @@ +package com.hbm.blocks.fluid; + +import java.util.Random; + +import com.hbm.lib.ModDamageSource; +import com.hbm.lib.RefStrings; +import com.hbm.util.ArmorUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; + +public class GenericFluidBlock extends BlockFluidClassic { + + @SideOnly(Side.CLIENT) + public static IIcon stillIcon; + @SideOnly(Side.CLIENT) + public static IIcon flowingIcon; + public Random rand = new Random(); + + private String stillName; + private String flowingName; + + public float damage; + public DamageSource damageSource; + + public GenericFluidBlock(Fluid fluid, Material material, String still, String flowing) { + super(fluid, material); + setCreativeTab(null); + stillName = still; + flowingName = flowing; + displacements.put(this, false); + } + + public GenericFluidBlock setDamage(DamageSource source, float amount) { + damageSource = source; + damage = amount; + return this; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return (side == 0 || side == 1) ? stillIcon : flowingIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister register) { + stillIcon = register.registerIcon(RefStrings.MODID + ":" + stillName); + flowingIcon = register.registerIcon(RefStrings.MODID + ":" + flowingName); + } + + @Override + public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { + + if(damageSource != null) { + + if(entity instanceof EntityItem) { + + entity.motionX = 0; + entity.motionY = 0; + entity.motionZ = 0; + + if(entity.ticksExisted % 20 == 0 && !world.isRemote) { + entity.attackEntityFrom(damageSource, damage * 0.1F); + } + if(entity.ticksExisted % 5 == 0) { + world.spawnParticle("cloud", entity.posX, entity.posY, entity.posZ, 0.0, 0.0, 0.0); + } + } else { + + if(entity.motionY < -0.2) + entity.motionY *= 0.5; + + if(!world.isRemote) { + entity.attackEntityFrom(damageSource, damage); + } + } + + if(entity.ticksExisted % 5 == 0) { + world.playSoundAtEntity(entity, "random.fizz", 0.2F, 1F); + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/fluid/SchrabidicBlock.java b/src/main/java/com/hbm/blocks/fluid/SchrabidicBlock.java index cb656986c..57e9b7b1a 100644 --- a/src/main/java/com/hbm/blocks/fluid/SchrabidicBlock.java +++ b/src/main/java/com/hbm/blocks/fluid/SchrabidicBlock.java @@ -77,7 +77,9 @@ public class SchrabidicBlock extends BlockFluidClassic { @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { - entity.setInWeb(); + + if(this.getMaterial() == ModBlocks.fluidschrabidic) + entity.setInWeb(); if(entity instanceof EntityLivingBase) ContaminationUtil.contaminate((EntityLivingBase)entity, HazardType.RADIATION, ContaminationType.CREATIVE, 1.0F); @@ -97,7 +99,7 @@ public class SchrabidicBlock extends BlockFluidClassic { } public boolean reactToBlocks(World world, int x, int y, int z) { - if(world.getBlock(x, y, z).getMaterial() != ModBlocks.fluidschrabidic) { + if(world.getBlock(x, y, z).getMaterial() != this.getMaterial()) { if(world.getBlock(x, y, z).getMaterial().isLiquid()) { return true; } diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.asbestos.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.asbestos.png index 956204a9b016e702815ccaca6814a79c7a2da17c..d3c7c886c4694217b467ef77b7b22079c08a81fa 100644 GIT binary patch delta 282 zcmV+#0puK5G=Ka_L_t(IjeS$WjRYYK^CBup4XJ?|rsUL+_x(0Cq=nnZ$jFCg z4+$Z_3APhn@AuDdW&!}#TBs_xJGy&M05CIfxI3x}W`+?F$jl97keTht01XC!s=^?E zgF(vR3DezhcMNxjyYEA#$`KJDPMMe)rs|>uu4GeHkLTTeOMl?2Tr+bUsmbXTaovr{ zgYN$G5?$7NdZAUDG>QS5UH8h6cM)-$_~e7iI%!|mwUciX*IFAyhqW)BN?27Gs`d2Y zH1}KqVE$MC(-*e6J~FiS%&v_^u$gU{%5bt#)IXZ2$lO07*qoM6N<$g2oVqTmS$7 delta 277 zcmV+w0qXw60>A>0G=KL=L_t(IjeS$W4FfR>N%y2qwjIkt3EmX2mN zyOBgh;DjLwcgLlwdOT4*byrRks7g>2o6J1EPYLR(7!h#ynSZ3>5wWl&iKYjVOQ+0S zWGT8k>eQNCS3<2`@0FpxjWNC^o_wgXcG~xS&*Ia>-unc};eUIfiCk6d?!#{G9s!{J zoB!^MHnujo>g-j$E|$P%Hf2_ZO^Z@ZtRUShn`(TMA-{Bsf&SFWGBdvts_T+e!S!Aj b3jjWWxbq9|vkr%u00000NkvXXu0mjf3^Ilf diff --git a/src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png b/src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_flowing.png similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png rename to src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_flowing.png diff --git a/src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_flowing.png.mcmeta similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/sulfuric_flow.png.mcmeta rename to src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_flowing.png.mcmeta diff --git a/src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png b/src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_still.png similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png rename to src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_still.png diff --git a/src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_still.png.mcmeta similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/sulfuric_still.png.mcmeta rename to src/main/resources/assets/hbm/textures/blocks/sulfuric_acid_still.png.mcmeta From 957b07cca3b3b0c338499ec351e685bc2735d909 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 29 Mar 2022 16:39:54 +0200 Subject: [PATCH 11/31] more fluid API, tank labels (finally) --- .../java/api/hbm/energy/IEnergyConductor.java | 10 +++ .../java/api/hbm/fluid/IFluidConductor.java | 9 ++ .../api/hbm/fluid/IFluidStandardReceiver.java | 49 +++++++++++ .../api/hbm/fluid/IFluidStandardSender.java | 40 +++++++++ src/main/java/api/hbm/fluid/IFluidUser.java | 4 +- .../com/hbm/blocks/fluid/GenericFluid.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 5 +- .../java/com/hbm/items/machine/ItemStamp.java | 3 +- .../items/tool/ItemCraftingDegradation.java | 1 + .../render/tileentity/RenderFluidTank.java | 82 +++++++----------- .../hbm/textures/gui/fluids/sulfuric_acid.png | Bin 0 -> 1784 bytes .../models/{ => tank_label}/tank_ACID.png | Bin .../models/{ => tank_label}/tank_AMAT.png | Bin .../models/tank_label/tank_AROMATICS.png | Bin 0 -> 3082 bytes .../models/{ => tank_label}/tank_ASCHRAB.png | Bin .../models/{ => tank_label}/tank_BALEFIRE.png | Bin .../models/{ => tank_label}/tank_BIOFUEL.png | Bin .../models/{ => tank_label}/tank_BIOGAS.png | Bin .../models/{ => tank_label}/tank_BITUMEN.png | Bin .../{ => tank_label}/tank_CARBONDIOXIDE.png | Bin .../models/tank_label/tank_COALGAS.png | Bin 0 -> 2527 bytes .../models/tank_label/tank_COALGAS_LEADED.png | Bin 0 -> 2554 bytes .../models/tank_label/tank_COALOIL.png | Bin 0 -> 1720 bytes .../models/{ => tank_label}/tank_COOLANT.png | Bin .../models/{ => tank_label}/tank_CRYOGEL.png | Bin .../textures/models/tank_label/tank_DEATH.png | Bin 0 -> 5782 bytes .../{ => tank_label}/tank_DEUTERIUM.png | Bin .../models/{ => tank_label}/tank_DIESEL.png | Bin .../models/tank_label/tank_DIESEL_CRACK.png | Bin 0 -> 2655 bytes .../models/tank_label/tank_ENDERJUICE.png | Bin 0 -> 2051 bytes .../models/{ => tank_label}/tank_ETHANOL.png | Bin .../models/tank_label/tank_FRACKSOL.png | Bin 0 -> 3499 bytes .../models/{ => tank_label}/tank_GAS.png | Bin .../models/tank_label/tank_GASOLINE.png | Bin 0 -> 2653 bytes .../tank_label/tank_GASOLINE_LEADED.png | Bin 0 -> 1822 bytes .../{ => tank_label}/tank_HEATINGOIL.png | Bin .../models/{ => tank_label}/tank_HEAVYOIL.png | Bin .../models/tank_label/tank_HEAVYWATER.png | Bin 0 -> 2604 bytes .../models/{ => tank_label}/tank_HELIUM3.png | Bin .../models/tank_label/tank_HOTCRACKOIL.png | Bin 0 -> 2151 bytes .../models/{ => tank_label}/tank_HOTOIL.png | Bin .../models/{ => tank_label}/tank_HOTSTEAM.png | Bin .../models/{ => tank_label}/tank_HYDROGEN.png | Bin .../models/{ => tank_label}/tank_KEROSENE.png | Bin .../models/{ => tank_label}/tank_LAVA.png | Bin .../models/{ => tank_label}/tank_LIGHTOIL.png | Bin .../models/tank_label/tank_LIGHTOIL_CRACK.png | Bin 0 -> 2807 bytes .../models/{ => tank_label}/tank_LPG.png | Bin .../{ => tank_label}/tank_LUBRICANT.png | Bin .../models/{ => tank_label}/tank_MERCURY.png | Bin .../models/{ => tank_label}/tank_NAPHTHA.png | Bin .../models/tank_label/tank_NAPHTHA_CRACK.png | Bin 0 -> 2810 bytes .../models/{ => tank_label}/tank_NITAN.png | Bin .../models/{ => tank_label}/tank_NONE.png | Bin .../models/{ => tank_label}/tank_OIL.png | Bin .../models/{ => tank_label}/tank_OXYGEN.png | Bin .../textures/models/tank_label/tank_PAIN.png | Bin 0 -> 2765 bytes .../models/{ => tank_label}/tank_PETROIL.png | Bin .../models/tank_label/tank_PETROIL_LEADED.png | Bin 0 -> 2188 bytes .../{ => tank_label}/tank_PETROLEUM.png | Bin .../models/{ => tank_label}/tank_PUF6.png | Bin .../{ => tank_label}/tank_RECLAIMED.png | Bin .../models/tank_label/tank_SALIENT.png | Bin 0 -> 2206 bytes .../models/{ => tank_label}/tank_SAS3.png | Bin .../{ => tank_label}/tank_SCHRABIDIC.png | Bin .../models/{ => tank_label}/tank_SMEAR.png | Bin .../models/tank_label/tank_SPENTSTEAM.png | Bin 0 -> 1775 bytes .../models/{ => tank_label}/tank_STEAM.png | Bin .../models/tank_label/tank_SULFURIC_ACID.png | Bin 0 -> 2331 bytes .../{ => tank_label}/tank_SUPERHOTSTEAM.png | Bin .../models/{ => tank_label}/tank_TRITIUM.png | Bin .../models/{ => tank_label}/tank_UF6.png | Bin .../{ => tank_label}/tank_ULTRAHOTSTEAM.png | Bin .../models/tank_label/tank_UNSATURATEDS.png | Bin 0 -> 3514 bytes .../models/tank_label/tank_WASTEFLUID.png | Bin 0 -> 4090 bytes .../models/tank_label/tank_WASTEGAS.png | Bin 0 -> 4990 bytes .../models/{ => tank_label}/tank_WATER.png | Bin .../models/{ => tank_label}/tank_WATZ.png | Bin .../models/{ => tank_label}/tank_XENON.png | Bin .../models/tank_label/tank_XPJUICE.png | Bin 0 -> 2342 bytes 80 files changed, 150 insertions(+), 55 deletions(-) create mode 100644 src/main/java/api/hbm/fluid/IFluidStandardReceiver.java create mode 100644 src/main/java/api/hbm/fluid/IFluidStandardSender.java create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/sulfuric_acid.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_ACID.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_AMAT.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_AROMATICS.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_ASCHRAB.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_BALEFIRE.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_BIOFUEL.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_BIOGAS.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_BITUMEN.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_CARBONDIOXIDE.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_COALGAS.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_COALGAS_LEADED.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_COALOIL.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_COOLANT.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_CRYOGEL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_DEATH.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_DEUTERIUM.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_DIESEL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_DIESEL_CRACK.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_ENDERJUICE.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_ETHANOL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_FRACKSOL.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_GAS.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_GASOLINE.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_GASOLINE_LEADED.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HEATINGOIL.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HEAVYOIL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_HEAVYWATER.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HELIUM3.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_HOTCRACKOIL.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HOTOIL.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HOTSTEAM.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_HYDROGEN.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_KEROSENE.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_LAVA.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_LIGHTOIL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_LIGHTOIL_CRACK.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_LPG.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_LUBRICANT.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_MERCURY.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_NAPHTHA.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_NAPHTHA_CRACK.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_NITAN.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_NONE.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_OIL.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_OXYGEN.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_PAIN.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_PETROIL.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_PETROIL_LEADED.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_PETROLEUM.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_PUF6.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_RECLAIMED.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_SALIENT.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_SAS3.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_SCHRABIDIC.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_SMEAR.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_SPENTSTEAM.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_STEAM.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_SULFURIC_ACID.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_SUPERHOTSTEAM.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_TRITIUM.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_UF6.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_ULTRAHOTSTEAM.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_UNSATURATEDS.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEFLUID.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEGAS.png rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_WATER.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_WATZ.png (100%) rename src/main/resources/assets/hbm/textures/models/{ => tank_label}/tank_XENON.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_XPJUICE.png diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index 84f9bbfad..572ef0dc8 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -94,4 +94,14 @@ public interface IEnergyConductor extends IEnergyConnector { return pos; } + + //TODO: check if this standard implementation doesn't break anything (it shouldn't but right now it's a bit redundant) also: remove duplicate implementations + @Override + public default long transferPower(long power) { + + if(this.getPowerNet() == null) + return power; + + return this.getPowerNet().transferPower(power); + } } diff --git a/src/main/java/api/hbm/fluid/IFluidConductor.java b/src/main/java/api/hbm/fluid/IFluidConductor.java index 6c8298a54..95ae30766 100644 --- a/src/main/java/api/hbm/fluid/IFluidConductor.java +++ b/src/main/java/api/hbm/fluid/IFluidConductor.java @@ -7,4 +7,13 @@ public interface IFluidConductor extends IFluidConnector { public IPipeNet getPipeNet(FluidType type); public void setPipeNet(FluidType type, IPipeNet network); + + @Override + public default long transferFluid(FluidType type, long amount) { + + if(this.getPipeNet(type) == null) + return amount; + + return this.getPipeNet(type).transferFluid(amount); + } } diff --git a/src/main/java/api/hbm/fluid/IFluidStandardReceiver.java b/src/main/java/api/hbm/fluid/IFluidStandardReceiver.java new file mode 100644 index 000000000..2d198d1f4 --- /dev/null +++ b/src/main/java/api/hbm/fluid/IFluidStandardReceiver.java @@ -0,0 +1,49 @@ +package api.hbm.fluid; + +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.fluid.FluidType; + +/** + * Uses default implementation to make the underlying interfaces easier to use for the most common fluid users. + * Only handles a single input tank of the same type. + * Uses standard FluidTanks which use int32. + * Don't use this as part of the API! + * @author hbm + * + */ +public interface IFluidStandardReceiver extends IFluidUser { + + @Override + public default long transferFluid(FluidType type, long amount) { + + for(FluidTank tank : getReceivingTanks()) { + if(tank.getTankType() == type) { + tank.setFill(tank.getFill() + (int) amount); + + if(tank.getFill() > tank.getMaxFill()) { + long overshoot = tank.getFill() - tank.getMaxFill(); + tank.setFill(tank.getMaxFill()); + return overshoot; + } + + return 0; + } + } + + return amount; + } + + public FluidTank[] getReceivingTanks(); + + @Override + public default long getDemand(FluidType type) { + + for(FluidTank tank : getReceivingTanks()) { + if(tank.getTankType() == type) { + return tank.getMaxFill() - tank.getFill(); + } + } + + return 0; + } +} diff --git a/src/main/java/api/hbm/fluid/IFluidStandardSender.java b/src/main/java/api/hbm/fluid/IFluidStandardSender.java new file mode 100644 index 000000000..83a0a9d98 --- /dev/null +++ b/src/main/java/api/hbm/fluid/IFluidStandardSender.java @@ -0,0 +1,40 @@ +package api.hbm.fluid; + +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.fluid.FluidType; + +/** + * Uses default implementation to make the underlying interfaces easier to use for the most common fluid users. + * Only handles a single output tank of the same type. + * Uses standard FluidTanks which use int32. + * Don't use this as part of the API! + * @author hbm + * + */ +public interface IFluidStandardSender extends IFluidUser { + + public FluidTank[] getSendingTanks(); + + @Override + public default long getTotalFluidForSend(FluidType type) { + + for(FluidTank tank : getSendingTanks()) { + if(tank.getTankType() == type) { + return tank.getFill(); + } + } + + return 0; + } + + @Override + public default void removeFluidForTransfer(FluidType type, long amount) { + + for(FluidTank tank : getSendingTanks()) { + if(tank.getTankType() == type) { + tank.setFill(tank.getFill() - (int) amount); + return; + } + } + } +} diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java index bf975fa3b..d36dd105b 100644 --- a/src/main/java/api/hbm/fluid/IFluidUser.java +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -54,8 +54,8 @@ public interface IFluidUser extends IFluidConnector { } } - public long getTotalFluidForSend(FluidType type); - public void removeFluidForTransfer(FluidType type, long amount); + public default long getTotalFluidForSend(FluidType type) { return 0; } + public default void removeFluidForTransfer(FluidType type, long amount) { } public default void updateStandardPipes(FluidType type, World world, int x, int y, int z) { diff --git a/src/main/java/com/hbm/blocks/fluid/GenericFluid.java b/src/main/java/com/hbm/blocks/fluid/GenericFluid.java index d3005cb2d..6d7d0c29c 100644 --- a/src/main/java/com/hbm/blocks/fluid/GenericFluid.java +++ b/src/main/java/com/hbm/blocks/fluid/GenericFluid.java @@ -8,7 +8,7 @@ import net.minecraftforge.fluids.Fluid; public class GenericFluid extends Fluid { public GenericFluid(String name) { - super("corium_fluid"); + super(name); } @Override diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 014ef133a..469c370a2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -938,6 +938,7 @@ public class ModItems { public static Item can_luna; public static Item can_bepis; public static Item can_breen; + public static Item can_mug; public static Item mucho_mango; public static Item bottle_empty; public static Item bottle_nuka; @@ -3458,8 +3459,9 @@ public class ModItems { can_mrsugar = new ItemEnergy().setUnlocalizedName("can_mrsugar").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_mrsugar"); can_overcharge = new ItemEnergy().setUnlocalizedName("can_overcharge").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_overcharge"); can_luna = new ItemEnergy().setUnlocalizedName("can_luna").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_luna"); - can_bepis = new ItemEnergy().setUnlocalizedName("can_bepis").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_bepis");; + can_bepis = new ItemEnergy().setUnlocalizedName("can_bepis").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_bepis"); can_breen = new ItemEnergy().setUnlocalizedName("can_breen").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_breen"); + can_mug = new ItemEnergy().setUnlocalizedName("can_mug").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_mug"); bottle_empty = new Item().setUnlocalizedName("bottle_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bottle_empty"); bottle_nuka = new ItemEnergy().setUnlocalizedName("bottle_nuka").setContainerItem(ModItems.bottle_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bottle_nuka"); bottle_cherry = new ItemEnergy().setUnlocalizedName("bottle_cherry").setContainerItem(ModItems.bottle_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bottle_cherry"); @@ -7602,6 +7604,7 @@ public class ModItems { GameRegistry.registerItem(can_luna, can_luna.getUnlocalizedName()); GameRegistry.registerItem(can_bepis, can_bepis.getUnlocalizedName()); GameRegistry.registerItem(can_breen, can_breen.getUnlocalizedName()); + GameRegistry.registerItem(can_mug, can_mug.getUnlocalizedName()); //Coffee GameRegistry.registerItem(coffee, coffee.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemStamp.java b/src/main/java/com/hbm/items/machine/ItemStamp.java index ea8c3b4c9..fe6986d90 100644 --- a/src/main/java/com/hbm/items/machine/ItemStamp.java +++ b/src/main/java/com/hbm/items/machine/ItemStamp.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import com.hbm.items.ModItems; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -29,7 +28,7 @@ public class ItemStamp extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - if(this.type == StampType.PLATE || this.type == StampType.WIRE || this.type == StampType.CIRCUIT) + if((this.type == StampType.PLATE || this.type == StampType.WIRE || this.type == StampType.CIRCUIT) && this.getMaxDamage() > 0) list.add("[CREATED USING TEMPLATE FOLDER]"); } diff --git a/src/main/java/com/hbm/items/tool/ItemCraftingDegradation.java b/src/main/java/com/hbm/items/tool/ItemCraftingDegradation.java index 58099e460..53957b239 100644 --- a/src/main/java/com/hbm/items/tool/ItemCraftingDegradation.java +++ b/src/main/java/com/hbm/items/tool/ItemCraftingDegradation.java @@ -10,6 +10,7 @@ public class ItemCraftingDegradation extends Item { public ItemCraftingDegradation(int durability) { this.setMaxStackSize(1); this.setMaxDamage(durability); + this.setNoRepair(); } @Override diff --git a/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java b/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java index 165729f45..ab1f0e139 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java +++ b/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java @@ -14,68 +14,52 @@ import net.minecraftforge.client.model.IModelCustom; public class RenderFluidTank extends TileEntitySpecialRenderer { - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5D, y, z + 0.5D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glRotatef(180, 0F, 1F, 0F); GL11.glRotatef(90, 0F, 1F, 0F); - switch(tileEntity.getBlockMetadata()) - { - case 2: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(0, 0F, 1F, 0F); break; + switch(tileEntity.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } - bindTexture(ResourceManager.tank_tex); + bindTexture(ResourceManager.tank_tex); ResourceManager.fluidtank.renderPart("Tank"); GL11.glShadeModel(GL11.GL_FLAT); - GL11.glPopMatrix(); - - renderTileEntityAt2(tileEntity, x, y, z, f); - } - - public void renderTileEntityAt2(TileEntity tileEntity, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5D, y, z + 0.5D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + + renderTileEntityAt2(tileEntity, x, y, z, f); + } + + public void renderTileEntityAt2(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); GL11.glRotatef(180, 0F, 1F, 0F); GL11.glRotatef(90, 0F, 1F, 0F); - switch(tileEntity.getBlockMetadata()) - { - case 2: - GL11.glRotatef(90, 0F, 1F, 0F); break; - //GL11.glTranslated(0.5D, 0.0D, 0.0D); - case 4: - GL11.glRotatef(180, 0F, 1F, 0F); break; - //GL11.glTranslated(0.5D, 0.0D, 0.0D); - case 3: - GL11.glRotatef(270, 0F, 1F, 0F); break; - //GL11.glTranslated(0.5D, 0.0D, 0.0D); - case 5: - GL11.glRotatef(0, 0F, 1F, 0F); break; - //GL11.glTranslated(0.5D, 0.0D, 0.0D); + switch(tileEntity.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } String s = "NONE"; if(tileEntity instanceof TileEntityMachineFluidTank) - s = ((TileEntityMachineFluidTank)tileEntity).tank.getTankType().name(); - - bindTexture(new ResourceLocation(RefStrings.MODID, "textures/models/tank_" + s + ".png")); - ResourceManager.fluidtank.renderPart("Label"); + s = ((TileEntityMachineFluidTank) tileEntity).tank.getTankType().name(); - GL11.glPopMatrix(); - } + bindTexture(new ResourceLocation(RefStrings.MODID, "textures/models/tank_label/tank_" + s + ".png")); + ResourceManager.fluidtank.renderPart("Label"); + + GL11.glPopMatrix(); + } } diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/sulfuric_acid.png b/src/main/resources/assets/hbm/textures/gui/fluids/sulfuric_acid.png new file mode 100644 index 0000000000000000000000000000000000000000..18eac93ac573b9691da3f06cbff8fdac41097b6f GIT binary patch literal 1784 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 Y0anpf7!7%*tpET307*qoM6N<$f~gAN4FCWD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_ASCHRAB.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_ASCHRAB.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_ASCHRAB.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_ASCHRAB.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_BALEFIRE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_BALEFIRE.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_BALEFIRE.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_BALEFIRE.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_BIOFUEL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_BIOFUEL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_BIOFUEL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_BIOFUEL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_BIOGAS.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_BIOGAS.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_BIOGAS.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_BIOGAS.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_BITUMEN.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_BITUMEN.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_BITUMEN.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_BITUMEN.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_CARBONDIOXIDE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_CARBONDIOXIDE.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_CARBONDIOXIDE.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_CARBONDIOXIDE.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_COALGAS.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_COALGAS.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7871d698c990c2ca5e8727ab1741b6f727b87f GIT binary patch literal 2527 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 UbUeKh3IG5A07*qoM6N<$f<3up5C8xG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_DEUTERIUM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_DEUTERIUM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_DEUTERIUM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_DEUTERIUM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_DIESEL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_DIESEL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_DIESEL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_DIESEL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_DIESEL_CRACK.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_DIESEL_CRACK.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0714109d3c9142da0bcf6e0ee20b01bcc1366c GIT binary patch literal 2655 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_ETHANOL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_ETHANOL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_ETHANOL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_ETHANOL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_FRACKSOL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_FRACKSOL.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff623141ea5a976033b000821d666d9e10560e9 GIT binary patch literal 3499 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 ZKLII&i#zp$c*6hy002ovPDHLkV1lBS!`%P? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_GAS.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_GAS.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_GAS.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_GAS.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_GASOLINE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_GASOLINE.png new file mode 100644 index 0000000000000000000000000000000000000000..0cee2a546e79c3b8dca44b0125489eb56b1c2675 GIT binary patch literal 2653 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 M07*qoM6N<$f@S@A4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_HEATINGOIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HEATINGOIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_HEATINGOIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_HEATINGOIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_HEAVYOIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HEAVYOIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_HEAVYOIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_HEAVYOIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_HEAVYWATER.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HEAVYWATER.png new file mode 100644 index 0000000000000000000000000000000000000000..7686c05db6cbbcbe07a23266a294a61be9d65297 GIT binary patch literal 2604 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_HOTOIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HOTOIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_HOTOIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_HOTOIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_HOTSTEAM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HOTSTEAM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_HOTSTEAM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_HOTSTEAM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_HYDROGEN.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_HYDROGEN.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_HYDROGEN.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_HYDROGEN.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_KEROSENE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_KEROSENE.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_KEROSENE.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_KEROSENE.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_LAVA.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_LAVA.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_LAVA.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_LAVA.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_LIGHTOIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_LIGHTOIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_LIGHTOIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_LIGHTOIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_LIGHTOIL_CRACK.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_LIGHTOIL_CRACK.png new file mode 100644 index 0000000000000000000000000000000000000000..b6231173dbd9de16ad6e3f2e6f2bf0a1c0dd0d3a GIT binary patch literal 2807 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 JPDHLkV1i>QVG{rV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_LPG.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_LPG.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_LPG.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_LPG.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_LUBRICANT.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_LUBRICANT.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_LUBRICANT.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_LUBRICANT.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_MERCURY.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_MERCURY.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_MERCURY.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_MERCURY.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_NAPHTHA.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_NAPHTHA.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_NAPHTHA.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_NAPHTHA.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_NAPHTHA_CRACK.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_NAPHTHA_CRACK.png new file mode 100644 index 0000000000000000000000000000000000000000..3903e7eea319ebb3a38a79ea5dac22e8f66295f9 GIT binary patch literal 2810 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 M07*qoM6N<$f?KyuZvX%Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_NITAN.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_NITAN.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_NITAN.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_NITAN.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_NONE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_NONE.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_NONE.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_NONE.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_OIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_OIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_OIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_OIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_OXYGEN.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_OXYGEN.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_OXYGEN.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_OXYGEN.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_PAIN.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_PAIN.png new file mode 100644 index 0000000000000000000000000000000000000000..6a188996055095c20db4f88590192e06701f0833 GIT binary patch literal 2765 zcmV;;3NrPHP)o}>*srdD}5PYsoSWU28lagD0!Ak_aVqis;pPi)!Eto;C5lv=^ry{KCTl(ptiG) zjoWx=Df<(Oq+WPrTaM#3Av!e2S^Y^;R}8I-e*REq{5KWSYyg0lx{l2TIx%yg}nJU^X}%1#%9bc<%F3q`4+6 zJg|2jbE~}i<}b_k-455Zn)^oLWLr~Q8HQRT_l`M25PakY8L*4DV%!1;&bL!81KAHf) z+RE4o0H`iLVXLQ6;~$3L5fru9ixLX}HdZFi>UPsooomT#DG&YKR?k;Cdi&heZz`#!iBoxJUW(?5&F=fJRLB`)X8_Z~*{h8|q6d+`h0SE2*_v*+({P zNoBwJm$N==cHWp)*o`LoRKL)b(ag2_<)Rxp#SI`J*glZ~Ir4IA|D~6ptWo?^UT+Gh z93niBcplI?0R|vbDFg)oluD%nPy#?yto?cdeEf8&=!1+x*%_ERv*!g9iNn45xLG1d zCE0p-yuRGw@2uel!;$cNGEP@+tpz}F<<1(s?3*AWG2&qIYY``sUyC@Ayu|Tu>K+yg zY@iDjcV$~fi{%iQRL{Wd8eW!OA5ftlN}9codBkY zSvlv}yE_)-eYVy6DhEJsSxtJ52z+q;eCN86W-EEs`KRmUw~BIkU-3b~jA)nPzZl5z z>&Yu`o~)MtVi6L$balA#D`SeVUC3(%01`nmWx{Hp!w8Q4PV>Wqof5-?of5@KO0C)14FINu>O!*Uwq^j(DX7brL98j=(jvI4 z=(ib{Tt-2sxXF%G3sbNm5_V^c(5&7^`TltZE(%7)E!BLe_m+&uis>5xmGLM8_Q zP(Y)B4hebyfJURx0YKiTkm?*anM|ROKti8VK9#)??VdUbdO+dOqQgv<0RY3nJ|Jec>#CU9oRw@6$N&q`v#nQY(^Gcx>W&_- zSu3DX=%Z~wNlZ(tMK60E^w$kdlDG%AB8Wn9nV z9p=k zc8vU8=7%w1t>hKwFWp-nqHZU91;-qH!#&F;WNMPn>9(!q{r6N&1Vy=LzAm0}ZhfH9 z^TS7GB6>yim;O{^VhY#H*OE>$RrWNsef?e4hM{&*%cK9{B}K2gMf_{&r9&k~sm1^x z>k|Wju%P19#W;&iVX|uRg;M!>0FX){0+mJ>Gr)qdrQ_5$_tpfib3Nl67rW`xFu}4W z0lC%M*2JAb231n~Ytg^6dp;ZKIy^d;0Wz~YK8;&sxjX!i&!tR#MzB?3W#Pm%g^jZ1 zPSvGb%5<0+ade9t9o0N#evG&E9QUaRxn70bN9m7*y_#ehd@n&!|azc z0Ng96J*nBQsI1Ak!ACR9oH&s_&ysuT3vNts(`Teq| zcuFV$Kq^HqKm&uWdI7>Oxsm$k{du!5m3F3elZ`1{HsK~~YrB8_LhimD@0Uj1(|8Xs z)?9}2ApNI(yT7mAe5XTMYw2hiXhRWEt8bS7=c7Z#@pt8r=o9zNlC~cepd&Pxt>vM6 z43Nx7vx3Z*0DKe_3sUtO!@v`Suw!ogIH~Q#kr+W#|2|$9Os3CT^u-rR%3~W{9^T@{ zyaE`Q1W4+8zCBsDSwL7bBd0SL>*^jDHf0%8(ke_jd4J2}2+zO-VP|LTr%|5<(Ods(3un-oJ{9x29GYfOw$6M(A5p*gcj0-@ShUE?rOJdp`- z^M~y1H~YV@J(AQDMF>o?zRF&a)()Q9MzijqA=qt+e~jlkzw{gXZ)qIfJf#1uzGhEB z(CtAT^6}Rim9c56P}MkSTTv#8N&6z`vDO{vtu@|^T;niNOwI`~5p@T8X^l4{*EmcR zPvjOb8WU1?ps&`rGD3~R1Ty(nfC;EO_^n$1OH8^I;PKTRjE9yfVphf;^OLHNi>0{n z{k2UQ^(fOX+YxFUvN{ew%4q0@-jubHvg;N7Oju; z42$vC_~(c5)1rdo%9%BA4lBk32F!I%@*%1k2d+j-FTZj^w}A!>7%*Vq|Cav(u8HW? TEHCx<00000NkvXXu0mjfV}eR) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_PETROIL.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_PETROIL.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_PETROIL.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_PETROIL.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_PETROIL_LEADED.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_PETROIL_LEADED.png new file mode 100644 index 0000000000000000000000000000000000000000..bdef4b0ad439bcc674afa4abe38f5628c99412e2 GIT binary patch literal 2188 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 R#g700002ovPDHLkV1fhSNc8{! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_STEAM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_STEAM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_STEAM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_STEAM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_SULFURIC_ACID.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_SULFURIC_ACID.png new file mode 100644 index 0000000000000000000000000000000000000000..5f67bb26daa1dd34ad80ade311618cf74af63451 GIT binary patch literal 2331 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 BgWCWA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_SUPERHOTSTEAM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_SUPERHOTSTEAM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_SUPERHOTSTEAM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_SUPERHOTSTEAM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_TRITIUM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_TRITIUM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_TRITIUM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_TRITIUM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_UF6.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_UF6.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_UF6.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_UF6.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_ULTRAHOTSTEAM.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_ULTRAHOTSTEAM.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/tank_ULTRAHOTSTEAM.png rename to src/main/resources/assets/hbm/textures/models/tank_label/tank_ULTRAHOTSTEAM.png diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_UNSATURATEDS.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_UNSATURATEDS.png new file mode 100644 index 0000000000000000000000000000000000000000..2874679cb012ccfc34878b2aa4f5cb39f23826ae GIT binary patch literal 3514 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEFLUID.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEFLUID.png new file mode 100644 index 0000000000000000000000000000000000000000..028463ab46f3f2ffbe8e1ff5cb1382e9d7d841fc GIT binary patch literal 4090 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEGAS.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_WASTEGAS.png new file mode 100644 index 0000000000000000000000000000000000000000..881c6f3382b22425495f6a7a4bc4cb9bb4aab4d8 GIT binary patch literal 4990 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%0AMJCVL}3cTK4nUdQ<}a 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 Date: Wed, 30 Mar 2022 16:10:17 +0200 Subject: [PATCH 12/31] classic cable --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/network/BlockCable.java | 8 +++ src/main/java/com/hbm/main/ClientProxy.java | 1 + .../hbm/render/block/RenderCableClassic.java | 66 ++++++++++++++++++ .../hbm/textures/blocks/block_smore_side.png | Bin 219 -> 210 bytes .../hbm/textures/blocks/red_cable_classic.png | Bin 0 -> 229 bytes 6 files changed, 78 insertions(+) create mode 100644 src/main/java/com/hbm/render/block/RenderCableClassic.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d355520dd..5420a428a 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -720,6 +720,7 @@ public class ModBlocks { public static Block red_wire_coated; public static Block red_cable; + public static Block red_cable_classic; public static Block red_connector; public static Block red_pylon; public static Block red_pylon_large; @@ -1847,6 +1848,7 @@ public class ModBlocks { red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo"); + red_cable_classic = new BlockCable(Material.iron).setBlockName("red_cable_classic").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_cable_classic"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); red_connector = new ConnectorRedWire(Material.iron).setBlockName("red_connector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_connector"); red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); @@ -2963,6 +2965,7 @@ public class ModBlocks { GameRegistry.registerBlock(pribris_digamma, pribris_digamma.getUnlocalizedName()); GameRegistry.registerBlock(red_cable, red_cable.getUnlocalizedName()); + GameRegistry.registerBlock(red_cable_classic, red_cable_classic.getUnlocalizedName()); GameRegistry.registerBlock(red_wire_coated, red_wire_coated.getUnlocalizedName()); GameRegistry.registerBlock(red_connector, ItemBlockBase.class, red_connector.getUnlocalizedName()); GameRegistry.registerBlock(red_pylon, ItemBlockBase.class, red_pylon.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/network/BlockCable.java b/src/main/java/com/hbm/blocks/network/BlockCable.java index 85a55ff90..ffc7c7f36 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCable.java +++ b/src/main/java/com/hbm/blocks/network/BlockCable.java @@ -1,9 +1,11 @@ package com.hbm.blocks.network; +import com.hbm.blocks.ModBlocks; import com.hbm.blocks.test.TestConductor; import com.hbm.lib.Library; import com.hbm.tileentity.network.TileEntityCableBaseNT; +import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; @@ -21,9 +23,15 @@ public class BlockCable extends BlockContainer { public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { return new TileEntityCableBaseNT(); } + + public static int renderIDClassic = RenderingRegistry.getNextAvailableRenderId(); @Override public int getRenderType() { + + if(this == ModBlocks.red_cable_classic) + return renderIDClassic; + return TestConductor.renderID; } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 21cb9e94c..b24f96d5c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -679,6 +679,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderAnvil()); RenderingRegistry.registerBlockHandler(new RenderCrystal()); RenderingRegistry.registerBlockHandler(new RenderTestCable()); + RenderingRegistry.registerBlockHandler(new RenderCableClassic()); RenderingRegistry.registerBlockHandler(new RenderTestPipe()); RenderingRegistry.registerBlockHandler(new RenderBlockCT()); RenderingRegistry.registerBlockHandler(new RenderDetCord()); diff --git a/src/main/java/com/hbm/render/block/RenderCableClassic.java b/src/main/java/com/hbm/render/block/RenderCableClassic.java new file mode 100644 index 000000000..1ccfbcd7b --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderCableClassic.java @@ -0,0 +1,66 @@ +package com.hbm.render.block; + +import com.hbm.blocks.network.BlockCable; +import com.hbm.lib.Library; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +public class RenderCableClassic implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + boolean pX = Library.canConnect(world, x + 1, y, z, Library.NEG_X); + boolean nX = Library.canConnect(world, x - 1, y, z, Library.POS_X); + boolean pY = Library.canConnect(world, x, y + 1, z, Library.NEG_Y); + boolean nY = Library.canConnect(world, x, y - 1, z, Library.POS_Y); + boolean pZ = Library.canConnect(world, x, y, z + 1, Library.NEG_Z); + boolean nZ = Library.canConnect(world, x, y, z - 1, Library.POS_Z); + + double spanU = iicon.getMaxU() - iicon.getMinU(); + double spanV = iicon.getMaxV() - iicon.getMinV(); + double px = 0.0625D; + + double uv_cL = iicon.getMinU(); + double uv_cR = iicon.getMinU() + spanU * 5 / px; + double uv_cT = iicon.getMaxV(); + double uv_cB = iicon.getMaxV() - spanV * 5 / px; + + double pos_min = px * 5.5D; + double pos_max = px * 10.5D; + + //TODO: all that manual tessellator crap + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return false; + } + + @Override + public int getRenderId() { + return BlockCable.renderIDClassic; + } + +} diff --git a/src/main/resources/assets/hbm/textures/blocks/block_smore_side.png b/src/main/resources/assets/hbm/textures/blocks/block_smore_side.png index f00014e1a9576adfb3f144564b0e1373131cce43..071a015ff380e23f1f6c725fff0c300713cc0474 100644 GIT binary patch delta 166 zcmV;X09pUr0n!1GG=GUnL_t(IjqQ-J2|_^-MCU+EG!YaG6v5Qsj7+S<0t{`yDy+lS zu7>@$vt#hTAPU!jKbp5Q(Z2M2TvVN?9;i2}_VAut4L$Pg%iA*|+8 zwDwd=k(r_EI+z*0Ip_S-eR8^APjUuGfed)`{O;Dv8Cv_~cpum`e;gf*4*tZ!3pmQP UM3R^#tpET307*qoM6N<$g4P*N3;+NC delta 175 zcmV;g08szZ0owtPG=GvwL_t(IjqQ-J4FW+71oxyD5h)=ee}W??padd{pap7pi7u#z zgaU{zL*g^vd2ND!Bm~kmz(+e?JMeC}bO$d=6g3njbkt!s^v@nj1L+_QY6HK$aNI7P z=Ab#~qnd*b&>V~T47GhoDY=Ls=L`|SH^&%%yiab4-uc`;v+kNU_ d>fj$bcmbDGz$<1#rSbp(002ovPDHLkV1i8jNwEL` diff --git a/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png b/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png new file mode 100644 index 0000000000000000000000000000000000000000..0990a1e90594503c50498196e876f410cd2c6e9e GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfs@(Xnud#4*_<~vbo;)Eh3UXYAxX9s*%t5lLPEE)%qi|Tv0IN}QjnAAt+M9t327DY zITiot=(9cMsI5P0nK7$vj>);uK&AS(ISUz7brmbCn afcNi8eNEM?Q-RK8VDNPHb6Mw<&;$U!cv6x8 literal 0 HcmV?d00001 From c1b9ef3e173387b509b614257986d6c27e8f1e0b Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 30 Mar 2022 23:23:38 +0200 Subject: [PATCH 13/31] fixed energy voids, sulfuric acid puddles --- .../java/api/hbm/energy/IEnergyConductor.java | 10 ++ .../java/api/hbm/energy/IEnergyConnector.java | 2 +- src/main/java/api/hbm/energy/ILoadedTile.java | 6 + .../com/hbm/blocks/network/CableDiode.java | 3 +- .../missile/EntityMissileAntiBallistic.java | 119 +++++++++--------- src/main/java/com/hbm/main/MainRegistry.java | 4 +- .../java/com/hbm/main/ResourceManager.java | 2 +- .../hbm/tileentity/TileEntityLoadedBase.java | 20 +++ .../hbm/tileentity/TileEntityMachineBase.java | 3 +- .../hbm/tileentity/TileEntityProxyBase.java | 2 +- .../hbm/tileentity/TileEntityTickingBase.java | 2 +- .../bomb/TileEntityCompactLauncher.java | 3 +- .../tileentity/bomb/TileEntityLaunchPad.java | 3 +- .../bomb/TileEntityLaunchTable.java | 3 +- .../tileentity/machine/TileEntityChungus.java | 3 +- .../machine/TileEntityCoreAdvanced.java | 3 +- .../machine/TileEntityCoreTitanium.java | 3 +- .../machine/TileEntityFWatzCore.java | 6 +- .../machine/TileEntityForceField.java | 3 +- .../machine/TileEntityFusionMultiblock.java | 3 - .../tileentity/machine/TileEntityGeiger.java | 1 - .../machine/TileEntityHadronPower.java | 4 +- .../machine/TileEntityMachineAmgen.java | 9 +- .../machine/TileEntityMachineArcFurnace.java | 3 +- .../TileEntityMachineBoilerElectric.java | 3 +- .../machine/TileEntityMachineCMBFactory.java | 7 +- .../TileEntityMachineChemplantBase.java | 1 - .../machine/TileEntityMachineCoal.java | 7 +- .../machine/TileEntityMachineDetector.java | 5 +- .../machine/TileEntityMachineEPress.java | 4 +- .../TileEntityMachineElectricFurnace.java | 4 +- .../machine/TileEntityMachineMiniRTG.java | 3 +- .../machine/TileEntityMachineRTG.java | 4 +- .../machine/TileEntityMachineSPP.java | 7 +- .../TileEntityMachineSeleniumEngine.java | 6 +- .../machine/TileEntityMachineShredder.java | 5 +- .../machine/TileEntityMachineTeleporter.java | 3 +- .../machine/TileEntityMachineTurbine.java | 4 +- .../machine/TileEntityMachineTurbofan.java | 4 +- .../machine/TileEntityRadiobox.java | 5 +- .../machine/TileEntityWatzCore.java | 4 +- .../oil/TileEntityMachineGasFlare.java | 5 +- .../network/TileEntityConnector.java | 1 - .../network/TileEntityConverterHeRf.java | 3 +- .../network/TileEntityConverterRfHe.java | 4 +- .../java/com/hbm/world/feature/OreCave.java | 41 +++++- .../models/tank_label/tank_ENDERJUICE.png | Bin 2051 -> 2091 bytes 47 files changed, 204 insertions(+), 146 deletions(-) create mode 100644 src/main/java/api/hbm/energy/ILoadedTile.java create mode 100644 src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index 572ef0dc8..1744c5f79 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -94,6 +94,16 @@ public interface IEnergyConductor extends IEnergyConnector { return pos; } + + /** + * Since isLoaded is only currently used for weeding out unwanted subscribers, and cables shouldn't (although technically can) be + * subscribers, we just default to true because I don't feel like wasting time implementing things that we don't actually need. + * Perhaps this indicates a minor flaw in the new API, but I physically lack the ability to worry about it. + */ + @Override + public default boolean isLoaded() { + return true; + } //TODO: check if this standard implementation doesn't break anything (it shouldn't but right now it's a bit redundant) also: remove duplicate implementations @Override diff --git a/src/main/java/api/hbm/energy/IEnergyConnector.java b/src/main/java/api/hbm/energy/IEnergyConnector.java index 87a0f0a88..40ad4e647 100644 --- a/src/main/java/api/hbm/energy/IEnergyConnector.java +++ b/src/main/java/api/hbm/energy/IEnergyConnector.java @@ -14,7 +14,7 @@ import net.minecraftforge.common.util.ForgeDirection; * This is mean for TILE ENTITIES * @author hbm */ -public interface IEnergyConnector { +public interface IEnergyConnector extends ILoadedTile { /** * Returns the amount of power that remains in the source after transfer diff --git a/src/main/java/api/hbm/energy/ILoadedTile.java b/src/main/java/api/hbm/energy/ILoadedTile.java new file mode 100644 index 000000000..1f6d0f88b --- /dev/null +++ b/src/main/java/api/hbm/energy/ILoadedTile.java @@ -0,0 +1,6 @@ +package api.hbm.energy; + +public interface ILoadedTile { + + public boolean isLoaded(); +} diff --git a/src/main/java/com/hbm/blocks/network/CableDiode.java b/src/main/java/com/hbm/blocks/network/CableDiode.java index 8e260d42b..25da7bb68 100644 --- a/src/main/java/com/hbm/blocks/network/CableDiode.java +++ b/src/main/java/com/hbm/blocks/network/CableDiode.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -119,7 +120,7 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl return new TileEntityDiode(); } - public static class TileEntityDiode extends TileEntity implements IEnergyUser { + public static class TileEntityDiode extends TileEntityLoadedBase implements IEnergyUser { @Override public void readFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java index 8090eae78..b350038be 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java @@ -17,29 +17,29 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; public class EntityMissileAntiBallistic extends Entity implements IRadarDetectable { - + int activationTimer; public EntityMissileAntiBallistic(World p_i1582_1_) { super(p_i1582_1_); } - + @Override - public void onUpdate() { - + public void onUpdate() { + if(activationTimer < 40) { activationTimer++; - + motionY = 1.5D; this.setLocationAndAngles(posX + this.motionX, posY + this.motionY, posZ + this.motionZ, 0, 0); - this.rotation(); - - if(!this.worldObj.isRemote) + this.rotation(); + + if(!this.worldObj.isRemote && this.posY < 400) this.worldObj.spawnEntityInWorld(new EntitySmokeFX(this.worldObj, this.posX, this.posY, this.posZ, 0.0, 0.0, 0.0)); - + } else { - + if(activationTimer == 40) { ExplosionLarge.spawnParticlesRadial(worldObj, posX, posY, posZ, 15); activationTimer = 100; @@ -50,9 +50,9 @@ public class EntityMissileAntiBallistic extends Entity implements IRadarDetectab targetMissile(); this.setLocationAndAngles(posX + this.motionX, posY + this.motionY, posZ + this.motionZ, 0, 0); - this.rotation(); - - if(!this.worldObj.isRemote) + this.rotation(); + + if(!this.worldObj.isRemote && this.posY < 400) this.worldObj.spawnEntityInWorld(new EntitySmokeFX(this.worldObj, this.posX, this.posY, this.posZ, 0.0, 0.0, 0.0)); List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(posX - 5, posY - 5, posZ - 5, posX + 5, posY + 5, posZ + 5)); @@ -66,70 +66,66 @@ public class EntityMissileAntiBallistic extends Entity implements IRadarDetectab } } } + + if(this.posY > 2000) + this.setDead(); - if(this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.air && - this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.water && - this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.flowing_water) { - - if(!this.worldObj.isRemote) - { + if(this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.air && this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.water && this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.flowing_water) { + + if(!this.worldObj.isRemote) { ExplosionLarge.explode(worldObj, posX, posY, posZ, 10F, true, true, true); } this.setDead(); return; - } + } - } - - protected void rotation() { - float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); - this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); - - for (this.rotationPitch = (float)(Math.atan2(this.motionY, f2) * 180.0D / Math.PI) - 90; this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) - { - ; - } - - while (this.rotationPitch - this.prevRotationPitch >= 180.0F) - { - this.prevRotationPitch += 360.0F; - } - - while (this.rotationYaw - this.prevRotationYaw < -180.0F) - { - this.prevRotationYaw -= 360.0F; - } - - while (this.rotationYaw - this.prevRotationYaw >= 180.0F) - { - this.prevRotationYaw += 360.0F; - } } - + + protected void rotation() { + float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float) (Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + + for(this.rotationPitch = (float) (Math.atan2(this.motionY, f2) * 180.0D / Math.PI) - 90; this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { + ; + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw < -180.0F) { + this.prevRotationYaw -= 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw >= 180.0F) { + this.prevRotationYaw += 360.0F; + } + } + private void targetMissile() { - + List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(posX - 500, 0, posZ - 500, posX + 500, 5000, posZ + 500)); - + Entity target = null; double closest = 1000D; - + for(Entity e : list) { if(e instanceof EntityMissileBaseAdvanced || e instanceof EntityMissileCustom) { double dis = Math.sqrt(Math.pow(e.posX - posX, 2) + Math.pow(e.posY - posY, 2) + Math.pow(e.posZ - posZ, 2)); - + if(dis < closest) { closest = dis; target = e; } } } - + if(target != null) { - + Vec3 vec = Vec3.createVectorHelper(target.posX - posX, target.posY - posY, target.posZ - posZ); vec.normalize(); - + this.motionX = vec.xCoord * 0.065D; this.motionY = vec.yCoord * 0.065D; this.motionZ = vec.zCoord * 0.065D; @@ -138,25 +134,24 @@ public class EntityMissileAntiBallistic extends Entity implements IRadarDetectab @Override protected void entityInit() { - + } @Override protected void readEntityFromNBT(NBTTagCompound p_70037_1_) { - + } @Override protected void writeEntityToNBT(NBTTagCompound p_70014_1_) { - + } - - @Override + + @Override @SideOnly(Side.CLIENT) - public boolean isInRangeToRenderDist(double distance) - { - return distance < 500000; - } + public boolean isInRangeToRenderDist(double distance) { + return distance < 500000; + } @Override public RadarTargetType getTargetType() { diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index daaecb10b..0297c2d0a 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -975,8 +975,8 @@ public class MainRegistry { //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); - new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20); //sulfur - new OreCave(ModBlocks.stone_resource, 1).setThreshold(1.75D).setRangeMult(20).setYLevel(25).setMaxRange(20); //asbestos + new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20).withFluid(ModBlocks.sulfuric_acid_block); //sulfur + new OreCave(ModBlocks.stone_resource, 1).setThreshold(1.75D).setRangeMult(20).setYLevel(25).setMaxRange(20); //asbestos //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8c32969af..430a16e73 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -366,7 +366,7 @@ public class ResourceManager { //Tank public static final ResourceLocation tank_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tank.png"); - public static final ResourceLocation tank_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tank_NONE.png"); + public static final ResourceLocation tank_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tank_label/tank_NONE.png"); public static final ResourceLocation bat9000_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/bat9000.png"); public static final ResourceLocation orbus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/orbus.png"); diff --git a/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java new file mode 100644 index 000000000..baec2d8d4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java @@ -0,0 +1,20 @@ +package com.hbm.tileentity; + +import api.hbm.energy.ILoadedTile; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityLoadedBase extends TileEntity implements ILoadedTile { + + public boolean isLoaded = true; + + @Override + public boolean isLoaded() { + return isLoaded; + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + this.isLoaded = false; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index c9542a9dc..de2396047 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -5,6 +5,7 @@ import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; +import api.hbm.energy.ILoadedTile; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -15,7 +16,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidTank; -public abstract class TileEntityMachineBase extends TileEntity implements ISidedInventory, INBTPacketReceiver { +public abstract class TileEntityMachineBase extends TileEntityLoadedBase implements ISidedInventory, INBTPacketReceiver { public ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java index c1f3c07f7..0bcf59043 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java @@ -8,7 +8,7 @@ import com.hbm.tileentity.machine.TileEntityHadron; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityProxyBase extends TileEntity { +public class TileEntityProxyBase extends TileEntityLoadedBase { public boolean canUpdate() { return false; diff --git a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java index 4d4bf2d13..cc82f97ee 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java @@ -8,7 +8,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidTank; -public abstract class TileEntityTickingBase extends TileEntity implements INBTPacketReceiver { +public abstract class TileEntityTickingBase extends TileEntityLoadedBase implements INBTPacketReceiver { public TileEntityTickingBase() { } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index d974caa5c..cbe1fac9c 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -21,6 +21,7 @@ import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissileMultipartPacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import api.hbm.item.IDesignatorItem; @@ -39,7 +40,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCompactLauncher extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IEnergyUser { +public class TileEntityCompactLauncher extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IFluidAcceptor, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java index 1182aa426..c17fe69f8 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java @@ -4,6 +4,7 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissilePacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -18,7 +19,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityLaunchPad extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityLaunchPad extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { public ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 12c4130e4..a001e3748 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -21,6 +21,7 @@ import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissileMultipartPacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import api.hbm.item.IDesignatorItem; @@ -36,7 +37,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityLaunchTable extends TileEntity implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor { +public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index ed3ab7486..eb7c80bb8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -15,6 +15,7 @@ import com.hbm.lib.Library; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -25,7 +26,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityChungus extends TileEntity implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver { +public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver { public long power; public static final long maxPower = 100000000000L; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java index e6605700f..a945201d1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreAdvanced.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IFactory; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -17,7 +18,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCoreAdvanced extends TileEntity implements ISidedInventory, IFactory, IEnergyUser { +public class TileEntityCoreAdvanced extends TileEntityLoadedBase implements ISidedInventory, IFactory, IEnergyUser { public int progress = 0; public long power = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java index 0c5ec6e28..21c51712d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreTitanium.java @@ -5,6 +5,7 @@ import com.hbm.interfaces.IFactory; import com.hbm.interfaces.Spaghetti; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -18,7 +19,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCoreTitanium extends TileEntity implements ISidedInventory, IFactory, IEnergyUser { +public class TileEntityCoreTitanium extends TileEntityLoadedBase implements ISidedInventory, IFactory, IEnergyUser { public int progress = 0; public long power = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFWatzCore.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFWatzCore.java index f20c67ce3..e5f462543 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFWatzCore.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFWatzCore.java @@ -1,7 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; -import java.util.List; import java.util.Random; import com.hbm.interfaces.IFluidAcceptor; @@ -14,6 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.world.machine.FWatz; import api.hbm.energy.IEnergyGenerator; @@ -24,10 +23,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class TileEntityFWatzCore extends TileEntity implements ISidedInventory, IReactor, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityFWatzCore extends TileEntityLoadedBase implements ISidedInventory, IReactor, IEnergyGenerator, IFluidContainer, IFluidAcceptor { public long power; public final static long maxPower = 10000000000L; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index e62b9862f..1208805c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -7,6 +7,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEFFPacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -24,7 +25,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityForceField extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityForceField extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFusionMultiblock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFusionMultiblock.java index 4c8dff60c..fdab6bcb5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFusionMultiblock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFusionMultiblock.java @@ -1,8 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; -import java.util.List; - import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java index 1ea71a9ea..e9b9e17db 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.handler.radiation.ChunkRadiationManager; import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.chunk.Chunk; public class TileEntityGeiger extends TileEntity { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java index 348e78347..1b5e9ecd1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java @@ -1,14 +1,14 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.machine.BlockHadronPower; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHadronPower extends TileEntity implements IEnergyUser { +public class TileEntityHadronPower extends TileEntityLoadedBase implements IEnergyUser { public long power; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java index c3326f584..a88a7db69 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java @@ -1,20 +1,15 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; -import java.util.List; - import com.hbm.blocks.ModBlocks; import com.hbm.handler.radiation.ChunkRadiationManager; -import com.hbm.lib.Library; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.chunk.Chunk; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAmgen extends TileEntity implements IEnergyGenerator { +public class TileEntityMachineAmgen extends TileEntityLoadedBase implements IEnergyGenerator { public long power; public long maxPower = 500; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index a2916c09b..9e34acd3f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -7,6 +7,7 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -19,7 +20,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; -public class TileEntityMachineArcFurnace extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java index cb959e033..10a765f0c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoilerElectric.java @@ -16,6 +16,7 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -29,7 +30,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineBoilerElectric extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyUser { +public class TileEntityMachineBoilerElectric extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCMBFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCMBFactory.java index 780276af0..819467f45 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCMBFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCMBFactory.java @@ -1,8 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; -import java.util.List; - import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; import com.hbm.inventory.FluidTank; @@ -12,6 +9,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -22,10 +20,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCMBFactory extends TileEntity implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineCMBFactory extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java index 1a3aeeb53..3ad9b2723 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java @@ -18,7 +18,6 @@ import com.hbm.util.InventoryUtil; import api.hbm.energy.IEnergyUser; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java index d4503636a..878d3ad21 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java @@ -6,13 +6,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraftforge.common.util.ForgeDirection; -import java.util.ArrayList; -import java.util.List; - import com.hbm.blocks.machine.MachineCoal; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; @@ -25,12 +21,13 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyGenerator; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -public class TileEntityMachineCoal extends TileEntity implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDetector.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDetector.java index eea44c005..e71df5eab 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDetector.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDetector.java @@ -1,10 +1,11 @@ package com.hbm.tileentity.machine; +import com.hbm.tileentity.TileEntityLoadedBase; + import api.hbm.energy.IEnergyUser; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDetector extends TileEntity implements IEnergyUser { +public class TileEntityMachineDetector extends TileEntityLoadedBase implements IEnergyUser { long power; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 013b5f70f..feea1ffaf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -1,12 +1,12 @@ package com.hbm.tileentity.machine; -import com.hbm.inventory.recipes.MachineRecipes; import com.hbm.inventory.recipes.PressRecipes; import com.hbm.items.machine.ItemStamp; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEPressPacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -22,7 +22,7 @@ import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineEPress extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityMachineEPress extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 75a49e388..92fe3a0d0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -5,6 +5,7 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -15,10 +16,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineElectricFurnace extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityMachineElectricFurnace extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java index 6a2224074..a013fbc17 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java @@ -5,12 +5,13 @@ import java.util.List; import com.hbm.blocks.ModBlocks; import com.hbm.lib.Library; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineMiniRTG extends TileEntity implements IEnergyGenerator { +public class TileEntityMachineMiniRTG extends TileEntityLoadedBase implements IEnergyGenerator { public long power; boolean tact = false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 027653669..cbfe5b0a4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -4,6 +4,7 @@ import com.hbm.config.VersatileConfig; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.RTGUtil; import api.hbm.energy.IEnergyGenerator; @@ -13,10 +14,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRTG extends TileEntity implements ISidedInventory, IEnergyGenerator { +public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java index 127ba36c5..ad3adb63d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSPP.java @@ -1,16 +1,13 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; -import java.util.List; - import com.hbm.blocks.ModBlocks; import com.hbm.lib.Library; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -public class TileEntityMachineSPP extends TileEntity implements IEnergyGenerator { +public class TileEntityMachineSPP extends TileEntityLoadedBase implements IEnergyGenerator { public long power; public static final long maxPower = 100000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java index d19fe1d12..5060a0753 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java @@ -1,8 +1,6 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; @@ -17,6 +15,7 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyGenerator; @@ -26,10 +25,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineSeleniumEngine extends TileEntity implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineSeleniumEngine extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 63a11d0ef..d4367bf41 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -1,11 +1,11 @@ package com.hbm.tileentity.machine; -import com.hbm.interfaces.Untested; import com.hbm.inventory.recipes.ShredderRecipes; import com.hbm.items.machine.ItemBlades; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -15,10 +15,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineShredder extends TileEntity implements ISidedInventory, IEnergyUser { +public class TileEntityMachineShredder extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java index 82928346b..ed2457752 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTeleporter.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -14,7 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineTeleporter extends TileEntity implements IEnergyUser { +public class TileEntityMachineTeleporter extends TileEntityLoadedBase implements IEnergyUser { public long power = 0; public int targetX = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index fe29fa2d5..4acfb031a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -13,6 +13,7 @@ import com.hbm.inventory.recipes.MachineRecipes; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyGenerator; @@ -22,10 +23,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTurbine extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyGenerator { +public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IEnergyGenerator { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index 44a4c684d..df88f1c23 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -1,6 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -19,6 +18,7 @@ import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.LoopedSoundPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TETurbofanPacket; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -34,7 +34,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @Spaghetti("a") -public class TileEntityMachineTurbofan extends TileEntity implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java index 0038e9a1a..6db0cc2fd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java @@ -3,19 +3,18 @@ package com.hbm.tileentity.machine; import java.util.List; import com.hbm.lib.ModDamageSource; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.IMob; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityRadiobox extends TileEntity implements IEnergyUser { +public class TileEntityRadiobox extends TileEntityLoadedBase implements IEnergyUser { long power; public static long maxPower = 500000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatzCore.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzCore.java index b26d62d7e..1351f0f38 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatzCore.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzCore.java @@ -21,6 +21,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -30,12 +31,11 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityWatzCore extends TileEntity implements ISidedInventory, IReactor, IEnergyGenerator, IFluidContainer, IFluidSource { +public class TileEntityWatzCore extends TileEntityLoadedBase implements ISidedInventory, IReactor, IEnergyGenerator, IFluidContainer, IFluidSource { public long power; public final static long maxPower = 100000000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 0699d4b30..56c4bbf22 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -1,7 +1,5 @@ package com.hbm.tileentity.machine.oil; -import java.util.ArrayList; -import java.util.List; import java.util.Random; import com.hbm.entity.particle.EntityGasFlameFX; @@ -14,6 +12,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyGenerator; @@ -28,7 +27,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineGasFlare extends TileEntity implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineGasFlare extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java index a98ccec0a..cda2f59ca 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.network; import api.hbm.energy.IEnergyConductor; -import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java b/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java index 4d267f71f..941f83c1c 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.network; import com.hbm.calc.Location; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyConnector; import cofh.api.energy.IEnergyHandler; @@ -8,7 +9,7 @@ import cofh.api.energy.IEnergyReceiver; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityConverterHeRf extends TileEntity implements IEnergyConnector, IEnergyHandler { +public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEnergyConnector, IEnergyHandler { //Thanks to the great people of Fusion Warfare for helping me with the original implementation of the RF energy API diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConverterRfHe.java b/src/main/java/com/hbm/tileentity/network/TileEntityConverterRfHe.java index f17de5f83..4308103a6 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConverterRfHe.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConverterRfHe.java @@ -1,13 +1,13 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.Untested; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IEnergyGenerator; import cofh.api.energy.IEnergyHandler; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityConverterRfHe extends TileEntity implements IEnergyGenerator, IEnergyHandler { +public class TileEntityConverterRfHe extends TileEntityLoadedBase implements IEnergyGenerator, IEnergyHandler { @Override public void setPower(long power) { diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java index 17ec19c43..26a701d02 100644 --- a/src/main/java/com/hbm/world/feature/OreCave.java +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -28,6 +28,7 @@ public class OreCave { private int maxRange = 4; /** The y-level around which the stratum is centered. */ private int yLevel = 30; + private Block fluid; public OreCave(Block ore) { this(ore, 0); @@ -57,6 +58,11 @@ public class OreCave { this.yLevel = yLevel; return this; } + + public OreCave withFluid(Block fluid) { + this.fluid = fluid; + return this; + } @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { @@ -95,15 +101,48 @@ public class OreCave { if(genTarget.isNormalCube() && (genTarget.getMaterial() == Material.rock || genTarget.getMaterial() == Material.ground)) { boolean shouldGen = false; + boolean canGenFluid = event.rand.nextBoolean(); for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { Block neighbor = world.getBlock(MathHelper.clamp_int(x + dir.offsetX, cX, cX + 16), y + dir.offsetY, MathHelper.clamp_int(z + dir.offsetZ, cZ, cZ + 16)); if(neighbor.getMaterial() == Material.air || neighbor instanceof BlockStalagmite) { shouldGen = true; + } + + if(shouldGen && (fluid == null || !canGenFluid)) break; + + if(fluid != null) { + switch(dir) { + case UP: if(neighbor.getMaterial() != Material.air && !(neighbor instanceof BlockStalagmite)) canGenFluid = false; break; + case DOWN: if(!neighbor.isNormalCube()) canGenFluid = false; break; + case NORTH: + case SOUTH: + case EAST: + case WEST: + if(!neighbor.isNormalCube() && neighbor != fluid) canGenFluid = false; break; + } } } - if(shouldGen) world.setBlock(x, y, z, ore.block, ore.meta, 2); + + if(fluid != null && canGenFluid) { + world.setBlock(x, y, z, fluid, 0, 2); + world.setBlock(x, y - 1, z, ore.block, ore.meta, 2); + + for(int i = 2; i < 6; i++) { + ForgeDirection dir = ForgeDirection.getOrientation(i); + int clX = MathHelper.clamp_int(x + dir.offsetX, cX, cX + 16); + int clZ = MathHelper.clamp_int(z + dir.offsetZ, cZ, cZ + 16); + Block neighbor = world.getBlock(clX, y, clZ); + + if(neighbor.isNormalCube()) + world.setBlock(clX, y, clZ, ore.block, ore.meta, 2); + } + + } else if(shouldGen) { + world.setBlock(x, y, z, ore.block, ore.meta, 2); + } + } else { if((genTarget.getMaterial() == Material.air || !genTarget.isNormalCube()) && event.rand.nextInt(5) == 0) { diff --git a/src/main/resources/assets/hbm/textures/models/tank_label/tank_ENDERJUICE.png b/src/main/resources/assets/hbm/textures/models/tank_label/tank_ENDERJUICE.png index 36776becf25ad2008eb39efbd83dc9a5ef2c301c..4573c3d26ea74d8f97f7ce2e0681c67a4735dbdb 100644 GIT binary patch delta 2062 zcmV+p2=VuW5UUW7G=JhrL_t(|ob8%za8%V9$N%TP?A@EY*=5%xgcuS?3<`}Y3Q{Nt zNJJ<_88e;AOlJyXr!%D;tsUA9rS?VWR2X%fY3Yo%9UVkVWnxi_q5{Q4qdO^~fFzI- zLWm_VCM5fs-TQVn7Pi=mBRAvud4)azfFKH% zc0)G+0H3rTBY>R&COpFE5}O-AYNU@<=Qdpc0L|1a?GD~yvF!{n!Lc*IIOUhI0RX_p zl=jp;f6Ju|kbkPH;_tB7skOl6b^rkJ@$&kbBXR*ZJ56DBs?ip(`50XLE6`Q zLO<2=*Z3zrJ1K>pz3<$B^!4RC@U>1!p_8>Ycdm_` zcGo8Qh}lM6?WT}Fu>JByC7;JJx9TzJ)|g5O$wu7?-Q04o`irO{+z=*mRJ8lzPRsntlMZD`SKJ-!|RFbIdWY><-GOEvht_- z;yV{93obk!e82anWAja6)Yonf`2*XDt6++>YUPVL)152C+shv2j~)Ay$zWzR>T80N zIDe`aKP%-4v!M2e)WiOb@%DlJ)D(5Dps-3n7fc4z()W?ZcLTYK8i0X@qUVXbphR9h zf0wbVVS$m&X<9g996hun>dUWi&v8G>&n$mPsPFx`!9d5}2Y?Ml`e=+MQYXh<|60a1 zy-=!<*8m1HJ~;4;=<)EM69?ijJHiLQ=zmIl##5Sjzhoz?eF36Hw?$6;-hU>gHgLyX z7F)P9MI5o#{V5a2L0Iz5ZN4Sgmar*I{~Ozab$ve@)-cef_jjnp%N8jWGuJ4~yM7;T z$2-{$%AF{=)T*et!U7 zZw1f80U9v$^N~ZNpODS?u0QFKqsD?%qmhKcz*HJa)6lT4?yvujkbhsLG;`tF9B0&* z^({q`T!QTK%UFC9#Z$;DC`?E~ruNqU^^xY_%h|fWX0WT+yR(_wOT>*K0Dx1-0We(s zcLzH&>O-+a9C=(`06-p}$PAPv5`Szm@>6Sr^cukb_b0R3r(&HKhu%K50uY3Q7feeLn2m1=qpo&S==7A@+;xi@MQ5&8nCf0knuD)oRZMZ@QvPHt zAvPIIrUD!xvgkuHiSUv{M4|vDgTdk%uN4Y*m=q?*PZEU^Whwe2&7bdl41aTb9r;3g zC;QZ2A8nfYJNG>AMvU@Yf#moK#5?DIKc`Yz2bj!kKC{c9&@IJfwggU{9cn1w;;t@w zmb-nydiiAc&Y}Mp4QV>h&C?t=MQ7?AfdkB0%ZWbL-V1EX5<03tku@B)-FX&yy$Kq6BiMaUQ-{k22sMcJyF6xV*`pePsQ zIafXKqVvk*(bgXN$A7wi=sIGfj;}@AooQ~b2k99=5M?4j9&Ru}IO0gtCDFRVvBPaY zaXdKVwc%MZK!cGE=5YD25# z1v55_lihPT-V|w||D4`@d{?Zo^J)4yTMPT_#PP_^!FkgB%1u&P{tC_|6%nc#ba3FT zajxfGmYUthFg~73oLbkmFQe~Sg>x)+OHUI3z^mjXrY9xRQ=bVWu^$JIQ@lzZ1AxJ3 zf5zjZEr8o=)CJJm)D-n(tNs>5-o#nE^(M{3Lb;nBds|2N>tvRkGA#$MnP00000Ne4wvM6N<$f~tfayZ`_I delta 2021 zcmVxodUoG$I0{6+|#moqNJlXEq=J zAm8}UQG1=`DF6U8_km|3wkP}?)l!KF3IxcKBy-%H?3l5N<6~F3?!FVOW$r>K+R&`x zYHdNn^QewaL4Qa*0>OZkIrp4ow+)KJx0~4ZzC*l299}t1K4k8EBxdhDZvy~G?Pp(| zX&8GB0D!D|wpMF|hXCfmef;D$W(=-)eb9Sx?N9FKNdSPk8>6;EEy;n;!Pg%r5yjXxJLQQtC~kdCt*4&?M?@ZA}Vzx5@(1+;|w{(=G>>L{wwd!o#}o|6u`AE zNil{D+z^%L*QcVRFaw>B8ItqKyqxc|wPzllH@n_nPyD+^L~0UURbHz$kokW7lva-= zYm2eulz(ExVYN7WxRap_6Vw6_Z?^uO9Ti&qdwCFM;MNjjEJj6DmYx=mHs*0o7!Ov6 z*n73cZ55gk6&-~orhJ)9*Y80P3_~+^RO$Azr|j=V1`o;<( znlu6)MX7cd9_3zbPU1!2g4KIh!Sp2c@Xk7QJb#u8005GU7p)T)1v_g-XpJ7#$LHYM z(FAUQdoR#+O>+f7E&$2W+vE=1o>oG;DM3@2`w#Kd^-@s+A*eB|eHU2o7_Go06>N`q zWJ@EC1BDoiD(RG4rHoZ-4n>=2?yU3LUQGCf=9!9{DjlQ(m8>T=z*gRO+x`qebGJQ9 zEq_kFb9j9Ioe%D3r-fcW8y%e{@xTQ7u63@^kktkXa5Ccn07z27cI|!fzgce_d9<~K zX>+{dY0*HM4Ew^PZ~q7`hP)n9QsA9sQhR2?bD4*mT8a(w?`V}qO2DY z06_IoSpZ`pX#)TN6ekdkE*>{+{iZq*3Ox=sL70XmN&c+BH^3Ip)dcW^?3uOrt~DRw zEdl`mgeezOdvzcF z7T-k(W6Ive%t@2e*Fx1Mb~GJghUf;>SBnml8ZZE&!BCuA)4LzRFx8#GCEk0@ON^(a zQUj_*69J?{d6g6(o030B`)=PK+)pnorX)1?Q{;nF4#eOS+QrybX3(~kqbfueSq4!LW3cP%m0=Vj}j z%50Z!S>6|>m>Zx=OeM3m-}2mKK$w{KY7%<~-w}5d{t`m~Lo&*$qJOHBo4GOf6(lw} zlT44P@L2J{bq}xl;YMg{dzsHIf0|H33}{mm>Bsk9R^1+H5N6pSz|}Mw8)w1|a=!aW zO`dBCIz!1vPzwOdEZk3L!u};UdK+t2TmS$db)P%#+I-*uor;&OIEJZkA8mqwqaG&< z9T#77Hd=oWZf)F!|9`&78_OyQ5+aa|1v@qOn)l3`xwF1DM1JNEF^nd`XsX1GQ0ezv z16OMqt9;ShVY}AnJfHkiU3uc45I_M<$tY2$K#7kBNZrjRoHx0@EvLzgb8y^wI=P+IJPPMK`g+G%!;daHBb31fVJi${HK6V!Cl|}J%94sh1c-K>UIIyVYi5k zb`qlqJs^OBEJ`xRIwZTzERKwP#C7$*#Z9`e-xX2L{&D7V_8%fk<6Z(#gQ_IwcW!fg zo#-v*0ECZQUU8u&oJ`Y~qZ(BLB5{IbpBmtMI#0P;M_vvLDYl;d^Xw-%9aMqwM?_*& z5vsIr<7W{C%#00000NkvXXu0mjf DsI9bi From 6af5a8eb35e0207cec77ba331c1e33a317fbadd5 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 31 Mar 2022 16:36:26 +0200 Subject: [PATCH 14/31] some small fixes, ore rendering with layers --- src/main/java/api/hbm/energy/PowerNet.java | 12 +- .../java/com/hbm/blocks/ILookOverlay.java | 1 + src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../blocks/generic/BlockMotherOfAllOres.java | 109 ++++++++++++ .../hbm/items/machine/ItemChemistryIcon.java | 9 +- .../render/block/RenderBlockMultipass.java | 3 - .../com/hbm/render/model/ModelGasMask.java | 18 +- src/main/java/com/hbm/util/ColorUtil.java | 159 ++++++++++++++++++ .../java/com/hbm/world/feature/OreCave.java | 1 + .../assets/hbm/textures/blocks/ore_cobalt.png | Bin 382 -> 326 bytes .../assets/hbm/textures/blocks/ore_copper.png | Bin 288 -> 229 bytes .../hbm/textures/blocks/ore_random_1.png | Bin 0 -> 190 bytes .../hbm/textures/blocks/ore_random_10.png | Bin 0 -> 269 bytes .../hbm/textures/blocks/ore_random_2.png | Bin 0 -> 234 bytes .../hbm/textures/blocks/ore_random_3.png | Bin 0 -> 153 bytes .../hbm/textures/blocks/ore_random_4.png | Bin 0 -> 211 bytes .../hbm/textures/blocks/ore_random_5.png | Bin 0 -> 257 bytes .../hbm/textures/blocks/ore_random_6.png | Bin 0 -> 213 bytes .../hbm/textures/blocks/ore_random_7.png | Bin 0 -> 168 bytes .../hbm/textures/blocks/ore_random_8.png | Bin 0 -> 234 bytes .../hbm/textures/blocks/ore_random_9.png | Bin 0 -> 250 bytes 21 files changed, 304 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java create mode 100644 src/main/java/com/hbm/util/ColorUtil.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_1.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_10.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_2.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_3.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_4.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_5.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_6.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_7.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_8.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_random_9.png diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 12012eb1e..2969e9e4d 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -96,12 +96,18 @@ public class PowerNet implements IPowerNet { return this.valid; } + public long lastCleanup = System.currentTimeMillis(); + @Override public long transferPower(long power) { - this.subscribers.removeIf(x -> - x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() - ); + if(lastCleanup + 45 < System.currentTimeMillis()) { + this.subscribers.removeIf(x -> + x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() || !x.isLoaded() + ); + + lastCleanup = System.currentTimeMillis(); + } if(this.subscribers.isEmpty()) return power; diff --git a/src/main/java/com/hbm/blocks/ILookOverlay.java b/src/main/java/com/hbm/blocks/ILookOverlay.java index 47ff64eea..d100ed767 100644 --- a/src/main/java/com/hbm/blocks/ILookOverlay.java +++ b/src/main/java/com/hbm/blocks/ILookOverlay.java @@ -49,6 +49,7 @@ public interface ILookOverlay { } GL11.glDisable(GL11.GL_BLEND); + GL11.glColor3f(1F, 1F, 1F); GL11.glPopMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5420a428a..4e768e7ed 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -83,6 +83,8 @@ public class ModBlocks { public static Block ore_cinnebar; public static Block ore_coltan; public static Block ore_alexandrite; + + public static Block ore_random; public static Block ore_bedrock_coltan; @@ -1342,6 +1344,8 @@ public class ModBlocks { cluster_depth_titanium = new BlockDepthOre().setBlockName("cluster_depth_titanium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cluster_depth_titanium"); cluster_depth_tungsten = new BlockDepthOre().setBlockName("cluster_depth_tungsten").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cluster_depth_tungsten"); ore_alexandrite = new BlockDepthOre().setBlockName("ore_alexandrite").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_alexandrite"); + + ore_random = new BlockMotherOfAllOres().setBlockName("ore_random").setCreativeTab(MainRegistry.blockTab); depth_brick = new BlockDepth().setBlockName("depth_brick").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_brick"); depth_tiles = new BlockDepth().setBlockName("depth_tiles").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_tiles"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java new file mode 100644 index 000000000..6a093fe80 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -0,0 +1,109 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiPass { + + public BlockMotherOfAllOres() { + super(Material.rock); + this.blockIcon = Blocks.stone.getIcon(0, 0); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRandomOre(); + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + return ((TileEntityRandomOre) te).getStack().copy(); + } + + return super.getPickBlock(target, world, x, y, z); + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + @Override + public int getPasses() { + return 2; + } + + private IIcon[] overlays = new IIcon[10]; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + for(int i = 0; i < overlays.length; i++) { + overlays[i] = reg.registerIcon(RefStrings.MODID + ":ore_random_" + (i + 1)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + + if(RenderBlockMultipass.currentPass == 0) + return this.blockIcon; + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + TileEntityRandomOre ore = (TileEntityRandomOre) te; + ItemStack item = ore.getStack(); + + if(item != null) { + ComparableStack stack = new ComparableStack(item); + int index = stack.hashCode() % overlays.length; + return overlays[index]; + } + } + + return this.getIcon(side, world.getBlockMetadata(x, y, z)); + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(IBlockAccess world, int x, int y, int z) { + + if(RenderBlockMultipass.currentPass == 0) + return 0xffffff; + + return super.colorMultiplier(world, x, y, z); + } + + public static class TileEntityRandomOre extends TileEntity { + + public ItemStack getStack() { + return new ItemStack(Blocks.dirt); + } + + @Override + public boolean canUpdate() { + return false; + } + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java index 6e67efada..f3e190dc5 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java @@ -13,7 +13,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; public class ItemChemistryIcon extends Item { @@ -59,6 +58,12 @@ public class ItemChemistryIcon extends Item { @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int i) { - return this.icons[ChemplantRecipes.indexMapping.get(i).listing % this.icons.length]; + ChemRecipe rec = ChemplantRecipes.indexMapping.get(i); + + if(rec != null) { + return this.icons[rec.listing % this.icons.length]; + } else { + return ModItems.nothing.getIconFromDamage(i); + } } } diff --git a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java index bd4090f1e..9a3e26d03 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java +++ b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java @@ -66,7 +66,6 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { Tessellator tessellator = Tessellator.instance; - //int meta = world.getBlockMetadata(x, y, z); tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); @@ -82,8 +81,6 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { for(int i = 0; i < passes; i++) { currentPass = i; - //System.out.println(multi.getColorFromPass(world, x, y, z, false)); - //tessellator.setColorOpaque_I(multi.getColorFromPass(world, x, y, z, false)); renderer.renderStandardBlock(block, x, y, z); } diff --git a/src/main/java/com/hbm/render/model/ModelGasMask.java b/src/main/java/com/hbm/render/model/ModelGasMask.java index 3fc9d8bd3..a32833c9b 100644 --- a/src/main/java/com/hbm/render/model/ModelGasMask.java +++ b/src/main/java/com/hbm/render/model/ModelGasMask.java @@ -100,10 +100,20 @@ public class ModelGasMask extends ModelBiped { @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(); - GL11.glScalef(1.15F, 1.15F, 1.15F); - this.mask.render(par7); - GL11.glPopMatrix(); + + if(this.isChild) { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * par7, 0.0F); + this.mask.render(par7); + GL11.glPopMatrix(); + } else { + GL11.glPushMatrix(); + GL11.glScalef(1.15F, 1.15F, 1.15F); + this.mask.render(par7); + GL11.glPopMatrix(); + } } protected void convertToChild(ModelRenderer parParent, ModelRenderer parChild) { diff --git a/src/main/java/com/hbm/util/ColorUtil.java b/src/main/java/com/hbm/util/ColorUtil.java new file mode 100644 index 000000000..60779593e --- /dev/null +++ b/src/main/java/com/hbm/util/ColorUtil.java @@ -0,0 +1,159 @@ +package com.hbm.util; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import javax.imageio.ImageIO; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ColorUtil { + + @SideOnly(Side.CLIENT) + public static BufferedImage getImageFromStack(ItemStack stack) throws IOException { + String iconName = stack.getItem().getIconFromDamage(stack.getItemDamage()).getIconName(); + String domain = "minecraft"; + + if(iconName.contains(":")) { + String[] parts = iconName.split(":"); + domain = parts[0]; + iconName = parts[1]; + } + + ResourceLocation loc = new ResourceLocation(domain, "textures/items/" + iconName + ".png"); + + return ImageIO.read(Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream()); + } + + @SideOnly(Side.CLIENT) + public static int getAverageColorFromStack(ItemStack stack) { + + try { + BufferedImage tex = getImageFromStack(stack); + + int r = 0; + int g = 0; + int b = 0; + int pixels = 0; + + for(int i = 0; i < tex.getWidth(); i++) { + for(int j = 0; j < tex.getHeight(); j++) { + + Color pixel = new Color(tex.getRGB(i, j)); + + if(pixel.getAlpha() == 255) { + r += pixel.getRed(); + g += pixel.getGreen(); + b += pixel.getBlue(); + pixels++; + } + } + } + + int avgR = r / pixels; + int avgG = g / pixels; + int avgB = b / pixels; + + return (r << 16) | (g << 8) | b; + + } catch(Exception ex) { + return 0xFFFFFF; + } + } + + @SideOnly(Side.CLIENT) + public static int getMedianBrightnessColorFromStack(ItemStack stack) { + + try { + BufferedImage tex = getImageFromStack(stack); + + HashMap brightMap = new HashMap(); + List brightnesses = new ArrayList(); + + for(int i = 0; i < tex.getWidth(); i++) { + for(int j = 0; j < tex.getHeight(); j++) { + + Color pixel = new Color(tex.getRGB(i, j)); + int brightness = pixel.getRed() * pixel.getRed() + pixel.getGreen() * pixel.getGreen() + pixel.getBlue() * pixel.getBlue(); + brightnesses.add(brightness); + brightMap.put(brightness, pixel); //overlap possible, but we don't differentiate between colors anyway. + } + } + + Collections.sort(brightnesses); + int median = brightnesses.get(brightnesses.size() / 2); + Color medianColor = brightMap.get(median); + + return medianColor.getRGB(); + + } catch(Exception ex) { + return 0xFFFFFF; + } + } + + /** + * Decides whether a color is considered "colorful", i.e. weeds out colors that are too dark or too close to gray. + * @param hex + * @return + */ + public static boolean isColorColorful(int hex) { + Color color = new Color(hex); + + /*double r = color.getRed(); + double g = color.getBlue(); + double b = color.getGreen(); + + if(r < 50 && g < 50 && b < 50) + return false; + + if(r / g > 1.5) return true; + if(r / b > 1.5) return true; + if(g / r > 1.5) return true; + if(g / b > 1.5) return true; + if(b / r > 1.5) return true; + if(b / g > 1.5) return true;*/ + + float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[0]); + + // saturation brightness + return hsb[1] > 0.25 && hsb[2] > 0.25; + } + + /** + * Raises the highest RGB component to the specified limit, scaling the other components with it. + * @param hex + * @param limit + * @return + */ + public static int amplifyColor(int hex, int limit) { + Color color = new Color(hex); + int r = color.getRed(); + int g = color.getGreen(); + int b = color.getBlue(); + int max = Math.max(r, Math.max(g, b)); + + r = r * limit / max; + g = g * limit / max; + b = b * limit / max; + + return new Color(r, g, b).getRGB(); + } + + /** + * Same as the regular amplifyColor but it uses 255 as the limit. + * @param hex + * @return + */ + public static int amplifyColor(int hex) { + return amplifyColor(hex, 255); + } +} diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java index 26a701d02..0dba4397b 100644 --- a/src/main/java/com/hbm/world/feature/OreCave.java +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -64,6 +64,7 @@ public class OreCave { return this; } + @SuppressWarnings("incomplete-switch") @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png b/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png index 63c77c56f5907b20fcf5b1f0c001ed24a33849e3..2553fad8480e107443760fcf1333db0a14afeca2 100644 GIT binary patch delta 300 zcmV+{0n`5e0>%Q6BYyw{b3#c}2nYxWdzq_*Vt4xr2M$dp_y#5j^kR_v20_Nm7Ji2oiA|LzZQPAPDG- zHCLa)0rCMuHp+UnI--X>kOm+NH|O~k=JPk>F|#pPkye0(?SJ+geE$fZ_X4ff6SUh? zqj5aWp;mivTX4y?VOwlA1IkC0e^Q9Zj0|>I_!}FgZv@v=Ijvx+r5fFYwcYLqCX*91 z8ouFQZb)yzW?rv9;BdG=x4Wbvoz6211}XIWE0TW`V!i&TckW8P*NcpB8On7?|M_Q& zH-}^=&SBxVQe7G9x>TpihC&w7^b7X;U)sA2&9-EO$jpnyJ4Df$d@`h(&E^wkv)B8F zBw>3-Hrxi^iV-5Fiz(j=(zaqK;7gQDF5j*TMf?E;O>EtCMNV)40000M{oII24%(Oc)O~@AO8HbW&?rgJKOy}u1ZfxP?*D~!F1yitE2kfnN$D7 zUvQZE@NesF9&x{WNeMtOVTwr7g}j>`E5*Z4?T&hE@1QwJf`MUyWSsD#t2Z_Q9m?S8 L>gTe~DWM4fCns6q literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFto{fBm3`CgaC9NKJ7^zRYv@T@TjZD?D5S43c&Hoqt zKi_<`*}r_6;MJcJscSf`TH=>9LA`fp>p#+ zDEumQGQL)AyYeEFa_GF@{0}#um3uS2rZS*@?x~9n>kOOYkDL_WoU`_;Ey&59u6{1- HoD!M diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_1.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4734b44ffb26f8eb394fd87ed2d78253ee8bc46e GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfTfhJt$iSd;z9d8vfFWw8bJHh1m;C%>@N0;#ODp=G$+x^TuYH>m;|!M+l?g6P-NN#+r&gG(n#w-yV#=Of=1Lz$ zeuaEGm)2Wx|9f+3Ipg)RsJpK!c6ep3eQGxUM2dWcWvble8>_{m?$$8|`3s)87rt&c P&_4{Gu6{1-oD!M#v=?m^b|r@qBaE6M$nm%jdQgJ=_{YTjnGsJTG189ZJ6T-G@yGywny`7<~G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_4.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_4.png new file mode 100644 index 0000000000000000000000000000000000000000..df4ffe5c16a3383ee2e0d6ff773b7d86f5865d6d GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf9_0HQI70~(SEQ*K-(JQxDI}Yindt}Xhry?EP9O*#L+x@BC8Hgp9_uXqJ?6@#a%pUXO@ GgeCwgSW!#> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_5.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_5.png new file mode 100644 index 0000000000000000000000000000000000000000..34b4c9d9ab69d46330d54f5e194b67a032d6caee GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf{fFB!z3vyk;s>ex zc|!NT^CtI5m7i>#S-ED>RyGEOMeFj`{$2S=$W-Z-3Im7YjB8RsUYCFCbqee{bYt~| zCmCyB%oH{FY+3i!<#5U)4-x+*a}95<_&2e;N9&k{<`kfF@BOy(QhN3O_Rpy7o0iv4 zZVfBt4|x+~UsY5T+HuQB@%fqMxzXQ~y2GEC|6t;0ozkqd=GYsc9~eAc{an^LB{Ts5 Dy)I-9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_6.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_6.png new file mode 100644 index 0000000000000000000000000000000000000000..64be59eba2d8cb99f15fe3d35af1db2acfd66c73 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfTf?TujiUy$BVpPVM8<{@;l@KWFL zeH*s6opEttU{Ffht*$vKKRvi4=uYhNU+*^kGR&%3;Xa9B!L_a+E~DaZ!Hd;}-~NO? zI-eT%>{H65U7u&pn}2j>XKJLwrrBDa@BZy&Z`U^6yz`v#9)>%~>5IRGoc02`i^0>? K&t;ucLK6UQ+f|$Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_7.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9983624756e9f33b30f4a47fd2f16aa447aad97b GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfSg?0xX+ zd0WK7wB|ofNbBeb%1dKl2(?|t#8B{k<$_7~Sr+eH#P#Cw^xNUmy`z8fWI=hMUyXgE|TW&q}mzQv0{nxUpC~CrzRY5Kl%6k^f@maO? z+t!%}?=mtd1$C|3v^A{h%{zgKLWcqc773?EhhKJk5^q@csb%(Dftc&9C-yy)Tm0?K zMdz{zj{Rr hDLHZS{pmS>8RYw~oJtFsBLs9TgQu&X%Q~loCIBBJVeS9` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_random_9.png b/src/main/resources/assets/hbm/textures/blocks/ore_random_9.png new file mode 100644 index 0000000000000000000000000000000000000000..78fb424b2166c265b5c041ea3192b69bc3ce04b8 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf Date: Thu, 31 Mar 2022 22:54:10 +0200 Subject: [PATCH 15/31] fixed mappings and broken textures --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../blocks/generic/BlockMotherOfAllOres.java | 229 +++++++++++++++++- .../java/com/hbm/items/tool/ItemWandD.java | 13 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 7 + src/main/java/com/hbm/lib/Library.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 3 + src/main/java/com/hbm/main/NEIConfig.java | 35 +++ .../render/block/RenderBlockMultipass.java | 61 +++++ .../java/com/hbm/render/model/ModelM65.java | 36 ++- .../render/util/RenderAccessoryUtility.java | 4 + .../java/com/hbm/tileentity/TileMappings.java | 3 + src/main/java/com/hbm/util/ColorUtil.java | 6 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/textures/blocks/ore_cobalt.png | Bin 326 -> 593 bytes .../assets/hbm/textures/blocks/ore_copper.png | Bin 229 -> 527 bytes .../hbm/textures/models/capes/CapePheo.png | Bin 0 -> 16324 bytes 17 files changed, 378 insertions(+), 28 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/capes/CapePheo.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 4e768e7ed..ec06e13b4 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2,6 +2,7 @@ package com.hbm.blocks; import com.hbm.blocks.generic.*; import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect; +import com.hbm.blocks.generic.BlockMotherOfAllOres.ItemRandomOreBlock; import com.hbm.blocks.bomb.*; import com.hbm.blocks.fluid.*; import com.hbm.blocks.gas.*; @@ -2399,6 +2400,9 @@ public class ModBlocks { //End Ores GameRegistry.registerBlock(ore_tikite, ore_tikite.getUnlocalizedName()); + //It's a meme you dip + GameRegistry.registerBlock(ore_random, ItemRandomOreBlock.class, ore_random.getUnlocalizedName()); + //Crystals GameRegistry.registerBlock(crystal_power, crystal_power.getUnlocalizedName()); GameRegistry.registerBlock(crystal_energy, crystal_energy.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java index 6a093fe80..830aef77b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -1,28 +1,59 @@ package com.hbm.blocks.generic; +import java.awt.Color; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; + +import com.google.common.collect.HashBiMap; import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.util.ColorUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiPass { + + public static int override = -1; + + public static void shuffleOverride(Random rand) { + override = rand.nextInt(uniqueItems.size()); + } + + public static void resetOverride() { + override = -1; + } public BlockMotherOfAllOres() { super(Material.rock); - this.blockIcon = Blocks.stone.getIcon(0, 0); + this.setBlockTextureName("stone"); } @Override @@ -30,16 +61,54 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP return new TileEntityRandomOre(); } + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + + for(int i = 0; i < uniqueItems.size(); i++) + list.add(new ItemStack(item, 1, i)); + } + @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRandomOre) { - return ((TileEntityRandomOre) te).getStack().copy(); + TileEntityRandomOre ore = (TileEntityRandomOre) te; + return new ItemStack(this, 1, ore.getStackId()); } - return super.getPickBlock(target, world, x, y, z); + return new ItemStack(ModItems.nothing); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + ArrayList ret = new ArrayList(); + + if(fortune == 0xFECE00) { + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + TileEntityRandomOre ore = (TileEntityRandomOre) te; + ComparableStack item = ore.getCompStack(); + ret.add(item.toStack()); + } + } + + return ret; + } + + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + this.dropBlockAsItemWithChance(world, x, y, z, meta, 1, 0xFECE00); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { + ((TileEntityRandomOre)world.getTileEntity(x, y, z)).setItem(stack.getItemDamage()); + world.markBlockForUpdate(x, y, z); } @Override @@ -57,6 +126,8 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { + + this.blockIcon = reg.registerIcon("stone"); for(int i = 0; i < overlays.length; i++) { overlays[i] = reg.registerIcon(RefStrings.MODID + ":ore_random_" + (i + 1)); } @@ -67,22 +138,27 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { if(RenderBlockMultipass.currentPass == 0) - return this.blockIcon; + return Blocks.stone.getIcon(0, 0); TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRandomOre) { TileEntityRandomOre ore = (TileEntityRandomOre) te; - ItemStack item = ore.getStack(); - - if(item != null) { - ComparableStack stack = new ComparableStack(item); - int index = stack.hashCode() % overlays.length; - return overlays[index]; - } + int index = ore.getStackId() % overlays.length; + return overlays[index]; } + + return Blocks.stone.getIcon(0, 0); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + + if(RenderBlockMultipass.currentPass == 0) + return Blocks.stone.getIcon(0, 0); - return this.getIcon(side, world.getBlockMetadata(x, y, z)); + int index = meta % overlays.length; + return overlays[index]; } @Override @@ -91,19 +167,146 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP if(RenderBlockMultipass.currentPass == 0) return 0xffffff; + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + TileEntityRandomOre ore = (TileEntityRandomOre) te; + ItemStack stack = ore.getStack(); + int color = ColorUtil.getAverageColorFromStack(stack); + color = ColorUtil.amplifyColor(color); + + Color col = new Color(color); + int r = col.getRed(); + int g = col.getGreen(); + int b = col.getBlue(); + + float[] hsb = new Color(color).RGBtoHSB(r, g, b, new float[3]); + + if(hsb[1] > 0F && hsb[1] < 0.75F) + hsb[1] = 0.75F; + + color = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]); + + return color; + } return super.colorMultiplier(world, x, y, z); } public static class TileEntityRandomOre extends TileEntity { + private ComparableStack stack; + + public TileEntityRandomOre() { + if(override != -1) { + setItem(override); + } + } + + public void setItem(int id) { + ComparableStack comp = itemMap.get(id); + this.stack = comp != null ? ((ComparableStack) comp.copy()) : null; + + if(this.worldObj != null) + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + + public int getStackId() { + return itemMap.inverse().get(getCompStack()); + } + public ItemStack getStack() { - return new ItemStack(Blocks.dirt); + return getCompStack().toStack(); + } + + public ComparableStack getCompStack() { + + if(stack == null) { + int rand = worldObj.rand.nextInt(uniqueItems.size()); + stack = (ComparableStack) itemMap.get(rand).copy(); + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + + return stack != null ? stack : new ComparableStack(ModItems.nothing); } @Override public boolean canUpdate() { return false; } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int key = nbt.getInteger("item"); + this.setItem(key); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + int key = itemMap.inverse().get(getCompStack()); + nbt.setInteger("item", key); + } + + @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()); + } + } + + public static class ItemRandomOreBlock extends ItemBlock { + + public ItemRandomOreBlock(Block block) { + super(block); + this.setHasSubtypes(true); + this.setMaxDamage(0); + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + ComparableStack comp = itemMap.get(stack.getItemDamage()); + ItemStack name = comp != null ? comp.toStack() : new ItemStack(ModItems.nothing); + if(name.getItemDamage() == OreDictionary.WILDCARD_VALUE) { + name.setItemDamage(0); + } + return I18nUtil.resolveKey(this.getUnlocalizedName() + ".name", name.getItem().getItemStackDisplayName(name)); + } + } + + public static HashSet uniqueItems = new HashSet(); + public static HashBiMap itemMap = HashBiMap.create(); + + public static void init() { + + for(Object b : Block.blockRegistry.getKeys()) { + Block block = Block.getBlockFromName((String) b); + if(block != null) + uniqueItems.add(new ComparableStack(block)); + } + + for(Object i : Item.itemRegistry.getKeys()) { + Item item = (Item) Item.itemRegistry.getObject((String) i); + uniqueItems.add(new ComparableStack(item)); + } + + for(String i : OreDictionary.getOreNames()) { + for(ItemStack stack : OreDictionary.getOres(i)) { + uniqueItems.add(new ComparableStack(stack)); + } + } + + int i = 0; + for(ComparableStack stack : uniqueItems) { + itemMap.put(i++, stack); + } } } diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index dd61128ba..3faa74be1 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -9,9 +9,11 @@ import com.hbm.lib.Library; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -27,10 +29,17 @@ public class ItemWandD extends Item { if(pos != null) { - EntitySiegeTunneler tunneler = new EntitySiegeTunneler(world); + List zombies = world.getEntitiesWithinAABB(EntityZombie.class, AxisAlignedBB.getBoundingBox(pos.blockX - 2, pos.blockY - 2, pos.blockZ - 2, pos.blockX + 2, pos.blockY + 2, pos.blockZ + 2)); + + for(EntityZombie zombie : zombies) { + zombie.setChild(true); + zombie.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_m65)); + } + + /*EntitySiegeTunneler tunneler = new EntitySiegeTunneler(world); tunneler.setPosition(pos.blockX, pos.blockY + 1, pos.blockZ); tunneler.onSpawnWithEgg(null); - world.spawnEntityInWorld(tunneler); + world.spawnEntityInWorld(tunneler);*/ //CellularDungeonFactory.meteor.generate(world, x, y, z, world.rand); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index a5442ede4..db42ab6e0 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -3,6 +3,7 @@ package com.hbm.lib; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.config.GeneralConfig; import com.hbm.config.WorldConfig; import com.hbm.items.ModItems; @@ -116,6 +117,12 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.titaniumClusterSpawn, 6, 15, 30, ModBlocks.cluster_titanium); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 15, 35, ModBlocks.cluster_aluminium); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.copperClusterSpawn, 6, 15, 20, ModBlocks.cluster_copper); + + for(int k = 0; k < 16; k++) { + BlockMotherOfAllOres.shuffleOverride(rand); + DungeonToolbox.generateOre(world, rand, i, j, 1, 10, 4, 30, ModBlocks.ore_random); + } + BlockMotherOfAllOres.resetOverride(); if(GeneralConfig.enable528ColtanSpawn) { DungeonToolbox.generateOre(world, rand, i, j, GeneralConfig.coltanRate, 4, 15, 40, ModBlocks.ore_coltan); diff --git a/src/main/java/com/hbm/lib/Library.java b/src/main/java/com/hbm/lib/Library.java index 483b0368b..72ad14fd5 100644 --- a/src/main/java/com/hbm/lib/Library.java +++ b/src/main/java/com/hbm/lib/Library.java @@ -74,6 +74,7 @@ public class Library { public static String SolsticeUnlimitd = "f5574fd2-ec28-4927-9d11-3c0c731771f4"; public static String FrizzleFrazzle = "fc4cc2ee-12e8-4097-b26a-1c6cb1b96531"; public static String the_NCR = "28ae585f-4431-4491-9ce8-3def6126e3c6"; + public static String Barnaby99_x = "711aaf78-a862-4b7e-921a-216349716e9a"; public static Set contributors = Sets.newHashSet(new String[] { "06ab7c03-55ce-43f8-9d3c-2850e3c652de", //mustang_rudolf diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0297c2d0a..90313f632 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -38,6 +38,7 @@ import org.apache.logging.log4j.Logger; import com.google.common.collect.ImmutableList; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.config.*; import com.hbm.creativetabs.*; import com.hbm.entity.effect.*; @@ -972,6 +973,8 @@ public class MainRegistry { proxy.registerMissileItems(); + BlockMotherOfAllOres.init(); + //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 1d57eeb24..0b79f4212 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -1,6 +1,9 @@ package com.hbm.main; +import java.util.List; + import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.config.VersatileConfig; import com.hbm.handler.nei.*; import com.hbm.items.ModItems; @@ -9,7 +12,14 @@ import com.hbm.lib.RefStrings; import codechicken.nei.api.API; import codechicken.nei.api.IConfigureNEI; +import codechicken.nei.api.IHighlightHandler; +import codechicken.nei.api.ItemInfo.Layout; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; public class NEIConfig implements IConfigureNEI { @@ -139,6 +149,31 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.pink_slab)); API.hideItem(new ItemStack(ModBlocks.pink_double_slab)); API.hideItem(new ItemStack(ModBlocks.pink_stairs)); + + API.registerHighlightIdentifier(ModBlocks.ore_random, new IHighlightHandler() { + + @Override + public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { + int x = mop.blockX; + int y = mop.blockY; + int z = mop.blockZ; + + TileEntity te = world.getTileEntity(x, y, z); + + if(te instanceof TileEntityRandomOre) { + TileEntityRandomOre ore = (TileEntityRandomOre) te; + return new ItemStack(ModBlocks.ore_random, 1, ore.getStackId()); + } + + return null; + } + + @Override + public List handleTextData(ItemStack itemStack, World world, EntityPlayer player, MovingObjectPosition mop, List currenttip, Layout layout) { + return currenttip; + } + + }); } @Override diff --git a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java index 9a3e26d03..d408dd0eb 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java +++ b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java @@ -1,13 +1,21 @@ package com.hbm.render.block; +import java.awt.Color; + import org.lwjgl.opengl.GL11; import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockMotherOfAllOres; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; +import com.hbm.util.ColorUtil; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { @@ -59,6 +67,59 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tessellator.draw(); + if(block == ModBlocks.ore_random) { + + this.currentPass = 1; + renderer.setOverrideBlockTexture(block.getIcon(0, metadata)); + this.currentPass = 0; + ComparableStack stack = BlockMotherOfAllOres.itemMap.get(metadata); + int color = ColorUtil.getAverageColorFromStack(stack != null ? stack.toStack() : new ItemStack(ModItems.nothing)); + color = ColorUtil.amplifyColor(color); + + Color col = new Color(color); + int r = col.getRed(); + int g = col.getGreen(); + int b = col.getBlue(); + + float[] hsb = new Color(color).RGBtoHSB(r, g, b, new float[3]); + + if(hsb[1] > 0F && hsb[1] < 0.75F) + hsb[1] = 0.75F; + + color = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]); + col = new Color(color); + + GL11.glColor3f(col.getRed() / 255F, col.getGreen() / 255F, col.getBlue() / 255F); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); + tessellator.draw(); + + renderer.clearOverrideBlockTexture(); + GL11.glColor3f(1F, 1F, 1F); + } + GL11.glTranslatef(0.5F, 0.5F, 0.5F); } diff --git a/src/main/java/com/hbm/render/model/ModelM65.java b/src/main/java/com/hbm/render/model/ModelM65.java index c1eaaab90..d61b13d43 100644 --- a/src/main/java/com/hbm/render/model/ModelM65.java +++ b/src/main/java/com/hbm/render/model/ModelM65.java @@ -126,17 +126,33 @@ public class ModelM65 extends ModelBiped { @Override public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) { setRotationAngles(par2, par3, par4, par5, par6, par7, entity); - GL11.glPushMatrix(); - double d = 1D / 16D * 18D; - //GL11.glTranslated(0, 1/16D, 0); - GL11.glScaled(d, d, d); - GL11.glScaled(1.01D, 1.01D, 1.01D); - this.mask.render(par7); - if(!(entity instanceof EntityLivingBase) || ArmorUtil.getGasMaskFilterRecursively(((EntityLivingBase)entity).getEquipmentInSlot(4), (EntityLivingBase)entity) != null) - this.filter.render(par7); - - GL11.glPopMatrix(); + if(this.isChild) { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * par7, 0.0F); + double d = 1D / 16D * 18D; + GL11.glScaled(d, d, d); + GL11.glScaled(1.01D, 1.01D, 1.01D); + this.mask.render(par7); + + if(!(entity instanceof EntityLivingBase) || ArmorUtil.getGasMaskFilterRecursively(((EntityLivingBase)entity).getEquipmentInSlot(4), (EntityLivingBase)entity) != null) + this.filter.render(par7); + + GL11.glPopMatrix(); + } else { + GL11.glPushMatrix(); + double d = 1D / 16D * 18D; + GL11.glScaled(d, d, d); + GL11.glScaled(1.01D, 1.01D, 1.01D); + this.mask.render(par7); + + if(!(entity instanceof EntityLivingBase) || ArmorUtil.getGasMaskFilterRecursively(((EntityLivingBase)entity).getEquipmentInSlot(4), (EntityLivingBase)entity) != null) + this.filter.render(par7); + + GL11.glPopMatrix(); + } } private void setRotation(ModelRenderer model, float x, float y, float z) { diff --git a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java index 7103eebad..b0d165e51 100644 --- a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java +++ b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java @@ -41,6 +41,7 @@ public class RenderAccessoryUtility { private static ResourceLocation rightnugget = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeRightNugget.png"); private static ResourceLocation tankish = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeTankish.png"); private static ResourceLocation frizzlefrazzle = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeFrizzleFrazzle.png"); + private static ResourceLocation pheo = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapePheo.png"); public static ResourceLocation getCloakFromPlayer(EntityPlayer player) { @@ -111,6 +112,9 @@ public class RenderAccessoryUtility { if(uuid.equals(Library.FrizzleFrazzle)) { return frizzlefrazzle; } + if(uuid.equals(Library.Barnaby99_x)) { + return pheo; + } if(Library.contributors.contains(uuid)) { return wiki; } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 3b044c1ea..ca2701011 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -5,6 +5,7 @@ import java.util.HashMap; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; +import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.network.CableDiode.TileEntityDiode; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.conductor.*; @@ -199,6 +200,8 @@ public class TileMappings { put(TileEntityProxyEnergy.class, "tileentity_proxy_power"); put(TileEntityProxyCombo.class, "tileentity_proxy_combo"); put(TileEntityProxyConductor.class, "tileentity_proxy_conductor"); + + put(TileEntityRandomOre.class, "tileentity_mother_of_all_ores"); putNetwork(); putBombs(); diff --git a/src/main/java/com/hbm/util/ColorUtil.java b/src/main/java/com/hbm/util/ColorUtil.java index 60779593e..1cfcfe039 100644 --- a/src/main/java/com/hbm/util/ColorUtil.java +++ b/src/main/java/com/hbm/util/ColorUtil.java @@ -63,7 +63,7 @@ public class ColorUtil { int avgG = g / pixels; int avgB = b / pixels; - return (r << 16) | (g << 8) | b; + return (avgR << 16) | (avgG << 8) | avgB; } catch(Exception ex) { return 0xFFFFFF; @@ -122,7 +122,7 @@ public class ColorUtil { if(b / r > 1.5) return true; if(b / g > 1.5) return true;*/ - float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[0]); + float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]); // saturation brightness return hsb[1] > 0.25 && hsb[2] > 0.25; @@ -139,7 +139,7 @@ public class ColorUtil { int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); - int max = Math.max(r, Math.max(g, b)); + int max = Math.max(Math.max(1, r), Math.max(g, b)); r = r * limit / max; g = g * limit / max; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2e0bdc918..c02f5c7e4 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -947,6 +947,7 @@ item.can_empty.name=Leere Dose item.can_key.name=Dosenschlüssel item.can_luna.name=Black Mesa Luna - Dark Cola item.can_mrsugar.name='Dr. Sugar' Softdrink +item.can_mug.name=MUG Root Beer item.can_overcharge.name=Overcharge Delirium XT item.can_redbomb.name='Red Bomb' Energy-Drink item.can_smart.name='Smart' Energy-Drink @@ -3446,6 +3447,7 @@ tile.ore_niter.name=Salpetererz tile.ore_oil.name=Ölvorkommen tile.ore_oil_empty.name=Leeres Ölvorkommen tile.ore_oil_sand.name=Teersand +tile.ore_random.name=%s-Erz tile.ore_rare.name=Seltenerden-Erz tile.ore_reiium.name=Reiit tile.ore_schrabidium.name=Schrabidiumerz diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 78a4494a2..6891f4595 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1157,6 +1157,7 @@ item.can_empty.name=Empty Can item.can_key.name=Winding Key item.can_luna.name=Black Mesa Luna - Dark Cola item.can_mrsugar.name='Dr. Sugar' Soft Drink +item.can_mug.name=MUG Root Beer item.can_overcharge.name=Overcharge Delirium XT item.can_redbomb.name='Red Bomb' Energy Drink item.can_smart.name='Smart' Energy Drink @@ -3819,6 +3820,7 @@ tile.ore_niter.name=Niter Ore tile.ore_oil.name=Oil Deposit tile.ore_oil_empty.name=Empty Oil Deposit tile.ore_oil_sand.name=Tar Sand +tile.ore_random.name=%s Ore tile.ore_rare.name=Rare Earth Ore tile.ore_reiium.name=Reiite tile.ore_schrabidium.name=Schrabidium Ore diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png b/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png index 2553fad8480e107443760fcf1333db0a14afeca2..40dfc4cf09dbb0e0c44da24697e6f712bfee3426 100644 GIT binary patch delta 553 zcmV+^0@nS;0?`DJGk*dINkl_l#?+3l!cQ!T(tgTt5 zr>D8UzvtoMf!*EE+3LL&q)GissWJVz6l2V20wKhhHh--(T5I>fTFc?#Pj@eba7*>} z_V$K31HjD87v|>XXti3DN~ufe>s`H$xv!LROjA>z84Uh%dU^`L%?&gf(oM0j@Rc-8 zv9<*~+c<8`9e_*VC?AP)=<)Fv7Z(@QYRhg4AK>^nCI|x7*ZXfS@`c2*v@{BuwRRL` rYb~3bvm!v>F@<6HpYF-uIS2j+U9tW#5B2}H00000NkvXXu0mjf!etX# delta 284 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 literal 0 HcmV?d00001 From 115cc07af8785f0eab12215e06208a1afba7e64d Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 1 Apr 2022 15:26:13 +0200 Subject: [PATCH 16/31] more world gen configs, classic cable renderer half done --- src/main/java/com/hbm/config/WorldConfig.java | 4 + src/main/java/com/hbm/lib/HbmWorldGen.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 2 +- .../render/block/RenderBlockMultipass.java | 1 + ...{RenderTestCable.java => RenderCable.java} | 6 +- .../hbm/render/block/RenderCableClassic.java | 115 +++++++++++++++++- .../hbm/textures/blocks/red_cable_classic.png | Bin 229 -> 297 bytes 7 files changed, 120 insertions(+), 10 deletions(-) rename src/main/java/com/hbm/render/block/{RenderTestCable.java => RenderCable.java} (94%) diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index 6d5d55fdb..a6c5b2c50 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -47,6 +47,8 @@ public class WorldConfig { public static int endTikiteSpawn = 8; + public static int randomSpawn = 16; + public static int radioStructure = 500; public static int antennaStructure = 250; public static int atomStructure = 500; @@ -124,6 +126,8 @@ public class WorldConfig { endTikiteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.E00_tikiteSpawnrate", "Amount of end trixite per chunk", 8); + randomSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.R00_randomOreSpawnrate", "Amount of random ore per chunk", 16); + final String CATEGORY_DUNGEON = "04_dungeons"; radioStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.00_radioSpawn", "Spawn radio station on every nTH chunk", 500); antennaStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.01_antennaSpawn", "Spawn antenna on every nTH chunk", 250); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index db42ab6e0..691f6c114 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -118,7 +118,7 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 15, 35, ModBlocks.cluster_aluminium); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.copperClusterSpawn, 6, 15, 20, ModBlocks.cluster_copper); - for(int k = 0; k < 16; k++) { + for(int k = 0; k < WorldConfig.randomSpawn; k++) { BlockMotherOfAllOres.shuffleOverride(rand); DungeonToolbox.generateOre(world, rand, i, j, 1, 10, 4, 30, ModBlocks.ore_random); } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index b24f96d5c..ce28cc008 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -678,7 +678,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderBattery()); RenderingRegistry.registerBlockHandler(new RenderAnvil()); RenderingRegistry.registerBlockHandler(new RenderCrystal()); - RenderingRegistry.registerBlockHandler(new RenderTestCable()); + RenderingRegistry.registerBlockHandler(new RenderCable()); RenderingRegistry.registerBlockHandler(new RenderCableClassic()); RenderingRegistry.registerBlockHandler(new RenderTestPipe()); RenderingRegistry.registerBlockHandler(new RenderBlockCT()); diff --git a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java index d408dd0eb..9932ae2a1 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java +++ b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java @@ -67,6 +67,7 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tessellator.draw(); + /** terrible hack to make this shit work */ if(block == ModBlocks.ore_random) { this.currentPass = 1; diff --git a/src/main/java/com/hbm/render/block/RenderTestCable.java b/src/main/java/com/hbm/render/block/RenderCable.java similarity index 94% rename from src/main/java/com/hbm/render/block/RenderTestCable.java rename to src/main/java/com/hbm/render/block/RenderCable.java index ad4f013ec..5b3b823c9 100644 --- a/src/main/java/com/hbm/render/block/RenderTestCable.java +++ b/src/main/java/com/hbm/render/block/RenderCable.java @@ -7,19 +7,15 @@ import com.hbm.lib.Library; import com.hbm.main.ResourceManager; import com.hbm.render.util.ObjUtil; -import api.hbm.energy.IEnergyConnector; -import api.hbm.energy.IEnergyConnectorBlock; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.client.model.obj.WavefrontObject; -import net.minecraftforge.common.util.ForgeDirection; -public class RenderTestCable implements ISimpleBlockRenderingHandler { +public class RenderCable implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { diff --git a/src/main/java/com/hbm/render/block/RenderCableClassic.java b/src/main/java/com/hbm/render/block/RenderCableClassic.java index 1ccfbcd7b..3440824b1 100644 --- a/src/main/java/com/hbm/render/block/RenderCableClassic.java +++ b/src/main/java/com/hbm/render/block/RenderCableClassic.java @@ -41,15 +41,124 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { double px = 0.0625D; double uv_cL = iicon.getMinU(); - double uv_cR = iicon.getMinU() + spanU * 5 / px; - double uv_cT = iicon.getMaxV(); - double uv_cB = iicon.getMaxV() - spanV * 5 / px; + double uv_cR = iicon.getInterpolatedU(5); + double uv_cT = iicon.getMinV(); + double uv_cB = iicon.getInterpolatedV(5); + double uv_sL = iicon.getInterpolatedU(5); + double uv_sR = iicon.getInterpolatedU(10); + double uv_sT = iicon.getMinV(); + double uv_sB = iicon.getInterpolatedV(5); + + double pos_nil = 0D; + double pos_one = 1D; double pos_min = px * 5.5D; double pos_max = px * 10.5D; + + float topColor = 1.0F; + float brightColor = 0.8F; + float darkColor = 0.6F; + float bottomColor = 0.5F; //TODO: all that manual tessellator crap + //this is a lot less tedious than it looks when you draw a 3D cube to take the vertex positions from + if(!pY) { + tessellator.setColorOpaque_F(topColor, topColor, topColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cR, uv_cB); + } else { + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_one, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_one, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_one, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_one, z + pos_max, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_one, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_one, z + pos_max, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_one, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_one, z + pos_min, uv_sR, uv_sT); + } + + if(!nY) { + tessellator.setColorOpaque_F(bottomColor, bottomColor, bottomColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cR, uv_cB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cL, uv_cB); + } else { + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_nil, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_nil, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_nil, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_nil, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_nil, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_nil, z + pos_max, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_nil, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_nil, z + pos_max, uv_sR, uv_sT); + } + + if(!pX) { + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_cR, uv_cB); + } + + if(!nX) { + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cR, uv_cB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cL, uv_cB); + } + + if(!pZ) { + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cR, uv_cB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cL, uv_cB); + } + + if(!nZ) { + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cR, uv_cB); + } + return true; } diff --git a/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png b/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png index 0990a1e90594503c50498196e876f410cd2c6e9e..569be69e972e9b5a0e6be03616be78811e654c48 100644 GIT binary patch delta 253 zcmVGrAU`5 zMdr}}9zb;*Z|A&dlIYm8*qo;(z`MrgrN(jWL!)2!VS4!!QiX zqrCqdIGtd#fwzYpP19T}7=yLT^JZg=gaF&^9nOJ>;GDyIzbY;roX>DPeqju>ZA(fC z?>*L9a?YqOeg%98f!F(|>l@^Zh#(?Ui`J4-S~U0u|A-gfdbJ(=>fPpsJj<`^OJT n!OSqTyP^m==dTtkD}TTZ{i!c0CDoMx00000NkvXXu0mjfUF1zQ From 58c1236ab5a5d732a5661f485655af0e3c634664 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 1 Apr 2022 19:07:06 +0200 Subject: [PATCH 17/31] finished classic cable --- src/main/java/com/hbm/lib/Library.java | 1 + src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 4 +- .../hbm/render/block/RenderCableClassic.java | 260 ++++++++++++++++-- .../render/util/RenderAccessoryUtility.java | 4 + src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/blocks/red_cable_classic.png | Bin 297 -> 231 bytes .../hbm/textures/models/capes/CapeVaer.png | Bin 0 -> 12782 bytes src/main/resources/mcmod.info | 2 +- 10 files changed, 254 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/capes/CapeVaer.png diff --git a/src/main/java/com/hbm/lib/Library.java b/src/main/java/com/hbm/lib/Library.java index 72ad14fd5..6d93c8f8b 100644 --- a/src/main/java/com/hbm/lib/Library.java +++ b/src/main/java/com/hbm/lib/Library.java @@ -75,6 +75,7 @@ public class Library { public static String FrizzleFrazzle = "fc4cc2ee-12e8-4097-b26a-1c6cb1b96531"; public static String the_NCR = "28ae585f-4431-4491-9ce8-3def6126e3c6"; public static String Barnaby99_x = "711aaf78-a862-4b7e-921a-216349716e9a"; + public static String Ma118 = "1121cb7a-8773-491f-8e2b-221290c93d81"; public static Set contributors = Sets.newHashSet(new String[] { "06ab7c03-55ce-43f8-9d3c-2850e3c652de", //mustang_rudolf diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 9235430d4..26cba2c9b 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4186)"; + public static final String VERSION = "1.0.27 BETA (4191)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index ab51cbad6..118a58068 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -242,7 +242,9 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.cable_detector, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_diode, 1), new Object[] { " Q ", "CAC", " Q ", 'Q', NETHERQUARTZ.gem(), 'C', ModBlocks.red_cable, 'A', AL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_detector, 1), new Object[] { "IRI", "CTC", "IRI", 'I', ModItems.plate_polymer, 'R', REDSTONE.dust(), 'C', ModItems.wire_red_copper, 'T', ModItems.coil_tungsten }); - addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.red_cable), 16), new Object[] { " W ", "RRR", " W ", 'W', ModItems.plate_polymer, 'R', ModItems.wire_red_copper }); + addRecipeAuto(new ItemStack(ModBlocks.red_cable, 16), new Object[] { " W ", "RRR", " W ", 'W', ModItems.plate_polymer, 'R', ModItems.wire_red_copper }); + addShapelessAuto(new ItemStack(ModBlocks.red_cable_classic, 1), new Object[] { ModBlocks.red_cable }); + addShapelessAuto(new ItemStack(ModBlocks.red_cable, 1), new Object[] { ModBlocks.red_cable_classic }); addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 4), new Object[] { "CWC", "PWP", " T ", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'P', ModItems.plate_polymer, 'T', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.oil_duct_solid), 16), new Object[] { "SPS", "P P", "SPS", 'S', STEEL.ingot(), 'P', IRON.plate() }); diff --git a/src/main/java/com/hbm/render/block/RenderCableClassic.java b/src/main/java/com/hbm/render/block/RenderCableClassic.java index 3440824b1..00c55223a 100644 --- a/src/main/java/com/hbm/render/block/RenderCableClassic.java +++ b/src/main/java/com/hbm/render/block/RenderCableClassic.java @@ -1,5 +1,7 @@ package com.hbm.render.block; +import org.lwjgl.opengl.GL11; + import com.hbm.blocks.network.BlockCable; import com.hbm.lib.Library; @@ -13,7 +15,139 @@ import net.minecraft.world.IBlockAccess; public class RenderCableClassic implements ISimpleBlockRenderingHandler { @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { } + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + GL11.glScaled(1.25D, 1.25D, 1.25D); + GL11.glTranslated(-0.5, -0.5, -0.5); + IIcon iicon = block.getIcon(0, 0); + + double uv_cL = iicon.getMinU(); + double uv_cR = iicon.getInterpolatedU(5); + double uv_cT = iicon.getMinV(); + double uv_cB = iicon.getInterpolatedV(5); + + double uv_sL = iicon.getInterpolatedU(5); + double uv_sR = iicon.getInterpolatedU(10); + double uv_sT = iicon.getMinV(); + double uv_sB = iicon.getInterpolatedV(5); + + double pos_nil = 0D; + double pos_one = 1D; + double pos_min = 0.34375D; + double pos_max = 0.65625D; + + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_F(1F, 1F, 1F); + tessellator.setNormal(0F, 1F, 0F); + tessellator.addVertexWithUV(pos_max, pos_max, pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_max, uv_cR, uv_cB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_max, pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_max, pos_min, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_max, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_max, pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_one, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_max, pos_nil, uv_sR, uv_sT); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, -1F, 0F); + tessellator.addVertexWithUV(pos_min, pos_min, pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_max, uv_cR, uv_cB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_min, pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_min, pos_max, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_min, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_one, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_nil, uv_sR, uv_sT); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1F, 0F, 0F); + tessellator.addVertexWithUV(pos_max, pos_min, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_one, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_max, pos_max, pos_nil, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_one, pos_max, pos_min, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_one, pos_max, pos_max, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_one, pos_min, pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_one, pos_min, pos_min, uv_cR, uv_cB); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1F, 0F, 0F); + tessellator.addVertexWithUV(pos_min, pos_max, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_max, pos_one, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_max, pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_nil, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_max, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_min, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_max, uv_cR, uv_cB); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 0F, 1F); + tessellator.addVertexWithUV(pos_max, pos_max, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_min, pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_max, pos_max, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_max, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_one, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_one, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_one, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_max, pos_min, pos_one, uv_cR, uv_cB); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 0F, -1F); + tessellator.addVertexWithUV(pos_max, pos_min, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_max, pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_one, pos_min, pos_min, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_min, pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_min, pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(pos_nil, pos_max, pos_min, uv_sR, uv_sT); + tessellator.addVertexWithUV(pos_min, pos_max, pos_nil, uv_cR, uv_cT); + tessellator.addVertexWithUV(pos_max, pos_max, pos_nil, uv_cL, uv_cT); + tessellator.addVertexWithUV(pos_max, pos_min, pos_nil, uv_cL, uv_cB); + tessellator.addVertexWithUV(pos_min, pos_min, pos_nil, uv_cR, uv_cB); + tessellator.draw(); + + GL11.glPopMatrix(); + } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -36,10 +170,6 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { boolean pZ = Library.canConnect(world, x, y, z + 1, Library.NEG_Z); boolean nZ = Library.canConnect(world, x, y, z - 1, Library.POS_Z); - double spanU = iicon.getMaxU() - iicon.getMinU(); - double spanV = iicon.getMaxV() - iicon.getMinV(); - double px = 0.0625D; - double uv_cL = iicon.getMinU(); double uv_cR = iicon.getInterpolatedU(5); double uv_cT = iicon.getMinV(); @@ -52,16 +182,14 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { double pos_nil = 0D; double pos_one = 1D; - double pos_min = px * 5.5D; - double pos_max = px * 10.5D; + double pos_min = 0.34375D; + double pos_max = 0.65625D; float topColor = 1.0F; float brightColor = 0.8F; float darkColor = 0.6F; float bottomColor = 0.5F; - //TODO: all that manual tessellator crap - //this is a lot less tedious than it looks when you draw a 3D cube to take the vertex positions from if(!pY) { tessellator.setColorOpaque_F(topColor, topColor, topColor); @@ -133,22 +261,94 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cL, uv_cT); tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cL, uv_cB); tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_cR, uv_cB); + } else { + tessellator.setColorOpaque_F(topColor, topColor, topColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_max, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_max, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_max, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_min, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(bottomColor, bottomColor, bottomColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_min, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_min, z + pos_max, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_min, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_one, y + pos_max, z + pos_max, uv_sR, uv_sT); } if(!nX) { tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); - tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cL, uv_cT); - tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_cR, uv_cT); - tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cR, uv_cB); - tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cR, uv_cB); + } else { + tessellator.setColorOpaque_F(topColor, topColor, topColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_max, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_max, z + pos_max, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_min, z + pos_min, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_max, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(bottomColor, bottomColor, bottomColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_min, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_min, z + pos_min, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_max, z + pos_max, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_nil, y + pos_min, z + pos_max, uv_sR, uv_sT); } if(!pZ) { tessellator.setColorOpaque_F(brightColor, brightColor, brightColor); - tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cL, uv_cT); - tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cR, uv_cT); - tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cR, uv_cB); - tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_cR, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_cL, uv_cT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_cL, uv_cB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_cR, uv_cB); + } else { + tessellator.setColorOpaque_F(topColor, topColor, topColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_one, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_one, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(bottomColor, bottomColor, bottomColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_one, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_max, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_max, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_one, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_one, uv_sR, uv_sT); } if(!nZ) { @@ -157,6 +357,30 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_cL, uv_cT); tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_cL, uv_cB); tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_cR, uv_cB); + } else { + tessellator.setColorOpaque_F(topColor, topColor, topColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_nil, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_max, z + pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_nil, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(bottomColor, bottomColor, bottomColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_min, y + pos_min, z + pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_nil, uv_sR, uv_sT); + + tessellator.setColorOpaque_F(darkColor, darkColor, darkColor); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_min, uv_sL, uv_sT); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_min, uv_sL, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_min, z + pos_nil, uv_sR, uv_sB); + tessellator.addVertexWithUV(x + pos_max, y + pos_max, z + pos_nil, uv_sR, uv_sT); } return true; @@ -164,7 +388,7 @@ public class RenderCableClassic implements ISimpleBlockRenderingHandler { @Override public boolean shouldRender3DInInventory(int modelId) { - return false; + return true; } @Override diff --git a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java index b0d165e51..9b0278752 100644 --- a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java +++ b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java @@ -42,6 +42,7 @@ public class RenderAccessoryUtility { private static ResourceLocation tankish = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeTankish.png"); private static ResourceLocation frizzlefrazzle = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeFrizzleFrazzle.png"); private static ResourceLocation pheo = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapePheo.png"); + private static ResourceLocation vaer = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeVaer.png"); public static ResourceLocation getCloakFromPlayer(EntityPlayer player) { @@ -115,6 +116,9 @@ public class RenderAccessoryUtility { if(uuid.equals(Library.Barnaby99_x)) { return pheo; } + if(uuid.equals(Library.Ma118)) { + return vaer; + } if(Library.contributors.contains(uuid)) { return wiki; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c02f5c7e4..e61347c6d 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3508,6 +3508,7 @@ tile.reactor_hatch.name=Kraftwerkszugriffsluke tile.reactor_inserter.name=Reaktor-Brennstoffeinlass tile.red_barrel.name=Explosives Fass tile.red_cable.name=Rotes Kupferkabel +tile.red_cable_classic.name=Rotes Kupferkabel (Klassisch) tile.red_connector.name=Stromverbindungsstück tile.red_pylon.name=Strommasten tile.red_pylon_large.name=Hochspannungsmasten diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6891f4595..a36e920ad 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3881,6 +3881,7 @@ tile.reactor_hatch.name=Reactor Access Hatch tile.reactor_inserter.name=Reactor Fuel Inserter tile.red_barrel.name=Explosive Barrel tile.red_cable.name=Red Copper Cable +tile.red_cable_classic.name=Red Copper Cable (Classic) tile.red_connector.name=Electricity Connector tile.red_pylon.name=Electricity Pole tile.red_pylon_large.name=Large Electricity Pylon diff --git a/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png b/src/main/resources/assets/hbm/textures/blocks/red_cable_classic.png index 569be69e972e9b5a0e6be03616be78811e654c48..a1ba54be630c596962ba629e219a054556011db9 100644 GIT binary patch delta 187 zcmV;s07U<(0_OpcG=H8+L_t(IjqQ-J4Z=VSMc?@@aTAFN=oldbAe!t%PsdO<08_95 zO{9xY7Yam(5P=#gud`);J==9%H>Q+$qN>d6IWb1}-U|T7Yoza?uHn2pP*v45;G9E5 zJ_Z6vN(ohH+YR1>nc=-Bgz$5DG8hK9Ty8iAP1BHbCWL^9P&7(m9LMDVRpqqZzkW~( pW`>zP6h+86FQ4$$Z)N3gxC8n-FDvPb!wUca002ovPDHLkV1hocPs0EJ delta 253 zcmVGrAU`5 zMdr}}9zb;*Z|A&dlIYm8*qo;(z`MrgrN(jWL!)2!VS4!!QiX zqrCqdIGtd#fwzYpP19T}7=yLT^JZg=gaF&^9nOJ>;GDyIzbY;roX>DPeqju>ZA(fC z?>*L9a?YqOeg%98f!F(|>l@^Zh#(?Ui`J4-S~U0u|A(qRkT`KG{y=NF^3Yf zqBUy>Vu+!}h?s)}=jXfUu65U4XRUkg|HoQZR>JSi`|iEpy`SgVJK9iRhYKtS27y3a zx)1LggFvjWKp>WT97lmqu61=C{(;5ESVt37*e$#OykT?JfM|d~CGnh0dv@Uc@#haM zeLx`Y#=~EhA0OSQAkd8n-TNA*FKww~$3A}^*lAnUaeZVNsB@AKoX7|uYeQfoM7Pv zfigZ{0I`BVpKr3=1A$%{zXfps548(F-)VTAslV;goAFw##k|tfM*W@Kty_fnDbAqM zhu)k)7j-OJ_GqO~Tfpk?ya*^r=$mKPpRPR7KfwaJEX@CZF7^NS{Z}`1&r3>5hVt3X zX>qS+Z#SjAFL4``RoBx$CVEy@D@t{8n&C=dO4MPkDtC>7?G0F6|NJNs%ey-*CT5ls4zy?2Q(-7qxHMbuZ81iRGhwE+O_O60N!$_{O zuduMHKV-@3jg}Z{2akHWfLPe5S`baOqr1HnEGd};!=^wnM$Pa+j58JQTT+2kwu*em zk98j|HB);TLP?TQpyFvuU71=Qj0%taTp(PR#M*sT*M0>t?-c53fWXA4pO1bgfDDt-3?kPynqxYx;R)JkHt)-enpQ#7)) z*a?D!3lXtp`cWdYYSLhLPN$xVLLK4BCYb$ChO$4EG=q9CpE!DTyW6oNalPnotipAM zIH>_JrZ~eLZ1LJ{p(%17?)CAL+*;6IVhuzH^DPBlhI+h;c=4ID30lzBqrt(LosP%) z(3gqgGF=erV(9QqM|Y-kdX--ozm(~7{+h&&q~SuO@)!jOsP2zCIeLi&aj1{Vh>G|F zhTTE*_D1sc_&=zpE$=c#L7?+tjLRU;k?MiP{vt0fA;pUP={Bp@wVD0IER$DO6)qof zE`#0Bp()FgY)aU53Zm)wez%;0*SLF^Rb_<~6jM!!^qGTAJ9Sxuu5s^r#>{s4r0Qe20qsB4_y&bMxk?pLcK1prA@6_XnG1 z-~hUOR-kX{J}8mUjlK%+=A#0;rkf)*-r0%LcH`_B<(~}vX@s}YS$~$TA%p0^FL-d? z6ME4x(PEQsb@gSz#?N|*qn_kbEe^0X;q)z0|H+{P-MQ_^toeqE|m(Wq5%<1HG1yY=mj$4Q3li8F9RKmo?%AD$&EE zEvG<(&dzxFDEj=6YgeiZ*kYgvB?J3WEblmaM_`+jpKGi4F4YrxE2J8-J;h1i5C4;Y zo@9>!+xnW!((0Ih0!95k*S|9uXsYo)SRA?=qPWShDt+?WjaGVr0|^ey>bfMTL#mNr zE(ETlAhHv1h<$m}@=f5oB|KXa^!lv~UK`+j~V`koUUCM zwJD?N(=N^RotZ}Q^^Gzd(a??Qq)p{8!`&#Ls&%$xNzQ6jBPzF|L>HxE<>7<=gjOI1 zMPDzTJDa~I$+74~2r4(q+1EHWJe3zK_VLqWz`Uoh7OWZmRdARo^d5U-iiU;pc~W&i znWN*g9}7K;ICzy*vVxV1Kv64L?<4MYWM7W6fjQJPtp1;7#^!o9^8q@bWJCW^N3u3I zYx@4xNEN88p8=1Dd$hZ@(OEyNBeQHd|K@PH=;1} zCVP-K)Lx~(Nb|8VqX-*%N9ne=pq)t9A_f#<#C-vCrD1@3le_>_*mhc zVnzB3k~!a}oEdN~?=CEMW}?ini)c5PPp)AuS?Dd1N86m6j{9}>EKrN@OILvMuIKXR zxf-(HfYQs4SoEMXTrWkUbmUbFlBCgWXr;XKD9L9y|L6zl(R9Q0S&@-Se5}~Hj-)CO zOm-VNQt4jOx#8Qv-87%l`B>3b>`hOs#{9^c8kET;qLX8li9DZR2OGKM#Y{V1tR&RD zK*wUY^6=IkZ8-ztNAWe7PR1;?L$?X0MKJ6k<2s9CY{G0_k&@gkM z$45p2dZ*01Xv-XkfM}>YOR+z1LrS@ORZ#OAlrPlvwEUYh5C$AkfR0o`LHNsIev5oA z)7sZWs{Q>4ogPa5zRt8W_rEmrAjp^SpWK)y}aqc_2+3^KE zC2hO-)!NNP%ocvV2T{veFRVeaX4OBSKEJqe7btjCSa;7+v844+IHy>#mdf8@gUs8mqeJltpHNH9L&hh> zyZBlYJ`7Bsj5sDx*UtsIcSCXubSJ2tPvAYQ+-*+5IZrU}%#FYTj{QsdT<22)p^=7! zrfRXG2YN%GJ0Vl|DZ@qSwYx=O!#n17R9Y*2IEZFRBQsk?>(=%0)P07{6~o&iwZq3M znezp9(FLxiE6@+7GhSVb0~JqypHjSnrHcfNdN0?m@`4;L0VvQg_?-v%P8Q>%PBpR? z9$pZIc7%hm?I|u)@|0MZuiM(F-;K>Sf@xv+T=Ey|QXPl+m*rOtDJT74x|dzFVRd|; z)w0twi*u1Z@Zd3YNDw8c={RwHK6~tTC8@jfVDcE_Nxy{EDW=eUqTV6q{C?9WUS&;G zJq~013;Z~8ZN}!T@jOBM1onuv0Gk+f!=t}EeZW~>frJ_eWJvG%UzNp#ivPRH8?a6!K~hIO?Qm~? zTi1;$(dQ?Lzw>XNiIK90i)4e&9JdFX!R&ImF4?2sz-Ml{j^05KR~i9GG)n-Aq(6mc z({R3Dn}@wfDnH*-COx!>bvDd4@Hf%P8Q&%4vK%V?#^xjYg7|fbT`>P0z1zrU+Di$eM&qTs0n%>3*hv7tCCytukwxdmPd`;G|snE z)W-w&a2K?!Km0LWVjr}g9><`^6w`yJP$q*|ONTkzfSiN-9<_6UnSq{IrN@K zyo(Av`7YG_S^Gd_{f9*S>x1nm&hkZvJ2yGrm6R_J^(px-OocD%Wb5D;vsy{31zi`E zkoO5);Gerz@?F9=_SbvpL+o9G4MP@3{`Zdh%7YYaXS9o?Pb^ppX>o51+@gMmwm|rA zLgL|-&(ETlLbmo9p22;%!Rpwn=zU4w2eeKup?&>>`h&9MPvRq-5ywWv9a^{XL8;0P zZ~YdDUF@~{&goRC$i=8UNn6OH`m@3NuSYz~TGnTW`@QP@GHK0~WPj!F+4TYd$)&;xmsf(rNwDfq9NXVI8(SDW-*PW|0oH^yy_Cnn)5p9P@R<;3Sr zU+iGS#Q|B1h4&MfgAH*!rKD}Cx0#1rd-BSOT01VZygV~EO0>Q5V;SqxEgqE#{kv6@ zg?Q$eFj@t!XZ6}}pia%zm3Yv3Yb*#C&=UFNfCi+};vy;m{KR&)C(VN#x|JOJa?6tN zy#S@_rxX>qogbddb(z$8GM^V6l|gLZTiK&~Bf9Hu_~zO8jd;l33l(5%JOnT%B`Iqn z&$ovChfeDJq~4Vf!TbBw9>*PB`QSOWRGFK;yvx>Vl5HkK4_@U`9LlqA9u2G`r+L4{ z3wTV{1ca80LnVN%=;>*)W`w7socV+MRqhUW-Rteohn2eQnkyr4EDkpQ637;KHHNky=I@ezC7$< z91W`%$RuCEQHZ!pad%tC19u!LL8IP5d;84r%ZEOB_z+|YHNd|Z*u9T8#c5~}$_C&> z-wTgSngY#Y&Onz;?FoT*$9mkp?t#J2xZRPMn?4nMH@~>ECJGf3e<$kFdW#lyn2ACJf^y){NaXY*+h>L^b(`wpH%Q zl#jVwV(3zN*S;p`5nP47INaq^WZX-WNVzlAQhxc@W)Dq-QY`qcF+{^^>Pe}nF!7M} z*fF1GuC0}Z*9w2r4}9qZ?b@+epN?8j1E@Myy}!Eobk7}!p24v0yD~uWKmYO6DNvEv z?O%uJD>cF9x^o<-*omU-jn;?Vf|TWr6bj zBGD5qFPN^mE#Ho+eGft~ytmv1?r$nXGp#G0XKw00Dl3z#9}O8Cl|5({V@k}`kaL&o z$)d;i>lhIXgM&R<(6>hgn=$C?KtjE247k{TA0C1XCvIV_Y+Nv~+G}O3MFGzy*fYHJT}~fRrY<3e@hGgdlCU||F%FFqnzALJ}ly&KY-3c+(3T2k?5DC zjZA0uDjQ}0AF~}kD9DHi+xn?wr`Q4Q2SShgZLd~37~E}%f1#GU`Sv4x%sV#?E~m2f zb;PKEj3qp{X3)}v#*CKLl@X<+EcB7r8&zXav6V+z%<*3@T}%fwnTMa> zx6 z_l`66qyNpma#2IKBR&{tWuaK|$byv|NBYOI@J*kr9vOYRnjw+nh)rrG9{u;V#yyqk zsThyR(W+%Xk1azXL3TBW>oG|p4r?T)fjn98Tsi=EsOw1RW*(WCJwNd#fG<+Yoy40( zP|U(O?HIM_o3v#41o_0Ig~u8`i7|ZHPcs>ig*}sb`o*@^`X%A^YI*c&YF%!+|KLY> z8f&&%QI!9Vl%azA=u3L{Uk(VuoKr0uA{(G;cw6b#oz5emSAVYMpZT7zTL!B$hqYFl~z91--fD1e$^%%aZ*d+gf+cu_v2e?8HKYs_mQfi$3CSCa41Lk|# z$^t%7mO9z9!;N9Ow{#wt0DK1LbF_S!#1C2-=S7VRK2SQJOf4RTp zmuU3kLRd-Dn900JgNchN^t$w=W{+!@$!W`ESI?*t)K|cCr)2V3pV)_NZ;i;RpkIi? zMX?PibXt?u@}=SXZ5Yunp44C9r3i#kDNqN>0ZrtY(2C4w3hx{dFc-!lFI?b;!Q{QRB!70;M= zlw0o2sbS|mWUYsFWq0VeTW!eV%n4MRomW-MY*)%mllg6&Pk_UGuga0BIa=*p8qTUx zf-99rY5R%L!OooL=yI>tSbu3Rn;?)^BEIWg2Ka8V4z0SwE;&_cfZG<^Y=TL$kmYPj z+ok5W`x}-yd5WZ=p4gpL8PcxX&Wa6~=3*>&$a(Y^+k3`NeDk>=p{^xd1;N3Hd53sQf3qY^f3!YJzF|q$K%se$ZOH67 zgj`aYEWXpD*HCLgSu}JgP{ijwhE1Qj>n5tVd2j7u}rFogG`XVL)oCp`GWc8^Mg-XUyY{5R1HrD&HFlIq4v^VkiKs%EqDBr2&& zK^hz^Qtex!uDbET?RNq`A=lNO%G-_U+n5R4j_5+(CD^qn_^dsv{P@gaWz5X^**5-e zf7|oz`h(h_OAlv)yKfv4YFEc<(SX0Ip~B`>Dy$}+{3gcM|8&qkrm`mQ&gT2Y?9S)I za=AoPBR=4KCp85)paUkoF*;q}ao&GZaoykpmp&V-tXrIKLd|1Aui+5Lc#6&LRV=-C^rGHUUjBWI~*-;He zV!iotRH*scK(Dg{PldD1`IJ1gYI)a#-s~xFj8E}x(cj`^x5@Ccw_4-t2YFaP55IoT z2l-P7ZJXmJcs?W!1JBSO>^%w|qx2P}iy#*B_s3TE$eV*B(aveEGNcMWo#y-!Uwk)G zMusB-iZ;U$MU+XFUu@xk2(Xnt^eIJQ4t0;dB7zv|lr$Oje(r-ZKxi1|M%=Gac=pdo za28GE*xU}C`NUr`?gHKP@SnC&d zT2;`>69H4V0W8HfEaVq&>Me)2oW&nAVEv)thbTqUn7!drymGgof~PxzeRAtMW z0qS=GLkDfc_5%(I!;N?vZ^_jS+087qQ%RUFu>tFlR8@}@%u%!#IYUPbhn9z148RAh zv*$}_HDx+tjoqq&Kb+}ECSMV8e}VagYB+xKP3?)WEw6PVb}R*Vv!%upIBUk8%TN#> zyE^h~CLF0?;({n9_8|j)U)dL#%uji_3^lKMH);~bNW~K^)U6WLvB&zWRUriU>2|-c z{jyEfNj62t0*C~{4lyRG)A|6=v=~_KWz5q%{u?d=9AW<`Vegx?44x2n;R-(Da>&OM zd|9rO0?h3^T*cFu0vVF!kvZ+iZjR8MgAj5*Tj@O4IrK`t$a^A-c3!k^ zPj+1CrOlq56GaNXoL?MMeZ=&-0*@NXK zPLIv@L}H$+NhOhnG`ICuj)1bfpQFU9m5#f*dKN5_fjm9-`|`)25|_QH8nMvllrs$B zpn`fgv%4G#;1Kw+Y%WRkeR$Qmkh zRIB4cjZ9{}(}SPZ-(C0~+?*~kAF|qb%(DP)`z1})#_ziAjDBOGUle!H8}+`8vbb`B zZy9MUFDt)9DmDNK0rG0G923r(0sAFUuz6fF6;NRvqI{P~e)Pg|u{r=`g9>e5O%Lw^ z*cY-pD-@PUcsko9V7p>|*ZE*p=e5!6Tg2NH%N}Dj!-tCQQV@VUwx}aos_#-!`s+c# zjD=jYTw7J4=d;NQVZ>`AXV|15JBv8~DB&sntzOG!yQ3^6^c!tUn>$QVDxgB^B}!52 z)K=f$x|XBKu9&9goppc;Fo`rUiA#x#-Mo|WIC*T^;s8|wh|{1*9N8S?=eg1+o;FV$ zSU6#ab8_wdQG)rAKP9fDrf*UlwY8K?_*wM|K8U6GGqi;Py&z;`8SgoY){6Rel!*7Q z>Jp)pm5uGzLxdEo2OsR6m_ClPII#Bht&zV#L#paUjFfx zYmM8U#Lmc0jz~4+MkbdyY4jw7eCZFX6Clk7-ToZ+U=k3tGQKZW{&rYp?i6N;lm5y4 zq@W*$I)joxO*wr7O977PMG1GI`{L7^)|tE~}&0b=^@EvKdN{!EejzDa{pKm*Jc z{y5g~;Ko6e*l5{e=qf6#C9?ngk}Jv5gphKRC~J?k>ergW>Y6q{drfl;Y0`^`V?f5< zlLEKWbfFC-qjF8+|X$YQ82eFCXiP@L=c zDkaVA^x{17R{-P)rA{j8*wG6niJBoO&2R8afUzuqW|*mb!HYzxq^X`aNEHACozGc> zwOA{A&#cqQ^lV`_vm*aYsqyMsri-9O|9;MS<#+3(h19_ic6BJHJhY(R0Q$2u)EVHR z_lz!I18M6I{Gu7<>Wg4bshB_3Eg=Hf!cEn8QRi8~C$)>y^KB?DA*NSHiT9Wiq8?}u z1=T9jFUdiyDtsFa_-jROpb_j`UjnGSW{I}|zCtg^pmg(gJGWO!NF8ld0>C+F=^&ww zHE;2Y{(zxD{XYZe&Jl;wH>H)1%D&f~ZmpV|mmCU*lWMB0I>h03Z1{F?-;Hp_JP;OX z4j@1BMFB_=K2j>rp{w*xMiW};rN-#An<;mQhCUeK%^r&(()gc|6q4Wof){B!wO4zw z=_oE%NMULG@M*(@1O<@n{;H0->mw{|fc!gC-n%W$H=({gNPKxVuk7U|GgR)#TF#@f zAH@_9RQ0i4%}ct4hU^LI#6WT*tRwH8lM$&82rs?|f7tJ_-@+kWhra)|6;kHQ;sfK# z6x7L~tC3=Rn(7QJz&r1_4M@?g&o-w8w#Rp}-^B$+>ogjOhkrN2%4;Fz^e~6Z_FN3m*We_J#FnPQ$w$gN&jc1P@;$^&-k;mo zHn`!om*u}EwGAwDIp#aZE7+i7$e+uKIiz9wR?Mvb*zP@xdZSD9Z|V7`uWt9H^*>sf zRHpe-X#0#-p~w{QG7(={OO=j3nP_5yHJ)il@xKCNmV>9(X0Y&B!Mk3-As?PP&h-lY zQ}P4Q*05+Rv|0Z~8t}A?)QUu3?Mm6f2M|s^N7v2FFrrU;%=YK|?W6{ z2fD2=?H+FJ zN~zlS--%vYgYqr~ZcloCOE-@?v6@|zpV)!@V&mkY?DvAd(SmBfp)7EeY@TV5X%yeX zT)1c-E&=T6rqaaP>myn+;nJsXuJ|qv^~G0UK=f?}XPiFKoV*Z5cZ@9(x$k}C!%E^ew`l zFS5Ah+8|n?85|wZ*A!_c^HZrF(nuCM4V}AG+2~LZ{EAQHoyt zRJvrrxBm>P{Z`d?&}M6LzHeFS40g^9C@q`w1n2mCIF>!w>+i!bK!7L?lUNOSEV6*& z;!E!MGO{w4Ru)Scq@~$*LFiZG#k|tPwlg;&kJb?mCRRzDyL2*TE>G{vU;zGPdc266 zSM1rzBJk`+jO-ead|vHoHJvGS<(dfiVz*3Wfg{J-99oCmw4$o#5aHLihC=AWpO2p| zFc~Z)=INe3$RFxomvh^MQ%4^(X%#i2eYkRzxq~;|1nTJn838d`JF2&pw=>3<&ikfaQo#mHUxCw%jwyGK< zu#hNj1?Snv0*mFuLXB)~Vs!{ZB~^Q{&}tBe$%p24+tQ5uibhWAY-5Htg3?3hFN8s_ z1O2E`w0^gzQosUnr|YV^74$FwF}T# z*u|{C0XYBzUcC$WDIw`Ii{Svi1|7V!;L~}d5YXOURYA5FrG=iip4*qINL*M@DCM0y z(g75uf2|e3&(J;JCLB^O)*^6sGW$pVpTWwIAZ2=Khx^a<9tOT%!o2VsR3C!Fxe>Pk z-fz0*CKmjJ-`JRmta*@rw$y$v5Oa#TWHISCfQABN5Z|hN0N5z=@B9lehjQEgz*e7? z1+-+4;1B*G(SK@oR3$E!aIRssDZQY(^P1_Sul;DK2cU27N(0;fyMf_+g|3qXE#_5r z6xNTEWqz2a2X)7TQB6hP*MOi7tqt{KF*Iqg3)#*07%Oc_3!6F~Ryk2RSRmP7XuEl( zU-14Rs^0{baYp4>;uZ&}B%ld^0OvYkVg4qfgkP(9lAF1-dRh^X_!4@Gq(I!&3s*bZ zJIhb&-)$j2bKJp4X8XPR)D}-SXEy<`V<0Ol=+*a4496?5)jFW~Yy=B9gw?M#b#bmkdtwSTyw4BS|7u%fRbfasTa-z)yw^n|z6+l_^> zk@%??zf-?>fTrnB@9Cu>mLmn8d%Md^5k0mwuLW zhWl5Kk%}&E9!(pIFX`TIZC(yQi8vjeM_98ilsg}7qP8#&jS4{%_cXHaxCR;IOA{6B3Yh~Zh8ESC0M|J;)>egWW zE{55at~%0PxBZlon&hN)lxGV8RK^4?%_A92BQXZ*)b3f;%~7AjQn#P@+;@5TgCe=S zUVZcP;mpNhyT$IfxWmqx;iM6N>#=a!-L(PpJ!B1asHA!PtU@RB2EW;WKye144G0g$ zp<>P2SN{8x$7(pc|0+PT-`N_KQ-}J}1l2~{lcb$(xYbp97VWPs(sOO_JHM@~{=h0c z@aA6$o9Oo^6rp*mHozS|afHt{lW-m50aSVX#x7;7-=!Srpzjz>%DayaEpxIC;l1iy zzp&M7nH1Z*nCR9lOan=@Dm_PMXKiNeT(em0IR_qq2h7=dN2(t7n7;s2eq^~8QAEyn zgWS5s1u(XR2hr?@sj~WNSME2TxcV}$+g@WN*&mBiLG)O~rS~zi#;m~j5X9}I70zw0 zXv=@FnTN*hU$0EJraz>R$)5EzHOyc}qpiI{C81lnr^0=F>F_q5!rW)gK-)QJ$CcN$ ziBf2M@rN)`^ffG^@)8_;*P{VM8O@H8u`F)bO%JWEPgR6o#hB(#6>atJf6yub+W7lY z&gdQFpdH+%+X&d}-LMPLtiO|9dq4i$I92+vd}qwhtGAAe7McVdqdj+f;qzzd5r6STQ(s zQagPk#9UK$WBxjl#fm|?A5Z{_OaDx-KR(?S@eFAi-admUkW#qoe#B%+1CFe}%l zxeA&O8;B2GZL4Rt7(0xbN6h{5_OloHgH6TU26Dk=*hd3aqs?p8n*RQ#IRi{{A zuU!eRCyg9v$CjQpQ0}suF(A{j5oA9CVKsPjb1;-oO#Jod6NjmpDHvG@YQ@-w(0Ar4 z6r?-sW(-%1D>7>~NUA~_&;z^k`Gp}@`y322bEz&VZD z#M0N3kMNWqOAly`UB7wZnPE(Y%Cm=nONYK_9=pe$kF}~8I-K-F3RjbB?bH#c+R9g_ zsWE_zfdndUy=cJCKrx^9VdiUn^g~vZH1QrbY^2U(MATlptxDc&gb4jZEV6Q*vkA-( zyAmMTi(=C-2pepafeo>nTidG!(kqqh%eDl+uK0vRNLh2UjDj{c$=`+irYgxquf=d1DRy8zq1_mocwr2Pz_E{loM z2!mq=`&(AZ`+q-;-LZ59Th+4guUwqMb`i9b$^d1~Q}|AATHuOC(9%9*jIp`X$uB(> zs!)l&fS>_^wj}+4`<0)Nd?`SnNC`XZ9#G!5f{Jct*XDMYADwHYch)N3RXQ=7^E5}# zUyGNu2*2mgn5(6e@RxL|A(sWCau!y@*|dRLJ7xA4Bmp};R1TFMd>r8CgsM;dcGJAD zlm6@jQ$l4tut$|BC)2h3V+&@LoF=N&kAsub-u41+%LMa-`2C+oemxvrk$>?UHu)}? zc734kdim?WnPGb!o>dfCJhffg!^6KK?1~o`x6&`F+P^&npjP#xEeY{2mcZfTuN~XB zF?Qv^04O9esob$6X~$?>p}@-7gH#c_QyZf<`J(mjZ-wRc9_m`E=Zn;5Sr5YMf&N!9 zAV+RvRIxBzd;C-ftgQ8Lc=*)AmUsMn9FZrte)1k(jmr_51}tr0BeeUK-M{fK*TC2o z4QNZ84W6XyjC4E*Sh(^C=#SNxR(h#3I^%(O*Rw4tV0r%)nE0dq@-u$;XM4vP^EqWv zZi_4O9%MDmcWZd7al~t65Ey%~8~#LOIlS?Dt4A9w%SPXRcvkMTxp-;>Ss=Oc$g8Fg zml^;ddGmnxMB1Cv3I52-Akg+EFm?6AZ{3OV2lE9}ekJ=p8zDP9W3bjhOi1n7KgvpS zS&xTH72Fn04*`N<={p%v98d@b!A^`V>c0M|0Zlm?D`*J}gf4GB%b-Eke*0g=*u3{=4O?GrTRIAa$`#p- zd^SKbdairrWd$&kO{zJ6qWvT=@|u=y^Kvp$!F{NBOsCM}M0h4j83W9^6+SXHGfM)1 zY=_;IbmiqA&HKB9^{`}Cg*<%-Wad5~pZ(9z|5)I^X#sH0(g6#h>}|gK=*5`BXLKLv K-!IgB68;}5o^X}` literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index be645a79a..fe91e7960 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "hbm", "name": "Hbm's Nuclear Tech", "description": "A mod that adds weapons, nuclear themed stuff and machines", - "version":"1.0.27_X4186", + "version":"1.0.27_X4191", "mcversion": "1.7.10", "url": "", "updateUrl": "", From 6280d92a83c981a4f32d6ef6e8c940f33a0a954d Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 1 Apr 2022 19:10:44 +0200 Subject: [PATCH 18/31] oh the log spam --- src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java index 830aef77b..115e7f9cd 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -289,7 +289,7 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP for(Object b : Block.blockRegistry.getKeys()) { Block block = Block.getBlockFromName((String) b); - if(block != null) + if(block != null && Item.getItemFromBlock(block) != null) uniqueItems.add(new ComparableStack(block)); } From 80667f5eede7aec39dd1b80f55147af6acc06551 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 1 Apr 2022 22:23:53 +0200 Subject: [PATCH 19/31] minecraft doesn't crash for 10 seconds challenge (100% impossible) --- .../java/com/hbm/blocks/generic/BlockMotherOfAllOres.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java index 115e7f9cd..0efa14a13 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -246,8 +246,11 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - int key = itemMap.inverse().get(getCompStack()); - nbt.setInteger("item", key); + + try { + Integer key = itemMap.inverse().get(getCompStack()); + nbt.setInteger("item", key != null ? key : 0); + } catch(Exception ex) { } } @Override From e69f403f156a7cc5280c509fa4702cbdeb70de02 Mon Sep 17 00:00:00 2001 From: Vaern Date: Sun, 3 Apr 2022 08:42:54 -0700 Subject: [PATCH 20/31] radiolysis buff --- .../tileentity/machine/TileEntityMachineRadiolysis.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index 4bcbed6c4..02a497dc7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -33,7 +33,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyGenerator, IFluidAcceptor, IFluidSource, IFluidContainer { - //TODO: Render file + resource locations + itemrenderlibrary + clientproxy, gui texture, further recipes public long power; public static final int maxPower = 1000000; @@ -127,8 +126,10 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement tanks[0].setType(10, 11, slots); setupTanks(); - if(heat > 0) { - if(heat >= 100 && worldObj.getTotalWorldTime() % 30 == 0) + if(heat > 100) { + int crackTime = (int) Math.min(-0.1 * (heat - 100) + 30, 5); + + if(worldObj.getTotalWorldTime() % crackTime == 0) crack(); if(heat >= 200 && worldObj.getTotalWorldTime() % 100 == 0) From 086e17d1a9e781c4ebc62a4d8ef8d3b526b32836 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 3 Apr 2022 19:56:34 +0200 Subject: [PATCH 21/31] bunch of fixes, some configs --- .../blocks/generic/BlockMotherOfAllOres.java | 33 ++++++++++-------- .../hbm/blocks/network/BlockFluidDuct.java | 23 +++++++++++- .../blocks/network/BlockFluidDuctSolid.java | 23 +++++++++++- src/main/java/com/hbm/config/WorldConfig.java | 6 ++-- .../hbm/handler/guncfg/Gun12GaugeFactory.java | 2 +- .../hbm/hazard/type/HazardTypeBlinding.java | 2 +- .../hbm/hazard/type/HazardTypeRadiation.java | 3 ++ .../java/com/hbm/inventory/FluidTank.java | 12 ++++--- .../com/hbm/inventory/OreDictManager.java | 10 +++--- .../java/com/hbm/inventory/fluid/Fluids.java | 12 +++---- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/ModEventHandler.java | 21 +++++++---- .../com/hbm/particle/ParticleAmatFlash.java | 6 ++-- .../TileEntityMachineCatalyticCracker.java | 14 ++++---- .../machine/pile/TileEntityPileFuel.java | 5 ++- .../network/TileEntityConnector.java | 31 +++++----------- src/main/resources/assets/hbm/lang/de_DE.lang | 3 ++ src/main/resources/assets/hbm/lang/en_US.lang | 3 ++ .../hbm/textures/gui/fluids/crackoil.png | Bin 0 -> 437 bytes .../hbm/textures/models/machines/chemfac.png | Bin 8301 -> 9823 bytes .../textures/models/network/pipe_anchor.png | Bin 0 -> 409 bytes .../models/tank_label/tank_CRACKOIL.png | Bin 0 -> 2370 bytes src/main/resources/mcmod.info | 2 +- 23 files changed, 138 insertions(+), 75 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/crackoil.png create mode 100644 src/main/resources/assets/hbm/textures/models/network/pipe_anchor.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_CRACKOIL.png diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java index 0efa14a13..79227996b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java +++ b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java @@ -9,6 +9,7 @@ import java.util.Random; import com.google.common.collect.HashBiMap; import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ModBlocks; +import com.hbm.config.WorldConfig; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; @@ -290,21 +291,25 @@ public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiP public static void init() { - for(Object b : Block.blockRegistry.getKeys()) { - Block block = Block.getBlockFromName((String) b); - if(block != null && Item.getItemFromBlock(block) != null) - uniqueItems.add(new ComparableStack(block)); - } - - for(Object i : Item.itemRegistry.getKeys()) { - Item item = (Item) Item.itemRegistry.getObject((String) i); - uniqueItems.add(new ComparableStack(item)); - } - - for(String i : OreDictionary.getOreNames()) { - for(ItemStack stack : OreDictionary.getOres(i)) { - uniqueItems.add(new ComparableStack(stack)); + if(WorldConfig.enableRandom) { + for(Object b : Block.blockRegistry.getKeys()) { + Block block = Block.getBlockFromName((String) b); + if(block != null && Item.getItemFromBlock(block) != null) + uniqueItems.add(new ComparableStack(block)); } + + for(Object i : Item.itemRegistry.getKeys()) { + Item item = (Item) Item.itemRegistry.getObject((String) i); + uniqueItems.add(new ComparableStack(item)); + } + + for(String i : OreDictionary.getOreNames()) { + for(ItemStack stack : OreDictionary.getOres(i)) { + uniqueItems.add(new ComparableStack(stack)); + } + } + } else { + uniqueItems.add(new ComparableStack(ModItems.nothing)); } int i = 0; diff --git a/src/main/java/com/hbm/blocks/network/BlockFluidDuct.java b/src/main/java/com/hbm/blocks/network/BlockFluidDuct.java index 37eee94f2..b14fa899e 100644 --- a/src/main/java/com/hbm/blocks/network/BlockFluidDuct.java +++ b/src/main/java/com/hbm/blocks/network/BlockFluidDuct.java @@ -1,6 +1,12 @@ package com.hbm.blocks.network; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.conductor.TileEntityFluidDuct; +import com.hbm.tileentity.conductor.TileEntityFluidDuctSimple; +import com.hbm.util.I18nUtil; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -8,8 +14,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class BlockFluidDuct extends BlockContainer { +public class BlockFluidDuct extends BlockContainer implements ILookOverlay { public BlockFluidDuct(Material p_i45386_1_) { super(p_i45386_1_); @@ -79,4 +86,18 @@ public class BlockFluidDuct extends BlockContainer { return false; } + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityFluidDuctSimple)) + return; + + TileEntityFluidDuctSimple duct = (TileEntityFluidDuctSimple) te; + + List text = new ArrayList(); + text.add("&[" + duct.getType().getColor() + "&]" +I18nUtil.resolveKey(duct.getType().getUnlocalizedName())); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockFluidDuctSolid.java b/src/main/java/com/hbm/blocks/network/BlockFluidDuctSolid.java index 21c75992e..08031fe84 100644 --- a/src/main/java/com/hbm/blocks/network/BlockFluidDuctSolid.java +++ b/src/main/java/com/hbm/blocks/network/BlockFluidDuctSolid.java @@ -1,8 +1,13 @@ package com.hbm.blocks.network; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ILookOverlay; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.conductor.TileEntityFluidDuctSimple; +import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -13,8 +18,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class BlockFluidDuctSolid extends BlockContainer implements IBlockMultiPass { +public class BlockFluidDuctSolid extends BlockContainer implements IBlockMultiPass, ILookOverlay { public BlockFluidDuctSolid(Material mat) { super(mat); @@ -64,4 +70,19 @@ public class BlockFluidDuctSolid extends BlockContainer implements IBlockMultiPa return 0xffffff; } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityFluidDuctSimple)) + return; + + TileEntityFluidDuctSimple duct = (TileEntityFluidDuctSimple) te; + + List text = new ArrayList(); + text.add("&[" + duct.getType().getColor() + "&]" +I18nUtil.resolveKey(duct.getType().getUnlocalizedName())); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } } diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index a6c5b2c50..34e6d18a1 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -47,7 +47,8 @@ public class WorldConfig { public static int endTikiteSpawn = 8; - public static int randomSpawn = 16; + public static boolean enableRandom = false; + public static int randomSpawn = 0; public static int radioStructure = 500; public static int antennaStructure = 250; @@ -126,7 +127,8 @@ public class WorldConfig { endTikiteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.E00_tikiteSpawnrate", "Amount of end trixite per chunk", 8); - randomSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.R00_randomOreSpawnrate", "Amount of random ore per chunk", 16); + enableRandom = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.R00_enableRandomOre", "Amount of random ore per chunk", false); + randomSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.R01_randomOreSpawnrate", "Amount of random ore per chunk", 0); final String CATEGORY_DUNGEON = "04_dungeons"; radioStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.00_radioSpawn", "Spawn radio station on every nTH chunk", 500); diff --git a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java index adb850968..1ab0b2d26 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java @@ -41,7 +41,7 @@ public class Gun12GaugeFactory { config.name = "Franchi SPAS-12"; config.manufacturer = "Black Mesa Armory"; - config.comment.add("\"Here, I have a more suitable gun for you. You'll need it Catch!\""); + config.comment.add("\"Here, I have a more suitable gun for you. You'll need it - Catch!\""); config.comment.add("Alt-fire with Mouse 2 (Right-click) to fire 2 shells at once"); config.config = new ArrayList(); diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java b/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java index 6a5f207db..126fb1eba 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java @@ -21,7 +21,7 @@ public class HazardTypeBlinding extends HazardTypeBase { public void onUpdate(EntityLivingBase target, float level, ItemStack stack) { if(!ArmorRegistry.hasProtection(target, 3, HazardClass.LIGHT)) { - target.addPotionEffect(new PotionEffect(Potion.blindness.id, (int)level, 0)); + target.addPotionEffect(new PotionEffect(Potion.blindness.id, (int)Math.ceil(level), 0)); } } diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java b/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java index 622e6af7d..0a7c90389 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java @@ -55,6 +55,9 @@ public class HazardTypeRadiation extends HazardTypeBase { level = HazardModifier.evalAllModifiers(stack, player, level, modifiers); + if(level < 1e-5) + return; + list.add(EnumChatFormatting.GREEN + "[" + I18nUtil.resolveKey("trait.radioactive") + "]"); String rad = "" + (Math.floor(level* 1000) / 1000); list.add(EnumChatFormatting.YELLOW + (rad + "RAD/s")); diff --git a/src/main/java/com/hbm/inventory/FluidTank.java b/src/main/java/com/hbm/inventory/FluidTank.java index bb81f70c3..497d122b5 100644 --- a/src/main/java/com/hbm/inventory/FluidTank.java +++ b/src/main/java/com/hbm/inventory/FluidTank.java @@ -126,16 +126,19 @@ public class FluidTank { } if(slots[in] != null && inType.getName().equals(type.getName()) && fluid + FluidContainerRegistry.getFluidContent(slots[in], type) <= maxFluid) { + + ItemStack emptyContainer = FluidContainerRegistry.getEmptyContainer(slots[in]); + if(slots[out] == null) { fluid += FluidContainerRegistry.getFluidContent(slots[in], type); - slots[out] = FluidContainerRegistry.getEmptyContainer(slots[in]); + slots[out] = emptyContainer; slots[in].stackSize--; if(slots[in].stackSize <= 0) slots[in] = null; - } else if(slots[out] != null && (FluidContainerRegistry.getEmptyContainer(slots[in]) == null || slots[out].getItem() == FluidContainerRegistry.getEmptyContainer(slots[in]).getItem()) && slots[out].stackSize < slots[out].getMaxStackSize()) { + } else if(slots[out] != null && (emptyContainer == null || (slots[out].getItem() == emptyContainer.getItem() && slots[out].getItemDamage() == emptyContainer.getItemDamage() && slots[out].stackSize < slots[out].getMaxStackSize()))) { fluid += FluidContainerRegistry.getFluidContent(slots[in], type); - if(FluidContainerRegistry.getEmptyContainer(slots[in]) != null) + if(emptyContainer != null) slots[out].stackSize++; slots[in].stackSize--; @@ -213,13 +216,14 @@ public class FluidTank { return; if(slots[in] != null && fluid - FluidContainerRegistry.getFluidContent(full, type) >= 0) { + ItemStack fullContainer = FluidContainerRegistry.getFullContainer(slots[in], type); if(slots[out] == null) { fluid -= FluidContainerRegistry.getFluidContent(full, type); slots[out] = full.copy(); slots[in].stackSize--; if(slots[in].stackSize <= 0) slots[in] = null; - } else if(slots[out] != null && slots[out].getItem() == FluidContainerRegistry.getFullContainer(slots[in], type).getItem() && slots[out].stackSize < slots[out].getMaxStackSize()) { + } else if(slots[out] != null && slots[out].getItem() == fullContainer.getItem() && slots[out].getItemDamage() == fullContainer.getItemDamage() && slots[out].stackSize < slots[out].getMaxStackSize()) { fluid -= FluidContainerRegistry.getFluidContent(full, type); slots[in].stackSize--; if(slots[in].stackSize <= 0) diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 7a133f322..2a5eb7b1f 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -305,11 +305,11 @@ public class OreDictManager { AC227 .rad(HazardRegistry.ac227) .nugget(nugget_actinium) .billet(billet_actinium) .ingot(ingot_actinium) .dust(powder_actinium) .block(block_actinium) .dustSmall(powder_actinium_tiny); CO60 .rad(HazardRegistry.co60) .hot(1) .nugget(nugget_co60) .billet(billet_co60) .ingot(ingot_co60) .dust(powder_co60); AU198 .rad(HazardRegistry.au198) .hot(5) .nugget(nugget_au198) .billet(billet_au198) .ingot(ingot_au198) .dust(powder_au198); - PB209 .rad(HazardRegistry.pb209) .blinding(3F) .hot(7) .nugget(nugget_pb209) .billet(billet_pb209) .ingot(ingot_pb209); - SA326 .rad(HazardRegistry.sa326) .blinding(3F) .nugget(nugget_schrabidium) .billet(billet_schrabidium) .ingot(ingot_schrabidium) .dust(powder_schrabidium) .plate(plate_schrabidium) .block(block_schrabidium) .ore(ore_schrabidium, ore_gneiss_schrabidium, ore_nether_schrabidium) .oreNether(ore_nether_schrabidium); - SA327 .rad(HazardRegistry.sa327) .blinding(3F) .nugget(nugget_solinium) .billet(billet_solinium) .ingot(ingot_solinium) .block(block_solinium); - SBD .rad(HazardRegistry.sb) .blinding(1F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate); - SRN .rad(HazardRegistry.sr) .blinding(1F) .ingot(ingot_schraranium) .block(block_schraranium); + PB209 .rad(HazardRegistry.pb209) .blinding(50F) .hot(7) .nugget(nugget_pb209) .billet(billet_pb209) .ingot(ingot_pb209); + SA326 .rad(HazardRegistry.sa326) .blinding(50F) .nugget(nugget_schrabidium) .billet(billet_schrabidium) .ingot(ingot_schrabidium) .dust(powder_schrabidium) .plate(plate_schrabidium) .block(block_schrabidium) .ore(ore_schrabidium, ore_gneiss_schrabidium, ore_nether_schrabidium) .oreNether(ore_nether_schrabidium); + SA327 .rad(HazardRegistry.sa327) .blinding(50F) .nugget(nugget_solinium) .billet(billet_solinium) .ingot(ingot_solinium) .block(block_solinium); + SBD .rad(HazardRegistry.sb) .blinding(50F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate); + SRN .rad(HazardRegistry.sr) .blinding(50F) .ingot(ingot_schraranium) .block(block_schraranium); GH336 .rad(HazardRegistry.gh336) .nugget(nugget_gh336) .billet(billet_gh336) .ingot(ingot_gh336); /* diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index b95348530..abc94ef59 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -114,15 +114,15 @@ public class Fluids { ULTRAHOTSTEAM = new FluidType( "ULTRAHOTSTEAM", 0xE39393, 4, 0, 0, EnumSymbol.NONE).setTemp(600); COOLANT = new FluidType( "COOLANT", 0xd8fcff, 1, 0, 0, EnumSymbol.NONE); LAVA = new FluidType( "LAVA", 0xFF3300, 4, 0, 0, EnumSymbol.NOWATER).setTemp(1200); - DEUTERIUM = new FluidTypeCombustible( "DEUTERIUM", 0x0000FF, 3, 4, 0, EnumSymbol.NONE); - TRITIUM = new FluidTypeCombustible( "TRITIUM", 0x000099, 3, 4, 0, EnumSymbol.RADIATION); + DEUTERIUM = new FluidTypeCombustible( "DEUTERIUM", 0x0000FF, 3, 4, 0, EnumSymbol.NONE).setCombustionEnergy(FuelGrade.HIGH, 10_000).setHeatEnergy(5_000); + TRITIUM = new FluidTypeCombustible( "TRITIUM", 0x000099, 3, 4, 0, EnumSymbol.RADIATION).setCombustionEnergy(FuelGrade.HIGH, 10_000).setHeatEnergy(5_000); OIL = new FluidTypeFlammable( "OIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(0x424242, ExtContainer.CANISTER); HOTOIL = new FluidTypeFlammable( "HOTOIL", 0x300900, 2, 3, 0, EnumSymbol.NONE).setTemp(350); HEAVYOIL = new FluidTypeFlammable( "HEAVYOIL", 0x141312, 2, 1, 0, EnumSymbol.NONE).addContainers(0x513F39, ExtContainer.CANISTER); BITUMEN = new FluidType( "BITUMEN", 0x1f2426, 2, 0, 0, EnumSymbol.NONE).addContainers(0x5A5877, ExtContainer.CANISTER); SMEAR = new FluidTypeFlammable( "SMEAR", 0x190f01, 2, 1, 0, EnumSymbol.NONE).setHeatEnergy(50_000).addContainers(0x624F3B, ExtContainer.CANISTER); - HEATINGOIL = new FluidTypeCombustible( "HEATINGOIL", 0x211806, 2, 2, 0, EnumSymbol.NONE).setHeatEnergy(75_000).addContainers(0x694235, ExtContainer.CANISTER); //TODO: and so forth - RECLAIMED = new FluidTypeCombustible( "RECLAIMED", 0x332b22, 2, 2, 0, EnumSymbol.NONE).setHeatEnergy(100_000).addContainers(0xF65723, ExtContainer.CANISTER); + HEATINGOIL = new FluidTypeCombustible( "HEATINGOIL", 0x211806, 2, 2, 0, EnumSymbol.NONE).setCombustionEnergy(FuelGrade.LOW, 100_000).setHeatEnergy(150_000).addContainers(0x694235, ExtContainer.CANISTER); //TODO: and so forth + RECLAIMED = new FluidTypeCombustible( "RECLAIMED", 0x332b22, 2, 2, 0, EnumSymbol.NONE).setCombustionEnergy(FuelGrade.LOW, 200_000).setHeatEnergy(100_000).addContainers(0xF65723, ExtContainer.CANISTER); PETROIL = new FluidTypeCombustible( "PETROIL", 0x44413d, 1, 3, 0, EnumSymbol.NONE).setCombustionEnergy(FuelGrade.MEDIUM, 300_000).setHeatEnergy(125_000).addContainers(0x2369F6, ExtContainer.CANISTER); LUBRICANT = new FluidType( "LUBRICANT", 0x606060, 2, 1, 0, EnumSymbol.NONE).addContainers(0xF1CC05, ExtContainer.CANISTER); NAPHTHA = new FluidTypeFlammable( "NAPHTHA", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(0x5F6D44, ExtContainer.CANISTER); @@ -173,8 +173,8 @@ public class Fluids { NAPHTHA_CRACK = new FluidTypeFlammable( "NAPHTHA_CRACK", 0x595744, 2, 1, 0, EnumSymbol.NONE); LIGHTOIL_CRACK = new FluidTypeFlammable( "LIGHTOIL_CRACK", 0x8c7451, 1, 2, 0, EnumSymbol.NONE); DIESEL_CRACK = new FluidTypeCombustible( "DIESEL_CRACK", 0xf2eed5, 1, 2, 0, EnumSymbol.NONE).setCombustionEnergy(FuelGrade.HIGH, 450_000).setHeatEnergy(200_000); - AROMATICS = new FluidTypeFlammable( "AROMATICS", 0xfffeed, 1, 4, 1, EnumSymbol.NONE); - UNSATURATEDS = new FluidTypeFlammable( "UNSATURATEDS", 0xfffeed, 1, 4, 1, EnumSymbol.NONE); + AROMATICS = new FluidTypeFlammable( "AROMATICS", 0x68A09A, 1, 4, 1, EnumSymbol.NONE); + UNSATURATEDS = new FluidTypeFlammable( "UNSATURATEDS", 0x628FAE, 1, 4, 1, EnumSymbol.NONE); SALIENT = new FluidType(69, "SALIENT", 0x457F2D, 0, 0, 0, EnumSymbol.NONE); XPJUICE = new FluidType( "XPJUICE", 0xBBFF09, 0, 0, 0, EnumSymbol.NONE); ENDERJUICE = new FluidType( "ENDERJUICE", 0x127766, 0, 0, 0, EnumSymbol.NONE); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 26cba2c9b..5df6e4e57 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4191)"; + public static final String VERSION = "1.0.27 BETA (4193)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 4673e984f..7cce6df80 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -385,10 +385,16 @@ public class ModEventHandler { return; if(entity instanceof EntityZombie) { - if(rand.nextInt(64) == 0) - entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_m65, 1, world.rand.nextInt(100))); - if(rand.nextInt(128) == 0) - entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_olde, 1, world.rand.nextInt(100))); + if(rand.nextInt(64) == 0) { + ItemStack mask = new ItemStack(ModItems.gas_mask_m65); + ArmorUtil.installGasMaskFilter(mask, new ItemStack(ModItems.gas_mask_filter)); + entity.setCurrentItemOrArmor(4, mask); + } + if(rand.nextInt(128) == 0) { + ItemStack mask = new ItemStack(ModItems.gas_mask_olde); + ArmorUtil.installGasMaskFilter(mask, new ItemStack(ModItems.gas_mask_filter)); + entity.setCurrentItemOrArmor(4, mask); + } if(rand.nextInt(256) == 0) entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.mask_of_infamy, 1, world.rand.nextInt(100))); if(rand.nextInt(1024) == 0) @@ -414,8 +420,11 @@ public class ModEventHandler { entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.chernobylsign)); } if(entity instanceof EntitySkeleton) { - if(rand.nextInt(16) == 0) - entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_m65, 1, world.rand.nextInt(100))); + if(rand.nextInt(16) == 0) { + ItemStack mask = new ItemStack(ModItems.gas_mask_m65); + ArmorUtil.installGasMaskFilter(mask, new ItemStack(ModItems.gas_mask_filter)); + entity.setCurrentItemOrArmor(4, mask); + } if(rand.nextInt(64) == 0) entity.setCurrentItemOrArmor(3, new ItemStack(ModItems.steel_plate, 1, world.rand.nextInt(ModItems.steel_plate.getMaxDamage()))); } diff --git a/src/main/java/com/hbm/particle/ParticleAmatFlash.java b/src/main/java/com/hbm/particle/ParticleAmatFlash.java index f7432e305..e01a28dca 100644 --- a/src/main/java/com/hbm/particle/ParticleAmatFlash.java +++ b/src/main/java/com/hbm/particle/ParticleAmatFlash.java @@ -29,7 +29,9 @@ public class ParticleAmatFlash extends EntityFX { float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX)); float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY)); float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ)); - + + + GL11.glPushMatrix(); GL11.glTranslatef(pX, pY, pZ); GL11.glScalef(0.2F * particleScale, 0.2F * particleScale, 0.2F * particleScale); @@ -49,8 +51,6 @@ public class ParticleAmatFlash extends EntityFX { GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDepthMask(false); - GL11.glPushMatrix(); - float scale = 0.5F; for(int i = 0; i < 100; i++) { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 1d9159be3..bb4eeb3c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -78,12 +78,14 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl int left = quart.getKey().fill; int right = quart.getValue().fill; - if(tanks[0].getFill() >= 100 && tanks[1].getFill() >= 100 && hasSpace(left, right)) { - tanks[0].setFill(tanks[0].getFill() - 100); - tanks[1].setFill(tanks[1].getFill() - 200); - tanks[2].setFill(tanks[2].getFill() + left); - tanks[3].setFill(tanks[3].getFill() + right); - tanks[4].setFill(tanks[4].getFill() + 2); //LPS has the density of WATER not STEAM (1%!) + for(int i = 0; i < 2; i++) { + if(tanks[0].getFill() >= 100 && tanks[1].getFill() >= 100 && hasSpace(left, right)) { + tanks[0].setFill(tanks[0].getFill() - 100); + tanks[1].setFill(tanks[1].getFill() - 200); + tanks[2].setFill(tanks[2].getFill() + left); + tanks[3].setFill(tanks[3].getFill() + right); + tanks[4].setFill(tanks[4].getFill() + 2); //LPS has the density of WATER not STEAM (1%!) + } } } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java index c3249d10b..4549d5d23 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java @@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import api.hbm.block.IPileNeutronReceiver; -import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutronReceiver { @@ -65,11 +64,15 @@ public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutr public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.heat = nbt.getInteger("heat"); + this.progress = nbt.getInteger("progress"); + this.neutrons = nbt.getInteger("neutrons"); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("heat", this.heat); + nbt.setInteger("progress", this.progress); + nbt.setInteger("neutrons", this.neutrons); } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java index cda2f59ca..122e71ae5 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.network; +import java.util.ArrayList; +import java.util.List; + import api.hbm.energy.IEnergyConductor; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; @@ -21,31 +24,15 @@ public class TileEntityConnector extends TileEntityPylonBase { public double getMaxWireLength() { return 10; } - + @Override - protected void connect() { + public List getConnectionPoints() { + List pos = new ArrayList(connected); - super.connect(); - - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); - - TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); - - if(te instanceof IEnergyConductor) { - - IEnergyConductor conductor = (IEnergyConductor) te; - - if(!conductor.canConnect(dir.getOpposite())) - return; - - if(this.getPowerNet() == null && conductor.getPowerNet() != null) { - conductor.getPowerNet().joinLink(this); - } - - if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) { - conductor.getPowerNet().joinNetworks(this.getPowerNet()); - } + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + pos.add(new int[] {xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ}); } + return pos; } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index e61347c6d..0417bff05 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3557,7 +3557,9 @@ tile.solar_mirror.name=Heliostatspiegel tile.soyuz_capsule.name=Landekapsel tile.soyuz_launcher.name=Soyuz-Startplatform tile.spikes.name=Stacheln +tile.stalactite.asbestos.name=Asbest-Stalaktit tile.stalactite.sulfur.name=Schwefelhaltiger Stalaktit +tile.stalagmite.asbestos.name=Asbest-Stalagmit tile.stalagmite.sulfur.name=Schwefelhaltiger Stalagmit tile.steel_beam.name=Stahlträger tile.steel_corner.name=Stahlwand (Ecke) @@ -3570,6 +3572,7 @@ tile.stone_depth.name=Tiefenfels tile.stone_depth_nether.name=Nether-Tiefenfels tile.stone_gneiss.name=Graphitschiefer tile.stone_porous.name=Poröser Stein +tile.stone_resource.asbestos.name=Chrysotil tile.stone_resource.sulfur.name=Schwefelhaltiger Stein tile.struct_iter_core.name=Fusionsreaktor-Kernkomponente tile.struct_launcher.name=Startrampe-Komponentenblock diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a36e920ad..d913ffc38 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3930,7 +3930,9 @@ tile.solar_mirror.name=Heliostat Mirror tile.soyuz_capsule.name=Cargo Landing Capsule tile.soyuz_launcher.name=Soyuz Launch Platform tile.spikes.name=Spikes +tile.stalactite.asbestos.name=Asbestos Stalactite tile.stalactite.sulfur.name=Sulfurous Stalactite +tile.stalagmite.asbestos.name=Asbestos Stalagmite tile.stalagmite.sulfur.name=Sulfurous Stalagmite tile.steel_beam.name=Steel Beam tile.steel_corner.name=Steel Wall Corner @@ -3943,6 +3945,7 @@ tile.stone_depth.name=Depth Rock tile.stone_depth_nether.name=Nether Depth Rock tile.stone_gneiss.name=Graphitic Schist tile.stone_porous.name=Porous Stone +tile.stone_resource.asbestos.name=Chrysotile tile.stone_resource.sulfur.name=Sulfurous Stone tile.struct_iter_core.name=Fusion Reactor Core Component tile.struct_launcher.name=Launch Pad Component Block diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/crackoil.png b/src/main/resources/assets/hbm/textures/gui/fluids/crackoil.png new file mode 100644 index 0000000000000000000000000000000000000000..74f771fa19a37d00c80728f5367e8f7ea855f229 GIT binary patch literal 437 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 Vrt$m)+%X1HdIgg!efj?5{{ac~ebWE{ literal 8301 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

      >GJNK{l*_h4yl%`51tq-Ud29kbic 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index fe91e7960..c4974df8f 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "hbm", "name": "Hbm's Nuclear Tech", "description": "A mod that adds weapons, nuclear themed stuff and machines", - "version":"1.0.27_X4191", + "version":"1.0.27_X4193", "mcversion": "1.7.10", "url": "", "updateUrl": "", From 86903e8a2ed8169e3fb6139f3414b17a1faeb34f Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Sun, 3 Apr 2022 21:55:55 +0300 Subject: [PATCH 22/31] Updated ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index a712dae2f..82e173fce 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2238,6 +2238,7 @@ tile.ore_bedrock_coltan.name=Бедроковая колтановая руда tile.ore_bedrock_oil.name=Бедроковый нефтяной пласт tile.ore_cobalt.name=Кобальтовая руда tile.stone_porous.name=Пористый камень +tile.ore_random.name=%s руды tile.bobblehead.name=Болванчик tile.deco_titanium.name=Титановый декоративный блок @@ -2369,6 +2370,9 @@ tile.tile_lab_cracked.name=Треснувшая лабораторная пли tile.spikes.name=Шипы tile.stalactite.sulfur.name=Сернистый сталактит tile.stalagmite.sulfur.name=Сернистый сталагмит +tile.stalactite.asbestos.name=Асбестовый сталактит +tile.stalagmite.asbestos.name=Асбестовый сталагмит +tile.stone_resource.asbestos.name=Хризотил tile.stone_resource.sulfur.name=Сернистый камень tile.gas_asbestos.name=Частицы асбеста в воздухе tile.gas_flammable.name=Горючий газ @@ -4172,6 +4176,7 @@ item.crucible.name="Горнило Палача" item.bismuth_pickaxe.name=Висмутовая кирка tile.red_cable.name=Провод из красной меди +tile.red_cable_classic.name=Провод из красной меди (Старый) tile.red_connector.name=Электрический коннектор tile.block_meteor.name=Блок метеорита @@ -4357,6 +4362,7 @@ item.canned_kerosene.name=Консервированный керосин item.canned_recursion.name=Консервированная рекурсия item.canned_bark.name=Консервы вяленой сосновой коры item.spongebob_macaroni.name=Сырные макаронны "Губка Боб" +item.can_mug.name=MUG Root Beer item.can_key.name=Винтовой ключ item.nugget.name=Куриный наггетс item.marshmallow.name=Зефир на палочке From 7cb0bec18480b30e45ef4fed6be095531eea8416 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 4 Apr 2022 11:19:23 +0200 Subject: [PATCH 23/31] proxy tiles work with re-eval, network debugger item --- .../java/api/hbm/energy/IEnergyConductor.java | 42 +++++++-- .../java/api/hbm/energy/IEnergyConnector.java | 19 ++++ src/main/java/api/hbm/energy/PowerNet.java | 30 ++++++- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../hbm/blocks/fluid/GenericFluidBlock.java | 5 +- src/main/java/com/hbm/items/ModItems.java | 7 ++ .../com/hbm/items/tool/ItemPowerNetTool.java | 81 ++++++++++++++++++ src/main/java/com/hbm/main/ClientProxy.java | 9 ++ .../java/com/hbm/particle/ParticleText.java | 64 ++++++++++++++ .../satellites/SatelliteLunarMiner.java | 6 +- .../tileentity/TileEntityProxyConductor.java | 16 ++++ .../network/TileEntityConnector.java | 2 - .../network/TileEntitySubstation.java | 16 ++++ src/main/java/com/hbm/util/ChatBuilder.java | 5 ++ .../textures/items/bucket_sulfuric_acid.png | Bin 0 -> 425 bytes .../hbm/textures/items/power_net_tool.png | Bin 0 -> 321 bytes 16 files changed, 286 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/hbm/items/tool/ItemPowerNetTool.java create mode 100644 src/main/java/com/hbm/particle/ParticleText.java create mode 100644 src/main/resources/assets/hbm/textures/items/bucket_sulfuric_acid.png create mode 100644 src/main/resources/assets/hbm/textures/items/power_net_tool.png diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index 1744c5f79..a8c244b7a 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; /** @@ -52,7 +53,7 @@ public interface IEnergyConductor extends IEnergyConnector { * Each link has to decide what other links will join the same net. * @param copy */ - public default void reevaluate(HashMap copy) { + public default void reevaluate(HashMap copy, HashMap proxies) { for(int[] pos : getConnectionPoints()) { int newX = pos[0]; @@ -62,12 +63,37 @@ public interface IEnergyConductor extends IEnergyConnector { IEnergyConductor neighbor = copy.get(id); - if(neighbor != null && neighbor.getPowerNet() != null && this.canReevaluate() && neighbor.canReevaluate()) { + if(neighbor == null) { + Integer newId = proxies.get(id); - if(this.getPowerNet() == null) { - neighbor.getPowerNet().joinLink(this); + if(newId != null) { + neighbor = copy.get(newId); + } + } + + if(neighbor != null && this.canReevaluate() && neighbor.canReevaluate()) { + + if(neighbor.getPowerNet() != null) { + + //neighbor net and no self net + if(this.getPowerNet() == null) { + neighbor.getPowerNet().joinLink(this); + //neighbor net and self net + } else { + this.getPowerNet().joinNetworks(neighbor.getPowerNet()); + } + + //bidirectional re-eval, experimental and technically optional, only useful as a fallback } else { - this.getPowerNet().joinNetworks(neighbor.getPowerNet()); + + //no neighbor net and no self net + if(this.getPowerNet() == null) { + this.setPowerNet(new PowerNet().joinLink(this)); + neighbor.setPowerNet(this.getPowerNet().joinLink(neighbor)); + //no neighbor net and self net + } else { + neighbor.setPowerNet(this.getPowerNet().joinLink(neighbor)); + } } } } @@ -114,4 +140,10 @@ public interface IEnergyConductor extends IEnergyConnector { return this.getPowerNet().transferPower(power); } + + public default Vec3 getDebugParticlePos() { + TileEntity te = (TileEntity) this; + Vec3 vec = Vec3.createVectorHelper(te.xCoord + 0.5, te.yCoord + 1.5, te.zCoord + 0.5); + return vec; + } } diff --git a/src/main/java/api/hbm/energy/IEnergyConnector.java b/src/main/java/api/hbm/energy/IEnergyConnector.java index 40ad4e647..0799c228a 100644 --- a/src/main/java/api/hbm/energy/IEnergyConnector.java +++ b/src/main/java/api/hbm/energy/IEnergyConnector.java @@ -1,5 +1,8 @@ package api.hbm.energy; +import java.util.ArrayList; +import java.util.List; + import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; @@ -94,4 +97,20 @@ public interface IEnergyConnector extends ILoadedTile { } public static final boolean particleDebug = false; + + /** + * Returns whether the conductor has mutliblock proxies which need to be taken into consideration for re-eval. + * @return + */ + public default boolean hasProxies() { + return false; + } + + /** + * Returns the identities (position-based) of proxies which resolve into the conductor's own identity. + * @return + */ + public default List getProxies() { + return new ArrayList(); + } } diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 2969e9e4d..d563c2bf5 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -15,6 +15,7 @@ public class PowerNet implements IPowerNet { private boolean valid = true; private HashMap links = new HashMap(); + private HashMap proxies = new HashMap(); private List subscribers = new ArrayList(); @Override @@ -42,14 +43,29 @@ public class PowerNet implements IPowerNet { conductor.getPowerNet().leaveLink(conductor); conductor.setPowerNet(this); - this.links.put(conductor.getIdentity(), conductor); + int identity = conductor.getIdentity(); + this.links.put(identity, conductor); + + if(conductor.hasProxies()) { + for(Integer i : conductor.getProxies()) { + this.proxies.put(i, identity); + } + } + return this; } @Override public void leaveLink(IEnergyConductor conductor) { conductor.setPowerNet(null); - this.links.remove(conductor.getIdentity()); + int identity = conductor.getIdentity(); + this.links.remove(identity); + + if(conductor.hasProxies()) { + for(Integer i : conductor.getProxies()) { + this.proxies.remove(i); + } + } } @Override @@ -74,6 +90,11 @@ public class PowerNet implements IPowerNet { return linkList; } + public HashMap getProxies() { + HashMap proxyCopy = new HashMap(proxies); + return proxyCopy; + } + @Override public List getSubscribers() { return this.subscribers; @@ -143,8 +164,9 @@ public class PowerNet implements IPowerNet { @Override public void reevaluate() { - + HashMap copy = new HashMap(links); + HashMap proxyCopy = new HashMap(proxies); for(IEnergyConductor link : copy.values()) { this.leaveLink(link); @@ -153,7 +175,7 @@ public class PowerNet implements IPowerNet { for(IEnergyConductor link : copy.values()) { link.setPowerNet(null); - link.reevaluate(copy); + link.reevaluate(copy, proxyCopy); if(link.getPowerNet() == null) { link.setPowerNet(new PowerNet().joinLink(link)); diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ec06e13b4..50315005c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -471,6 +471,8 @@ public class ModBlocks { public static Block fallout; public static Block foam_layer; public static Block sand_boron_layer; + public static Block leaves_layer; + public static Block sellafield_slaked; public static Block sellafield_0; @@ -1677,6 +1679,7 @@ public class ModBlocks { fallout = new BlockFallout(Material.snow).setBlockName("fallout").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":ash"); foam_layer = new BlockLayering(Material.snow).setBlockName("foam_layer").setStepSound(Block.soundTypeSnow).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":foam"); sand_boron_layer = new BlockLayering(Material.sand).setBlockName("sand_boron_layer").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":sand_boron"); + leaves_layer = new BlockLayering(Material.leaves).setBlockName("leaves_layer").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":waste_leaves"); burning_earth = new WasteEarth(Material.ground, true).setBlockName("burning_earth").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":burning_earth"); tektite = new BlockGeneric(Material.sand).setBlockName("tektite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":tektite"); @@ -2707,6 +2710,7 @@ public class ModBlocks { GameRegistry.registerBlock(fallout, fallout.getUnlocalizedName()); GameRegistry.registerBlock(foam_layer, foam_layer.getUnlocalizedName()); GameRegistry.registerBlock(sand_boron_layer, sand_boron_layer.getUnlocalizedName()); + GameRegistry.registerBlock(leaves_layer, leaves_layer.getUnlocalizedName()); GameRegistry.registerBlock(burning_earth, burning_earth.getUnlocalizedName()); GameRegistry.registerBlock(tektite, tektite.getUnlocalizedName()); GameRegistry.registerBlock(ore_tektite_osmiridium, ore_tektite_osmiridium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java b/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java index ebd04d324..d4d61c72b 100644 --- a/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java +++ b/src/main/java/com/hbm/blocks/fluid/GenericFluidBlock.java @@ -2,9 +2,7 @@ package com.hbm.blocks.fluid; import java.util.Random; -import com.hbm.lib.ModDamageSource; import com.hbm.lib.RefStrings; -import com.hbm.util.ArmorUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -12,8 +10,6 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.passive.EntitySquid; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.DamageSource; import net.minecraft.util.IIcon; import net.minecraft.world.World; @@ -61,6 +57,7 @@ public class GenericFluidBlock extends BlockFluidClassic { flowingIcon = register.registerIcon(RefStrings.MODID + ":" + flowingName); } + /** Only temporary, will be moved into a subclass */ @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 469c370a2..411f4f8c3 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1209,6 +1209,7 @@ public class ModItems { public static Item mirror_tool; public static Item rbmk_tool; public static Item coltan_tool; + public static Item power_net_tool; public static Item template_folder; public static Item journal_pip; @@ -2388,6 +2389,7 @@ public class ModItems { public static Item bucket_acid; public static Item bucket_toxic; public static Item bucket_schrabidic_acid; + public static Item bucket_sulfuric_acid; public static Item door_metal; public static Item door_office; @@ -4732,6 +4734,7 @@ public class ModItems { mirror_tool = new ItemMirrorTool().setUnlocalizedName("mirror_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mirror_tool"); rbmk_tool = new ItemRBMKTool().setUnlocalizedName("rbmk_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rbmk_tool"); coltan_tool = new ItemColtanCompass().setUnlocalizedName("coltan_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coltass"); + power_net_tool = new ItemPowerNetTool().setUnlocalizedName("power_net_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":power_net_tool"); key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); @@ -5472,6 +5475,7 @@ public class ModItems { bucket_acid = new ItemModBucket(ModBlocks.acid_block).setUnlocalizedName("bucket_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_acid"); bucket_toxic = new ItemModBucket(ModBlocks.toxic_block).setUnlocalizedName("bucket_toxic").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_toxic"); bucket_schrabidic_acid = new ItemModBucket(ModBlocks.schrabidic_block).setUnlocalizedName("bucket_schrabidic_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_schrabidic_acid"); + bucket_sulfuric_acid = new ItemModBucket(ModBlocks.sulfuric_acid_block).setUnlocalizedName("bucket_sulfuric_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_sulfuric_acid"); door_metal = new ItemModDoor().setUnlocalizedName("door_metal").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_metal"); door_office = new ItemModDoor().setUnlocalizedName("door_office").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_office"); @@ -5621,6 +5625,7 @@ public class ModItems { BucketHandler.INSTANCE.buckets.put(ModBlocks.acid_block, ModItems.bucket_acid); BucketHandler.INSTANCE.buckets.put(ModBlocks.toxic_block, ModItems.bucket_toxic); BucketHandler.INSTANCE.buckets.put(ModBlocks.schrabidic_block, ModItems.bucket_schrabidic_acid); + BucketHandler.INSTANCE.buckets.put(ModBlocks.sulfuric_acid_block, ModItems.bucket_sulfuric_acid); MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); } @@ -6838,6 +6843,7 @@ public class ModItems { GameRegistry.registerItem(mirror_tool, mirror_tool.getUnlocalizedName()); GameRegistry.registerItem(rbmk_tool, rbmk_tool.getUnlocalizedName()); GameRegistry.registerItem(coltan_tool, coltan_tool.getUnlocalizedName()); + GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); @@ -8003,6 +8009,7 @@ public class ModItems { GameRegistry.registerItem(bucket_acid, bucket_acid.getUnlocalizedName()); GameRegistry.registerItem(bucket_toxic, bucket_toxic.getUnlocalizedName()); GameRegistry.registerItem(bucket_schrabidic_acid, bucket_schrabidic_acid.getUnlocalizedName()); + GameRegistry.registerItem(bucket_sulfuric_acid, bucket_sulfuric_acid.getUnlocalizedName()); //Door Items GameRegistry.registerItem(door_metal, door_metal.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java new file mode 100644 index 000000000..b67ded1b3 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java @@ -0,0 +1,81 @@ +package com.hbm.items.tool; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import com.hbm.util.ChatBuilder; + +import api.hbm.energy.IEnergyConductor; +import api.hbm.energy.IPowerNet; +import api.hbm.energy.PowerNet; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class ItemPowerNetTool extends Item { + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { + + Block b = world.getBlock(x, y, z); + + if(b instanceof BlockDummyable) { + int[] pos = ((BlockDummyable) b).findCore(world, x, y, z); + + if(pos != null) { + x = pos[0]; + y = pos[1]; + z = pos[2]; + } + } + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof IEnergyConductor)) + return false; + + if(world.isRemote) + return true; + + IEnergyConductor con = (IEnergyConductor) te; + IPowerNet net = con.getPowerNet(); + + if(net == null) { + player.addChatComponentMessage(ChatBuilder.start("Error: No network found! This should be impossible!").color(EnumChatFormatting.RED).flush()); + return true; + } + + if(!(net instanceof PowerNet)) { + player.addChatComponentMessage(ChatBuilder.start("Error: Cannot print diagnostic for non-standard power net implementation!").color(EnumChatFormatting.RED).flush()); + } + + PowerNet network = (PowerNet) net; + String id = Integer.toHexString(net.hashCode()); + + player.addChatComponentMessage(ChatBuilder.start("Start of diagnostic for network" + id).color(EnumChatFormatting.GOLD).flush()); + player.addChatComponentMessage(ChatBuilder.start("Links: " + network.getLinks().size()).color(EnumChatFormatting.YELLOW).flush()); + player.addChatComponentMessage(ChatBuilder.start("Proxies: " + network.getProxies().size()).color(EnumChatFormatting.YELLOW).flush()); + player.addChatComponentMessage(ChatBuilder.start("Subscribers: " + network.getSubscribers().size()).color(EnumChatFormatting.YELLOW).flush()); + player.addChatComponentMessage(ChatBuilder.start("End of diagnostic for network" + id).color(EnumChatFormatting.GOLD).flush()); + + for(IEnergyConductor link : network.getLinks()) { + Vec3 pos = link.getDebugParticlePos(); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "text"); + data.setInteger("color", 0xffff00); + data.setFloat("scale", 0.5F); + data.setString("text", id); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.xCoord, pos.yCoord, pos.zCoord), new TargetPoint(world.provider.dimensionId, pos.xCoord, pos.yCoord, pos.zCoord, 20)); + } + + return true; + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index ce28cc008..ac1474ef8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1571,6 +1571,15 @@ public class ClientProxy extends ServerProxy { if("amat".equals(type)) { Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleAmatFlash(world, x, y, z, data.getFloat("scale"))); } + + if("debug".equals(type)) { + String t = data.getString("text"); + int color = data.getInteger("color"); + float scale = data.getFloat("scale"); + ParticleText text = new ParticleText(world, x, y, z, color, t); + text.multipleParticleScaleBy(scale); + Minecraft.getMinecraft().effectRenderer.addEffect(text); + } } private HashMap vanished = new HashMap(); diff --git a/src/main/java/com/hbm/particle/ParticleText.java b/src/main/java/com/hbm/particle/ParticleText.java new file mode 100644 index 000000000..f1c6711c9 --- /dev/null +++ b/src/main/java/com/hbm/particle/ParticleText.java @@ -0,0 +1,64 @@ +package com.hbm.particle; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.World; + +public class ParticleText extends EntityFX { + + int color; + String text; + + public ParticleText(World world, double x, double y, double z, int color, String text) { + super(world, x, y, z); + this.particleMaxAge = 30; + this.color = color; + this.text = text; + + this.motionY = 0.1D; + } + + public int getFXLayer() { + return 3; + } + + public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) { + + GL11.glPushMatrix(); + + GL11.glDisable(GL11.GL_LIGHTING); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 0.0F); + RenderHelper.disableStandardItemLighting(); + + Minecraft mc = Minecraft.getMinecraft(); + FontRenderer font = mc.fontRenderer; + + this.rotationYaw = -mc.thePlayer.rotationYaw; + this.rotationPitch = mc.thePlayer.rotationPitch; + + float pX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX); + float pY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY); + float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ); + + GL11.glTranslatef(pX, pY, pZ); + GL11.glRotatef(this.rotationYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.rotationPitch, 1.0F, 0.0F, 0.0F); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + + GL11.glScaled(particleScale, particleScale, particleScale); + + font.drawStringWithShadow(text, -(int) (font.getStringWidth(text) * 0.5F), -(int) (font.FONT_HEIGHT * 0.5F), color); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/saveddata/satellites/SatelliteLunarMiner.java b/src/main/java/com/hbm/saveddata/satellites/SatelliteLunarMiner.java index f297b315e..99195b6d5 100644 --- a/src/main/java/com/hbm/saveddata/satellites/SatelliteLunarMiner.java +++ b/src/main/java/com/hbm/saveddata/satellites/SatelliteLunarMiner.java @@ -1,7 +1,3 @@ package com.hbm.saveddata.satellites; -import net.minecraft.nbt.NBTTagCompound; - -public class SatelliteLunarMiner extends SatelliteMiner { - -} \ No newline at end of file +public class SatelliteLunarMiner extends SatelliteMiner { } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyConductor.java b/src/main/java/com/hbm/tileentity/TileEntityProxyConductor.java index 1c458df9d..1bcbaa6cb 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyConductor.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyConductor.java @@ -1,5 +1,8 @@ package com.hbm.tileentity; +import java.util.ArrayList; +import java.util.List; + import api.hbm.energy.IEnergyConductor; import api.hbm.energy.IPowerNet; import net.minecraft.tileentity.TileEntity; @@ -68,4 +71,17 @@ public class TileEntityProxyConductor extends TileEntityProxyBase implements IEn ((IEnergyConductor)te).setPowerNet(network); } } + + @Override + public List getConnectionPoints() { + + /*TileEntity te = this.getTE(); + + if(te instanceof IEnergyConductor) { + return ((IEnergyConductor)te).getConnectionPoints(); + }*/ + + /* Proxy TE doesn't need to implement proxying here because the conductor main TE already has a network-specific proxying system */ + return new ArrayList(); + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java index 122e71ae5..18908ba92 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java @@ -3,8 +3,6 @@ package com.hbm.tileentity.network; import java.util.ArrayList; import java.util.List; -import api.hbm.energy.IEnergyConductor; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java b/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java index bcb29c5e0..6f4235e38 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntitySubstation.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.blocks.BlockDummyable; +import api.hbm.energy.IEnergyConductor; import net.minecraft.util.Vec3; public class TileEntitySubstation extends TileEntityPylonBase { @@ -58,4 +59,19 @@ public class TileEntitySubstation extends TileEntityPylonBase { pos.add(new int[] {xCoord + 1, yCoord, zCoord - 2}); return pos; } + + @Override + public boolean hasProxies() { + return true; + } + + @Override + public List getProxies() { + List proxies = new ArrayList(); + proxies.add(IEnergyConductor.getIdentityFromPos(xCoord + 1, yCoord, zCoord + 1)); + proxies.add(IEnergyConductor.getIdentityFromPos(xCoord + 1, yCoord, zCoord - 1)); + proxies.add(IEnergyConductor.getIdentityFromPos(xCoord - 1, yCoord, zCoord + 1)); + proxies.add(IEnergyConductor.getIdentityFromPos(xCoord - 1, yCoord, zCoord - 1)); + return proxies; + } } diff --git a/src/main/java/com/hbm/util/ChatBuilder.java b/src/main/java/com/hbm/util/ChatBuilder.java index 6ed56f8ee..0140af364 100644 --- a/src/main/java/com/hbm/util/ChatBuilder.java +++ b/src/main/java/com/hbm/util/ChatBuilder.java @@ -21,6 +21,11 @@ public class ChatBuilder { return builder; } + public static ChatBuilder startTranslation(String text) { + ChatBuilder builder = new ChatBuilder("").nextTranslation(text); + return builder; + } + public ChatBuilder next(String text) { ChatComponentText append = new ChatComponentText(text); this.last.appendSibling(append); diff --git a/src/main/resources/assets/hbm/textures/items/bucket_sulfuric_acid.png b/src/main/resources/assets/hbm/textures/items/bucket_sulfuric_acid.png new file mode 100644 index 0000000000000000000000000000000000000000..d1863b06da265e932acd962679ae9f7b546a2d83 GIT binary patch literal 425 zcmV;a0apHrP)ZXQlS-C%=@1U9#d%|fdPjfVISDA6PY z5^Zfw2loevAPM5);-Cpm-EH3~o*_ZlqQ|9YEm{4Uli$Ak_;MC334&TLLZmVv9~rjX>lT)#hM=FAz7$0$k^RgD2)nijS# zNT)B5MVNj_# z+?3t`ux){9T9~FqrRGq74pA%?cV{r2PB9DvfJ`O>ga8MChr1K{{XU&eXScvwMAI}1 z*Poo7Ke_$)VTnaB4~+Z;R>>}_)hYn#%NKgRo;&zq3r6D+tyaqoa4Ul~gTVkz(?}+h z00<#g+qdx*@Z;#~ale4B>r%N~c3pT`1oK<=cRFY^8g4Cw_|@6ozu;wa`=9U)?n#IM Tidx#w00000NkvXXu0mjfb>k6hI$Q278Kpg;@6Btv6tbI7Cm;gXBCY6Q}S{&M8f@rU4*?fH6i$DHmgmNF}=poO9H5or$(+twjg{t+gn&;JsfZDf2w<_I83; zw)cLWN36A?>$)YCoj3VR(?r|0>pT(@x9kKdQ4}vRm04>Ay!cF|Ubn3r9{3ACHivBE T>v0CA00000NkvXXu0mjfuK|Nh literal 0 HcmV?d00001 From ce7e6d07b265cde4dc03718045fb6eceeb731806 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 4 Apr 2022 13:03:24 +0200 Subject: [PATCH 24/31] finished cable debugger, disabled bidirectional re-eval --- .../java/api/hbm/energy/IEnergyConductor.java | 25 +++++++---- .../java/api/hbm/energy/IEnergyConnector.java | 22 +++------- src/main/java/api/hbm/energy/PowerNet.java | 2 + .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../com/hbm/items/tool/ItemPowerNetTool.java | 39 +++++++++++++++--- .../java/com/hbm/main/ModEventHandler.java | 5 +-- .../java/com/hbm/particle/ParticleText.java | 7 ++-- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/items/power_net_tool.png | Bin 321 -> 368 bytes 10 files changed, 68 insertions(+), 35 deletions(-) diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index a8c244b7a..6fc2e5206 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; /** @@ -84,7 +83,7 @@ public interface IEnergyConductor extends IEnergyConnector { } //bidirectional re-eval, experimental and technically optional, only useful as a fallback - } else { + } /*else { //no neighbor net and no self net if(this.getPowerNet() == null) { @@ -94,7 +93,9 @@ public interface IEnergyConductor extends IEnergyConnector { } else { neighbor.setPowerNet(this.getPowerNet().joinLink(neighbor)); } - } + }*/ + + //extensive debugging has shown that bidirectional re-eval ic complete shit } } } @@ -141,9 +142,19 @@ public interface IEnergyConductor extends IEnergyConnector { return this.getPowerNet().transferPower(power); } - public default Vec3 getDebugParticlePos() { - TileEntity te = (TileEntity) this; - Vec3 vec = Vec3.createVectorHelper(te.xCoord + 0.5, te.yCoord + 1.5, te.zCoord + 0.5); - return vec; + /** + * Returns whether the conductor has mutliblock proxies which need to be taken into consideration for re-eval. + * @return + */ + public default boolean hasProxies() { + return false; + } + + /** + * Returns the identities (position-based) of proxies which resolve into the conductor's own identity. + * @return + */ + public default List getProxies() { + return new ArrayList(); } } diff --git a/src/main/java/api/hbm/energy/IEnergyConnector.java b/src/main/java/api/hbm/energy/IEnergyConnector.java index 0799c228a..663ed8c7b 100644 --- a/src/main/java/api/hbm/energy/IEnergyConnector.java +++ b/src/main/java/api/hbm/energy/IEnergyConnector.java @@ -1,14 +1,12 @@ package api.hbm.energy; -import java.util.ArrayList; -import java.util.List; - import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -98,19 +96,9 @@ public interface IEnergyConnector extends ILoadedTile { public static final boolean particleDebug = false; - /** - * Returns whether the conductor has mutliblock proxies which need to be taken into consideration for re-eval. - * @return - */ - public default boolean hasProxies() { - return false; - } - - /** - * Returns the identities (position-based) of proxies which resolve into the conductor's own identity. - * @return - */ - public default List getProxies() { - return new ArrayList(); + public default Vec3 getDebugParticlePos() { + TileEntity te = (TileEntity) this; + Vec3 vec = Vec3.createVectorHelper(te.xCoord + 0.5, te.yCoord + 1, te.zCoord + 0.5); + return vec; } } diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index d563c2bf5..89efb819c 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -164,6 +164,8 @@ public class PowerNet implements IPowerNet { @Override public void reevaluate() { + + //this.destroy();// HashMap copy = new HashMap(links); HashMap proxyCopy = new HashMap(proxies); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index b37cb4b44..b5b4d4312 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -137,6 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.mirror_tool), new Object[] { " A ", " IA", "I ", 'A', AL.ingot(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_tool), new Object[] { " A ", " IA", "I ", 'A', PB.ingot(), 'I', IRON.ingot() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', ModItems.wire_red_copper, 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', ModItems.battery_su }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.kit_toolbox_empty), new Object[] { "CCC", "CIC", 'C', CU.plate(), 'I', IRON.ingot() }); diff --git a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java index b67ded1b3..7151b97c4 100644 --- a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java +++ b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java @@ -1,11 +1,14 @@ package com.hbm.items.tool; +import java.util.List; + import com.hbm.blocks.BlockDummyable; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.util.ChatBuilder; import api.hbm.energy.IEnergyConductor; +import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IPowerNet; import api.hbm.energy.PowerNet; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -59,23 +62,49 @@ public class ItemPowerNetTool extends Item { PowerNet network = (PowerNet) net; String id = Integer.toHexString(net.hashCode()); - player.addChatComponentMessage(ChatBuilder.start("Start of diagnostic for network" + id).color(EnumChatFormatting.GOLD).flush()); + player.addChatComponentMessage(ChatBuilder.start("Start of diagnostic for network " + id).color(EnumChatFormatting.GOLD).flush()); player.addChatComponentMessage(ChatBuilder.start("Links: " + network.getLinks().size()).color(EnumChatFormatting.YELLOW).flush()); player.addChatComponentMessage(ChatBuilder.start("Proxies: " + network.getProxies().size()).color(EnumChatFormatting.YELLOW).flush()); player.addChatComponentMessage(ChatBuilder.start("Subscribers: " + network.getSubscribers().size()).color(EnumChatFormatting.YELLOW).flush()); - player.addChatComponentMessage(ChatBuilder.start("End of diagnostic for network" + id).color(EnumChatFormatting.GOLD).flush()); + player.addChatComponentMessage(ChatBuilder.start("End of diagnostic for network " + id).color(EnumChatFormatting.GOLD).flush()); for(IEnergyConductor link : network.getLinks()) { Vec3 pos = link.getDebugParticlePos(); + boolean errored = link.getPowerNet() != net; + NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "text"); - data.setInteger("color", 0xffff00); + data.setString("type", "debug"); + data.setInteger("color", errored ? 0xff0000 : 0xffff00); data.setFloat("scale", 0.5F); data.setString("text", id); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.xCoord, pos.yCoord, pos.zCoord), new TargetPoint(world.provider.dimensionId, pos.xCoord, pos.yCoord, pos.zCoord, 20)); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.xCoord, pos.yCoord, pos.zCoord), new TargetPoint(world.provider.dimensionId, pos.xCoord, pos.yCoord, pos.zCoord, radius)); + } + + for(IEnergyConnector subscriber : network.getSubscribers()) { + Vec3 pos = subscriber.getDebugParticlePos(); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "debug"); + data.setInteger("color", 0x0000ff); + data.setFloat("scale", 1.5F); + data.setString("text", id); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.xCoord, pos.yCoord, pos.zCoord), new TargetPoint(world.provider.dimensionId, pos.xCoord, pos.yCoord, pos.zCoord, radius)); } return true; } + + private static final int radius = 20; + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Right-click cable to analyze the power net."); + list.add(EnumChatFormatting.RED + "Links (cables, poles, etc.) are YELLOW"); + list.add(EnumChatFormatting.RED + "Subscribers (any receiver) are BLUE"); + list.add(EnumChatFormatting.RED + "Links with mismatching netowrk info (BUGGED!) are RED"); + list.add(EnumChatFormatting.RED + "Displays stats such as link and subscriber count"); + list.add(EnumChatFormatting.RED + "Proxies are connection points for multiblock links (e.g. 4 for substations)"); + list.add(EnumChatFormatting.RED + "Particles only spawn in a " + radius + " block radius!"); + } } diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 7cce6df80..8913738e7 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -62,7 +62,6 @@ import com.hbm.util.EntityDamageUtil; import com.hbm.world.WorldProviderNTM; import com.hbm.world.generator.TimedGenerator; -import api.hbm.energy.IEnergyConductor; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -1171,7 +1170,7 @@ public class ModEventHandler { /// PU RADIATION END /// - if(player instanceof EntityPlayerMP) { + /*if(player instanceof EntityPlayerMP) { int x = (int) Math.floor(player.posX); int y = (int) Math.floor(player.posY - 0.01); @@ -1180,7 +1179,7 @@ public class ModEventHandler { if(player.worldObj.getTileEntity(x, y, z) instanceof IEnergyConductor) { PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(((IEnergyConductor) player.worldObj.getTileEntity(x, y, z)).getPowerNet() + ""), (EntityPlayerMP) player); } - } + }*/ /// NEW ITEM SYS START /// HazardSystem.updatePlayerInventory(player); diff --git a/src/main/java/com/hbm/particle/ParticleText.java b/src/main/java/com/hbm/particle/ParticleText.java index f1c6711c9..34ad3e928 100644 --- a/src/main/java/com/hbm/particle/ParticleText.java +++ b/src/main/java/com/hbm/particle/ParticleText.java @@ -17,11 +17,12 @@ public class ParticleText extends EntityFX { public ParticleText(World world, double x, double y, double z, int color, String text) { super(world, x, y, z); - this.particleMaxAge = 30; + this.particleMaxAge = 100; this.color = color; this.text = text; - this.motionY = 0.1D; + this.motionY = 0.01D; + this.noClip = true; } public int getFXLayer() { @@ -51,7 +52,7 @@ public class ParticleText extends EntityFX { GL11.glRotatef(this.rotationPitch, 1.0F, 0.0F, 0.0F); GL11.glScalef(-1.0F, -1.0F, 1.0F); - GL11.glScaled(particleScale, particleScale, particleScale); + GL11.glScaled(particleScale * 0.01, particleScale * 0.01, particleScale * 0.01); font.drawStringWithShadow(text, -(int) (font.getStringWidth(text) * 0.5F), -(int) (font.FONT_HEIGHT * 0.5F), color); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 0417bff05..839e5f15e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2262,6 +2262,7 @@ item.powder_xe135.name=Xenon-135-Staub item.powder_xe135_tiny.name=Kleiner Haufen Xenon-135-Staub item.powder_yellowcake.name=Yellowcake item.powder_zirconium.name=Zirkoniumstaub +item.power_net_tool.name=Stromnetz-Analysewerkzeug item.primer_357.name=.357 Magnum-Zündhütchen (x24) item.primer_44.name=.44 Magnum-Zündhütchen (x24) item.primer_50.name=Großkaliber-Zündhütchen (x12) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d913ffc38..039c75c54 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2570,6 +2570,7 @@ item.powder_xe135.name=Xenon-135 Powder item.powder_xe135_tiny.name=Tiny Pile of Xenon-135 Powder item.powder_yellowcake.name=Yellowcake item.powder_zirconium.name=Zirconium Powder +item.power_net_tool.name=Cable Network Analysis Tool item.primer_357.name=.357 Magnum Primer (x24) item.primer_44.name=.44 Magnum Primer (x24) item.primer_50.name=Large Caliber Primer (x12) diff --git a/src/main/resources/assets/hbm/textures/items/power_net_tool.png b/src/main/resources/assets/hbm/textures/items/power_net_tool.png index 66d95247d60a6a64a3998978fa85600a89d1526b..8a333cbf0988d9b107d0bcc66617e0e568fc4a2a 100644 GIT binary patch delta 326 zcmV-M0lEIc0`LNmGk*amNklv?lV4<2WWw(*RHu#V|rfjj+g1J|8rBw4$z0+*|!TJ{1Gk*a1Nklb>k6hI$Q278Kpg;@6Btv6tbI7Cm;gXBCY z6Q}S{&M8fG)b)AW}XstyE0j;$tw&1;A zB`Nbf@Ah_rShn|moky&-qU*XPm7O>FOw&Z$w(C3+6SwRHDNz(JF_l?s1-$r7rCztK d93J=!KQ@PK;}Gj{2BrW2002ovPDHLkV1hHees2H( From a3398eb41676cd2f1d521d683ad8c28461c29b95 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 4 Apr 2022 15:58:06 +0200 Subject: [PATCH 25/31] "show all recipes" button for universal NEI handlers --- src/main/java/com/hbm/blocks/ModBlocks.java | 30 +++++++++--------- .../java/com/hbm/blocks/generic/BlockOre.java | 9 +++++- .../hbm/handler/nei/BreederRecipeHandler.java | 1 - .../nei/CrystallizerRecipeHandler.java | 4 +-- .../hbm/handler/nei/NEIUniversalHandler.java | 21 +++++++++++- .../handler/nei/RadiolysisRecipeHandler.java | 3 -- .../hbm/handler/nei/SILEXRecipeHandler.java | 3 -- .../com/hbm/items/tool/ItemPowerNetTool.java | 2 +- .../java/com/hbm/items/tool/ItemRBMKTool.java | 1 - .../assets/hbm/textures/gui/nei/gui_nei.png | Bin 1102 -> 1635 bytes 10 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 50315005c..7df98a123 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1500,14 +1500,14 @@ public class ModBlocks { block_cap_sunset = new BlockCap(Material.iron, RefStrings.MODID + ":block_cap_sunset_top").setStepSound(Block.soundTypeMetal).setBlockName("block_cap_sunset").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_cap_sunset"); block_cap_star = new BlockCap(Material.iron, RefStrings.MODID + ":block_cap_star_top").setStepSound(Block.soundTypeMetal).setBlockName("block_cap_star").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_cap_star"); - deco_titanium = new BlockOre(Material.iron).setBlockName("deco_titanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_titanium"); - deco_red_copper = new BlockDecoCT(Material.iron).setBlockName("deco_red_copper").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_red_copper"); - deco_tungsten = new BlockDecoCT(Material.iron).setBlockName("deco_tungsten").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_tungsten"); - deco_aluminium = new BlockDecoCT(Material.iron).setBlockName("deco_aluminium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_aluminium"); - deco_steel = new BlockDecoCT(Material.iron).setBlockName("deco_steel").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel"); - deco_lead = new BlockDecoCT(Material.iron).setBlockName("deco_lead").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_lead"); - deco_beryllium = new BlockDecoCT(Material.iron).setBlockName("deco_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_beryllium"); - deco_asbestos = new BlockOutgas(Material.cloth, true, 5, true).setBlockName("deco_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_asbestos"); + deco_titanium = new BlockOre(Material.iron).noFortune().setBlockName("deco_titanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_titanium"); + deco_red_copper = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_red_copper").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_red_copper"); + deco_tungsten = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_tungsten").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_tungsten"); + deco_aluminium = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_aluminium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_aluminium"); + deco_steel = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_steel").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel"); + deco_lead = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_lead").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_lead"); + deco_beryllium = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_beryllium"); + deco_asbestos = new BlockOutgas(Material.cloth, true, 5, true).noFortune().setBlockName("deco_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_asbestos"); deco_rbmk = new BlockGeneric(Material.iron).setBlockName("deco_rbmk").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_side"); deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top"); @@ -1571,11 +1571,11 @@ public class ModBlocks { siege_emergency = new BlockBase(Material.iron).setBlockName("siege_emergency").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(20000.0F).setBlockTextureName(RefStrings.MODID + ":siege_emergency"); siege_hole = new SiegeHole(Material.iron).setBlockName("siege_hole").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":siege_hole"); - block_meteor = new BlockOre(Material.rock).setBlockName("block_meteor").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor"); - block_meteor_cobble = new BlockOre(Material.rock).setBlockName("block_meteor_cobble").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_cobble"); - block_meteor_broken = new BlockOre(Material.rock).setBlockName("block_meteor_broken").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_crushed"); - block_meteor_molten = new BlockOre(Material.rock, true).setBlockName("block_meteor_molten").setLightLevel(0.75F).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_cobble_molten"); - block_meteor_treasure = new BlockOre(Material.rock).setBlockName("block_meteor_treasure").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_treasure"); + block_meteor = new BlockOre(Material.rock).noFortune().setBlockName("block_meteor").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor"); + block_meteor_cobble = new BlockOre(Material.rock).noFortune().setBlockName("block_meteor_cobble").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_cobble"); + block_meteor_broken = new BlockOre(Material.rock).noFortune().setBlockName("block_meteor_broken").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_crushed"); + block_meteor_molten = new BlockOre(Material.rock, true).noFortune().setBlockName("block_meteor_molten").setLightLevel(0.75F).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_cobble_molten"); + block_meteor_treasure = new BlockOre(Material.rock).noFortune().setBlockName("block_meteor_treasure").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_treasure"); meteor_polished = new BlockGeneric(Material.rock).setBlockName("meteor_polished").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_polished"); meteor_brick = new BlockGeneric(Material.rock).setBlockName("meteor_brick").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_brick"); meteor_brick_mossy = new BlockGeneric(Material.rock).setBlockName("meteor_brick_mossy").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(900.0F).setBlockTextureName(RefStrings.MODID + ":meteor_brick_mossy"); @@ -1667,8 +1667,8 @@ public class ModBlocks { waste_earth = new WasteEarth(Material.ground, true).setBlockName("waste_earth").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":waste_earth"); waste_mycelium = new WasteEarth(Material.ground, true).setBlockName("waste_mycelium").setStepSound(Block.soundTypeGrass).setLightLevel(1F).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":waste_mycelium_side"); - waste_trinitite = new BlockOre(Material.sand).setBlockName("waste_trinitite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite"); - waste_trinitite_red = new BlockOre(Material.sand).setBlockName("waste_trinitite_red").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite_red"); + waste_trinitite = new BlockOre(Material.sand).noFortune().setBlockName("waste_trinitite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite"); + waste_trinitite_red = new BlockOre(Material.sand).noFortune().setBlockName("waste_trinitite_red").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite_red"); waste_log = new WasteLog(Material.wood).setBlockName("waste_log").setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(2.5F); waste_leaves = new WasteLeaves(Material.leaves).setBlockName("waste_leaves").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setBlockTextureName(RefStrings.MODID + ":waste_leaves"); waste_planks = new BlockOre(Material.wood).setBlockName("waste_planks").setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_planks"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 6f643733b..93b95e163 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -241,10 +241,17 @@ public class BlockOre extends Block { return 1; } + public boolean allowFortune = true; + + public BlockOre noFortune() { + this.allowFortune = false; + return this; + } + @Override public int quantityDroppedWithBonus(int fortune, Random rand) { - if(fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped(0, rand, fortune)) { + if(fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped(0, rand, fortune) && allowFortune) { int mult = rand.nextInt(fortune + 2) - 1; if(mult < 0) { diff --git a/src/main/java/com/hbm/handler/nei/BreederRecipeHandler.java b/src/main/java/com/hbm/handler/nei/BreederRecipeHandler.java index ed488b371..8f91f8d75 100644 --- a/src/main/java/com/hbm/handler/nei/BreederRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/BreederRecipeHandler.java @@ -1,7 +1,6 @@ package com.hbm.handler.nei; import java.awt.Rectangle; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java b/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java index 358aac421..0502656e0 100644 --- a/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java @@ -31,7 +31,7 @@ public class CrystallizerRecipeHandler extends TemplateRecipeHandler { public RecipeSet(Object input, ItemStack result) { this.input = new PositionedStack(input, 75, 24); - this.acid = new PositionedStack(ItemFluidIcon.addQuantity(new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.ordinal()), TileEntityMachineCrystallizer.acidRequired), 39, 24); + this.acid = new PositionedStack(ItemFluidIcon.addQuantity(new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.getID()), TileEntityMachineCrystallizer.acidRequired), 39, 24); this.result = new PositionedStack(result, 135, 24); } @@ -126,7 +126,7 @@ public class CrystallizerRecipeHandler extends TemplateRecipeHandler { for (Map.Entry recipe : recipes.entrySet()) { if(NEIServerUtils.areStacksSameTypeCrafting(ingredient, ItemFluidIcon.addQuantity( - new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.ordinal()), TileEntityMachineCrystallizer.acidRequired))) { + new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.getID()), TileEntityMachineCrystallizer.acidRequired))) { if(recipe.getKey() instanceof ItemStack) { this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 7cba240f0..4b139f1f9 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -2,11 +2,12 @@ package com.hbm.handler.nei; import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import com.hbm.lib.RefStrings; @@ -16,11 +17,17 @@ import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; import net.minecraft.block.Block; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public abstract class NEIUniversalHandler extends TemplateRecipeHandler { + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + /// SETUP /// public final String display; public final String key; @@ -169,4 +176,16 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { } } } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + //guiGui = new LinkedList>(); + + transferRects.add(new RecipeTransferRect(new Rectangle(147, 1, 18, 18), key)); + //transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), key)); + //guiGui.add(GUIMachineAssembler.class); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + //RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } } diff --git a/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java b/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java index edd81d147..9d5d619d4 100644 --- a/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java @@ -8,7 +8,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map.Entry; -import com.hbm.blocks.ModBlocks; import com.hbm.inventory.gui.GUIRadiolysis; import com.hbm.inventory.recipes.RadiolysisRecipes; import com.hbm.lib.RefStrings; @@ -16,8 +15,6 @@ import com.hbm.lib.RefStrings; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; -import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRect; -import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRectHandler; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java b/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java index dd624fc18..ed1132d76 100644 --- a/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java @@ -10,12 +10,10 @@ import java.util.Map; import com.hbm.inventory.gui.GUISILEX; import com.hbm.inventory.recipes.SILEXRecipes; import com.hbm.inventory.recipes.SILEXRecipes.SILEXRecipe; -import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; import com.hbm.lib.RefStrings; import com.hbm.util.I18nUtil; import com.hbm.util.WeightedRandomObject; -import com.hbm.inventory.RecipesCommon.ComparableStack; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; @@ -23,7 +21,6 @@ import codechicken.nei.recipe.TemplateRecipeHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java index 7151b97c4..d1e5eef45 100644 --- a/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java +++ b/src/main/java/com/hbm/items/tool/ItemPowerNetTool.java @@ -102,7 +102,7 @@ public class ItemPowerNetTool extends Item { list.add(EnumChatFormatting.RED + "Right-click cable to analyze the power net."); list.add(EnumChatFormatting.RED + "Links (cables, poles, etc.) are YELLOW"); list.add(EnumChatFormatting.RED + "Subscribers (any receiver) are BLUE"); - list.add(EnumChatFormatting.RED + "Links with mismatching netowrk info (BUGGED!) are RED"); + list.add(EnumChatFormatting.RED + "Links with mismatching network info (BUGGED!) are RED"); list.add(EnumChatFormatting.RED + "Displays stats such as link and subscriber count"); list.add(EnumChatFormatting.RED + "Proxies are connection points for multiblock links (e.g. 4 for substations)"); list.add(EnumChatFormatting.RED + "Particles only spawn in a " + radius + " block radius!"); diff --git a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java index e5f1da2c3..34f5ef405 100644 --- a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java +++ b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java @@ -17,7 +17,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png b/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png index 48188cfd44478d41f77b864376a704f113c65f2f..ecdd6955099a67f0b843ee7faf0434d12169e612 100644 GIT binary patch literal 1635 zcmc&!`BM^j6#qh+N4jdBp=R0^yPBn29$TxD0Y;`mQJE(l>KdL=rdfnpBZlP8Ivz+y znX(xPI%TGaXp!2XcA=FL33;SRq9kMzOMgN?^?v!hd7t;@eP-TKhz$=hH-(u30L(Gl zk-GqZ=v@dfUaE(fqt_GlU_c7S;EnZm%J?u9fTb`Daw|Uj()4gY(P?~z(M(dWT>)bE z-`g;z0h`Ll258q;V7f1#Js!Ptnd0}W<*y3Nb9bNjyUn(LCQu!Y4>RN*eI&HZQP$@< zMePa>_sPTF$RDP{?iith+TPR;zIn}f7Ra(#N2_6!7nG~Dij90uGTjaB&9;38(>cHF zjq;4=$CDsl9J0i4-8GzOLX$Z@G~P-)i@7N_bYNjicI@8I86`>>UWG2L-0HlW;@PIQ z#(N0|>dSZ%UJIz$BUC`ko|aNy6i!D3m{nd4ntyUC2AYu^sjpHK*Mmeck55^%seTEi zi=kq$ejx--n^^mwR88PKA9UzmM8(n@Mnc70J}8UE*^r7G1p;Rxk+=qb-yhO(&%EG1 z#QZim))j(C=)1Gf|CSuYjT4+y6-4MPBj$^Jb>3A7 z9|N#Vy}(RI;cOa}oyi=X+@;-4s(qac?~c(9xvUO`V}10ZPHW%OG>eaUvWMU192ckV z56WH-eF{N}Mn*U3M0xSdLnlU^Xaw!Y=l8+mJQkX>^lWEc4Ceu}q zP0m^YyduSTSlXtr6`}(Tuh@0F66OX&jXHu;)6=^ZiZn@r*MpiNkCrtK^xKnVgj$jb zC^P}vcLKygC|GU{{;2>IkpcL1Em-9Z`H55{(Z+kT`tfG>JbV9U?CR=-mcCjEYcaQE zhg=0u0&@Z5g4CKM^ckmY**r~10xUI zKY%#&9;WbSICT9j^l=b&YP9*w{zSSdh28jNe-@Nr%4C`8hwiHk>j?kPS`f#ZjAGC7 z?lw5oDN;7V=;(yu$oEQlcik9$baeTTtx2sZWhBD^g^STFrZqd}cU}=)xDr3q*@+ok!Pp#_v)3;mn^>1MAAidOf)=>LkJeAj|Og(JDagtPwxW3#MP literal 1102 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGvAtEY=& zNX4ADcLMWnc`>wIR7~<0Op(rE>HNM!`@^b^si8mZwuD9}-4}TC;NXADpca=z6REQ` zh8H%x^nQ7|)mL-&>E8*N-(LOMcJ`2PL$;~6e?srCpkMdx*YD4pK2MluWBC4qPn)7b zvQpQd%l~Y(p~HU9xTw?D(Wt2(xgqE%W?&mS^d%-?KfBEH?{ zu_^=q;kdc?w?$Sk6|7Br$+_mj4N-=W^cTkV;S85^*u^%~S64@;7=5TW`(3Na_h-$# zY4aF1$S^h}FfkltVQAuHU=e2EP-77AVNjUC;9xL>ByKFzU;4k`xsY+Af6a{*OQ-a{ zwK};?a^L+$L37h~F#24ae(C?e%D<(%zsyPK*!zoDPyEWFAnoeXy4lwoUH?2(Wf0vI z{@nbV+5*?5RwyykI?wCp<_%|G9A3b8_NeaV3eE$EH-tamo+~zwA!c=C6_fT8u7>tR zU_=#soHu{Idi}mC3z<`=PoKV$=%u;zP1){~$tAJonP>LT-+%vou2oo~^*8?Z!-Y|sj1WcU{v%5d&^v1qbG*D9ufE{+4Xq2dieuR0n!CM0}GK45vbXvVqcpC9~J z{&6ZIIr+}(p8>nI)-z;1@@g>MeOmOu*8Q&k?Q)XO|IAsFeQZa~9n;T6st2S(D_ISW zCl)6>EH2;4^rNd<_TSERDi0=xma+ys&aZ2qZ@OBGVQb-!NNYxkhaV<8Feu!3FuS4s z@WMHM%d5|)PO(4Q`d;wsS+m;v--~NDp7{N{`pT}2adAw Date: Tue, 5 Apr 2022 11:41:29 +0200 Subject: [PATCH 26/31] Thorium fuel production in RBMK irradiation channel i hope i didn't fuck shit up --- .../hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 8449ef2c6..780abe209 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -83,6 +83,9 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement recipes.put("ingotGold", new ItemStack(ModItems.ingot_au198)); recipes.put("nuggetGold", new ItemStack(ModItems.nugget_au198)); recipes.put("dustGold", new ItemStack(ModItems.powder_au198)); + recipes.put("ingotThorium", new ItemStack(ModItems.ingot_thorium_fuel)); + recipes.put("nuggetThorium", new ItemStack(ModItems.nugget_thorium_fuel)); + recipes.put("billetThorium", new ItemStack(ModItems.billet_thorium_fuel)); recipes.put(new ComparableStack(Blocks.brown_mushroom), new ItemStack(ModBlocks.mush)); recipes.put(new ComparableStack(Blocks.red_mushroom), new ItemStack(ModBlocks.mush)); recipes.put(new ComparableStack(Items.mushroom_stew), new ItemStack(ModItems.glowing_stew)); From 7d3a4d197bd7a6325c12948ddee7edc2bdc54626 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 5 Apr 2022 20:30:29 +0200 Subject: [PATCH 27/31] funky NEI handling memes, arsenic --- src/main/java/com/hbm/blocks/ModBlocks.java | 9 +++-- .../com/hbm/blocks/generic/BlockLayering.java | 4 +- .../com/hbm/blocks/generic/WasteLeaves.java | 13 ++++++- .../com/hbm/handler/nei/CrackingHandler.java | 7 +++- .../nei/CrystallizerRecipeHandler.java | 4 ++ .../hbm/handler/nei/FractioningHandler.java | 7 +++- .../hbm/handler/nei/LiquefactionHandler.java | 7 +++- .../hbm/handler/nei/NEIUniversalHandler.java | 21 +++++----- .../com/hbm/handler/nei/RTGRecipeHandler.java | 7 +++- .../handler/nei/SolidificationHandler.java | 9 ++++- .../hbm/handler/nei/ZirnoxRecipeHandler.java | 7 +++- src/main/java/com/hbm/items/ModItems.java | 12 ++++++ .../java/com/hbm/world/feature/OilSpot.java | 36 +++++++++++------- .../hbm/textures/blocks/stone_cracked.png | Bin 0 -> 753 bytes .../hbm/textures/items/circuit_arsenic.png | Bin 0 -> 474 bytes .../textures/items/circuit_arsenic_raw.png | Bin 0 -> 420 bytes .../hbm/textures/items/ingot_arsenic.png | Bin 0 -> 523 bytes .../hbm/textures/items/nugget_arsenic.png | Bin 0 -> 261 bytes 18 files changed, 106 insertions(+), 37 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_cracked.png create mode 100644 src/main/resources/assets/hbm/textures/items/circuit_arsenic.png create mode 100644 src/main/resources/assets/hbm/textures/items/circuit_arsenic_raw.png create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_arsenic.png create mode 100644 src/main/resources/assets/hbm/textures/items/nugget_arsenic.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7df98a123..e54849cab 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -463,6 +463,7 @@ public class ModBlocks { public static Block dirt_oily; public static Block sand_dirty; public static Block sand_dirty_red; + public static Block stone_cracked; public static Block burning_earth; public static Block tektite; public static Block ore_tektite_osmiridium; @@ -1679,16 +1680,17 @@ public class ModBlocks { fallout = new BlockFallout(Material.snow).setBlockName("fallout").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":ash"); foam_layer = new BlockLayering(Material.snow).setBlockName("foam_layer").setStepSound(Block.soundTypeSnow).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":foam"); sand_boron_layer = new BlockLayering(Material.sand).setBlockName("sand_boron_layer").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":sand_boron"); - leaves_layer = new BlockLayering(Material.leaves).setBlockName("leaves_layer").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":waste_leaves"); + leaves_layer = new BlockLayering(Material.leaves).setBlockName("leaves_layer").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setLightOpacity(0).setBlockTextureName(RefStrings.MODID + ":waste_leaves"); burning_earth = new WasteEarth(Material.ground, true).setBlockName("burning_earth").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":burning_earth"); tektite = new BlockGeneric(Material.sand).setBlockName("tektite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":tektite"); ore_tektite_osmiridium = new BlockGeneric(Material.sand).setBlockName("ore_tektite_osmiridium").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":ore_tektite_osmiridium"); impact_dirt = new BlockDirt(Material.ground, true).setBlockName("impact_dirt").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":waste_earth_bottom"); - dirt_dead = new BlockGeneric(Material.ground).setBlockName("dirt_dead").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":dirt_dead"); - dirt_oily = new BlockGeneric(Material.ground).setBlockName("dirt_oily").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":dirt_oily"); + dirt_dead = new BlockFalling(Material.ground).setBlockName("dirt_dead").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":dirt_dead"); + dirt_oily = new BlockFalling(Material.ground).setBlockName("dirt_oily").setStepSound(Block.soundTypeGravel).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":dirt_oily"); sand_dirty = new BlockFalling(Material.sand).setBlockName("sand_dirty").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_dirty"); sand_dirty_red = new BlockFalling(Material.sand).setBlockName("sand_dirty_red").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_dirty_red"); + stone_cracked = new BlockFalling(Material.rock).setBlockName("stone_cracked").setStepSound(Block.soundTypeStone).setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setBlockTextureName(RefStrings.MODID + ":stone_cracked"); sellafield_slaked = new BlockGeneric(Material.rock).setBlockName("sellafield_slaked").setStepSound(Block.soundTypeStone).setHardness(5.0F).setBlockTextureName(RefStrings.MODID + ":sellafield_slaked"); sellafield_0 = new BlockHazard(Material.rock).setBlockName("sellafield_0").setStepSound(Block.soundTypeStone).setHardness(5.0F).setBlockTextureName(RefStrings.MODID + ":sellafield_0"); @@ -2707,6 +2709,7 @@ public class ModBlocks { GameRegistry.registerBlock(dirt_oily, dirt_oily.getUnlocalizedName()); GameRegistry.registerBlock(sand_dirty, sand_dirty.getUnlocalizedName()); GameRegistry.registerBlock(sand_dirty_red, sand_dirty_red.getUnlocalizedName()); + GameRegistry.registerBlock(stone_cracked, stone_cracked.getUnlocalizedName()); GameRegistry.registerBlock(fallout, fallout.getUnlocalizedName()); GameRegistry.registerBlock(foam_layer, foam_layer.getUnlocalizedName()); GameRegistry.registerBlock(sand_boron_layer, sand_boron_layer.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockLayering.java b/src/main/java/com/hbm/blocks/generic/BlockLayering.java index fa039eff3..21d6ed749 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockLayering.java +++ b/src/main/java/com/hbm/blocks/generic/BlockLayering.java @@ -84,9 +84,9 @@ public class BlockLayering extends Block { } public void updateTick(World p_149674_1_, int p_149674_2_, int p_149674_3_, int p_149674_4_, Random p_149674_5_) { - if(p_149674_1_.getSavedLightValue(EnumSkyBlock.Block, p_149674_2_, p_149674_3_, p_149674_4_) > 11) { + /*if(p_149674_1_.getSavedLightValue(EnumSkyBlock.Block, p_149674_2_, p_149674_3_, p_149674_4_) > 11) { p_149674_1_.setBlockToAir(p_149674_2_, p_149674_3_, p_149674_4_); - } + }*/ } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/blocks/generic/WasteLeaves.java b/src/main/java/com/hbm/blocks/generic/WasteLeaves.java index 57571f249..8ffadba81 100644 --- a/src/main/java/com/hbm/blocks/generic/WasteLeaves.java +++ b/src/main/java/com/hbm/blocks/generic/WasteLeaves.java @@ -2,6 +2,7 @@ package com.hbm.blocks.generic; import java.util.Random; +import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -10,16 +11,17 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.IIcon; import net.minecraft.world.World; public class WasteLeaves extends Block { public WasteLeaves(Material mat) { super(mat); + this.setTickRandomly(true); } @Override @@ -36,8 +38,15 @@ public class WasteLeaves extends Block { @Override public void updateTick(World world, int x, int y, int z, Random rand) { - if(rand.nextInt(60) == 0) { + if(rand.nextInt(30) == 0) { world.setBlockToAir(x, y, z); + + if(world.getBlock(x, y - 1, z).getMaterial() == Material.air) { + EntityFallingBlock leaves = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, ModBlocks.leaves_layer); + leaves.field_145812_b = 2; + leaves.field_145813_c = false; + world.spawnEntityInWorld(leaves); + } } super.updateTick(world, x, y, z, rand); diff --git a/src/main/java/com/hbm/handler/nei/CrackingHandler.java b/src/main/java/com/hbm/handler/nei/CrackingHandler.java index b0ef1c4eb..15452f21c 100644 --- a/src/main/java/com/hbm/handler/nei/CrackingHandler.java +++ b/src/main/java/com/hbm/handler/nei/CrackingHandler.java @@ -6,6 +6,11 @@ import com.hbm.inventory.recipes.RefineryRecipes; public class CrackingHandler extends NEIUniversalHandler { public CrackingHandler() { - super("ntmCracking", "Cracking", ModBlocks.machine_catalytic_cracker, RefineryRecipes.getCrackingRecipesForNEI()); + super("Cracking", ModBlocks.machine_catalytic_cracker, RefineryRecipes.getCrackingRecipesForNEI()); + } + + @Override + public String getKey() { + return "ntmCracking"; } } diff --git a/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java b/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java index 0502656e0..7785087e0 100644 --- a/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/CrystallizerRecipeHandler.java @@ -78,6 +78,10 @@ public class CrystallizerRecipeHandler extends TemplateRecipeHandler { Map recipes = CrystallizerRecipes.getRecipes(); for (Map.Entry recipe : recipes.entrySet()) { + + if(recipe.getKey() instanceof ItemStack && ((ItemStack)recipe.getKey()).getItem() == ModItems.scrap_plastic) + continue; + this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); } diff --git a/src/main/java/com/hbm/handler/nei/FractioningHandler.java b/src/main/java/com/hbm/handler/nei/FractioningHandler.java index 282e99ec0..b7a254cb8 100644 --- a/src/main/java/com/hbm/handler/nei/FractioningHandler.java +++ b/src/main/java/com/hbm/handler/nei/FractioningHandler.java @@ -6,6 +6,11 @@ import com.hbm.inventory.recipes.RefineryRecipes; public class FractioningHandler extends NEIUniversalHandler { public FractioningHandler() { - super("ntmFractioning", "Fractioning", ModBlocks.machine_fraction_tower, RefineryRecipes.getFractionRecipesForNEI()); + super("Fractioning", ModBlocks.machine_fraction_tower, RefineryRecipes.getFractionRecipesForNEI()); + } + + @Override + public String getKey() { + return "ntmFractioning"; } } diff --git a/src/main/java/com/hbm/handler/nei/LiquefactionHandler.java b/src/main/java/com/hbm/handler/nei/LiquefactionHandler.java index 076bdcf11..b3f31e9cb 100644 --- a/src/main/java/com/hbm/handler/nei/LiquefactionHandler.java +++ b/src/main/java/com/hbm/handler/nei/LiquefactionHandler.java @@ -6,6 +6,11 @@ import com.hbm.inventory.recipes.LiquefactionRecipes; public class LiquefactionHandler extends NEIUniversalHandler { public LiquefactionHandler() { - super("ntmLiquefaction", "Liquefaction", ModBlocks.machine_liquefactor, LiquefactionRecipes.getRecipes()); + super("Liquefaction", ModBlocks.machine_liquefactor, LiquefactionRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmLiquefaction"; } } diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 4b139f1f9..96a1c667e 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -30,21 +30,19 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { /// SETUP /// public final String display; - public final String key; public final ItemStack[] machine; public final HashMap recipes; /// SETUP /// - public NEIUniversalHandler(String key, String display, ItemStack machine[], HashMap recipes) { - this.key = key; + public NEIUniversalHandler(String display, ItemStack machine[], HashMap recipes) { this.display = display; this.machine = machine; this.recipes = recipes; } - public NEIUniversalHandler(String key, String display, ItemStack machine, HashMap recipes) { this(key, display, new ItemStack[]{machine}, recipes); } - public NEIUniversalHandler(String key, String display, Item machine, HashMap recipes) { this(key, display, new ItemStack(machine), recipes); } - public NEIUniversalHandler(String key, String display, Block machine, HashMap recipes) { this(key, display, new ItemStack(machine), recipes); } + public NEIUniversalHandler(String display, ItemStack machine, HashMap recipes) { this(display, new ItemStack[]{machine}, recipes); } + public NEIUniversalHandler(String display, Item machine, HashMap recipes) { this(display, new ItemStack(machine), recipes); } + public NEIUniversalHandler(String display, Block machine, HashMap recipes) { this(display, new ItemStack(machine), recipes); } public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { @@ -116,7 +114,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { @Override public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals(key)) { + if(outputId.equals(getKey())) { for(Entry recipe : recipes.entrySet()) { ItemStack[][] ins = InventoryUtil.extractObject(recipe.getKey()); @@ -150,9 +148,8 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { @Override public void loadUsageRecipes(String inputId, Object... ingredients) { - - if(inputId.equals(key)) { - loadCraftingRecipes(key, new Object[0]); + if(inputId.equals(getKey())) { + loadCraftingRecipes(getKey(), new Object[0]); } else { super.loadUsageRecipes(inputId, ingredients); } @@ -182,10 +179,12 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { transferRectsGui = new LinkedList(); //guiGui = new LinkedList>(); - transferRects.add(new RecipeTransferRect(new Rectangle(147, 1, 18, 18), key)); + transferRects.add(new RecipeTransferRect(new Rectangle(147, 1, 18, 18), getKey())); //transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), key)); //guiGui.add(GUIMachineAssembler.class); RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); //RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); } + + public abstract String getKey(); } diff --git a/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java b/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java index d11186c53..77ea8225c 100644 --- a/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java @@ -8,11 +8,16 @@ import net.minecraft.item.ItemStack; public class RTGRecipeHandler extends NEIUniversalHandler { public RTGRecipeHandler() { - super("ntmRTG", "RTG", new ItemStack[] { + super("RTG", new ItemStack[] { new ItemStack(ModBlocks.machine_rtg_grey), new ItemStack(ModBlocks.machine_difurnace_rtg_off), new ItemStack(ModBlocks.machine_industrial_generator), new ItemStack(ModBlocks.machine_rtg_furnace_off) }, ItemRTGPellet.getRecipeMap()); } + + @Override + public String getKey() { + return "ntmRTG"; + } } diff --git a/src/main/java/com/hbm/handler/nei/SolidificationHandler.java b/src/main/java/com/hbm/handler/nei/SolidificationHandler.java index 42750936c..96a066b03 100644 --- a/src/main/java/com/hbm/handler/nei/SolidificationHandler.java +++ b/src/main/java/com/hbm/handler/nei/SolidificationHandler.java @@ -3,9 +3,16 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.SolidificationRecipes; +import codechicken.nei.recipe.TemplateRecipeHandler; + public class SolidificationHandler extends NEIUniversalHandler { public SolidificationHandler() { - super("ntmSolidification", "Solidification", ModBlocks.machine_solidifier, SolidificationRecipes.getRecipes()); + super("Solidification", ModBlocks.machine_solidifier, SolidificationRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmSolidification"; } } diff --git a/src/main/java/com/hbm/handler/nei/ZirnoxRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ZirnoxRecipeHandler.java index b3f0b072e..a39208d98 100644 --- a/src/main/java/com/hbm/handler/nei/ZirnoxRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/ZirnoxRecipeHandler.java @@ -6,6 +6,11 @@ import com.hbm.tileentity.machine.TileEntityReactorZirnox; public class ZirnoxRecipeHandler extends NEIUniversalHandler { public ZirnoxRecipeHandler() { - super("ntmZirnox", "ZIRNOX", ModBlocks.reactor_zirnox, TileEntityReactorZirnox.fuelMap); + super("ZIRNOX", ModBlocks.reactor_zirnox, TileEntityReactorZirnox.fuelMap); + } + + @Override + public String getKey() { + return "ntmZirnox"; } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 411f4f8c3..7a07a051d 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -271,6 +271,8 @@ public class ModItems { public static Item nugget_lead; public static Item ingot_bismuth; public static Item nugget_bismuth; + public static Item ingot_arsenic; + public static Item nugget_arsenic; public static Item ingot_tantalium; public static Item nugget_tantalium; public static Item ingot_niobium; @@ -544,6 +546,8 @@ public class ModItems { public static Item circuit_schrabidium; public static Item circuit_bismuth_raw; public static Item circuit_bismuth; + public static Item circuit_arsenic_raw; + public static Item circuit_arsenic; public static Item circuit_tantalium_raw; public static Item circuit_tantalium; public static Item crt_display; @@ -2814,6 +2818,8 @@ public class ModItems { nugget_lead = new Item().setUnlocalizedName("nugget_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_lead"); ingot_bismuth = new ItemCustomLore().setUnlocalizedName("ingot_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bismuth"); nugget_bismuth = new Item().setUnlocalizedName("nugget_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_bismuth"); + ingot_arsenic = new ItemCustomLore().setUnlocalizedName("ingot_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_arsenic"); + nugget_arsenic = new Item().setUnlocalizedName("nugget_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_arsenic"); ingot_tantalium = new ItemCustomLore().setUnlocalizedName("ingot_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tantalium"); nugget_tantalium = new ItemCustomLore().setUnlocalizedName("nugget_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_tantalium"); ingot_niobium = new Item().setUnlocalizedName("ingot_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_niobium"); @@ -3101,6 +3107,8 @@ public class ModItems { circuit_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("circuit_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_schrabidium"); circuit_bismuth_raw = new Item().setUnlocalizedName("circuit_bismuth_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_bismuth_raw"); circuit_bismuth = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_bismuth"); + circuit_arsenic_raw = new Item().setUnlocalizedName("circuit_arsenic_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_arsenic_raw"); + circuit_arsenic = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_arsenic"); circuit_tantalium_raw = new Item().setUnlocalizedName("circuit_tantalium_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_tantalium_raw"); circuit_tantalium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit_tantalium"); crt_display = new Item().setUnlocalizedName("crt_display").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crt_display"); @@ -5685,6 +5693,7 @@ public class ModItems { GameRegistry.registerItem(ingot_tcalloy, ingot_tcalloy.getUnlocalizedName()); GameRegistry.registerItem(ingot_lead, ingot_lead.getUnlocalizedName()); GameRegistry.registerItem(ingot_bismuth, ingot_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(ingot_arsenic, ingot_arsenic.getUnlocalizedName()); GameRegistry.registerItem(ingot_tantalium, ingot_tantalium.getUnlocalizedName()); GameRegistry.registerItem(ingot_niobium, ingot_niobium.getUnlocalizedName()); GameRegistry.registerItem(ingot_beryllium, ingot_beryllium.getUnlocalizedName()); @@ -6005,6 +6014,7 @@ public class ModItems { GameRegistry.registerItem(nugget_actinium, nugget_actinium.getUnlocalizedName()); GameRegistry.registerItem(nugget_lead, nugget_lead.getUnlocalizedName()); GameRegistry.registerItem(nugget_bismuth, nugget_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(nugget_arsenic, nugget_arsenic.getUnlocalizedName()); GameRegistry.registerItem(nugget_tantalium, nugget_tantalium.getUnlocalizedName()); GameRegistry.registerItem(nugget_beryllium, nugget_beryllium.getUnlocalizedName()); GameRegistry.registerItem(nugget_schrabidium, nugget_schrabidium.getUnlocalizedName()); @@ -6217,6 +6227,8 @@ public class ModItems { GameRegistry.registerItem(circuit_schrabidium, circuit_schrabidium.getUnlocalizedName()); GameRegistry.registerItem(circuit_bismuth_raw, circuit_bismuth_raw.getUnlocalizedName()); GameRegistry.registerItem(circuit_bismuth, circuit_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(circuit_arsenic_raw, circuit_arsenic_raw.getUnlocalizedName()); + GameRegistry.registerItem(circuit_arsenic, circuit_arsenic.getUnlocalizedName()); GameRegistry.registerItem(circuit_tantalium_raw, circuit_tantalium_raw.getUnlocalizedName()); GameRegistry.registerItem(circuit_tantalium, circuit_tantalium.getUnlocalizedName()); GameRegistry.registerItem(crt_display, crt_display.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/world/feature/OilSpot.java b/src/main/java/com/hbm/world/feature/OilSpot.java index 8b6d0d52b..35fc16e2d 100644 --- a/src/main/java/com/hbm/world/feature/OilSpot.java +++ b/src/main/java/com/hbm/world/feature/OilSpot.java @@ -14,22 +14,32 @@ public class OilSpot { for(int i = 0; i < count; i++) { int rX = x + (int)(world.rand.nextGaussian() * width); int rZ = z + (int)(world.rand.nextGaussian() * width); - int rY = world.getHeightValue(rX, rZ) - 1; + int rY = world.getHeightValue(rX, rZ); - Block ground = world.getBlock(rX, rY, rZ); - - if(ground == Blocks.grass || ground == Blocks.dirt) { - world.setBlock(rX, rY, rZ, world.rand.nextInt(10) == 0 ? ModBlocks.dirt_oily : ModBlocks.dirt_dead); + for(int y = rY; y > rY - 4; y--) { - } else if(ground == Blocks.sand || ground == ModBlocks.ore_oil_sand) { + Block ground = world.getBlock(rX, y, rZ); - if(world.getBlockMetadata(rX, rY, rZ) == 1) - world.setBlock(rX, rY, rZ, ModBlocks.sand_dirty_red); - else - world.setBlock(rX, rY, rZ, ModBlocks.sand_dirty); - - } else if(ground.getMaterial() == Material.leaves) { - world.setBlockToAir(rX, rY, rZ); + if(ground == Blocks.grass || ground == Blocks.dirt) { + world.setBlock(rX, y, rZ, world.rand.nextInt(10) == 0 ? ModBlocks.dirt_oily : ModBlocks.dirt_dead); + break; + + } else if(ground == Blocks.sand || ground == ModBlocks.ore_oil_sand) { + + if(world.getBlockMetadata(rX, y, rZ) == 1) + world.setBlock(rX, y, rZ, ModBlocks.sand_dirty_red); + else + world.setBlock(rX, y, rZ, ModBlocks.sand_dirty); + break; + + } else if(ground == Blocks.stone) { + world.setBlock(rX, y, rZ, ModBlocks.stone_cracked); + break; + + } else if(ground.getMaterial() == Material.leaves) { + world.setBlockToAir(rX, y, rZ); + break; + } } } } diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_cracked.png b/src/main/resources/assets/hbm/textures/blocks/stone_cracked.png new file mode 100644 index 0000000000000000000000000000000000000000..2e76ed9112c386962e283c8a445d86052d350163 GIT binary patch literal 753 zcmV19V*{m&=i+DW2!yI1Z1Gk8Evi0U)JZ01Ssi#^W(NJ3CCLQ-UDi z;NSqI6mM^DD5Y>+mrkccqtU=|9D*RgvaAI_qtRe>b(M#Q2b5BHo=34*MAvot{XX@2 zo#}MSY&IhZ0X$*AYUH&*zsLGG1R_xx2d~%QCjN zx6ySS(=_?`_@GcIpp;@`V}o9=N0w#8ag46(c%HXlU>F9?W|K5cIX^!~2tlb-!nSQj zqtTL)VHl)oO1Ilx4$I|o7^Z0w1OZAZj*gC)&1Up^Jpg>)=jP^S$wo>^xm;e}M;L}^ zKZjJS)zCDJ=jUgd%_e7OXQXM0Qi@KegJoH)udlPayNl;}gkcDPF&>W*LJ)=_wrw+? z&xzxhFbo-uMx36WVp$efS65_NhVT17+7~7YA&^p%BneVVG)-eVodS>~36^DHSr)Zg z4W$(AcAF@Qux%S5#6m*3TxL8T6NVutCnrcLab1_ay*(~3FL`-+Ax%@}^Eswz;<_%? zY8B7(_|s~&GNlwrk`P4^nx-ual~UyMc}&wJpU=~7x7pm>{P!Dwzo==Ne13l7`#!+Z jD1gaiLa9{xry1ZcCLTy~!qB-900000NkvXXu0mjf^X*N| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/circuit_arsenic.png b/src/main/resources/assets/hbm/textures/items/circuit_arsenic.png new file mode 100644 index 0000000000000000000000000000000000000000..142a7f4a4845cad791e23d4b458ad69773ade029 GIT binary patch literal 474 zcmV<00VV#4P)N@0)>t47V)V>-7SFBqU*GNTT2GFTAfM zy4`MQG#at+BcS@yG<6Grs;imt`S`d@h5!;yVlo^uJ~@f7!C>G3niU{~!0ORaES%il zf*DQ%Gp0{ZeA(T_N&G%NjZ-%PI-O3C#N_S{Bv#hfaYX@U@D6a^^Y-`%65e}~BnhL@ z$TjE9nw^~?iPghHcn3JCgcJqi>+6~)aRTo>lK6UXP-@Qea)PS6g!7(_ogFaa=lS_^ zKsFrWBv#hepeUk#B=DZ;^K+E26fnNHC?)Lg*CxOWyyw@=O>LbufSIwmw-+Tu54?~6 z@7voriL1*?%nX1}0BM>!?>*W5J=wzp%x0wz6{sk1MZw$43)9zEB$4O2s~u9i-42z* z-?p}xW*M&19|AbXkA6RHAcRl{03=Bg{&vE1>svhK`DnFT;bZZ9*Z&%S0436bbsmGC Q`v3p{07*qoM6N<$g5#IhsQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/circuit_arsenic_raw.png b/src/main/resources/assets/hbm/textures/items/circuit_arsenic_raw.png new file mode 100644 index 0000000000000000000000000000000000000000..55b308cf7c7c5c8f95bd6f3912166bdc928705d8 GIT binary patch literal 420 zcmV;V0bBlwP)Bb5Qd+%E^4bb$&0u z>H59}xVpW~3f6)MMuf$1NVn0j0LM8YmvnsJUgsJYg8`^wL_n4J^_Bf%5hKEVv+3M8 z2PMyAF&cpgg`*=(l7K3#1WcOp6^0-}9?v-qa*XHFWw4$Xf_Q>A+*MI z9E4J2FE6y)ZShyY`;!xcQlJ!@^*Y(}Gs`SPD1}?85cxjC!Qd4l02-&K2CWfF;dvh6 z+8QXuY&?DqdzA`d5Fn%^n@q^kl=j7i5RJ1lv%SC1`1Y1?eH|esNVy89DJX^KxKIc+Xf+U0B{_NJZIeN@vhlq zczw-N98*lE2(9s=2$W)(=SV5RvT%a{V_Dw;0G7ov&-oI^jQf3-iv_~AaeW`76vcc_ zDJ7L!jZv>hG8%Dzb0bz?Xtj(Rh7?)G_Q3(4FE3Zet5#RF)09yhgE0uLxxc#leFu$J z%K&Wb?lQT%!>iT!)aiiM2(9_p>HKkYKbb!uqiz?prgwh+=2HI+eFMO_?DhKQ?#}=K N002ovPDHLkV1kN%=MDe> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/nugget_arsenic.png b/src/main/resources/assets/hbm/textures/items/nugget_arsenic.png new file mode 100644 index 0000000000000000000000000000000000000000..a59ba352168b9dad72c005a8895f4df4c45e3a89 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyU$h>wUKF1VsssgKh%bwg?-Fdx)Qq4X%{Z78a1^);7&ZJd|g)X`0#YM~pR3 z{~S+Gd(i)Z)#$X&ffTdk@M&@9B~R#V{%oQeskc+UKjvF?+3mHLdFO1sHp%1U-c<(M zr5_ulgo<2S+81-!Q$)~aK1*!-zBt3&?toX{g&D#s^OhI(RM}X_^UZm6>!p=BgFw{c z*=-A73mp5gMW5Bn@QdyGeeH=K#A;Ia-n`K|<=peXKR>Yj5^{bUaZ-FL&>sw*u6{1- HoD!M Date: Wed, 6 Apr 2022 11:53:28 +0200 Subject: [PATCH 28/31] spicy ME drives --- .../java/com/hbm/hazard/HazardRegistry.java | 3 +- .../HazardTransformerRadiationME.java | 33 +++++++++++++++++++ src/main/java/com/hbm/util/Compat.java | 31 +++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationME.java diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 4c8e4838c..d13c83de2 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -6,7 +6,7 @@ import static com.hbm.inventory.OreDictManager.*; import com.hbm.blocks.ModBlocks; import com.hbm.hazard.modifier.*; -import com.hbm.hazard.transformer.HazardTransformerRadiationNBT; +import com.hbm.hazard.transformer.*; import com.hbm.hazard.type.*; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; @@ -469,6 +469,7 @@ public class HazardRegistry { public static void registerTrafos() { HazardSystem.trafos.add(new HazardTransformerRadiationNBT()); + HazardSystem.trafos.add(new HazardTransformerRadiationME()); } private static HazardData makeData() { return new HazardData(); } diff --git a/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationME.java b/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationME.java new file mode 100644 index 000000000..df387ac6c --- /dev/null +++ b/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationME.java @@ -0,0 +1,33 @@ +package com.hbm.hazard.transformer; + +import java.util.List; + +import com.hbm.hazard.HazardEntry; +import com.hbm.hazard.HazardRegistry; +import com.hbm.hazard.HazardSystem; +import com.hbm.util.Compat; + +import net.minecraft.item.ItemStack; + +public class HazardTransformerRadiationME extends HazardTransformerBase { + + @Override + public void transformPre(ItemStack stack, List entries) { } + + @Override + public void transformPost(ItemStack stack, List entries) { + + if(stack.getItem().getClass().getName().equals("appeng.items.storage.ItemBasicStorageCell")) { + List stacks = Compat.scrapeItemFromME(stack); + float radiation = 0; + + for(ItemStack held : stacks) { + radiation += HazardSystem.getHazardLevelFromStack(held, HazardRegistry.RADIATION); + } + + if(radiation > 0) { + entries.add(new HazardEntry(HazardRegistry.RADIATION, radiation)); + } + } + } +} diff --git a/src/main/java/com/hbm/util/Compat.java b/src/main/java/com/hbm/util/Compat.java index 643ef1f91..ed5eb304d 100644 --- a/src/main/java/com/hbm/util/Compat.java +++ b/src/main/java/com/hbm/util/Compat.java @@ -1,8 +1,14 @@ package com.hbm.util; +import java.util.ArrayList; +import java.util.List; + import com.hbm.hazard.HazardRegistry; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; public class Compat { @@ -62,4 +68,29 @@ public class Compat { return this.rads; } } + + public static List scrapeItemFromME(ItemStack meDrive) { + List stacks = new ArrayList(); + + if(meDrive != null && meDrive.hasTagCompound()) { + NBTTagCompound nbt = meDrive.getTagCompound(); + int types = nbt.getShort("it"); //ITEM_TYPE_TAG + + for(int i = 0; i < types; i++) { + NBTBase stackTag = nbt.getTag("#" + i); + + if(stackTag instanceof NBTTagCompound) { + NBTTagCompound compound = (NBTTagCompound) stackTag; + ItemStack stack = ItemStack.loadItemStackFromNBT(compound); + + int count = nbt.getInteger("@" + i); + stack.stackSize = count; + + stacks.add(stack); + } + } + } + + return stacks; + } } From 4071fc87bb32514d88d786248b3db8c817c1cc31 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 6 Apr 2022 13:32:17 +0200 Subject: [PATCH 29/31] cleaned up some configs, more radiation config options --- .../com/hbm/blocks/generic/WasteEarth.java | 4 +- src/main/java/com/hbm/config/BombConfig.java | 13 ++++++- .../java/com/hbm/config/CommonConfig.java | 26 +++++++++++-- .../java/com/hbm/config/GeneralConfig.java | 16 +------- .../java/com/hbm/config/MachineConfig.java | 2 +- src/main/java/com/hbm/config/MobConfig.java | 2 +- .../java/com/hbm/config/PotionConfig.java | 2 +- .../java/com/hbm/config/RadiationConfig.java | 38 ++++++++----------- src/main/java/com/hbm/config/ToolConfig.java | 2 +- .../java/com/hbm/config/WeaponConfig.java | 4 +- src/main/java/com/hbm/config/WorldConfig.java | 27 ++++++------- .../hbm/entity/effect/EntityFalloutRain.java | 8 ++-- .../hbm/entity/projectile/EntityMeteor.java | 6 +-- .../java/com/hbm/extprop/HbmLivingProps.java | 11 +++++- .../com/hbm/handler/BossSpawnHandler.java | 4 +- .../com/hbm/handler/EntityEffectHandler.java | 8 ++-- .../radiation/ChunkRadiationManager.java | 12 +++--- .../java/com/hbm/items/armor/ArmorFSB.java | 4 ++ .../java/com/hbm/main/ModEventHandler.java | 2 +- .../java/com/hbm/util/ContaminationUtil.java | 3 +- .../java/com/hbm/world/feature/Meteorite.java | 3 +- 21 files changed, 110 insertions(+), 87 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/WasteEarth.java b/src/main/java/com/hbm/blocks/generic/WasteEarth.java index e6e876f24..419574181 100644 --- a/src/main/java/com/hbm/blocks/generic/WasteEarth.java +++ b/src/main/java/com/hbm/blocks/generic/WasteEarth.java @@ -4,8 +4,8 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; +import com.hbm.config.RadiationConfig; import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; import com.hbm.potion.HbmPotion; import cpw.mods.fml.relauncher.Side; @@ -159,7 +159,7 @@ public class WasteEarth extends Block { if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) { - if(GeneralConfig.enableAutoCleanup || (world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2)) { + if(RadiationConfig.cleanupDeadDirt || (world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2)) { world.setBlock(x, y, z, Blocks.dirt); } diff --git a/src/main/java/com/hbm/config/BombConfig.java b/src/main/java/com/hbm/config/BombConfig.java index 8e325df4f..3ad1da586 100644 --- a/src/main/java/com/hbm/config/BombConfig.java +++ b/src/main/java/com/hbm/config/BombConfig.java @@ -25,10 +25,12 @@ public class BombConfig { public static int falloutRange = 100; public static int fDelay = 4; public static int limitExplosionLifespan = 0; + public static int rain = 0; + public static int cont = 0; public static void loadFromConfig(Configuration config) { - final String CATEGORY_NUKES = "03_nukes"; + final String CATEGORY_NUKES = CommonConfig.CATEGORY_NUKES; Property propGadget = config.get(CATEGORY_NUKES, "3.00_gadgetRadius", 150); propGadget.comment = "Radius of the Gadget"; gadgetRadius = propGadget.getInt(); @@ -72,7 +74,7 @@ public class BombConfig { propN2.comment = "Radius of the N2 mine"; n2Radius = propN2.getInt(); - final String CATEGORY_NUKE = "06_explosions"; + final String CATEGORY_NUKE = CommonConfig.CATEGORY_EXPLOSIONS; Property propLimitExplosionLifespan = config.get(CATEGORY_NUKE, "6.00_limitExplosionLifespan", 0); propLimitExplosionLifespan.comment = "How long an explosion can be unloaded until it dies in seconds. Based of system time. 0 disables the effect"; limitExplosionLifespan = propLimitExplosionLifespan.getInt(); @@ -91,5 +93,12 @@ public class BombConfig { Property falloutDelayProp = config.get(CATEGORY_NUKE, "6.04_falloutDelay", 4); falloutDelayProp.comment = "How many ticks to wait for the next fallout chunk computation"; fDelay = falloutDelayProp.getInt(); + + Property radRain = config.get(CATEGORY_NUKE, "6.05_falloutRainDuration", 0); + radRain.comment = "Duration of the thunderstorm after fallout in ticks (only large explosions)"; + rain = radRain.getInt(); + Property rainCont = config.get(CATEGORY_NUKE, "6.06_falloutRainRadiation", 0); + rainCont.comment = "Radiation in 100th RADs created by fallout rain"; + cont = rainCont.getInt(); } } diff --git a/src/main/java/com/hbm/config/CommonConfig.java b/src/main/java/com/hbm/config/CommonConfig.java index 59cc4f297..2c9b88e1e 100644 --- a/src/main/java/com/hbm/config/CommonConfig.java +++ b/src/main/java/com/hbm/config/CommonConfig.java @@ -6,6 +6,22 @@ import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; public class CommonConfig { + + public static final String CATEGORY_GENERAL = "01_general"; + public static final String CATEGORY_ORES = "02_ores"; + public static final String CATEGORY_NUKES = "03_nukes"; + public static final String CATEGORY_DUNGEONS = "04_dungeons"; + public static final String CATEGORY_METEORS = "05_meteors"; + public static final String CATEGORY_EXPLOSIONS = "06_explosions"; + public static final String CATEGORY_MISSILE = "07_missile_machines"; + public static final String CATEGORY_POTION = "08_potion_effects"; + public static final String CATEGORY_MACHINES = "09_machines"; + public static final String CATEGORY_DROPS = "10_dangerous_drops"; + public static final String CATEGORY_TOOLS = "11_tools"; + public static final String CATEGORY_MOBS = "12_mobs"; + public static final String CATEGORY_RADIATION = "13_radiation"; + + public static final String CATEGORY_528 = "528"; public static int setDefZero(int value, int def) { @@ -30,28 +46,30 @@ public class CommonConfig { } public static int createConfigInt(Configuration config, String category, String name, String comment, int def) { - Property prop = config.get(category, name, def); prop.comment = comment; return prop.getInt(); } - public static boolean createConfigBool(Configuration config, String category, String name, String comment, boolean def) { + public static double createConfigDouble(Configuration config, String category, String name, String comment, double def) { + Property prop = config.get(category, name, def); + prop.comment = comment; + return prop.getDouble(); + } + public static boolean createConfigBool(Configuration config, String category, String name, String comment, boolean def) { Property prop = config.get(category, name, def); prop.comment = comment; return prop.getBoolean(); } public static String createConfigString(Configuration config, String category, String name, String comment, String def) { - Property prop = config.get(category, name, def); prop.comment = comment; return prop.getString(); } public static String[] createConfigStringList(Configuration config, String category, String name, String comment) { - Property prop = config.get(category, name, new String[] { "PLACEHOLDER" }); prop.comment = comment; return prop.getStringList(); diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index 391ad8516..8330e60c2 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -13,14 +13,8 @@ public class GeneralConfig { public static boolean enableRad = true; public static boolean enableNITAN = true; public static boolean enableNukeClouds = true; - public static boolean enableAutoCleanup = false; - public static boolean enableMeteorStrikes = true; - public static boolean enableMeteorShowers = true; - public static boolean enableMeteorTails = true; - public static boolean enableSpecialMeteors = true; public static boolean enableBomberShortMode = false; public static boolean enableVaults = true; - public static boolean enableRads = true; public static boolean enableCataclysm = false; public static boolean enableExtendedLogging = false; public static boolean enableHardcoreTaint = false; @@ -42,7 +36,7 @@ public class GeneralConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY_GENERAL = "01_general"; + final String CATEGORY_GENERAL = CommonConfig.CATEGORY_GENERAL; enableDebugMode = config.get(CATEGORY_GENERAL, "1.00_enableDebugMode", false).getBoolean(false); enableMycelium = config.get(CATEGORY_GENERAL, "1.01_enableMyceliumSpread", false).getBoolean(false); enablePlutoniumOre = config.get(CATEGORY_GENERAL, "1.02_enablePlutoniumNetherOre", false).getBoolean(false); @@ -52,14 +46,8 @@ public class GeneralConfig { enableRad = config.get(CATEGORY_GENERAL, "1.06_enableRadHotspotSpawn", true).getBoolean(true); enableNITAN = config.get(CATEGORY_GENERAL, "1.07_enableNITANChestSpawn", true).getBoolean(true); enableNukeClouds = config.get(CATEGORY_GENERAL, "1.08_enableMushroomClouds", true).getBoolean(true); - enableAutoCleanup = config.get(CATEGORY_GENERAL, "1.09_enableAutomaticRadCleanup", false).getBoolean(false); - enableMeteorStrikes = config.get(CATEGORY_GENERAL, "1.10_enableMeteorStrikes", true).getBoolean(true); - enableMeteorShowers = config.get(CATEGORY_GENERAL, "1.11_enableMeteorShowers", true).getBoolean(true); - enableMeteorTails = config.get(CATEGORY_GENERAL, "1.12_enableMeteorTails", true).getBoolean(true); - enableSpecialMeteors = config.get(CATEGORY_GENERAL, "1.13_enableSpecialMeteors", false).getBoolean(false); enableBomberShortMode = config.get(CATEGORY_GENERAL, "1.14_enableBomberShortMode", false).getBoolean(false); enableVaults = config.get(CATEGORY_GENERAL, "1.15_enableVaultSpawn", true).getBoolean(true); - enableRads = config.get(CATEGORY_GENERAL, "1.16_enableNewRadiation", true).getBoolean(true); enableCataclysm = config.get(CATEGORY_GENERAL, "1.17_enableCataclysm", false).getBoolean(false); enableExtendedLogging = config.get(CATEGORY_GENERAL, "1.18_enableExtendedLogging", false).getBoolean(false); enableHardcoreTaint = config.get(CATEGORY_GENERAL, "1.19_enableHardcoreTaint", false).getBoolean(false); @@ -70,7 +58,7 @@ public class GeneralConfig { enableReflectorCompat = config.get(CATEGORY_GENERAL, "1.24_enableReflectorCompat", false).getBoolean(false); enableRenderDistCheck = config.get(CATEGORY_GENERAL, "1.25_enableRenderDistCheck", true).getBoolean(true); - final String CATEGORY_528 = "528"; + final String CATEGORY_528 = CommonConfig.CATEGORY_528; config.addCustomCategoryComment(CATEGORY_528, "CAUTION\n" + "528 Mode: Please proceed with caution!\n" diff --git a/src/main/java/com/hbm/config/MachineConfig.java b/src/main/java/com/hbm/config/MachineConfig.java index 555bfd4a8..ffa932dde 100644 --- a/src/main/java/com/hbm/config/MachineConfig.java +++ b/src/main/java/com/hbm/config/MachineConfig.java @@ -9,7 +9,7 @@ public class MachineConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY_MACHINE = "09_machines"; + final String CATEGORY_MACHINE = CommonConfig.CATEGORY_MACHINES; scaleRTGPower = CommonConfig.createConfigBool(config, CATEGORY_MACHINE, "9.00_scaleRTGPower", "Should RTG/Betavoltaic fuel power scale down as it decays?", false); doRTGsDecay = CommonConfig.createConfigBool(config, CATEGORY_MACHINE, "9.01_doRTGsDecay", "Should RTG/Betavoltaic fuel decay at all?", true); diff --git a/src/main/java/com/hbm/config/MobConfig.java b/src/main/java/com/hbm/config/MobConfig.java index c98ee9c95..cd01ac0c8 100644 --- a/src/main/java/com/hbm/config/MobConfig.java +++ b/src/main/java/com/hbm/config/MobConfig.java @@ -29,7 +29,7 @@ public class MobConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY = "12_mobs"; + final String CATEGORY = CommonConfig.CATEGORY_MOBS; enableMaskman = CommonConfig.createConfigBool(config, CATEGORY, "12.M00_enableMaskman", "Whether mask man should spawn", true); maskmanDelay = CommonConfig.createConfigInt(config, CATEGORY, "12.M01_maskmanDelay", "How many world ticks need to pass for a check to be performed", 60 * 60 * 60); diff --git a/src/main/java/com/hbm/config/PotionConfig.java b/src/main/java/com/hbm/config/PotionConfig.java index 415c77e3f..cf235cd68 100644 --- a/src/main/java/com/hbm/config/PotionConfig.java +++ b/src/main/java/com/hbm/config/PotionConfig.java @@ -20,7 +20,7 @@ public class PotionConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY_POTION = "08_potion_effects"; + final String CATEGORY_POTION = CommonConfig.CATEGORY_POTION; taintID = CommonConfig.createConfigInt(config, CATEGORY_POTION, "8.00_taintPotionID", "What potion ID the taint effect will have", 62); radiationID = CommonConfig.createConfigInt(config, CATEGORY_POTION, "8.01_radiationPotionID", "What potion ID the radiation effect will have", 63); bangID = CommonConfig.createConfigInt(config, CATEGORY_POTION, "8.02_bangPotionID", "What potion ID the B93 timebomb effect will have", 64); diff --git a/src/main/java/com/hbm/config/RadiationConfig.java b/src/main/java/com/hbm/config/RadiationConfig.java index 446497037..9723b9001 100644 --- a/src/main/java/com/hbm/config/RadiationConfig.java +++ b/src/main/java/com/hbm/config/RadiationConfig.java @@ -5,37 +5,31 @@ import net.minecraftforge.common.config.Property; public class RadiationConfig { - public static int rain = 0; - public static int cont = 0; public static int fogRad = 100; public static int fogCh = 20; - public static float hellRad = 0.1F; + public static double hellRad = 0.1; public static int worldRad = 10; public static int worldRadThreshold = 20; public static boolean worldRadEffects = true; + public static boolean cleanupDeadDirt = false; + + public static boolean enableContamination = true; + public static boolean enableChunkRads = true; public static void loadFromConfig(Configuration config) { - final String CATEGORY_NUKE = "06_explosions"; + final String CATEGORY_NUKE = CommonConfig.CATEGORY_RADIATION; - Property radRain = config.get(CATEGORY_NUKE, "6.05_falloutRainDuration", 0); - radRain.comment = "Duration of the thunderstorm after fallout in ticks (only large explosions)"; - rain = radRain.getInt(); - Property rainCont = config.get(CATEGORY_NUKE, "6.06_falloutRainRadiation", 0); - rainCont.comment = "Radiation in 100th RADs created by fallout rain"; - cont = rainCont.getInt(); - Property fogThresh = config.get(CATEGORY_NUKE, "6.07_fogThreshold", 100); - fogThresh.comment = "Radiation in RADs required for fog to spawn"; - fogRad = fogThresh.getInt(); - Property fogChance = config.get(CATEGORY_NUKE, "6.08_fogChance", 10); - fogChance.comment = "1:n chance of fog spawning every second"; - fogCh = fogChance.getInt(); - Property netherRad = config.get(CATEGORY_NUKE, "6.09_netherRad", 10); - netherRad.comment = "RAD/s in the nether in hundredths"; - hellRad = netherRad.getInt() * 0.01F; - worldRad = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "6.10_worldRadCount", "How many block operations radiation can perform per tick", 10); - worldRadThreshold = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "6.11_worldRadThreshold", "The least amount of RADs required for block modification to happen", 20); - worldRadEffects = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.12_worldRadEffects", "Whether high radiation levels should perform changes in the world", true); + fogRad = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "FOG_00_threshold", "Radiation in RADs required for fog to spawn", 100); + fogCh = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "FOG_01_threshold", "1:n chance of fog spawning every second", 20); + hellRad = CommonConfig.createConfigDouble(config, CATEGORY_NUKE, "AMBIENT_00_nether", "RAD/s in the nether", 0.1D); + worldRadEffects = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "RADWORLD_00_toggle", "Whether high radiation levels should perform changes in the world", true); + worldRad = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "RADWORLD_01_amount", "How many block operations radiation can perform per tick", 10); + worldRadThreshold = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "RADWORLD_02_minimum", "The least amount of RADs required for block modification to happen", 20); + cleanupDeadDirt = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "RADWORLD_03_regrow", "Whether dead grass and mycelium should decay into dirt", false); + + enableContamination = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "RADIATION_00_enableContamination", "Toggles player contamination (and negative effects from radiation poisoning)", true); + enableChunkRads = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "RADIATION_01_enableChunkRads", "Toggles the world radiation system (chunk radiation only, some blocks use an AoE!)", true); fogCh = CommonConfig.setDef(fogCh, 20); } diff --git a/src/main/java/com/hbm/config/ToolConfig.java b/src/main/java/com/hbm/config/ToolConfig.java index c20bb03d5..fd03a0fe7 100644 --- a/src/main/java/com/hbm/config/ToolConfig.java +++ b/src/main/java/com/hbm/config/ToolConfig.java @@ -21,7 +21,7 @@ public class ToolConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY_TOOLS = "11_tools"; + final String CATEGORY_TOOLS = CommonConfig.CATEGORY_TOOLS; recursionDepth = CommonConfig.createConfigInt(config, CATEGORY_TOOLS, "11.00_recursionDepth", "Limits veinminer's recursive function. Usually not an issue, unless you're using bukkit which is especially sensitive for some reason.", 1000); recursiveStone = CommonConfig.createConfigBool(config, CATEGORY_TOOLS, "11.01_recursionStone", "Determines whether veinminer can break stone", false); recursiveNetherrack = CommonConfig.createConfigBool(config, CATEGORY_TOOLS, "11.02_recursionNetherrack", "Determines whether veinminer can break netherrack", false); diff --git a/src/main/java/com/hbm/config/WeaponConfig.java b/src/main/java/com/hbm/config/WeaponConfig.java index c523cef48..88c3dbdae 100644 --- a/src/main/java/com/hbm/config/WeaponConfig.java +++ b/src/main/java/com/hbm/config/WeaponConfig.java @@ -18,7 +18,7 @@ public class WeaponConfig { public static void loadFromConfig(Configuration config) { - final String CATEGORY_MISSILE = "07_missile_machines"; + final String CATEGORY_MISSILE = CommonConfig.CATEGORY_MISSILE; Property propRadarRange = config.get(CATEGORY_MISSILE, "7.00_radarRange", 1000); propRadarRange.comment = "Range of the radar, 50 will result in 100x100 block area covered"; radarRange = propRadarRange.getInt(); @@ -32,7 +32,7 @@ public class WeaponConfig { propCiwsHitrate.comment = "Additional modifier for CIWS accuracy"; ciwsHitrate = propRadarAltitude.getInt(); - final String CATEGORY_DROPS = "10_dangerous_drops"; + final String CATEGORY_DROPS = CommonConfig.CATEGORY_DROPS; dropCell = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.00_dropCell", "Whether antimatter cells should explode when dropped", true); dropSing = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.01_dropBHole", "Whether singularities and black holes should spawn when dropped", true); dropStar = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.02_dropStar", "Whether rigged star blaster cells should explode when dropped", true); diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index 34e6d18a1..5944049ed 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -1,7 +1,6 @@ package com.hbm.config; import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; public class WorldConfig { @@ -77,13 +76,17 @@ public class WorldConfig { public static int radfreq = 5000; public static int vaultfreq = 2500; + public static boolean enableMeteorStrikes = true; + public static boolean enableMeteorShowers = true; + public static boolean enableMeteorTails = true; + public static boolean enableSpecialMeteors = true; public static int meteorStrikeChance = 20 * 60 * 180; public static int meteorShowerChance = 20 * 60 * 5; public static int meteorShowerDuration = 6000; public static void loadFromConfig(Configuration config) { - final String CATEGORY_OREGEN = "02_ores"; + final String CATEGORY_OREGEN = CommonConfig.CATEGORY_ORES; overworldOre = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.D00_overworldOres", "General switch for whether overworld ores should be generated. Does not include special structures like oil.", true); netherOre = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.D01_netherOres", "General switch for whether nether ores should be generated.", true); @@ -130,7 +133,7 @@ public class WorldConfig { enableRandom = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.R00_enableRandomOre", "Amount of random ore per chunk", false); randomSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.R01_randomOreSpawnrate", "Amount of random ore per chunk", 0); - final String CATEGORY_DUNGEON = "04_dungeons"; + final String CATEGORY_DUNGEON = CommonConfig.CATEGORY_DUNGEONS; radioStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.00_radioSpawn", "Spawn radio station on every nTH chunk", 500); antennaStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.01_antennaSpawn", "Spawn antenna on every nTH chunk", 250); atomStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.02_atomSpawn", "Spawn power plant on every nTH chunk", 500); @@ -157,16 +160,14 @@ public class WorldConfig { jungleStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.23_jungleDungeonSpawn", "Spawn jungle dungeon on every nTH chunk", 2000); pyramidStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.24_pyramidSpawn", "Spawn pyramid on every nTH chunk", 4000); - final String CATEGORY_METEOR = "05_meteors"; - Property propMeteorStrikeChance = config.get(CATEGORY_METEOR, "5.00_meteorStrikeChance", 20 * 60 * 60 * 5); - propMeteorStrikeChance.comment = "The probability of a meteor spawning (an average of once every nTH ticks)"; - meteorStrikeChance = propMeteorStrikeChance.getInt(); - Property propMeteorShowerChance = config.get(CATEGORY_METEOR, "5.01_meteorShowerChance", 20 * 60 * 15); - propMeteorShowerChance.comment = "The probability of a meteor spawning during meteor shower (an average of once every nTH ticks)"; - meteorShowerChance = propMeteorShowerChance.getInt(); - Property propMeteorShowerDuration = config.get(CATEGORY_METEOR, "5.02_meteorShowerDuration", 20 * 60 * 30); - propMeteorShowerDuration.comment = "Max duration of meteor shower in ticks"; - meteorShowerDuration = propMeteorShowerDuration.getInt(); + final String CATEGORY_METEOR = CommonConfig.CATEGORY_METEORS; + enableMeteorStrikes = CommonConfig.createConfigBool(config, CATEGORY_METEOR, "5.00_enableMeteorStrikes", "Toggles the spawning of meteors", true); + enableMeteorShowers = CommonConfig.createConfigBool(config, CATEGORY_METEOR, "5.01_enableMeteorShowers", "Toggles meteor showers, which start with a 1% chance for every spawned meteor", true); + enableMeteorTails = CommonConfig.createConfigBool(config, CATEGORY_METEOR, "5.02_enableMeteorTails", "Toggles the particle effect created by falling meteors", true); + enableSpecialMeteors = CommonConfig.createConfigBool(config, CATEGORY_METEOR, "5.03_enableSpecialMeteors", "Toggles rare, special meteor types with different impact effects", true); + meteorStrikeChance = CommonConfig.createConfigInt(config, CATEGORY_METEOR, "5.03_meteorStrikeChance", "The probability of a meteor spawning (an average of once every nTH ticks)", 20 * 60 * 60 * 5); + meteorShowerChance = CommonConfig.createConfigInt(config, CATEGORY_METEOR, "5.04_meteorShowerChance", "The probability of a meteor spawning during meteor shower (an average of once every nTH ticks)", 20 * 60 * 15); + meteorShowerDuration = CommonConfig.createConfigInt(config, CATEGORY_METEOR, "5.05_meteorShowerDuration", "Max duration of meteor shower in ticks", 20 * 60 * 30); radioStructure = CommonConfig.setDefZero(radioStructure, 1000); antennaStructure = CommonConfig.setDefZero(antennaStructure, 1000); diff --git a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java index 67963d3ef..b875bcd87 100644 --- a/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java +++ b/src/main/java/com/hbm/entity/effect/EntityFalloutRain.java @@ -65,12 +65,12 @@ public class EntityFalloutRain extends Entity { tickDelay--; if(this.isDead) { - if(RadiationConfig.rain > 0 && getScale() > 150) { + if(BombConfig.rain > 0 && getScale() > 150) { worldObj.getWorldInfo().setRaining(true); worldObj.getWorldInfo().setThundering(true); - worldObj.getWorldInfo().setRainTime(RadiationConfig.rain); - worldObj.getWorldInfo().setThunderTime(RadiationConfig.rain); - AuxSavedData.setThunder(worldObj, RadiationConfig.rain); + worldObj.getWorldInfo().setRainTime(BombConfig.rain); + worldObj.getWorldInfo().setThunderTime(BombConfig.rain); + AuxSavedData.setThunder(worldObj, BombConfig.rain); } } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java index f0dd248ff..9686b6d23 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java +++ b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java @@ -1,6 +1,6 @@ package com.hbm.entity.projectile; -import com.hbm.config.GeneralConfig; +import com.hbm.config.WorldConfig; import com.hbm.explosion.ExplosionLarge; import com.hbm.main.MainRegistry; import com.hbm.world.feature.Meteorite; @@ -36,7 +36,7 @@ public class EntityMeteor extends Entity { if(!this.worldObj.isRemote && this.onGround && this.posY < 260) { worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 5 + rand.nextFloat(), true); - if(GeneralConfig.enableMeteorTails) { + if(WorldConfig.enableMeteorTails) { ExplosionLarge.spawnParticles(worldObj, posX, posY + 5, posZ, 75); ExplosionLarge.spawnParticles(worldObj, posX + 5, posY, posZ, 75); ExplosionLarge.spawnParticles(worldObj, posX - 5, posY, posZ, 75); @@ -49,7 +49,7 @@ public class EntityMeteor extends Entity { this.setDead(); } - if(GeneralConfig.enableMeteorTails && worldObj.isRemote) { + if(WorldConfig.enableMeteorTails && worldObj.isRemote) { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "exhaust"); diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 99add36c4..9b691a3cb 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import com.hbm.config.RadiationConfig; import com.hbm.entity.mob.EntityDuck; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; @@ -63,14 +64,22 @@ public class HbmLivingProps implements IExtendedEntityProperties { /// RADIATION /// public static float getRadiation(EntityLivingBase entity) { + if(!RadiationConfig.enableContamination) + return 0; + return getData(entity).radiation; } public static void setRadiation(EntityLivingBase entity, float rad) { - getData(entity).radiation = rad; + if(RadiationConfig.enableContamination) + getData(entity).radiation = rad; } public static void incrementRadiation(EntityLivingBase entity, float rad) { + + if(!RadiationConfig.enableContamination) + return; + HbmLivingProps data = getData(entity); float radiation = getData(entity).radiation + rad; diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index bcfe40033..65b042a1d 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -117,7 +117,7 @@ public class BossSpawnHandler { } } - if(GeneralConfig.enableMeteorStrikes && !world.isRemote) { + if(WorldConfig.enableMeteorStrikes && !world.isRemote) { meteorUpdate(world); } @@ -198,7 +198,7 @@ public class BossSpawnHandler { MainRegistry.logger.info("Ended meteor shower."); } - if(meteorRand.nextInt(WorldConfig.meteorStrikeChance * 100) == 0 && GeneralConfig.enableMeteorShowers) { + if(meteorRand.nextInt(WorldConfig.meteorStrikeChance * 100) == 0 && WorldConfig.enableMeteorShowers) { meteorShower = (int)(WorldConfig.meteorShowerDuration * 0.75 + WorldConfig.meteorShowerDuration * 0.25 * meteorRand.nextFloat()); if(GeneralConfig.enableDebugMode) diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index c3cb37de1..49fa4f22d 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import com.hbm.config.BombConfig; import com.hbm.config.GeneralConfig; import com.hbm.config.RadiationConfig; import com.hbm.explosion.ExplosionNukeSmall; @@ -121,15 +122,14 @@ public class EntityEffectHandler { float rad = ChunkRadiationManager.proxy.getRadiation(world, ix, iy, iz); if(world.provider.isHellWorld && RadiationConfig.hellRad > 0 && rad < RadiationConfig.hellRad) - rad = RadiationConfig.hellRad; + rad = (float) RadiationConfig.hellRad; if(rad > 0) { ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, rad / 20F); } - if(entity.worldObj.isRaining() && RadiationConfig.cont > 0 && AuxSavedData.getThunder(entity.worldObj) > 0 && entity.worldObj.canBlockSeeTheSky(ix, iy, iz)) { - - ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, RadiationConfig.cont * 0.0005F); + if(entity.worldObj.isRaining() && BombConfig.cont > 0 && AuxSavedData.getThunder(entity.worldObj) > 0 && entity.worldObj.canBlockSeeTheSky(ix, iy, iz)) { + ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, BombConfig.cont * 0.0005F); } if(entity instanceof EntityPlayer && ((EntityPlayer)entity).capabilities.isCreativeMode) diff --git a/src/main/java/com/hbm/handler/radiation/ChunkRadiationManager.java b/src/main/java/com/hbm/handler/radiation/ChunkRadiationManager.java index 2a327f1fe..4eea00856 100644 --- a/src/main/java/com/hbm/handler/radiation/ChunkRadiationManager.java +++ b/src/main/java/com/hbm/handler/radiation/ChunkRadiationManager.java @@ -16,27 +16,27 @@ public class ChunkRadiationManager { @SubscribeEvent public void onWorldLoad(WorldEvent.Load event) { - proxy.receiveWorldLoad(event); + if(RadiationConfig.enableChunkRads) proxy.receiveWorldLoad(event); } @SubscribeEvent public void onWorldUnload(WorldEvent.Unload event) { - proxy.receiveWorldUnload(event); + if(RadiationConfig.enableChunkRads) proxy.receiveWorldUnload(event); } @SubscribeEvent public void onChunkLoad(ChunkDataEvent.Load event) { - proxy.receiveChunkLoad(event); + if(RadiationConfig.enableChunkRads) proxy.receiveChunkLoad(event); } @SubscribeEvent public void onChunkSave(ChunkDataEvent.Save event) { - proxy.receiveChunkSave(event); + if(RadiationConfig.enableChunkRads) proxy.receiveChunkSave(event); } @SubscribeEvent public void onChunkUnload(ChunkEvent.Unload event) { - proxy.receiveChunkUnload(event); + if(RadiationConfig.enableChunkRads) proxy.receiveChunkUnload(event); } int eggTimer = 0; @@ -44,7 +44,7 @@ public class ChunkRadiationManager { @SubscribeEvent public void updateSystem(TickEvent.ServerTickEvent event) { - if(event.side == Side.SERVER && event.phase == Phase.END) { + if(RadiationConfig.enableChunkRads && event.side == Side.SERVER && event.phase == Phase.END) { eggTimer++; diff --git a/src/main/java/com/hbm/items/armor/ArmorFSB.java b/src/main/java/com/hbm/items/armor/ArmorFSB.java index be08d063c..d86dd00bb 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSB.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSB.java @@ -27,6 +27,7 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -530,6 +531,9 @@ public class ArmorFSB extends ItemArmor implements IArmorDisableModel { List entities = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, player.boundingBox.expand(3, 0, 3)); for(Entity e : entities) { + + if(e instanceof EntityItem) + continue; Vec3 vec = Vec3.createVectorHelper(player.posX - e.posX, 0, player.posZ - e.posZ); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 8913738e7..fb18842c8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -742,7 +742,7 @@ public class ModEventHandler { /// TOM IMPACT END/// /// RADIATION STUFF START /// - if(event.world != null && !event.world.isRemote && GeneralConfig.enableRads) { + if(event.world != null && !event.world.isRemote) { int thunder = AuxSavedData.getThunder(event.world); diff --git a/src/main/java/com/hbm/util/ContaminationUtil.java b/src/main/java/com/hbm/util/ContaminationUtil.java index 6e8705b86..1710ff5cf 100644 --- a/src/main/java/com/hbm/util/ContaminationUtil.java +++ b/src/main/java/com/hbm/util/ContaminationUtil.java @@ -1,6 +1,5 @@ package com.hbm.util; -import com.hbm.config.GeneralConfig; import com.hbm.entity.mob.EntityDuck; import com.hbm.entity.mob.EntityNuclearCreeper; import com.hbm.entity.mob.EntityQuackos; @@ -274,7 +273,7 @@ public class ContaminationUtil { return false; } - if(hazard == HazardType.RADIATION && (isRadImmune(entity) || !GeneralConfig.enableRads)) + if(hazard == HazardType.RADIATION && isRadImmune(entity)) return false; switch(hazard) { diff --git a/src/main/java/com/hbm/world/feature/Meteorite.java b/src/main/java/com/hbm/world/feature/Meteorite.java index 17a09054e..3bbd1612a 100644 --- a/src/main/java/com/hbm/world/feature/Meteorite.java +++ b/src/main/java/com/hbm/world/feature/Meteorite.java @@ -6,6 +6,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; +import com.hbm.config.WorldConfig; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNukeGeneric; @@ -37,7 +38,7 @@ public class Meteorite { e.attackEntityFrom(ModDamageSource.meteorite, 1000); } - if(GeneralConfig.enableSpecialMeteors) + if(WorldConfig.enableSpecialMeteors) switch(rand.nextInt(300)) { case 0: // Meteor-only tiny meteorite From 62f819daca56d43f4b2a6228fa03ecd4a84d9d21 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 6 Apr 2022 16:51:00 +0200 Subject: [PATCH 30/31] made tomb gas even funnier --- .../com/hbm/blocks/gas/BlockGasAsbestos.java | 3 --- .../java/com/hbm/blocks/gas/BlockGasClorine.java | 1 - .../com/hbm/blocks/gas/BlockGasMeltdown.java | 1 - .../com/hbm/blocks/gas/BlockGasMonoxide.java | 3 --- .../java/com/hbm/blocks/gas/BlockGasRadon.java | 1 - .../com/hbm/blocks/gas/BlockGasRadonDense.java | 1 - .../com/hbm/blocks/gas/BlockGasRadonTomb.java | 10 ++++++++-- .../java/com/hbm/inventory/OreDictManager.java | 5 +++++ .../hbm/inventory/recipes/AssemblerRecipes.java | 16 ++++++++-------- .../com/hbm/inventory/recipes/PressRecipes.java | 1 + .../inventory/recipes/anvil/AnvilRecipes.java | 2 +- src/main/java/com/hbm/main/CraftingManager.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 4 ++++ src/main/resources/assets/hbm/lang/en_US.lang | 4 ++++ 14 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasAsbestos.java b/src/main/java/com/hbm/blocks/gas/BlockGasAsbestos.java index 84883a519..38dcfdc7d 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasAsbestos.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasAsbestos.java @@ -5,9 +5,6 @@ import java.util.Random; import com.hbm.extprop.HbmLivingProps; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorRegistry.HazardClass; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java b/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java index 52dc30b48..19033a933 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java @@ -10,7 +10,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.IBlockAccess; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasMeltdown.java b/src/main/java/com/hbm/blocks/gas/BlockGasMeltdown.java index 83088aa31..65f248873 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasMeltdown.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasMeltdown.java @@ -15,7 +15,6 @@ import com.hbm.util.ContaminationUtil.HazardType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Blocks; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java b/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java index 1cf3f1511..71ea675a3 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java @@ -6,9 +6,6 @@ import com.hbm.lib.ModDamageSource; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ArmorUtil; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java b/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java index fdf44479f..4ac7bab3f 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java @@ -12,7 +12,6 @@ import com.hbm.util.ContaminationUtil.HazardType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java b/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java index 21a24186f..7977d0da6 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java @@ -4,7 +4,6 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.extprop.HbmLivingProps; -import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasRadonTomb.java b/src/main/java/com/hbm/blocks/gas/BlockGasRadonTomb.java index 8dcc6bdb6..3e58249cb 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasRadonTomb.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasRadonTomb.java @@ -4,6 +4,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.extprop.HbmLivingProps; +import com.hbm.potion.HbmPotion; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; @@ -52,8 +53,13 @@ public class BlockGasRadonTomb extends BlockGasBase { public void onEntityCollidedWithBlock(World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { if(entity instanceof EntityLivingBase) { - ContaminationUtil.contaminate((EntityLivingBase)entity, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 0.5F); - HbmLivingProps.incrementFibrosis((EntityLivingBase)entity, 10); + EntityLivingBase living = (EntityLivingBase) entity; + + living.removePotionEffect(HbmPotion.radaway.id); //get fucked + living.removePotionEffect(HbmPotion.radx.id); + + ContaminationUtil.contaminate(living, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 0.5F); + HbmLivingProps.incrementFibrosis(living, 10); } } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 2a5eb7b1f..ad0448d8f 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -79,6 +79,8 @@ public class OreDictManager { public static final String KEY_TOOL_SCREWDRIVER = "ntmscrewdriver"; public static final String KEY_TOOL_HANDDRILL = "ntmhanddrill"; public static final String KEY_TOOL_CHEMISTRYSET = "ntmchemistryset"; + + public static final String KEY_CIRCUIT_BISMUTH = "circuitVersatile"; /* * PREFIXES @@ -433,6 +435,9 @@ public class OreDictManager { OreDictionary.registerOre(KEY_TOOL_HANDDRILL, new ItemStack(hand_drill_desh, 1, OreDictionary.WILDCARD_VALUE)); OreDictionary.registerOre(KEY_TOOL_CHEMISTRYSET, new ItemStack(chemistry_set, 1, OreDictionary.WILDCARD_VALUE)); OreDictionary.registerOre(KEY_TOOL_CHEMISTRYSET, new ItemStack(chemistry_set_boron, 1, OreDictionary.WILDCARD_VALUE)); + + OreDictionary.registerOre(KEY_CIRCUIT_BISMUTH, circuit_bismuth); + OreDictionary.registerOre(KEY_CIRCUIT_BISMUTH, circuit_arsenic); OreDictionary.registerOre(getReflector(), neutron_reflector); OreDictionary.registerOre("oreRareEarth", ore_rare); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 8b7518cb3..c28691d1e 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -164,7 +164,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.entanglement_kit, 1), new AStack[] {new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(PB.plate(), 16), new OreDictStack(OreDictManager.getReflector(), 4), new ComparableStack(ModItems.singularity_counter_resonant, 1), new ComparableStack(ModItems.singularity_super_heated, 1), new ComparableStack(ModItems.powder_power, 4), },200); makeRecipe(new ComparableStack(ModItems.dysfunctional_reactor, 1), new AStack[] {new OreDictStack(STEEL.plate(), 15), new OreDictStack(PB.ingot(), 5), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack("dyeBrown", 3), },200); makeRecipe(new ComparableStack(ModItems.missile_assembly, 1), new AStack[] {new ComparableStack(ModItems.hull_small_steel, 1), new ComparableStack(ModItems.hull_small_aluminium, 4), new OreDictStack(STEEL.ingot(), 2), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.wire_aluminium, 6), new ComparableStack(ModItems.canister_full, 3, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.circuit_targeting_tier1, 1), },200); - makeRecipe(new ComparableStack(ModItems.missile_carrier, 1), new AStack[] {new ComparableStack(ModItems.fluid_barrel_full, 16, Fluids.KEROSENE.ordinal()), new ComparableStack(ModItems.thruster_medium, 4), new ComparableStack(ModItems.thruster_large, 1), new ComparableStack(ModItems.hull_big_titanium, 6), new ComparableStack(ModItems.hull_big_steel, 2), new ComparableStack(ModItems.hull_small_aluminium, 12), new OreDictStack(TI.plate(), 24), new ComparableStack(ModItems.plate_polymer, 128), new ComparableStack(ModBlocks.det_cord, 8), new ComparableStack(ModItems.circuit_targeting_tier3, 12), new ComparableStack(ModItems.circuit_targeting_tier4, 3), },4800); + makeRecipe(new ComparableStack(ModItems.missile_carrier, 1), new AStack[] {new ComparableStack(ModItems.fluid_barrel_full, 16, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.thruster_medium, 4), new ComparableStack(ModItems.thruster_large, 1), new ComparableStack(ModItems.hull_big_titanium, 6), new ComparableStack(ModItems.hull_big_steel, 2), new ComparableStack(ModItems.hull_small_aluminium, 12), new OreDictStack(TI.plate(), 24), new ComparableStack(ModItems.plate_polymer, 128), new ComparableStack(ModBlocks.det_cord, 8), new ComparableStack(ModItems.circuit_targeting_tier3, 12), new ComparableStack(ModItems.circuit_targeting_tier4, 3), },4800); makeRecipe(new ComparableStack(ModItems.warhead_generic_small, 1), new AStack[] {new OreDictStack(TI.plate(), 5), new OreDictStack(STEEL.plate(), 3), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 2), },100); makeRecipe(new ComparableStack(ModItems.warhead_generic_medium, 1), new AStack[] {new OreDictStack(TI.plate(), 8), new OreDictStack(STEEL.plate(), 5), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), },150); makeRecipe(new ComparableStack(ModItems.warhead_generic_large, 1), new AStack[] {new OreDictStack(TI.plate(), 15), new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), },200); @@ -189,15 +189,15 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.thruster_medium, 1), new AStack[] {new ComparableStack(ModItems.thruster_small, 1), new OreDictStack(STEEL.plate(), 2), new ComparableStack(ModItems.hull_small_steel, 1), new ComparableStack(ModItems.hull_big_steel, 1), new ComparableStack(ModItems.wire_copper, 4), },150); makeRecipe(new ComparableStack(ModItems.thruster_large, 1), new AStack[] {new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.hull_big_steel, 2), new ComparableStack(ModItems.wire_red_copper, 4), },200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new ComparableStack(ModItems.thruster_large, 1), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModBlocks.deco_pipe_quad, 3), new ComparableStack(ModItems.board_copper, 6), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit_targeting_tier4, 2), new ComparableStack(ModBlocks.reactor_research, 1), },600); - makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] {new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.ordinal()), new ComparableStack(ModItems.photo_panel, 24), new ComparableStack(ModItems.board_copper, 12), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },500); + makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] {new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.photo_panel, 24), new ComparableStack(ModItems.board_copper, 12), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },500); makeRecipe(new ComparableStack(ModItems.sat_head_mapper, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.hull_small_steel, 3), new ComparableStack(ModItems.plate_desh, 2), new ComparableStack(ModItems.circuit_gold, 2), new ComparableStack(ModItems.plate_polymer, 12), new OreDictStack(REDSTONE.dust(), 6), new ComparableStack(Items.diamond, 1), new ComparableStack(Blocks.glass_pane, 6), },400); makeRecipe(new ComparableStack(ModItems.sat_head_scanner, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 6), new OreDictStack(TI.plate(), 32), new ComparableStack(ModItems.plate_desh, 6), new ComparableStack(ModItems.magnetron, 6), new ComparableStack(ModItems.coil_advanced_torus, 2), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.plate_polymer, 6), new ComparableStack(Items.diamond, 1), },400); makeRecipe(new ComparableStack(ModItems.sat_head_radar, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(TI.plate(), 32), new ComparableStack(ModItems.magnetron, 12), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.wire_red_copper, 16), new ComparableStack(ModItems.coil_gold, 3), new ComparableStack(ModItems.circuit_gold, 5), new ComparableStack(Items.diamond, 1), },400); makeRecipe(new ComparableStack(ModItems.sat_head_laser, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(W.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 6), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.board_copper, 24), new ComparableStack(ModItems.circuit_targeting_tier5, 2), new OreDictStack(REDSTONE.dust(), 16), new ComparableStack(Items.diamond, 5), new ComparableStack(Blocks.glass_pane, 16), },450); makeRecipe(new ComparableStack(ModItems.sat_head_resonator, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 48), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.crystal_xen, 1), new OreDictStack(STAR.ingot(), 7), new ComparableStack(ModItems.circuit_targeting_tier5, 6), new ComparableStack(ModItems.circuit_targeting_tier6, 2), },1000); - makeRecipe(new ComparableStack(ModItems.sat_foeq, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.plate_desh, 8), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.ordinal()), new ComparableStack(ModItems.photo_panel, 16), new ComparableStack(ModItems.thruster_nuclear, 1), new ComparableStack(ModItems.ingot_uranium_fuel, 6), new ComparableStack(ModItems.circuit_targeting_tier5, 6), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },1200); - makeRecipe(new ComparableStack(ModItems.sat_miner, 1), new AStack[] {new OreDictStack(BIGMT.plate(), 24), new ComparableStack(ModItems.plate_desh, 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.drill_titanium, 2), new ComparableStack(ModItems.circuit_targeting_tier4, 2), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.ordinal()), new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.centrifuge_element, 4), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.plate_polymer, 12), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },600); - makeRecipe(new ComparableStack(ModItems.sat_lunar_miner, 1), new AStack[] {new ComparableStack(ModItems.ingot_meteorite, 4), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.drill_titanium, 2), new ComparableStack(ModItems.circuit_targeting_tier4, 2), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.ordinal()), new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.plate_polymer, 12), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },600); + makeRecipe(new ComparableStack(ModItems.sat_foeq, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.plate_desh, 8), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.getID()), new ComparableStack(ModItems.photo_panel, 16), new ComparableStack(ModItems.thruster_nuclear, 1), new ComparableStack(ModItems.ingot_uranium_fuel, 6), new ComparableStack(ModItems.circuit_targeting_tier5, 6), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },1200); + makeRecipe(new ComparableStack(ModItems.sat_miner, 1), new AStack[] {new OreDictStack(BIGMT.plate(), 24), new ComparableStack(ModItems.plate_desh, 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.drill_titanium, 2), new ComparableStack(ModItems.circuit_targeting_tier4, 2), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.centrifuge_element, 4), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.plate_polymer, 12), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },600); + makeRecipe(new ComparableStack(ModItems.sat_lunar_miner, 1), new AStack[] {new ComparableStack(ModItems.ingot_meteorite, 4), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.drill_titanium, 2), new ComparableStack(ModItems.circuit_targeting_tier4, 2), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.plate_polymer, 12), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },600); makeRecipe(new ComparableStack(ModItems.chopper_head, 1), new AStack[] {new ComparableStack(ModBlocks.reinforced_glass, 2), new ComparableStack(ModBlocks.fwatz_computer, 1), new OreDictStack(CMB.ingot(), 22), new ComparableStack(ModItems.wire_magnetized_tungsten, 4), },300); makeRecipe(new ComparableStack(ModItems.chopper_gun, 1), new AStack[] {new OreDictStack(CMB.plate(), 4), new OreDictStack(CMB.ingot(), 2), new ComparableStack(ModItems.wire_tungsten, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 1), new ComparableStack(ModItems.motor, 1), },150); makeRecipe(new ComparableStack(ModItems.chopper_torso, 1), new AStack[] {new OreDictStack(CMB.ingot(), 26), new ComparableStack(ModBlocks.fwatz_computer, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.chopper_blades, 2), },350); @@ -241,7 +241,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.upgrade_health, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new ComparableStack(Items.glowstone_dust, 6), new OreDictStack(TI.dust(), 4), },500); makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(DESH.ingot(), 8), new ComparableStack(ModItems.powder_power, 16), new ComparableStack(ModItems.crystal_lithium, 4), new ComparableStack(ModItems.circuit_schrabidium, 1), }, 200); makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_2, 1), new AStack[] {new ComparableStack(ModItems.upgrade_overdrive_1, 1), new ComparableStack(ModItems.upgrade_afterburn_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new ComparableStack(ModItems.crystal_lithium, 8), new ComparableStack(ModItems.circuit_tantalium, 16), }, 300); - makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_afterburn_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new ComparableStack(ModItems.crystal_lithium, 16), new ComparableStack(ModItems.circuit_bismuth, 1), }, 500); + makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_afterburn_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new ComparableStack(ModItems.crystal_lithium, 16), new OreDictStack(KEY_CIRCUIT_BISMUTH), }, 500); makeRecipe(new ComparableStack(ModItems.fuse, 1), new AStack[] {new OreDictStack(STEEL.plate(), 2), new ComparableStack(Blocks.glass_pane, 1), new ComparableStack(ModItems.wire_aluminium, 1), },100); makeRecipe(new ComparableStack(ModItems.redcoil_capacitor, 1), new AStack[] {new OreDictStack(GOLD.plate(), 3), new ComparableStack(ModItems.fuse, 1), new ComparableStack(ModItems.wire_advanced_alloy, 4), new ComparableStack(ModItems.coil_advanced_alloy, 6), new ComparableStack(Blocks.redstone_block, 2), },200); makeRecipe(new ComparableStack(ModItems.titanium_filter, 1), new AStack[] {new OreDictStack(PB.plate(), 3), new ComparableStack(ModItems.fuse, 1), new ComparableStack(ModItems.wire_tungsten, 4), new OreDictStack(TI.plate(), 6), new OreDictStack(U238.ingot(), 2), },200); @@ -303,7 +303,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.fwatz_hatch, 1), new AStack[] {new OreDictStack(W.ingot(), 6), new OreDictStack(CMB.plate(), 4), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_conductor, 1), new AStack[] {new OreDictStack(CMB.plate(), 2), new ComparableStack(ModItems.coil_magnetized_tungsten, 5), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_computer, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 16), new OreDictStack(DIAMOND.dust(), 6), new OreDictStack(MAGTUNG.dust(), 6), new OreDictStack(DESH.dust(), 4), },300); - makeRecipe(new ComparableStack(ModBlocks.fwatz_core, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 24), new OreDictStack(DIAMOND.dust(), 8), new OreDictStack(MAGTUNG.dust(), 12), new OreDictStack(DESH.dust(), 8), new ComparableStack(ModItems.upgrade_power_3, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.circuit_bismuth, 8)},450); + makeRecipe(new ComparableStack(ModBlocks.fwatz_core, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 24), new OreDictStack(DIAMOND.dust(), 8), new OreDictStack(MAGTUNG.dust(), 12), new OreDictStack(DESH.dust(), 8), new ComparableStack(ModItems.upgrade_power_3, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new OreDictStack(KEY_CIRCUIT_BISMUTH, 8)},450); makeRecipe(new ComparableStack(ModBlocks.nuke_gadget, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new ComparableStack(ModItems.fins_flat, 2), new ComparableStack(ModItems.pedestal_steel, 1), new ComparableStack(ModItems.circuit_targeting_tier3, 1), new ComparableStack(ModItems.wire_gold, 6), new OreDictStack("dyeGray", 6), },300); makeRecipe(new ComparableStack(ModBlocks.nuke_boy, 1), new AStack[] {new ComparableStack(ModItems.hull_small_steel, 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit_targeting_tier2, 1), new ComparableStack(ModItems.wire_aluminium, 6), new OreDictStack("dyeBlue", 4), },300); makeRecipe(new ComparableStack(ModBlocks.nuke_man, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new ComparableStack(ModItems.hull_big_steel, 2), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.circuit_targeting_tier2, 2), new ComparableStack(ModItems.wire_copper, 6), new OreDictStack("dyeYellow", 6), },300); @@ -460,7 +460,7 @@ public class AssemblerRecipes { new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit_red_copper, 8), - new ComparableStack(ModItems.circuit_bismuth, 1) + new OreDictStack(KEY_CIRCUIT_BISMUTH, 1) }, 600); makeRecipe(new ComparableStack(ModBlocks.machine_large_turbine, 1), new AStack[] { new ComparableStack(ModItems.hull_big_steel, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index 9076afe63..9983b8613 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -75,6 +75,7 @@ public class PressRecipes { makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_raw), ModItems.circuit_aluminium); makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_bismuth_raw), ModItems.circuit_bismuth); + makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_arsenic_raw), ModItems.circuit_arsenic); makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_tantalium_raw), ModItems.circuit_tantalium); makeRecipe(StampType.C357, new ComparableStack(ModItems.assembly_iron), ModItems.gun_revolver_iron_ammo); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 138069726..b066e168a 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -252,7 +252,7 @@ public class AnvilRecipes { }, new AnvilOutput(new ItemStack(ModItems.demon_core_open))).setTier(3)); constructionRecipes.add(new AnvilConstructionRecipe( - new AStack[] {new OreDictStack(DESH.ingot(), 4), new OreDictStack(POLYMER.dust(), 2), new OreDictStack(DURA.ingot(), 1)}, + new AStack[] {new OreDictStack(DESH.ingot(), 4), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(DURA.ingot(), 1)}, new AnvilOutput(new ItemStack(ModItems.plate_desh, 4))).setTier(3)); constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] {new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1)}, diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 118a58068..43ec20b93 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -729,7 +729,7 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.ams_catalyst_euphemium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, EUPH.dust(), EUPH.dust(), EUPH.dust(), EUPH.dust() }); addShapelessAuto(new ItemStack(ModItems.ams_catalyst_schrabidium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, SA326.dust(), SA326.dust(), SA326.dust(), SA326.dust() }); addShapelessAuto(new ItemStack(ModItems.ams_catalyst_dineutronium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, DNT.dust(), DNT.dust(), DNT.dust(), DNT.dust() }); - addRecipeAuto(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.ingot_bismuth, 'L', DNT.block(), 'M', ModItems.circuit_bismuth }); + addRecipeAuto(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.ingot_bismuth, 'L', DNT.block(), 'M', KEY_CIRCUIT_BISMUTH }); addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), '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.ingot(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModBlocks.sellafield_core, 'L', ModItems.hull_small_steel }); addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel }); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 839e5f15e..b28998d0a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1061,6 +1061,8 @@ item.chopper_wing.name=Jagdschrauber Seitentragfläche item.cigarette.name=FFI-Markenzigarette item.cinnebar.name=Zinnober item.circuit_aluminium.name=Einfacher Schaltkreis +item.circuit_arsenic.name=Adaptives Chipset +item.circuit_arsenic_raw.name=Arsen-Schaltkreisrohling item.circuit_bismuth.name=Vielfältiges Chipset item.circuit_bismuth_raw.name=Bismuth-Schaltkreisrohling item.circuit_copper.name=Erweiterter Schaltkreis @@ -1608,6 +1610,7 @@ item.ingot_am_mix.name=Reaktorfähiger Americiumbarren item.ingot_am241.name=Americium-241-Barren item.ingot_am242.name=Americium-242-Barren item.ingot_americium_fuel.name=Americiumkernbrennstoffbarren +item.ingot_arsenic.name=Arsenbarren item.ingot_asbestos.name=Asbestplatte item.ingot_au198.name=Gold-198-Barren item.ingot_australium.name=Australiumbarren @@ -1996,6 +1999,7 @@ item.nugget.name=Chicken Nugget item.nugget_am_mix.name=Reaktorfähiges Americiumnugget item.nugget_am241.name=Americium-241-Nugget item.nugget_am242.name=Americium-242-Nugget +item.nugget_arsenic.name=Arsennugget item.nugget_au198.name=Gold-198-Nugget item.nugget_americium_fuel.name=Americiumkernbrennstoffnugget item.nugget_australium.name=Australiumnugget diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 039c75c54..6b6e3ff7a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1272,6 +1272,8 @@ item.chopper_wing.name=Hunter Chopper Wing item.cigarette.name=FFI-Brand Cigarette item.cinnebar.name=Cinnabar item.circuit_aluminium.name=Basic Circuit +item.circuit_arsenic.name=Adaptable Circuit +item.circuit_arsenic_raw.name=Adaptable Circuit Assembly item.circuit_bismuth.name=Versatile Chipset item.circuit_bismuth_raw.name=Versatile Chipset Assembly item.circuit_copper.name=Enhanced Circuit @@ -1839,6 +1841,7 @@ item.ingot_am_mix.name=Reactor Grade Americium Ingot item.ingot_am241.name=Americium-241 Ingot item.ingot_am242.name=Americium-242 Ingot item.ingot_americium_fuel.name=Ingot of Americium Fuel +item.ingot_arsenic.name=Arsenic Ingot item.ingot_asbestos.name=Asbestos Sheet item.ingot_asbestos.desc=§o"Filled with life, self-doubt and asbestos. That comes with the air."§r item.ingot_au198.name=Gold-198 Ingot @@ -2256,6 +2259,7 @@ item.nugget_am_mix.name=Reactor Grade Americium Nugget item.nugget_am241.name=Americium-241 Nugget item.nugget_am242.name=Americium-242 Nugget item.nugget_americium_fuel.name=Americium Fuel Nugget +item.nugget_arsenic.name=Arsenic Nugget item.nugget_au198.name=Gold-198 Nugget item.nugget_australium.name=Australium Nugget item.nugget_australium_greater.name=Greater Australium Nugget From ded8b0031038b3a329ac75ac5cf271650d45e8be Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 6 Apr 2022 20:33:57 +0200 Subject: [PATCH 31/31] new fluid net test --- src/main/java/api/hbm/fluid/IFluidConnector.java | 2 +- src/main/java/api/hbm/fluid/IFluidStandardSender.java | 10 ++++++++++ .../hbm/tileentity/machine/TileEntityMachineCoal.java | 10 +++++++++- .../tileentity/machine/storage/TileEntityBarrel.java | 11 ++++++++++- .../hbm/tileentity/network/TileEntityPipeBaseNT.java | 2 +- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/main/java/api/hbm/fluid/IFluidConnector.java b/src/main/java/api/hbm/fluid/IFluidConnector.java index 9ec663305..f8f1034d8 100644 --- a/src/main/java/api/hbm/fluid/IFluidConnector.java +++ b/src/main/java/api/hbm/fluid/IFluidConnector.java @@ -80,5 +80,5 @@ public interface IFluidConnector { } } - public static final boolean particleDebug = false; + public static final boolean particleDebug = true; } diff --git a/src/main/java/api/hbm/fluid/IFluidStandardSender.java b/src/main/java/api/hbm/fluid/IFluidStandardSender.java index 83a0a9d98..6f6ef8238 100644 --- a/src/main/java/api/hbm/fluid/IFluidStandardSender.java +++ b/src/main/java/api/hbm/fluid/IFluidStandardSender.java @@ -37,4 +37,14 @@ public interface IFluidStandardSender extends IFluidUser { } } } + + @Override + public default long transferFluid(FluidType type, long fluid) { + return fluid; + } + + @Override + public default long getDemand(FluidType type) { + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java index 878d3ad21..ac6e0f679 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java @@ -25,9 +25,10 @@ import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyGenerator; +import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { +public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver { private ItemStack slots[]; @@ -224,6 +225,8 @@ public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISide for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + + this.updateStandardPipes(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); //Water tank.loadTank(0, 3, slots); @@ -335,4 +338,9 @@ public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISide public void setTypeForSync(FluidType type, int index) { tank.setTankType(type); } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tank}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 22d291929..3759d41db 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -14,12 +14,14 @@ import com.hbm.lib.Library; import com.hbm.main.ModEventHandler; import com.hbm.tileentity.TileEntityMachineBase; +import api.hbm.fluid.IFluidStandardSender; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource { +public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IFluidStandardSender { public FluidTank tank; public short mode = 0; @@ -52,6 +54,8 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc tank.unloadTank(4, 5, slots); tank.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); + this.sendFluid(tank.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, ForgeDirection.DOWN); + age++; if(age >= 20) age = 0; @@ -200,4 +204,9 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc nbt.setShort("mode", mode); tank.writeToNBT(nbt, "tank"); } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tank}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 826a62809..0f43b2c2e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -12,7 +12,7 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor { private IPipeNet network; - protected FluidType type = Fluids.NONE; + protected FluidType type = Fluids.WATER; @Override public void updateEntity() {