From 0df987b6895c1288aafadf5295c32e2297ceb2ef Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 5 Mar 2023 18:37:23 +0100 Subject: [PATCH] finished vacuum refinery, more oils --- .../container/ContainerMachineRefinery.java | 4 +- .../java/com/hbm/inventory/fluid/Fluids.java | 23 ++- .../gui/GUIMachineVacuumDistill.java | 6 +- .../inventory/recipes/FractionRecipes.java | 3 + src/main/java/com/hbm/items/ModItems.java | 9 ++ .../entity/projectile/RenderChemical.java | 14 +- .../tileentity/RenderCatalyticReformer.java | 46 +++++- .../render/tileentity/RendererObjTester.java | 27 +++- .../com/hbm/render/util/HorsePronter.java | 15 +- .../oil/TileEntityMachineVacuumDistill.java | 134 ++++++++++++++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 7 + src/main/resources/assets/hbm/lang/en_US.lang | 7 + .../textures/gui/fluids/heavyoil_vacuum.png | Bin 0 -> 546 bytes .../textures/gui/fluids/lightoil_vacuum.png | Bin 0 -> 491 bytes .../hbm/textures/gui/fluids/oil_base.png | Bin 0 -> 548 bytes .../hbm/textures/gui/fluids/reformate.png | Bin 0 -> 554 bytes .../hbm/textures/gui/fluids/sourgas.png | Bin 0 -> 555 bytes .../assets/hbm/textures/gui/fluids/xylene.png | Bin 0 -> 556 bytes .../assets/hbm/textures/models/horse/dyx.png | Bin 0 -> 648 bytes .../models/machines/catalytic_reformer.png | Bin 2679 -> 5789 bytes 20 files changed, 269 insertions(+), 26 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/heavyoil_vacuum.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/lightoil_vacuum.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/oil_base.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/reformate.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/sourgas.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/xylene.png create mode 100644 src/main/resources/assets/hbm/textures/models/horse/dyx.png diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java b/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java index 86cf6a951..cd3b03b38 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java @@ -28,9 +28,9 @@ public class ContainerMachineRefinery extends Container { this.addSlotToContainer(new Slot(tedf, 3, 80, 90)); //Heavy Oil Output this.addSlotToContainer(new SlotMachineOutput(tedf, 4, 80, 108)); - //Nahptha Input + //Naphtha Input this.addSlotToContainer(new Slot(tedf, 5, 98, 90)); - //Nahptha Output + //Naphtha Output this.addSlotToContainer(new SlotMachineOutput(tedf, 6, 98, 108)); //Light Oil Input this.addSlotToContainer(new Slot(tedf, 7, 116, 90)); diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 523522dfd..286b81c7e 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -97,13 +97,18 @@ public class Fluids { public static FluidType COALCREOSOTE; public static FluidType SEEDSLURRY; public static FluidType NITRIC_ACID; - public static FluidType SOLVENT; //oranic solvent in fact - public static FluidType BLOOD; //BLOOD ORB! BLOOD ORB! BLOOD ORB! + public static FluidType SOLVENT; //oranic solvent in fact + public static FluidType BLOOD; //BLOOD ORB! BLOOD ORB! BLOOD ORB! public static FluidType BLOOD_HOT; public static FluidType SYNGAS; public static FluidType OXYHYDROGEN; public static FluidType RADIOSOLVENT; - public static FluidType CHLORINE; //everone's favorite! + public static FluidType CHLORINE; //everone's favorite! + public static FluidType HEAVYOIL_VACUUM; + public static FluidType REFORMATE; + public static FluidType LIGHTOIL_VACUUM; + public static FluidType SOURGAS; + public static FluidType XYLENE; private static final HashMap idMapping = new HashMap(); private static final HashMap nameMapping = new HashMap(); @@ -223,7 +228,12 @@ public class Fluids { SYNGAS = new FluidType("SYNGAS", 0x131313, 1, 4, 2, EnumSymbol.NONE).addTraits(GASEOUS); OXYHYDROGEN = new FluidType("OXYHYDROGEN", 0x483FC1, 0, 4, 2, EnumSymbol.NONE).addTraits(GASEOUS); RADIOSOLVENT = new FluidType("RADIOSOLVENT", 0xA4D7DD, 3, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, LEADCON, new FT_Corrosive(50), new FT_VentRadiation(0.01F)); - CHLORINE = new FluidType(89, "CHLORINE", 0xBAB572, 4, 0, 0, EnumSymbol.OXIDIZER).addTraits(GASEOUS, new FT_Corrosive(25), new FT_Poison(true, 1)); + CHLORINE = new FluidType("CHLORINE", 0xBAB572, 4, 0, 0, EnumSymbol.OXIDIZER).addTraits(GASEOUS, new FT_Corrosive(25), new FT_Poison(true, 1)); + HEAVYOIL_VACUUM = new FluidType("HEAVYOIL_VACUUM", 0x131214, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); + REFORMATE = new FluidType("REFORMATE", 0x835472, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID); + LIGHTOIL_VACUUM = new FluidType("LIGHTOIL_VACUUM", 0x8C8851, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID); + SOURGAS = new FluidType("SOURGAS", 0xC9BE0D, 4, 4, 0, EnumSymbol.ACID).addTraits(GASEOUS, new FT_Corrosive(10)); + XYLENE = new FluidType(94, "XYLENE", 0x5C4E76, 2, 3, 0, EnumSymbol.NONE).addTraits(LIQUID); // ^ ^ ^ ^ ^ ^ ^ ^ @@ -268,10 +278,13 @@ public class Fluids { metaOrder.add(HOTOIL); metaOrder.add(HOTCRACKOIL); metaOrder.add(HEAVYOIL); + metaOrder.add(HEAVYOIL_VACUUM); metaOrder.add(NAPHTHA); metaOrder.add(NAPHTHA_CRACK); + metaOrder.add(REFORMATE); metaOrder.add(LIGHTOIL); metaOrder.add(LIGHTOIL_CRACK); + metaOrder.add(LIGHTOIL_VACUUM); metaOrder.add(BITUMEN); metaOrder.add(SMEAR); metaOrder.add(HEATINGOIL); @@ -279,11 +292,13 @@ public class Fluids { metaOrder.add(LUBRICANT); metaOrder.add(GAS); metaOrder.add(PETROLEUM); + metaOrder.add(SOURGAS); metaOrder.add(LPG); metaOrder.add(SYNGAS); metaOrder.add(OXYHYDROGEN); metaOrder.add(AROMATICS); metaOrder.add(UNSATURATEDS); + metaOrder.add(XYLENE); metaOrder.add(DIESEL); metaOrder.add(DIESEL_CRACK); metaOrder.add(KEROSENE); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java b/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java index ccc063692..c8f7ab740 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java @@ -40,7 +40,7 @@ public class GUIMachineVacuumDistill extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 0xffffff); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -51,9 +51,9 @@ public class GUIMachineVacuumDistill extends GuiInfoContainer { drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); int j = (int) (refinery.power * 54 / refinery.maxPower); - drawTexturedModalRect(guiLeft + 8, guiTop + 70 - j, 176, 52 - j, 16, j); + drawTexturedModalRect(guiLeft + 26, guiTop + 70 - j, 176, 52 - j, 16, j); - refinery.tanks[0].renderTank(guiLeft + 26, guiTop + 70, this.zLevel, 34, 52); + refinery.tanks[0].renderTank(guiLeft + 44, guiTop + 70, this.zLevel, 16, 52); refinery.tanks[1].renderTank(guiLeft + 80, guiTop + 70, this.zLevel, 16, 52); refinery.tanks[2].renderTank(guiLeft + 98, guiTop + 70, this.zLevel, 16, 52); refinery.tanks[3].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52); diff --git a/src/main/java/com/hbm/inventory/recipes/FractionRecipes.java b/src/main/java/com/hbm/inventory/recipes/FractionRecipes.java index 4283ffccc..310914410 100644 --- a/src/main/java/com/hbm/inventory/recipes/FractionRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/FractionRecipes.java @@ -36,6 +36,8 @@ public class FractionRecipes extends SerializableRecipe { public static final int coal_frac_oil = 70; public static final int creo_frac_coaloil = 10; public static final int creo_frac_bitu = 90; + public static final int reform_frac_arom = 40; + public static final int reform_frac_xyle = 60; private static Map> fractions = new HashMap(); @@ -49,6 +51,7 @@ public class FractionRecipes extends SerializableRecipe { fractions.put(Fluids.LIGHTOIL_CRACK, new Pair(new FluidStack(Fluids.KEROSENE, lcrack_frac_kero), new FluidStack(Fluids.PETROLEUM, lcrack_frac_petro))); fractions.put(Fluids.COALOIL, new Pair(new FluidStack(Fluids.COALGAS, coal_frac_coalgas), new FluidStack(Fluids.OIL, coal_frac_oil))); fractions.put(Fluids.COALCREOSOTE, new Pair(new FluidStack(Fluids.COALOIL, creo_frac_coaloil), new FluidStack(Fluids.BITUMEN, creo_frac_bitu))); + fractions.put(Fluids.REFORMATE, new Pair(new FluidStack(Fluids.AROMATICS, reform_frac_arom), new FluidStack(Fluids.XYLENE, reform_frac_xyle))); } public static Pair getFractions(FluidType oil) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 0b61e4e37..e041649d6 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -344,6 +344,8 @@ public class ModItems { public static Item ingot_polymer; public static Item ingot_bakelite; public static Item ingot_rubber; + public static Item ingot_pet; + public static Item ingot_pvc; public static Item ingot_fiberglass; public static Item ingot_asbestos; @@ -1232,6 +1234,7 @@ public class ModItems { public static Item ballistite; public static Item ball_dynamite; public static Item ball_tnt; + public static Item ball_tatb; public static Item ball_fireclay; public static Item pellet_cluster; @@ -2818,6 +2821,8 @@ public class ModItems { ingot_polymer = new ItemCustomLore().setUnlocalizedName("ingot_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_polymer"); ingot_bakelite = new ItemCustomLore().setUnlocalizedName("ingot_bakelite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bakelite"); ingot_rubber = new ItemCustomLore().setUnlocalizedName("ingot_rubber").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_rubber"); + ingot_pet = new ItemCustomLore().setUnlocalizedName("ingot_pet").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pet"); + ingot_pvc = new ItemCustomLore().setUnlocalizedName("ingot_pvc").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pvc"); ingot_desh = new ItemCustomLore().setUnlocalizedName("ingot_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_desh"); nugget_desh = new ItemCustomLore().setUnlocalizedName("nugget_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_desh"); ingot_dineutronium = new ItemCustomLore().setUnlocalizedName("ingot_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_dineutronium"); @@ -4058,6 +4063,7 @@ public class ModItems { ballistite = new Item().setUnlocalizedName("ballistite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ballistite"); ball_dynamite = new Item().setUnlocalizedName("ball_dynamite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_dynamite"); ball_tnt = new Item().setUnlocalizedName("ball_tnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tnt"); + ball_tatb = new Item().setUnlocalizedName("ball_tatb").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tatb"); ball_fireclay = new Item().setUnlocalizedName("ball_fireclay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_fireclay"); pellet_gas = new ItemCustomLore().setUnlocalizedName("pellet_gas").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_gas"); magnetron = new ItemCustomLore().setUnlocalizedName("magnetron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnetron_alt"); @@ -5908,6 +5914,8 @@ public class ModItems { GameRegistry.registerItem(ingot_polymer, ingot_polymer.getUnlocalizedName()); GameRegistry.registerItem(ingot_bakelite, ingot_bakelite.getUnlocalizedName()); GameRegistry.registerItem(ingot_rubber, ingot_rubber.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pet, ingot_pet.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pvc, ingot_pvc.getUnlocalizedName()); GameRegistry.registerItem(ingot_schraranium, ingot_schraranium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidium, ingot_schrabidium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidate, ingot_schrabidate.getUnlocalizedName()); @@ -6148,6 +6156,7 @@ public class ModItems { GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName()); GameRegistry.registerItem(ball_dynamite, ball_dynamite.getUnlocalizedName()); GameRegistry.registerItem(ball_tnt, ball_tnt.getUnlocalizedName()); + GameRegistry.registerItem(ball_tatb, ball_tatb.getUnlocalizedName()); GameRegistry.registerItem(ball_fireclay, ball_fireclay.getUnlocalizedName()); //Ores diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java b/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java index fc6fa00af..aa6fab526 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java @@ -1,6 +1,7 @@ package com.hbm.render.entity.projectile; import java.awt.Color; +import java.util.Random; import org.lwjgl.opengl.GL11; @@ -89,13 +90,18 @@ public class RenderChemical extends Render { Tessellator tess = Tessellator.instance; GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + + Random rand = new Random(chem.getEntityId()); + int i = rand.nextInt(2); + int j = rand.nextInt(2); + tess.startDrawingQuads(); tess.setNormal(0.0F, 1.0F, 0.0F); tess.setColorRGBA_I(color, (int) Math.max(127 * (1 - exp), 0)); - tess.addVertexWithUV(-size, -size, 0.0D, 1, 1); - tess.addVertexWithUV(size, -size, 0.0D, 0, 1); - tess.addVertexWithUV(size, size, 0.0D, 0, 0); - tess.addVertexWithUV(-size, size, 0.0D, 1, 0); + tess.addVertexWithUV(-size, -size, 0.0D, 1 - i, 1 - j); + tess.addVertexWithUV(size, -size, 0.0D, i, 1 - j); + tess.addVertexWithUV(size, size, 0.0D, i, j); + tess.addVertexWithUV(-size, size, 0.0D, 1 - i, j); tess.draw(); GL11.glDepthMask(true); diff --git a/src/main/java/com/hbm/render/tileentity/RenderCatalyticReformer.java b/src/main/java/com/hbm/render/tileentity/RenderCatalyticReformer.java index 3c7954f3c..bd66409ad 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCatalyticReformer.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCatalyticReformer.java @@ -4,16 +4,27 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +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.util.HorsePronter; +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; public class RenderCatalyticReformer extends TileEntitySpecialRenderer implements IItemRendererProvider { + private static ResourceLocation extra = new ResourceLocation(RefStrings.MODID, "textures/models/horse/dyx.png"); + @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { @@ -34,6 +45,37 @@ public class RenderCatalyticReformer extends TileEntitySpecialRenderer implement ResourceManager.catalytic_reformer.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); + /// rapidly spinning dicks /// + GL11.glTranslated(-1.125, 1.375, 1); + double s = 0.125D; + GL11.glScaled(s, s, s); + GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); + GL11.glTranslated(0, 0.1, -0.5); + + this.bindTexture(extra); + HorsePronter.reset(); + double r = 60; + HorsePronter.pose(HorsePronter.id_body, 0, -r, 0); + HorsePronter.pose(HorsePronter.id_tail, 0, 45, 90); + HorsePronter.pose(HorsePronter.id_lbl, 0, -90 + r, 35); + HorsePronter.pose(HorsePronter.id_rbl, 0, -90 + r, -35); + HorsePronter.pose(HorsePronter.id_lfl, 0, r - 10, 5); + HorsePronter.pose(HorsePronter.id_rfl, 0, r - 10, -5); + HorsePronter.pose(HorsePronter.id_head, 0, r, 0); + HorsePronter.enableHorn(); + HorsePronter.enableWings(); + HorsePronter.pront(); + + ItemStack stack = new ItemStack(ModItems.cigarette); + double scale = 0.25; + GL11.glTranslated(0.02, 1.13, -0.42); + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, -1, 0); + GL11.glRotated(60, 0, 0, -1); + 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); + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); } @@ -47,8 +89,8 @@ public class RenderCatalyticReformer extends TileEntitySpecialRenderer implement public IItemRenderer getRenderer() { return new ItemRenderBase() { public void renderInventory() { - GL11.glTranslated(0, -4, 0); - GL11.glScaled(3, 3, 3); + GL11.glTranslated(0, -3, 0); + GL11.glScaled(3.5, 3.5, 3.5); } public void renderCommon() { GL11.glScaled(0.5, 0.5, 0.5); diff --git a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java index 89465b88b..26a0d0625 100644 --- a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java +++ b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java @@ -6,12 +6,19 @@ import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.render.util.HorsePronter; + +import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; @@ -35,8 +42,9 @@ public class RendererObjTester extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); GL11.glEnable(GL11.GL_LIGHTING); - - this.bindTexture(HorsePronter.tex_demohorse); + + GL11.glTranslated(0, 0, 0.75); + this.bindTexture(new ResourceLocation(RefStrings.MODID, "textures/models/horse/dyx.png")); HorsePronter.reset(); //HorsePronter.pose(HorsePronter.id_lfl, 0, System.currentTimeMillis() % 360 / 10D, 0); double r = 60; @@ -48,8 +56,23 @@ public class RendererObjTester extends TileEntitySpecialRenderer { HorsePronter.pose(HorsePronter.id_rfl, 0, r - 10, -5); HorsePronter.pose(HorsePronter.id_head, 0, r, 0); HorsePronter.enableHorn(); + HorsePronter.enableWings(); HorsePronter.pront(); + ItemStack stack = new ItemStack(ModItems.cigarette); + double scale = 0.25; + GL11.glTranslated(0.02, 1.13, -0.42); + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, -1, 0); + GL11.glRotated(60, 0, 0, -1); + bindTexture(TextureMap.locationItemsTexture); + IIcon icon = stack.getIconIndex(); + float f14 = icon.getMinU(); + float f15 = icon.getMaxU(); + float f4 = icon.getMinV(); + float f5 = icon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f15, f4, f14, f5, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); + GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/util/HorsePronter.java b/src/main/java/com/hbm/render/util/HorsePronter.java index e47629125..6cba0146c 100644 --- a/src/main/java/com/hbm/render/util/HorsePronter.java +++ b/src/main/java/com/hbm/render/util/HorsePronter.java @@ -71,6 +71,17 @@ public class HorsePronter { enableWings(); } + public static void poseStandardSit() { + double r = 60; + pose(HorsePronter.id_body, 0, -r, 0); + pose(HorsePronter.id_tail, 0, 45, 90); + pose(HorsePronter.id_lbl, 0, -90 + r, 35); + pose(HorsePronter.id_rbl, 0, -90 + r, -35); + pose(HorsePronter.id_lfl, 0, r - 10, 5); + pose(HorsePronter.id_rfl, 0, r - 10, -5); + pose(HorsePronter.id_head, 0, r, 0); + } + public static void pose(int id, double yaw, double pitch, double roll) { pose[id].xCoord = yaw; pose[id].yCoord = pitch; @@ -80,6 +91,7 @@ public class HorsePronter { public static void pront() { GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); doTransforms(id_body); horse.renderPart("Body"); @@ -100,7 +112,8 @@ public class HorsePronter { horse.renderPart("LeftWing"); horse.renderPart("RightWing"); } - + + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 98264f867..da23b73fe 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -1,11 +1,15 @@ package com.hbm.tileentity.machine.oil; import com.hbm.inventory.container.ContainerMachineVacuumDistill; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineVacuumDistill; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; import api.hbm.fluid.IFluidStandardTransceiver; @@ -14,10 +18,12 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { public long power; public static final long maxPower = 1_000_000; @@ -29,10 +35,10 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem this.tanks = new FluidTank[5]; this.tanks[0] = new FluidTank(Fluids.OIL, 64_000); - this.tanks[1] = new FluidTank(Fluids.HEAVYOIL, 24_000); - this.tanks[2] = new FluidTank(Fluids.NAPHTHA, 24_000); - this.tanks[3] = new FluidTank(Fluids.LIGHTOIL, 24_000); - this.tanks[4] = new FluidTank(Fluids.PETROLEUM, 24_000); + this.tanks[1] = new FluidTank(Fluids.HEAVYOIL_VACUUM, 24_000); + this.tanks[2] = new FluidTank(Fluids.REFORMATE, 24_000); + this.tanks[3] = new FluidTank(Fluids.LIGHTOIL_VACUUM, 24_000); + this.tanks[4] = new FluidTank(Fluids.SOURGAS, 24_000); } @Override @@ -43,6 +49,99 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.updateConnections(); + power = Library.chargeTEFromItems(slots, 0, power, maxPower); + tanks[0].loadTank(1, 2, slots); + + refine(); + + tanks[1].unloadTank(3, 4, slots); + tanks[2].unloadTank(5, 6, slots); + tanks[3].unloadTank(7, 8, slots); + tanks[4].unloadTank(9, 10, slots); + + for(DirPos pos : getConPos()) { + for(int i = 1; i < 5; i++) { + if(tanks[i].getFill() > 0) { + this.sendFluid(tanks[i].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + } + + NBTTagCompound data = new NBTTagCompound(); + data.setLong("power", this.power); + for(int i = 0; i < 5; i++) tanks[i].writeToNBT(data, "" + i); + this.networkPack(data, 150); + } + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.power = nbt.getLong("power"); + for(int i = 0; i < 5; i++) tanks[i].readFromNBT(nbt, "" + i); + } + + private void refine() { + + if(power < 10_000) return; + if(tanks[0].getFill() < 100) return; + if(tanks[1].getFill() + 40 > tanks[1].getMaxFill()) return; + if(tanks[2].getFill() + 25 > tanks[2].getMaxFill()) return; + if(tanks[3].getFill() + 15 > tanks[3].getMaxFill()) return; + if(tanks[4].getFill() + 10 > tanks[4].getMaxFill()) return; + + power -= 10_000; + tanks[0].setFill(tanks[0].getFill() - 100); + tanks[1].setFill(tanks[1].getFill() + 40); + tanks[2].setFill(tanks[2].getFill() + 25); + tanks[3].setFill(tanks[3].getFill() + 15); + tanks[4].setFill(tanks[4].getFill() + 10); + } + + private void updateConnections() { + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z) + }; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + power = nbt.getLong("power"); + tanks[0].readFromNBT(nbt, "input"); + tanks[1].readFromNBT(nbt, "heavy"); + tanks[2].readFromNBT(nbt, "naphtha"); + tanks[3].readFromNBT(nbt, "light"); + tanks[4].readFromNBT(nbt, "petroleum"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setLong("power", power); + tanks[0].writeToNBT(nbt, "input"); + tanks[1].writeToNBT(nbt, "heavy"); + tanks[2].writeToNBT(nbt, "naphtha"); + tanks[3].writeToNBT(nbt, "light"); + tanks[4].writeToNBT(nbt, "petroleum"); } AxisAlignedBB bb = null; @@ -87,17 +186,36 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem @Override public FluidTank[] getAllTanks() { - return null; + return tanks; } @Override public FluidTank[] getSendingTanks() { - return null; + return new FluidTank[] {tanks[1], tanks[2], tanks[3], tanks[4]}; } @Override public FluidTank[] getReceivingTanks() { - return null; + return new FluidTank[] {tanks[0]}; + } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.DOWN; + } + + @Override + public void writeNBT(NBTTagCompound nbt) { + if(tanks[0].getFill() == 0 && tanks[1].getFill() == 0 && tanks[2].getFill() == 0 && tanks[3].getFill() == 0 && tanks[4].getFill() == 0) return; + NBTTagCompound data = new NBTTagCompound(); + for(int i = 0; i < 5; i++) this.tanks[i].writeToNBT(data, "" + i); + nbt.setTag(NBT_PERSISTENT_KEY, data); + } + + @Override + public void readNBT(NBTTagCompound nbt) { + NBTTagCompound data = nbt.getCompoundTag(NBT_PERSISTENT_KEY); + for(int i = 0; i < 5; i++) this.tanks[i].readFromNBT(data, "" + i); } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d6cae8c05..f633106c1 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -403,6 +403,7 @@ container.turretRichard=Richard container.turretSentry=Brown container.turretTauon=Tauon container.uf6_tank=UF6 Tank +container.vacuumDistill=Vakuumraffinerie container.wasteDrum=Abklingbecken-Trommel container.watzPowerplant=Watzkraftwerk container.zirnox=ZIRNOX Atomreaktor @@ -611,6 +612,7 @@ hbmfluid.gasoline=Benzin hbmfluid.gasoline_leaded=Bleibenzin hbmfluid.heatingoil=Heizöl hbmfluid.heavyoil=Schweröl +hbmfluid.heavyoil_vacuum=Vakuum-Schweröl hbmfluid.heavywater=Schweres Wasser hbmfluid.helium3=Helium-3 hbmfluid.hotcrackoil=Heißes Crack-Öl @@ -621,6 +623,7 @@ hbmfluid.kerosene=Kerosin hbmfluid.lava=Lava hbmfluid.lightoil=Leichtöl hbmfluid.lightoil_crack=Crack-Leichtöl +hbmfluid.lightoil_vacuum=Vakuum-Leichtöl hbmfluid.lpg=LPG hbmfluid.lubricant=Schmiermittel hbmfluid.mercury=Quecksilber @@ -647,12 +650,14 @@ hbmfluid.plasma_xm=Xenon-Quecksilber-Plasma hbmfluid.puf6=Plutoniumhexafluorid hbmfluid.radiosolvent=Hochleistungs-Lösungsmittel hbmfluid.reclaimed=Wiederaufbetreitetes Industrieöl +hbmfluid.reformate=Reformat hbmfluid.salient=Saftiges Grün hbmfluid.sas3=Schrabidiumtrisulfat hbmfluid.schrabidic=Schrabidische Säure hbmfluid.seedslurry=Saatgemisch hbmfluid.smear=Industrieöl hbmfluid.solvent=Lösungsmittel +hbmfluid.sourgas=Saures Gas hbmfluid.spentsteam=Niedrigdruckdampf hbmfluid.steam=Dampf hbmfluid.sulfuric_acid=Schwefelsäure @@ -669,6 +674,7 @@ hbmfluid.watz=Giftiger Schlamm hbmfluid.woodoil=Holzöl hbmfluid.xenon=Xenongas hbmfluid.xpjuice=Erfahrungssaft +hbmfluid.xylene=BTX hbmmat.actinium227=Actinium-227 hbmmat.advancedalloy=Fortgeschrittene Legierung @@ -3885,6 +3891,7 @@ tile.machine_turbine.desc=Effizienz: 85%% tile.machine_turbinegas.name=Kombizyklus-Gasturbine tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranhexafluorid-Tank +tile.machine_vacuum_distill.name=Vakuumraffinerie tile.machine_waste_drum.name=Abklingbecken-Trommel tile.machine_well.name=Ölbohrturm tile.machine_zirnox.name=ZIRNOX Atomreaktor diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index eb33e007e..3975e38c3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -684,6 +684,7 @@ container.turretRichard=Richard container.turretSentry=Brown container.turretTauon=Tauon container.uf6_tank=UF6 Tank +container.vacuumDistill=Vacuum Refinery container.wasteDrum=Spent Fuel Pool Drum container.watzPowerplant=Watz Power Plant container.zirnox=ZIRNOX Nuclear Reactor @@ -1168,6 +1169,7 @@ hbmfluid.gasoline=Gasoline hbmfluid.gasoline_leaded=Leaded Gasoline hbmfluid.heatingoil=Heating Oil hbmfluid.heavyoil=Heavy Oil +hbmfluid.heavyoil_vacuum=Vacuum Heavy Oil hbmfluid.heavywater=Heavy Water hbmfluid.helium3=Helium-3 hbmfluid.hotcrackoil=Hot Cracked Oil @@ -1178,6 +1180,7 @@ hbmfluid.kerosene=Kerosene hbmfluid.lava=Lava hbmfluid.lightoil=Light Oil hbmfluid.lightoil_crack=Cracked Light Oil +hbmfluid.lightoil_vacuum=Vacuum Light Oil hbmfluid.lpg=LPG hbmfluid.lubricant=Engine Lubricant hbmfluid.mercury=Mercury @@ -1204,12 +1207,14 @@ hbmfluid.plasma_xm=Xenon-Mercury Plasma hbmfluid.puf6=Plutonium Hexafluoride hbmfluid.radiosolvent=High-Performance Solvent hbmfluid.reclaimed=Reclaimed Industrial Oil +hbmfluid.reformate=Reformate hbmfluid.salient=Salient Green hbmfluid.sas3=Schrabidium Trisulfide hbmfluid.schrabidic=Schrabidic Acid hbmfluid.seedslurry=Seeding Slurry hbmfluid.smear=Industrial Oil hbmfluid.solvent=Solvent +hbmfluid.sourgas=Sour Gas hbmfluid.spentsteam=Low-Pressure Steam hbmfluid.steam=Steam hbmfluid.sulfuric_acid=Sulfuric Acid @@ -1226,6 +1231,7 @@ hbmfluid.watz=Poisonous Mud hbmfluid.woodoil=Wood Oil hbmfluid.xenon=Xenon Gas hbmfluid.xpjuice=Experience Juice +hbmfluid.xylene=BTX hbmpseudofluid.none=Empty hbmpseudofluid.heuf6=Highly Enriched UF6 hbmpseudofluid.meuf6=Medium Enriched UF6 @@ -4690,6 +4696,7 @@ tile.machine_turbine.desc=Efficiency: 85%% tile.machine_turbinegas.name=Combined Cycle Gas Turbine tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranium Hexafluoride Tank +tile.machine_vacuum_distill.name=Vacuum Refinery tile.machine_waste_drum.name=Spent Fuel Pool Drum tile.machine_well.name=Oil Derrick tile.machine_zirnox.name=ZIRNOX Nuclear Reactor diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/heavyoil_vacuum.png b/src/main/resources/assets/hbm/textures/gui/fluids/heavyoil_vacuum.png new file mode 100644 index 0000000000000000000000000000000000000000..3e45bcf2300c1013ad986190076c7a3cf6bcd498 GIT binary patch literal 546 zcmV+-0^R+IP)y*iv<-<|-a6!v{*97mjUlu~Fb=M2Cw4AfdNGraeI&s3FC3Nc0iLI|wuiuWE> z<$k}Ts*K~v@pvT0NGS#993sMyQtFe&ab(*zrfI@^Ppy?UVBdEDoO1xAln5bkkb`?J z%Yyfw$K!#SQEO$MXSQuaL=X`G9*;-2H_tQ9IR+8wvi5z)d(SWotm}%ZA|iwk`XeC( zuGcHxd+zr;hx6;(vjMBM_KVIrR24HL#@LxOh|@F?V?;!RoHMH0FF5Dewhc4uvH{Et z09Eb#(BQSDs?77;C$#ullufDk9y4QTbeoL^Go{oSlrtAW=77LWmzyYQcB&1hzPY-a?XSh zx)n2HS(ctZz~|>Dm!CffA^fYdbFTYp)ZgFV`S|#tJwDHK??6h4QcAD5Y}-aDrFTG8 zxm+%tc8jrDYe~Jlyf6#{hcBn)*@{z2VVWkKbKGt>07RtoX=>U)Geg>x_IUu-b!Geg kt3m4Vdha`P;W5?-40dqQrWhz!bfRpmA+* zm7%DAK>hjs>+ia*0Eh@NMsjGaF~%SwCAZe%oMRXU+P1}x^0!h7Yb{DC+O{o|dGG)K2Z%A2f-wf?95Kdn zd#-D(S=Y7XDJ5*iXN)Q9JkO+*%3-Ax-unYLN-1KD*nBfkAZV>=+m?ObOOvK)*tQK3 zK|~4+>zrfXcSPjSXxp|jDnM3h7=}Xh&(9CG?|ZJ-EARK4X_^Y|zV8Vk6exKe#}Q); zUDthO?faf(Sr8GdwVcmqPNx&oG#wyiezewv5ZJa2=N$Hazf(u8aZO^)mDU;&A%yVt zK{idza#p8yq%o$b(KO9hg?eMHM4i{QJW&YY%RxO_-cU!K*A`DHeR-=NOWvI2t1aC$ z4aOLjWjVk+K&W}hBWkVbx{mAhiimK#-FQ46#V59D8rrrcgaAO-bzCkNVvKw~A7YGn h?|D9-2VZ1^{R14wJQYSr+oS*h002ovPDHLkV1hCF*8>0m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/oil_base.png b/src/main/resources/assets/hbm/textures/gui/fluids/oil_base.png new file mode 100644 index 0000000000000000000000000000000000000000..abac952dd477a89d4ab46439a16781b74f416d27 GIT binary patch literal 548 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 literal 2679 zcmZ`*dsGtU8^#+t!>pCcW=XY9EiWi7QA=fIxwP^!ZzU?2IW;e&<}E~`W|o)PZ0VY} zOjAPzZ;5CE%M{IdpW(cKT82Ln6% zFnpJ?qj|vWXOrq5zg$H0!Zyq45cEOM5fHVpWXpD6W}NHN`ud6HKR6=M%g81KqjA`& z_QS$L_2V>0ykg1~!SL9s<>>)DAZkDm_F-W7*Lmy?EJc*uv$<)uwxL6}WjB53y> z{l451_E>VrvgOJ_%@q18bC-c9O6~6f<$Kz9h6f{hm0Bkq9Q2|~dSK08HC&x{SnCpw zEy1Dm#7U(y&-AJ>Eib;IjY;%RtBvv+bExs2QPO0i?-Jnb=Q|%uUfbD_-?GV$hGvby z*#x!D@pO0$)3&K4E;N_7;e4gqcWe+^XnCwxr`mN~xN zL---(V$@;)>A|Clr;xj>YY|kbf7PBnV|Kk@Td`kYrBWo66ysN%$+{=JY!lP@RcP6O$*;5!H0K5= zz=YRLM0$V7dd&LhOpN2lmtkUJuKOI8YELx9f>Pt-n_dQw>K~O;%4=Y&G?hF0)<9@( zLZ464G`RKFwKnoM&o|+p))Ph_6uGsrv+EK~(xHBNd$q4E&}XHmhzyx;KQ8rQe5~WC z7G?cM*_%sDMj>&z4OV|xOWrEHEHZr-{a{U*5oDA~*0nduwKmBW3FrIn+GHzWhckfY z37p?FjDM83Z4@AsOd%viCj|Y%wyEZpuU|pPOxG3vKCBui{SV9VjmJlFic>cTzv}*<=hBj%Q?am_WazK1tJlR%9Lkk>Dr^9 zktcxz*0F+xxZ1XPWX6$}XbH}Mo5;!~gc&4>Wx)c)laXu!?+}9l91C0^QNs4C zM+MZT&W>J{^f{p9^`RKUL2g0KAS)VQH8p+A^5tM;of1=OsNW?PC@oqfdK5%qI*eY_ zDx?ljkHmP%z*C!IW!1EVJfRq*``K1FgrFH#>L9T5ZM9AvD>PUoH2)}yRd&jZS`Yin zjb346^Us#%gPyK=^q-51R#Rb27i=N_#oxMP6~%?#Tr|5hgz(@5h0Fx{p`$Vtgj?h3 zKoAm1s6(w!-BL1WzNYmeeY!|Na5DFq5hT~jWLO8B^hEF51v+lb?sel*nr`l)t!t-KR{+m;2!{@E`#KidPoS!4-yiN?PNq5L}wv zodYf59A}=FDJWr}sk;h7o2{-MxEtK6txBhyUras`u`{Ck+V?>qkY<`6ImkkUD0b7o zPLGt2DU$4N%Eu&J)Ea6_Z6_0Y;&0rHZ{F^Z2-!&;pM8Biz-XeCHt03t7>!jC#zCN) z-6zwA+J_iJDxuiM zdSGW&&a4>RQT6tq-%Ay0+yKa+uLl+ysfW(t+8s(J5^fU}j4C zLNRbeDeCPoI|gg|PrUz^x4U{b>{`DEJ6WqJ*kOLKdzapE1|tO4L*CPU9oeCE@4KNj zhD@`Smok&vL|M5Qly}p*J*N-V%il7N{^jUzmRawpwbb;;z5*aNqN8YYh37yPmfJ&sI_N-xkeEfy2G|$Ba1^) zi!BCuG;tR{DTrr+7cf!Q6Sqm+;PxQ=Xv)mRLh@%*_glW%|PB_1P9$C^?Q6DL9FTpG}40?GH^v>fNo%iFWDw+2I#=}*N z^$4WNDfOuHkUOIp(F}Dpcx4}8H(PO#0ZiC^`1Pc_=6H1mXzwiFQax(iNi%CzJoyyw zAF7ku$@L;brk`yalQ~>MyTY+fBq}f4mG6E+;K-LIidMd32?iPutP~U!_N=|+U@KMI zV~-d{)%d<4nbkLso2}BSU!^R6j`5=@CcgAm1-q$L6c44fbB$#l<3!~Db)6?67|Aic zvAKCk!b5{VAbkUHi$lKdE49B6(gjVLT+sUN-(gXm`YG;5t^<>0$aOkOwLS3f5~(lY p`COsX!M$OqF3fHi5a=PoyHbw(P8+Z9QvD