iron furnace, some universal code for solid fuels

This commit is contained in:
Boblet 2022-06-15 16:54:45 +02:00
parent c307d26752
commit 34d72b4f80
6 changed files with 193 additions and 13 deletions

View File

@ -14,12 +14,11 @@ public class FuelHandler implements IFuelHandler {
int single = 200;
if(fuel.getItem().equals(ModItems.solid_fuel))
return single * 16;
if(fuel.getItem().equals(ModItems.solid_fuel_presto))
return single * 40;
if(fuel.getItem().equals(ModItems.solid_fuel_presto_triplet))
return single * 200;
if(fuel.getItem().equals(ModItems.solid_fuel)) return single * 16;
if(fuel.getItem().equals(ModItems.solid_fuel_presto)) return single * 40;
if(fuel.getItem().equals(ModItems.solid_fuel_presto_triplet)) return single * 200;
if(fuel.getItem().equals(ModItems.rocket_fuel)) return single * 32;
if(fuel.getItem().equals(ModItems.biomass))
return 800;
if(fuel.getItem().equals(ModItems.biomass_compressed))

View File

@ -17,10 +17,14 @@ public class ContainerFurnaceIron extends Container {
public ContainerFurnaceIron(InventoryPlayer invPlayer, TileEntityFurnaceIron furnace) {
this.furnace = furnace;
//input
this.addSlotToContainer(new Slot(furnace, 0, 53, 17));
//fuel
this.addSlotToContainer(new Slot(furnace, 1, 53, 53));
this.addSlotToContainer(new Slot(furnace, 2, 71, 53));
//output
this.addSlotToContainer(new SlotSmelting(invPlayer.player, furnace, 3, 125, 35));
//upgrade
this.addSlotToContainer(new SlotUpgrade(furnace, 4, 17, 35));
for(int i = 0; i < 3; i++) {

View File

@ -1,5 +1,7 @@
package com.hbm.inventory.gui;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerFurnaceIron;
@ -10,6 +12,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.util.ResourceLocation;
public class GUIFurnaceIron extends GuiContainer {
@ -25,6 +28,26 @@ public class GUIFurnaceIron extends GuiContainer {
this.ySize = 166;
}
@Override
public void drawScreen(int x, int y, float interp) {
super.drawScreen(x, y, interp);
if(this.mc.thePlayer.inventory.getItemStack() == null) {
for(int i = 1; i < 3; ++i) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i);
if(!slot.getHasStack()) {
List<String> bonuses = this.diFurnace.burnModule.getDesc();
if(!bonuses.isEmpty()) {
this.func_146283_a(bonuses, x, y);
}
}
}
}
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName());

View File

@ -0,0 +1,97 @@
package com.hbm.module;
import java.util.ArrayList;
import java.util.List;
import com.hbm.items.ModItems;
import com.hbm.util.ItemStackUtil;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.EnumChatFormatting;
/**
* A simple module for determining the burn time of a stack with added options to define bonuses
* @author hbm
*
*/
public class ModuleBurnTime {
private double modLog = 1.0D;
private double modWood = 1.0D;
private double modCoal = 1.0D;
private double modLignite = 1.0D;
private double modCoke = 1.0D;
private double modSolid = 1.0D;
private double modRocket = 1.0D;
public int getBurnTime(ItemStack stack) {
int fuel = TileEntityFurnace.getItemBurnTime(stack);
if(fuel == 0)
return 0;
if(stack.getItem() == ModItems.solid_fuel) return (int) (fuel * modSolid);
if(stack.getItem() == ModItems.solid_fuel_presto) return (int) (fuel * modSolid);
if(stack.getItem() == ModItems.solid_fuel_presto_triplet) return (int) (fuel * modSolid);
if(stack.getItem() == ModItems.rocket_fuel) return (int) (fuel * modRocket);
List<String> names = ItemStackUtil.getOreDictNames(stack);
for(String name : names) {
if(name.contains("Coke")) return (int) (fuel * modCoke);
if(name.contains("Coal")) return (int) (fuel * modCoal);
if(name.contains("Lignite")) return (int) (fuel * modLignite);
if(name.startsWith("log")) return (int) (fuel * modLog);
if(name.contains("Wood")) return (int) (fuel * modWood);
}
return fuel;
}
public List<String> getDesc() {
List<String> list = new ArrayList();
list.add(EnumChatFormatting.YELLOW + "Burn time bonuses:");
addIf(list, "Logs", modLog);
addIf(list, "Wood", modWood);
addIf(list, "Coal", modCoal);
addIf(list, "Lignite", modLignite);
addIf(list, "Coke", modCoke);
addIf(list, "Solid Fuel", modSolid);
addIf(list, "Rocket Fuel", modRocket);
if(list.size() == 1)
list.clear();
return list;
}
private void addIf(List<String> list, String name, double mod) {
if(mod != 1.0D)
list.add(EnumChatFormatting.YELLOW + "- " + name + ": " + getPercent(mod));
}
private String getPercent(double mod) {
mod -= 1D;
String num = (((int) (mod * 1000)) / 10D) + "%";
if(mod < 0)
num = EnumChatFormatting.RED + "-" + num;
else
num = EnumChatFormatting.GREEN + "+" + num;
return num;
}
public ModuleBurnTime setLogMod(double mod) { this.modLog = mod; return this; }
public ModuleBurnTime setWoodMod(double mod) { this.modWood = mod; return this; }
public ModuleBurnTime setCoalMod(double mod) { this.modCoal = mod; return this; }
public ModuleBurnTime setLigniteMod(double mod) { this.modLignite = mod; return this; }
public ModuleBurnTime setCokeMod(double mod) { this.modCoke = mod; return this; }
public ModuleBurnTime setSolidMod(double mod) { this.modSolid = mod; return this; }
public ModuleBurnTime setRocketMod(double mod) { this.modRocket = mod; return this; }
}

View File

@ -1,15 +1,19 @@
package com.hbm.tileentity.machine;
import com.hbm.inventory.UpgradeManager;
import com.hbm.inventory.container.ContainerFurnaceIron;
import com.hbm.inventory.gui.GUIFurnaceIron;
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
import com.hbm.module.ModuleBurnTime;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
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.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.World;
public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUIProvider {
@ -17,8 +21,21 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI
public int maxBurnTime;
public int burnTime;
public int progress;
public int processingTime;
public static final int baseTime = 200;
public ModuleBurnTime burnModule;
public TileEntityFurnaceIron() {
super(5);
burnModule = new ModuleBurnTime()
.setLigniteMod(1.25)
.setCoalMod(1.25)
.setCokeMod(1.5)
.setSolidMod(2)
.setRocketMod(2);
}
@Override
@ -31,24 +48,51 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI
if(!worldObj.isRemote) {
UpgradeManager.eval(slots, 4, 4);
this.processingTime = baseTime - (100 * Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3) / 3);
if(burnTime <= 0) {
for(int i = 1; i < 3; i++) {
if(slots[i] != null) {
int fuel = TileEntityFurnace.getItemBurnTime(slots[i]);
int fuel = burnModule.getBurnTime(slots[i]);
if(fuel > 0) {
this.maxBurnTime = this.burnTime = fuel;
slots[i].stackSize--;
if(slots[i].stackSize == 0) {
slots[i] = slots[i].getItem().getContainerItem(slots[i]);
}
break;
}
}
}
}
if(canSmelt()) {
this.progress++;
if(this.progress > this.processingTime) {
ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(slots[0]);
if(slots[3] == null) {
slots[3] = result.copy();
} else {
slots[3].stackSize += result.stackSize;
}
this.decrStackSize(0, 1);
}
}
NBTTagCompound data = new NBTTagCompound();
data.setInteger("maxBurnTime", this.maxBurnTime);
data.setInteger("burnTime", this.burnTime);
data.setInteger("progress", this.progress);
data.setInteger("processingTime", this.processingTime);
this.networkPack(data, 50);
}
}
@ -57,6 +101,24 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI
public void networkUnpack(NBTTagCompound nbt) {
this.maxBurnTime = nbt.getInteger("maxBurnTime");
this.burnTime = nbt.getInteger("burnTime");
this.progress = nbt.getInteger("progress");
this.processingTime = nbt.getInteger("processingTime");
}
public boolean canSmelt() {
if(this.burnTime <= 0) return false;
if(slots[0] == null) return false;
ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(slots[0]);
if(result == null) return false;
if(slots[3] == null) return true;
if(!result.isItemEqual(slots[3])) return false;
if(result.stackSize + slots[3].stackSize > slots[3].getMaxStackSize()) return false;
return true;
}
@Override

View File

@ -1,9 +1,5 @@
package com.hbm.tileentity.machine;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.inventory.FluidTank;
@ -11,7 +7,6 @@ import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.types.FluidTypeFlammable;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemRTGPellet;
import com.hbm.lib.Library;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.RTGUtil;