Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port Quantum Storage to MUI2 #2554

Draft
wants to merge 12 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/gregtech/api/mui/GTGuiTextures.java
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,10 @@ public static class IDs {
"textures/gui/widget/button_public_private.png",
18, 36, 18, 18, true);

public static final UITexture FLUID_VOID_OVERLAY = fullImage("textures/gui/widget/button_fluid_void.png", true);
public static final UITexture ITEM_VOID_OVERLAY = fullImage("textures/gui/widget/button_item_void.png", true);
public static final UITexture FLUID_LOCK_OVERLAY = fullImage("textures/gui/widget/button_lock.png", true);

// todo bronze/steel/primitive fluid slots?

// SLOT OVERLAYS
Expand Down
88 changes: 88 additions & 0 deletions src/main/java/gregtech/api/mui/GTGuis.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,28 @@
import gregtech.api.mui.factory.MetaTileEntityGuiFactory;

import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandlerModifiable;

import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.factory.GuiManager;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.utils.Alignment;
import com.cleanroommc.modularui.utils.Color;
import com.cleanroommc.modularui.value.sync.BooleanSyncValue;
import com.cleanroommc.modularui.value.sync.SyncHandlers;
import com.cleanroommc.modularui.widget.ParentWidget;
import com.cleanroommc.modularui.widgets.ButtonWidget;
import com.cleanroommc.modularui.widgets.ItemSlot;
import com.cleanroommc.modularui.widgets.TextWidget;
import com.cleanroommc.modularui.widgets.ToggleButton;
import com.cleanroommc.modularui.widgets.layout.Column;
import com.cleanroommc.modularui.widgets.layout.Row;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;

import java.util.function.Predicate;
import java.util.function.Supplier;

