From f2e9f60e0d05337fe8b350f042e6c35a027bdc52 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 28 Jun 2024 11:52:40 +0200 Subject: [PATCH 1/2] more bedrock ore info --- .../hbm/items/special/ItemBedrockOreNew.java | 103 +++++++++++++----- src/main/resources/assets/hbm/lang/en_US.lang | 7 ++ .../items/bedrock_ore_overlay.arc.png | Bin 0 -> 126 bytes .../items/bedrock_ore_overlay.centrifuged.png | Bin 0 -> 125 bytes .../items/bedrock_ore_overlay.rad.png | Bin 0 -> 132 bytes .../items/bedrock_ore_overlay.roasted.png | Bin 0 -> 131 bytes .../items/bedrock_ore_overlay.solvent.png | Bin 0 -> 132 bytes .../items/bedrock_ore_overlay.sulfuric.png | Bin 0 -> 134 bytes .../items/bedrock_ore_overlay.washed.png | Bin 0 -> 127 bytes 9 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.centrifuged.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.rad.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.roasted.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png create mode 100644 src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java index da7713b81..ec26b1d4e 100644 --- a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java +++ b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java @@ -1,12 +1,14 @@ package com.hbm.items.special; import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.items.special.ItemBedrockOreNew.ProcessingTrait.*; import java.util.List; import java.util.Locale; import com.hbm.items.ModItems; import com.hbm.util.EnumUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -23,6 +25,7 @@ import com.hbm.render.icon.TextureAtlasSpriteMutatable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; @@ -30,8 +33,9 @@ import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; public class ItemBedrockOreNew extends Item { - + public IIcon[] icons = new IIcon[BedrockOreType.values().length * BedrockOreGrade.values().length]; + public IIcon[] overlays = new IIcon[ProcessingTrait.values().length]; public ItemBedrockOreNew() { this.setHasSubtypes(true); @@ -55,6 +59,11 @@ public class ItemBedrockOreNew extends Item { } } } + + for(int i = 0; i < overlays.length; i++) { + ProcessingTrait trait = ProcessingTrait.values()[i]; + overlays[i] = reg.registerIcon(RefStrings.MODID + ":bedrock_ore_overlay." + trait.name().toLowerCase(Locale.US)); + } } @Override @@ -68,6 +77,23 @@ public class ItemBedrockOreNew extends Item { } } + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(int metadata) { + return 1 + this.getGrade(metadata).traits.length; + } + + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int meta, int pass) { + if(pass == 0) return this.getIconFromDamage(meta); + return this.overlays[this.getGrade(meta).traits[pass - 1].ordinal()]; + } + @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { @@ -81,6 +107,14 @@ public class ItemBedrockOreNew extends Item { String type = StatCollector.translateToLocalFormatted(this.getUnlocalizedNameInefficiently(stack) + ".type." + this.getType(meta).suffix + ".name"); return StatCollector.translateToLocalFormatted(this.getUnlocalizedNameInefficiently(stack) + ".grade." + this.getGrade(meta).name().toLowerCase(Locale.US) + ".name", type); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + for(ProcessingTrait trait : this.getGrade(stack.getItemDamage()).traits) { + list.add(I18nUtil.resolveKey(this.getUnlocalizedNameInefficiently(stack) + ".trait." + trait.name().toLowerCase(Locale.US))); + } + } public static enum BedrockOreType { // primary sulfuric solvent radsolvent @@ -147,6 +181,7 @@ public class ItemBedrockOreNew extends Item { @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass != 0) return 0xFFFFFF; BedrockOreGrade grade = this.getGrade(stack.getItemDamage()); return grade.tint; } @@ -156,43 +191,55 @@ public class ItemBedrockOreNew extends Item { public static final int arc = 0xC3A2A2; public static final int washed = 0xDBE2CB; + public static enum ProcessingTrait { + ROASTED, + ARC, + WASHED, + CENTRIFUGED, + SULFURIC, + SOLVENT, + RAD + } + public static enum BedrockOreGrade { - BASE(none, "base"), //from the slopper - BASE_ROASTED(roasted, "base"), //optional combination oven step, yields vitriol - BASE_WASHED(washed, "base"), //primitive-ass acidizer with water - PRIMARY(none, "primary"), //centrifuging for more primary - PRIMARY_ROASTED(roasted, "primary"), //optional comboven - PRIMARY_SULFURIC(0xFFFFD3, "primary"), //sulfuric acid - PRIMARY_NOSULFURIC(0xD3D4FF, "primary"),//from centrifuging, sulfuric byproduct removed - PRIMARY_SOLVENT(0xD3F0FF, "primary"), //solvent - PRIMARY_NOSOLVENT(0xFFDED3, "primary"), //solvent byproduct removed - PRIMARY_RAD(0xECFFD3, "primary"), //radsolvent - PRIMARY_NORAD(0xEBD3FF, "primary"), //radsolvent byproduct removed - PRIMARY_FIRST(0xFFD3D4, "primary"), //higher first material yield - PRIMARY_SECOND(0xD3FFEB, "primary"), //higher second material yield - CRUMBS(none, "crumbs"), //endpoint for primary, recycling + BASE(none, "base"), //from the slopper + BASE_ROASTED(roasted, "base", ROASTED), //optional combination oven step, yields vitriol + BASE_WASHED(washed, "base", WASHED), //primitive-ass acidizer with water + PRIMARY(none, "primary", CENTRIFUGED), //centrifuging for more primary + PRIMARY_ROASTED(roasted, "primary", ROASTED), //optional comboven + PRIMARY_SULFURIC(0xFFFFD3, "primary", SULFURIC), //sulfuric acid + PRIMARY_NOSULFURIC(0xD3D4FF, "primary", CENTRIFUGED, SULFURIC), //from centrifuging, sulfuric byproduct removed + PRIMARY_SOLVENT(0xD3F0FF, "primary", SOLVENT), //solvent + PRIMARY_NOSOLVENT(0xFFDED3, "primary", CENTRIFUGED, SOLVENT), //solvent byproduct removed + PRIMARY_RAD(0xECFFD3, "primary", RAD), //radsolvent + PRIMARY_NORAD(0xEBD3FF, "primary", CENTRIFUGED, RAD), //radsolvent byproduct removed + PRIMARY_FIRST(0xFFD3D4, "primary", CENTRIFUGED), //higher first material yield + PRIMARY_SECOND(0xD3FFEB, "primary", CENTRIFUGED), //higher second material yield + CRUMBS(none, "crumbs", CENTRIFUGED), //endpoint for primary, recycling - SULFURIC_BYPRODUCT(none, "sulfuric"), //from centrifuging - SULFURIC_ROASTED(roasted, "sulfuric"), //comboven again - SULFURIC_ARC(arc, "sulfuric"), //alternate step - SULFURIC_WASHED(washed, "sulfuric"), //sulfuric endpoint + SULFURIC_BYPRODUCT(none, "sulfuric", CENTRIFUGED, SULFURIC), //from centrifuging + SULFURIC_ROASTED(roasted, "sulfuric", ROASTED, SULFURIC), //comboven again + SULFURIC_ARC(arc, "sulfuric", ARC, SULFURIC), //alternate step + SULFURIC_WASHED(washed, "sulfuric", WASHED, SULFURIC), //sulfuric endpoint - SOLVENT_BYPRODUCT(none, "solvent"), //from centrifuging - SOLVENT_ROASTED(roasted, "solvent"), //comboven again - SOLVENT_ARC(arc, "solvent"), //alternate step - SOLVENT_WASHED(washed, "solvent"), //solvent endpoint + SOLVENT_BYPRODUCT(none, "solvent", CENTRIFUGED, SOLVENT), //from centrifuging + SOLVENT_ROASTED(roasted, "solvent", ROASTED, SOLVENT), //comboven again + SOLVENT_ARC(arc, "solvent", ARC, SOLVENT), //alternate step + SOLVENT_WASHED(washed, "solvent", WASHED, SOLVENT), //solvent endpoint - RAD_BYPRODUCT(none, "rad"), //from centrifuging - RAD_ROASTED(roasted, "rad"), //comboven again - RAD_ARC(arc, "rad"), //alternate step - RAD_WASHED(washed, "rad"); //rad endpoint + RAD_BYPRODUCT(none, "rad", CENTRIFUGED, RAD), //from centrifuging + RAD_ROASTED(roasted, "rad", ROASTED, RAD), //comboven again + RAD_ARC(arc, "rad", ARC, RAD), //alternate step + RAD_WASHED(washed, "rad", WASHED, RAD); //rad endpoint public int tint; public String prefix; + public ProcessingTrait[] traits; - private BedrockOreGrade(int tint, String prefix) { + private BedrockOreGrade(int tint, String prefix, ProcessingTrait... traits) { this.tint = tint; this.prefix = prefix; + this.traits = traits; } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 7c6fd6b3a..8e784c2b7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1999,6 +1999,13 @@ item.bedrock_ore.grade.rad_byproduct.name=%s Bedrock Ore, Cleaned Byproduct item.bedrock_ore.grade.rad_roasted.name=%s Bedrock Ore, Roasted Cleaned Byproduct item.bedrock_ore.grade.rad_arc.name=%s Bedrock Ore, Seared Cleaned Byproduct item.bedrock_ore.grade.rad_washed.name=%s Bedrock Ore, Washed Cleaned Byproduct +item.bedrock_ore.trait.arc=§6Arc Smelted +item.bedrock_ore.trait.centrifuged=§9Centrifuged +item.bedrock_ore.trait.rad=§aTreated with High-Performance Solvent +item.bedrock_ore.trait.roasted=§eCombination Oven Roasted +item.bedrock_ore.trait.solvent=§fTreated with Solvent +item.bedrock_ore.trait.sulfuric=§6Treated with Sulfuric Acid +item.bedrock_ore.trait.washed=§bWashed item.bedrock_ore.type.actinide.name=Actinide item.bedrock_ore.type.crystal.name=Crystalline item.bedrock_ore.type.heavy.name=Heavy Metal diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png new file mode 100644 index 0000000000000000000000000000000000000000..77aba449479fd334c885297c3ab6b0860a0216e5 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfm?V_VboMi7`8a&}D(AFsi;m)dWh+_2|zJGg;` ZK|_v1_5Rb9LO@d(JYD@<);T3K0RY%vDS-e0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png new file mode 100644 index 0000000000000000000000000000000000000000..95f45567c8b4200a8f948ff72aacba81ebf93361 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfI^i7!PC{xWt~$(69862E7|}6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaa9ba1bab5c057e6cf097bdf8ba2f884896b13 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfIEGmC zCMQU+E=~|J0D(!X9{vXc`T0d@2`MQF6AbTq?_%utv-<1)%y?oJ1CN2xq|AmjH{(Ri Z7*dY&2wrMF%>*=v!PC{xWt~$(69C-mC@TN} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png new file mode 100644 index 0000000000000000000000000000000000000000..14b860e0c4c74422706516da7a0c05391d34b22b GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf Date: Fri, 28 Jun 2024 14:03:17 +0200 Subject: [PATCH 2/2] slopper --- .../java/com/hbm/inventory/fluid/Fluids.java | 4 +- .../machine/TileEntityMachineOreSlopper.java | 164 ++++++++++++++++++ .../assets/hbm/textures/gui/fluids/slop.png | Bin 0 -> 554 bytes .../hbm/textures/models/tank/tank_SLOP.png | Bin 0 -> 1091 bytes 4 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/slop.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 77e01d676..97e4d45d1 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -176,6 +176,7 @@ public class Fluids { public static FluidType FULLERENE; public static FluidType STELLAR_FLUX; public static FluidType VITRIOL; + public static FluidType SLOP; /* Lagacy names for compatibility purposes */ @Deprecated public static FluidType ACID; //JAOPCA uses this, apparently @@ -377,7 +378,8 @@ public class Fluids { NAPHTHA_DS = new FluidType("NAPHTHA_DS", 0x63614E, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(LIQUID, VISCOUS, P_FUEL); LIGHTOIL_DS = new FluidType("LIGHTOIL_DS", 0x63543E, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xB46B52)).addTraits(LIQUID, P_FUEL); STELLAR_FLUX = new FluidType("STELLAR_FLUX", 0xE300FF, 0, 4, 4, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS); - VITRIOL = new FluidType(140, "VITRIOL", 0x6E5222, 2, 0, 1, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + VITRIOL = new FluidType("VITRIOL", 0x6E5222, 2, 0, 1, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + SLOP = new FluidType(141, "SLOP", 0x929D45, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 1fdbe4de6..dccefcab4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -1,31 +1,195 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.container.ContainerOreSlopper; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIOreSlopper; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemBedrockOreBase; +import com.hbm.items.special.ItemBedrockOreNew; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IGUIProvider { + + public long power; + public static final long maxPower = 1_000_000; + + public static final int waterUsedBase = 1_000; + public int waterUsed = waterUsedBase; + public static final long consumptionBase = 200; + public long consumption = consumptionBase; + + public float progress; + public boolean processing; + + public SlopperAnimation animation = SlopperAnimation.LOWERING; + public float slider; + public float prevSlider; + public float bucket; + public float prevBucket; + public int delay; + + public static FluidTank[] tanks; + public double[] ores = new double[BedrockOreType.values().length]; public TileEntityMachineOreSlopper() { super(11); + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.WATER, 16_000); + tanks[1] = new FluidTank(Fluids.SLOP, 16_000); } @Override public String getName() { return "container.machineOreSlopper"; } + + public static enum SlopperAnimation { + LOWERING, LIFTING, MOVE_SHREDDER, DUMPING, MOVE_BUCKET + } @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + + tanks[0].setType(1, slots); + FluidType conversion = this.getFluidOutput(tanks[0].getTankType()); + if(conversion != null) tanks[1].setTankType(conversion); + + this.processing = false; + + if(canSlop()) { + this.power -= this.consumption; + this.progress += 1F/200F; + this.processing = true; + boolean markDirty = false; + + while(progress >= 1F && canSlop()) { + progress -= 1F; + + for(BedrockOreType type : BedrockOreType.values()) { + ores[type.ordinal()] += ItemBedrockOreBase.getOreAmount(slots[2], type); + } + + this.decrStackSize(2, 1); + this.tanks[0].setFill(this.tanks[0].getFill() - waterUsed); + this.tanks[1].setFill(this.tanks[1].getFill() + waterUsed); + markDirty = true; + } + + if(markDirty) this.markDirty(); + + } else { + this.progress = 0; + } + + for(BedrockOreType type : BedrockOreType.values()) { + ItemStack output = ItemBedrockOreNew.make(BedrockOreGrade.BASE, type); + outer: while(ores[type.ordinal()] >= 1) { + for(int i = 3; i <= 8; i++) if(slots[i] != null && slots[i].getItem() == output.getItem() && slots[i].getItemDamage() == output.getItemDamage() && slots[i].stackSize < output.getMaxStackSize()) { + slots[i].stackSize++; ores[type.ordinal()] -= 1F; continue outer; + } + for(int i = 3; i <= 8; i++) if(slots[i] == null) { + slots[i] = output; ores[type.ordinal()] -= 1F; continue outer; + } + } + } + + } else { + + this.prevSlider = this.slider; + this.prevBucket = this.bucket; + + if(this.processing) { + + if(delay > 0) { + delay--; + return; + } + + switch(animation) { + case LOWERING: + this.bucket += 1F/40F; + if(bucket >= 1F) { + bucket = 1F; + animation = SlopperAnimation.LIFTING; + delay = 20; + } + break; + case LIFTING: + this.bucket -= 1F/40F; + if(bucket <= 0) { + bucket = 0F; + animation = SlopperAnimation.MOVE_SHREDDER; + delay = 10; + } + break; + case MOVE_SHREDDER: + this.slider += 1/60F; + if(slider >= 1F) { + slider = 1F; + animation = SlopperAnimation.DUMPING; + delay = 60; + } + break; + case DUMPING: + animation = SlopperAnimation.MOVE_BUCKET; + break; + case MOVE_BUCKET: + this.slider -= 1/60F; + if(slider <= 0F) { + animation = SlopperAnimation.LOWERING; + delay = 10; + } + break; + } + } + } + } + + @Override public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeFloat(progress); + buf.writeBoolean(processing); + } + + @Override public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progress = buf.readFloat(); + this.processing = buf.readBoolean(); + } + + public boolean canSlop() { + if(this.getFluidOutput(tanks[0].getTankType()) == null) return false; + if(tanks[0].getFill() < waterUsed) return false; + if(tanks[1].getFill() + waterUsed > tanks[1].getMaxFill()) return false; + if(power < consumption) return false; + + return slots[2] != null && slots[2].getItem() == ModItems.bedrock_ore_base; + } + + public FluidType getFluidOutput(FluidType input) { + if(input == Fluids.WATER) return Fluids.SLOP; + return null; } @Override diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/slop.png b/src/main/resources/assets/hbm/textures/gui/fluids/slop.png new file mode 100644 index 0000000000000000000000000000000000000000..4d521d5856042b92c6851c213fe426b7498a2046 GIT binary patch literal 554 zcmV+_0@eMAP)^#*4Fy}XbR@;>YcTcRxWd_1h4 z2!uhDbnBkF{^#G{zy1KU);NxXX_|1((OTnL=XnC)y{Gq%nGr&GoT)0UHTHc6AjZhL zu7nU!Rkm$IRhg!Vr>7_OeW$gCa}E)~mr{n(G)?53NhuLRp!d!ta2y8!&N%=|Da06& zZQF3pal75dtF=~o@8p~j5kd%f@5wojt*Q?TA~M=Kj$;(B>x!x(A`c~zVe#|xlMn*i zw&9m$8NfmaqcEj}s$yn8n3x&!JQHK2_l}4N=Xs*4s4Bg8oO9%yF*9nd!?&3MjP_L( zf5E$!sxr?rDWx$P@BJ7hK<}Lp0%nH4=>FeEt(8*BU~r!2$UsVIbOIpH&(C=8Nhz@` z%Lq|QX-vU;&$29-8Tb30`~5yx_?+`-M?_FnN+~$!2AAvN%gYO9Mk$3_>!Sk^q4&;t zp2Qf36*J>@y8(>iudgrO-`|Nb{*AJ8Zuq*WzrMcm_V&j0_&m=e1EmyNYa`;4bEdU+ z%@kGT07*qoM6N<$f@38IHvj+t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png b/src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png new file mode 100644 index 0000000000000000000000000000000000000000..7e99ca01c85d1b9ba7c33d01e05a6b755d54e904 GIT binary patch literal 1091 zcmeAS@N?(olHy`uVBq!ia0vp^RY2Us!3HEZPulwcNU;<`sUZYbI*$fEhA*lrx^=c@_dS_61mkD9lM`lOS6-- zR$3y7S7NWPTb$>+`$v|D6?60Bx7Q0FO-CmG5$MJ6A;1V3{5orzOjwYH+vEG}oSWPbj1ai-X#NwM<3eFJ~h zD7@HZ{NQt}d8=8IQ~H6|yWhQlN9-y3qNmTY3#eNj=b+TOClD&n_Gqe-82h2lqm3($ENO$OyHm}ozHOU_NOZIVYi#*5 ziBjo9>Ki7V|n+E|cOn6M~9hC}_`UME$zyKV-)nJm%KB|U3(9~`+R)|phOFegH$ z!>jr6;kAz$xpG;6{<^8{8uf8i&F;SQ#TOSTKayVmum8kfV0dL7U2U~nQDD8&p=)9p zJz{e$?n^((ya)>X%pgRI#?eZON zpvY2))9lK8?hsYt@+0!0%g5c}1xeqydIK|*HMR&IS>2RaucV~3_+#LNpLMcb-pZ95|1v)JDQfw?fUp)xuD=ozva^RA8)%CJz00xognklyT0tHmtSrP z4}D_vXlhfE;^|i2z!bqpp&=dNZc}!Dl<1ae`sviYgL_u+L{|~6y*Z*sU&r6YZC`XP&c#aMhgK@64kn0(VDj7J3RQbU5{v6 o2(A}$-P0uek)WvI(be@%@2ie7T$$VrEEO0$UHx3vIVCg!0Q)QZvH$=8 literal 0 HcmV?d00001