From 4ee7e680fbb0bca4f54c80232dd97a45777fb3da Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 28 Sep 2022 16:54:42 +0200 Subject: [PATCH] Too Many Molds there is toxic black mold growing in my brain --- .../blocks/machine/FoundryCastingBase.java | 2 +- .../com/hbm/blocks/machine/FoundryOutlet.java | 39 +++ .../java/com/hbm/inventory/material/Mats.java | 7 +- .../java/com/hbm/items/machine/ItemMold.java | 234 ++++++++++++++++-- .../com/hbm/render/block/RenderOutlet.java | 1 - .../machine/TileEntityFoundryCastingBase.java | 27 +- .../assets/hbm/textures/items/mold_blade.png | Bin 0 -> 353 bytes .../assets/hbm/textures/items/mold_blades.png | Bin 0 -> 533 bytes .../hbm/textures/items/mold_hull_big.png | Bin 0 -> 440 bytes .../hbm/textures/items/mold_hull_small.png | Bin 0 -> 416 bytes .../assets/hbm/textures/items/mold_mogus.png | Bin 0 -> 438 bytes .../assets/hbm/textures/items/mold_pipes.png | Bin 0 -> 398 bytes .../assets/hbm/textures/items/mold_stamp.png | Bin 0 -> 398 bytes 13 files changed, 259 insertions(+), 51 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/mold_blade.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_blades.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_hull_big.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_hull_small.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_mogus.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_pipes.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_stamp.png diff --git a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java index 7b968c4aa..29a2e1924 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java @@ -143,7 +143,7 @@ public abstract class FoundryCastingBase extends BlockContainer implements ICruc text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast")); } else if(cast.slots[0].getItem() == ModItems.mold){ Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]); - text.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey("shape." + mold.shape.name().toLowerCase()) + " x" + mold.amount); + text.add(EnumChatFormatting.BLUE + mold.getTitle()); } if(cast.type != null && cast.amount > 0) { diff --git a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java index f92e5817f..6c1c4b235 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java @@ -1,6 +1,10 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityFoundryOutlet; @@ -11,9 +15,11 @@ 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.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; @@ -63,6 +69,39 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor { return new TileEntityFoundryOutlet(); } + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB entityBounding, List list, Entity entity) { + + AxisAlignedBB aabb = null; + int meta = world.getBlockMetadata(x, y, z); + + if(meta == 2) aabb = AxisAlignedBB.getBoundingBox(x + 0.625D, y, z + 0.3125D, x + 1D, y + 0.5D, z + 0.6875D); + if(meta == 3) aabb = AxisAlignedBB.getBoundingBox(x + 0D, y, z + 0.3125D, x + 0.375D, y + 0.5D, z + 0.6875D); + if(meta == 4) aabb = AxisAlignedBB.getBoundingBox(x + 0.3125D, y, z + 0.625D, x + 0.6875D, y + 0.5D, z + 1D); + if(meta == 5) aabb = AxisAlignedBB.getBoundingBox(x + 0.3125D, y, z + 0D, x + 0.6875D, y + 0.5D, z + 0.375D); + + if(aabb != null && entityBounding.intersectsWith(aabb)) { + list.add(aabb); + } + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + + int meta = world.getBlockMetadata(x, y, z); + if(meta == 2) this.setBlockBounds(0.625F, 0F, 0.3125F, 1F, 0.5F, 0.6875F); + if(meta == 3) this.setBlockBounds(0F, 0F, 0.3125F, 0.375F, 0.5F, 0.6875F); + if(meta == 4) this.setBlockBounds(0.3125F, 0F, 0.625F, 0.6875F, 0.5F, 1F); + if(meta == 5) this.setBlockBounds(0.3125F, 0F, 0F, 0.6875F, 0.5F, 0.375F); + } + @Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return stack; } diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 758d8ca42..0b32625ff 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -43,8 +43,8 @@ public class Mats { public static final int _AS = 30; //Vanilla and vanilla-like - public static final NTMMaterial MAT_STONE = makeSmeltable(_VS + 00, df("Stone"), 0x4D2F23); - public static final NTMMaterial MAT_COAL = makeAdditive( 1400, COAL, 0x583434); + public static final NTMMaterial MAT_STONE = makeSmeltable(_VS + 00, df("Stone"), 0x4D2F23).omitAutoGen(); + public static final NTMMaterial MAT_COAL = makeAdditive( 1400, COAL, 0x583434).omitAutoGen(); public static final NTMMaterial MAT_LIGNITE = makeAdditive( 1401, LIGNITE, 0x715444); public static final NTMMaterial MAT_COALCOKE = makeAdditive( 1410, COALCOKE, 0); public static final NTMMaterial MAT_PETCOKE = makeAdditive( 1411, PETCOKE, 0); @@ -53,12 +53,14 @@ public class Mats { public static final NTMMaterial MAT_IRON = makeSmeltable(2600, IRON, 0xFFA259).omitAutoGen(); public static final NTMMaterial MAT_GOLD = makeSmeltable(7900, GOLD, 0xE8D754).omitAutoGen(); public static final NTMMaterial MAT_REDSTONE = makeSmeltable(_VS + 01, REDSTONE, 0x7A0300).omitAutoGen(); + public static final NTMMaterial MAT_OBSIDIAN = makeSmeltable(_VS + 02, df("Obsidian"), 0x4D2F23).omitAutoGen(); //Radioactive public static final NTMMaterial MAT_URANIUM = makeSmeltable(9200, U, 0).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK); public static final NTMMaterial MAT_THORIUM = makeSmeltable(9232, TH232, 0).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK); public static final NTMMaterial MAT_PLUTONIUM = makeSmeltable(9400, PU, 0).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK); public static final NTMMaterial MAT_RADIUM = makeSmeltable(8826, RA226, 0).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK); + public static final NTMMaterial MAT_SCHRABIDIUM = makeSmeltable(12626, SA326, 0).setShapes(NUGGET, WIRE, BILLET, INGOT, DUST, PLATE, BLOCK); //Base metals public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xA99E79).setShapes(INGOT, DUST, PLATE, BLOCK); @@ -83,6 +85,7 @@ public class Mats { public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0).setShapes(INGOT, DUST, BLOCK); public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0).setShapes(INGOT, DUST); public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 7, MAGTUNG, 0).setShapes(INGOT, DUST, BLOCK); + public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 8, CMB, 0).setShapes(INGOT, DUST, PLATE, BLOCK); public static NTMMaterial make(int id, DictFrame dict) { return new NTMMaterial(id, dict); diff --git a/src/main/java/com/hbm/items/machine/ItemMold.java b/src/main/java/com/hbm/items/machine/ItemMold.java index 9156f4e8e..049b2e285 100644 --- a/src/main/java/com/hbm/items/machine/ItemMold.java +++ b/src/main/java/com/hbm/items/machine/ItemMold.java @@ -1,10 +1,14 @@ package com.hbm.items.machine; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.NTMMaterial; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.util.I18nUtil; @@ -17,27 +21,70 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; +import net.minecraftforge.oredict.OreDictionary; public class ItemMold extends Item { - public List molds = new ArrayList(); + public List molds = new ArrayList(); //molds in "pretty" order, variable between versions + public HashMap moldById = new HashMap(); //molds by their static ID -> stack item damage public ItemMold() { - this.molds.add(new Mold(0, 0, "nugget", MaterialShapes.NUGGET)); - this.molds.add(new Mold(1, 0, "billet", MaterialShapes.BILLET)); - this.molds.add(new Mold(2, 0, "ingot", MaterialShapes.INGOT)); - this.molds.add(new Mold(3, 0, "plate", MaterialShapes.PLATE)); - this.molds.add(new Mold(4, 0, "wire", MaterialShapes.WIRE, 8)); - this.molds.add(new Mold(5, 1, "ingots", MaterialShapes.INGOT, 9)); - this.molds.add(new Mold(6, 1, "plates", MaterialShapes.PLATE, 9)); - this.molds.add(new Mold(7, 1, "block", MaterialShapes.BLOCK)); + int S = 0; + int L = 0; + registerMold(new MoldShape( 0, S, "nugget", MaterialShapes.NUGGET)); + registerMold(new MoldShape( 1, S, "billet", MaterialShapes.BILLET)); + registerMold(new MoldShape( 2, S, "ingot", MaterialShapes.INGOT)); + registerMold(new MoldShape( 3, S, "plate", MaterialShapes.PLATE)); + registerMold(new MoldWire( 4, S, "wire")); + + registerMold(new MoldMulti( 5, S, "blade", MaterialShapes.INGOT.q(3), + Mats.MAT_TITANIUM, new ItemStack(ModItems.blade_titanium), + Mats.MAT_TUNGSTEN, new ItemStack(ModItems.blade_tungsten))); + + registerMold(new MoldMulti( 6, S, "blades", MaterialShapes.INGOT.q(4), + Mats.MAT_GOLD, new ItemStack(ModItems.blades_gold), + Mats.MAT_ALUMINIUM, new ItemStack(ModItems.blades_aluminium), + Mats.MAT_IRON, new ItemStack(ModItems.blades_iron), + Mats.MAT_STEEL, new ItemStack(ModItems.blades_steel), + Mats.MAT_TITANIUM, new ItemStack(ModItems.blades_titanium), + Mats.MAT_ALLOY, new ItemStack(ModItems.blades_advanced_alloy), + Mats.MAT_CMB, new ItemStack(ModItems.blades_combine_steel), + Mats.MAT_SCHRABIDIUM, new ItemStack(ModItems.blades_schrabidium))); + + registerMold(new MoldMulti( 7, S, "blades", MaterialShapes.INGOT.q(4), + Mats.MAT_STONE, new ItemStack(ModItems.stamp_stone_flat), + Mats.MAT_IRON, new ItemStack(ModItems.stamp_iron_flat), + Mats.MAT_STEEL, new ItemStack(ModItems.stamp_steel_flat), + Mats.MAT_TITANIUM, new ItemStack(ModItems.stamp_titanium_flat), + Mats.MAT_OBSIDIAN, new ItemStack(ModItems.stamp_obsidian_flat), + Mats.MAT_SCHRABIDIUM, new ItemStack(ModItems.stamp_schrabidium_flat))); + + registerMold(new MoldMulti( 8, S, "hull_small", MaterialShapes.INGOT.q(2), + Mats.MAT_STEEL, new ItemStack(ModItems.hull_small_steel), + Mats.MAT_ALUMINIUM, new ItemStack(ModItems.hull_small_aluminium))); + + registerMold(new MoldMulti( 9, L, "hull_big", MaterialShapes.INGOT.q(6), + Mats.MAT_STEEL, new ItemStack(ModItems.hull_big_steel), + Mats.MAT_ALUMINIUM, new ItemStack(ModItems.hull_big_aluminium), + Mats.MAT_TITANIUM, new ItemStack(ModItems.hull_big_titanium))); + + registerMold(new MoldShape( 10, L, "ingots", MaterialShapes.INGOT, 9)); + registerMold(new MoldShape( 11, L, "plates", MaterialShapes.PLATE, 9)); + registerMold(new MoldShape( 12, L, "block", MaterialShapes.BLOCK)); + registerMold(new MoldSingle( 13, L, "pipes", new ItemStack(ModItems.pipes_steel), Mats.MAT_STEEL, MaterialShapes.BLOCK.q(3))); + } + + public void registerMold(Mold mold) { + this.molds.add(mold); + this.moldById.put(mold.id, mold); } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { for(int i = 0; i < molds.size(); i++) { - list.add(new ItemStack(item, 1, i)); + Mold mold = molds.get(i); + list.add(new ItemStack(item, 1, mold.id)); } } @@ -56,7 +103,11 @@ public class ItemMold extends Item { @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { - return this.icons[Math.abs(meta % icons.length)]; + Mold mold = this.moldById.get(meta); + if(mold != null) + return this.icons[mold.order]; + + return this.icons[0]; } /*@Override @@ -68,40 +119,171 @@ public class ItemMold extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { Mold mold = getMold(stack); - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("shape." + mold.shape.name().toLowerCase()) + " x" + mold.amount); + list.add(EnumChatFormatting.YELLOW + mold.getTitle()); if(mold.size == 0) list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey(ModBlocks.foundry_mold.getUnlocalizedName() + ".name")); if(mold.size == 1) list.add(EnumChatFormatting.RED + I18nUtil.resolveKey(ModBlocks.foundry_basin.getUnlocalizedName() + ".name")); } public Mold getMold(ItemStack stack) { - int meta = Math.abs(stack.getItemDamage() % molds.size()); - Mold mold = molds.get(meta); - return mold; + Mold mold = moldById.get(stack.getItemDamage()); + return mold != null ? mold : molds.get(0); } + + public static int nextOrder = 0; - public class Mold { - - public MaterialShapes shape; - public int amount; + public abstract class Mold { + public int order; public int id; public int size; public String name; - public Mold(int id, int size, String name, MaterialShapes shape) { - this(id, size, name, shape, 1); - } - - public Mold(int id, int size, String name, MaterialShapes shape, int amount) { + public Mold(int id, int size, String name) { + this.order = nextOrder++; this.id = id; this.size = size; - this.shape = shape; - this.amount = amount; this.name = name; } + public abstract ItemStack getOutput(NTMMaterial mat); + public abstract int getCost(); + public abstract String getTitle(); + } + + public class MoldShape extends Mold { + + MaterialShapes shape; + int amount; + + public MoldShape(int id, int size, String name, MaterialShapes shape) { + this(id, size, name, shape, 1); + } + + public MoldShape(int id, int size, String name, MaterialShapes shape, int amount) { + super(id, size, name); + this.shape = shape; + this.amount = amount; + } + + @Override + public ItemStack getOutput(NTMMaterial mat) { + + for(String name : mat.names) { + String od = shape.name().toLowerCase() + name; + List ores = OreDictionary.getOres(od); + if(!ores.isEmpty()) { + return ores.get(0); + } + } + + return null; + } + + @Override public int getCost() { return shape.q(amount); } + + @Override + public String getTitle() { + return I18nUtil.resolveKey("shape." + shape.name().toLowerCase()) + " x" + amount; + } + } + + public class MoldWire extends Mold { + + public MoldWire(int id, int size, String name) { + super(id, size, name); + } + + @Override + public ItemStack getOutput(NTMMaterial mat) { + + if(mat == Mats.MAT_ALUMINIUM) return new ItemStack(ModItems.wire_aluminium, 8); + if(mat == Mats.MAT_ALLOY) return new ItemStack(ModItems.wire_advanced_alloy, 8); + if(mat == Mats.MAT_COPPER) return new ItemStack(ModItems.wire_copper, 8); + if(mat == Mats.MAT_GOLD) return new ItemStack(ModItems.wire_gold, 8); + if(mat == Mats.MAT_MAGTUNG) return new ItemStack(ModItems.wire_magnetized_tungsten, 8); + if(mat == Mats.MAT_MINGRADE) return new ItemStack(ModItems.wire_red_copper, 8); + if(mat == Mats.MAT_SCHRABIDIUM) return new ItemStack(ModItems.wire_schrabidium, 8); + if(mat == Mats.MAT_TUNGSTEN) return new ItemStack(ModItems.wire_tungsten, 8); + return null; + } + + @Override + public int getCost() { + return MaterialShapes.WIRE.q(8); + } + + @Override + public String getTitle() { + return I18nUtil.resolveKey("shape." + MaterialShapes.WIRE.name().toLowerCase()) + " x8"; + } + } + + /* because why not */ + public class MoldSingle extends Mold { + + ItemStack out; + NTMMaterial mat; + int amount; + + public MoldSingle(int id, int size, String name, ItemStack out, NTMMaterial mat, int amount) { + super(id, size, name); + this.out = out; + this.mat = mat; + this.amount = amount; + } + + @Override + public ItemStack getOutput(NTMMaterial mat) { + return this.mat == mat ? out.copy() : null; + } + + @Override + public int getCost() { + return amount; + } + + @Override + public String getTitle() { + return out.getDisplayName() + " x" + this.amount; + } + } + + /* not so graceful but it does the job and it does it well */ + public class MoldMulti extends Mold { + + HashMap map = new HashMap(); + int amount; + + public MoldMulti(int id, int size, String name, int amount, Object... inputs) { + super(id, size, name); + this.amount = amount; + + for(int i = 0; i < inputs.length; i += 2) { + map.put((NTMMaterial) inputs[i], (ItemStack) inputs[i + 1]); + } + } + + @Override + public ItemStack getOutput(NTMMaterial mat) { + ItemStack out = this.map.get(mat); + + if(out != null) + return out.copy(); + + return out; + } + + @Override + public int getCost() { + return amount; + } + + @Override + public String getTitle() { + return I18nUtil.resolveKey("shape." + name) + " x" + this.amount; + } } } diff --git a/src/main/java/com/hbm/render/block/RenderOutlet.java b/src/main/java/com/hbm/render/block/RenderOutlet.java index b60c1f477..1a67ab3f9 100644 --- a/src/main/java/com/hbm/render/block/RenderOutlet.java +++ b/src/main/java/com/hbm/render/block/RenderOutlet.java @@ -2,7 +2,6 @@ package com.hbm.render.block; import org.lwjgl.opengl.GL11; -import com.hbm.blocks.machine.FoundryChannel; import com.hbm.blocks.machine.FoundryOutlet; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java index 02c558698..dc0f173cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java @@ -1,7 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.List; - import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMold; @@ -14,10 +12,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; /** - * Thank god we have a base class now. Now with documentation and as little redundtand crap in the child classes as possible. + * Thank god we have a base class now. Now with documentation and as little redundant crap in the child classes as possible. * @author hbm * */ @@ -48,14 +45,10 @@ public abstract class TileEntityFoundryCastingBase extends TileEntityFoundryBase if(cooloff <= 0) { this.amount = 0; - for(String name : this.type.names) { - String od = mold.shape.name().toLowerCase() + name; - List ores = OreDictionary.getOres(od); - - if(!ores.isEmpty()) { - slots[1] = ores.get(0).copy(); - slots[1].stackSize = mold.amount; - } + ItemStack out = mold.getOutput(type); + + if(out != null) { + slots[1] = out.copy(); } cooloff = 100; @@ -101,15 +94,7 @@ public abstract class TileEntityFoundryCastingBase extends TileEntityFoundryBase Mold mold = this.getInstalledMold(); if(mold == null) return false; - for(String name : stack.material.names) { - String od = mold.shape.name().toLowerCase() + name; - - if(!OreDictionary.getOres(od).isEmpty()) { - return true; //at least one block for this material? return TRUE - } - } - - return false; //no OD match -> no pouring + return mold.getOutput(stack.material) != null; //no OD match -> no pouring } /** Returns an integer determining the mold size, 0 for small molds and 1 for the basin */ diff --git a/src/main/resources/assets/hbm/textures/items/mold_blade.png b/src/main/resources/assets/hbm/textures/items/mold_blade.png new file mode 100644 index 0000000000000000000000000000000000000000..b078333b4f55cbbc5702ddee8f5b7d38aa8e3a93 GIT binary patch literal 353 zcmV-n0iOPeP)X+k#8Sp%mKb)Vh#_rjypbO`8Axd3mo%qUZaYRx3$jG`q3_@V+f*~NAQSgkkSyxVIbLPSy3$S7iY ze#$&ucnkUviP1r#Y1?4EY!1G_uB?tMj=@OfiHOALU`~sd*EitkMfyhwpc13qJ-7eCHa*oL{Hb3;X6A4v55Eu@W7p&td99Y00000NkvXXu0mjfOSPW! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_blades.png b/src/main/resources/assets/hbm/textures/items/mold_blades.png new file mode 100644 index 0000000000000000000000000000000000000000..09497e5a2d8974ec243df50eaa3555bcddbdcfdf GIT binary patch literal 533 zcmV+w0_y#VP)KWp1i6vcnGB%Z*75fltrx&(vOrAyqYv^aR|5|w613ZbTJ zKR_XL>jwzkg27)PQ%6%n$y9p^P9+d&7JNkte0VWb**Bafq<1_A3_Ktx3t%#$Uz z@q)5!JUPEmg^Dl$=nh@p9_$tV-JwhM{`MV%Jk68y3p!1kd9tK8@~~?bXZ->0Gz7q| zSvc($6W>!a<*F&v$F5m)hb{nVmKE}H_}Uv6yeZG(go-feG;Q2zs6ga^({2IaPD3WX zhpFkr>FQ2G)f5C_q;zhg>a<(XA1HR6rmaBqS)9-td8Ao}U9;3cUgyO36gz;^FJF26 z=mGKa*A|X;8oYnC&%egIm(RJkU0*Yh$#0iqrB^!NY1#nFlTGY&K<)o;n(dm!v)w0r z{PdZ{kF>Z2;E&@u>krhRH1y`mS0G#UMiD@Q$m7YcFCP*lAL}&|(H*)RA36YBdt*#Z z$DM{8A391}oUXXJ@|A%ArPCL?SrA6V=}H}msja=;sy7taruuEXp!DYP!;Jq7qg>)A Xn{@En)x38*00000NkvXXu0mjfO~>;z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_hull_big.png b/src/main/resources/assets/hbm/textures/items/mold_hull_big.png new file mode 100644 index 0000000000000000000000000000000000000000..81e63e8da716b95a7525f53e20056ec9bfafd3c8 GIT binary patch literal 440 zcmV;p0Z0CcP)ualcN)aWAP4blD zaWEoSFHxyA7(Dl^PnyfweV6*$DgaTE;3;K;Ofta5)eV(eV_u+G@X5nZ20syNow4O4 zoU-D(xxsmGr6khx;<8xqIk|gcvr^7Y=nlu0zQN`7E#+!$&OiyVka8Ykt?}ecBMFeC zX-2eV+OWT{35J038JgGSNKKs261!Y$V i(capeuiBDurQi#o>!Ah%WL8H20000i5QV?|^#;0#6|wFFDT-Bbrz=4OUqBy0-1;!$R&ePn z2=3hJMiE*l-AJKQP-7{9{4|M+c#|f!sb@2nGiT0BGWRN1Cx@}nH7rvwbUlFFSweEf zoGx^Yo;~7AxHw)wRT%W_Q7Whk1IG*Kk#IdmDfjLAs8T44Wi0ZOaJ(QrtJ4zGOlCp1 zOp%Uv{n(l*l!)S(^Zl*NVCZ^Og~8>+3(b11w74~}*sj<#Sx08H=WeOZGKvR^t z-6bljh8vC(gQ4qj^VDWzd0}pMIpOWyJ!_jgi2*RD~bI1GmSaczJFB0000< KMNUMnLSTZ!$F_3- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_mogus.png b/src/main/resources/assets/hbm/textures/items/mold_mogus.png new file mode 100644 index 0000000000000000000000000000000000000000..1da1368d6fb8806636f3c7de7e8e4f253694a9e7 GIT binary patch literal 438 zcmV;n0ZIOeP)TcAa(rlABjNz-_Uo9-rU=Q7EgotZapc8%N1)08s`+v4y=2mso*G>H{s zj57+?o8p%X1YwK{H{p8I{6K}92*MaHGR(y^$0i~IlLuw8>O0*Y0Du|>k~GE5aXUYo zGf-*DKoG{bd+VcJuWDoLHd`1veGMbF#Zk0Qw}->+%@Y3j{EAwmsbS0)VTp3F^VRv8 z_Fro>F&;Qs0o&qmy-b*8$!d4Cph#wA2J1{^5zP}=ltIM*Tae1HvSRn~z{wd983@7{ z?RvE|?<%uswm=3fF3ZW@4u(!2y)Um+?EdKmCLxICiB?D(VVMqc@1Ng34z_G;5URzs z5!UGdU?~IR;rb%|7>zYhBs1){j!L&q?q4J`Sd?KRA`tnqq^dF~lT}*$7(woGrv&2|ur`)&#lpDcU4yiG? zvhX^^5q614AvPVXK9b#owYv`MU{yps-`$vKJfqfVQjv;};Tyhk0H`eMGF6 s_{z!aK1V|)af0Y|JKKM@1Y9Zj1=3fM+}@eaegFUf07*qoM6N<$f~9z?qW}N^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_stamp.png b/src/main/resources/assets/hbm/textures/items/mold_stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..16dfddc0b01d261c92583dc64bb491ddbd1962a5 GIT binary patch literal 398 zcmV;90df9`P)S6otRcB$+@LwF@nR;8N($r7NY-r5pQZ(%0w{6uR*V zM6l3ppyEPnDTVxW5*J~noiwG0XLDyx?wot(=8iXddMK4IX-A4xk^(qu1H;w7`O25X z%QfFBVUy;xR6x93+k}=1*rYiz6&JI%+)t9>o5bgrSET2m%hE=J`o7ogaCd!KIoP*( zb8%+Zp_F7=(}dxm&tg8S1lp0Z_5j{LmyL%^<-8~y&R-=dEfpLj9;-Z_Ov#F!GtrI| zn>0sy-qFf+ghG<&Z6#nF>^JEYvO*Kds(k|Zp94ew#R1?ts5h|*ruzqf0o*I}x*djt zexpcMXaXS|&JL0;OFKN{$@HWXD_{nx*X{7wzqge_AsZcpLOOHco0oNab