-
Notifications
You must be signed in to change notification settings - Fork 209
Expand file tree
/
Copy pathSteamCoalBoiler.java
More file actions
executable file
·101 lines (86 loc) · 3.64 KB
/
Copy pathSteamCoalBoiler.java
File metadata and controls
executable file
·101 lines (86 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package gregtech.common.metatileentities.steam.boiler;
import gregtech.api.gui.GuiTextures;
import gregtech.api.gui.ModularUI;
import gregtech.api.gui.widgets.ProgressWidget.MoveType;
import gregtech.api.items.itemhandlers.GTItemStackHandler;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.recipes.ModHandler;
import gregtech.api.recipes.category.ICategoryOverride;
import gregtech.client.renderer.texture.Textures;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidUtil;
import net.minecraftforge.items.IItemHandlerModifiable;
import org.jetbrains.annotations.NotNull;
public class SteamCoalBoiler extends SteamBoiler implements ICategoryOverride {
public SteamCoalBoiler(ResourceLocation metaTileEntityId, boolean isHighPressure) {
super(metaTileEntityId, isHighPressure, Textures.COAL_BOILER_OVERLAY);
}
@Override
public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
return new SteamCoalBoiler(metaTileEntityId, isHighPressure);
}
@Override
protected int getBaseSteamOutput() {
return isHighPressure ? 320 : 160;
}
@Override
protected void tryConsumeNewFuel() {
ItemStack fuelInSlot = importItems.extractItem(0, 1, true);
if (fuelInSlot.isEmpty()) return;
// Prevent consuming buckets with burn time
if (FluidUtil.getFluidHandler(fuelInSlot) != null) {
return;
}
int burnTime = TileEntityFurnace.getItemBurnTime(fuelInSlot);
if (burnTime <= 0) return;
importItems.extractItem(0, 1, false);
ItemStack remainderAsh = ModHandler.getBurningFuelRemainder(fuelInSlot);
if (!remainderAsh.isEmpty()) { // we don't care if we can't insert ash - it's chanced anyway
exportItems.insertItem(0, remainderAsh, false);
}
setFuelMaxBurnTime(burnTime);
}
@Override
protected int getCooldownInterval() {
return isHighPressure ? 40 : 45;
}
@Override
protected int getCoolDownRate() {
return 1;
}
@Override
public IItemHandlerModifiable createExportItemHandler() {
return new GTItemStackHandler(this, 1);
}
@Override
public IItemHandlerModifiable createImportItemHandler() {
return new GTItemStackHandler(this, 1) {
@NotNull
@Override
public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
if (TileEntityFurnace.getItemBurnTime(stack) <= 0)
return stack;
return super.insertItem(slot, stack, simulate);
}
};
}
@Override
public ModularUI createUI(EntityPlayer player) {
return createUITemplate(player)
.slot(this.importItems, 0, 115, 62,
GuiTextures.SLOT_STEAM.get(isHighPressure), GuiTextures.COAL_OVERLAY_STEAM.get(isHighPressure))
.slot(this.exportItems, 0, 115, 26, true, false,
GuiTextures.SLOT_STEAM.get(isHighPressure), GuiTextures.DUST_OVERLAY_STEAM.get(isHighPressure))
.progressBar(this::getFuelLeftPercent, 115, 44, 18, 18,
GuiTextures.PROGRESS_BAR_BOILER_FUEL.get(isHighPressure), MoveType.VERTICAL)
.build(getHolder(), player);
}
@Override
public @NotNull String @NotNull [] getJEICategoryOverrides() {
return new String[] { "minecraft.fuel" };
}
}