From 4d1e9029812ebd616226a1515c338c8f2d00780f Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 23 Mar 2023 16:04:10 +0100 Subject: [PATCH] small fixes, watz heat/flux functionality --- src/main/java/com/hbm/inventory/OreNames.java | 4 + .../inventory/material/MatDistribution.java | 2 + .../inventory/recipes/ShredderRecipes.java | 1 - .../recipes/anvil/AnvilSmithingMold.java | 7 +- .../java/com/hbm/items/ItemEnumMulti.java | 1 - .../tileentity/machine/TileEntityWatz.java | 98 +++++++++++++++++- .../com/hbm/world/feature/BedrockOre.java | 32 +++--- .../assets/hbm/textures/misc/charset.png | Bin 0 -> 2120 bytes .../hbm/textures/misc/charset_ascii.png | Bin 0 -> 1830 bytes 9 files changed, 127 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/misc/charset.png create mode 100644 src/main/resources/assets/hbm/textures/misc/charset_ascii.png diff --git a/src/main/java/com/hbm/inventory/OreNames.java b/src/main/java/com/hbm/inventory/OreNames.java index 26544568b..91cbb7099 100644 --- a/src/main/java/com/hbm/inventory/OreNames.java +++ b/src/main/java/com/hbm/inventory/OreNames.java @@ -19,4 +19,8 @@ public class OreNames { public static final String BLOCK = "block"; public static final String ORE = "ore"; public static final String ORENETHER = "oreNether"; + + public static final String[] prefixes = new String[] { + ANY, NUGGET, TINY, INGOT, DUSTTINY, DUST, GEM, CRYSTAL, PLATE, PLATECAST, BILLET, BLOCK, ORE, ORENETHER + }; } diff --git a/src/main/java/com/hbm/inventory/material/MatDistribution.java b/src/main/java/com/hbm/inventory/material/MatDistribution.java index ccc083f50..71116ec6c 100644 --- a/src/main/java/com/hbm/inventory/material/MatDistribution.java +++ b/src/main/java/com/hbm/inventory/material/MatDistribution.java @@ -81,7 +81,9 @@ public class MatDistribution extends SerializableRecipe { registerOre(OreDictManager.HEMATITE.ore(), MAT_HEMATITE, INGOT.q(4)); registerOre(OreDictManager.MALACHITE.ore(), MAT_MALACHITE, INGOT.q(4)); + registerEntry(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), MAT_FLUX, DUST.q(10)); + registerEntry(ModItems.powder_flux, MAT_FLUX, DUST.q(1)); } public static void registerEntry(Object key, Object... matDef) { diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index d7fed253b..2c0150b5d 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -201,7 +201,6 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(Items.reeds, new ItemStack(Items.sugar, 3)); ShredderRecipes.setRecipe(Items.apple, new ItemStack(Items.sugar, 1)); ShredderRecipes.setRecipe(Items.carrot, new ItemStack(Items.sugar, 1)); - ShredderRecipes.setRecipe(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), new ItemStack(ModItems.powder_calcium, 4)); List logs = OreDictionary.getOres("logWood"); List planks = OreDictionary.getOres("plankWood"); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java index a20bdbe4f..b5f44ece0 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java @@ -2,6 +2,7 @@ package com.hbm.inventory.recipes.anvil; import java.util.List; +import com.hbm.inventory.OreNames; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; @@ -33,8 +34,10 @@ public class AnvilSmithingMold extends AnvilSmithingRecipe { for(String name : names) { - if(matchesPrefix.name.equals("plate") && name.startsWith("plateTriple")) { //fuck me - return false; + for(String otherPrefix : OreNames.prefixes) { + if(otherPrefix.length() > matchesPrefix.name.length() && name.startsWith(otherPrefix)) { + continue; //ignore if there's a longer prefix that matches (i.e. a more accurate match) + } } if(name.startsWith(matchesPrefix.name)) { diff --git a/src/main/java/com/hbm/items/ItemEnumMulti.java b/src/main/java/com/hbm/items/ItemEnumMulti.java index 9ea330036..f3f81d997 100644 --- a/src/main/java/com/hbm/items/ItemEnumMulti.java +++ b/src/main/java/com/hbm/items/ItemEnumMulti.java @@ -90,7 +90,6 @@ public class ItemEnumMulti extends Item { public String getUnlocalizedName(ItemStack stack) { if(multiName) { - Enum num = EnumUtil.grabEnumSafely(theEnum, stack.getItemDamage()); return super.getUnlocalizedName() + "." + num.name().toLowerCase(); } else { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 317106ec9..3cadcd99c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -1,11 +1,19 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIWatz; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.Compat; +import com.hbm.util.EnumUtil; +import com.hbm.util.function.Function; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -13,6 +21,8 @@ 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.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @@ -20,7 +30,8 @@ public class TileEntityWatz extends TileEntityMachineBase implements IGUIProvide public FluidTank[] tanks; public int heat; - public int flux; + public double fluxLastReaction; //stores the flux created by the reaction, excludes passive emission + public double fluxDisplay; /* lock types for item IO */ public boolean isLocked = false; @@ -42,10 +53,93 @@ public class TileEntityWatz extends TileEntityMachineBase implements IGUIProvide @Override public void updateEntity() { - if(!worldObj.isRemote) { + if(!worldObj.isRemote && !updateLock()) { + //TODO: figure out how to make fluid transport instant instead of sloshy, + //perhaps an initial count that combines all tanks into one large virtual one? + + updateManual(true); + } + } + + /** enforces strict top to bottom update order (instead of semi-random based on placement) */ + public void updateManual(boolean topMost) { + + //TODO: do heat to coolant first + + List pellets = new ArrayList(); + + for(int i = 0; i < 24; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() == ModItems.watz_pellet) { + pellets.add(stack); + } } + double baseFlux = 0D; + + /* init base flux */ + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + baseFlux += type.passive; + } + + double inputFlux = baseFlux + fluxLastReaction; + double addedFlux = 0D; + double addedHeat = 0D; + + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + Function burnFunc = type.burnFunc; + Function heatMod = type.heatMult; + + if(burnFunc != null) { + double mod = heatMod != null ? heatMod.effonix(heat) : 1D; + double burn = burnFunc.effonix(inputFlux) * mod; + addedFlux += burn; + addedHeat += type.heatEmission * burn; + } + } + + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + Function absorbFunc = type.absorbFunc; + + if(absorbFunc != null) { + addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction); + } + } + + this.heat += addedHeat; + this.fluxLastReaction = addedFlux; + + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("heat", this.heat); + data.setDouble("flux", this.fluxLastReaction + baseFlux); + for(int i = 0; i < tanks.length; i++) { + tanks[i].writeToNBT(data, "t" + i); + } + this.networkPack(data, 25); + + TileEntity below = Compat.getTileStandard(worldObj, xCoord, yCoord - 3, zCoord); + if(below instanceof TileEntityWatz) { + TileEntityWatz watz = (TileEntityWatz) below; + //TODO: move down fluids and exchange pellets + watz.updateManual(false); + } + } + + /** Prevent manual updates when another segment is above this one */ + public boolean updateLock() { + return Compat.getTileStandard(worldObj, xCoord, yCoord + 3, zCoord) instanceof TileEntityWatz; + } + + public void networkUnpack(NBTTagCompound nbt) { + this.heat = nbt.getInteger("heat"); + this.fluxDisplay = nbt.getDouble("flux"); + for(int i = 0; i < tanks.length; i++) { + tanks[i].readFromNBT(nbt, "t" + i); + } } AxisAlignedBB bb = null; diff --git a/src/main/java/com/hbm/world/feature/BedrockOre.java b/src/main/java/com/hbm/world/feature/BedrockOre.java index 0cf979b5d..71cd87a12 100644 --- a/src/main/java/com/hbm/world/feature/BedrockOre.java +++ b/src/main/java/com/hbm/world/feature/BedrockOre.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre; import com.hbm.inventory.FluidStack; +import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -15,17 +16,20 @@ public class BedrockOre { for(int ix = x - 1; ix <= x + 1; ix++) { for(int iz = z - 1; iz <= z + 1; iz++) { - if((ix == x && iz == z) || world.rand.nextBoolean()) { - - world.setBlock(ix, 0, iz, ModBlocks.ore_bedrock); - TileEntityBedrockOre ore = (TileEntityBedrockOre) world.getTileEntity(ix, 0, iz); - ore.resource = stack; - ore.color = color; - ore.shape = world.rand.nextInt(10); - ore.acidRequirement = acid; - ore.tier = tier; - world.markBlockForUpdate(ix, 0, iz); - world.markTileEntityChunkModified(ix, 0, iz, ore); + Block b = world.getBlock(ix, 0, iz); + if(b.isReplaceableOreGen(world, ix, 0, iz, Blocks.bedrock)) { + if((ix == x && iz == z) || world.rand.nextBoolean()) { + + world.setBlock(ix, 0, iz, ModBlocks.ore_bedrock); + TileEntityBedrockOre ore = (TileEntityBedrockOre) world.getTileEntity(ix, 0, iz); + ore.resource = stack; + ore.color = color; + ore.shape = world.rand.nextInt(10); + ore.acidRequirement = acid; + ore.tier = tier; + world.markBlockForUpdate(ix, 0, iz); + world.markTileEntityChunkModified(ix, 0, iz, ore); + } } } } @@ -35,7 +39,11 @@ public class BedrockOre { for(int iy = 1; iy < 7; iy++) { if(iy < 3 || world.getBlock(ix, iy, iz) == Blocks.bedrock) { - world.setBlock(ix, iy, iz, ModBlocks.stone_depth); + + Block b = world.getBlock(ix, iy, iz); + if(b.isReplaceableOreGen(world, ix, iy, iz, Blocks.stone) || b.isReplaceableOreGen(world, ix, iy, iz, Blocks.bedrock)) { + world.setBlock(ix, iy, iz, ModBlocks.stone_depth); + } } } } diff --git a/src/main/resources/assets/hbm/textures/misc/charset.png b/src/main/resources/assets/hbm/textures/misc/charset.png new file mode 100644 index 0000000000000000000000000000000000000000..34b911c59f2bfea9ad74120c97a30f2ef67dccf2 GIT binary patch literal 2120 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 U^>Wtn2mk;807*qoM6N<$g86rKt^fc4 literal 0 HcmV?d00001