Merge pull request #1960 from 70000hp/windows-95

rotary furnace fuel thing
This commit is contained in:
HbmMods 2025-02-28 08:31:19 +01:00 committed by GitHub
commit 299f514f99
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 88 additions and 39 deletions

View File

@ -30,9 +30,11 @@ public class ModuleBurnTime {
private static final int modRocket = 6; private static final int modRocket = 6;
private static final int modBalefire = 7; private static final int modBalefire = 7;
private double[] modTime = new double[8]; private double[] modTime = new double[8];
private double[] modHeat = new double[8]; private double[] modHeat = new double[8];
public ModuleBurnTime() { public ModuleBurnTime() {
for(int i = 0; i < modTime.length; i++) { for(int i = 0; i < modTime.length; i++) {
modTime[i] = 1.0D; modTime[i] = 1.0D;
@ -78,23 +80,23 @@ public class ModuleBurnTime {
writer.name("D:heatRocket").value(modHeat[modRocket]); writer.name("D:heatRocket").value(modHeat[modRocket]);
writer.name("D:heatBalefie").value(modHeat[modBalefire]); writer.name("D:heatBalefie").value(modHeat[modBalefire]);
} }
public int getBurnTime(ItemStack stack) { public int getBurnTime(ItemStack stack) {
//int fuel = TileEntityFurnace.getItemBurnTime(stack); //int fuel = TileEntityFurnace.getItemBurnTime(stack);
int fuel = FuelHandler.getBurnTimeFromCache(stack); int fuel = FuelHandler.getBurnTimeFromCache(stack);
if(fuel == 0) if(fuel == 0)
return 0; return 0;
return (int) (fuel * getMod(stack, modTime)); return (int) (fuel * getMod(stack, modTime));
} }
public int getBurnHeat(int base, ItemStack stack) { public int getBurnHeat(int base, ItemStack stack) {
return (int) (base * getMod(stack, modHeat)); return (int) (base * getMod(stack, modHeat));
} }
public double getMod(ItemStack stack, double[] mod) { public double getMod(ItemStack stack, double[] mod) {
if(stack == null) if(stack == null)
return 0; return 0;
@ -105,11 +107,11 @@ public class ModuleBurnTime {
if(stack.getItem() == ModItems.solid_fuel_bf) return mod[modBalefire]; if(stack.getItem() == ModItems.solid_fuel_bf) return mod[modBalefire];
if(stack.getItem() == ModItems.solid_fuel_presto_bf) return mod[modBalefire]; if(stack.getItem() == ModItems.solid_fuel_presto_bf) return mod[modBalefire];
if(stack.getItem() == ModItems.solid_fuel_presto_triplet_bf) return mod[modBalefire]; if(stack.getItem() == ModItems.solid_fuel_presto_triplet_bf) return mod[modBalefire];
if(stack.getItem() == ModItems.rocket_fuel) return mod[modRocket]; if(stack.getItem() == ModItems.rocket_fuel) return mod[modRocket];
List<String> names = ItemStackUtil.getOreDictNames(stack); List<String> names = ItemStackUtil.getOreDictNames(stack);
for(String name : names) { for(String name : names) {
if(name.contains("Coke")) return mod[modCoke]; if(name.contains("Coke")) return mod[modCoke];
if(name.contains("Coal")) return mod[modCoal]; if(name.contains("Coal")) return mod[modCoal];
@ -117,22 +119,22 @@ public class ModuleBurnTime {
if(name.startsWith("log")) return mod[modLog]; if(name.startsWith("log")) return mod[modLog];
if(name.contains("Wood")) return mod[modWood]; if(name.contains("Wood")) return mod[modWood];
} }
return 1; return 1;
} }
public List<String> getDesc() { public List<String> getDesc() {
List<String> desc = new ArrayList(); List<String> desc = new ArrayList();
desc.addAll(getTimeDesc()); desc.addAll(getTimeDesc());
desc.addAll(getHeatDesc()); desc.addAll(getHeatDesc());
return desc; return desc;
} }
public List<String> getTimeDesc() { public List<String> getTimeDesc() {
List<String> list = new ArrayList(); List<String> list = new ArrayList();
list.add(EnumChatFormatting.GOLD + "Burn time bonuses:"); list.add(EnumChatFormatting.GOLD + "Burn time bonuses:");
addIf(list, "Logs", modTime[modLog]); addIf(list, "Logs", modTime[modLog]);
addIf(list, "Wood", modTime[modWood]); addIf(list, "Wood", modTime[modWood]);
addIf(list, "Coal", modTime[modCoal]); addIf(list, "Coal", modTime[modCoal]);
@ -141,18 +143,18 @@ public class ModuleBurnTime {
addIf(list, "Solid Fuel", modTime[modSolid]); addIf(list, "Solid Fuel", modTime[modSolid]);
addIf(list, "Rocket Fuel", modTime[modRocket]); addIf(list, "Rocket Fuel", modTime[modRocket]);
addIf(list, "Balefire", modTime[modBalefire]); addIf(list, "Balefire", modTime[modBalefire]);
if(list.size() == 1) if(list.size() == 1)
list.clear(); list.clear();
return list; return list;
} }
public List<String> getHeatDesc() { public List<String> getHeatDesc() {
List<String> list = new ArrayList(); List<String> list = new ArrayList();
list.add(EnumChatFormatting.RED + "Burn heat bonuses:"); list.add(EnumChatFormatting.RED + "Burn heat bonuses:");
addIf(list, "Logs", modHeat[modLog]); addIf(list, "Logs", modHeat[modLog]);
addIf(list, "Wood", modHeat[modWood]); addIf(list, "Wood", modHeat[modWood]);
addIf(list, "Coal", modHeat[modCoal]); addIf(list, "Coal", modHeat[modCoal]);
@ -161,31 +163,38 @@ public class ModuleBurnTime {
addIf(list, "Solid Fuel", modHeat[modSolid]); addIf(list, "Solid Fuel", modHeat[modSolid]);
addIf(list, "Rocket Fuel", modHeat[modRocket]); addIf(list, "Rocket Fuel", modHeat[modRocket]);
addIf(list, "Balefire", modHeat[modBalefire]); addIf(list, "Balefire", modHeat[modBalefire]);
if(list.size() == 1) if(list.size() == 1)
list.clear(); list.clear();
return list; return list;
} }
private void addIf(List<String> list, String name, double mod) { private void addIf(List<String> list, String name, double mod) {
if(mod != 1.0D) if(mod != 1.0D)
list.add(EnumChatFormatting.YELLOW + "- " + name + ": " + getPercent(mod)); list.add(EnumChatFormatting.YELLOW + "- " + name + ": " + getPercent(mod));
} }
private String getPercent(double mod) { private String getPercent(double mod) {
mod -= 1D; mod -= 1D;
String num = ((int) (mod * 100)) + "%"; String num = ((int) (mod * 100)) + "%";
if(mod < 0) if(mod < 0)
num = EnumChatFormatting.RED + num; num = EnumChatFormatting.RED + num;
else else
num = EnumChatFormatting.GREEN + "+" + num; num = EnumChatFormatting.GREEN + "+" + num;
return num; return num;
} }
public double[] getModHeat() {
return modHeat;
}
public double[] getModTime() {
return modTime;
}
public ModuleBurnTime setLogTimeMod(double mod) { this.modTime[modLog] = mod; return this; } public ModuleBurnTime setLogTimeMod(double mod) { this.modTime[modLog] = mod; return this; }
public ModuleBurnTime setWoodTimeMod(double mod) { this.modTime[modWood] = mod; return this; } public ModuleBurnTime setWoodTimeMod(double mod) { this.modTime[modWood] = mod; return this; }
public ModuleBurnTime setCoalTimeMod(double mod) { this.modTime[modCoal] = mod; return this; } public ModuleBurnTime setCoalTimeMod(double mod) { this.modTime[modCoal] = mod; return this; }
@ -194,7 +203,7 @@ public class ModuleBurnTime {
public ModuleBurnTime setSolidTimeMod(double mod) { this.modTime[modSolid] = mod; return this; } public ModuleBurnTime setSolidTimeMod(double mod) { this.modTime[modSolid] = mod; return this; }
public ModuleBurnTime setRocketTimeMod(double mod) { this.modTime[modRocket] = mod; return this; } public ModuleBurnTime setRocketTimeMod(double mod) { this.modTime[modRocket] = mod; return this; }
public ModuleBurnTime setBalefireTimeMod(double mod) { this.modTime[modBalefire] = mod; return this; } public ModuleBurnTime setBalefireTimeMod(double mod) { this.modTime[modBalefire] = mod; return this; }
public ModuleBurnTime setLogHeatMod(double mod) { this.modHeat[modLog] = mod; return this; } public ModuleBurnTime setLogHeatMod(double mod) { this.modHeat[modLog] = mod; return this; }
public ModuleBurnTime setWoodHeatMod(double mod) { this.modHeat[modWood] = mod; return this; } public ModuleBurnTime setWoodHeatMod(double mod) { this.modHeat[modWood] = mod; return this; }
public ModuleBurnTime setCoalHeatMod(double mod) { this.modHeat[modCoal] = mod; return this; } public ModuleBurnTime setCoalHeatMod(double mod) { this.modHeat[modCoal] = mod; return this; }

View File

@ -1,7 +1,10 @@
package com.hbm.tileentity.machine; package com.hbm.tileentity.machine;
import java.io.IOException;
import java.util.Random; import java.util.Random;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.AStack;
@ -17,12 +20,10 @@ import com.hbm.inventory.recipes.RotaryFurnaceRecipes;
import com.hbm.inventory.recipes.RotaryFurnaceRecipes.RotaryFurnaceRecipe; import com.hbm.inventory.recipes.RotaryFurnaceRecipes.RotaryFurnaceRecipe;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.module.ModuleBurnTime;
import com.hbm.packet.PacketDispatcher; import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.*;
import com.hbm.tileentity.IFluidCopiable;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachinePolluting;
import com.hbm.util.CrucibleUtil; import com.hbm.util.CrucibleUtil;
import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.fauxpointtwelve.DirPos;
@ -42,7 +43,7 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting implements IFluidStandardTransceiver, IGUIProvider, IFluidCopiable, IConditionalInvAccess { public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting implements IFluidStandardTransceiver, IGUIProvider, IFluidCopiable, IConditionalInvAccess, IConfigurableMachine {
public FluidTank[] tanks; public FluidTank[] tanks;
public boolean isProgressing; public boolean isProgressing;
@ -52,17 +53,29 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
public int steamUsed = 0; public int steamUsed = 0;
public boolean isVenting; public boolean isVenting;
public MaterialStack output; public MaterialStack output;
public ItemStack lastFuel;
public static final int maxOutput = MaterialShapes.BLOCK.q(16); public static final int maxOutput = MaterialShapes.BLOCK.q(16);
public int anim; public int anim;
public int lastAnim; public int lastAnim;
/**Given this has no heat, the heat mod instead affects the progress per fuel **/
public static ModuleBurnTime burnModule = new ModuleBurnTime()
.setCokeTimeMod(1.25)
.setRocketTimeMod(1.5)
.setSolidTimeMod(1.5)
.setBalefireTimeMod(1.5)
.setSolidHeatMod(1.5)
.setRocketHeatMod(3)
.setBalefireHeatMod(10);
public TileEntityMachineRotaryFurnace() { public TileEntityMachineRotaryFurnace() {
super(5, 50); super(5, 50);
tanks = new FluidTank[3]; tanks = new FluidTank[3];
tanks[0] = new FluidTank(Fluids.NONE, 16_000); tanks[0] = new FluidTank(Fluids.NONE, 16_000);
tanks[1] = new FluidTank(Fluids.STEAM, 4_000); tanks[1] = new FluidTank(Fluids.STEAM, 12_000);
tanks[2] = new FluidTank(Fluids.SPENTSTEAM, 40); tanks[2] = new FluidTank(Fluids.SPENTSTEAM, 120);
} }
@Override @Override
@ -118,15 +131,19 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
if(recipe != null) { if(recipe != null) {
if(this.burnTime <= 0 && slots[4] != null && TileEntityFurnace.isItemFuel(slots[4])) { if(this.burnTime <= 0 && slots[4] != null && TileEntityFurnace.isItemFuel(slots[4])) {
this.maxBurnTime = this.burnTime = TileEntityFurnace.getItemBurnTime(slots[4]) / 2; lastFuel = slots[4];
this.maxBurnTime = this.burnTime = burnModule.getBurnTime(lastFuel) / 2;
this.decrStackSize(4, 1); this.decrStackSize(4, 1);
this.markChanged(); this.markChanged();
} }
if(this.canProcess(recipe)) { if(this.canProcess(recipe)) {
this.progress += 1F / recipe.duration; float speed = Math.max((float) burnModule.getMod(lastFuel, burnModule.getModHeat()), 1);
tanks[1].setFill(tanks[1].getFill() - recipe.steam); this.progress += speed / recipe.duration;
steamUsed += recipe.steam;
speed = (float)(13 * Math.log10(speed) + 1);
tanks[1].setFill((int) (tanks[1].getFill() - recipe.steam * speed));
tanks[2].setFill((int) (tanks[2].getFill() + recipe.steam * speed / 100));
this.isProgressing = true; this.isProgressing = true;
if(this.progress >= 1F) { if(this.progress >= 1F) {
@ -188,7 +205,7 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
} }
this.lastAnim = this.anim; this.lastAnim = this.anim;
if(this.isProgressing) { if(this.isProgressing) {
this.anim++; this.anim += (int) Math.max(burnModule.getMod(slots[4], burnModule.getModHeat()), 1);
} }
} }
} }
@ -244,6 +261,9 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
NTMMaterial mat = Mats.matById.get(nbt.getInteger("outType")); NTMMaterial mat = Mats.matById.get(nbt.getInteger("outType"));
this.output = new MaterialStack(mat, nbt.getInteger("outAmount")); this.output = new MaterialStack(mat, nbt.getInteger("outAmount"));
} }
ItemStack nbtFuel = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("lastFuel"));
if(nbtFuel != null)
this.lastFuel = nbtFuel;
} }
@Override @Override
@ -255,6 +275,7 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
nbt.setFloat("prog", progress); nbt.setFloat("prog", progress);
nbt.setInteger("burn", burnTime); nbt.setInteger("burn", burnTime);
nbt.setInteger("maxBurn", maxBurnTime); nbt.setInteger("maxBurn", maxBurnTime);
nbt.setTag("lastFuel", lastFuel.writeToNBT(new NBTTagCompound()));
if (this.output != null) { if (this.output != null) {
nbt.setInteger("outType", this.output.material.id); nbt.setInteger("outType", this.output.material.id);
nbt.setInteger("outAmount", this.output.amount); nbt.setInteger("outAmount", this.output.amount);
@ -392,4 +413,23 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineRotaryFurnace(player.inventory, this); } @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineRotaryFurnace(player.inventory, this); }
@Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRotaryFurnace(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRotaryFurnace(player.inventory, this); }
@Override
public String getConfigName() {
return "rotaryfurnace";
}
@Override
public void readIfPresent(JsonObject obj) {
if(obj.has("burnModule")) {
burnModule.readIfPresent(obj.get("M:burnModule").getAsJsonObject());
}
}
@Override
public void writeConfig(JsonWriter writer) throws IOException {
writer.name("M:burnModule").beginObject();
burnModule.writeConfig(writer);
writer.endObject();
}
} }