Skip to content

Commit c702816

Browse files
committed
Burner burn display
1 parent b11dfca commit c702816

6 files changed

Lines changed: 154 additions & 90 deletions

File tree

src/main/java/com/thepixelatedcat/thermodynamics/client/screen/BurnerScreen.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
import net.minecraft.client.gui.GuiGraphics;
77
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
8+
import net.minecraft.client.gui.screens.inventory.FurnaceScreen;
89
import net.minecraft.network.chat.Component;
910
import net.minecraft.resources.ResourceLocation;
11+
import net.minecraft.util.Mth;
1012
import net.minecraft.world.entity.player.Inventory;
1113

1214
public class BurnerScreen extends AbstractContainerScreen<BurnerMenu>
@@ -40,8 +42,14 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi
4042
@Override
4143
protected void renderBg(GuiGraphics graphics, float partialTick, int mouseX, int mouseY)
4244
{
43-
Component tempLabel = Component.literal(menu.getTemp() + "K");
45+
Component tempLabel = Component.literal(menu.getBurnProgress() + "K");
4446
graphics.blit(BACKGROUND_LOCATION, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight);
4547
graphics.drawString(this.font, tempLabel, ((this.imageWidth - this.font.width(tempLabel)) / 2) + this.leftPos, (this.titleLabelY + 20) + this.topPos, 4210752, false);
48+
49+
if (menu.getBurnProgress() > 0)
50+
{
51+
int burnProgress = menu.getBurnProgress();
52+
graphics.blitSprite(ResourceLocation.withDefaultNamespace("container/furnace/lit_progress"), 14, 14, 0, 14 - burnProgress, ((this.imageWidth - 14) / 2) + this.leftPos, topPos + 36 + 14 - burnProgress, 14, burnProgress);
53+
}
4654
}
4755
}

src/main/java/com/thepixelatedcat/thermodynamics/common/blockentity/machines/HeatContainerBlockEntity.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.core.BlockPos;
77
import net.minecraft.core.HolderLookup;
88
import net.minecraft.nbt.CompoundTag;
9+
import net.minecraft.world.level.Level;
910
import net.minecraft.world.level.block.entity.BlockEntity;
1011
import net.minecraft.world.level.block.entity.BlockEntityType;
1112
import net.minecraft.world.level.block.state.BlockState;
@@ -17,17 +18,20 @@ public abstract class HeatContainerBlockEntity extends BlockEntity
1718
public HeatContainerBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state)
1819
{
1920
super(type, pos, state);
20-
if ((level = getLevel()) != null)
21-
{
22-
heat = level.getChunk(pos).getData(ThermodynamicsDataAttachments.CHUNK_TEMPERATURE).getAdjustedTemp(pos) * getHeatCapacity();
23-
}
2421
}
2522

2623
public double getHeat()
2724
{
2825
return this.heat;
2926
}
3027

28+
@Override
29+
public void setLevel(Level level)
30+
{
31+
super.setLevel(level);
32+
heat = level.getChunk(this.worldPosition).getData(ThermodynamicsDataAttachments.CHUNK_TEMPERATURE).getAdjustedTemp(this.worldPosition) * getHeatCapacity();
33+
}
34+
3135
public void setHeat(double newHeat)
3236
{
3337
this.heat = newHeat;

src/main/java/com/thepixelatedcat/thermodynamics/common/blockentity/machines/generators/BurnerBlockEntity.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public class BurnerBlockEntity extends HeatContainerBlockEntity
1919
private BurnerItemStackHandler itemStackHandler = new BurnerItemStackHandler(1, this);
2020

2121
private double efficiency = 0.5;
22-
private double remainingFuelTicks = 0;
23-
private double fuelItemFuelTicks = 0;
22+
public int remainingFuelTicks = 100;
23+
private int fuelItemFuelTicks = 300;
2424

2525
public BurnerBlockEntity(BlockPos pos, BlockState state)
2626
{
@@ -54,6 +54,16 @@ public ItemStackHandler getInventory()
5454
return itemStackHandler;
5555
}
5656

57+
public int getBurnProgress()
58+
{
59+
return isLit() ? (int)Math.ceil((((double)remainingFuelTicks) / fuelItemFuelTicks) * 14) : 0;
60+
}
61+
62+
public boolean isLit()
63+
{
64+
return remainingFuelTicks > 0;
65+
}
66+
5767
public void onContentsChanged(int slot)
5868
{
5969
if (this.level != null)
@@ -66,15 +76,13 @@ public void onContentsChanged(int slot)
6676
}
6777
}
6878

69-
// Read values from the passed CompoundTag here.
7079
@Override
7180
public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries)
7281
{
7382
super.loadAdditional(tag, registries);
7483
this.itemStackHandler.deserializeNBT(registries, tag.getCompound("inventory"));
7584
}
7685

