From cf82ea379683b4d228b0b56244462d4211d1a714 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 6 Jun 2025 14:03:52 +0200 Subject: [PATCH] facing oblivion to become the lode star --- changelog | 16 +++- .../java/com/hbm/crafting/MineralRecipes.java | 2 + .../recipes/ChemicalPlantRecipes.java | 12 ++- .../recipes/loader/GenericRecipes.java | 2 + .../java/com/hbm/items/ItemGenericPart.java | 3 +- .../com/hbm/main/ModEventHandlerClient.java | 18 ++-- .../java/com/hbm/main/ResourceManager.java | 1 + .../tileentity/RenderChemicalPlant.java | 88 +++++++++++++++++- .../world/RenderNTMSkyboxChainloader.java | 15 +-- .../TileEntityMachineChemicalPlant.java | 12 +++ src/main/resources/assets/hbm/lang/de_DE.lang | 17 ++++ src/main/resources/assets/hbm/lang/en_US.lang | 17 ++++ .../hbm/textures/items/glass_polarized.png | Bin 0 -> 332 bytes .../assets/hbm/textures/misc/star_lode.png | Bin 211 -> 224 bytes .../assets/hbm/textures/models/Poles.png | Bin 456 -> 0 bytes .../models/machines/chemical_plant.png | Bin 2343 -> 4412 bytes .../models/machines/chemical_plant_fluid.png | Bin 148 -> 495 bytes .../hbm/textures/models/vault_frame_old.png | Bin 27629 -> 0 bytes 18 files changed, 178 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/glass_polarized.png delete mode 100644 src/main/resources/assets/hbm/textures/models/Poles.png delete mode 100644 src/main/resources/assets/hbm/textures/models/vault_frame_old.png diff --git a/changelog b/changelog index 8a24a37de..b5663ec11 100644 --- a/changelog +++ b/changelog @@ -8,6 +8,13 @@ * Reworked chemical plant * No longer needs template items for everything, comes with a convenient recipe selector GUI * Three item and three fluids for in and outputs + * Slots are locked to the ingredients they accept, allowing for better performance and shift click support + * Item IO now works like most other machines instead of using chutes + * If the center block right above the chemplant is not air, it will render with a frame, making chemplant stacking actually nice to look at + * Now has a more convenient 3x3 footprint + * Features 12 access ports, more than enough for full coverage of the entire machine's IO + * Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) + * Ports are now standardized, no longer are fluids connected to ports that look like copper contacts ## Changed * The RBMK console's grid can now be rotated using a screwdriver @@ -28,10 +35,11 @@ * Water to hydrogen peroxide is now 1,000 : 1,000 (instead of 1,000 : 800) * Sulfuric acid's peroxide requirement has been adjusted accordingly * Nitric acid has an alternate recipe using air and water, however it takes 4x as long and has a base consumption of 2kHE/t - * Desh now only takes 10 seconds to produce instead of 15 + * Desh now only takes 5 seconds to produce instead of 15 * Laminate now only takes 50mB of either fluid per recipe and processes much quicker - * Ducrete now uses U238 in the form of ferrouranium, and no longer requires gravel at all + * Ducrete now uses U238 in the form of ferrouranium, decreasing U238 needed, and no longer requires gravel at all * All recipes for nuclear fuel production now have a higher base consumption + * Base consumption in general has been tweaked for many later-game recipes. Many recipes however still use the old 100HE/t rate * Cordite now uses sawdust instead of wood planks and sugar * Kevlar is now made from aromatics, nitric acid and chlorine (or phosgene in 528 mode) * Electrolysis using the chemplant has been removed. Hydrogen can be made using water and coal (or coke), and oxygen can be distilled from intake air @@ -40,6 +48,7 @@ * Glyphid meat processing is now less autistic * Making rusty steel now only takes 2 seconds per recipe * Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all) + * Recipe changes are still subject to balancing * Removed niter to nitric acid liquefaction recipe ## Fixed @@ -51,4 +60,5 @@ * Fixed missing energy damage category localization * Fixed server crash caused by tool abilities * Fixed chunkloading entities not releasing their loading tickets properly -* Potentially fixed a dupe issue related to tool abilities \ No newline at end of file +* Potentially fixed a dupe issue related to tool abilities +* Fixed certain sky features not being as bright as they should be \ No newline at end of file diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 6ab5ea10b..103292041 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ItemEnums.EnumCokeType; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; import com.hbm.items.special.ItemWasteLong; @@ -421,6 +422,7 @@ public class MineralRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.egg_balefire_shard, 9), new Object[] { "#", '#', ModItems.egg_balefire }); GameRegistry.addRecipe(new ItemStack(ModItems.nitra, 1), new Object[] { "##", "##", '#', ModItems.nitra_small }); GameRegistry.addRecipe(new ItemStack(ModItems.nitra_small, 4), new Object[] { "#", '#', ModItems.nitra }); + GameRegistry.addRecipe(new ItemStack(ModBlocks.glass_polarized, 4), new Object[] { "##", "##", '#', DictFrame.fromOne(ModItems.part_generic, EnumPartType.GLASS_POLARIZED) }); add1To9Pair(ModItems.powder_paleogenite, ModItems.powder_paleogenite_tiny); add1To9Pair(ModItems.ingot_osmiridium, ModItems.nugget_osmiridium); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index b4c334826..a69596643 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -11,6 +11,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ItemEnums.EnumFuelAdditive; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import net.minecraft.init.Blocks; @@ -130,7 +131,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputItems(new ItemStack(ModBlocks.asphalt, 16))); /// SOLIDS /// - this.register(new GenericRecipe("chem.desh").setup(200, 100) + this.register(new GenericRecipe("chem.desh").setup(100, 100) .inputItems(new ComparableStack(ModItems.powder_desh_mix)) .inputFluids((GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ? new FluidStack[] {new FluidStack(Fluids.LIGHTOIL, 200)} : @@ -160,11 +161,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 250, GeneralConfig.enable528 ? 2 : 0), new FluidStack(Fluids.CHLORINE, 250, GeneralConfig.enable528 ? 2 : 0)) .outputItems(new ItemStack(ModItems.ingot_pvc, 2))); - this.register(new GenericRecipe("chem.kevlar").setup(20, 300) + this.register(new GenericRecipe("chem.kevlar").setup(60, 300) .inputFluids(new FluidStack(Fluids.AROMATICS, 200), new FluidStack(Fluids.NITRIC_ACID, 100), new FluidStack(GeneralConfig.enable528 ? Fluids.PHOSGENE : Fluids.CHLORINE, 100)) .outputItems(new ItemStack(ModItems.plate_kevlar, 4))); - this.register(new GenericRecipe("chem.meth").setup(30, 300) + this.register(new GenericRecipe("chem.meth").setup(60, 300) .inputItems(new ComparableStack(Items.wheat), new ComparableStack(Items.dye, 2, 3)) .inputFluids(new FluidStack(Fluids.LUBRICANT, 400), new FluidStack(Fluids.PEROXIDE, 500)) .outputItems(new ItemStack(ModItems.chocolate, 4))); @@ -281,6 +282,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputItems(new OreDictStack(KEY_ANYGLASS), new OreDictStack(STEEL.bolt(), 4)) .outputItems(new ItemStack(ModBlocks.reinforced_laminate))); + this.register(new GenericRecipe("chem.polarized").setup(100, 500) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 1_000)) + .inputItems(new OreDictStack(KEY_ANYPANE)) + .outputItems(DictFrame.fromOne(ModItems.part_generic, EnumPartType.GLASS_POLARIZED, 16))); + /// NUCLEAR PROCESSING /// this.register(new GenericRecipe("chem.yellowcake").setup(250, 500) .inputItems(new OreDictStack(U.billet(), 2), new OreDictStack(S.dust(), 2)) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index eabdd1802..931f19d4f 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -88,6 +88,8 @@ public abstract class GenericRecipes extends Serializab public void writeRecipe(Object recipeObject, JsonWriter writer) throws IOException { T recipe = (T) recipeObject; + writer.name("name").value(recipe.name); + if(this.inputItemLimit() > 0 && recipe.inputItem != null) { writer.name("inputItem").beginArray(); for(AStack stack : recipe.inputItem) this.writeAStack(stack, writer); diff --git a/src/main/java/com/hbm/items/ItemGenericPart.java b/src/main/java/com/hbm/items/ItemGenericPart.java index e66ba0904..79c06cd88 100644 --- a/src/main/java/com/hbm/items/ItemGenericPart.java +++ b/src/main/java/com/hbm/items/ItemGenericPart.java @@ -14,7 +14,8 @@ public class ItemGenericPart extends ItemEnumMulti { PISTON_HYDRAULIC("piston_hydraulic"), PISTON_ELECTRIC("piston_electric"), LDE("low_density_element"), - HDE("heavy_duty_element"); + HDE("heavy_duty_element"), + GLASS_POLARIZED("glass_polarized"); private String texName; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index a2ee8b962..4a8300535 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1027,7 +1027,7 @@ public class ModEventHandlerClient { return null; } - public static boolean renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding + public static boolean renderLodeStar = false; public static long lastStarCheck = 0L; @SideOnly(Side.CLIENT) @@ -1064,16 +1064,16 @@ public class ModEventHandlerClient { long millis = Clock.get_ms(); if(lastStarCheck + 200 < millis) { - renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding + renderLodeStar = false; lastStarCheck = millis; - if(player != null) { // GENUINELY shut the fuck up i'm not kidding - Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ); // GENUINELY shut the fuck up i'm not kidding - Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25); // GENUINELY shut the fuck up i'm not kidding - Vec3NT nextPos = new Vec3NT(pos).add(lodestarHeading.xCoord,lodestarHeading.yCoord, lodestarHeading.zCoord); // GENUINELY shut the fuck up i'm not kidding - MovingObjectPosition mop = world.func_147447_a(pos, nextPos, false, true, false); // GENUINELY shut the fuck up i'm not kidding - if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && world.getBlock(mop.blockX, mop.blockY, mop.blockZ) == ModBlocks.glass_polarized) { // GENUINELY shut the fuck up i'm not kidding - renderLodeStar = true; // GENUINELY shut the fuck up i'm not kidding + if(player != null) { + Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ); + Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25); + Vec3NT nextPos = new Vec3NT(pos).add(lodestarHeading.xCoord,lodestarHeading.yCoord, lodestarHeading.zCoord); + MovingObjectPosition mop = world.func_147447_a(pos, nextPos, false, true, false); + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && world.getBlock(mop.blockX, mop.blockY, mop.blockZ) == ModBlocks.glass_polarized) { + renderLodeStar = true; } } } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8e7b9f6b3..31421f61e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -581,6 +581,7 @@ public class ResourceManager { public static final ResourceLocation chemplant_piston_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_piston_new.png"); public static final ResourceLocation chemplant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/lavabase_small.png"); public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png"); + public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); //Mixer diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java index 591571c57..e3273baa5 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java @@ -1,11 +1,20 @@ package com.hbm.render.tileentity; +import java.awt.Color; + import org.lwjgl.opengl.GL11; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; +import com.hbm.util.BobMathUtil; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -15,15 +24,88 @@ import net.minecraftforge.client.IItemRenderer; public class RenderChemicalPlant extends TileEntitySpecialRenderer implements IItemRendererProvider { @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); GL11.glRotated(90, 0, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachineChemicalPlant chemplant = (TileEntityMachineChemicalPlant) tileEntity; + float anim = chemplant.prevAnim + (chemplant.anim - chemplant.prevAnim) * interp; + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); bindTexture(ResourceManager.chemical_plant_tex); ResourceManager.chemical_plant.renderPart("Base"); + if(chemplant.frame) ResourceManager.chemical_plant.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.125) * 0.375, 0, 0); ResourceManager.chemical_plant.renderPart("Slider"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0.5, 0, 0.5); + GL11.glRotated((anim * 15) % 360D, 0, 1, 0); + GL11.glTranslated(-0.5, 0, -0.5); + ResourceManager.chemical_plant.renderPart("Spinner"); + GL11.glPopMatrix(); + + if(chemplant.didProcess && recipe != null) { + int colors = 0; + int r = 0; + int g = 0; + int b = 0; + if(recipe.outputFluid != null) for(FluidStack stack : recipe.outputFluid) { + Color color = new Color(stack.type.getColor()); + r += color.getRed(); + g += color.getGreen(); + b += color.getBlue(); + colors++; + } + + if(colors == 0 && recipe.inputFluid != null) for(FluidStack stack : recipe.inputFluid) { + Color color = new Color(stack.type.getColor()); + r += color.getRed(); + g += color.getGreen(); + b += color.getBlue(); + colors++; + } + + if(colors > 0) { + bindTexture(ResourceManager.chemical_plant_fluid_tex); + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(r / 255F / colors, g / 255F / colors, b / 255F / colors, 0.5F); + GL11.glDepthMask(false); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glTranslated(-anim / 100F, BobMathUtil.sps(anim * 0.1) * 0.1 - 0.25, 0); + ResourceManager.chemical_plant.renderPart("Fluid"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + GL11.glDepthMask(true); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glPopMatrix(); + } + } GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); @@ -48,7 +130,9 @@ public class RenderChemicalPlant extends TileEntitySpecialRenderer implements II GL11.glScaled(0.75, 0.75, 0.75); GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.chemical_plant_tex); - ResourceManager.chemical_plant.renderAll(); + ResourceManager.chemical_plant.renderPart("Base"); + ResourceManager.chemical_plant.renderPart("Slider"); + ResourceManager.chemical_plant.renderPart("Spinner"); GL11.glShadeModel(GL11.GL_FLAT); }}; } diff --git a/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java b/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java index 09f4eba0c..5d5b98e15 100644 --- a/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java +++ b/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java @@ -67,19 +67,15 @@ public class RenderNTMSkyboxChainloader extends IRenderHandler { //why an abstra GL11.glDisable(GL11.GL_FOG); OpenGlHelper.glBlendFunc(770, 1, 1, 0); - float brightness = (float) Math.sin(world.getCelestialAngle(partialTicks) * Math.PI); - brightness *= brightness; - - GL11.glColor4f(brightness, brightness, brightness, 1.0F); - - float var12 = 1F + world.rand.nextFloat() * 0.5F; + float var12 = 0.5F + world.rand.nextFloat() * 0.25F; double dist = 100D; if(ModEventHandlerClient.renderLodeStar) { GL11.glPushMatrix(); GL11.glRotatef(-75.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(10.0F, 0.0F, 1.0F, 0.0F); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(lodeStar); // GENUINELY shut the fuck up i'm not kidding + GL11.glColor4f(1F, 1F, 1F, 1.0F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(lodeStar); tessellator.startDrawingQuads(); tessellator.addVertexWithUV(-var12, dist, -var12, 0.0D, 0.0D); @@ -91,6 +87,11 @@ public class RenderNTMSkyboxChainloader extends IRenderHandler { //why an abstra GL11.glPopMatrix(); } + float brightness = (float) Math.sin(world.getCelestialAngle(partialTicks) * Math.PI); + brightness *= brightness; + + GL11.glColor4f(brightness, brightness, brightness, 1.0F); + GL11.glPushMatrix(); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index bbd049ba7..21c07e2fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -42,6 +42,10 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public long power; public long maxPower = 1_000_000; public boolean didProcess = false; + + public boolean frame = false; + public int anim; + public int prevAnim; public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -98,6 +102,12 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem } else { + this.prevAnim = this.anim; + if(this.didProcess) this.anim++; + + if(worldObj.getTotalWorldTime() % 40 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } } } @@ -125,6 +135,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.serialize(buf); buf.writeLong(power); buf.writeLong(maxPower); + buf.writeBoolean(didProcess); this.chemplantModule.serialize(buf); } @@ -135,6 +146,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); this.chemplantModule.deserialize(buf); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index eb5a473d3..07e008e66 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -177,6 +177,21 @@ cannery.stirling.1=Er muss auf einem Hitzeerzeuger platziert werden, zum Beispie cannery.stirling.2=Die Hitze die maximal verwendet werden kann ist limitiert, Übergeschwindigkeit kann zu katastrophalen Fehlfunktionen führen. cannery.stirling.3=Die verbesserte Version kann wesentlich mehr Hitze aufnehmen, ohne kaputt zu werden. +chem.hydrogen=Wasserstoff +chem.hydrogencoke=Wasserstoff aus Koks +chem.oxygen=Sauerstoff +chem.xenon=Xenongas +chem.xenonoxy=Xenongas (Gekühlt) +chem.helium3=Helium-3 +chem.ethanol=Ethanol +chem.biogas=Biogas +chem.biofuel=Biodieselumesterung +chem.reoil=Wiederaufbereitetes Öl +chem.gasoline=Benzin +chem.tarsand=Bitumen aus Teersand +chem.meatprocessing=Glyphidflesch-Verarbeitung +chem.birkeland=Salpetersäure aus Luft + chem.ARSENIC=Arsenextraktion chem.ASPHALT=Asphaltherstellung chem.BAKELITE=Bakelitherstellung @@ -2770,6 +2785,7 @@ item.part_barrel_light.name=Leichter %slauf item.part_beryllium.name=Berylliumstaubkiste item.part_carbon.name=Kohlenstoffstaubkiste item.part_copper.name=Kupferstaubkiste +item.part_generic.glass_polarized.name=Polarisierte Linse item.part_generic.hde.name=Schwerlastkomponente item.part_generic.lde.name=Leichtbauteil item.part_generic.piston_electric.name=Electrischer Kolben @@ -4219,6 +4235,7 @@ tile.geiger.name=Geigerzähler tile.glass_ash.name=Ascheglas tile.glass_boron.name=Borglas tile.glass_lead.name=Bleiglas +tile.glass_polarized.name=Polarisiertes Glas tile.glass_polonium.name=Poloniumglas tile.glass_quartz.name=Quarzglas tile.glass_trinitite.name=Trinity-Glas diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d8c12c8c2..65a86647a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -566,6 +566,21 @@ cannery.schottky.7=If any virtual particles encounter any malformed segments, al cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit +chem.hydrogen=Hydrogen +chem.hydrogencoke=Hydrogen from Coke +chem.oxygen=Oxygen +chem.xenon=Xenon Gas +chem.xenonoxy=Xenon Gas (Cooled) +chem.helium3=Helium-3 +chem.ethanol=Ethanol +chem.biogas=Biogas +chem.biofuel=Biofuel Transesterification +chem.reoil=Reclaimed Oil +chem.gasoline=Gasoline +chem.tarsand=Bitumen from Tar Sand +chem.meatprocessing=Glyphid Meat Processing +chem.birkeland=Nitric Acid from Air + chem.ARSENIC=Arsenic Extraction chem.ASPHALT=Asphalt Production chem.BAKELITE=Bakelite Production @@ -3620,6 +3635,7 @@ item.part_barrel_light.name=Light %s Barrel item.part_beryllium.name=Box of Beryllium Dust item.part_carbon.name=Box of Carbon Dust item.part_copper.name=Box of Copper Dust +item.part_generic.glass_polarized.name=Polarized Lens item.part_generic.hde.name=Heavy Duty Element item.part_generic.lde.name=Low-Density Element item.part_generic.piston_electric.name=Electric Piston @@ -5344,6 +5360,7 @@ tile.geiger.name=Geiger Counter tile.glass_ash.name=Ash Glass tile.glass_boron.name=Boron Glass tile.glass_lead.name=Lead Glass +tile.glass_polarized.name=Polarized Glass tile.glass_polonium.name=Polonium Glass tile.glass_quartz.name=Quartz Glass tile.glass_trinitite.name=Trinity Glass diff --git a/src/main/resources/assets/hbm/textures/items/glass_polarized.png b/src/main/resources/assets/hbm/textures/items/glass_polarized.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc015656246420be2ba7e347e9a3b38b7a150d1 GIT binary patch literal 332 zcmV-S0ki&zP)>A@Ujyu2R85 zv)Q;PomztPB_u=17^fQ&(~6_`Plv<#zH_+;{&b8ntudzkX~sJR0$fHjln9^M%JoO{ z-ZAhhxdmV`jd)sT0G-HMOPZ$MNMMX<9az>i07-lUz{O-T5ao{#o#ed#g0iYe=5YtT zzJCA^20qC=9*A590wqGW$x$MNflnCtBasrJI3)nOO?}9TzHbLObA`2*vaZSUHx5lh z82Buv5!>CKY?E_n8k7i1WFQz_!CK4p-TmMbx4S)MRZ*;-0ghjxAFXu@bfV&AIRbwb et##{U|2SVm-)%9yjfLg_00006^Q>YiEkIfsf<>&CNm3r|Hq1TBTyDih6t%o9N^g5GNH9n90 i5*>v>E4l}@Pd0A}YdGsZ*33%)0000o| VGs^7yY$N~x002ovPDHLkV1n7uOt%04 diff --git a/src/main/resources/assets/hbm/textures/models/Poles.png b/src/main/resources/assets/hbm/textures/models/Poles.png deleted file mode 100644 index 919c1589101f1099694e1f127d3e630119a92d99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 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 delta 2317 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 delta 104 zcmaFQJcV(BaUz4ar;B4qMC;p&hN27#JV!1xNjy1>3#tWK;Y@>=d#Wzp$PzjjVA8^ diff --git a/src/main/resources/assets/hbm/textures/models/vault_frame_old.png b/src/main/resources/assets/hbm/textures/models/vault_frame_old.png deleted file mode 100644 index acf06d5d73caac7cdc9a1d2992ec11b14d0e9f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27629 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