Skip to content

Commit 436000e

Browse files
committed
work on qchest ui a bit
1 parent e598eea commit 436000e

File tree

2 files changed

+55
-18
lines changed

2 files changed

+55
-18
lines changed

src/main/java/gregtech/api/mui/widget/QuantumItemRendererWidget.java

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,55 @@
22

33
import net.minecraft.client.renderer.GlStateManager;
44
import net.minecraft.item.ItemStack;
5-
import net.minecraftforge.items.IItemHandler;
5+
import net.minecraft.network.PacketBuffer;
66

77
import com.cleanroommc.modularui.api.widget.Interactable;
88
import com.cleanroommc.modularui.integration.jei.JeiGhostIngredientSlot;
99
import com.cleanroommc.modularui.integration.jei.JeiIngredientProvider;
10+
import com.cleanroommc.modularui.network.NetworkUtils;
1011
import com.cleanroommc.modularui.screen.GuiScreenWrapper;
1112
import com.cleanroommc.modularui.screen.viewport.GuiContext;
1213
import com.cleanroommc.modularui.theme.WidgetTheme;
14+
import com.cleanroommc.modularui.value.DynamicValue;
15+
import com.cleanroommc.modularui.value.sync.SyncHandler;
1316
import com.cleanroommc.modularui.widget.Widget;
1417
import org.jetbrains.annotations.NotNull;
1518
import org.jetbrains.annotations.Nullable;
1619

20+
import java.io.IOException;
21+
import java.util.function.Consumer;
22+
import java.util.function.Supplier;
23+
1724
public class QuantumItemRendererWidget extends Widget<QuantumItemRendererWidget> implements Interactable,
1825
JeiGhostIngredientSlot<ItemStack>,
1926
JeiIngredientProvider {
2027

21-
private final IItemHandler itemHandler;
28+
private final Supplier<ItemStack> virtualStack;
29+
private DynamicValue<ItemStack> lockedStack;
30+
private final SyncHandler syncHandler = new SyncHandler() {
31+
32+
@Override
33+
public void readOnClient(int id, PacketBuffer buf) throws IOException {}
34+
35+
@Override
36+
public void readOnServer(int id, PacketBuffer buf) throws IOException {
37+
if (id == 0) {
38+
lockedStack.setValue(NetworkUtils.readItemStack(buf));
39+
}
40+
}
41+
};
2242

23-
public QuantumItemRendererWidget(IItemHandler itemHandler) {
24-
this.itemHandler = itemHandler;
43+
public QuantumItemRendererWidget(Supplier<ItemStack> virtualStack) {
44+
this.virtualStack = virtualStack;
45+
setSyncHandler(this.syncHandler);
46+
tooltip().setAutoUpdate(true).setHasTitleMargin(true);
47+
tooltipBuilder(tooltip -> {
48+
if (!isSynced()) return;
49+
ItemStack stack = virtualStack.get();
50+
if (stack.isEmpty()) stack = lockedStack.getValue();
51+
if (stack.isEmpty()) return;
52+
tooltip.addStringLines(getScreen().getScreenWrapper().getItemToolTip(stack));
53+
});
2554
}
2655

2756
@Override
@@ -32,14 +61,15 @@ public void onInit() {
3261
@NotNull
3362
@Override
3463
public Result onMousePressed(int mouseButton) {
35-
// todo interaction maybe?
64+
// todo handle locked
3665
return Result.IGNORE;
3766
}
3867

3968
@Override
4069
public void draw(GuiContext context, WidgetTheme widgetTheme) {
4170
// draw stuff
42-
ItemStack stack = itemHandler.getStackInSlot(0);
71+
ItemStack stack = virtualStack.get();
72+
if (stack.isEmpty()) stack = lockedStack.getValue();
4373
if (stack.isEmpty()) return;
4474

4575
GuiScreenWrapper screenWrapper = getScreen().getScreenWrapper();
@@ -55,7 +85,8 @@ public void draw(GuiContext context, WidgetTheme widgetTheme) {
5585

5686
@Override
5787
public void setGhostIngredient(@NotNull ItemStack ingredient) {
58-
// itemHandler.setStackInSlot(0, ingredient);
88+
lockedStack.setValue(ingredient);
89+
this.syncHandler.syncToServer(0, buffer -> NetworkUtils.writeItemStack(buffer, ingredient));
5990
}
6091

6192
@Override
@@ -65,6 +96,11 @@ public void setGhostIngredient(@NotNull ItemStack ingredient) {
6596

6697
@Override
6798
public @Nullable Object getIngredient() {
68-
return itemHandler.getStackInSlot(0);
99+
return lockedStack.getValue();
100+
}
101+
102+
public QuantumItemRendererWidget onLock(Supplier<ItemStack> getter, Consumer<ItemStack> setter) {
103+
this.lockedStack = new DynamicValue<>(getter, setter);
104+
return this;
69105
}
70106
}

src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumChest.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,8 @@ protected void createWidgets(ModularPanel mainPanel, PanelSyncManager syncManage
316316
() -> IKey.lang(virtualItemStack.getDisplayName()).get(),
317317
textWidget -> !virtualItemStack.isEmpty(),
318318
() -> TextFormattingUtil.formatNumbers(itemsStoredInside)))
319-
.child(new QuantumItemRendererWidget(itemInventory)
319+
.child(new QuantumItemRendererWidget(() -> virtualItemStack)
320+
.onLock(() -> lockedStack, this::setLocked)
320321
.pos(148, 41));
321322
}
322323

@@ -339,20 +340,15 @@ public boolean onWrenchClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fa
339340
public void writeInitialSyncData(@NotNull PacketBuffer buf) {
340341
super.writeInitialSyncData(buf);
341342
this.virtualItemStack.setCount(1);
342-
buf.writeItemStack(virtualItemStack);
343+
NetworkUtils.writeItemStack(buf, virtualItemStack);
343344
NetworkUtils.writeItemStack(buf, lockedStack);
344345
buf.writeLong(itemsStoredInside);
345346
}
346347

347348
@Override
348349
public void receiveInitialSyncData(@NotNull PacketBuffer buf) {
349350
super.receiveInitialSyncData(buf);
350-
try {
351-
this.virtualItemStack = buf.readItemStack();
352-
} catch (IOException ignored) {
353-
GTLog.logger.warn("Failed to load item from NBT in a quantum chest at " + this.getPos() +
354-
" on initial server/client sync");
355-
}
351+
this.virtualItemStack = NetworkUtils.readItemStack(buf);
356352
this.lockedStack = NetworkUtils.readItemStack(buf);
357353
this.itemsStoredInside = buf.readLong();
358354
}
@@ -421,9 +417,14 @@ public void setFrontFacing(EnumFacing frontFacing) {
421417
@Override
422418
protected void setLocked(boolean locked) {
423419
super.setLocked(locked);
424-
if (locked && !this.virtualItemStack.isEmpty())
420+
if (locked && !this.virtualItemStack.isEmpty() && this.lockedStack.isEmpty())
425421
this.lockedStack = this.virtualItemStack.copy();
426-
else this.lockedStack = ItemStack.EMPTY;
422+
else if (!locked) this.lockedStack = ItemStack.EMPTY;
423+
}
424+
425+
protected void setLocked(ItemStack stack) {
426+
this.lockedStack = stack;
427+
super.setLocked(!stack.isEmpty());
427428
}
428429

429430
@Override

0 commit comments

Comments
 (0)