mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
iron furnace, some universal code for solid fuels
This commit is contained in:
parent
c307d26752
commit
34d72b4f80
@ -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))
|
||||
|
||||
@ -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++) {
|
||||
|
||||
@ -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());
|
||||
|
||||
97
src/main/java/com/hbm/module/ModuleBurnTime.java
Normal file
97
src/main/java/com/hbm/module/ModuleBurnTime.java
Normal 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; }
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user