77-
// Save values into the passed CompoundTag here.
7886
@Override
7987
public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries)
8088
{

src/main/java/com/thepixelatedcat/thermodynamics/common/handler/ContainerHandlers/BurnerItemStackHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.thepixelatedcat.thermodynamics.common.blockentity.machines.generators.BurnerBlockEntity;
44

55
import net.minecraft.world.item.ItemStack;
6+
import net.minecraft.world.item.crafting.RecipeType;
67
import net.neoforged.neoforge.items.ItemStackHandler;
78

89
public class BurnerItemStackHandler extends ItemStackHandler
@@ -18,7 +19,7 @@ public BurnerItemStackHandler(int size, BurnerBlockEntity burnerEntity)
1819
@Override
1920
public boolean isItemValid(int slot, ItemStack stack)
2021
{
21-
return stack.getBurnTime(null) > 0;
22+
return stack.getBurnTime(RecipeType.SMELTING) > 0;
2223
}
2324

2425
@Override

src/main/java/com/thepixelatedcat/thermodynamics/common/menu/BurnerMenu.java

Lines changed: 21 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,26 @@
66

77
import net.minecraft.core.BlockPos;
88
import net.minecraft.world.entity.player.Inventory;
9-
import net.minecraft.world.entity.player.Player;
10-
import net.minecraft.world.inventory.AbstractContainerMenu;
11-
import net.minecraft.world.inventory.ContainerLevelAccess;
129
import net.minecraft.world.inventory.DataSlot;
13-
import net.minecraft.world.inventory.Slot;
1410
import net.minecraft.world.item.ItemStack;
15-
import net.minecraft.world.level.Level;
11+
import net.minecraft.world.item.crafting.RecipeType;
1612
import net.neoforged.neoforge.items.SlotItemHandler;
1713

18-
public class BurnerMenu extends AbstractContainerMenu
14+
public class BurnerMenu extends HeatContainerMenu<BurnerMenu>
1915
{
20-
private ContainerLevelAccess access;
2116
private BurnerBlockEntity attachedEntity;
22-
private Level level;
2317

2418
public BurnerMenu(int containerId, Inventory playerInv, BlockPos pos)
2519
{
26-
super(ThermodynamicsMenus.BURNER_MENU.get(), containerId);
27-
this.level = playerInv.player.level();
28-
this.access = ContainerLevelAccess.create(level, pos);
29-
this.attachedEntity = (BurnerBlockEntity)level.getBlockEntity(pos);
20+
super(containerId, playerInv, pos, ThermodynamicsBlocks.BURNER.get(), ThermodynamicsMenus.BURNER_MENU.get(), 1);
21+
this.attachedEntity = (BurnerBlockEntity)playerInv.player.level().getBlockEntity(pos);
3022

31-
this.setupSlots(playerInv);
3223
this.addSlot
3324
(
3425
new SlotItemHandler(attachedEntity.getInventory(), 0, 80, 53)
3526
{
3627
@Override
37-
public boolean mayPlace(ItemStack stack) {return stack.getBurnTime(null) > 0;}
28+
public boolean mayPlace(ItemStack stack) {return stack.getBurnTime(RecipeType.SMELTING) > 0;}
3829
}
3930
);
4031
this.addDataSlot
@@ -44,7 +35,7 @@ public BurnerMenu(int containerId, Inventory playerInv, BlockPos pos)
4435
@Override
4536
public int get()
4637
{
47-
return attachedEntity.getTemp();
38+
return getTemp();
4839
}
4940

5041
@Override
@@ -54,84 +45,34 @@ public void set(int value)
5445
}
5546
}
5647
);
57-
}
58-
59-
public int getTemp()
60-
{
61-
return attachedEntity.getTemp();
62-
}
63-
64-
// Assume this menu is attached to Supplier<Block> MY_BLOCK
65-
@Override
66-
public boolean stillValid(Player player)
67-
{
68-
return AbstractContainerMenu.stillValid(this.access, player, ThermodynamicsBlocks.BURNER.get());
69-
}
70-
71-
@Override
72-
public ItemStack quickMoveStack(Player playerIn, int index)
73-
{
74-
ItemStack itemstack = ItemStack.EMPTY;
75-
Slot slot = this.slots.get(index);
76-
77-
if (slot != null && slot.hasItem())
78-
{
79-
ItemStack itemstack1 = slot.getItem();
80-
itemstack = itemstack1.copy();
81-
82-
if (index >= this.slots.size() - 1)
48+
this.addDataSlot
49+
(
50+
new DataSlot()
8351
{
84-
if (!this.moveItemStackTo(itemstack1, 0, this.slots.size() - 1, true))
52+
@Override
53+
public int get()
8554
{
86-
return ItemStack.EMPTY;
55+
return getBurnProgress();
8756
}
88-
}
89-
else if (!this.moveItemStackTo(itemstack1, this.slots.size() - 1, this.slots.size(), true))
90-
{
91-
return ItemStack.EMPTY;
92-
}
9357

94-
if (itemstack1.isEmpty())
95-
{
96-
slot.set(ItemStack.EMPTY);
97-
}
98-
else
99-
{
100-
slot.setChanged();
58+
@Override
59+
public void set(int value) {}
10160
}
102-
}
103-
104-
return itemstack;
61+
);
10562
}
10663