public class GTGuis {

@ApiStatus.Internal
Expand Down Expand Up @@ -43,6 +57,80 @@ public static ModularPanel createPanel(ItemStack stack, int width, int height) {
return createPanel(valueItem.unlocalizedName, width, height);
}

public static ModularPanel createQuantumPanel(MetaTileEntity qstorage) {
return createPanel(qstorage, 176, 166)
.padding(4)
.child(IKey.lang(qstorage.getMetaFullName()).asWidget());
}

public static Column createQuantumDisplay(String lang,
Supplier<String> name, Predicate<TextWidget> condition,
Supplier<String> count) {
return new Column()
.background(GTGuiTextures.DISPLAY)
.padding(4)
.height(46)
.left(7).right(7)
.top(16)
.child(IKey.lang(lang)
.alignment(Alignment.TopLeft)
.color(Color.WHITE.main)
.asWidget()
.widthRel(0.5f)
.left(4)
.marginBottom(2))
.child(IKey.dynamic(name)
.alignment(Alignment.TopLeft)
.color(Color.WHITE.main)
.asWidget()
.setEnabledIf(condition)
.widthRel(0.5f)
.left(4)
.height(20)
.marginBottom(2))
.child(IKey.dynamic(count)
.alignment(Alignment.TopLeft)
.color(Color.WHITE.main)
.asWidget()
.widthRel(0.5f)
.left(4));
}

public static ParentWidget<?> createQuantumIO(IItemHandlerModifiable importHandler,
IItemHandlerModifiable exportHandler) {
return new Row()
.pos(79, 18 + 45)
.coverChildren()
.child(new ItemSlot()
.background(GTGuiTextures.SLOT, GTGuiTextures.IN_SLOT_OVERLAY)
.slot(SyncHandlers.itemSlot(importHandler, 0)
.accessibility(true, false)
.singletonSlotGroup(200))
.marginRight(18))
.child(new ItemSlot()
.background(GTGuiTextures.SLOT, GTGuiTextures.OUT_SLOT_OVERLAY)
.slot(SyncHandlers.itemSlot(exportHandler, 0)
.accessibility(false, true)));
}

public static Row createQuantumButtonRow(boolean isFluid,
@NotNull BooleanSyncValue autoOutput,
@NotNull BooleanSyncValue isLocked,
@NotNull BooleanSyncValue isVoiding) {
return new Row()
.coverChildren()
.pos(7, 63)
.child(new ToggleButton()
.overlay(isFluid ? GTGuiTextures.BUTTON_FLUID_OUTPUT : GTGuiTextures.BUTTON_ITEM_OUTPUT)
.value(autoOutput))
.child(new ToggleButton()
.overlay(GTGuiTextures.FLUID_LOCK_OVERLAY)
.value(isLocked))
.child(new ToggleButton()
.overlay(isFluid ? GTGuiTextures.FLUID_VOID_OVERLAY : GTGuiTextures.ITEM_VOID_OVERLAY)
.value(isVoiding));
}

public static ModularPanel createPopupPanel(String name, int width, int height) {
return createPopupPanel(name, width, height, false, false);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package gregtech.api.mui.widget;

import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;

import com.cleanroommc.modularui.api.widget.Interactable;
import com.cleanroommc.modularui.drawable.GuiDraw;
import com.cleanroommc.modularui.drawable.TextRenderer;
import com.cleanroommc.modularui.integration.jei.JeiGhostIngredientSlot;
import com.cleanroommc.modularui.screen.viewport.GuiContext;
import com.cleanroommc.modularui.theme.WidgetTheme;
import com.cleanroommc.modularui.value.sync.SyncHandler;
import com.cleanroommc.modularui.widget.Widget;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;

public class QuantumFluidRendererWidget extends Widget<QuantumFluidRendererWidget> implements Interactable,
JeiGhostIngredientSlot<FluidStack> {

private final QuentumFluidSH syncHandler;
private final TextRenderer textRenderer = new TextRenderer();

public QuantumFluidRendererWidget(FluidTank fluidTank) {
this.syncHandler = new QuentumFluidSH(fluidTank);
setSyncHandler(this.syncHandler);
}

@Override
public void onInit() {
getContext().getJeiSettings().addJeiGhostIngredientSlot(this);
}

@NotNull
@Override
public Result onMousePressed(int mouseButton) {
// todo interaction maybe?
return Result.IGNORE;
}

@Override
public void draw(GuiContext context, WidgetTheme widgetTheme) {
// draw stuff
FluidStack content = this.syncHandler.getFluidStack();
if (content != null) {
GuiDraw.drawFluidTexture(content, 0, 0, getArea().width, getArea().height, 0);
// String s = NumberFormat.formatWithMaxDigits(content.amount) + " L";
// this.textRenderer.setAlignment(Alignment.CenterRight, getArea().width);
// this.textRenderer.setPos(0, 5);
// this.textRenderer.setColor(Color.WHITE.main);
// this.textRenderer.draw(s);
}
}

@Override
public void setGhostIngredient(@NotNull FluidStack ingredient) {}

@Override
public @Nullable FluidStack castGhostIngredientIfValid(@NotNull Object ingredient) {
return ingredient instanceof FluidStack ? (FluidStack) ingredient : null;
}

private static class QuentumFluidSH extends SyncHandler {

public final FluidTank fluidHandler;

private QuentumFluidSH(FluidTank fluidHandler) {
this.fluidHandler = fluidHandler;
}

@Nullable
public FluidStack getFluidStack() {
return fluidHandler.getFluid();
}

@Override
public void readOnClient(int id, PacketBuffer buf) throws IOException {}

@Override
public void readOnServer(int id, PacketBuffer buf) throws IOException {}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package gregtech.api.mui.widget;

import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;

import com.cleanroommc.modularui.api.widget.Interactable;
import com.cleanroommc.modularui.integration.jei.JeiGhostIngredientSlot;
import com.cleanroommc.modularui.integration.jei.JeiIngredientProvider;
import com.cleanroommc.modularui.screen.viewport.GuiContext;
import com.cleanroommc.modularui.theme.WidgetTheme;
import com.cleanroommc.modularui.widget.Widget;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class QuantumItemRendererWidget extends Widget<QuantumItemRendererWidget> implements Interactable,
JeiGhostIngredientSlot<ItemStack>,
JeiIngredientProvider {

private final IItemHandler itemHandler;

public QuantumItemRendererWidget(IItemHandler itemHandler) {
this.itemHandler = itemHandler;
}

@Override
public void onInit() {
getContext().getJeiSettings().addJeiGhostIngredientSlot(this);
}

@NotNull
@Override
public Result onMousePressed(int mouseButton) {
// todo interaction maybe?
return Result.IGNORE;
}

@Override
public void draw(GuiContext context, WidgetTheme widgetTheme) {
// draw stuff
}

@Override
public void setGhostIngredient(@NotNull ItemStack ingredient) {
// itemHandler.setStackInSlot(0, ingredient);
}

@Override
public @Nullable ItemStack castGhostIngredientIfValid(@NotNull Object ingredient) {
return ingredient instanceof ItemStack ? (ItemStack) ingredient : null;
}

@Override
public @Nullable Object getIngredient() {
return itemHandler.getStackInSlot(0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import gregtech.api.items.itemhandlers.GTItemStackHandler;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.mui.GTGuis;
import gregtech.api.util.GTTransferUtils;
import gregtech.api.util.GTUtility;
import gregtech.client.renderer.texture.Textures;
Expand All @@ -32,6 +33,9 @@
import codechicken.lib.render.pipeline.ColourMultiplier;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.factory.PosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import org.apache.commons.lang3.ArrayUtils;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -85,6 +89,11 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
return new MetaTileEntityCreativeChest(this.metaTileEntityId);
}

@Override
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
return GTGuis.createQuantumPanel(this);
}

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 209)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import gregtech.api.gui.widgets.TextFieldWidget2;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.mui.GTGuis;
import gregtech.api.util.GTUtility;
import gregtech.client.renderer.texture.Textures;
import gregtech.client.renderer.texture.custom.QuantumStorageRenderer;
Expand All @@ -31,6 +32,9 @@
import codechicken.lib.render.pipeline.ColourMultiplier;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.factory.PosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import org.apache.commons.lang3.ArrayUtils;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -75,6 +79,11 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
return new MetaTileEntityCreativeTank(this.metaTileEntityId);
}

@Override
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
return GTGuis.createQuantumPanel(this);
}

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 209)
Expand Down
Loading