From 9ebcab32440937bd525eb0eeff517e3ae47624c4 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 5 Aug 2024 00:47:32 +0200 Subject: [PATCH] fixes, plushies --- changelog | 10 +- src/main/java/com/hbm/blocks/BlockMulti.java | 4 - src/main/java/com/hbm/blocks/IBlockMulti.java | 11 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/generic/BlockPlushie.java | 172 +++++++ .../com/hbm/entity/item/EntityMovingItem.java | 1 + .../com/hbm/handler/BossSpawnHandler.java | 20 +- .../hbm/handler/nei/ConstructionHandler.java | 2 +- .../handler/nei/RadiolysisRecipeHandler.java | 9 +- .../container/ContainerAutocrafter.java | 31 +- .../com/hbm/items/block/ItemBlockBase.java | 19 +- .../com/hbm/items/tool/ItemColtanCompass.java | 10 + src/main/java/com/hbm/main/ClientProxy.java | 2 + src/main/java/com/hbm/main/NEIConfig.java | 16 + src/main/java/com/hbm/main/NEIRegistry.java | 10 +- .../hbm/render/tileentity/RenderPlushie.java | 138 +++++ .../render/tileentity/RenderSnowglobe.java | 2 - .../java/com/hbm/tileentity/TileMappings.java | 2 + .../machine/TileEntityMachineAutocrafter.java | 10 +- .../oil/TileEntityMachineLiquefactor.java | 2 +- .../oil/TileEntityMachineSolidifier.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../assets/hbm/models/trinkets/yomi.obj | 487 ++++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/squeakyToy.ogg | Bin 0 -> 12214 bytes .../hbm/textures/models/horse/numbernine.png | Bin 0 -> 1384 bytes .../hbm/textures/models/trinkets/yomi.png | Bin 0 -> 716 bytes 28 files changed, 932 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockPlushie.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderPlushie.java create mode 100644 src/main/resources/assets/hbm/models/trinkets/yomi.obj create mode 100644 src/main/resources/assets/hbm/sounds/block/squeakyToy.ogg create mode 100644 src/main/resources/assets/hbm/textures/models/horse/numbernine.png create mode 100644 src/main/resources/assets/hbm/textures/models/trinkets/yomi.png diff --git a/changelog b/changelog index 771c4585a..83bd6e7ed 100644 --- a/changelog +++ b/changelog @@ -1,8 +1,16 @@ ## Changed * The fluid burner, heat exchanging heater and cooling tower now use the single steel pipe items instead of the larger steel pipes * Reduced the amount of condensers needed for crafting the cooling towers +* Liquefactors and solidifiers now have a base processing time of 5 seconds per operation (instead of 10) +* Added some info to the coltass about how the coltan deposit works +* Moced some NEI handlers around, fluid containers are now listed last and radiolysis is now listed right after cracking, since they have the same recipes +* The autocrafter's inputs are now limited to 4 items per slot +* Autocrafters can now receive stacked items again (except for items with containers), if they do not exceed the 4 item threshold ## Fixed * Fixed crash caused by decontaminating items with the radiolysis machine * Fixed ICFs not forming correctly depending on the orientation -* Fixed electrolyzer metal recipe config not working \ No newline at end of file +* Fixed electrolyzer metal recipe config not working +* Fixed the meteor charms not working when used on helmets +* Fixed NEI handler for the ICF's consturction showing inconsistent values +* Fixed radiolysis recipes not showing up in NEI unless the usage recipes are loaded first \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/BlockMulti.java b/src/main/java/com/hbm/blocks/BlockMulti.java index 1741d9316..21930f6ff 100644 --- a/src/main/java/com/hbm/blocks/BlockMulti.java +++ b/src/main/java/com/hbm/blocks/BlockMulti.java @@ -31,8 +31,4 @@ public abstract class BlockMulti extends BlockBase implements IBlockMulti { list.add(new ItemStack(item, 1, i)); } } - - public String getUnlocalizedName(ItemStack stack) { - return this.getUnlocalizedName(); - } } diff --git a/src/main/java/com/hbm/blocks/IBlockMulti.java b/src/main/java/com/hbm/blocks/IBlockMulti.java index b0bf10ba6..067b2759e 100644 --- a/src/main/java/com/hbm/blocks/IBlockMulti.java +++ b/src/main/java/com/hbm/blocks/IBlockMulti.java @@ -1,9 +1,20 @@ package com.hbm.blocks; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + public interface IBlockMulti { public int getSubCount(); + public default String getUnlocalizedName(ItemStack stack) { + return ((Block)this).getUnlocalizedName(); + } + + public default String getOverrideDisplayName(ItemStack stack) { + return null; + } + public default int rectify(int meta) { return Math.abs(meta % getSubCount()); } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ca511e9e3..ed1e0b872 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -271,6 +271,7 @@ public class ModBlocks { public static Block pedestal; public static Block bobblehead; public static Block snowglobe; + public static Block plushie; public static Block hazmat; @@ -1454,6 +1455,7 @@ public class ModBlocks { pedestal = new BlockPedestal().setBlockName("pedestal").setCreativeTab(null).setHardness(2.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":pedestal_top"); bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron"); + plushie = new BlockPlushie().setBlockName("plushie").setStepSound(Block.soundTypeCloth).setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_fiberglass_side"); hazmat = new BlockGeneric(Material.cloth).setBlockName("hazmat").setStepSound(Block.soundTypeCloth).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":hazmat"); gravel_obsidian = new BlockFalling(Material.iron).setBlockName("gravel_obsidian").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(5.0F).setResistance(240.0F).setBlockTextureName(RefStrings.MODID + ":gravel_obsidian"); @@ -2600,6 +2602,7 @@ public class ModBlocks { GameRegistry.registerBlock(pedestal, pedestal.getUnlocalizedName()); GameRegistry.registerBlock(bobblehead, ItemBlockMeta.class, bobblehead.getUnlocalizedName()); GameRegistry.registerBlock(snowglobe, ItemBlockMeta.class, snowglobe.getUnlocalizedName()); + GameRegistry.registerBlock(plushie, ItemBlockBase.class, plushie.getUnlocalizedName()); GameRegistry.registerBlock(hazmat, hazmat.getUnlocalizedName()); GameRegistry.registerBlock(deco_rbmk, deco_rbmk.getUnlocalizedName()); GameRegistry.registerBlock(deco_rbmk_smooth, deco_rbmk_smooth.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java new file mode 100644 index 000000000..80a739a0b --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java @@ -0,0 +1,172 @@ +package com.hbm.blocks.generic; + +import java.util.List; +import java.util.Random; + +import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ITooltipProvider; + +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.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +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.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider { + + public BlockPlushie() { + super(Material.cloth); + } + + @Override public int getRenderType() { return -1; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + @Override public Item getItemDropped(int i, Random rand, int j) { return null; } + + @Override + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { + TileEntityPlushie entity = (TileEntityPlushie) world.getTileEntity(x, y, z); + if(entity != null) return new ItemStack(this, 1, entity.type.ordinal()); + return super.getPickBlock(target, world, x, y, z, player); + } + + @Override + public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { + + if(!player.capabilities.isCreativeMode) { + harvesters.set(player); + if(!world.isRemote) { + TileEntityPlushie entity = (TileEntityPlushie) world.getTileEntity(x, y, z); + if(entity != null) { + EntityItem item = new EntityItem(world, x + 0.5, y, z + 0.5, new ItemStack(this, 1, entity.type.ordinal())); + item.motionX = 0; + item.motionY = 0; + item.motionZ = 0; + world.spawnEntityInWorld(item); + } + } + harvesters.set(null); + } + } + + @Override + public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { + player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); + player.addExhaustion(0.025F); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 1; i < PlushieType.values().length; i++) list.add(new ItemStack(item, 1, i)); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int meta = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + world.setBlockMetadataWithNotify(x, y, z, meta, 2); + + TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); + plushie.type = PlushieType.values()[Math.abs(stack.getItemDamage()) % PlushieType.values().length]; + plushie.markDirty(); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPlushie(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + + if(world.isRemote) { + TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); + plushie.squishTimer = 11; + return true; + } else { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F); + return true; + } + } + + public static class TileEntityPlushie extends TileEntity { + + public PlushieType type = PlushieType.NONE; + public int squishTimer; + + @Override + public void updateEntity() { + if(squishTimer > 0) squishTimer--; + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.type = PlushieType.values()[Math.abs(nbt.getByte("type")) % PlushieType.values().length]; + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("type", (byte) type.ordinal()); + } + } + + public static enum PlushieType { + NONE( "NONE", null), + YOMI( "Yomi", "Hi! Can I be your rabbit friend?"), + NUMBERNINE( "Number Nine", "None of y'all deserve coal."); + + public String label; + public String inscription; + + private PlushieType(String label, String inscription) { + this.label = label; + this.inscription = inscription; + } + } + + @Override + public int getSubCount() { + return PlushieType.values().length; + } + + @Override + public String getOverrideDisplayName(ItemStack stack) { + PlushieType type = PlushieType.values()[Math.abs(stack.getItemDamage()) % PlushieType.values().length]; + return StatCollector.translateToLocalFormatted(this.getUnlocalizedName() + ".name", type == PlushieType.NONE ? "" : type.label).trim(); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + PlushieType type = PlushieType.values()[Math.abs(stack.getItemDamage()) % PlushieType.values().length]; + if(type.inscription != null) list.add(type.inscription); + } +} diff --git a/src/main/java/com/hbm/entity/item/EntityMovingItem.java b/src/main/java/com/hbm/entity/item/EntityMovingItem.java index 50d39e160..56c291373 100644 --- a/src/main/java/com/hbm/entity/item/EntityMovingItem.java +++ b/src/main/java/com/hbm/entity/item/EntityMovingItem.java @@ -35,6 +35,7 @@ public class EntityMovingItem extends EntityMovingConveyorObject implements ICon public boolean interactFirst(EntityPlayer player) { if(!worldObj.isRemote && player.inventory.addItemStackToInventory(this.getItemStack().copy())) { + player.inventoryContainer.detectAndSendChanges(); this.setDead(); } diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index 5c3a206c7..485de324f 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -202,15 +202,17 @@ public class BossSpawnHandler { boolean repell = false; boolean strike = true; - if(p.getCurrentArmor(2) != null && ArmorModHandler.hasMods(p.getCurrentArmor(2))) { - ItemStack mod = ArmorModHandler.pryMods(p.getCurrentArmor(2))[ArmorModHandler.helmet_only]; - - if(mod != null) { - if(mod.getItem() == ModItems.protection_charm) { - repell = true; - } - if(mod.getItem() == ModItems.meteor_charm) { - strike = false; + for(int i = 0; i < 4; i++) { + ItemStack armor = p.getCurrentArmor(i); + if(armor != null && ArmorModHandler.hasMods(armor)) { + + for(int j = 0; j < 8; j++) { + ItemStack mod = ArmorModHandler.pryMods(armor)[j]; + + if(mod != null) { + if(mod.getItem() == ModItems.protection_charm) repell = true; + if(mod.getItem() == ModItems.meteor_charm) strike = false; + } } } } diff --git a/src/main/java/com/hbm/handler/nei/ConstructionHandler.java b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java index aff8c64c0..05105f579 100644 --- a/src/main/java/com/hbm/handler/nei/ConstructionHandler.java +++ b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java @@ -105,7 +105,7 @@ public class ConstructionHandler extends NEIUniversalHandler { ItemStack[] icf = new ItemStack[] { new ItemStack(ModBlocks.icf_component, 50, 0), ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.icf_component, 240, 3), EnumChatFormatting.RED + "3x64 + 48"), - ItemStackUtil.addTooltipToStack(Mats.MAT_DURA.make(ModItems.bolt, 960), EnumChatFormatting.RED + "9x64"), + ItemStackUtil.addTooltipToStack(Mats.MAT_DURA.make(ModItems.bolt, 960), EnumChatFormatting.RED + "15x64"), ItemStackUtil.addTooltipToStack(Mats.MAT_STEEL.make(ModItems.plate_cast, 240), EnumChatFormatting.RED + "3x64 + 48"), ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.icf_component, 117, 1), EnumChatFormatting.RED + "64 + 53"), ItemStackUtil.addTooltipToStack(Mats.MAT_BBRONZE.make(ModItems.plate_cast, 117), EnumChatFormatting.RED + "64 + 53"), diff --git a/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java b/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java index 84cd78979..1b4707586 100644 --- a/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/RadiolysisRecipeHandler.java @@ -14,7 +14,6 @@ import com.hbm.inventory.gui.GUIRadiolysis; import com.hbm.inventory.recipes.RadiolysisRecipes; import com.hbm.lib.RefStrings; -import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; import net.minecraft.client.gui.inventory.GuiContainer; @@ -95,7 +94,7 @@ public class RadiolysisRecipeHandler extends TemplateRecipeHandler implements IC HashMap recipes = (HashMap) RadiolysisRecipes.getRecipesForNEI(); for(Entry recipe : recipes.entrySet()) { - if(NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[0], result) || NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[1], result)) + if(compareFluidStacks((ItemStack)recipe.getValue()[0], result) || compareFluidStacks((ItemStack)recipe.getValue()[1], result)) this.arecipes.add(new RecipeSet((ItemStack)recipe.getKey(), (ItemStack)recipe.getValue()[0], (ItemStack)recipe.getValue()[1])); } } @@ -115,10 +114,14 @@ public class RadiolysisRecipeHandler extends TemplateRecipeHandler implements IC HashMap recipes = (HashMap) RadiolysisRecipes.getRecipesForNEI(); for(Entry recipe : recipes.entrySet()) { - if(NEIServerUtils.areStacksSameType((ItemStack)recipe.getKey(), ingredient)) + if(compareFluidStacks((ItemStack)recipe.getKey(), ingredient)) this.arecipes.add(new RecipeSet((ItemStack)recipe.getKey(), (ItemStack)recipe.getValue()[0], (ItemStack)recipe.getValue()[1])); } } + + private boolean compareFluidStacks(ItemStack sta1, ItemStack sta2) { + return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); + } @Override public void drawExtras(int recipe) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index a84b3f81c..0c5c3ff51 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -1,8 +1,10 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotPattern; +import com.hbm.items.ModItems; import com.hbm.tileentity.machine.TileEntityMachineAutocrafter; +import api.hbm.energymk2.IBatteryItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; @@ -88,6 +90,33 @@ public class ContainerAutocrafter extends ContainerBase { @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { - return null; + ItemStack rStack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + rStack = stack.copy(); + + if(index <= 20 && index >= 10) { + if(!this.mergeItemStack(stack, 21, this.inventorySlots.size(), true)) { + return null; + } + } else if(index > 20){ + + if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(stack, 20, 21, false)) return null; + } else { + return null; + } + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return rStack; } } diff --git a/src/main/java/com/hbm/items/block/ItemBlockBase.java b/src/main/java/com/hbm/items/block/ItemBlockBase.java index d4976b1ab..97286b3a2 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockBase.java +++ b/src/main/java/com/hbm/items/block/ItemBlockBase.java @@ -2,7 +2,6 @@ package com.hbm.items.block; import java.util.List; -import com.hbm.blocks.BlockMulti; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.blocks.ITooltipProvider; @@ -18,6 +17,7 @@ import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; public class ItemBlockBase extends ItemBlock { @@ -41,14 +41,25 @@ public class ItemBlockBase extends ItemBlock { @Override public String getUnlocalizedName(ItemStack stack) { - if(field_150939_a instanceof BlockMulti) { - return ((BlockMulti)field_150939_a).getUnlocalizedName(stack); + if(field_150939_a instanceof IBlockMulti) { + return ((IBlockMulti) field_150939_a).getUnlocalizedName(stack); } else if(field_150939_a instanceof BlockMetalFence) { - return ((BlockMetalFence)field_150939_a).getUnlocalizedName(stack); // I considered reworking IBlockMulti instead but there are like a bajillion implementers + return ((BlockMetalFence) field_150939_a).getUnlocalizedName(stack); // I considered reworking IBlockMulti instead but there are like a bajillion implementers } else { return super.getUnlocalizedName(stack); } } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + if(field_150939_a instanceof IBlockMulti) { + String override = ((IBlockMulti) field_150939_a).getOverrideDisplayName(stack); + if(override != null) { + return override; + } + } + return ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim(); + } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { diff --git a/src/main/java/com/hbm/items/tool/ItemColtanCompass.java b/src/main/java/com/hbm/items/tool/ItemColtanCompass.java index 0d2739cf9..b8cbe6b8e 100644 --- a/src/main/java/com/hbm/items/tool/ItemColtanCompass.java +++ b/src/main/java/com/hbm/items/tool/ItemColtanCompass.java @@ -1,5 +1,6 @@ package com.hbm.items.tool; +import java.util.List; import java.util.Random; import com.hbm.main.MainRegistry; @@ -12,6 +13,7 @@ import net.minecraft.client.renderer.texture.TextureCompass; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -24,6 +26,14 @@ public class ItemColtanCompass extends Item { public int lastZ = 0; public long lease = 0; + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add("Points towards the coltan deposit."); + list.add("The deposit is a large area where coltan ore spawns like standard ore,"); + list.add("it's not one large blob of ore on that exact location, dipshit."); + } + @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean inhand) { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 48bec929b..df4694b4a 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -53,6 +53,7 @@ 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.BlockPedestal.TileEntityPedestal; +import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight; import com.hbm.blocks.machine.MachineFan.TileEntityFan; @@ -192,6 +193,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPedestal.class, new RenderPedestalTile()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBobble.class, new RenderBobble()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySnowglobe.class, new RenderSnowglobe()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlushie.class, new RenderPlushie()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmitter.class, new RenderEmitter()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLantern.class, new RenderLantern()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLanternBehemoth.class, new RenderLanternBehemoth()); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index a2b9b5215..394c4feab 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -5,6 +5,7 @@ import java.util.List; import codechicken.nei.recipe.*; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; +import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.handler.nei.CustomMachineHandler; import com.hbm.items.ModItems; @@ -104,6 +105,21 @@ public class NEIConfig implements IConfigureNEI { } }); + + API.registerHighlightIdentifier(ModBlocks.plushie, 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 TileEntityPlushie) { + TileEntityPlushie plush = (TileEntityPlushie) te; + return new ItemStack(ModBlocks.plushie, 1, plush.type.ordinal()); + } + return null; + } + @Override public List handleTextData(ItemStack itemStack, World world, EntityPlayer player, MovingObjectPosition mop, List currenttip, Layout layout) { return currenttip; } + }); } public static void registerHandler(Object o) { diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index c17abb8a5..ee7d42e5f 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -16,6 +16,8 @@ public class NEIRegistry { if(!handlers.isEmpty()) return handlers; + handlers.add(new AnvilRecipeHandler()); + handlers.add(new SmithingRecipeHandler()); handlers.add(new AlloyFurnaceRecipeHandler()); handlers.add(new ShredderRecipeHandler()); handlers.add(new PressRecipeHandler()); @@ -27,6 +29,7 @@ public class NEIRegistry { handlers.add(new RefineryRecipeHandler()); handlers.add(new VacuumRecipeHandler()); handlers.add(new CrackingHandler()); + handlers.add(new RadiolysisRecipeHandler()); handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); handlers.add(new ChemplantRecipeHandler()); @@ -35,11 +38,7 @@ public class NEIRegistry { handlers.add(new FusionRecipeHandler()); handlers.add(new HadronRecipeHandler()); handlers.add(new SILEXRecipeHandler()); - handlers.add(new SmithingRecipeHandler()); - handlers.add(new AnvilRecipeHandler()); handlers.add(new FuelPoolHandler()); - handlers.add(new FluidRecipeHandler()); - handlers.add(new RadiolysisRecipeHandler()); handlers.add(new CrucibleSmeltingHandler()); handlers.add(new CrucibleAlloyingHandler()); handlers.add(new CrucibleCastingHandler()); @@ -66,6 +65,9 @@ public class NEIRegistry { handlers.add(new ExposureChamberHandler()); handlers.add(new ArcFurnaceSolidHandler()); handlers.add(new ArcFurnaceFluidHandler()); + + //this shit comes last + handlers.add(new FluidRecipeHandler()); return handlers; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPlushie.java b/src/main/java/com/hbm/render/tileentity/RenderPlushie.java new file mode 100644 index 000000000..c5d3ae829 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPlushie.java @@ -0,0 +1,138 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPlushie.PlushieType; +import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.loader.HFRWavefrontObject; +import com.hbm.render.util.HorsePronter; +import com.hbm.util.EnumUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.IModelCustom; + +public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRendererProvider { + + public static final IModelCustom yomiModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/yomi.obj"), false).asVBO(); + public static final ResourceLocation yomiTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/yomi.png"); + public static final ResourceLocation numbernineTex = new ResourceLocation(RefStrings.MODID, "textures/models/horse/numbernine.png"); + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glRotated(22.5D * tile.getBlockMetadata() + 90, 0, -1, 0); + TileEntityPlushie te = (TileEntityPlushie) tile; + + if(te.squishTimer > 0) { + double squish = te.squishTimer - interp; + GL11.glScaled(1, 1 + (-(Math.sin(squish)) * squish) * 0.025, 1); + } + + switch(te.type) { + case NONE: break; + case YOMI: GL11.glScaled(0.5, 0.5, 0.5); break; + case NUMBERNINE: GL11.glScaled(0.75, 0.75, 0.75); break; + } + renderPlushie(te.type); + + GL11.glPopMatrix(); + } + + public static void renderPlushie(PlushieType type) { + + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + + switch(type) { + case NONE: break; + case YOMI: + Minecraft.getMinecraft().getTextureManager().bindTexture(yomiTex); + yomiModel.renderAll(); + break; + case NUMBERNINE: + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(15, -1, 0, 0); + GL11.glTranslated(0, -0.25, 0.75); + Minecraft.getMinecraft().getTextureManager().bindTexture(numbernineTex); + HorsePronter.reset(); + double r = 45; + HorsePronter.pose(HorsePronter.id_body, 0, -r, 0); + HorsePronter.pose(HorsePronter.id_tail, 0, 60, 90); + HorsePronter.pose(HorsePronter.id_lbl, 0, -75 + r, 35); + HorsePronter.pose(HorsePronter.id_rbl, 0, -75 + r, -35); + HorsePronter.pose(HorsePronter.id_lfl, 0, r - 25, 5); + HorsePronter.pose(HorsePronter.id_rfl, 0, r - 25, -5); + HorsePronter.pose(HorsePronter.id_head, 0, r + 15, 0); + HorsePronter.pront(); + GL11.glRotated(15, 1, 0, 0); + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glTranslated(0, 1, -0.6875); + double s = 1.125D; + GL11.glScaled(0.0625 * s, 0.0625 * s, 0.0625 * s); + GL11.glRotated(180, 1, 0, 0); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.no9); + ResourceManager.armor_no9.renderPart("Helmet"); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.no9_insignia); + ResourceManager.armor_no9.renderPart("Insignia"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + ItemStack stack = new ItemStack(ModItems.cigarette); + double scale = 0.25; + GL11.glTranslated(-0.06, 1.13, -0.42); + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, -1, 0); + GL11.glRotated(60, 0, 0, -1); + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationItemsTexture); + IIcon icon = stack.getIconIndex(); + ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); + break; + } + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.plushie); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -6, 0); + GL11.glScaled(6, 6, 6); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glTranslated(0, 0.25, 0); + GL11.glEnable(GL11.GL_CULL_FACE); + PlushieType type = EnumUtil.grabEnumSafely(PlushieType.class, item.getItemDamage()); + + switch(type) { + case NONE: break; + case YOMI: GL11.glScaled(1.25, 1.25, 1.25); break; + case NUMBERNINE: GL11.glTranslated(0, 0.25, 0.25); GL11.glScaled(1.25, 1.25, 1.25); break; + } + renderPlushie(type); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java b/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java index 5a87ce681..852329df1 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java @@ -13,7 +13,6 @@ import com.hbm.util.EnumUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -28,7 +27,6 @@ public class RenderSnowglobe extends TileEntitySpecialRenderer implements IItemR public static final ResourceLocation socket = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/snowglobe.png"); public static final ResourceLocation glass = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/snowglobe_glass.png"); public static final ResourceLocation features = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/snowglobe_features.png"); - public static RenderBlocks renderer = new RenderBlocks(); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 5d3552835..bc937c5b9 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -13,6 +13,7 @@ import com.hbm.blocks.generic.BlockGlyphidSpawner.TileEntityGlpyhidSpawner; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; +import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -206,6 +207,7 @@ public class TileMappings { put(TileEntityPedestal.class, "tileentity_ntm_pedestal"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); put(TileEntitySnowglobe.class, "tileentity_ntm_snowglobe"); + put(TileEntityPlushie.class, "tileentity_ntm_plushie"); put(TileEntityEmitter.class, "tileentity_ntm_emitter"); put(TileEntityDoorGeneric.class, "tileentity_ntm_door"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index bda6f27bf..b34010cea 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -197,9 +197,8 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { - //automatically prohibit any stacked item, items can only be added one by one - if(stack.stackSize > 1) - return false; + //automatically prohibit stacked container items + if(stack.stackSize > 1 && stack.getItem().hasContainerItem(stack)) return false; //only allow insertion for the nine recipe slots if(slot < 10 || slot > 18) @@ -209,6 +208,10 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen if(slots[slot - 10] == null) return false; + //do not permit total stacking beyond 4 items + if(slots[slot] != null && slots[slot].stackSize + stack.stackSize > 4) return false; + if(stack.stackSize > 4) return false; + //let's find all slots that this item could potentially go in List validSlots = new ArrayList(); for(int i = 0; i < 9; i++) { @@ -354,5 +357,6 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); + updateTemplateGrid(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 531bebb18..9a88b5e82 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -44,7 +44,7 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen public static final int usageBase = 500; public int usage; public int progress; - public static final int processTimeBase = 200; + public static final int processTimeBase = 100; public int processTime; public FluidTank tank; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index ae595e10d..725b0ca86 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -42,7 +42,7 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement public static final int usageBase = 500; public int usage; public int progress; - public static final int processTimeBase = 200; + public static final int processTimeBase = 100; public int processTime; public FluidTank tank; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index be7ab91b2..ca32aebf9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4535,6 +4535,7 @@ tile.plant_tall.cd4.name=Senf-Weide (Reif) tile.plant_tall.weed.name=Hanf tile.plasma.name=Plasma tile.plasma_heater.name=Plasmaerhitzer +tile.plushie.name=%s Plüschfigur tile.pole_satellite_receiver.name=Satellitenschüssel tile.pole_top.name=Antennenspitze tile.press_preheater.name=Presse-Vorheizer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index edca0d83b..ca9e21c7b 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5614,6 +5614,7 @@ tile.plant_tall.cd4.name=Mustard Willow (Mature) tile.plant_tall.weed.name=Hemp tile.plasma.name=Plasma tile.plasma_heater.name=Plasma Heater +tile.plushie.name=%s Plushie tile.pole_satellite_receiver.name=Satellite Dish tile.pole_top.name=Antenna Top tile.press_preheater.name=Burner Press Preheater diff --git a/src/main/resources/assets/hbm/models/trinkets/yomi.obj b/src/main/resources/assets/hbm/models/trinkets/yomi.obj new file mode 100644 index 000000000..44c0bdac0 --- /dev/null +++ b/src/main/resources/assets/hbm/models/trinkets/yomi.obj @@ -0,0 +1,487 @@ +# Blender v2.79 (sub 0) OBJ File: 'yomi.blend' +# www.blender.org +o Plane +v -0.250000 1.187500 0.250000 +v 0.250000 1.187500 0.250000 +v -0.250000 1.187500 -0.250000 +v 0.250000 1.187500 -0.250000 +v 0.250000 1.000000 0.187500 +v 0.250000 1.000000 -0.187500 +v 0.125000 0.750000 0.187500 +v 0.125000 0.750000 -0.187500 +v 0.125000 1.000000 0.187500 +v 0.125000 1.000000 -0.187500 +v 0.156375 0.937500 -0.031250 +v 0.156375 0.937500 0.031250 +v 0.156375 1.000000 0.031250 +v 0.156375 1.000000 -0.031250 +v 0.125000 0.875000 -0.031250 +v 0.125000 0.875000 -0.187500 +v 0.125000 1.000000 -0.031250 +v 0.187500 1.000000 -0.031250 +v 0.187500 1.000000 -0.187500 +v 0.187500 0.875000 -0.187500 +v 0.187500 0.875000 -0.031250 +v 0.125000 1.000000 0.031250 +v 0.125000 0.875000 0.031250 +v 0.125000 0.875000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.875000 0.031250 +v 0.187500 1.000000 0.031250 +v 0.187500 1.000000 0.187500 +v -0.187500 0.750000 0.187500 +v -0.187500 0.750000 -0.187500 +v -0.250000 0.625000 -0.250000 +v -0.250000 0.625000 0.250000 +v 0.250000 0.625000 0.250000 +v 0.250000 0.625000 0.187500 +v 0.250000 0.625000 -0.250000 +v 0.250000 0.625000 -0.187500 +v -0.187500 0.625000 -0.187500 +v -0.187500 0.625000 0.187500 +v -0.218750 0.750000 -0.218750 +v -0.218750 0.750000 0.218750 +v 0.218750 0.750000 0.218750 +v 0.218750 0.750000 -0.218750 +v -0.218750 0.562500 0.218750 +v 0.218750 0.562500 0.218750 +v 0.218750 0.562500 -0.218750 +v -0.218750 0.562500 -0.218750 +v -0.187500 0.562500 -0.187500 +v -0.187500 0.562500 0.187500 +v 0.187500 0.562500 0.187500 +v 0.187500 0.562500 -0.187500 +v -0.187500 0.062500 0.250000 +v 0.187500 0.062500 0.250000 +v 0.187500 0.062500 -0.250000 +v -0.187500 0.062500 -0.250000 +v -0.031250 1.187500 0.218750 +v 0.031250 1.187500 0.218750 +v -0.031250 1.187500 0.031250 +v 0.031250 1.187500 0.031250 +v -0.031250 1.812500 0.031250 +v -0.031250 1.812500 0.218750 +v 0.031250 1.812500 0.218750 +v 0.031250 1.812500 0.031250 +v -0.031250 1.187500 -0.031250 +v 0.031250 1.187500 -0.031250 +v -0.031250 1.187500 -0.218750 +v 0.031250 1.187500 -0.218750 +v -0.031250 1.812500 -0.218750 +v -0.031250 1.812500 -0.031250 +v 0.031250 1.812500 -0.031250 +v 0.031250 1.812500 -0.218750 +v -0.062500 0.000000 -0.062500 +v 0.437500 0.000000 -0.062500 +v -0.062500 0.000000 -0.187500 +v 0.437500 0.000000 -0.187500 +v -0.062500 0.125000 -0.187500 +v -0.062500 0.125000 -0.062500 +v 0.437500 0.125000 -0.062500 +v 0.437500 0.125000 -0.187500 +v 0.562500 0.000000 -0.062500 +v 0.562500 0.000000 -0.187500 +v 0.562500 0.312500 -0.062500 +v 0.562500 0.312500 -0.187500 +v -0.062500 0.000000 0.187500 +v 0.437500 0.000000 0.187500 +v -0.062500 0.000000 0.062500 +v 0.437500 0.000000 0.062500 +v -0.062500 0.125000 0.062500 +v -0.062500 0.125000 0.187500 +v 0.437500 0.125000 0.187500 +v 0.437500 0.125000 0.062500 +v 0.562500 0.000000 0.187500 +v 0.562500 0.000000 0.062500 +v 0.562500 0.312500 0.187500 +v 0.562500 0.312500 0.062500 +v -0.062500 0.562500 -0.099112 +v -0.062500 0.650888 -0.187500 +v -0.062500 0.208947 -0.452665 +v -0.062500 0.297335 -0.541053 +v 0.062500 0.562500 -0.099112 +v 0.062500 0.650888 -0.187500 +v 0.062500 0.208947 -0.452665 +v 0.062500 0.297335 -0.541053 +v -0.062500 0.562500 0.099112 +v -0.062500 0.650888 0.187500 +v -0.062500 0.208947 0.452665 +v -0.062500 0.297335 0.541053 +v 0.062500 0.562500 0.099112 +v 0.062500 0.650888 0.187500 +v 0.062500 0.208947 0.452665 +v 0.062500 0.297335 0.541053 +v 0.135000 0.859375 0.078125 +v 0.135000 0.765625 0.078125 +v 0.135000 0.859375 -0.078125 +v 0.135000 0.765625 -0.078125 +vt 0.166667 0.809524 +vt 0.333333 1.000000 +vt 0.166667 1.000000 +vt 0.166667 0.595238 +vt 0.187500 0.738095 +vt 0.000000 0.595238 +vt 0.000000 0.809524 +vt 0.333333 0.595238 +vt 0.500000 0.809524 +vt 0.333333 0.809524 +vt 0.312500 0.690476 +vt 0.312500 0.738095 +vt 0.166667 0.809524 +vt 0.166667 0.857143 +vt 0.062500 0.857143 +vt 0.187500 0.595238 +vt 0.187500 0.690476 +vt 0.395833 0.523810 +vt 0.416667 0.547619 +vt 0.395833 0.547619 +vt 0.447917 0.547619 +vt 0.500000 0.523810 +vt 0.500000 0.547619 +vt 0.312500 0.428571 +vt 0.333333 0.404762 +vt 0.437500 0.595238 +vt 0.416667 0.547619 +vt 0.437500 0.547619 +vt 0.187500 0.476190 +vt 0.312500 0.595238 +vt 0.500000 0.595238 +vt 0.447917 0.595238 +vt 0.395833 0.547619 +vt 0.416667 0.595238 +vt 0.395833 0.595238 +vt 0.333333 0.547619 +vt 0.385417 0.523810 +vt 0.385417 0.547619 +vt 0.385417 0.595238 +vt 0.333333 0.595238 +vt 0.479167 0.809524 +vt 0.437500 0.857143 +vt 0.333333 0.809524 +vt 0.312500 0.476190 +vt 0.500000 0.595238 +vt 0.666667 0.809524 +vt 0.291667 0.238095 +vt 0.145833 0.404762 +vt 0.145833 0.238095 +vt 0.145833 0.000000 +vt 0.291667 0.166667 +vt 0.145833 0.166667 +vt -0.000000 0.238095 +vt 0.437500 0.166667 +vt 0.437500 0.238095 +vt 0.583333 0.166667 +vt 0.583333 0.238095 +vt 0.833333 0.333333 +vt 0.708333 0.476190 +vt 0.708333 0.333333 +vt 0.687500 0.000000 +vt 0.854167 0.142857 +vt 0.687500 0.142857 +vt 0.833333 0.476190 +vt 0.687500 0.666667 +vt 0.541667 0.333333 +vt 1.000000 0.476190 +vt 0.354167 0.476190 +vt 0.437500 0.500000 +vt 0.354167 0.500000 +vt 0.354167 0.476190 +vt 0.437500 0.500000 +vt 0.354167 0.500000 +vt 0.458333 0.238095 +vt 0.437500 0.476190 +vt 0.437500 0.238095 +vt 0.354167 0.238095 +vt 0.333333 0.476190 +vt 0.333333 0.238095 +vt 0.427083 0.238095 +vt 0.364583 0.476190 +vt 0.364583 0.238095 +vt 0.531250 0.238095 +vt 0.468750 0.476190 +vt 0.468750 0.238095 +vt 0.458333 0.238095 +vt 0.437500 0.476190 +vt 0.437500 0.238095 +vt 0.354167 0.238095 +vt 0.333333 0.476190 +vt 0.333333 0.238095 +vt 0.427083 0.238095 +vt 0.364583 0.476190 +vt 0.364583 0.238095 +vt 0.531250 0.238095 +vt 0.468750 0.476190 +vt 0.468750 0.238095 +vt 0.791667 0.857143 +vt 0.833333 0.666667 +vt 0.833333 0.857143 +vt 0.708333 0.666667 +vt 0.750000 0.857143 +vt 0.708333 0.857143 +vt 0.750000 0.666667 +vt 0.791667 0.666667 +vt 0.666667 0.666667 +vt 0.666667 0.857143 +vt 0.833333 0.714286 +vt 0.875000 0.666667 +vt 0.875000 0.785714 +vt 0.708333 0.904762 +vt 0.750000 0.904762 +vt 0.916667 0.666667 +vt 0.875000 0.857143 +vt 0.916667 0.785714 +vt 0.916667 0.857143 +vt 0.916667 0.619048 +vt 0.875000 0.619048 +vt 0.958333 0.714286 +vt 0.958333 0.666667 +vt 0.833333 0.857143 +vt 0.791667 0.666667 +vt 0.791667 0.857143 +vt 0.750000 0.666667 +vt 0.708333 0.857143 +vt 0.750000 0.857143 +vt 0.666667 0.857143 +vt 0.708333 0.666667 +vt 0.666667 0.666667 +vt 0.958333 0.714286 +vt 0.916667 0.666667 +vt 0.916667 0.785714 +vt 0.750000 0.904762 +vt 0.708333 0.904762 +vt 0.875000 0.666667 +vt 0.916667 0.857143 +vt 0.875000 0.785714 +vt 0.875000 0.857143 +vt 0.875000 0.619048 +vt 0.916667 0.619048 +vt 0.833333 0.714286 +vt 0.833333 0.666667 +vt 0.125000 0.595238 +vt 0.166667 0.404762 +vt 0.166667 0.595238 +vt 0.083333 0.357143 +vt 0.041667 0.404762 +vt 0.041667 0.357143 +vt 0.083333 0.404762 +vt 0.041667 0.595238 +vt -0.000000 0.595238 +vt -0.000000 0.404762 +vt 0.125000 0.404762 +vt 0.083333 0.595238 +vt 0.166667 0.404762 +vt 0.125000 0.595238 +vt 0.166667 0.595238 +vt 0.041667 0.404762 +vt 0.083333 0.357143 +vt 0.041667 0.357143 +vt 0.041667 0.595238 +vt 0.083333 0.404762 +vt -0.000000 0.595238 +vt -0.000000 0.404762 +vt 0.083333 0.595238 +vt 0.125000 0.404762 +vt 0.187500 0.428571 +vt 0.166667 0.404762 +vt 0.500000 0.523810 +vt 0.604167 0.595238 +vt 0.500000 0.595238 +vt 0.187500 0.595238 +vt 0.062500 0.952381 +vt 0.020833 0.952381 +vt 0.020833 0.809524 +vt 0.416667 0.523810 +vt 0.447917 0.523810 +vt 0.312500 0.595238 +vt 0.416667 0.595238 +vt 0.416667 0.547619 +vt 0.333333 0.523810 +vt 0.479167 0.952381 +vt 0.437500 0.952381 +vt 0.333333 0.857143 +vt 0.666667 0.595238 +vt 0.291667 0.404762 +vt 0.291667 0.000000 +vt 0.000000 0.166667 +vt 0.854167 0.000000 +vt 0.854167 0.666667 +vt 0.541667 0.476190 +vt 1.000000 0.333333 +vt 0.458333 0.476190 +vt 0.427083 0.476190 +vt 0.531250 0.476190 +vt 0.458333 0.476190 +vt 0.427083 0.476190 +vt 0.531250 0.476190 +vt 0.958333 0.666667 +vt 0.604167 0.523810 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.1240 0.9923 +vn 0.0000 0.1240 -0.9923 +vn -0.8321 0.5547 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +s off +f 2/1/1 3/2/1 1/3/1 +f 33/4/2 5/5/2 2/1/2 +f 32/6/3 2/1/3 1/7/3 +f 35/8/4 3/9/4 4/10/4 +f 5/5/5 10/11/5 6/12/5 +f 38/13/4 29/14/4 7/15/4 +f 7/16/2 10/11/2 9/17/2 +f 12/18/2 14/19/2 13/20/2 +f 21/21/5 16/22/5 20/23/5 +f 35/8/5 37/24/5 31/25/5 +f 18/26/3 15/27/3 21/28/3 +f 29/29/5 8/30/5 7/16/5 +f 21/21/2 19/31/2 18/32/2 +f 26/33/4 22/34/4 27/35/4 +f 25/36/5 23/37/5 26/38/5 +f 25/36/2 27/39/2 28/40/2 +f 36/41/3 8/42/3 37/43/3 +f 29/29/2 37/24/2 30/44/2 +f 31/45/6 1/46/6 3/9/6 +f 42/47/1 40/48/1 41/49/1 +f 43/50/5 45/51/5 44/52/5 +f 40/53/3 44/52/3 41/49/3 +f 41/49/2 45/51/2 42/47/2 +f 42/47/4 46/54/4 39/55/4 +f 39/55/6 43/56/6 40/57/6 +f 50/58/1 48/59/1 49/60/1 +f 51/61/5 53/62/5 52/63/5 +f 47/64/6 51/65/6 48/59/6 +f 48/59/7 52/66/7 49/60/7 +f 49/60/2 53/62/2 50/58/2 +f 50/58/8 54/67/8 47/64/8 +f 69/68/1 67/69/1 68/70/1 +f 61/71/1 59/72/1 60/73/1 +f 57/74/4 62/75/4 58/76/4 +f 56/77/3 60/78/3 55/79/3 +f 58/80/2 61/81/2 56/82/2 +f 55/83/6 59/84/6 57/85/6 +f 65/86/4 70/87/4 66/88/4 +f 64/89/3 68/90/3 63/91/3 +f 66/92/2 69/93/2 64/94/2 +f 63/95/6 67/96/6 65/97/6 +f 73/98/5 72/99/5 71/100/5 +f 77/101/1 75/102/1 76/103/1 +f 73/98/4 78/104/4 74/105/4 +f 72/106/3 76/103/3 71/107/3 +f 77/108/3 79/109/3 81/110/3 +f 71/111/6 75/102/6 73/112/6 +f 80/113/2 81/110/2 79/109/2 +f 77/114/9 82/115/9 78/116/9 +f 74/117/5 79/109/5 72/118/5 +f 78/119/4 80/113/4 74/120/4 +f 85/121/5 84/122/5 83/123/5 +f 89/124/1 87/125/1 88/126/1 +f 85/127/4 90/128/4 86/129/4 +f 84/122/3 88/126/3 83/123/3 +f 89/130/3 91/131/3 93/132/3 +f 83/133/6 87/125/6 85/134/6 +f 92/135/2 93/132/2 91/131/2 +f 89/136/9 94/137/9 90/138/9 +f 86/139/5 91/131/5 84/140/5 +f 90/141/4 92/135/4 86/142/4 +f 96/143/6 97/144/6 95/145/6 +f 98/146/10 101/147/10 97/148/10 +f 102/149/2 99/150/2 101/147/2 +f 101/147/11 95/151/11 97/152/11 +f 98/153/12 100/154/12 102/149/12 +f 105/155/6 104/156/6 103/157/6 +f 109/158/11 106/159/11 105/160/11 +f 107/161/2 110/162/2 109/158/2 +f 103/163/10 109/158/10 105/164/10 +f 108/165/13 106/166/13 110/162/13 +f 6/12/2 2/1/2 5/5/2 +f 6/12/2 35/8/2 4/10/2 +f 38/167/5 33/4/5 32/168/5 +f 38/167/5 31/25/5 37/24/5 +f 112/169/2 113/170/2 111/171/2 +f 2/1/1 4/10/1 3/2/1 +f 33/4/2 34/172/2 5/5/2 +f 32/6/3 33/4/3 2/1/3 +f 35/8/4 31/45/4 3/9/4 +f 5/5/5 9/17/5 10/11/5 +f 9/173/4 5/174/4 7/15/4 +f 5/174/4 34/175/4 7/15/4 +f 34/175/4 38/13/4 7/15/4 +f 7/16/2 8/30/2 10/11/2 +f 12/18/2 11/176/2 14/19/2 +f 21/21/5 15/177/5 16/22/5 +f 35/8/5 36/178/5 37/24/5 +f 18/26/3 17/179/3 15/27/3 +f 29/29/5 30/44/5 8/30/5 +f 21/21/2 20/23/2 19/31/2 +f 26/33/4 23/180/4 22/34/4 +f 25/36/5 24/181/5 23/37/5 +f 25/36/2 26/38/2 27/39/2 +f 36/41/3 6/182/3 8/42/3 +f 6/182/3 10/183/3 8/42/3 +f 8/42/3 30/184/3 37/43/3 +f 29/29/2 38/167/2 37/24/2 +f 31/45/6 32/185/6 1/46/6 +f 42/47/1 39/186/1 40/48/1 +f 43/50/5 46/187/5 45/51/5 +f 40/53/3 43/188/3 44/52/3 +f 41/49/2 44/52/2 45/51/2 +f 42/47/4 45/51/4 46/54/4 +f 39/55/6 46/54/6 43/56/6 +f 50/58/1 47/64/1 48/59/1 +f 51/61/5 54/189/5 53/62/5 +f 47/64/6 54/190/6 51/65/6 +f 48/59/7 51/191/7 52/66/7 +f 49/60/2 52/63/2 53/62/2 +f 50/58/8 53/192/8 54/67/8 +f 69/68/1 70/87/1 67/69/1 +f 61/71/1 62/75/1 59/72/1 +f 57/74/4 59/193/4 62/75/4 +f 56/77/3 61/71/3 60/78/3 +f 58/80/2 62/194/2 61/81/2 +f 55/83/6 60/195/6 59/84/6 +f 65/86/4 67/196/4 70/87/4 +f 64/89/3 69/68/3 68/90/3 +f 66/92/2 70/197/2 69/93/2 +f 63/95/6 68/198/6 67/96/6 +f 73/98/5 74/105/5 72/99/5 +f 77/101/1 78/104/1 75/102/1 +f 73/98/4 75/102/4 78/104/4 +f 72/106/3 77/101/3 76/103/3 +f 77/108/3 72/99/3 79/109/3 +f 71/111/6 76/103/6 75/102/6 +f 80/113/2 82/115/2 81/110/2 +f 77/114/9 81/110/9 82/115/9 +f 74/117/5 80/113/5 79/109/5 +f 78/119/4 82/115/4 80/113/4 +f 85/121/5 86/142/5 84/122/5 +f 89/124/1 90/128/1 87/125/1 +f 85/127/4 87/125/4 90/128/4 +f 84/122/3 89/124/3 88/126/3 +f 89/130/3 84/199/3 91/131/3 +f 83/133/6 88/126/6 87/125/6 +f 92/135/2 94/137/2 93/132/2 +f 89/136/9 93/132/9 94/137/9 +f 86/139/5 92/135/5 91/131/5 +f 90/141/4 94/137/4 92/135/4 +f 96/143/6 98/153/6 97/144/6 +f 98/146/10 102/149/10 101/147/10 +f 102/149/2 100/154/2 99/150/2 +f 101/147/11 99/150/11 95/151/11 +f 98/153/12 96/143/12 100/154/12 +f 105/155/6 106/166/6 104/156/6 +f 109/158/11 110/162/11 106/159/11 +f 107/161/2 108/165/2 110/162/2 +f 103/163/10 107/161/10 109/158/10 +f 108/165/13 104/156/13 106/166/13 +f 6/12/2 4/10/2 2/1/2 +f 6/12/2 36/178/2 35/8/2 +f 38/167/5 34/172/5 33/4/5 +f 38/167/5 32/168/5 31/25/5 +f 112/169/2 114/200/2 113/170/2 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 001fbd52e..b9fe59269 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -64,6 +64,7 @@ "block.fusionReactorRunning": {"category": "block", "sounds": [{"name": "block/fusionReactorSpin", "stream": false}]}, "block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]}, "block.hephaestusRunning": {"category": "block", "sounds": [{"name": "block/hephaestusRunning", "stream": false}]}, + "block.squeakyToy": {"category": "block", "sounds": [{"name": "block/squeakyToy", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/squeakyToy.ogg b/src/main/resources/assets/hbm/sounds/block/squeakyToy.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fe6105266a93d4f3cdc34111e924bb8c25c13c9f GIT binary patch literal 12214 zcmeHscT|&4x9$W&gcu-H34(@BXoe&xAYcf+hX5i1N(q6WAWbPMMu~tJkkBLnX+nO0 zVgbaiC`t{|K@lqoV#fkjI4}6sv(8#)-SyqS?z*!kZ}#lz&&=$3X2v5t+zW_+zd4%@ z^*u{st-7)?Yz=JBuDB3p{E|Y%_Vm&pUJ?3v?P4S(2FHb2 zx(4rIn3x(Fn;9A73Cd7R=&q=k-~?vK&amwvalz5_cuQvduJutdBx5ub8x1y)^x%!nQNpf`)Xjuxx3{C4SmzGbpj9i6b=)VfIReecM1c z>(CwiB}F#eM3-~u1-^4QZ6zg>pXOxpO_?2Touv4u4oz#v+%$xBrxM%V8fpQ;?2&a12xm-G_@00zXN zbdFiojyW$J^ECbPw3hwUk$Quk#$``f&h7{R)e~hGE5Bkn9~}Vk3e&8bEm<`YS<{(0 z;_UR(B7g+|G=6B3jhBT(fo-3+&sa;;!+-JqMPZob>=1_NK_;UPk%lB!DmP<$xe zbm^T6Kja@t=X`QMUvEhldv7MFRHhx0v>TFh`PmmBNvwgH!*@9kNsgD3X(cX8y7;A{ zmOroW&Zv~iEd^_@UoI-?zY9qo?K6){(f>%YoNgIpsJ~=%dUo&xPJD1W0&6c5qD+{v zo_~dxP);kQydHQJQC(mzu2mRIbJqC-xCkJNs~wi7IsW|V9tvebn(428K1vKO`epm>5 z3IapV^;{}BBop^nX&h3o_79xcrJ(`94<|yByDF2q-508gE zoZtWCUwq(-Mv?8;f>*h?F=4m?RX)*J{lZ$G3 z{25-EUj1?sfL=yMMYVN&{cgeAD`(#PZ+_+S1lI&0LDL~l z(}AXGM}vfAbXlk+bXD4nHSOXIdIm{<`ZyqG2?6Sx@W*KUZ2$m3b)A#%8BlSP)f%B0 z`gj?R(CkLMeEv7*HbiohgMgI)xiCLD!!bS9iE@vD>&t zd-g@28EGMCHb3aa}VU%WmSiZX03#mYp+6oQcVSwhtp2nz<8x6>fq-A6P z$R$bkTS%X?ShAQ)PSZ`)z(bVOC;BJ&AAQM#B=Tnq$p5VrsG^UyGLZjU*q~3;VnEcw z6S5xvv1=Xp_qw1SE!Ac5_qw1SK^6Vqsp~&(?Ef#||8)c)Qi6U8{eslwl^fMTrX0YV zN|7Y_h(1x%BC)=-X=`~{PS~x_Pm|Gh|HOjSmsU^lc~%d4KL^!QeQJ&V8C5iG?NeDF z6Ucg*jQ1(l^H%t0l!tuf6>8umy;h>#CA|QJ`j!8T`d10E%t|rP29B>p{k=^wrdeSy zz?y`b1VGN@7KnmvDbmUUAjpre3mN+V%>8?XvLI6g;B}!2A%+p;S0qO2Z3IP#ehbz# z46+DNV%??IowN1|iDf~CUj%ppfUrAn;3j9s7clwSS)?UYFTCB ze6(F3(XCjZTd#+<^MO#IK3#%6O>pNqIGlbO4k#i3l@sDurUP-JEJ0m8REmX%yxjoF zXT*oehsuJ;60^Sk^(PCcq9JIDg80i}!I3H^e@Xr3_GjAxk{e{JM|M9;u8QD8B|zH- z+RhUy2THj+5Ss-xuKx9vMii6~vgm=nMF(~Hf_f-#Hvzw#s4&nEQ7ovxa>k&CK=uh7 z+a2cD0)w)g(eG)Lj0qeogu+o^DYWw;gu0Xp#KJih`5e8Y=LXm-rOB0Q`XVe{09us< z@?PC|ZMAB&a=Rv5mZGgySm0cbt)|g%3T$thp4Q1cS|rW~O~c^|krcg}LT>=>9~6at zhp7>r&HyV7SXg^#(+))u1oENx%vKcAvW%xo^Et-t#qsx?aF|e`*>rUQXNeWjoTrwk z5w2#L_Y}~aA)UK3PK$ldOsA$`5K1BkfcG-mCp)L$8rI8j(_j$Xp?=VaL5LS=GWpXG z!h8Y4i9eMLX#`!L|Av0yQp6JUdSeO@FK~mPYc%*9mVaQ|9abz@8iFfEJ0E&O_=jOy z8u;~kR~u0Qz7S(+IS6gvZ^v5z_y}JCDnwRqb}+>$uQVXhwU+ivvQiocqU49s6r>uv zfF>^SZ_{5EI6_lC_x$J*p&BJSEHNtQx){zMZnaFXmOjq^kp5f5|6x!J82OljS627W zncsFA*b)SdD2xRSPODN)ahy8^r$FJDX{*&J>a&#~jGc`Y`^;8U7L0B+D2tb(;2Q33 z@qS%eP_Q+tp;n%N!_|z2pl?IL9W@uQY`wZWMO$}RiwAl|;)?DcLbtT!(KyD4XKBaI z7jB6}S$)I$>l=@31%Qzz3TzKap3*3l&lXcuZj=QOCRmPVmN7))Ad;&Y$}xsU96HBT z(mBwifNB<3D_CZ~%V!&!bH^VYn@W5ACmkE@taoBL9h>ItRI{9yO{F+#)eJ8kaL^Q} ztp!WxB3X*A7KHG!PPeieVy|j!8b!RO074yi80`#6c{C?njjXc-6tN`9Q^d8PNWG;& zkf?-;$JIdDoYe}b6dW{iDy9(eRkGH>_$UUSlvuUqkHw$^P|!$o)@|@1tJf%1k5e3Y zY4Y($4B}B+duu|ZaEOLCaeBM4P`MBb1RtR}7XV~r286-%h@CMBN&8srOinIj z{2-?U_Cfqhi)?F4idVuYuU1iAvlgqSuAvE;=syQ{EDONlf7sHJb%w+LoXlC)%lX05 z$$UvKcTj${3W3np^>A>Vg_-Tb?C*tNiz~i=dGmM@Z)9L>Wd4@swn-RRKa-JMQY1q- zB-K+Df_D$^z8|cfIJwHLr&*3j#B?0tt@@Nw9WcCaV(cn>n6}v2w#DVQhV45B{VDzwz5bo+?<=)CWx1Znj2oSqR?~g{3%mS(Ie;tkY+O#mFBpNIv)7~e`Tg#- zSevO=kCa9t?csLSwXY=8yMpk#A-3NZ@gP$saq@MQ{hdIo&ref+rS9stNF6I7It}J( z?P#LAndrHNw^U2Cmg<@#W3Onqix-KOHp?S`0d zb<$vl*tWfb9ayMdK8RI&dh#%;jV}9cOVzE9YW3mMPxZFW7RYWR?CXy;*wCh^`IDw_ zH+b41`&sC%M-*gL0!T&8r)1U5w+*D}lL)5n&KKI48 zO!}DQ$Ks_VF{+3e!9l47Pc6(sy;8JPT96(>P~cyF6|8%4wL;GQ>OtbIEp^E8@Bkfs zE3>UM{ohPd-LvQo&IqvP+m~Lc-=Zwfr$ZYyevtXGHe9aj zU!N`1+{kUn9lFC@5!Kn&5ykP`FiVoOu#a&Yo17lDK4b(_>EHbT44&G>^v|YA!1L z?3Np^-ry=`+d3^r@U|Lolv%sSMqbu4-+?lHqOA#l zS0EKi&c`ZO)mDp1XTyDb4$=6uJPO0EimxK_3GDqmP66kKd%8&>a*Rz!m{Cc zh_O$UvrpXBzP>xAHXD!JM=~$#ZtFcA8v!O9?~WUOx7Qnu?%E3?N^H&`E+t_FN9{h{ zo%U7dXQpUt6FH&Pvb+bb+MdpxYrAy_)kIW&LNO}sB23=vLgdl+XNv26{1Xx{ZY!eK z8!&du_?%4dLZ=54UYX{cs;4Vyw*_r4$He;_@G*XILPPbhAZ6+VC?!l|Z zxvd0z+&$N1k5<1+?@}+NpF22}z&S3(#Ja5s? z^%!!CL}7?^t;5q}xroeq<3p!3UcZMOdy{f~+t|9ZV!{ux*HSyCt+mPNc+}X3LWx_N zZ5#{&CtB0VMya0&Q)u!tdG0k<5JBoHt9d{i5}`&cWZDx6M1qEkJ2c^4X*iIsEi#}v z!k{1HNT@^i9F2?~KBFg(!RQsbx=_*F?^?Z`W!g@Bfnh7ad+lex4S^+buc>Y!5dxf_ z9;)6ux_Ife^(M*Yt0y$B>TOD2kj&kACKh?%U9%YcOKgNrdoYz}T$~ft!B+$~Bw8k@ zM*fW@EsEtbe#5kqpdQJWjapZkJ7zIlJHwYRL=@Y!n?)PD4iTCWgF{4vYQg9M0RzB%+s;li+kCgWjc0gqp_9inPhA?&UsomGP{}@7}=js(}$T-R4$R zWHIPtrz7EsyB_}xdcA45lkdiuJMA|_iS6e=#$||32$jWy?`Q=#$lf-R_Kxl{f!}8w zQW`JFjD6MIrl~ztiT|-aIQeFd9Y`J5cewHwLZ$ik+(O8fBduEGU@;9N`*W)gOP(Zp zf1e13`xYognRjE|D1+KCNuK*Sz1=lW;CfI`{bctG^%u(IAL$@K+9=-c@9xF~$)J zJ2~21OdNAgm}#re!mh2b{vZY(8@FkIR(x-srGIpzmISzlK710cVOxW_++C!l0Z_Ts z5HIcA867vZe#f{Xw4p8-n8ni>eOehpArkameX5*oZ^LMra@DYb$nLGhQ=DJ(17&r& zG4o}k4Ys%3hDUKFb=PL!iAarEZWhAej)H-D8S<;*7V1d6$HqIRCt6hfouYE!H_Yt! zpWA*oEs>cTxA>$}$M$F1`i@%Zxl=J8je0%aFRuR1jyRC(Yl$X1Ux5t(R>B3Rjet;b ze0RQG-DaE!XjBrY?$6v!M)ly>^rwcc6?(N*diHj=tnUWFfpFiApjI6ic&g;cfCrZA zXJ%bFC4&a|%Via-#@2p;+lJZmwRX_yJp!j8w$R{muOn+D1+zL>Aqk+FMFCAlVEdjM zPi>XOtw01TH_JXxHAV*_7yQ^_#tWg$xy_1z2*{(LkC`KLed}&&+d2?^A=3c&`O;fmlIS2Wl@}1$vS2h6iL{If^9T6R;!3?dcv| zZuh9>3t6`i6{5*WKIWu|)Kq<@-w(1p3+k5%Qrz>jqaN~gSdxLZhk4hb=tSlw& z+c7)&X2*|v3T+#sSl%Moz|6?6R8`#{L2fY9)bD|9lSwf#zf&DP9jSl^+2`5j+cW0g za!!sq zPxn!p*D)+p2SDw*sSkZ9$ua@!7Scc7^Pu&jLyJ|h^Y6p3QJZ&PPv1kpBqX8;16hm+ zf>d$j(erBUb(FKP8#BGH4~A^a|C~@%T@}z1mC}?_asS>6ixXOPx?^$fYlFJ36jz`s z(FF7nIAJwBbu3xrxuLN~!1`xzu6U^xnaukb z0@V+o2ho7{ut~UWWx-_mRe85xwhqb-x;o*atM~flD!1w}}eWzAq;G3lEk~Zj|73vmIgxIYv)TX>|Yd#umbF+}%+JZ@prL!+dz<$5p^sZ^mx-+P``DX3Zz$4|)-aWY3AFfJk zs=oP`$?O~FU#MMuHx669$>nQ(CmGTiRR*>-%G^Q%QBTvUE0^bePy>;c`h^bKvyGK} zHO?4C%ZJ7U+)_x#2=ZG@wA=bm_j0wJhJ?Bm@Gpupt%He(6LcXqJzeF*yN%aUA279L zm|Cb*(TUZ^XYeFSdrsH7fzH;u@8CRl@5BAZsW8=~E5SeOe`Ln!XJco%`l8YtThn39 zRjFK`Di(VfbN^`P;r5K6iD6ds1vhGP(S>dr=zla}A=LLfKRkS^vVEvUrm4`yaPq}2 z0Nzr4GV^5D6gVuN&&wBQXHQxzJhMA#-tw%kf8E*9RPci8 zgX(~-&!`VEl{&W<;G6F35I>ixzux22+}7{1FLlI+Or#TIqmC)UzPKwK?3mc-17Gub4GVdg zYyyrli;bdhKi~{W)$R`;W}0{9&fKZCX&&}^VyZpnrS)+;iz4BK@i7oE-zABDYE& z0IO4+t;&T|K@&ep>0mRc6zN#clWX5UqzbXW8vJQ+)K#f zgA<17xajpOp{1LjV1MYX4>!&8%apcD1pP#M7Hnofzxgu}n1Aox?)`!6u}W;k*iX96 z=!X9mp7tr^atTy#uS5V|TOvmzpt>AjtT!@7h#0AB6~=uIM0d#aH50r{A9hk(3hewR4- zbodMaot!SAe1A^pilE?jl3259hyMo9+Mz){@Z%ILXuC2C0jy>uOFlh0z2n!<4`;P* zK9@C;p;lP@54xT7+uDjSkZZXTkOj5_TVSlRZXtBf0k>T}Y@M4~MH?0cL81@c(LsMn zl97ku`eXzO-uvc9nsvvjTsd)g9Sk4=n0#FiuMR5dE3E& z*_w~MzHp_Wsg$%eoC;qAX&}!;bKvxYDm^ginx27!@*`R2^Nm}{BQdpDXhEdAz@Bbf z38J=x2rj+H%?P5|Hn4t{4MuxN9PrH9L=Z8@plcV7Hn8@nxCv~y1&KFEBUnkyYFf+*)=@T02?ROj zbj1Eza}!#kRG?CxhQfEjQ*9UwY_2srSrrekwzm8d&AoX%`~2nyC0w`YrVCDtXrjN{ zxYST3vp^)GLjo{2o)FPdQ=FgU`ecbVCZO@&8Ks}Y__m`a{vv+*hZn^2&v4KrRM{rlYO>18s8gU2i zf#--4EGna7E8=&C5*h|v%UB)Z)@PS5N*Ot0+>Y6ws%O8u$znmACWcPecGKsZ(7Slr zJm#q8aTUMD3%ZvFF1qjf`QXwY<~B7-}9v*UAl z`Q~5eZ|Gkr_<;mLYOeu;a$S~E&&nm-@yL8swRrYchM_z=auD^Jk(Nmu-0wm=N zU59o)(ATi_2kDs~)K~0buTgGJP|?;%wt9#@H&T=0Ed`50qC0o3)Ib*+0!e_$v(`3YvtV;9jrUV7n&T9|*z7tYpTEXZ2KNEsFMSw-`3mFmK zR5^1{W6%0U$?vSq)mvGjL1$Q^kF|ZoGEEmP5gKcc=1%-;;H?3BNsI6yqDix^~J#_r78FFN6bvM(E+rkTAp%24HlE z15!07tDi`~Pk)((UIxSJ3cbU2JnR2`XuZH(+lti^NsvU8+-gD|zmYxYtXCE_GDn?} zP{th)tj1?Qc5*p+s~F)^b9eF5EnDn6ip-N2i9NW&RvDF`6q3q?Ql!Fk)r#EcN{?Ba zIY-W>L{Su2BlcL^Zj1fTwQ{rlch0(Ho#V`H(tcifq}*4MtWFE1V$`+@GS`Sbg8>Js zJg2_)FCK>Xpedcx>8ifhh=*vSx0A;4okA2bMBW6sog`akz12H;B%|4T<-(!$@(DDf zOPT%w`%#}~T@vO#?~!=-er{FGorG_3#}qc=qZnrH_N1YLN`sHQB+aUTSLO!-xe6%} zpCzs*cwgI1v^L&l_){dEtdm(iger>V_EF>aBQD>k&VTw8J!1!tfL}|*CWk&DL95{K zy$@0Q}lM#f^W}&l}^ooL+OgG79{0OLMP@IndyUy(%J3O z+ayJ>>H|sz)(W~|wjY^Ly8*Q|Gpk+(;)o+87a}pNPs=>sKHIInjYMFaj#X-RBD~U# zt0|AFtp4_F<CV1BlZ2^X%b+d>I(EB4`U7osf zW>Rbe_SmMuw@#xBE|&*AFc~@{GUPWEmopCElxrL*qJZ&d1A zH^<=1d?g(vFju-!-JKPjVi$ZbMyK1 zX%e`B8#>whkCY=Enu3IT2k#&M#*87YY=7$`2M&^A5g|0b=NeTI4Bhdq^0DQ_P8>1d zImz;z?B@*XgtBoZJT6x|%Dbt!s9PypYSWvLmB?bx?uRa!Is*Sw6Zd!B?jbx+dhyvo zBfCn0k)<%ZllV%-)K=mea&`3PvGSNrj~1e@4R8u`;*+#9sa_=Rq4VyilirEd*1v%T zdU-X9ACe~MqF%R$3oERD6K5LN!cbsA=Y+-4quk!;Hth{7o|GqiGBC1Ve^s(%LS+vfa>*H_!@OC35 z%Y^<2_)F;Tee)si-qnk;DPcEmwAL?NUfgODa_7YCM4i*UA3NCIbCRnuvD4xeV~Ng! zyE47DKYypBZF|E1^7HE(;&#oe+8^uC<|4m*B*FUvZBsa>FQNK^lD&A;xzo2lsN8#L zwJ)fZJKlM!T?Y%mt-6&Yg(f*;PzXCu^XzmO_=pJb zy}df-Wn$WyvreNNl6oT}*TiA&6@7|M;_V@1Auu{a!KhA`>uauWOG!PDVxN*^ayE;9 z;^Q}vj`$YN5IkE|eZ$7Wk$2osY+wa>{|eQM?#bH{U2+|wVA|uU^Qk!{PcmLNzdiqb z+tIfrUq3-iKa~Ahw=6bV>W8F{^hs`(V&r&u16w zy>nB03u+G3wWJ*Iux<}l5#$@MZ@pIEtDpF&IxE&`ZxDq4z%J2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/horse/numbernine.png b/src/main/resources/assets/hbm/textures/models/horse/numbernine.png new file mode 100644 index 0000000000000000000000000000000000000000..5f82142e06ff26a0d4000ec62a10a7adb416a938 GIT binary patch literal 1384 zcmV-u1(*7XP)x z$-5|)$~bSI;n`0=B7faAy0Z-qpVD+yP%%m^?DJ1iq8-f<3v07?T;iKoQ z5y!DF0;MGMGqCr?k!-ZI{&u|$B{__lXd&>ZCl9;~^WlVQ?Cpnsd9wlsw0zCLK5Ps=B1 z?P1OieKkM|54s-KpMGuLd2a944Lk;8A&BdjVzC$HWa7f7pGC$~_|cpvtIGhQ7aT1r8mBG8L2j=+OZ2|z`zqv>yv{)(wr815;R(f)n@-kwyyMb(zMj4kM zM~)Vh=lEg11#pldNqPRvZ-R7m*4E**gdbb8;3r}8bGk+V7~Zl*`N_H7Z>xdhjTJc6 zdp&vVW+v;240|m##^uLhz1-RkwS_sTU#s?V9MH>uqdcM2Fa{uKUe;uf!|(k^pCr}< zi=UvhXwb-LeSC4hzTazP5da{u5c0g2JjUTS$N=gG5&rd73Xb!<`k~`eaXyZe;Gf8N zAD1UNjLI(wITFMP$wi5fES6ec7E5K-(=sLGe2qBq$bw%SZ0%4JR~UJp3|T3|sopcG zAafsx-|9$KTrC)dUlPn0A^EYASLh_~&|I0bB#TEwTzDp}odv%n*j%_4TG}FU|M>76 z2LN9g&j}8y>@;^AeuH3&p!N?6->(N%U$rmhc$=0W_js24IE(?f5NUCF8sp#pwGS7= zfbJsl^d~(&D!)OkK?v%n78I@cH1MW^>f>Q3rw`=u-G{vUSKS3MTC&jo``5l?Q4snNH|teQupFB8D(J|# zReW(vwzIn(+3Ev29N69NGsr2kjMi;Dpec+^SKtRv~UhnKKPL zajS!X7?jfh@VoUl@Z8}!17YDTb?zw?0H`ef+)$mDTfE5u^)f>S4HJKHfOda}Od{0! ycq+o{W!r0>Dq$8e@mc7?fkAWOz@SOI1OEXKjoF5qLYUhC0000