107-
public void setupSlots(Inventory playerInventory)
64+
public int getTemp()
10865
{
109-
this.setupPlayerInventorySlots(playerInventory.player);
110-
this.setupPlayerHotbar(playerInventory.player);
66+
return attachedEntity.getTemp();
11167
}
11268

113-
protected void setupPlayerInventorySlots(Player player)
69+
public boolean isLit()
11470
{
115-
int playerInventoryTop = 84;
116-
int playerInventoryLeft = 8;
117-
118-
for (int i = 0; i < 3; i++)
119-
{
120-
for (int j = 0; j < 9; j++)
121-
{
122-
this.addSlot(new Slot(player.getInventory(), j + i * 9 + 9, playerInventoryLeft + j * 18, playerInventoryTop + i * 18));
123-
}
124-
}
71+
return attachedEntity.isLit();
12572
}
12673

127-
protected void setupPlayerHotbar(Player player)
74+
public int getBurnProgress()
12875
{
129-
int hotbarTop = 142;
130-
int hotbarLeft = 8;
131-
132-
for (int i = 0; i < 9; i++)
133-
{
134-
this.addSlot(new Slot(player.getInventory(), i, hotbarLeft + i * 18, hotbarTop));
135-
}
76+
return attachedEntity.getBurnProgress();
13677
}
13778
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.thepixelatedcat.thermodynamics.common.menu;
2+
3+
import com.thepixelatedcat.thermodynamics.common.block.machines.HeatContainerBlock;
4+
5+
import net.minecraft.core.BlockPos;
6+
import net.minecraft.world.entity.player.Inventory;
7+
import net.minecraft.world.entity.player.Player;
8+
import net.minecraft.world.inventory.AbstractContainerMenu;
9+
import net.minecraft.world.inventory.ContainerLevelAccess;
10+
import net.minecraft.world.inventory.MenuType;
11+
import net.minecraft.world.inventory.Slot;
12+
import net.minecraft.world.item.ItemStack;
13+
14+
public abstract class HeatContainerMenu<S extends HeatContainerMenu<S>> extends AbstractContainerMenu
15+
{
16+
private HeatContainerBlock block;
17+
private ContainerLevelAccess access;
18+
private int invSize;
19+
20+
public HeatContainerMenu(int containerId, Inventory playerInv, BlockPos pos, HeatContainerBlock block, MenuType<S> menuType, int invSize)
21+
{
22+
super(menuType, containerId);
23+
this.block = block;
24+
this.invSize = invSize;
25+
this.access = ContainerLevelAccess.create(playerInv.player.level(), pos);
26+
27+
this.setupSlots(playerInv);
28+
}
29+
30+
@Override
31+
public boolean stillValid(Player player)
32+
{
33+
return AbstractContainerMenu.stillValid(this.access, player, block);
34+
}
35+
36+
@Override
37+
public ItemStack quickMoveStack(Player playerIn, int index)
38+
{
39+
ItemStack itemstack = ItemStack.EMPTY;
40+
Slot slot = this.slots.get(index);
41+
42+
if (slot != null && slot.hasItem())
43+
{
44+
ItemStack itemstack1 = slot.getItem();
45+
itemstack = itemstack1.copy();
46+
47+
if (index >= this.slots.size() - invSize)
48+
{
49+
if (!this.moveItemStackTo(itemstack1, 0, this.slots.size() - invSize, true))
50+
{
51+
return ItemStack.EMPTY;
52+
}
53+
}
54+
else if (!this.moveItemStackTo(itemstack1, this.slots.size() - invSize, this.slots.size(), true))
55+
{
56+
return ItemStack.EMPTY;
57+
}
58+
59+
if (itemstack1.isEmpty())
60+
{
61+
slot.set(ItemStack.EMPTY);
62+
}
63+
else
64+
{
65+
slot.setChanged();
66+
}
67+
}
68+
69+
return itemstack;
70+
}
71+
72+
public void setupSlots(Inventory playerInventory)
73+
{
74+
this.setupPlayerInventorySlots(playerInventory.player);
75+
this.setupPlayerHotbar(playerInventory.player);
76+
}
77+
78+
protected void setupPlayerInventorySlots(Player player)
79+
{
80+
int playerInventoryTop = 84;
81+
int playerInventoryLeft = 8;
82+
83+
for (int i = 0; i < 3; i++)
84+
{
85+
for (int j = 0; j < 9; j++)
86+
{
87+
this.addSlot(new Slot(player.getInventory(), j + i * 9 + 9, playerInventoryLeft + j * 18, playerInventoryTop + i * 18));
88+
}
89+
}
90+
}
91+
92+
protected void setupPlayerHotbar(Player player)
93+
{
94+
int hotbarTop = 142;
95+
int hotbarLeft = 8;
96+
97+
for (int i = 0; i < 9; i++)
98+
{
99+
this.addSlot(new Slot(player.getInventory(), i, hotbarLeft + i * 18, hotbarTop));
100+
}
101+
}
102+
}

0 commit comments

Comments
 (0)