diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index 58aaac61653..ba1b03524de 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -289,8 +289,6 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player return machine.getDefinition().getUI().tryToOpenUI(player, hand, hit); } else if (machine instanceof IMuiMachine muiMachine) { return muiMachine.tryToOpenUI(player, hand, hit); - } else if (machine instanceof IUIMachine uiMachine) { - return uiMachine.tryToOpenUI(player, hand, hit); } } return shouldOpenUi ? InteractionResult.PASS : InteractionResult.CONSUME; diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/RendererMaterialBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/RendererMaterialBlock.java deleted file mode 100644 index ddd25dd4e5c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/block/RendererMaterialBlock.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.gregtechceu.gtceu.api.block; - -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.tag.TagPrefix; - -import com.lowdragmc.lowdraglib.client.renderer.IBlockRendererProvider; -import com.lowdragmc.lowdraglib.client.renderer.IRenderer; - -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import org.jetbrains.annotations.Nullable; - -public class RendererMaterialBlock extends MaterialBlock implements IBlockRendererProvider { - - public final IRenderer renderer; - - public RendererMaterialBlock(Properties properties, TagPrefix tagPrefix, Material material, - @Nullable IRenderer renderer) { - super(properties, tagPrefix, material, false); - this.renderer = renderer; - } - - @Nullable - @Override - @OnlyIn(Dist.CLIENT) - public IRenderer getRenderer(BlockState state) { - return renderer; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java index b4fce4cded1..de39df64b52 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.pipenet.*; import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; @@ -18,10 +18,9 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -329,13 +328,13 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I return false; } - public ResourceTexture getPipeTexture(boolean isBlock) { - return isBlock ? GuiTextures.TOOL_PIPE_CONNECT : GuiTextures.TOOL_PIPE_BLOCK; + public UITexture getPipeTexture(boolean isBlock) { + return isBlock ? GTGuiTextures.TOOL_PIPE_CONNECT : GTGuiTextures.TOOL_PIPE_BLOCK; } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(getPipeTuneTool())) { if (player.isShiftKeyDown() && this.canHaveBlockedFaces()) { return getPipeTexture(isBlocked(side)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java index e1ffe4dbb08..d768e6b4267 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java @@ -1,17 +1,13 @@ package com.gregtechceu.gtceu.api.capability.recipe; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.mui.drawable.UITexture; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import lombok.Getter; /** * The capability can be input or output or both */ -public enum IO implements EnumSelectorWidget.SelectableEnum { +public enum IO { IN("gtceu.io.import", "import"), OUT("gtceu.io.export", "export"), @@ -21,13 +17,10 @@ public enum IO implements EnumSelectorWidget.SelectableEnum { @Getter public final String tooltip; @Getter - public final IGuiTexture icon; - @Getter public final UITexture uiTexture; IO(String tooltip, String textureName) { this.tooltip = tooltip; - this.icon = new ResourceTexture("gtceu:textures/gui/icon/io_mode/" + textureName + ".png"); this.uiTexture = UITexture.fullImage("gtceu:textures/gui/icon/io_mode/" + textureName + ".png"); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java index c6516616d1a..c9c1fc5a9f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java @@ -2,11 +2,10 @@ import com.gregtechceu.gtceu.api.blockentity.ICopyable; import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -14,8 +13,7 @@ import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; import com.gregtechceu.gtceu.client.renderer.cover.IDynamicCoverRenderer; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -179,10 +177,6 @@ public boolean shouldRenderPlate() { return coverDefinition.getCoverRenderer(); } - public @Nullable IFancyConfigurator getConfigurator() { - return null; - } - @Override public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, ItemStack held, Set toolTypes) { @@ -191,13 +185,13 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.CROWBAR)) { - return GuiTextures.TOOL_REMOVE_COVER; + return GTGuiTextures.TOOL_REMOVE_COVER; } if ((toolTypes.isEmpty() || toolTypes.contains(GTToolType.SCREWDRIVER)) && this instanceof IMuiCover) { - return GuiTextures.TOOL_COVER_SETTINGS; + return GTGuiTextures.TOOL_COVER_SETTINGS; } return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java index ebfa18add97..0c0b922344f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java @@ -5,8 +5,6 @@ import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.nbt.CompoundTag; import java.util.function.Consumer; @@ -14,10 +12,6 @@ public interface Filter> extends Predicate { - default WidgetGroup openConfigurator(int x, int y) { - return null; - } - /** * @return Filter panel when opened by itself (including the player inventory) */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java index 7518f95f5e1..f365429527d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.cover.CoverBehavior; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; @@ -12,10 +10,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.item.ItemStack; @@ -43,7 +37,6 @@ public abstract class FilterHandler> implements ISyncM private @Nullable F filter; private @Nullable CustomItemStackHandler filterSlot; - private @Nullable WidgetGroup filterGroup; private @NotNull Consumer onFilterLoaded = (filter) -> {}; private @NotNull Consumer onFilterRemoved = (filter) -> {}; @@ -63,21 +56,6 @@ public FilterHandler(ISyncManaged container) { public abstract boolean canInsertFilterItem(ItemStack itemStack); - public Widget createFilterSlotUI(int xPos, int yPos) { - return new SlotWidget(getFilterSlot(), 0, xPos, yPos) - .setChangeListener(this::updateFilter) - .setBackgroundTexture(new GuiTextureGroup(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); - } - - public Widget createFilterConfigUI(int xPos, int yPos, int width, int height) { - this.filterGroup = new WidgetGroup(xPos, yPos, width, height); - if (!this.filterItem.isEmpty()) { - this.filterGroup.addWidget(getFilter().openConfigurator(0, 0)); - } - - return this.filterGroup; - } - public boolean isFilterPresent() { return filter != null || !filterItem.isEmpty(); } @@ -172,18 +150,6 @@ private void loadFilterFromItem() { } this.onFilterLoaded.accept(this.filter); } - updateFilterGroupUI(); - } - - private void updateFilterGroupUI() { - if (this.filterGroup == null) - return; - - this.filterGroup.clearAllWidgets(); - - if (!this.filterItem.isEmpty() && this.filter != null) { - this.filterGroup.addWidget(this.filter.openConfigurator(0, 0)); - } } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index f8ad51ce5cc..5771033c19a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.drawable.ColorType; import com.gregtechceu.gtceu.api.mui.drawable.UITexture; @@ -21,9 +20,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -141,7 +137,7 @@ public void setModeFromMachine(String machineName) { } @MethodsReturnNonnullByDefault - private enum SmartFilteringMode implements EnumSelectorWidget.SelectableEnum { + private enum SmartFilteringMode { ELECTROLYZER("electrolyzer", GTRecipeTypes.ELECTROLYZER_RECIPES), CENTRIFUGE("centrifuge", GTRecipeTypes.CENTRIFUGE_RECIPES), @@ -158,21 +154,11 @@ private enum SmartFilteringMode implements EnumSelectorWidget.SelectableEnum { this.recipeType = type; } - @Override - public String getTooltip() { - return "cover.item_smart_filter.filtering_mode." + localeName; - } - public static UITexture[] getTextures() { return Arrays.stream(VALUES) .map(v -> UITexture.fullImage(GTCEu.MOD_ID, "textures/block/machines/" + v.localeName + "/overlay_front.png", ColorType.DEFAULT)) .toArray(UITexture[]::new); } - - @Override - public IGuiTexture getIcon() { - return new ResourceTexture("gtceu:textures/block/machines/" + localeName + "/overlay_front.png"); - } } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/GuiTextures.java b/src/main/java/com/gregtechceu/gtceu/api/gui/GuiTextures.java index 2b1e3eecbd2..22cbdab7021 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/GuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/GuiTextures.java @@ -12,42 +12,6 @@ public class GuiTextures { public static final ResourceTexture GREGTECH_LOGO_XMAS = new ResourceTexture( "gtceu:textures/gui/icon/gregtech_logo_xmas.png"); - // HUD - public static final ResourceTexture TOOL_FRONT_FACING_ROTATION = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_front_facing_rotation.png"); - public static final ResourceTexture TOOL_IO_FACING_ROTATION = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_io_facing_rotation.png"); - public static final ResourceTexture TOOL_PAUSE = new ResourceTexture("gtceu:textures/gui/overlay/tool_pause.png"); - public static final ResourceTexture TOOL_START = new ResourceTexture("gtceu:textures/gui/overlay/tool_start.png"); - public static final ResourceTexture TOOL_COVER_SETTINGS = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_cover_settings.png"); - public static final ResourceTexture TOOL_MUTE = new ResourceTexture("gtceu:textures/gui/overlay/tool_mute.png"); - public static final ResourceTexture TOOL_SOUND = new ResourceTexture("gtceu:textures/gui/overlay/tool_sound.png"); - public static final ResourceTexture TOOL_ALLOW_INPUT = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_allow_input.png"); - public static final ResourceTexture TOOL_ATTACH_COVER = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_attach_cover.png"); - public static final ResourceTexture TOOL_REMOVE_COVER = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_remove_cover.png"); - public static final ResourceTexture TOOL_PIPE_BLOCK = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_pipe_block.png"); - public static final ResourceTexture TOOL_PIPE_CONNECT = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_pipe_connect.png"); - public static final ResourceTexture TOOL_WIRE_BLOCK = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_wire_block.png"); - public static final ResourceTexture TOOL_WIRE_CONNECT = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_wire_connect.png"); - public static final ResourceTexture TOOL_AUTO_OUTPUT = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_auto_output.png"); - public static final ResourceTexture TOOL_DISABLE_AUTO_OUTPUT = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_disable_auto_output.png"); - public static final ResourceTexture TOOL_SWITCH_CONVERTER_NATIVE = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_wire_block.png"); // todo switch to tool_switch_converter_native once that - // gets made - public static final ResourceTexture TOOL_SWITCH_CONVERTER_EU = new ResourceTexture( - "gtceu:textures/gui/overlay/tool_wire_connect.png"); // todo switch to tool_switch_converter_eu once that - // gets made - // BASE TEXTURES public static final ResourceBorderTexture BACKGROUND = new ResourceBorderTexture( "gtceu:textures/gui/base/background.png", 16, 16, 4, 4); diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java b/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java deleted file mode 100644 index 46bb179cbeb..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.gregtechceu.gtceu.api.gui; - -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.world.entity.player.Inventory; - -public class UITemplate { - - public static WidgetGroup bindPlayerInventory(Inventory inventoryPlayer, IGuiTexture imageLocation, int x, int y, - boolean addHotbar) { - WidgetGroup group = new WidgetGroup(x, y, 162, 54 + (addHotbar ? 22 : 0)); - for (int row = 0; row < 3; row++) { - for (int col = 0; col < 9; col++) { - group.addWidget(new SlotWidget(inventoryPlayer, col + (row + 1) * 9, col * 18, row * 18) - .setBackgroundTexture(imageLocation) - .setLocationInfo(true, false)); - } - } - if (addHotbar) { - for (int slot = 0; slot < 9; slot++) { - group.addWidget(new SlotWidget(inventoryPlayer, slot, slot * 18, 58) - .setBackgroundTexture(imageLocation) - .setLocationInfo(true, true)); - } - } - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java index 220c3a9c4d0..82cbeb6ff47 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/factory/MachineUIFactory.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.lowdragmc.lowdraglib.gui.factory.UIFactory; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; @@ -24,9 +23,6 @@ public MachineUIFactory() { @Override protected ModularUI createUITemplate(MetaMachine holder, Player entityPlayer) { - if (holder instanceof IUIMachine machine) { - return machine.createUI(entityPlayer); - } return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/ConfiguratorPanel.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/ConfiguratorPanel.java deleted file mode 100644 index 4762dfeb273..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/ConfiguratorPanel.java +++ /dev/null @@ -1,449 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.config.ConfigHolder; - -import com.lowdragmc.lowdraglib.gui.animation.Animation; -import com.lowdragmc.lowdraglib.gui.animation.Transform; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.TextTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; -import com.lowdragmc.lowdraglib.utils.interpolate.Eases; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import com.mojang.blaze3d.systems.RenderSystem; -import lombok.Getter; -import lombok.Setter; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class ConfiguratorPanel extends WidgetGroup { - - @Getter - protected List tabs = new ArrayList<>(); - @Getter - @Nullable - protected Tab expanded; - @Setter - protected int border = 4; - @Setter - protected IGuiTexture texture = GuiTextures.BACKGROUND; - - public ConfiguratorPanel(int x, int y) { - super(x, y, 24, 0); - } - - public void clear() { - clearAllWidgets(); - tabs.clear(); - expanded = null; - } - - public int getTabSize() { - return getSize().width; - } - - public void attachConfigurators(IFancyConfigurator... fancyConfigurators) { - for (IFancyConfigurator fancyConfigurator : fancyConfigurators) { - var tab = new Tab(fancyConfigurator); - tab.setBackground(texture); - tabs.add(tab); - addWidgetAnima(tab, new Transform() - .scale(0) - .duration(getAnimationTime()) - .ease(Eases.EaseQuadOut)); - } - setSize(new Size(getSize().width, Math.max(0, tabs.size() * (getTabSize() + 2) - 2))); - } - - public void expandTab(Tab tab) { - tab.expand(); - int i = 0; - for (Tab otherTab : tabs) { - if (otherTab != tab) { - otherTab.collapseTo(0, i++ * (getTabSize() + 2)); - } - } - expanded = tab; - } - - public void collapseTab() { - if (expanded != null) { - for (int i = 0; i < tabs.size(); i++) { - tabs.get(i).collapseTo(0, i * (getTabSize() + 2)); - } - if (expanded instanceof FloatingTab) { - expanded.collapseTo(0, 0); - } - } - expanded = null; - } - - @Override - @OnlyIn(Dist.CLIENT) - protected void drawWidgetsBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - for (Widget widget : widgets) { - if (widget.isVisible() && widget != expanded) { - RenderSystem.setShaderColor(1, 1, 1, 1); - RenderSystem.enableBlend(); - if (widget.inAnimate()) { - widget.getAnimation().drawInBackground(graphics, mouseX, mouseY, partialTicks); - } else { - widget.drawInBackground(graphics, mouseX, mouseY, partialTicks); - } - } - } - if (expanded != null && expanded.isVisible()) { - graphics.pose().pushPose(); - graphics.pose().translate(0, 0, 300); - RenderSystem.setShaderColor(1, 1, 1, 1); - RenderSystem.enableBlend(); - if (expanded.inAnimate()) { - expanded.getAnimation().drawInBackground(graphics, mouseX, mouseY, partialTicks); - } else { - expanded.drawInBackground(graphics, mouseX, mouseY, partialTicks); - } - graphics.pose().popPose(); - } - } - - @Override - @OnlyIn(Dist.CLIENT) - - protected void drawWidgetsForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - // remove previous tooltip - if (isMouseOverElement(mouseX, mouseY)) { - gui.getModularUIGui().setHoverTooltip(Collections.emptyList(), ItemStack.EMPTY, null, null); - } - for (Widget widget : widgets) { - if (widget.isVisible() && widget != expanded) { - RenderSystem.setShaderColor(1, 1, 1, 1); - RenderSystem.enableBlend(); - if (widget.inAnimate()) { - widget.getAnimation().drawInForeground(graphics, mouseX, mouseY, partialTicks); - } else { - widget.drawInForeground(graphics, mouseX, mouseY, partialTicks); - } - } - } - if (expanded != null && expanded.isVisible()) { - RenderSystem.setShaderColor(1, 1, 1, 1); - RenderSystem.enableBlend(); - if (expanded.inAnimate()) { - expanded.getAnimation().drawInForeground(graphics, mouseX, mouseY, partialTicks); - } else { - expanded.drawInForeground(graphics, mouseX, mouseY, partialTicks); - } - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (expanded != null && expanded.isVisible() && expanded.isActive() && - expanded.mouseClicked(mouseX, mouseY, button)) { - return true; - } - return super.mouseClicked(mouseX, mouseY, button); - } - - public FloatingTab createFloatingTab(IFancyConfigurator configurator) { - return new FloatingTab(configurator); - } - - public class Tab extends WidgetGroup { - - protected final IFancyConfigurator configurator; - protected final ButtonWidget button; - @Nullable - protected final WidgetGroup view; - // dragging - protected double lastDeltaX, lastDeltaY; - protected int dragOffsetX, dragOffsetY; - protected boolean isDragging; - - public Tab(IFancyConfigurator configurator) { - super(0, tabs.size() * (getTabSize() + 2), getTabSize(), getTabSize()); - this.configurator = configurator; - this.button = new ButtonWidget(0, 0, getTabSize(), getTabSize(), null, this::onClick) { - - @Override - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - if (!(configurator instanceof IFancyCustomMouseWheelAction hasActions)) return false; - if (isMouseOverElement(mouseX, mouseY)) - return hasActions.mouseWheelMove(this::writeClientAction, mouseX, mouseY, wheelDelta); - return false; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - if (configurator instanceof IFancyCustomClientActionHandler handler && id > 1) - handler.handleClientAction(id, buffer); - else - super.handleClientAction(id, buffer); - } - }; - if (configurator instanceof IFancyConfiguratorButton) { - this.view = null; - this.addWidget(button); - } else { - var widget = configurator.createConfigurator(); - widget.setSelfPosition(new Position(border, getTabSize())); - - this.view = new WidgetGroup(0, 0, 0, 0) { - - @Override - protected void onChildSizeUpdate(Widget child) { - super.onChildSizeUpdate(child); - if (widget == child) { - this.setSize(new Size(widget.getSize().width + border * 2, - widget.getSize().height + getTabSize() + border)); - } - } - }; - - this.view.setVisible(false); - this.view.setActive(false); - this.view.setSize(new Size(widget.getSize().width + border * 2, - widget.getSize().height + button.getSize().height + border)); - this.view.addWidget(widget); - this.view.addWidget(new ImageWidget(border + 5, border, widget.getSize().width - getTabSize() - 5, - getTabSize() - border, - new TextTexture(configurator.getTitle().getString()) - .setType(TextTexture.TextType.LEFT_HIDE) - .setWidth(widget.getSize().width - getTabSize()))); - this.addWidget(button); - this.addWidget(view); - } - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - super.writeInitialData(buffer); - configurator.writeInitialData(buffer); - } - - @Override - public void readInitialData(FriendlyByteBuf buffer) { - super.readInitialData(buffer); - configurator.readInitialData(buffer); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - configurator.detectAndSendChange((id, sender) -> writeUpdateInfo(0, buf -> { - buf.writeVarInt(id); - sender.accept(buf); - })); - } - - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - if (id == 0) { - configurator.readUpdateInfo(buffer.readVarInt(), buffer); - } else { - super.readUpdateInfo(id, buffer); - } - } - - @Override - protected void onChildSizeUpdate(Widget child) { - if (this.view != null && this.view == child) { - if (expanded == this) { - var size = view.getSize(); - animation(new Animation() - .duration(getAnimationTime()) - .position(new Position(dragOffsetX + (-size.width + (tabs.size() > 1 ? -2 : getTabSize())), - dragOffsetY)) - .size(size) - .ease(Eases.EaseQuadOut) - .onFinish(() -> { - view.setVisible(true); - view.setActive(true); - })); - } - } - } - - private void onClick(ClickData clickData) { - if (clickData.button == 2 && configurator instanceof IFancyCustomMiddleClickAction middleAction) { - middleAction.onMiddleClick(this::writeClientAction); - } else if (configurator instanceof IFancyConfiguratorButton fancyButton) { - fancyButton.onClick(clickData); - } else { - if (expanded == this) { - collapseTab(); - } else { - expandTab(this); - } - } - } - - @Override - public void setSize(Size size) { - super.setSize(size); - button.setSelfPosition(new Position(size.width - getTabSize(), 0)); - } - - private void expand() { - if (view == null) return; - var size = view.getSize(); - this.dragOffsetX = 0; - this.dragOffsetY = 0; - if (isRemote()) { - if (getParentPosition().x - size.width + (tabs.size() > 1 ? -2 : getTabSize()) < 0) { - this.dragOffsetX -= (view.getParentPosition().x - size.width + - (tabs.size() > 1 ? -2 : getTabSize())); - } - if (getParentPosition().y + size.height > gui.getScreenHeight()) { - this.dragOffsetY -= view.getParentPosition().y + size.height - gui.getScreenHeight(); - } - } - Position position = new Position(dragOffsetX - size.width + (tabs.size() > 1 ? -2 : getTabSize()), - dragOffsetY); - - animation(new Animation() - .duration(getAnimationTime()) - .position(position) - .size(size) - .ease(Eases.EaseQuadOut) - .onFinish(() -> { - view.setVisible(true); - view.setActive(true); - })); - } - - protected void collapseTo(int x, int y) { - if (view != null) { - view.setVisible(false); - view.setActive(false); - } - animation(new Animation() - .duration(getAnimationTime()) - .position(new Position(x, y)) - .size(new Size(getTabSize(), getTabSize())) - .ease(Eases.EaseQuadOut)); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - drawBackgroundTexture(graphics, mouseX, mouseY); - var position = getPosition(); - var size = getSize(); - if (inAnimate()) { - graphics.enableScissor(position.x + border - 1, position.y + border - 1, - position.x + border - 1 + size.width - (border - 1) * 2, - position.y + border - 1 + size.height - (border - 1) * 2); - drawWidgetsBackground(graphics, mouseX, mouseY, partialTicks); - graphics.disableScissor(); - } else { - drawWidgetsBackground(graphics, mouseX, mouseY, partialTicks); - } - configurator.getIcon().draw(graphics, mouseX, mouseY, position.x + size.width - 20, position.y + 4, 16, 16); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInForeground(graphics, mouseX, mouseY, partialTicks); - if (isMouseOver(getPosition().x + getSize().width - 20, getPosition().y + 4, 16, 16, mouseX, mouseY) && - gui != null && gui.getModularUIGui() != null) { - gui.getModularUIGui().setHoverTooltip(configurator.getTooltips(), ItemStack.EMPTY, null, null); - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseClicked(double mouseX, double mouseY, int button) { - this.lastDeltaX = 0; - this.lastDeltaY = 0; - this.isDragging = false; - if (expanded == this && isMouseOver(getPosition().x, getPosition().y, getSize().width - getTabSize(), - getTabSize(), mouseX, mouseY)) { - isDragging = true; - return true; - } - return super.mouseClicked(mouseX, mouseY, button) || isMouseOverElement(mouseX, mouseY); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { - double dx = dragX + lastDeltaX; - double dy = dragY + lastDeltaY; - dragX = (int) dx; - dragY = (int) dy; - lastDeltaX = dx - dragX; - lastDeltaY = dy - dragY; - if (isDragging) { - this.dragOffsetX += (int) dragX; - this.dragOffsetY += (int) dragY; - this.addSelfPosition((int) dragX, (int) dragY); - } - return super.mouseDragged(mouseX, mouseY, button, dragX, dragY) || isMouseOverElement(mouseX, mouseY); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseReleased(double mouseX, double mouseY, int button) { - this.lastDeltaX = 0; - this.lastDeltaY = 0; - this.isDragging = false; - return super.mouseReleased(mouseX, mouseY, button) || isMouseOverElement(mouseX, mouseY); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - return super.mouseWheelMove(mouseX, mouseY, wheelDelta) || isMouseOverElement(mouseX, mouseY); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseMoved(double mouseX, double mouseY) { - return super.mouseMoved(mouseX, mouseY) || isMouseOverElement(mouseX, mouseY); - } - } - - public class FloatingTab extends Tab { - - protected Runnable closeCallback = () -> {}; - - public FloatingTab(IFancyConfigurator configurator) { - super(configurator); - this.view.setBackground(GuiTextures.BACKGROUND); - } - - @Override - public void collapseTo(int x, int y) { - super.collapseTo(x, y); - ConfiguratorPanel.this.removeWidget(this); - closeCallback.run(); - } - - public void onClose(Runnable closeCallback) { - this.closeCallback = closeCallback; - } - } - - private static int getAnimationTime() { - return ConfigHolder.INSTANCE.client.ui.animationTime; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/FancyMachineUIWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/FancyMachineUIWidget.java deleted file mode 100644 index a9891226b20..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/FancyMachineUIWidget.java +++ /dev/null @@ -1,242 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.config.ConfigHolder; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.gui.widget.custom.PlayerInventoryWidget; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import lombok.Getter; -import lombok.Setter; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.List; -import java.util.stream.Stream; - -@Getter -public class FancyMachineUIWidget extends WidgetGroup { - - protected final TitleBarWidget titleBar; - protected final VerticalTabsWidget sideTabsWidget; - protected final WidgetGroup pageContainer; - protected final PageSwitcher pageSwitcher; - protected final ConfiguratorPanel configuratorPanel; - protected final TooltipsPanel tooltipsPanel; - - @Nullable - protected final PlayerInventoryWidget playerInventory; - @Setter - protected int border = 4; - - protected final IFancyUIProvider mainPage; - - /* - * Current Page: The page visible in the UI - * Current Home Page: The currently selected multiblock part's home page. - */ - protected IFancyUIProvider currentPage; - protected IFancyUIProvider currentHomePage; - - protected List allPages; - - protected Deque previousPages = new ArrayDeque<>(); - - protected record NavigationEntry(IFancyUIProvider page, IFancyUIProvider homePage, Runnable onNavigation) {} - - public FancyMachineUIWidget(IFancyUIProvider mainPage, int width, int height) { - super(0, 0, width, height); - this.mainPage = mainPage; - - addWidget(this.pageContainer = new WidgetGroup(0, 0, width, height)); - - if (mainPage.hasPlayerInventory()) { - addWidget(this.playerInventory = new PlayerInventoryWidget()); - this.playerInventory.setSelfPosition(new Position(2, height - 86)); - this.playerInventory.setBackground((IGuiTexture) null); - } else { - playerInventory = null; - } - - addWidget(this.titleBar = new TitleBarWidget(width, this::navigateBack, this::openPageSwitcher)); - addWidget(this.sideTabsWidget = new VerticalTabsWidget(this::navigate, -20, 0, 24, height)); - addWidget(this.tooltipsPanel = new TooltipsPanel()); - addWidget(this.configuratorPanel = new ConfiguratorPanel(-(24 + 2), height)); - this.pageSwitcher = new PageSwitcher(this::switchPage); - - setBackground(GuiTextures.BACKGROUND.copy() - .setColor(Long.decode(ConfigHolder.INSTANCE.client.ui.defaultUIColor).intValue() | 0xFF000000)); - } - - @Override - public void initWidget() { - super.initWidget(); - - if (this.playerInventory != null) { - this.playerInventory.setPlayer(gui.entityPlayer); - } - - this.allPages = Stream.concat(Stream.of(this.mainPage), this.mainPage.getSubTabs().stream()).toList(); - - performNavigation(this.mainPage, this.mainPage); - } - - //////////////////////////////////////// - // ********* NAVIGATION *********// - //////////////////////////////////////// - - protected void navigate(IFancyUIProvider newPage) { - navigate(newPage, this.currentHomePage); - } - - protected void navigate(IFancyUIProvider nextPage, IFancyUIProvider nextHomePage) { - if (nextPage != mainPage) { - if (!this.previousPages.isEmpty() && this.previousPages.peek().page == nextPage) { - // In case the user manually navigates back one step, just remove it from the navigation stack - this.previousPages.pop(); - } else if (this.currentPage != null) { - this.previousPages.push(new NavigationEntry(this.currentPage, this.currentHomePage, () -> {})); - } - } else { - this.previousPages.clear(); - } - - performNavigation(nextPage, nextHomePage); - } - - protected void navigateBack(ClickData clickData) { - NavigationEntry navigationEntry = previousPages.pop(); - - performNavigation(navigationEntry.page, navigationEntry.homePage); - navigationEntry.onNavigation.run(); - } - - protected void performNavigation(IFancyUIProvider nextPage, IFancyUIProvider nextHomePage) { - if (currentHomePage != nextHomePage) - setupSideTabs(nextHomePage); - - this.currentPage = nextPage; - this.currentHomePage = nextHomePage; - - if (currentPage != currentHomePage) { - // Ensure the home page's basic layout is applied before navigating to another page: - setupFancyUI(currentHomePage); - } - - setupFancyUI(nextPage, nextPage.hasPlayerInventory()); - } - - /////////////////////////////////////////////// - // *********** PAGE SWITCHER ***********// - /////////////////////////////////////////////// - - protected void openPageSwitcher(ClickData clickData) { - pageSwitcher.setPageList(allPages, currentHomePage); - - // If we're in another tab of the current page, ensure nav to its main tab when closing the page switcher: - if (currentPage != currentHomePage && !previousPages.isEmpty()) { - previousPages.pop(); - } - - this.sideTabsWidget.setVisible(false); - this.sideTabsWidget.setActive(false); - - this.previousPages.push(new NavigationEntry(currentHomePage, currentHomePage, () -> { - sideTabsWidget.setVisible(true); - sideTabsWidget.setActive(true); - })); - - this.currentPage = this.pageSwitcher; - this.currentHomePage = this.pageSwitcher; - - setupFancyUI(this.pageSwitcher); - } - - protected void switchPage(IFancyUIProvider nextHomePage) { - // Ensure that the back button always leads back to the main page: - this.currentHomePage = mainPage; - this.currentPage = mainPage; - this.previousPages.clear(); - - sideTabsWidget.setVisible(true); - sideTabsWidget.setActive(true); - - setupSideTabs(this.currentHomePage); - navigate(nextHomePage, nextHomePage); - } - - ////////////////////////////////////////////// - // *********** UI RENDERING ***********// - ////////////////////////////////////////////// - - protected void setupFancyUI(IFancyUIProvider fancyUI) { - this.setupFancyUI(fancyUI, fancyUI.hasPlayerInventory()); - } - - protected void setupFancyUI(IFancyUIProvider fancyUI, boolean showInventory) { - clearUI(); - - sideTabsWidget.selectTab(fancyUI); - titleBar.updateState( - fancyUI, - !this.previousPages.isEmpty(), - this.allPages.size() > 1 && this.currentPage != this.pageSwitcher); - - var page = fancyUI.createMainPage(this); - - // layout - var size = new Size(Math.max(172, page.getSize().width + border * 2), - Math.max(86, page.getSize().height + border * 2)); - setSize(new Size(size.width, - size.height + (!showInventory || playerInventory == null ? 0 : playerInventory.getSize().height))); - if (GTCEu.isClientSide() && getGui() != null) { - getGui().setSize(getSize().width, getSize().height); - } - this.sideTabsWidget.setSize(new Size(24, size.height)); - this.pageContainer.setSize(size); - this.tooltipsPanel.setSelfPosition(new Position(size.width + 2, 2)); - - setupInventoryPosition(showInventory, size); - - // setup - this.pageContainer.addWidget(page); - page.setSelfPosition(new Position( - (pageContainer.getSize().width - page.getSize().width) / 2, - (pageContainer.getSize().height - page.getSize().height) / 2)); - fancyUI.attachConfigurators(configuratorPanel); - configuratorPanel - .setSelfPosition(new Position(-24 - 2, getGui().getHeight() - configuratorPanel.getSize().height - 4)); - fancyUI.attachTooltips(tooltipsPanel); - - titleBar.setSize(new Size(this.getSize().width, titleBar.getSize().height)); - } - - private void setupInventoryPosition(boolean showInventory, Size parentSize) { - if (this.playerInventory == null) - return; - - this.playerInventory.setSelfPosition(new Position( - (parentSize.width - playerInventory.getSize().width) / 2, - parentSize.height)); - - this.playerInventory.setActive(showInventory); - this.playerInventory.setVisible(showInventory); - } - - protected void clearUI() { - this.pageContainer.clearAllWidgets(); - this.configuratorPanel.clear(); - this.tooltipsPanel.clear(); - } - - protected void setupSideTabs(IFancyUIProvider currentHomePage) { - this.sideTabsWidget.clearSubTabs(); - currentHomePage.attachSideTabs(sideTabsWidget); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfigurator.java deleted file mode 100644 index c60ff187844..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfigurator.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; - -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public interface IFancyConfigurator { - - Component getTitle(); - - IGuiTexture getIcon(); - - Widget createConfigurator(); - - default List getTooltips() { - return List.of(getTitle()); - } - - default void detectAndSendChange(BiConsumer> sender) {} - - default void readUpdateInfo(int id, FriendlyByteBuf buf) {} - - default void writeInitialData(FriendlyByteBuf buffer) {} - - default void readInitialData(FriendlyByteBuf buffer) {} -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfiguratorButton.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfiguratorButton.java deleted file mode 100644 index 0708b49eccc..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyConfiguratorButton.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; - -import lombok.Setter; -import lombok.experimental.Accessors; -import org.apache.commons.lang3.NotImplementedException; - -import java.util.Collections; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; -import java.util.function.Function; - -public interface IFancyConfiguratorButton extends IFancyConfigurator { - - void onClick(ClickData clickData); - - @Override - default Component getTitle() { - throw new NotImplementedException(); - } - - @Override - default Widget createConfigurator() { - throw new NotImplementedException(); - } - - @Accessors(chain = true) - class Toggle implements IFancyConfiguratorButton { - - IGuiTexture base; - IGuiTexture pressed; - BiConsumer onClick; - BooleanSupplier booleanSupplier; - boolean isPressed; - @Setter - Function> tooltipsSupplier = isPressed -> Collections.emptyList(); - - public Toggle(IGuiTexture base, IGuiTexture pressed, BooleanSupplier booleanSupplier, - BiConsumer onClick) { - this.base = base; - this.pressed = pressed; - this.booleanSupplier = booleanSupplier; - this.onClick = onClick; - } - - @Override - public List getTooltips() { - return tooltipsSupplier.apply(isPressed); - } - - @Override - public void detectAndSendChange(BiConsumer> sender) { - var newIsPressed = booleanSupplier.getAsBoolean(); - if (newIsPressed != isPressed) { - isPressed = newIsPressed; - sender.accept(0, buf -> buf.writeBoolean(isPressed)); - } - } - - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buf) { - if (id == 0) { - isPressed = buf.readBoolean(); - } - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - this.isPressed = booleanSupplier.getAsBoolean(); - buffer.writeBoolean(this.isPressed); - } - - @Override - public void readInitialData(FriendlyByteBuf buffer) { - this.isPressed = buffer.readBoolean(); - } - - @Override - public IGuiTexture getIcon() { - return isPressed ? pressed : base; - } - - @Override - public void onClick(ClickData clickData) { - onClick.accept(clickData, !isPressed); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomClientActionHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomClientActionHandler.java deleted file mode 100644 index f9b354cf1f9..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomClientActionHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import net.minecraft.network.FriendlyByteBuf; - -public interface IFancyCustomClientActionHandler { - - default void handleClientAction(int id, FriendlyByteBuf buffer) {} -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMiddleClickAction.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMiddleClickAction.java deleted file mode 100644 index 489f6e091f8..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMiddleClickAction.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import net.minecraft.network.FriendlyByteBuf; - -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public interface IFancyCustomMiddleClickAction extends IFancyCustomClientActionHandler { - - default void onMiddleClick(BiConsumer> writeClientAction) {} -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMouseWheelAction.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMouseWheelAction.java deleted file mode 100644 index fb5213912a9..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyCustomMouseWheelAction.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import net.minecraft.network.FriendlyByteBuf; - -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public interface IFancyCustomMouseWheelAction extends IFancyCustomClientActionHandler { - - default boolean mouseWheelMove(BiConsumer> writeClientAction, double mouseX, - double mouseY, double wheelDelta) { - return false; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyTooltip.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyTooltip.java deleted file mode 100644 index a0af005a9cf..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyTooltip.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; - -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.function.BooleanSupplier; -import java.util.function.Supplier; - -public interface IFancyTooltip { - - IGuiTexture getFancyTooltipIcon(); - - List getFancyTooltip(); - - default boolean showFancyTooltip() { - return true; - } - - @Nullable - default TooltipComponent getFancyComponent() { - return null; - } - - record Basic(Supplier icon, Supplier> content, BooleanSupplier predicate, - Supplier componentSupplier) - implements IFancyTooltip { - - @Override - public IGuiTexture getFancyTooltipIcon() { - return icon.get(); - } - - @Override - public List getFancyTooltip() { - return content.get(); - } - - @Override - public @Nullable TooltipComponent getFancyComponent() { - return componentSupplier.get(); - } - - @Override - public boolean showFancyTooltip() { - return predicate.getAsBoolean(); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyUIProvider.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyUIProvider.java deleted file mode 100644 index b5d878fcdc5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/IFancyUIProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; - -import org.jetbrains.annotations.Nullable; - -import java.util.Collections; -import java.util.List; - -public interface IFancyUIProvider { - - /** - * Create the main page ui. - */ - Widget createMainPage(FancyMachineUIWidget widget); - - /** - * Get the tab icon of this page. - */ - IGuiTexture getTabIcon(); - - /** - * Get the title of this page. - */ - Component getTitle(); - - /** - * Attach configurators to the left subtab list. - */ - default void attachSideTabs(TabsWidget configuratorPanel) {} - - /** - * Attach configurators to the left panel. - */ - default void attachConfigurators(ConfiguratorPanel configuratorPanel) {} - - /** - * Attach tooltips to the right panel - */ - default void attachTooltips(TooltipsPanel tooltipsPanel) {} - - default boolean hasPlayerInventory() { - return true; - } - - /** - * Get sub tabs, for example, multiblock will show all its parts tabs. - */ - default List getSubTabs() { - return Collections.emptyList(); - } - - /** - * Get tab's Tooltips - */ - default List getTabTooltips() { - return Collections.emptyList(); - } - - /** - * Get tab's Tooltips Component - */ - @Nullable - default TooltipComponent getTabTooltipComponent() { - return null; - } - - @Nullable - default PageGroupingData getPageGroupingData() { - return null; - } - - record PageGroupingData(@Nullable String groupKey, int groupPositionWeight) {} -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/PageSwitcher.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/PageSwitcher.java deleted file mode 100644 index 20c76d3945d..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/PageSwitcher.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.TextTexture; -import com.lowdragmc.lowdraglib.gui.widget.*; - -import net.minecraft.ChatFormatting; -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; - -import org.apache.commons.lang3.mutable.MutableInt; - -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.function.Consumer; -import java.util.stream.Collectors; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class PageSwitcher implements IFancyUIProvider { - - private final Consumer onPageSwitched; - - private List pages = List.of(); - private IFancyUIProvider currentPage = null; - - public PageSwitcher(Consumer onPageSwitched) { - this.onPageSwitched = onPageSwitched; - } - - public void setPageList(List allPages, IFancyUIProvider currentPage) { - this.pages = allPages; - this.currentPage = currentPage; - } - - @Override - public Widget createMainPage(FancyMachineUIWidget widget) { - var container = new WidgetGroup(0, 0, 176, 166); - - var scrollableGroup = new DraggableScrollableWidgetGroup(10, 10, 156, 146); - scrollableGroup.setYScrollBarWidth(8); - scrollableGroup.setYBarStyle(GuiTextures.SLIDER_BACKGROUND_VERTICAL, GuiTextures.BUTTON); - container.addWidget(scrollableGroup); - - var groupedPages = pages.stream().collect(Collectors.groupingBy( - page -> Objects.requireNonNullElse(page.getPageGroupingData(), new PageGroupingData(null, -1)))); - - final MutableInt currentY = new MutableInt(0); - groupedPages.keySet().stream() - .sorted(Comparator.comparingInt(PageGroupingData::groupPositionWeight)) - .forEachOrdered(group -> { - if (group.groupKey() != null) { - scrollableGroup.addWidget( - new LabelWidget(0, currentY.getAndAdd(12), group.groupKey()).setDropShadow(false)); - } - - final var currentPage = new MutableInt(0); - currentY.subtract(30); // To account for adding it back on the first page inside this group - - groupedPages.get(group).forEach(page -> { - var index = currentPage.getAndIncrement(); - var y = currentY.addAndGet(index % 5 == 0 ? 30 : 0); // Jump to the next row every 5 parts - - var pageWidget = new WidgetGroup((index % 5) * 30, y, 25, 25); - pageWidget.addWidget(new ButtonWidget(0, 0, 25, 25, GuiTextures.BACKGROUND, - clickData -> onPageSwitched.accept(page))); - pageWidget.addWidget(new ImageWidget(4, 4, 17, 17, page.getTabIcon())); - // For some reason, this doesn't work in any other way: - pageWidget.widgets.get(0).setHoverTooltips(page.getTitle().getString()); - scrollableGroup.addWidget(pageWidget); - }); - - if (!groupedPages.get(group).isEmpty()) { - currentY.add(30); - } - }); - - return container; - } - - @Override - public IGuiTexture getTabIcon() { - return new TextTexture("+").setDropShadow(false).setColor(ChatFormatting.BLACK.getColor()); - } - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.title_bar.page_switcher"); - } - - @Override - public boolean hasPlayerInventory() { - return false; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TabsWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TabsWidget.java deleted file mode 100644 index e30d94a8280..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TabsWidget.java +++ /dev/null @@ -1,261 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; - -import com.lowdragmc.lowdraglib.gui.editor.Icons; -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.util.Mth; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import lombok.Getter; -import lombok.Setter; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -@Getter -public class TabsWidget extends Widget { - - protected final Consumer onTabClick; - protected IFancyUIProvider mainTab; - protected List subTabs; - @Nullable - protected IFancyUIProvider selectedTab; - @Setter - protected IGuiTexture leftButtonTexture = new GuiTextureGroup(GuiTextures.BUTTON, Icons.LEFT.copy().scale(0.7f)), - leftButtonHoverTexture = new GuiTextureGroup(GuiTextures.BUTTON, - Icons.LEFT.copy().setColor(0xffaaaaaa).scale(0.7f)); - @Setter - protected IGuiTexture rightButtonTexture = new GuiTextureGroup(GuiTextures.BUTTON, Icons.RIGHT.copy().scale(0.7f)), - rightButtonHoverTexture = new GuiTextureGroup(GuiTextures.BUTTON, - Icons.RIGHT.copy().setColor(0xffaaaaaa).scale(0.7f)); - @Setter - protected IGuiTexture tabTexture = new ResourceTexture("gtceu:textures/gui/tab/tabs_top.png").getSubTexture(1 / 3f, - 0, 1 / 3f, 0.5f); - @Setter - protected IGuiTexture tabHoverTexture = new ResourceTexture("gtceu:textures/gui/tab/tabs_top.png") - .getSubTexture(1 / 3f, 0.5f, 1 / 3f, 0.5f); - @Setter - protected IGuiTexture tabPressedTexture = tabHoverTexture; - @Getter - protected int offset; - /** - * (old tab, new tab) - */ - @Setter - @Nullable - protected BiConsumer onTabSwitch; - - public TabsWidget(Consumer onTabClick) { - this(onTabClick, 0, -20, 200, 24); - } - - public TabsWidget(Consumer onTabClick, int x, int y, int width, int height) { - super(x, y, width, height); - this.subTabs = new ArrayList<>(); - this.onTabClick = onTabClick; - } - - public void setMainTab(IFancyUIProvider mainTab) { - this.mainTab = mainTab; - if (this.selectedTab == null) { - this.selectedTab = this.mainTab; - } - } - - public void clearSubTabs() { - subTabs.clear(); - } - - public void attachSubTab(IFancyUIProvider subTab) { - subTabs.add(subTab); - } - - public boolean hasButton() { - return (subTabs.size() + 1) * 24 + 16 > getSize().width; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - super.handleClientAction(id, buffer); - if (id == 0) { - var index = buffer.readVarInt(); - var old = selectedTab; - if (index < 0) { - selectedTab = mainTab; - } else if (index < subTabs.size()) { - selectedTab = subTabs.get(index); - } else { - return; - } - if (onTabSwitch != null) { - onTabSwitch.accept(old, selectedTab); - } - onTabClick.accept(selectedTab); - } - } - - public int getSubTabsWidth() { - return getSize().width - 8 - 24 - 4 - 16 - 8 - 16; - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (isMouseOverElement(mouseX, mouseY)) { - var hoveredTab = getHoveredTab(mouseX, mouseY); - // click tab - if (hoveredTab != null && hoveredTab != selectedTab) { - if (onTabSwitch != null) { - onTabSwitch.accept(selectedTab, hoveredTab); - } - selectedTab = hoveredTab; - writeClientAction(0, - buf -> buf.writeVarInt(selectedTab == mainTab ? -1 : subTabs.indexOf(selectedTab))); - onTabClick.accept(selectedTab); - playButtonClickSound(); - } - // click button - if (hasButton()) { - if (isHoverLeftButton(mouseX, mouseY)) { - offset = Mth.clamp(offset - 24, 0, subTabs.size() * 24 - getSubTabsWidth()); - playButtonClickSound(); - } else if (isHoverRightButton(mouseX, mouseY)) { - offset = Mth.clamp(offset + 24, 0, subTabs.size() * 24 - getSubTabsWidth()); - playButtonClickSound(); - } - } - } - return super.mouseClicked(mouseX, mouseY, button); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - var sx = getPosition().x + 8 + 24 + 4 + 16; - if (isMouseOver(sx, getPosition().y, getSubTabsWidth(), 24, mouseX, mouseY)) { - offset = Mth.clamp(offset + 5 * (wheelDelta > 0 ? -1 : 1), 0, subTabs.size() * 24 - getSubTabsWidth()); - } - return super.mouseWheelMove(mouseX, mouseY, wheelDelta); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - var position = getPosition(); - var size = getSize(); - var hoveredTab = getHoveredTab(mouseX, mouseY); - // main tab - drawTab(mainTab, graphics, mouseX, mouseY, position.x + 8, position.y, 24, 24, hoveredTab); - // render sub tabs - if (hasButton()) { // need a scrollable bar - // render buttons - if (isHoverLeftButton(mouseX, mouseY)) { - leftButtonHoverTexture.draw(graphics, mouseX, mouseY, position.x + 8 + 24 + 4, position.y, 16, 24); - } else { - leftButtonTexture.draw(graphics, mouseX, mouseY, position.x + 8 + 24 + 4, position.y, 16, 24); - } - if (isHoverRightButton(mouseX, mouseY)) { - rightButtonHoverTexture.draw(graphics, mouseX, mouseY, position.x + size.width - 8 - 16, position.y, 16, - 24); - } else { - rightButtonTexture.draw(graphics, mouseX, mouseY, position.x + size.width - 8 - 16, position.y, 16, 24); - } - // render sub tabs - var sx = position.x + 8 + 24 + 4 + 16; - graphics.enableScissor(sx, position.y - 1, sx + getSubTabsWidth(), position.y - 1 + 24 + 2); - for (int i = 0; i < subTabs.size(); i++) { - drawTab(subTabs.get(i), graphics, mouseX, mouseY, sx + i * 24 - offset, position.y, 24, 24, hoveredTab); - } - graphics.disableScissor(); - } else { - for (int i = subTabs.size() - 1; i >= 0; i--) { - drawTab(subTabs.get(i), graphics, mouseX, mouseY, - position.x + size.width - 8 - 24 * (subTabs.size() - i), position.y, 24, 24, hoveredTab); - } - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - var hoveredTab = getHoveredTab(mouseX, mouseY); - if (hoveredTab != null && gui != null && gui.getModularUIGui() != null) { - gui.getModularUIGui().setHoverTooltip(hoveredTab.getTabTooltips(), ItemStack.EMPTY, null, - hoveredTab.getTabTooltipComponent()); - } - super.drawInForeground(graphics, mouseX, mouseY, partialTicks); - } - - @OnlyIn(Dist.CLIENT) - public boolean isHoverLeftButton(double mouseX, double mouseY) { - return isMouseOver(getPosition().x + 8 + 24 + 4, getPosition().y, 16, 24, mouseX, mouseY); - } - - @OnlyIn(Dist.CLIENT) - public boolean isHoverRightButton(double mouseX, double mouseY) { - return isMouseOver(getPosition().x + getSize().width - 8 - 16, getPosition().y, 16, 24, mouseX, mouseY); - } - - @OnlyIn(Dist.CLIENT) - @Nullable - public IFancyUIProvider getHoveredTab(double mouseX, double mouseY) { - if (isMouseOverElement(mouseX, mouseY)) { - var position = getPosition(); - var size = getSize(); - // main tab - if (isMouseOver(position.x + 8, position.y, 24, 24, mouseX, mouseY)) { - return mainTab; - } - // others - if (hasButton()) { // need a scrollable bar - var sx = position.x + 8 + 24 + 4 + 16; - if (isMouseOver(sx, position.y, getSubTabsWidth(), 24, mouseX, mouseY)) { - var i = ((int) mouseX - sx + getOffset()) / 24; - if (i < subTabs.size()) { - return subTabs.get(i); - } - } - } else { - int i = (position.x + size.width - 8 - (int) mouseX) / 24; - if (i < subTabs.size()) { - return subTabs.get(subTabs.size() - 1 - i); - } - } - } - return null; - } - - @OnlyIn(Dist.CLIENT) - public void drawTab(IFancyUIProvider tab, @NotNull GuiGraphics graphics, int mouseX, int mouseY, int x, int y, - int width, int height, IFancyUIProvider hoveredTab) { - // render background - if (tab == selectedTab) { - tabPressedTexture.draw(graphics, mouseX, mouseY, x, y, width, height); - } else if (tab == hoveredTab) { - tabHoverTexture.draw(graphics, mouseX, mouseY, x, y, width, height); - } else { - tabTexture.draw(graphics, mouseX, mouseY, x, y, width, height); - } - // render icon - tab.getTabIcon().draw(graphics, mouseX, mouseY, x + (width - 16) / 2f, y + (height - 16) / 2f, 16, 16); - } - - public void selectTab(IFancyUIProvider selectedTab) { - this.selectedTab = selectedTab; - this.detectAndSendChanges(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TitleBarWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TitleBarWidget.java deleted file mode 100644 index b40d56fc467..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TitleBarWidget.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.TextTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.ChatFormatting; -import net.minecraft.MethodsReturnNonnullByDefault; - -import java.util.function.Consumer; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class TitleBarWidget extends WidgetGroup { - - private static final int BORDER_WIDTH = 3; - private static final int HORIZONTAL_MARGIN = 8; - private static final int HEIGHT = 16; - private static final int BTN_WIDTH = 18; - - private static final float ROLL_SPEED = 0.7f; - - private int width; - private boolean showBackButton = false; - private boolean showMenuButton = false; - private final int innerHeight; - - /** - * The button group is rendered behind the main section and contains the back and menu buttons. - *

- * For easier texture reuse, the background is applied to the group itself, instead of the individual buttons.
- * The button group therefore needs to be rendered behind the main section. - */ - private final WidgetGroup buttonGroup; - private final Widget backButton; - private final Widget menuButton; - - /** - * The main section contains the current tab's icon and title text - */ - private final WidgetGroup mainSection; - private final ImageWidget tabIcon; - private final ImageWidget tabTitle; - private TextTexture titleText; - - public TitleBarWidget(int parentWidth, Consumer onBackClicked, Consumer onMenuClicked) { - super(HORIZONTAL_MARGIN, -HEIGHT, parentWidth, HEIGHT); - this.innerHeight = HEIGHT - BORDER_WIDTH; - this.width = parentWidth - (2 * HORIZONTAL_MARGIN); - - addWidget(this.buttonGroup = new WidgetGroup(0, BORDER_WIDTH, width, innerHeight)); - buttonGroup.setBackground(GuiTextures.TITLE_BAR_BACKGROUND); - buttonGroup.addWidget(this.backButton = new ButtonWidget(0, BORDER_WIDTH, BTN_WIDTH, HEIGHT - BORDER_WIDTH, - new TextTexture(" <").setDropShadow(false).setColor(ChatFormatting.BLACK.getColor()), onBackClicked) - .setHoverTooltips("gtceu.gui.title_bar.back")); - buttonGroup.addWidget(this.menuButton = new ButtonWidget(width - BTN_WIDTH, BORDER_WIDTH, BTN_WIDTH, - HEIGHT - BORDER_WIDTH, - new TextTexture("+").setDropShadow(false).setColor(ChatFormatting.BLACK.getColor()), onMenuClicked) - .setHoverTooltips("gtceu.gui.title_bar.page_switcher")); - - addWidget(this.mainSection = new WidgetGroup(BTN_WIDTH, 0, width, HEIGHT)); - mainSection.setBackground(GuiTextures.TITLE_BAR_BACKGROUND); - mainSection.addWidget(this.tabIcon = new ImageWidget( - BORDER_WIDTH + 1, BORDER_WIDTH + 1, - innerHeight - 2, innerHeight - 2, - IGuiTexture.EMPTY)); - mainSection.addWidget(this.tabTitle = new ImageWidget( - BORDER_WIDTH + innerHeight, BORDER_WIDTH, 0, 0, IGuiTexture.EMPTY)); - } - - public void updateState(IFancyUIProvider currentPage, boolean showBackButton, boolean showMenuButton) { - this.showBackButton = showBackButton; - this.showMenuButton = showMenuButton; - - titleText = new TextTexture(ChatFormatting.BLACK.toString() + currentPage.getTitle().copy().getString()) - .setDropShadow(false) - .setType(TextTexture.TextType.ROLL); - titleText.setRollSpeed(ROLL_SPEED); - - tabIcon.setImage(currentPage.getTabIcon()); - tabTitle.setImage(titleText); - - backButton.setVisible(showBackButton); - backButton.setActive(showBackButton); - - menuButton.setVisible(showMenuButton); - menuButton.setActive(showMenuButton); - - onSizeUpdate(); - } - - @Override - protected void onSizeUpdate() { - this.width = getSize().getWidth() - (2 * HORIZONTAL_MARGIN); - - var hiddenButtons = 2; - if (showBackButton) hiddenButtons--; - if (showMenuButton) hiddenButtons--; - - int buttonGroupWidth = this.width - (BTN_WIDTH * hiddenButtons); - buttonGroup.setSize(new Size(buttonGroupWidth, innerHeight)); - buttonGroup.setSelfPosition(new Position(showBackButton ? 0 : BTN_WIDTH, BORDER_WIDTH)); - menuButton.setSelfPosition(new Position(buttonGroupWidth - BTN_WIDTH, BORDER_WIDTH)); - - int mainSectionWidth = this.width - (BTN_WIDTH * 2); - int titleWidth = mainSectionWidth - (2 * BORDER_WIDTH) - innerHeight; - mainSection.setSize(new Size(mainSectionWidth, HEIGHT)); - titleText.setWidth(titleWidth); - tabTitle.setSize(new Size(titleWidth, HEIGHT - BORDER_WIDTH)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TooltipsPanel.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TooltipsPanel.java deleted file mode 100644 index 5e5e01d7975..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TooltipsPanel.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import lombok.Getter; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class TooltipsPanel extends Widget { - - @Getter - protected List tooltips = new ArrayList<>(); - - public TooltipsPanel() { - super(202, 2, 20, 0); - } - - public void clear() { - tooltips.clear(); - } - - public void attachTooltips(IFancyTooltip... tooltips) { - this.tooltips.addAll(Arrays.asList(tooltips)); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - var position = getPosition(); - var size = getSize(); - int offsetY = 0; - for (IFancyTooltip tooltip : this.tooltips) { - if (tooltip.showFancyTooltip()) { - // draw icon - tooltip.getFancyTooltipIcon().draw(graphics, mouseX, mouseY, position.x, position.y + offsetY, - size.width, size.width); - offsetY += size.getWidth() + 2; - } - } - setSize(new Size(getSize().width, Math.max(0, offsetY))); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - if (getHoverElement(mouseX, mouseY) == this && gui != null && gui.getModularUIGui() != null) { - var position = getPosition(); - var size = getSize(); - int offsetY = 0; - for (IFancyTooltip tooltip : this.tooltips) { - if (tooltip.showFancyTooltip()) { - if (isMouseOver(position.x, position.y + offsetY, size.width, size.width, mouseX, mouseY)) { - gui.getModularUIGui().setHoverTooltip(tooltip.getFancyTooltip(), ItemStack.EMPTY, null, - tooltip.getFancyComponent()); - return; - } - offsetY += size.getWidth() + 2; - } - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/VerticalTabsWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/VerticalTabsWidget.java deleted file mode 100644 index 0fe2fc77f5f..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/fancy/VerticalTabsWidget.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.fancy; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; - -public class VerticalTabsWidget extends TabsWidget { - - public VerticalTabsWidget(Consumer onTabClick, int x, int y, int width, int height) { - super(onTabClick, x, y, width, height); - ResourceTexture tabsLeft = new ResourceTexture("gtceu:textures/gui/tab/tabs_left.png"); - setTabTexture(tabsLeft.getSubTexture(0, 1 / 3f, 0.5f, 1 / 3f)); - setTabHoverTexture(tabsLeft.getSubTexture(0.5f, 1 / 3f, 0.5f, 1 / 3f)); - setTabPressedTexture(tabsLeft.getSubTexture(0.5f, 1 / 3f, 0.5f, 1 / 3f)); - } - - @Override - public boolean hasButton() { - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - drawBackgroundTexture(graphics, mouseX, mouseY); - var position = getPosition(); - var size = getSize(); - var hoveredTab = getHoveredTab(mouseX, mouseY); - // main tab - drawTab(mainTab, graphics, mouseX, mouseY, position.x, position.y + 8, 24, 24, hoveredTab); - for (int i = 0; i < subTabs.size(); ++i) { - drawTab(subTabs.get(i), graphics, mouseX, mouseY, position.x, position.y + 8 + 24 * (i + 1), 24, 24, - hoveredTab); - } - } - - @OnlyIn(Dist.CLIENT) - @Nullable - public IFancyUIProvider getHoveredTab(double mouseX, double mouseY) { - if (isMouseOverElement(mouseX, mouseY)) { - var position = getPosition(); - var size = getSize(); - // main tab - if (isMouseOver(position.x, position.y + 8, 24, 24, mouseX, mouseY)) { - return mainTab; - } - // others - int i = ((int) mouseY - position.y - 24 - 8) / 24; - if (i >= 0 && i < subTabs.size()) { - return subTabs.get(i); - } - } - return null; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostFluidTarget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostFluidTarget.java deleted file mode 100644 index 3324b34e811..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostFluidTarget.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.misc; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.gui.ingredient.IGhostIngredientTarget; -import com.lowdragmc.lowdraglib.gui.ingredient.Target; - -import net.minecraft.client.renderer.Rect2i; -import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.Lists; -import dev.emi.emi.api.stack.EmiStack; -import org.jetbrains.annotations.NotNull; - -import java.util.Collections; -import java.util.List; - -import static com.gregtechceu.gtceu.api.gui.widget.PhantomFluidWidget.drainFrom; - -public interface IGhostFluidTarget extends IGhostIngredientTarget { - - @OnlyIn(Dist.CLIENT) - Rect2i getRectangleBox(); - - @OnlyIn(Dist.CLIENT) - void acceptFluid(FluidStack fluidStack); - - @OnlyIn(Dist.CLIENT) - @Override - default List getPhantomTargets(Object ingredient) { - ingredient = convertIngredient(ingredient); - if (!(ingredient instanceof FluidStack) && drainFrom(ingredient) == null) { - return Collections.emptyList(); - } else { - final Rect2i rectangle = getRectangleBox(); - return Lists.newArrayList(new Target[] { new Target() { - - @NotNull - public Rect2i getArea() { - return rectangle; - } - - public void accept(@NotNull Object ingredient) { - ingredient = convertIngredient(ingredient); - - FluidStack ingredientStack; - if (ingredient instanceof FluidStack fluidStack) { - ingredientStack = fluidStack; - } else { - ingredientStack = drainFrom(ingredient); - } - - if (ingredientStack != null) { - acceptFluid(ingredientStack); - } - } - } }); - } - } - - default Object convertIngredient(Object ingredient) { - if (GTCEu.Mods.isREILoaded() && ingredient instanceof dev.architectury.fluid.FluidStack fluidStack) { - ingredient = new FluidStack(fluidStack.getFluid(), (int) fluidStack.getAmount(), fluidStack.getTag()); - } - - if (GTCEu.Mods.isEMILoaded() && ingredient instanceof EmiStack fluidEmiStack) { - Fluid fluid = fluidEmiStack.getKeyOfType(Fluid.class); - ingredient = fluid == null ? FluidStack.EMPTY : - new FluidStack(fluid, (int) fluidEmiStack.getAmount(), fluidEmiStack.getNbt()); - } - - if (GTCEu.Mods.isJEILoaded() && ingredient instanceof net.minecraftforge.fluids.FluidStack fluidStack) { - ingredient = new FluidStack(fluidStack.getFluid(), fluidStack.getAmount(), fluidStack.getTag()); - } - return ingredient; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostItemTarget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostItemTarget.java deleted file mode 100644 index e26f1e30520..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/IGhostItemTarget.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.misc; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.gui.ingredient.IGhostIngredientTarget; -import com.lowdragmc.lowdraglib.gui.ingredient.Target; - -import net.minecraft.client.renderer.Rect2i; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import com.google.common.collect.Lists; -import dev.emi.emi.api.stack.EmiStack; -import mezz.jei.api.ingredients.ITypedIngredient; -import org.jetbrains.annotations.NotNull; - -import java.util.Collections; -import java.util.List; - -public interface IGhostItemTarget extends IGhostIngredientTarget { - - @OnlyIn(Dist.CLIENT) - Rect2i getRectangleBox(); - - @OnlyIn(Dist.CLIENT) - void acceptItem(ItemStack itemStack); - - @OnlyIn(Dist.CLIENT) - @Override - default List getPhantomTargets(Object ingredient) { - if (!(convertIngredient(ingredient) instanceof ItemStack)) { - return Collections.emptyList(); - } else { - final Rect2i rectangle = getRectangleBox(); - return Lists.newArrayList(new Target[] { new Target() { - - @NotNull - public Rect2i getArea() { - return rectangle; - } - - public void accept(@NotNull Object ingredient) { - ingredient = convertIngredient(ingredient); - - if (ingredient instanceof ItemStack stack) { - acceptItem(stack); - } - } - } }); - } - } - - default Object convertIngredient(Object ingredient) { - if (GTCEu.Mods.isEMILoaded() && ingredient instanceof EmiStack itemEmiStack) { - Item item = itemEmiStack.getKeyOfType(Item.class); - ItemStack itemStack = item == null ? ItemStack.EMPTY : new ItemStack(item, (int) itemEmiStack.getAmount()); - if (!itemStack.isEmpty()) { - itemStack.setTag(itemEmiStack.getNbt()); - } - ingredient = itemStack; - } - - if (GTCEu.Mods.isJEILoaded() && ingredient instanceof ITypedIngredient itemJeiStack) { - return itemJeiStack.getItemStack().orElse(ItemStack.EMPTY); - } - return ingredient; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/util/TimedProgressSupplier.java b/src/main/java/com/gregtechceu/gtceu/api/gui/util/TimedProgressSupplier.java deleted file mode 100644 index e958d11e59d..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/util/TimedProgressSupplier.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.util; - -import java.util.function.DoubleSupplier; - -public class TimedProgressSupplier implements DoubleSupplier { - - private final int msPerCycle; - private final int maxValue; - private final boolean countDown; - private long startTime; - - public TimedProgressSupplier(int ticksPerCycle, int maxValue, boolean countDown) { - this.msPerCycle = ticksPerCycle * 50; - this.maxValue = maxValue; - this.countDown = countDown; - this.startTime = System.currentTimeMillis(); - } - - public void resetCountdown() { - startTime = System.currentTimeMillis(); - } - - @Override - public double getAsDouble() { - return calculateTime(); - } - - private double calculateTime() { - long currentTime = System.currentTimeMillis(); - long msPassed = (currentTime - startTime) % msPerCycle; - double currentValue = (1.0 * msPassed * maxValue) / msPerCycle; - if (countDown) { - return (maxValue - currentValue) / maxValue; - } - return currentValue / maxValue; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/BlockableSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/BlockableSlotWidget.java deleted file mode 100644 index a4a2732243b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/BlockableSlotWidget.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.Container; -import net.minecraftforge.items.IItemHandlerModifiable; - -import com.mojang.blaze3d.systems.RenderSystem; -import org.jetbrains.annotations.NotNull; - -import java.util.function.BooleanSupplier; - -/** Basically just your normal SlotWidget, but can render the slot as "grayed-out" with a Supplier value. */ -public class BlockableSlotWidget extends SlotWidget { - - private static final int OVERLAY_COLOR = 0x80404040; - - private BooleanSupplier isBlocked = () -> false; - - public BlockableSlotWidget(Container inventory, int slotIndex, int xPosition, int yPosition, boolean canTakeItems, - boolean canPutItems) { - super(inventory, slotIndex, xPosition, yPosition, canTakeItems, canPutItems); - } - - public BlockableSlotWidget(IItemHandlerModifiable itemHandler, int slotIndex, int xPosition, int yPosition, - boolean canTakeItems, boolean canPutItems) { - super(itemHandler, slotIndex, xPosition, yPosition, canTakeItems, - canPutItems); - } - - public BlockableSlotWidget(IItemHandlerModifiable itemHandler, int slotIndex, int xPosition, int yPosition) { - super(itemHandler, slotIndex, xPosition, yPosition); - } - - public BlockableSlotWidget(Container inventory, int slotIndex, int xPosition, int yPosition) { - super(inventory, slotIndex, xPosition, yPosition); - } - - public BlockableSlotWidget setIsBlocked(BooleanSupplier isBlocked) { - this.isBlocked = isBlocked; - return this; - } - - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - if (isBlocked.getAsBoolean()) { - Position pos = getPosition(); - Size size = getSize(); - RenderSystem.disableDepthTest(); - RenderSystem.colorMask(true, true, true, false); - graphics.fill(pos.getX() + 1, pos.getY() + 1, pos.getX() + 1 + size.getWidth() - 2, - pos.getY() + 1 + size.getHeight() - 2, OVERLAY_COLOR); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableDepthTest(); - RenderSystem.enableBlend(); - } - } - - @Override - public boolean isMouseOverElement(double mouseX, double mouseY) { - // prevent slot removal and hover highlighting when slot is blocked - return super.isMouseOverElement(mouseX, mouseY) && !isBlocked.getAsBoolean(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ColorBlockWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ColorBlockWidget.java deleted file mode 100644 index 5e7bbf3e412..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ColorBlockWidget.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.lowdragmc.lowdraglib.gui.util.DrawerHelper; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; - -import java.util.function.IntSupplier; - -@Setter -@Accessors(chain = true) -public class ColorBlockWidget extends Widget { - - private IntSupplier colorSupplier; - @Getter - private int currentColor; - private static boolean isShowAlpha = false; - - public ColorBlockWidget(int x, int y, int width, int height) { - super(x, y, width, height); - this.currentColor = 0xFFFFFFFF; - } - - @Override - public void updateScreen() { - super.updateScreen(); - if (isClientSideWidget && colorSupplier != null) { - currentColor = colorSupplier.getAsInt(); - } - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (isMouseOverElement(mouseX, mouseY)) { - playButtonClickSound(); - isShowAlpha = !isShowAlpha; - return true; - } - return super.mouseClicked(mouseX, mouseY, button); - } - - @OnlyIn(Dist.CLIENT) - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - int x = getPosition().x + 1; - int y = getPosition().y + 1; - int width = getSize().width - 2; - int height = getSize().height - 2; - - if (colorSupplier != null) { - currentColor = colorSupplier.getAsInt(); - } - final int BORDER_COLOR = 0xFF000000; - int opaqueColor = isShowAlpha ? currentColor : currentColor | 0xFF000000; - graphics.fill(x, y, x + width, y + height, opaqueColor); - DrawerHelper.drawBorder(graphics, x, y, width, height, BORDER_COLOR, 1); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ConfirmTextInputWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ConfirmTextInputWidget.java deleted file mode 100644 index 9a77e5e26c1..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ConfirmTextInputWidget.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.TextFieldWidget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; -import java.util.function.Function; - -@Accessors(chain = true) -public class ConfirmTextInputWidget extends WidgetGroup { - - private final Consumer textResponder; - @Nullable - private final Function returnValidator; - private Function validator = (s) -> s; - @Getter(AccessLevel.PRIVATE) - @Setter(AccessLevel.PRIVATE) - private String inputText = ""; - @Setter - private String tooltip = ""; - - public ConfirmTextInputWidget(int x, int y, int width, int height, String text, - Consumer textResponder, - @Nullable Function validator, - @Nullable Function returnValidator) { - super(x, y, width, height); - this.textResponder = textResponder; - this.returnValidator = returnValidator; - if (validator != null) { - this.validator = validator; - } - if (text != null) { - this.inputText = text; - } - } - - @Override - public void initWidget() { - super.initWidget(); - this.addWidget(new ButtonWidget( - getSizeWidth() - getSizeHeight(), - 0, - getSizeHeight(), - getSizeHeight(), - pressed -> { - if (returnValidator != null) { - inputText = returnValidator.apply(inputText); - } - textResponder.accept(inputText); - }) - .setButtonTexture( - new GuiTextureGroup(GuiTextures.VANILLA_BUTTON, GuiTextures.BUTTON_CHECK))); - this.addWidget(new TextFieldWidget( - 1, - 1, - getSizeWidth() - getSizeHeight() - 4, - getSizeHeight() - 2, - this::getInputText, - this::setInputText) - .setValidator(validator) - .setHoverTooltips(tooltip)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/CoverConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/CoverConfigurator.java deleted file mode 100644 index a2197e6d1ff..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/CoverConfigurator.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.cover.CoverBehavior; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.common.data.GTItems; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.Position; - -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; - -import lombok.AllArgsConstructor; -import org.jetbrains.annotations.Nullable; - -@AllArgsConstructor -public class CoverConfigurator implements IFancyConfigurator { - - protected final ICoverable coverable; - // runtime - @Nullable - protected final Direction side; - @Nullable - protected final CoverBehavior coverBehavior; - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.cover_setting.title"); - } - - @Override - public IGuiTexture getIcon() { - return new ItemStackTexture(GTItems.ITEM_FILTER.get()); - } - - @Override - public Widget createConfigurator() { - return new WidgetGroup(new Position(0, 0)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/EnumSelectorWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/EnumSelectorWidget.java deleted file mode 100644 index 86d8c1bb2e5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/EnumSelectorWidget.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.data.lang.LangHandler; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.CycleButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; - -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.function.BiFunction; -import java.util.function.Consumer; - -import javax.annotation.ParametersAreNonnullByDefault; - -/** - * A widget for selecting a value from an enum or a subset of its values. - */ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class EnumSelectorWidget & EnumSelectorWidget.SelectableEnum> extends WidgetGroup { - - public interface SelectableEnum { - - String getTooltip(); - - IGuiTexture getIcon(); - } - - public final CycleButtonWidget buttonWidget; - - public final List values; - public final Consumer onChanged; - - public int selected = 0; - - private BiFunction textureSupplier = (value, texture) -> new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, texture); - - private BiFunction> tooltipSupplier = (value, key) -> List - .copyOf(LangHandler.getSingleOrMultiLang(key)); - - public EnumSelectorWidget(int xPosition, int yPosition, int width, int height, T[] values, T initialValue, - Consumer onChanged) { - this(xPosition, yPosition, width, height, Arrays.asList(values), initialValue, onChanged); - } - - public EnumSelectorWidget(int xPosition, int yPosition, int width, int height, List values, T initialValue, - Consumer onChanged) { - super(xPosition, yPosition, width, height); - - this.values = values; - this.onChanged = onChanged; - - this.buttonWidget = new CycleButtonWidget(0, 0, width, height, values.size(), this::getTexture, - this::onSelected); - this.addWidget(buttonWidget); - - setSelected(initialValue); - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - super.writeInitialData(buffer); - buffer.writeInt(selected); - } - - @Override - public void readInitialData(FriendlyByteBuf buffer) { - super.readInitialData(buffer); - onSelected(buffer.readInt()); - } - - public T getCurrentValue() { - return values.get(selected); - } - - public IGuiTexture getTexture(int selected) { - var selectedValue = values.get(selected); - return textureSupplier.apply(selectedValue, selectedValue.getIcon()); - } - - private void onSelected(int selected) { - T selectedValue = values.get(selected); - setSelected(selectedValue); - } - - public EnumSelectorWidget setTextureSupplier(BiFunction textureSupplier) { - this.textureSupplier = textureSupplier; - - T selectedValue = getCurrentValue(); - buttonWidget.setBackground(textureSupplier.apply(selectedValue, selectedValue.getIcon())); - - return this; - } - - public EnumSelectorWidget setTooltipSupplier(BiFunction> tooltipSupplier) { - this.tooltipSupplier = tooltipSupplier; - - return this; - } - - public void setSelected(@NotNull T value) { - var selectedIndex = values.indexOf(value); - - if (selectedIndex == -1) - throw new NoSuchElementException(value + " is not a possible value for this selector."); - - this.selected = selectedIndex; - this.buttonWidget.setIndex(selectedIndex); - - updateTooltip(); - - onChanged.accept(value); - } - - private void updateTooltip() { - if (!GTCEu.isClientThread()) - return; - - T selectedValue = getCurrentValue(); - buttonWidget.setHoverTooltips(tooltipSupplier.apply(selectedValue, selectedValue.getTooltip())); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ExtendedProgressWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ExtendedProgressWidget.java deleted file mode 100644 index 80bbda0ad43..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ExtendedProgressWidget.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; - -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.DoubleSupplier; - -@Accessors(chain = true) -public class ExtendedProgressWidget extends ProgressWidget { - - private List serverTooltips = new ArrayList<>(); - @Setter - private Consumer> serverTooltipSupplier; - - public ExtendedProgressWidget() { - super(JEIProgress, 0, 0, 40, 40, new ProgressTexture()); - } - - public ExtendedProgressWidget(DoubleSupplier progressSupplier, int x, int y, int width, int height, - ResourceTexture fullImage) { - super(progressSupplier, x, y, width, height, fullImage); - } - - public ExtendedProgressWidget(DoubleSupplier progressSupplier, int x, int y, int width, int height, - ProgressTexture progressBar) { - super(progressSupplier, x, y, width, height, progressBar); - } - - public ExtendedProgressWidget(DoubleSupplier progressSupplier, int x, int y, int width, int height) { - super(progressSupplier, x, y, width, height); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - if (serverTooltipSupplier != null) { - List textBuffer = new ArrayList<>(); - serverTooltipSupplier.accept(textBuffer); - if (!serverTooltips.equals(textBuffer)) { - this.serverTooltips = textBuffer; - writeUpdateInfo(1, buffer -> { - buffer.writeVarInt(serverTooltips.size()); - for (Component component : serverTooltips) { - buffer.writeComponent(component); - } - }); - } - } - } - - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - if (id == 1) { - this.serverTooltips.clear(); - int count = buffer.readVarInt(); - for (int i = 0; i < count; i++) { - Component component = buffer.readComponent(); - this.serverTooltips.add(component); - } - } else { - super.readUpdateInfo(id, buffer); - } - } - - @Override - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - if ((!tooltipTexts.isEmpty() || !serverTooltips.isEmpty()) && isMouseOverElement(mouseX, mouseY) && - getHoverElement(mouseX, mouseY) == this && gui != null && gui.getModularUIGui() != null) { - var tips = new ArrayList<>(tooltipTexts); - tips.addAll(serverTooltips); - gui.getModularUIGui().setHoverTooltip(tips, ItemStack.EMPTY, null, null); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java deleted file mode 100644 index 26a37530d1c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java +++ /dev/null @@ -1,203 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; -import com.gregtechceu.gtceu.config.ConfigHolder; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandlerModifiable; - -import lombok.Getter; -import org.jetbrains.annotations.Nullable; - -/** - * Used for setting a "ghost" IC for a machine - */ -public class GhostCircuitSlotWidget extends SlotWidget { - - private static final int SET_TO_ZERO = 1; - private static final int SET_TO_EMPTY = 2; - private static final int SET_TO_N = 3; - - private static final int NO_CONFIG = -1; - - @Getter - private IItemHandlerModifiable circuitInventory; - @Nullable - private Widget configurator; - - public GhostCircuitSlotWidget() { - super(); - } - - public void setCircuitInventory(IItemHandlerModifiable circuitInventory) { - this.circuitInventory = circuitInventory; - setHandlerSlot(circuitInventory, 0); - } - - public boolean isConfiguratorOpen() { - return configurator != null; - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (isMouseOverElement(mouseX, mouseY) && gui != null) { - if (button == 0 && Screen.hasShiftDown()) { - // open popup on shift-left-click - if (!isConfiguratorOpen()) { - this.gui.widget(configurator = createConfigurator()); - } else { - this.gui.mainGroup.removeWidget(configurator); - configurator = null; - } - } else if (button == 0) { - // increment on left-click - int newValue = getNextValue(true); - setCircuitValue(newValue); - } else if (button == 1 && Screen.hasShiftDown()) { - // clear on shift-right-click - this.circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - writeClientAction(SET_TO_EMPTY, buf -> {}); - } else if (button == 1) { - // decrement on right-click - int newValue = getNextValue(false); - setCircuitValue(newValue); - } - return true; - } - return false; - } - - private int getNextValue(boolean increment) { - int currentValue = IntCircuitBehaviour.getCircuitConfiguration(this.circuitInventory.getStackInSlot(0)); - if (increment) { - // if at max, loop around to no circuit - if (currentValue == IntCircuitBehaviour.CIRCUIT_MAX) { - return 0; - } - // if at no circuit, skip 0 and return 1 - if (this.circuitInventory.getStackInSlot(0).isEmpty()) { - return 1; - } - // normal case: increment by 1 - return currentValue + 1; - } else { - // if at no circuit, loop around to max - if (this.circuitInventory.getStackInSlot(0).isEmpty()) { - return IntCircuitBehaviour.CIRCUIT_MAX; - } - // if at 1, skip 0 and return no circuit - if (currentValue == 1) { - return NO_CONFIG; - } - // normal case: decrement by 1 - return currentValue - 1; - } - } - - @Override - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - if (isConfiguratorOpen()) return true; - if (isMouseOverElement(mouseX, mouseY) && gui != null) { - int newValue = getNextValue(wheelDelta >= 0); - setCircuitValue(newValue); - return true; - } - return false; - } - - @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { - return false; - } - - @Override - public boolean canMergeSlot(ItemStack stack) { - return false; - } - - public void setCircuitValue(int newValue) { - if (newValue == NO_CONFIG) { - this.circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - writeClientAction(SET_TO_EMPTY, buf -> {}); - } else { - this.circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(newValue)); - writeClientAction(SET_TO_N, buf -> buf.writeVarInt(newValue)); - } - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - switch (id) { - case SET_TO_ZERO -> this.circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(0)); - case SET_TO_EMPTY -> this.circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - case SET_TO_N -> this.circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(buffer.readVarInt())); - } - } - - public Widget createConfigurator() { - var group = new WidgetGroup(0, 0, 174, 132); - group.addWidget(new LabelWidget(9, 8, "Programmed Circuit Configuration")); - group.addWidget(new SlotWidget(this.circuitInventory, 0, (group.getSize().width - 18) / 2, 20, - !ConfigHolder.INSTANCE.machines.ghostCircuit, !ConfigHolder.INSTANCE.machines.ghostCircuit) - .setBackground(new GuiTextureGroup(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY))); - if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - group.addWidget(new ButtonWidget((group.getSize().width - 18) / 2, 20, 18, 18, IGuiTexture.EMPTY, - clickData -> { - if (!clickData.isRemote) { - circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - } - })); - } - int idx = 0; - for (int x = 0; x <= 2; x++) { - for (int y = 0; y <= 8; y++) { - int finalIdx = idx; - group.addWidget(new ButtonWidget(5 + (18 * y), 48 + (18 * x), 18, 18, - new GuiTextureGroup(GuiTextures.SLOT, - new ItemStackTexture(IntCircuitBehaviour.stack(finalIdx)).scale(16f / 18)), - clickData -> { - if (!clickData.isRemote) { - ItemStack stack = circuitInventory.getStackInSlot(0).copy(); - if (IntCircuitBehaviour.isIntegratedCircuit(stack)) { - IntCircuitBehaviour.setCircuitConfiguration(stack, finalIdx); - circuitInventory.setStackInSlot(0, stack); - } else if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(finalIdx)); - } - } - })); - idx++; - } - } - for (int x = 0; x <= 5; x++) { - int finalIdx = x + 27; - group.addWidget(new ButtonWidget(5 + (18 * x), 102, 18, 18, - new GuiTextureGroup(GuiTextures.SLOT, - new ItemStackTexture(IntCircuitBehaviour.stack(finalIdx)).scale(16f / 18)), - clickData -> { - if (!clickData.isRemote) { - ItemStack stack = circuitInventory.getStackInSlot(0).copy(); - if (IntCircuitBehaviour.isIntegratedCircuit(stack)) { - IntCircuitBehaviour.setCircuitConfiguration(stack, finalIdx); - circuitInventory.setStackInSlot(0, stack); - } else if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(finalIdx)); - } - } - })); - } - group.setBackground(GuiTextures.BACKGROUND); - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/LongInputWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/LongInputWidget.java deleted file mode 100644 index e7a761a2775..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/LongInputWidget.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.utils.GTMath; - -import com.lowdragmc.lowdraglib.gui.widget.TextFieldWidget; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import java.util.function.Consumer; -import java.util.function.Supplier; - -/** - * A widget containing an integer input field, as well as adjacent buttons for increasing or decreasing the value. - * - *

- * The buttons' change amount can be altered with Ctrl, Shift, or both.
- * The input is limited by a minimum and maximum value. - *

- */ -public class LongInputWidget extends NumberInputWidget { - - public LongInputWidget(Supplier valueSupplier, Consumer onChanged) { - super(valueSupplier, onChanged); - } - - public LongInputWidget(Position position, Supplier valueSupplier, Consumer onChanged) { - super(position, valueSupplier, onChanged); - } - - public LongInputWidget(Position position, Size size, Supplier valueSupplier, Consumer onChanged) { - super(position, size, valueSupplier, onChanged); - } - - public LongInputWidget(int x, int y, int width, int height, Supplier valueSupplier, - Consumer onChanged) { - super(x, y, width, height, valueSupplier, onChanged); - } - - @Override - protected Long defaultMin() { - return 0L; - } - - @Override - protected Long defaultMax() { - return Long.MAX_VALUE; - } - - @Override - protected String toText(Long value) { - return String.valueOf(value); - } - - @Override - protected Long fromText(String value) { - return Long.parseLong(value); - } - - @Override - protected ChangeValues getChangeValues() { - return new ChangeValues<>(1L, 8L, 64L, 512L); - } - - @Override - protected Long add(Long a, Long b) { - return a + b; - } - - @Override - protected Long multiply(Long a, Long b) { - return a * b; - } - - @Override - protected Long clamp(Long value, Long min, Long max) { - return GTMath.clamp(value, min, max); - } - - @Override - protected void setTextFieldRange(TextFieldWidget textField, Long min, Long max) { - textField.setNumbersOnly(min, max); - } - - @Override - protected Long getOne(boolean positive) { - return positive ? 1L : -1L; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java index 087670b518f..883d2450bbb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PatternPreviewWidget.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.MultiblockShapeInfo; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; @@ -20,7 +21,6 @@ import com.lowdragmc.lowdraglib.gui.texture.TextTexture; import com.lowdragmc.lowdraglib.gui.widget.*; import com.lowdragmc.lowdraglib.jei.IngredientIO; -import com.lowdragmc.lowdraglib.utils.BlockInfo; import com.lowdragmc.lowdraglib.utils.BlockPosFace; import com.lowdragmc.lowdraglib.utils.ItemStackKey; import com.lowdragmc.lowdraglib.utils.TrackedDummyWorld; @@ -395,7 +395,7 @@ private MBPattern initializePattern(MultiblockShapeInfo shapeInfo, HashSet validator = stack -> true; - - public PhantomSlotWidget() { - super(); - } - - public PhantomSlotWidget(IItemHandlerModifiable itemHandler, int slotIndex, int xPosition, int yPosition) { - super(itemHandler, slotIndex, xPosition, yPosition, true, true); - } - - public PhantomSlotWidget(IItemHandlerModifiable itemHandler, int slotIndex, int xPosition, int yPosition, - Predicate validator) { - super(itemHandler, slotIndex, xPosition, yPosition, true, true); - this.validator = validator; - } - - public PhantomSlotWidget setClearSlotOnRightClick(boolean clearSlotOnRightClick) { - this.clearSlotOnRightClick = clearSlotOnRightClick; - return this; - } - - @ConfigSetter(field = "canTakeItems") - public PhantomSlotWidget setCanTakeItems(boolean v) { - // you cant modify it - return this; - } - - @ConfigSetter(field = "canPutItems") - public PhantomSlotWidget setCanPutItems(boolean v) { - // you cant modify it - return this; - } - - public PhantomSlotWidget setMaxStackSize(int stackSize) { - maxStackSize = stackSize; - return this; - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (slotReference != null && isMouseOverElement(mouseX, mouseY) && gui != null) { - if (isClientSideWidget && !gui.getModularUIContainer().getCarried().isEmpty()) { - slotReference.set(gui.getModularUIContainer().getCarried()); - } else if (button == 1 && clearSlotOnRightClick && !slotReference.getItem().isEmpty()) { - slotReference.set(ItemStack.EMPTY); - writeClientAction(2, buf -> {}); - } else { - HOVER_SLOT = slotReference; - gui.getModularUIGui().superMouseClicked(mouseX, mouseY, button); - HOVER_SLOT = null; - } - return true; - } - return false; - } - - @Override - public ItemStack slotClick(int dragType, ClickType clickTypeIn, Player player) { - if (slotReference != null && gui != null) { - ItemStack stackHeld = gui.getModularUIContainer().getCarried(); - return slotClickPhantom(slotReference, dragType, clickTypeIn, stackHeld); - } - return ItemStack.EMPTY; - } - - @Override - public boolean canMergeSlot(ItemStack stack) { - return false; - } - - @Override - public boolean canTakeStack(Player player) { - return false; - } - - @Override - public boolean canPutStack(ItemStack stack) { - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public List getPhantomTargets(Object ingredient) { - if (GTCEu.Mods.isEMILoaded() && ingredient instanceof EmiStack emiStack) { - Item item = emiStack.getKeyOfType(Item.class); - if (item != null) { - ingredient = new ItemStack(item, (int) emiStack.getAmount()); - ((ItemStack) ingredient).setTag(emiStack.getNbt()); - } - } else if (GTCEu.Mods.isJEILoaded() && ingredient instanceof ITypedIngredient jeiStack) { - ingredient = jeiStack.getItemStack().orElse(null); - } - if (!(ingredient instanceof ItemStack)) { - return Collections.emptyList(); - } - - Rect2i rectangle = toRectangleBox(); - return Lists.newArrayList(new Target() { - - @Nonnull - @Override - public Rect2i getArea() { - return rectangle; - } - - @Override - public void accept(@Nonnull Object ingredient) { - if (GTCEu.Mods.isEMILoaded() && ingredient instanceof EmiStack emiStack) { - Item item = emiStack.getKeyOfType(Item.class); - if (item != null) { - ingredient = new ItemStack(item, (int) emiStack.getAmount()); - ((ItemStack) ingredient).setTag(emiStack.getNbt()); - } - } else if (GTCEu.Mods.isJEILoaded() && ingredient instanceof ITypedIngredient jeiStack) { - ingredient = jeiStack.getItemStack().orElse(null); - } - if (slotReference != null && ingredient instanceof ItemStack stack) { - long id = Minecraft.getInstance().getWindow().getWindow(); - boolean shiftDown = InputConstants.isKeyDown(id, GLFW.GLFW_KEY_LEFT_SHIFT); - ClickType clickType = shiftDown ? ClickType.QUICK_MOVE : ClickType.PICKUP; - slotClickPhantom(slotReference, 0, clickType, stack); - writeClientAction(1, buffer -> { - buffer.writeItem(stack); - buffer.writeVarInt(0); - buffer.writeBoolean(shiftDown); - }); - } - } - }); - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - if (slotReference != null && id == 1) { - ItemStack stackHeld = buffer.readItem(); - int mouseButton = buffer.readVarInt(); - boolean shiftKeyDown = buffer.readBoolean(); - ClickType clickType = shiftKeyDown ? ClickType.QUICK_MOVE : ClickType.PICKUP; - slotClickPhantom(slotReference, mouseButton, clickType, stackHeld); - } else if (slotReference != null && id == 2) { - slotReference.set(ItemStack.EMPTY); - } - } - - public ItemStack slotClickPhantom(Slot slot, int mouseButton, ClickType clickTypeIn, ItemStack stackHeld) { - ItemStack stack = ItemStack.EMPTY; - - ItemStack stackSlot = slot.getItem(); - if (!stackSlot.isEmpty()) { - stack = stackSlot.copy(); - } - - if (mouseButton == 2) { - fillPhantomSlot(slot, ItemStack.EMPTY, mouseButton); - } else if (mouseButton == 0 || mouseButton == 1) { - - if (stackSlot.isEmpty()) { - if (!stackHeld.isEmpty()) { - fillPhantomSlot(slot, stackHeld, mouseButton); - } - } else if (stackHeld.isEmpty()) { - adjustPhantomSlot(slot, mouseButton, clickTypeIn); - } else { - if (!areItemsEqual(stackSlot, stackHeld)) { - adjustPhantomSlot(slot, mouseButton, clickTypeIn); - } - fillPhantomSlot(slot, stackHeld, mouseButton); - } - } else if (mouseButton == 5) { - if (!slot.hasItem()) { - fillPhantomSlot(slot, stackHeld, mouseButton); - } - } - return stack; - } - - private void adjustPhantomSlot(Slot slot, int mouseButton, ClickType clickTypeIn) { - ItemStack stackSlot = slot.getItem(); - int stackSize; - if (clickTypeIn == ClickType.QUICK_MOVE) { - stackSize = mouseButton == 0 ? (stackSlot.getCount() + 1) / 2 : stackSlot.getCount() * 2; - } else { - stackSize = mouseButton == 0 ? stackSlot.getCount() - 1 : stackSlot.getCount() + 1; - } - - if (stackSize > slot.getMaxStackSize()) { - stackSize = slot.getMaxStackSize(); - } - - stackSlot.setCount(Math.min(maxStackSize, stackSize)); - - slot.set(stackSlot); - } - - private void fillPhantomSlot(Slot slot, ItemStack stackHeld, int mouseButton) { - if (stackHeld.isEmpty()) { - slot.set(ItemStack.EMPTY); - return; - } - - int stackSize = mouseButton == 0 ? stackHeld.getCount() : 1; - if (stackSize > slot.getMaxStackSize()) { - stackSize = slot.getMaxStackSize(); - } - ItemStack phantomStack = stackHeld.copy(); - phantomStack.setCount(Math.min(maxStackSize, stackSize)); - if (validator.test(phantomStack)) slot.set(phantomStack); - } - - public boolean areItemsEqual(ItemStack itemStack1, ItemStack itemStack2) { - return ItemStack.matches(itemStack1, itemStack2); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PredicatedImageWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PredicatedImageWidget.java deleted file mode 100644 index be26db6e526..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/PredicatedImageWidget.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; - -import java.util.function.BooleanSupplier; - -@Accessors(chain = true) -public class PredicatedImageWidget extends ImageWidget { - - @Setter - private BooleanSupplier predicate; - private boolean isVisible = true; - - public PredicatedImageWidget(int xPosition, int yPosition, int width, int height, IGuiTexture area) { - super(xPosition, yPosition, width, height, area); - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - super.writeInitialData(buffer); - isVisible = predicate == null || predicate.getAsBoolean(); - buffer.writeBoolean(isVisible); - } - - @Override - public void readInitialData(FriendlyByteBuf buffer) { - super.readInitialData(buffer); - isVisible = buffer.readBoolean(); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - if (predicate != null) { - if (isVisible != predicate.getAsBoolean()) { - isVisible = !isVisible; - writeUpdateInfo(1, buf -> buf.writeBoolean(isVisible)); - } - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - if (id == 1) { - isVisible = buffer.readBoolean(); - } else { - super.readUpdateInfo(id, buffer); - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - if (isVisible) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ScrollablePhantomFluidWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ScrollablePhantomFluidWidget.java deleted file mode 100644 index 93f621d2aaa..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ScrollablePhantomFluidWidget.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.utils.GTUtil; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; -import java.util.function.Supplier; - -public class ScrollablePhantomFluidWidget extends PhantomFluidWidget { - - private static final int SCROLL_ACTION_ID = 0x0001_0001; - - public ScrollablePhantomFluidWidget(@Nullable IFluidHandlerModifiable fluidTank, int tank, int x, int y, int width, - int height, Supplier phantomFluidGetter, - Consumer phantomFluidSetter) { - super(fluidTank, tank, x, y, width, height, phantomFluidGetter, phantomFluidSetter); - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - if (!isMouseOverElement(mouseX, mouseY)) - return false; - - var delta = getModifiedChangeAmount((wheelDelta > 0) ? 1 : -1); - writeClientAction(SCROLL_ACTION_ID, buf -> buf.writeInt(delta)); - - return true; - } - - private int getModifiedChangeAmount(int amount) { - if (GTUtil.isShiftDown()) - amount *= 10; - - if (GTUtil.isCtrlDown()) - amount *= 100; - - if (!GTUtil.isAltDown()) - amount *= 1000; - - return amount; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - switch (id) { - case SCROLL_ACTION_ID -> handleScrollAction(buffer.readInt()); - default -> super.handleClientAction(id, buffer); - } - - detectAndSendChanges(); - } - - private void handleScrollAction(int delta) { - IFluidHandlerModifiable fluidTank = (IFluidHandlerModifiable) getFluidTank(); - if (fluidTank == null) - return; - - FluidStack fluid = fluidTank.getFluidInTank(tank); - if (fluid.isEmpty()) - return; - - if (fluid.isEmpty()) - return; - - fluid.setAmount(Math.min(Math.max(fluid.getAmount() + delta, 0), fluidTank.getTankCapacity(tank))); - if (fluid.getAmount() <= 0L) { - fluidTank.setFluidInTank(tank, FluidStack.EMPTY); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ToggleButtonWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ToggleButtonWidget.java deleted file mode 100644 index 716725601e1..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ToggleButtonWidget.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.data.lang.LangHandler; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.SwitchWidget; - -import it.unimi.dsi.fastutil.booleans.BooleanConsumer; - -import java.util.List; -import java.util.function.BooleanSupplier; - -public class ToggleButtonWidget extends SwitchWidget { - - private final IGuiTexture texture; - private String tooltipText; - private boolean isMultiLang; - - public ToggleButtonWidget(int xPosition, int yPosition, int width, int height, BooleanSupplier isPressedCondition, - BooleanConsumer setPressedExecutor) { - this(xPosition, yPosition, width, height, GuiTextures.VANILLA_BUTTON, isPressedCondition, setPressedExecutor); - } - - public ToggleButtonWidget(int xPosition, int yPosition, int width, int height, IGuiTexture buttonTexture, - BooleanSupplier isPressedCondition, BooleanConsumer setPressedExecutor) { - super(xPosition, yPosition, width, height, null); - texture = buttonTexture; - if (buttonTexture instanceof ResourceTexture resourceTexture) { - setTexture(resourceTexture.getSubTexture(0, 0, 1, 0.5), resourceTexture.getSubTexture(0, 0.5, 1, 0.5)); - } else { - setTexture(buttonTexture, buttonTexture); - } - - setSupplier(isPressedCondition::getAsBoolean); - setOnPressCallback((cd, bool) -> { - setPressedExecutor.accept(bool.booleanValue()); - this.updateHoverTooltips(); - }); - } - - public ToggleButtonWidget setShouldUseBaseBackground() { - if (texture != null) { - setTexture( - new GuiTextureGroup(GuiTextures.TOGGLE_BUTTON_BACK.getSubTexture(0, 0, 1, 0.5), texture), - new GuiTextureGroup(GuiTextures.TOGGLE_BUTTON_BACK.getSubTexture(0, 0.5, 1, 0.5), texture)); - } - return this; - } - - public ToggleButtonWidget setTooltipText(String tooltipText) { - this.tooltipText = tooltipText; - updateHoverTooltips(); - return this; - } - - public ToggleButtonWidget isMultiLang() { - isMultiLang = true; - updateHoverTooltips(); - return this; - } - - protected void updateHoverTooltips() { - if (tooltipText != null) { - if (!isMultiLang) { - setHoverTooltips(tooltipText + (isPressed ? ".enabled" : ".disabled")); - } else { - setHoverTooltips( - List.copyOf(LangHandler.getMultiLang(tooltipText + (isPressed ? ".enabled" : ".disabled")))); - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java deleted file mode 100644 index cf281d96a37..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/CombinedDirectionalConfigurator.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget.directional; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.utils.GTUtil; - -import com.lowdragmc.lowdraglib.client.scene.ISceneBlockRenderHook; -import com.lowdragmc.lowdraglib.client.scene.WorldSceneRenderer; -import com.lowdragmc.lowdraglib.gui.editor.ColorPattern; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.SceneWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.BlockPosFace; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class CombinedDirectionalConfigurator extends WidgetGroup { - - protected final static int MOUSE_CLICK_CLIENT_ACTION_ID = 0x0001_0001; - protected final static int UPDATE_UI_ID = 0x0001_0002; - - protected final IDirectionalConfigHandler[] configHandlers; - protected final int width, height; - private final FancyMachineUIWidget machineUI; - private final MetaMachine machine; - - protected SceneWidget sceneWidget; - protected ImageWidget imageWidget; - - protected @Nullable BlockPos selectedPos; - protected @Nullable Direction selectedSide; - - public CombinedDirectionalConfigurator(FancyMachineUIWidget machineUI, IDirectionalConfigHandler[] configHandlers, - MetaMachine machine, int width, int height) { - super(0, 0, width, height); - this.width = width; - this.height = height; - - this.machineUI = machineUI; - this.configHandlers = configHandlers; - this.machine = machine; - } - - @Override - public void initWidget() { - super.initWidget(); - - addWidget(imageWidget = new ImageWidget(0, 0, width, height, GuiTextures.BACKGROUND_INVERSE)); - addWidget(sceneWidget = createSceneWidget()); - - for (IDirectionalConfigHandler configHandler : configHandlers) { - configHandler.addAdditionalUIElements(this); - } - - addConfigWidgets(sceneWidget); - } - - private SceneWidget createSceneWidget() { - var pos = this.machine.getBlockPos(); - - SceneWidget sceneWidget = new SceneWidget(4, 4, width - 8, height - 8, this.machine.getLevel()) - .setRenderedCore(List.of(pos), null) - .setRenderSelect(false) - .setOnSelected(this::onSideSelected); - - if (isRemote()) { - sceneWidget.getRenderer().addRenderedBlocks( - List.of(pos.above(), pos.below(), pos.north(), pos.south(), pos.east(), pos.west()), - new ISceneBlockRenderHook() { - - @Override - @OnlyIn(Dist.CLIENT) - public void apply(boolean isTESR, RenderType layer) { - RenderSystem.enableBlend(); - RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); - } - }); - - sceneWidget.getRenderer().setAfterWorldRender(this::renderOverlays); - - var playerRotation = gui.entityPlayer.getRotationVector(); - sceneWidget.setCameraYawAndPitch(playerRotation.x, playerRotation.y - 90); - } - sceneWidget.setBackground(ColorPattern.BLACK.rectTexture()); - return sceneWidget; - } - - private void renderOverlays(WorldSceneRenderer renderer) { - sceneWidget.renderBlockOverLay(renderer); - - for (Direction face : GTUtil.DIRECTIONS) { - for (IDirectionalConfigHandler configHandler : configHandlers) { - configHandler.renderOverlay(sceneWidget, new BlockPosFace(machine.getBlockPos(), face)); - } - } - } - - private void addConfigWidgets(SceneWidget sceneWidget) { - int yOffsetLeft = 0, yOffsetRight = 0; - - for (IDirectionalConfigHandler configHandler : configHandlers) { - Widget widget = configHandler.getSideSelectorWidget(sceneWidget, machineUI); - - if (widget == null) - continue; - - final Size widgetSize = widget.getSize(); - switch (configHandler.getScreenSide()) { - case LEFT -> { - widget.setSelfPosition(new Position(6, height - 6 - widgetSize.height - yOffsetLeft)); - yOffsetLeft += widgetSize.height + 3; - } - case RIGHT -> { - widget.setSelfPosition( - new Position(width - widgetSize.width - 6, height - 6 - widgetSize.height - yOffsetRight)); - yOffsetRight += widgetSize.height + 3; - } - } - - this.addWidget(widget); - } - } - - protected void onSideSelected(BlockPos pos, Direction side) { - if (!pos.equals(machine.getBlockPos())) - return; - - if (this.selectedSide == side) - return; // No need to do anything if the same side is already selected - - this.selectedSide = side; - - for (IDirectionalConfigHandler configWidget : this.configHandlers) { - configWidget.onSideSelected(pos, side); - } - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean mouseClicked(double mouseX, double mouseY, int button) { - var lastSide = this.selectedSide; - - var result = super.mouseClicked(mouseX, mouseY, button); - - if (isMouseOverElement(mouseX, mouseY) && this.selectedSide == lastSide && this.selectedSide != null) { - var hover = sceneWidget.getHoverPosFace(); - - if (hover != null && hover.pos.equals(machine.getBlockPos()) && hover.facing == this.selectedSide) { - var cd = new ClickData(); - writeClientAction(MOUSE_CLICK_CLIENT_ACTION_ID, buf -> { - cd.writeToBuf(buf); - buf.writeByte(this.selectedSide.ordinal()); - }); - } - } - - return result; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buf) { - if (id != MOUSE_CLICK_CLIENT_ACTION_ID) { - super.handleClientAction(id, buf); - return; - } - - var clickData = ClickData.readFromBuf(buf); - var side = GTUtil.DIRECTIONS[buf.readByte()]; - - for (IDirectionalConfigHandler configHandler : configHandlers) { - configHandler.handleClick(clickData, side); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/IDirectionalConfigHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/IDirectionalConfigHandler.java deleted file mode 100644 index 024b4465873..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/IDirectionalConfigHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget.directional; - -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; - -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.SceneWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.BlockPosFace; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public interface IDirectionalConfigHandler { - - /** - * Returns the buttons to display inside the side selector - */ - Widget getSideSelectorWidget(SceneWidget scene, FancyMachineUIWidget machineUI); - - /** - * Called whenever a side is selected in the side selector GUI - */ - void onSideSelected(BlockPos pos, Direction side); - - /** - * Determines which side of the screen the UI element should be placed on. - */ - ScreenSide getScreenSide(); - - enum ScreenSide { - LEFT, - RIGHT, - } - - default void handleClick(ClickData cd, Direction direction) { - // Do nothing by default - } - - @OnlyIn(Dist.CLIENT) - default void renderOverlay(SceneWidget sceneWidget, BlockPosFace blockPosFace) { - // Do nothing by default - } - - default void addAdditionalUIElements(WidgetGroup parent) { - // Do nothing by default - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputFluidConfigHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputFluidConfigHandler.java deleted file mode 100644 index 2803528e134..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputFluidConfigHandler.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget.directional.handlers; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.api.gui.widget.directional.IDirectionalConfigHandler; -import com.gregtechceu.gtceu.api.machine.trait.AutoOutputTrait; -import com.gregtechceu.gtceu.data.lang.LangHandler; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.*; -import com.lowdragmc.lowdraglib.utils.BlockPosFace; -import com.lowdragmc.lowdraglib.utils.Position; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import com.mojang.blaze3d.vertex.PoseStack; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class AutoOutputFluidConfigHandler implements IDirectionalConfigHandler { - - private static final IGuiTexture TEXTURE_OFF = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_FLUID_MODES_BUTTON.getSubTexture(0, 0, 1, 1 / 3f)); - private static final IGuiTexture TEXTURE_OUTPUT = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_FLUID_MODES_BUTTON.getSubTexture(0, 1 / 3f, 1, 1 / 3f)); - private static final IGuiTexture TEXTURE_AUTO = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_FLUID_MODES_BUTTON.getSubTexture(0, 2 / 3f, 1, 1 / 3f)); - - private final AutoOutputTrait trait; - private Direction side; - private ButtonWidget ioModeButton; - - public AutoOutputFluidConfigHandler(AutoOutputTrait trait) { - this.trait = trait; - } - - @Override - public Widget getSideSelectorWidget(SceneWidget scene, FancyMachineUIWidget machineUI) { - WidgetGroup group = new WidgetGroup(0, 0, (18 * 2) + 1, 18); - - group.addWidget(ioModeButton = new ButtonWidget(0, 0, 18, 18, this::onIOModePressed) { - - @Override - public void updateScreen() { - super.updateScreen(); - if (side == null) { - setButtonTexture(TEXTURE_OFF); - setHoverTooltips(LangHandler.getMultiLang("gtceu.gui.fluid_auto_output.unselected") - .toArray(Component[]::new)); - } else if (trait.getFluidOutputDirection() == side) { - if (trait.isAutoOutputFluids()) { - setButtonTexture(TEXTURE_AUTO); - setHoverTooltips("gtceu.gui.fluid_auto_output.enabled"); - } else { - setButtonTexture(TEXTURE_OUTPUT); - setHoverTooltips("gtceu.gui.fluid_auto_output.disabled"); - } - } else { - setButtonTexture(TEXTURE_OFF); - setHoverTooltips(LangHandler.getMultiLang("gtceu.gui.fluid_auto_output.other_direction") - .toArray(Component[]::new)); - } - } - }); - - group.addWidget(new ToggleButtonWidget( - 19, 0, 18, 18, GuiTextures.BUTTON_FLUID_OUTPUT, - trait::allowsFluidInputFromOutputSide, trait::setAllowFluidInputFromOutputSide) - .setShouldUseBaseBackground().setTooltipText("gtceu.gui.fluid_auto_output.allow_input")); - - return group; - } - - private void onIOModePressed(ClickData cd) { - if (this.side == null) - return; - - if (trait.getFluidOutputDirection() == this.side) { - trait.setAllowAutoOutputFluids(!trait.isAutoOutputFluids()); - } else { - trait.setAllowAutoOutputFluids(false); - trait.setFluidOutputDirection(this.side); - } - } - - @Override - public void onSideSelected(BlockPos pos, Direction side) { - this.side = side; - } - - @Override - public ScreenSide getScreenSide() { - return ScreenSide.LEFT; - } - - @Override - public void handleClick(ClickData cd, Direction direction) { - if (!canHandleClick(cd) || !trait.supportsAutoOutputFluids()) - return; - - if (trait.getFluidOutputDirection() != side) { - trait.setFluidOutputDirection(side); - trait.setAllowAutoOutputFluids(false); - } else { - trait.setAllowAutoOutputFluids(!trait.isAutoOutputFluids()); - } - } - - @SuppressWarnings("RedundantIfStatement") // Cleaner code this way - private boolean canHandleClick(ClickData cd) { - if (cd.button == 1) - return true; - - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public void renderOverlay(SceneWidget sceneWidget, BlockPosFace blockPosFace) { - if (trait.getFluidOutputDirection() != blockPosFace.facing) - return; - - sceneWidget.drawFacingBorder(new PoseStack(), blockPosFace, - trait.isAutoOutputFluids() ? 0xff00b4ff : 0x8f00b4ff, 2); - } - - @Override - public void addAdditionalUIElements(WidgetGroup parent) { - LabelWidget text = new LabelWidget(4, 4, "gtceu.gui.auto_output.name") { - - @Override - public boolean isVisible() { - return trait.isAutoOutputFluids() && trait.getFluidOutputDirection() != null; - } - }; - - text.setSelfPosition(new Position(parent.getSize().width - 4 - text.getSize().width, 4)); - - text.setTextColor(0xff00b4ff).setDropShadow(false); - parent.addWidget(text); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputItemConfigHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputItemConfigHandler.java deleted file mode 100644 index d8a1d7911a6..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/AutoOutputItemConfigHandler.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget.directional.handlers; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.api.gui.widget.directional.IDirectionalConfigHandler; -import com.gregtechceu.gtceu.api.machine.trait.AutoOutputTrait; -import com.gregtechceu.gtceu.data.lang.LangHandler; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.*; -import com.lowdragmc.lowdraglib.utils.BlockPosFace; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import com.mojang.blaze3d.vertex.PoseStack; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class AutoOutputItemConfigHandler implements IDirectionalConfigHandler { - - private static final IGuiTexture TEXTURE_OFF = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_ITEM_MODES_BUTTON.getSubTexture(0, 0, 1, 1 / 3f)); - private static final IGuiTexture TEXTURE_OUTPUT = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_ITEM_MODES_BUTTON.getSubTexture(0, 1 / 3f, 1, 1 / 3f)); - private static final IGuiTexture TEXTURE_AUTO = new GuiTextureGroup( - GuiTextures.VANILLA_BUTTON, - GuiTextures.IO_CONFIG_ITEM_MODES_BUTTON.getSubTexture(0, 2 / 3f, 1, 1 / 3f)); - - private final AutoOutputTrait trait; - private Direction side; - private ButtonWidget ioModeButton; - - public AutoOutputItemConfigHandler(AutoOutputTrait trait) { - this.trait = trait; - } - - @Override - public Widget getSideSelectorWidget(SceneWidget scene, FancyMachineUIWidget machineUI) { - WidgetGroup group = new WidgetGroup(0, 0, (18 * 2) + 1, 18); - - group.addWidget(ioModeButton = new ButtonWidget(0, 0, 18, 18, this::onIOModePressed) { - - @Override - public void updateScreen() { - super.updateScreen(); - - if (side == null) { - setButtonTexture(TEXTURE_OFF); - setHoverTooltips(LangHandler.getMultiLang("gtceu.gui.item_auto_output.unselected") - .toArray(Component[]::new)); - } else if (trait.getItemOutputDirection() == side) { - if (trait.isAutoOutputItems()) { - setButtonTexture(TEXTURE_AUTO); - setHoverTooltips("gtceu.gui.item_auto_output.enabled"); - } else { - setButtonTexture(TEXTURE_OUTPUT); - setHoverTooltips("gtceu.gui.item_auto_output.disabled"); - } - } else { - setButtonTexture(TEXTURE_OFF); - setHoverTooltips(LangHandler.getMultiLang("gtceu.gui.item_auto_output.other_direction") - .toArray(Component[]::new)); - } - } - }); - - group.addWidget(new ToggleButtonWidget( - 19, 0, 18, 18, GuiTextures.BUTTON_ITEM_OUTPUT, - trait::allowsItemInputFromOutputSide, trait::setAllowItemInputFromOutputSide) - .setShouldUseBaseBackground().setTooltipText("gtceu.gui.item_auto_output.allow_input")); - - return group; - } - - private void onIOModePressed(ClickData cd) { - if (this.side == null) - return; - - if (trait.getItemOutputDirection() == this.side) { - trait.setAllowAutoOutputItems(!trait.isAutoOutputItems()); - } else { - trait.setAllowAutoOutputItems(false); - trait.setItemOutputDirection(this.side); - } - } - - @Override - public void onSideSelected(BlockPos pos, Direction side) { - this.side = side; - } - - @Override - public ScreenSide getScreenSide() { - return ScreenSide.LEFT; - } - - @Override - public void handleClick(ClickData cd, Direction direction) { - if (!canHandleClick(cd) || !trait.supportsAutoOutputItems()) - return; - - if (trait.getItemOutputDirection() != side) { - trait.setItemOutputDirection(side); - trait.setAllowAutoOutputItems(false); - } else { - trait.setAllowAutoOutputItems(!trait.isAutoOutputItems()); - } - } - - @SuppressWarnings("RedundantIfStatement") // Cleaner code this way - private boolean canHandleClick(ClickData cd) { - if (cd.button == 0) - return true; - - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public void renderOverlay(SceneWidget sceneWidget, BlockPosFace blockPosFace) { - if (trait.getItemOutputDirection() != blockPosFace.facing) - return; - - sceneWidget.drawFacingBorder(new PoseStack(), blockPosFace, - trait.isAutoOutputItems() ? 0xffff6e0f : 0x8fff6e0f, 1); - } - - @Override - public void addAdditionalUIElements(WidgetGroup parent) { - LabelWidget text = new LabelWidget(4, 4, "gtceu.gui.auto_output.name") { - - @Override - public boolean isVisible() { - return trait.isAutoOutputItems() && trait.getItemOutputDirection() != null; - } - }; - - text.setTextColor(0xffff6e0f).setDropShadow(false); - parent.addWidget(text); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java deleted file mode 100644 index a6afc7eebb4..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.gregtechceu.gtceu.api.gui.widget.directional.handlers; - -import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.cover.CoverBehavior; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.gui.widget.CoverConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.gui.widget.directional.IDirectionalConfigHandler; -import com.gregtechceu.gtceu.api.item.IComponentItem; -import com.gregtechceu.gtceu.api.item.component.IItemComponent; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.SceneWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class CoverableConfigHandler implements IDirectionalConfigHandler { - - private static final IGuiTexture CONFIG_BTN_TEXTURE = new GuiTextureGroup(GuiTextures.IO_CONFIG_COVER_SETTINGS); - - private final ICoverable machine; - private CustomItemStackHandler handler; - private Direction side; - - private ConfiguratorPanel panel; - private ConfiguratorPanel.FloatingTab coverConfigurator; - - private SlotWidget slotWidget; - private CoverBehavior coverBehavior; - - public CoverableConfigHandler(ICoverable machine) { - this.machine = machine; - this.handler = createItemStackHandler(); - } - - private CustomItemStackHandler createItemStackHandler() { - var handler = new CustomItemStackHandler(1) { - - @Override - public int getSlotLimit(int slot) { - return 1; - } - }; - - handler.setFilter(itemStack -> { - if (itemStack.isEmpty()) return true; - if (this.side == null) return false; - return CoverPlaceBehavior.isCoverBehaviorItem(itemStack, () -> false, - coverDef -> ICoverable.canPlaceCover(coverDef, this.machine)); - }); - - return handler; - } - - @Override - public Widget getSideSelectorWidget(SceneWidget scene, FancyMachineUIWidget machineUI) { - WidgetGroup group = new WidgetGroup(0, 0, (18 * 2) + 1, 18); - this.panel = machineUI.getConfiguratorPanel(); - - group.addWidget(slotWidget = new SlotWidget(handler, 0, 19, 0) { - - @Override - public boolean canPutStack(ItemStack stack) { - return super.canPutStack(stack) && CoverPlaceBehavior.isCoverBehaviorItem(stack, () -> false, - def -> def.createCoverBehavior(machine, side).canAttach()); - } - } - .setChangeListener(this::coverItemChanged) - .setBackgroundTexture(new GuiTextureGroup(GuiTextures.SLOT, GuiTextures.IO_CONFIG_COVER_SLOT_OVERLAY))); - checkCoverBehaviour(); - - return group; - } - - // FIXME: This gets called twice in a single tick, causing two covers to exist simultaneously - private void coverItemChanged() { - closeConfigTab(); - - if (!(panel.getGui().entityPlayer instanceof ServerPlayer serverPlayer) || side == null) - return; - - var item = handler.getStackInSlot(0); - if (machine.getCoverAtSide(side) != null) { - machine.removeCover(false, side, serverPlayer); - } - - if (!item.isEmpty() && machine.getCoverAtSide(side) == null) { - if (item.getItem() instanceof IComponentItem componentItem) { - for (IItemComponent component : componentItem.getComponents()) { - if (component instanceof CoverPlaceBehavior placeBehavior) { - machine.placeCoverOnSide(side, item, placeBehavior.coverDefinition(), serverPlayer); - break; - } - } - } - } - - checkCoverBehaviour(); - } - - @Override - public void onSideSelected(BlockPos pos, Direction side) { - this.side = side; - checkCoverBehaviour(); - closeConfigTab(); - } - - private void updateWidgetVisibility() { - var sideSelected = this.side != null; - slotWidget.setVisible(sideSelected); - slotWidget.setActive(sideSelected); - } - - public void checkCoverBehaviour() { - if (side == null) - return; - - var coverBehaviour = machine.getCoverAtSide(side); - if (coverBehaviour != this.coverBehavior) { - this.coverBehavior = coverBehaviour; - - var attachItem = coverBehaviour == null ? ItemStack.EMPTY : coverBehaviour.getAttachItem(); - handler.setStackInSlot(0, attachItem); - handler.onContentsChanged(0); - } - - updateWidgetVisibility(); - } - - private void toggleConfigTab(ClickData cd) { - if (this.coverConfigurator == null) - openConfigTab(); - else - closeConfigTab(); - } - - private void openConfigTab() { - CoverConfigurator configurator = new CoverConfigurator(this.machine, this.side, this.coverBehavior) { - - @Override - public Component getTitle() { - // Uses the widget's own title - return Component.empty(); - } - - @Override - public IGuiTexture getIcon() { - return GuiTextures.CLOSE_ICON; - } - }; - - this.coverConfigurator = this.panel.createFloatingTab(configurator); - this.coverConfigurator.setGui(this.panel.getGui()); - this.panel.addWidget(this.coverConfigurator); - this.panel.expandTab(this.coverConfigurator); - - coverConfigurator.onClose(() -> { - if (coverConfigurator != null) { - this.panel.removeWidget(this.coverConfigurator); - } - - this.coverConfigurator = null; - }); - } - - private void closeConfigTab() { - if (this.coverConfigurator != null) { - this.panel.collapseTab(); - } - } - - @Override - public ScreenSide getScreenSide() { - return ScreenSide.RIGHT; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/IToolGridHighlight.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/IToolGridHighlight.java index a79ccf07b39..a37a8d35947 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/IToolGridHighlight.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/IToolGridHighlight.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.item.tool; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -19,8 +19,8 @@ default boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, return true; } - default @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + default @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { return null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index dc59324d145..03314deffec 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -12,8 +12,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; - -import com.lowdragmc.lowdraglib.utils.ShapeUtils; +import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.Direction; import net.minecraft.core.IdMapper; @@ -127,8 +126,7 @@ public class MachineDefinition implements Supplier { private EditableMachineUI editableUI; @Getter @Setter - @Nullable - private PanelFactory UI; + private @Nullable PanelFactory UI; @Getter @Setter private String themeId = ThemeAPI.DEFAULT_ID; @@ -173,7 +171,7 @@ public ItemStack asStack(int count) { public VoxelShape getShape(Direction direction) { if (shape.isEmpty() || shape == Shapes.block() || direction == Direction.NORTH) return shape; - return this.cache.computeIfAbsent(direction, dir -> ShapeUtils.rotate(shape, dir)); + return this.cache.computeIfAbsent(direction, dir -> GTUtil.rotateVoxelShape(shape, dir)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 91c4fef90cd..22e717de0f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -13,8 +13,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; @@ -29,6 +27,7 @@ import com.gregtechceu.gtceu.api.machine.trait.feature.IInteractionTrait; import com.gregtechceu.gtceu.api.machine.trait.feature.IRenderingTrait; import com.gregtechceu.gtceu.api.misc.*; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; @@ -44,11 +43,10 @@ import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; import com.lowdragmc.lowdraglib.utils.DummyWorld; import net.minecraft.ChatFormatting; @@ -80,7 +78,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.ModelData; -import net.minecraftforge.client.model.data.ModelProperty; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.LazyOptional; @@ -101,10 +98,7 @@ import java.util.function.Predicate; public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBlockEntity, IToolable, IToolGridHighlight, - IFancyTooltip, IPaintable, IMachineFeature, ICopyable { - - public static final ModelProperty MODEL_DATA_LEVEL = new ModelProperty<>(); - public static final ModelProperty MODEL_DATA_POS = new ModelProperty<>(); + IPaintable, IMachineFeature, ICopyable { @Getter protected final SyncDataHolder syncDataHolder = new SyncDataHolder(this); @@ -511,8 +505,8 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { var cover = coverContainer.getCoverAtSide(side); if (cover != null) { var tips = cover.sideTips(player, pos, state, toolTypes, side); @@ -522,16 +516,16 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I if (toolTypes.contains(GTToolType.WRENCH)) { if (player.isShiftKeyDown()) { if (isFacingValid(side) || (allowExtendedFacing() && hasFrontFacing() && side == getFrontFacing())) { - return GuiTextures.TOOL_FRONT_FACING_ROTATION; + return GTGuiTextures.TOOL_FRONT_FACING_ROTATION; } } } else if (toolTypes.contains(GTToolType.SOFT_MALLET)) { if (this instanceof IControllable controllable) { - return controllable.isWorkingEnabled() ? GuiTextures.TOOL_START : GuiTextures.TOOL_PAUSE; + return controllable.isWorkingEnabled() ? GTGuiTextures.TOOL_START : GTGuiTextures.TOOL_PAUSE; } } else if (toolTypes.contains(GTToolType.HARD_HAMMER)) { if (this instanceof IMufflableMachine mufflableMachine) { - return mufflableMachine.isMuffled() ? GuiTextures.TOOL_SOUND : GuiTextures.TOOL_MUTE; + return mufflableMachine.isMuffled() ? GTGuiTextures.TOOL_SOUND : GTGuiTextures.TOOL_MUTE; } } @@ -630,7 +624,7 @@ public void setFrontFacing(Direction facing) { } @Override - public @NotNull ModelData getModelData() { + public ModelData getModelData() { ModelData.Builder data = super.getModelData().derive(); updateModelData(data); return data.build(); @@ -641,7 +635,7 @@ public Direction getUpwardsFacing() { Direction.NORTH; } - public void setUpwardsFacing(@NotNull Direction upwardsFacing) { + public void setUpwardsFacing(Direction upwardsFacing) { if (!getDefinition().isAllowExtendedFacing()) { return; } @@ -759,23 +753,6 @@ public boolean canConnectRedstone(@NotNull Direction side) { ////////////////////////////////////// // ******** GUI *********// - ////////////////////////////////////// - @Override - public IGuiTexture getFancyTooltipIcon() { - return GuiTextures.INFO_ICON; - } - - @Override - public final List getFancyTooltip() { - var tooltips = new ArrayList(); - onAddFancyInformationTooltip(tooltips); - return tooltips; - } - - @Override - public boolean showFancyTooltip() { - return !getFancyTooltip().isEmpty(); - } public void onAddFancyInformationTooltip(List tooltips) { getDefinition().getTooltipBuilder().accept(getDefinition().asStack(), tooltips); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index 4812783f7ad..911ae1be2d6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -2,18 +2,12 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.editor.EditableUI; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.trait.EnvironmentalExplosionTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; -import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.util.Mth; @@ -100,18 +94,4 @@ protected long getMaxInputOutputAmperage() { protected boolean isEnergyEmitter() { return false; } - - /** - * Create an energy bar widget. - */ - protected static EditableUI createEnergyBar() { - return new EditableUI<>("energy_container", ProgressWidget.class, () -> { - var progressBar = new ProgressWidget(ProgressWidget.JEIProgress, 0, 0, 18, 60, - new ProgressTexture(IGuiTexture.EMPTY, GuiTextures.ENERGY_BAR_BASE)); - progressBar.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP); - progressBar.setBackground(GuiTextures.ENERGY_BAR_BACKGROUND); - return progressBar; - }, (progressBar, machine) -> progressBar.setProgressSupplier( - () -> machine.energyContainer.getEnergyStored() * 1d / machine.energyContainer.getEnergyCapacity())); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/AutoStockingFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/AutoStockingFancyConfigurator.java deleted file mode 100644 index 94620e8736c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/AutoStockingFancyConfigurator.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; -import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.integration.ae2.machine.MEStockingBusPartMachine; -import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.network.chat.Component; - -public class AutoStockingFancyConfigurator implements IFancyConfigurator { - - private IMEStockingPart machine; - - public AutoStockingFancyConfigurator(IMEStockingPart machine) { - this.machine = machine; - } - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.adv_stocking_config.title"); - } - - @Override - public IGuiTexture getIcon() { - return new ItemStackTexture(GTItems.TOOL_DATA_STICK.asStack()); - } - - @Override - public Widget createConfigurator() { - var group = new WidgetGroup(0, 0, 90, 70); - - String suffix = machine instanceof MEStockingBusPartMachine ? "min_item_count" : "min_fluid_count"; - - group.addWidget(new LabelWidget(4, 2, "gtceu.gui.title.adv_stocking_config." + suffix)); - group.addWidget(new IntInputWidget(4, 12, 81, 14, machine::getMinStackSize, - machine::setMinStackSize).setMin(1) - .appendHoverTooltips(Component.translatable("gtceu.gui.adv_stocking_config." + suffix))); - group.addWidget(new LabelWidget(4, 36, "gtceu.gui.title.adv_stocking_config.ticks_per_cycle")); - group.addWidget(new IntInputWidget(4, 46, 81, 14, machine::getTicksPerCycle, - machine::setTicksPerCycle).setMin(ConfigHolder.INSTANCE.compat.ae2.updateIntervals) - .setHoverTooltips(Component.translatable("gtceu.gui.adv_stocking_config.ticks_per_cycle"))); - - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/ButtonConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/ButtonConfigurator.java deleted file mode 100644 index 839da741dc9..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/ButtonConfigurator.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfiguratorButton; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; - -import net.minecraft.network.chat.Component; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.util.Collections; -import java.util.List; -import java.util.function.Consumer; - -@Accessors(chain = true) -public class ButtonConfigurator implements IFancyConfiguratorButton { - - @Getter - protected IGuiTexture icon; - - protected Consumer onClick; - - @Getter - @Setter - protected List tooltips = Collections.emptyList(); - - public ButtonConfigurator(IGuiTexture texture, Consumer onClick) { - this.icon = texture; - this.onClick = onClick; - } - - @Override - public void onClick(ClickData clickData) { - onClick.accept(clickData); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java deleted file mode 100644 index dec55d9951c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyCustomMiddleClickAction; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyCustomMouseWheelAction; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.data.lang.LangHandler; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraftforge.items.ItemStackHandler; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public class CircuitFancyConfigurator implements IFancyConfigurator, IFancyCustomMouseWheelAction, - IFancyCustomMiddleClickAction { - - private static final int SET_TO_ZERO = 2; - private static final int SET_TO_EMPTY = 3; - private static final int SET_TO_N = 4; - - private static final int NO_CONFIG = -1; - - final ItemStackHandler circuitSlot; - - public CircuitFancyConfigurator(ItemStackHandler circuitSlot) { - this.circuitSlot = circuitSlot; - } - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.circuit.title"); - } - - @Override - public IGuiTexture getIcon() { - if (IntCircuitBehaviour.isIntegratedCircuit(circuitSlot.getStackInSlot(0))) { - return new ItemStackTexture(circuitSlot.getStackInSlot(0)); - } - return new GuiTextureGroup(new ItemStackTexture(IntCircuitBehaviour.stack(0)), - new ItemStackTexture(Items.BARRIER)); - } - - @Override - public boolean mouseWheelMove(BiConsumer> writeClientAction, double mouseX, - double mouseY, double wheelDelta) { - if (wheelDelta == 0) return false; - if (!ConfigHolder.INSTANCE.machines.ghostCircuit && circuitSlot.getStackInSlot(0).isEmpty()) return false; - int nextValue = getNextValue(wheelDelta > 0); - if (nextValue == NO_CONFIG) { - if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitSlot.setStackInSlot(0, ItemStack.EMPTY); - writeClientAction.accept(SET_TO_EMPTY, buf -> {}); - } - } else { - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(nextValue)); - writeClientAction.accept(SET_TO_N, buf -> buf.writeVarInt(nextValue)); - } - return true; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - switch (id) { - case SET_TO_ZERO -> { - if (ConfigHolder.INSTANCE.machines.ghostCircuit || !circuitSlot.getStackInSlot(0).isEmpty()) - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(0)); - } - case SET_TO_EMPTY -> { - if (ConfigHolder.INSTANCE.machines.ghostCircuit || circuitSlot.getStackInSlot(0).isEmpty()) - circuitSlot.setStackInSlot(0, ItemStack.EMPTY); - else - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(0)); - } - case SET_TO_N -> { - if (ConfigHolder.INSTANCE.machines.ghostCircuit || !circuitSlot.getStackInSlot(0).isEmpty()) - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(buffer.readVarInt())); - } - } - } - - @Override - public void onMiddleClick(BiConsumer> writeClientAction) { - if (!ConfigHolder.INSTANCE.machines.ghostCircuit && !circuitSlot.getStackInSlot(0).isEmpty()) - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(0)); - else - circuitSlot.setStackInSlot(0, ItemStack.EMPTY); - writeClientAction.accept(SET_TO_EMPTY, buf -> {}); - } - - @Override - public Widget createConfigurator() { - var group = new WidgetGroup(0, 0, 174, 132); - group.addWidget(new LabelWidget(9, 8, "Programmed Circuit Configuration")); - group.addWidget(new SlotWidget(circuitSlot, 0, (group.getSize().width - 18) / 2, 20, - !ConfigHolder.INSTANCE.machines.ghostCircuit, !ConfigHolder.INSTANCE.machines.ghostCircuit) - .setBackground(new GuiTextureGroup(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY))); - if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - group.addWidget(new ButtonWidget((group.getSize().width - 18) / 2, 20, 18, 18, IGuiTexture.EMPTY, - clickData -> { - if (!clickData.isRemote) { - circuitSlot.setStackInSlot(0, ItemStack.EMPTY); - } - })); - } - int idx = 0; - for (int x = 0; x <= 2; x++) { - for (int y = 0; y <= 8; y++) { - int finalIdx = idx; - group.addWidget(new ButtonWidget(5 + (18 * y), 48 + (18 * x), 18, 18, - new GuiTextureGroup(GuiTextures.SLOT, - new ItemStackTexture(IntCircuitBehaviour.stack(finalIdx)).scale(16f / 18)), - clickData -> { - if (!clickData.isRemote) { - ItemStack stack = circuitSlot.getStackInSlot(0).copy(); - if (IntCircuitBehaviour.isIntegratedCircuit(stack)) { - IntCircuitBehaviour.setCircuitConfiguration(stack, finalIdx); - circuitSlot.setStackInSlot(0, stack); - } else if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(finalIdx)); - } - } - })); - idx++; - } - } - for (int x = 0; x <= 5; x++) { - int finalIdx = x + 27; - group.addWidget(new ButtonWidget(5 + (18 * x), 102, 18, 18, - new GuiTextureGroup(GuiTextures.SLOT, - new ItemStackTexture(IntCircuitBehaviour.stack(finalIdx)).scale(16f / 18)), - clickData -> { - if (!clickData.isRemote) { - ItemStack stack = circuitSlot.getStackInSlot(0).copy(); - if (IntCircuitBehaviour.isIntegratedCircuit(stack)) { - IntCircuitBehaviour.setCircuitConfiguration(stack, finalIdx); - circuitSlot.setStackInSlot(0, stack); - } else if (ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitSlot.setStackInSlot(0, IntCircuitBehaviour.stack(finalIdx)); - } - } - })); - } - return group; - } - - @Override - public List getTooltips() { - var list = new ArrayList<>(IFancyConfigurator.super.getTooltips()); - list.addAll(Arrays.stream( - LangHandler.getMultiLang("gtceu.gui.configurator_slot.tooltip").toArray(new MutableComponent[0])) - .toList()); - return list; - } - - private int getNextValue(boolean increment) { - int currentValue = IntCircuitBehaviour.getCircuitConfiguration(circuitSlot.getStackInSlot(0)); - if (increment) { - // if at max, loop around to no circuit - if (currentValue == IntCircuitBehaviour.CIRCUIT_MAX) { - return 0; - } - // if at no circuit, skip 0 and return 1 - if (this.circuitSlot.getStackInSlot(0).isEmpty()) { - return 1; - } - // normal case: increment by 1 - return currentValue + 1; - } else { - // if at no circuit, loop around to max - if (this.circuitSlot.getStackInSlot(0).isEmpty() || - (currentValue == 0 && !ConfigHolder.INSTANCE.machines.ghostCircuit)) { - return IntCircuitBehaviour.CIRCUIT_MAX; - } - // if at 1, skip 0 and return no circuit - if (currentValue == 1 && ConfigHolder.INSTANCE.machines.ghostCircuit) { - return -1; - } - // normal case: decrement by 1 - return currentValue - 1; - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CombinedDirectionalFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CombinedDirectionalFancyConfigurator.java deleted file mode 100644 index 456fa6204ba..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CombinedDirectionalFancyConfigurator.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.WidgetUtils; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyUIProvider; -import com.gregtechceu.gtceu.api.gui.widget.directional.CombinedDirectionalConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.directional.IDirectionalConfigHandler; -import com.gregtechceu.gtceu.api.gui.widget.directional.handlers.AutoOutputFluidConfigHandler; -import com.gregtechceu.gtceu.api.gui.widget.directional.handlers.AutoOutputItemConfigHandler; -import com.gregtechceu.gtceu.api.gui.widget.directional.handlers.CoverableConfigHandler; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.trait.AutoOutputTrait; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; - -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.function.Function; -import java.util.function.Supplier; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class CombinedDirectionalFancyConfigurator implements IFancyUIProvider { - - private final List> configs; - private final MetaMachine machine; - - public CombinedDirectionalFancyConfigurator(List> configs, - MetaMachine machine) { - this.configs = configs; - this.machine = machine; - } - - @Override - public Widget createMainPage(FancyMachineUIWidget widget) { - Size parentSize = widget.getSize(); - return new CombinedDirectionalConfigurator( - widget, configs.stream().map(Supplier::get).toArray(IDirectionalConfigHandler[]::new), machine, - parentSize.width - 8, - parentSize.height - WidgetUtils.getInventoryHeight(true)); - } - - @Override - public IGuiTexture getTabIcon() { - return GuiTextures.TOOL_COVER_SETTINGS; - } - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.directional_setting.title"); - } - - @Override - public List getTabTooltips() { - List tooltip = new ArrayList<>(); - tooltip.add(Component.translatable("gtceu.gui.directional_setting.tab_tooltip")); - return tooltip; - } - - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private static final List>> CONFIG_HANDLERS = new ArrayList<>(); - - static { - // Left side: - CONFIG_HANDLERS.add( - machine -> { - var trait = machine.getTraitHolder().getTrait(AutoOutputTrait.TYPE); - return trait != null && trait.supportsAutoOutputItems() ? - () -> new AutoOutputItemConfigHandler(trait) : null; - }); - CONFIG_HANDLERS.add( - machine -> { - var trait = machine.getTraitHolder().getTrait(AutoOutputTrait.TYPE); - return trait != null && trait.supportsAutoOutputFluids() ? - () -> new AutoOutputFluidConfigHandler(trait) : null; - }); - - // Right side: - CONFIG_HANDLERS.add(machine -> () -> new CoverableConfigHandler(machine.getCoverContainer())); - } - - /** - * To be used by addons for registering their own directional configurations - */ - public static void registerConfigHandler(Function> factory) { - CONFIG_HANDLERS.add(factory); - } - - @Nullable - public static CombinedDirectionalFancyConfigurator of(MetaMachine container, MetaMachine machine) { - var configs = CONFIG_HANDLERS.stream() - .map(handler -> handler.apply(container)) - .filter(Objects::nonNull) - .toList(); - - return configs.isEmpty() ? null : new CombinedDirectionalFancyConfigurator(configs, machine); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyInvConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyInvConfigurator.java deleted file mode 100644 index 9d3efb6993b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyInvConfigurator.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.jei.IngredientIO; - -import net.minecraft.network.chat.Component; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.util.Collections; -import java.util.List; - -@Accessors(chain = true) -public class FancyInvConfigurator implements IFancyConfigurator { - - private final CustomItemStackHandler inventory; - - @Getter - private final Component title; - - @Getter - @Setter - private List tooltips = Collections.emptyList(); - - public FancyInvConfigurator(CustomItemStackHandler inventory, Component title) { - this.inventory = inventory; - this.title = title; - } - - @Override - public IGuiTexture getIcon() { - return GuiTextures.BUTTON_ITEM_OUTPUT; - } - - @Override - public Widget createConfigurator() { - int rowSize = (int) Math.sqrt(inventory.getSlots()); - int colSize = rowSize; - if (inventory.getSlots() == 8) { - rowSize = 4; - colSize = 2; - } - var group = new WidgetGroup(0, 0, 18 * rowSize + 16, 18 * colSize + 16); - var container = new WidgetGroup(4, 4, 18 * rowSize + 8, 18 * colSize + 8); - int index = 0; - for (int y = 0; y < colSize; y++) { - for (int x = 0; x < rowSize; x++) { - container.addWidget(new SlotWidget(inventory, index++, 4 + x * 18, 4 + y * 18, true, true) - .setBackgroundTexture(GuiTextures.SLOT) - .setIngredientIO(IngredientIO.INPUT)); - } - } - - container.setBackground(GuiTextures.BACKGROUND_INVERSE); - group.addWidget(container); - - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancySelectorConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancySelectorConfigurator.java deleted file mode 100644 index 5b89d526cdc..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancySelectorConfigurator.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfiguratorButton; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; - -import net.minecraft.network.chat.Component; - -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.util.Collections; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; - -public class FancySelectorConfigurator & EnumSelectorWidget.SelectableEnum> - implements IFancyConfiguratorButton { - - private final EnumSelectorWidget widget; - - @Setter - @Accessors(chain = true) - private Function> tooltip = t -> Collections.singletonList(Component.empty()); - - public FancySelectorConfigurator(T[] values, T initialValue, Consumer onChanged) { - this.widget = new EnumSelectorWidget<>(0, 0, 20, 20, values, initialValue, onChanged); - } - - @Override - public IGuiTexture getIcon() { - return widget.getTexture(widget.selected); - } - - @Override - public List getTooltips() { - return this.tooltip.apply(widget.getCurrentValue()); - } - - @Override - public void onClick(ClickData clickData) { - ++widget.selected; - if (widget.selected >= widget.values.size()) { - widget.selected = 0; - } - - widget.buttonWidget.setIndex(widget.selected); - if (widget.onChanged != null) { - widget.onChanged.accept(widget.getCurrentValue()); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyTankConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyTankConfigurator.java deleted file mode 100644 index ffde47feb4c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/FancyTankConfigurator.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.TankWidget; -import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.network.chat.Component; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.util.Collections; -import java.util.List; - -@Accessors(chain = true) -public class FancyTankConfigurator implements IFancyConfigurator { - - private final CustomFluidTank[] tanks; - - @Getter - private final Component title; - - @Getter - @Setter - private List tooltips = Collections.emptyList(); - - public FancyTankConfigurator(CustomFluidTank[] tanks, Component title) { - this.tanks = tanks; - this.title = title; - } - - @Override - public IGuiTexture getIcon() { - return GuiTextures.BUTTON_FLUID_OUTPUT; - } - - @Override - public Widget createConfigurator() { - int rowSize = (int) Math.sqrt(tanks.length); - int colSize = rowSize; - if (tanks.length == 8) { - rowSize = 4; - colSize = 2; - } - - var group = new WidgetGroup(0, 0, 18 * rowSize + 16, 18 * colSize + 16); - var container = new WidgetGroup(4, 4, 18 * rowSize + 8, 18 * colSize + 8); - - int index = 0; - for (int y = 0; y < colSize; y++) { - for (int x = 0; x < rowSize; x++) { - container.addWidget(new TankWidget(tanks[index++], 4 + x * 18, 4 + y * 18, true, true) - .setBackground(GuiTextures.FLUID_SLOT)); - } - } - - container.setBackground(GuiTextures.BACKGROUND_INVERSE); - group.addWidget(container); - - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/MachineModeFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/MachineModeFancyConfigurator.java deleted file mode 100644 index ae205e44c95..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/MachineModeFancyConfigurator.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.fancyconfigurator; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyUIProvider; -import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.common.data.GTItems; - -import com.lowdragmc.lowdraglib.gui.editor.ColorPattern; -import com.lowdragmc.lowdraglib.gui.texture.*; -import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; - -import java.util.ArrayList; -import java.util.List; - -public class MachineModeFancyConfigurator implements IFancyUIProvider { - - protected IRecipeLogicMachine machine; - - public MachineModeFancyConfigurator(IRecipeLogicMachine machine) { - this.machine = machine; - } - - @Override - public Component getTitle() { - return Component.translatable("gtceu.gui.machinemode.title"); - } - - @Override - public IGuiTexture getTabIcon() { - return new ItemStackTexture(GTItems.ROBOT_ARM_LV.get()); - } - - @Override - public Widget createMainPage(FancyMachineUIWidget widget) { - var group = new MachineModeConfigurator(0, 0, 140, 20 * machine.getRecipeTypes().length + 4); - group.setBackground(GuiTextures.BACKGROUND_INVERSE); - for (int i = 0; i < machine.getRecipeTypes().length; i++) { - int finalI = i; - group.addWidget(new ButtonWidget(2, 2 + i * 20, 136, 20, IGuiTexture.EMPTY, - cd -> setActiveRecipeTypeAndUpdateTickSubs(finalI))); - group.addWidget(new ImageWidget(2, 2 + i * 20, 136, 20, - () -> new GuiTextureGroup( - ResourceBorderTexture.BUTTON_COMMON.copy() - .setColor(machine.getActiveRecipeType() == finalI ? ColorPattern.CYAN.color : -1), - new TextTexture(machine.getRecipeTypes()[finalI].registryName.toLanguageKey()).setWidth(136) - .setType(TextTexture.TextType.ROLL)))); - - } - return group; - } - - @Override - public List getTabTooltips() { - List tooltip = new ArrayList<>(); - tooltip.add(Component.translatable("gtceu.gui.machinemode.tab_tooltip")); - return tooltip; - } - - private void setActiveRecipeTypeAndUpdateTickSubs(int activeRecipeType) { - boolean needUpdateTickSubs = !machine.keepSubscribing() && activeRecipeType != machine.getActiveRecipeType(); - machine.setActiveRecipeType(activeRecipeType); - if (needUpdateTickSubs) { - machine.getRecipeLogic().updateTickSubscription(); - } - } - - public class MachineModeConfigurator extends WidgetGroup { - - public MachineModeConfigurator(int x, int y, int width, int height) { - super(x, y, width, height); - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - buffer.writeVarInt(machine.getActiveRecipeType()); - } - - @Override - public void readInitialData(FriendlyByteBuf buffer) { - machine.setActiveRecipeType(buffer.readVarInt()); - } - - @Override - public void detectAndSendChanges() { - this.writeUpdateInfo(0, buf -> buf.writeVarInt(machine.getActiveRecipeType())); - } - - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - if (id == 0) { - machine.setActiveRecipeType(buffer.readVarInt()); - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IFancyUIMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IFancyUIMachine.java deleted file mode 100644 index d7dc3b46867..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IFancyUIMachine.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.capability.IControllable; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.*; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.fancyconfigurator.CombinedDirectionalFancyConfigurator; -import com.gregtechceu.gtceu.api.machine.fancyconfigurator.MachineModeFancyConfigurator; - -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.SceneWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.BlockInfo; -import com.lowdragmc.lowdraglib.utils.TrackedDummyWorld; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public interface IFancyUIMachine extends IUIMachine, IFancyUIProvider { - - @Override - default ModularUI createUI(Player entityPlayer) { - return new ModularUI(176, 166, this, entityPlayer).widget(new FancyMachineUIWidget(this, 176, 166)); - } - - /** - * We should not override this method in general, and use {@link IFancyUIMachine#createUIWidget()} instead, - */ - @Override - default Widget createMainPage(FancyMachineUIWidget widget) { - var editableUI = self().getDefinition().getEditableUI(); - if (editableUI != null) { - var template = editableUI.createCustomUI(); - if (template == null) { - template = editableUI.createDefault(); - } - editableUI.setupUI(template, self()); - return template; - } - return createUIWidget(); - } - - /** - * Create the core widget of this machine. - */ - default Widget createUIWidget() { - var group = new WidgetGroup(0, 0, 100, 100); - if (isRemote()) { - group.addWidget(new ImageWidget((100 - 48) / 2, 60, 48, 16, GuiTextures.SCENE)); - TrackedDummyWorld world = new TrackedDummyWorld(); - world.addBlock(BlockPos.ZERO, BlockInfo.fromBlockState(self().getBlockState())); - SceneWidget sceneWidget = new SceneWidget(0, 0, 100, 100, world) { - - @Override - @OnlyIn(Dist.CLIENT) - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, - float partialTicks) { - // AUTO ROTATION - if (renderer != null) { - this.rotationPitch = (partialTicks + getGui().getTickCount()) * 2; - renderer.setCameraLookAt(this.center, 0.1f, Math.toRadians(this.rotationPitch), - Math.toRadians(this.rotationYaw)); - } - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - } - }; - sceneWidget.useOrtho(true) - .setOrthoRange(0.5f) - .setScalable(false) - .setDraggable(false) - .setRenderFacing(false) - .setRenderSelect(false); - sceneWidget.getRenderer().setFov(30); - group.addWidget(sceneWidget); - sceneWidget.setRenderedCore(List.of(BlockPos.ZERO), null); - } - return group; - } - - @Override - default IGuiTexture getTabIcon() { - return new ItemStackTexture(self().getDefinition().getItem()); - } - - @Override - default void attachSideTabs(TabsWidget sideTabs) { - sideTabs.setMainTab(this); - - if (this instanceof IRecipeLogicMachine rLMachine && rLMachine.getRecipeTypes().length > 1) { - sideTabs.attachSubTab(new MachineModeFancyConfigurator(rLMachine)); - } - var directionalConfigurator = CombinedDirectionalFancyConfigurator.of(self(), self()); - if (directionalConfigurator != null) - sideTabs.attachSubTab(directionalConfigurator); - } - - @Override - default void attachConfigurators(ConfiguratorPanel configuratorPanel) { - if (this instanceof IControllable controllable) { - configuratorPanel.attachConfigurators(new IFancyConfiguratorButton.Toggle( - GuiTextures.BUTTON_POWER.getSubTexture(0, 0, 1, 0.5), - GuiTextures.BUTTON_POWER.getSubTexture(0, 0.5, 1, 0.5), - controllable::isWorkingEnabled, (clickData, pressed) -> controllable.setWorkingEnabled(pressed)) - .setTooltipsSupplier(pressed -> List.of( - Component.translatable( - pressed ? "behaviour.soft_hammer.enabled" : "behaviour.soft_hammer.disabled")))); - } - if (this instanceof MetaMachine machine) { - for (var direction : Direction.values()) { - if (machine.getCoverContainer().hasCover(direction)) { - var configurator = machine.getCoverContainer().getCoverAtSide(direction).getConfigurator(); - if (configurator != null) - configuratorPanel.attachConfigurators(configurator); - } - } - } - } - - @Override - default void attachTooltips(TooltipsPanel tooltipsPanel) { - tooltipsPanel.attachTooltips(self()); - self().getTraitHolder().getAllTraits().stream().filter(IFancyTooltip.class::isInstance) - .map(IFancyTooltip.class::cast) - .forEach(tooltipsPanel::attachTooltips); - } - - @Override - default List getTabTooltips() { - var list = new ArrayList(); - list.add(Component.translatable(self().getDefinition().getDescriptionId())); - return list; - } - - @Override - default Component getTitle() { - return Component.translatable(self().getDefinition().getDescriptionId()); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java deleted file mode 100644 index 074723db931..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IUIMachine.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.gui.factory.MachineUIFactory; - -import com.lowdragmc.lowdraglib.gui.modular.IUIHolder; - -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.BlockHitResult; - -/** - * A machine that has gui. can be opened via right click. - */ -public interface IUIMachine extends IUIHolder, IMachineFeature { - - default boolean shouldOpenUI(Player player, InteractionHand hand, BlockHitResult hit) { - return true; - } - - default InteractionResult tryToOpenUI(Player player, InteractionHand hand, BlockHitResult hit) { - if (this.shouldOpenUI(player, hand, hit)) { - if (player instanceof ServerPlayer serverPlayer) { - MachineUIFactory.INSTANCE.openUI(self(), serverPlayer); - } - } else { - return InteractionResult.PASS; - } - return InteractionResult.sidedSuccess(player.level().isClientSide); - } - - @Override - default boolean isInvalid() { - return self().isRemoved(); - } - - @Override - default boolean isRemote() { - return self().isRemote(); - } - - @Override - default void markAsDirty() {}; -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IVoidable.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IVoidable.java index 72e6f1941ef..bea4096ff50 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IVoidable.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IVoidable.java @@ -3,21 +3,12 @@ import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.ConfiguratorPanel; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; -import com.gregtechceu.gtceu.api.machine.fancyconfigurator.FancySelectorConfigurator; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; - -import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import lombok.Getter; import org.jetbrains.annotations.NotNull; -import java.util.List; import java.util.function.Predicate; public interface IVoidable extends IMachineFeature { @@ -37,15 +28,7 @@ default VoidingMode getVoidingMode() { return VoidingMode.VOID_NONE; } - static void attachConfigurators(ConfiguratorPanel configuratorPanel, IVoidable controller) { - configuratorPanel - .attachConfigurators(new FancySelectorConfigurator<>(VoidingMode.VALUES, controller.getVoidingMode(), - controller::setVoidingMode) - .setTooltip(m -> List.of(Component.translatable("gtceu.gui.multiblock.voiding_mode"), - Component.translatable(m.localeName)))); - } - - enum VoidingMode implements StringRepresentable, EnumSelectorWidget.SelectableEnum { + enum VoidingMode implements StringRepresentable { VOID_NONE("gtceu.gui.no_voiding", cap -> false), VOID_ITEMS("gtceu.gui.item_voiding", cap -> cap == ItemRecipeCapability.CAP), @@ -56,14 +39,11 @@ enum VoidingMode implements StringRepresentable, EnumSelectorWidget.SelectableEn public static final VoidingMode[] VALUES = values(); private final String localeName; - @Getter - private final IGuiTexture icon; private final Predicate> canVoid; VoidingMode(String name, Predicate> canVoid) { this.localeName = name; this.canVoid = canVoid; - this.icon = GuiTextures.BUTTON_VOID_MULTIBLOCK.getSubTexture(0, ordinal() * 0.25, 1, 0.25); } public boolean canVoid(RecipeCapability capability) { @@ -76,7 +56,6 @@ public String getSerializedName() { return localeName; } - @Override public @NotNull String getTooltip() { return localeName; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java index bcb712afa10..f1ebb004de2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.machine.feature.multiblock; -import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; import com.gregtechceu.gtceu.api.machine.feature.IMachineFeature; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -133,9 +132,4 @@ default GTRecipe modifyRecipe(GTRecipe recipe) { * @param textList the text list to add to. */ default void addMultiText(List textList) {} - - /** - * Attach part's tooltips to the controller. - */ - default void attachFancyTooltipsToController(MultiblockControllerMachine controller, TooltipsPanel tooltipsPanel) {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 33e7bef0004..1cbab0e678b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -361,32 +361,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return panel; } - /* - * @Override - * public ModularUI createUI(Player entityPlayer) { - * return new ModularUI(176, 166, this, entityPlayer) - * .background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure)) - * .widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId())) - * .widget(new ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54) - * .setProgressTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure), - * GuiTextures.PROGRESS_BAR_BOILER_HEAT) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setDynamicHoverTips(pct -> I18n.get("gtceu.multiblock.large_boiler.temperature", - * currentTemperature + 274, getMaxTemperature() + 274))) - * .widget(new TankWidget(waterTank.getStorages()[0], 83, 26, 10, 54, false, true) - * .setShowAmount(false) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure))) - * .widget(new TankWidget(steamTank.getStorages()[0], 70, 26, 10, 54, true, false) - * .setShowAmount(false) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure))) - * .widget(new ImageWidget(43, 44, 18, 18, GuiTextures.CANISTER_OVERLAY_STEAM.get(isHighPressure))) - * .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - * GuiTextures.SLOT_STEAM.get(isHighPressure), 7, 84, true)); - * } - */ - ////////////////////////////////////// // ********* Client *********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java index 8434c9c9fc3..a1683caf644 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java @@ -4,19 +4,18 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.trait.*; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ISubscription; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -192,12 +191,12 @@ public void clientTick() { // ******* Rendering ********// ////////////////////////////////////// @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.WRENCH)) { if (!player.isShiftKeyDown()) { if (!hasFrontFacing() || side != getFrontFacing()) { - return GuiTextures.TOOL_IO_FACING_ROTATION; + return GTGuiTextures.TOOL_IO_FACING_ROTATION; } } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java index b11770867d6..b4b609c5848 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java @@ -1,22 +1,21 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.trait.feature.IFrontFacingTrait; import com.gregtechceu.gtceu.api.machine.trait.feature.IInteractionTrait; import com.gregtechceu.gtceu.api.machine.trait.feature.IRenderingTrait; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; @@ -300,8 +299,8 @@ public boolean shouldRenderGridOverlay(Player player, BlockPos pos, BlockState s } @Override - public @Nullable ResourceTexture getGridOverlayIcon(Player player, BlockPos pos, BlockState state, - Set toolTypes, Direction side) { + public @Nullable UITexture getGridOverlayIcon(Player player, BlockPos pos, BlockState state, + Set toolTypes, Direction side) { if (toolTypes.contains(GTToolType.WRENCH)) { if (!player.isShiftKeyDown()) { if (!machine.hasFrontFacing() || side != machine.getFrontFacing()) { @@ -310,14 +309,14 @@ public boolean shouldRenderGridOverlay(Player player, BlockPos pos, BlockState s var canSwitchFluidOutputToSide = supportsAutoOutputFluids() && fluidOutputDirectionValidator.test(side) && side != getFluidOutputDirection(); if (canSwitchItemOutputToSide || canSwitchFluidOutputToSide) - return GuiTextures.TOOL_IO_FACING_ROTATION; + return GTGuiTextures.TOOL_IO_FACING_ROTATION; } } } if (toolTypes.contains(GTToolType.SCREWDRIVER)) { if (side == getItemOutputDirection() || side == getFluidOutputDirection()) { - if (player.isShiftKeyDown()) return GuiTextures.TOOL_ALLOW_INPUT; - return GuiTextures.TOOL_AUTO_OUTPUT; + if (player.isShiftKeyDown()) return GTGuiTextures.TOOL_ALLOW_INPUT; + return GTGuiTextures.TOOL_AUTO_OUTPUT; } } return null; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java index 82bb38af3ad..7a66eb2f53f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java @@ -5,8 +5,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; @@ -27,8 +25,6 @@ import com.gregtechceu.gtceu.common.cover.MachineControllerCover; import com.gregtechceu.gtceu.utils.GTMath; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; - import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; @@ -48,7 +44,7 @@ import java.util.*; -public class RecipeLogic extends MachineTrait implements IWorkable, IFancyTooltip { +public class RecipeLogic extends MachineTrait implements IWorkable { public static final MachineTraitType TYPE = new MachineTraitType<>(RecipeLogic.class, false); @@ -624,16 +620,7 @@ public void updateSound() { } } - @Override - public IGuiTexture getFancyTooltipIcon() { - if (showFancyTooltip()) { - return GuiTextures.INSUFFICIENT_INPUT; - } - return IGuiTexture.EMPTY; - } - - @Override - public List getFancyTooltip() { + public List getReasonText() { if (isWaiting() && waitingReason != null) { return List.of(waitingReason); } @@ -643,8 +630,7 @@ public List getFancyTooltip() { return Collections.emptyList(); } - @Override - public boolean showFancyTooltip() { + public boolean hasReasonText() { return waitingReason != null || !failureReasons.isEmpty(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IRenderingTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IRenderingTrait.java index bdf175dd2b2..29c0f345333 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IRenderingTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IRenderingTrait.java @@ -1,8 +1,7 @@ package com.gregtechceu.gtceu.api.machine.trait.feature; import com.gregtechceu.gtceu.api.item.tool.GTToolType; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -35,9 +34,9 @@ default boolean shouldRenderGridOverlay(Player player, BlockPos pos, BlockState * Called when the machine grid overlay is being rendered to determine the icon to be rendered within the grid * segment on a specifc side. */ - default @Nullable ResourceTexture getGridOverlayIcon(Player player, BlockPos pos, BlockState state, - Set toolTypes, - Direction side) { + default @Nullable UITexture getGridOverlayIcon(Player player, BlockPos pos, BlockState state, + Set toolTypes, + Direction side) { return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockInfo.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockInfo.java new file mode 100644 index 00000000000..ab5e0fb0cd4 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockInfo.java @@ -0,0 +1,143 @@ +package com.gregtechceu.gtceu.api.pattern; + +import com.gregtechceu.gtceu.client.util.FacadeBlockAndTintGetter; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import lombok.Getter; +import lombok.Setter; + +import java.util.function.Consumer; + +@Setter +public class BlockInfo { + + public static final BlockInfo EMPTY; + @Getter + private BlockState blockState; + private boolean hasBlockEntity; + private CompoundTag tag; + private ItemStack itemStack; + private Consumer postCreate; + private BlockEntity lastEntity; + + public BlockInfo(Block block) { + this(block.defaultBlockState()); + } + + public BlockInfo(BlockState blockState) { + this(blockState, false); + } + + public BlockInfo(BlockState blockState, boolean hasBlockEntity) { + this(blockState, hasBlockEntity, (ItemStack) null, null); + } + + public BlockInfo(BlockState blockState, Consumer postCreate) { + this(blockState, true, (ItemStack) null, postCreate); + } + + public BlockInfo(BlockState blockState, boolean hasBlockEntity, ItemStack itemStack, + Consumer postCreate) { + this.blockState = blockState; + this.hasBlockEntity = hasBlockEntity; + this.itemStack = itemStack; + this.postCreate = postCreate; + } + + public static BlockInfo fromBlockState(BlockState state) { + try { + if (state.getBlock() instanceof EntityBlock) { + BlockEntity blockEntity = ((EntityBlock) state.getBlock()).newBlockEntity(BlockPos.ZERO, state); + if (blockEntity != null) { + return new BlockInfo(state, true); + } + } + } catch (Exception var2) {} + + return new BlockInfo(state); + } + + public static BlockInfo fromBlock(Block block) { + return fromBlockState(block.defaultBlockState()); + } + + public boolean hasBlockEntity() { + return this.hasBlockEntity; + } + + public BlockEntity getBlockEntity(BlockPos pos) { + if (this.hasBlockEntity) { + Block var3 = this.blockState.getBlock(); + if (var3 instanceof EntityBlock) { + EntityBlock entityBlock = (EntityBlock) var3; + if (this.lastEntity != null && this.lastEntity.getBlockPos().equals(pos)) { + return this.lastEntity; + } + + this.lastEntity = entityBlock.newBlockEntity(pos, this.blockState); + if (this.tag != null && this.lastEntity != null) { + CompoundTag compoundTag2 = this.lastEntity.saveWithoutMetadata(); + CompoundTag compoundTag3 = compoundTag2.copy(); + compoundTag2.merge(this.tag); + if (!compoundTag2.equals(compoundTag3)) { + this.lastEntity.load(compoundTag2); + } + } + + if (this.postCreate != null) { + this.postCreate.accept(this.lastEntity); + } + + return this.lastEntity; + } + } + + return null; + } + + public BlockEntity getBlockEntity(Level level, BlockPos pos) { + BlockEntity entity = this.getBlockEntity(pos); + if (entity != null) { + entity.setLevel(level); + } + + return entity; + } + + public ItemStack getItemStackForm() { + return this.itemStack == null ? new ItemStack(this.blockState.getBlock()) : this.itemStack; + } + + public ItemStack getItemStackForm(BlockAndTintGetter level, BlockPos pos) { + return this.itemStack != null ? this.itemStack : this.blockState.getBlock().getCloneItemStack( + new FacadeBlockAndTintGetter(level, pos, this.blockState, null), pos, this.blockState); + } + + public void apply(Level world, BlockPos pos) { + world.setBlockAndUpdate(pos, this.blockState); + BlockEntity blockEntity = this.getBlockEntity(pos); + if (blockEntity != null) { + world.setBlockEntity(blockEntity); + } + } + + public void clearBlockEntityCache() { + this.lastEntity = null; + } + + public BlockInfo() {} + + static { + EMPTY = new BlockInfo(Blocks.AIR); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java index afe594b39f5..e4054aab202 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/BlockPattern.java @@ -13,8 +13,6 @@ import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java index cc1c36353af..4c9875c3ac9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java @@ -3,32 +3,42 @@ import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.RotationState; -import com.lowdragmc.lowdraglib.utils.BlockInfo; -import com.lowdragmc.lowdraglib.utils.Builder; - import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import lombok.Getter; + +import java.util.*; import java.util.function.Supplier; public class MultiblockShapeInfo { + @Getter private final BlockInfo[][][] blocks; // [z][y][x] public MultiblockShapeInfo(BlockInfo[][][] blocks) { this.blocks = blocks; } - public BlockInfo[][][] getBlocks() { - return blocks; - } - public static ShapeInfoBuilder builder() { return new ShapeInfoBuilder(); } - public static class ShapeInfoBuilder extends Builder { + public static class ShapeInfoBuilder { + + protected List shape = new ArrayList<>(); + protected Map symbolMap = new LinkedHashMap<>(); + + public ShapeInfoBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapeInfoBuilder where(char symbol, BlockInfo value) { + this.symbolMap.put(symbol, value); + return this; + } public ShapeInfoBuilder where(char symbol, BlockState blockState) { return where(symbol, BlockInfo.fromBlockState(blockState)); @@ -53,11 +63,29 @@ public ShapeInfoBuilder where(char symbol, MetaMachineBlock machine, Direction f } private BlockInfo[][][] bake() { - return this.bakeArray(BlockInfo.class, BlockInfo.EMPTY); + BlockInfo[][][] Ts = new BlockInfo[shape.get(0)[0].length()][shape.get(0).length][shape.size()]; + for (int z = 0; z < shape.size(); z++) { // z + String[] aisleEntry = shape.get(z); + for (int y = 0; y < shape.get(0).length; y++) { + String columnEntry = aisleEntry[y]; + for (int x = 0; x < columnEntry.length(); x++) { + BlockInfo info = symbolMap.getOrDefault(columnEntry.charAt(x), BlockInfo.EMPTY); + Ts[x][y][z] = info; + } + } + } + return Ts; } public MultiblockShapeInfo build() { return new MultiblockShapeInfo(bake()); } + + public ShapeInfoBuilder shallowCopy() { + ShapeInfoBuilder builder = new ShapeInfoBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.symbolMap = new HashMap<>(this.symbolMap); + return builder; + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java index fcbab48ad80..7ae1256b187 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/Predicates.java @@ -22,8 +22,6 @@ import com.gregtechceu.gtceu.common.machine.multiblock.electric.PowerSubstationMachine; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.network.chat.Component; import net.minecraft.tags.TagKey; import net.minecraft.world.item.DyeColor; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/TraceabilityPredicate.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/TraceabilityPredicate.java index e0d7d1f3913..271bd558a4e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/TraceabilityPredicate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/TraceabilityPredicate.java @@ -3,8 +3,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.pattern.predicates.SimplePredicate; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.network.chat.Component; import java.util.ArrayList; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlockTag.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlockTag.java index 7c2e954ba2c..0e0edd2a699 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlockTag.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlockTag.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern.predicates; -import com.lowdragmc.lowdraglib.utils.BlockInfo; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlocks.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlocks.java index 09fd7778292..5be1e09a0fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlocks.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateBlocks.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern.predicates; -import com.lowdragmc.lowdraglib.utils.BlockInfo; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluidTag.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluidTag.java index b25e333d8ed..3409543be6e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluidTag.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluidTag.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern.predicates; -import com.lowdragmc.lowdraglib.utils.BlockInfo; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluids.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluids.java index 8d5265478d9..ab2654df396 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateFluids.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern.predicates; -import com.lowdragmc.lowdraglib.utils.BlockInfo; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateStates.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateStates.java index 349b90721a5..4a9b1fd6d2d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateStates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/PredicateStates.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.pattern.predicates; -import com.lowdragmc.lowdraglib.utils.BlockInfo; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/SimplePredicate.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/SimplePredicate.java index 552d450fed2..00943cd0678 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/SimplePredicate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/predicates/SimplePredicate.java @@ -2,14 +2,13 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.MultiblockState; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; import com.gregtechceu.gtceu.api.pattern.error.PatternStringError; import com.gregtechceu.gtceu.api.pattern.error.SinglePredicateError; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java index d0a7a3849ec..f80e60a5f34 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java @@ -3,19 +3,18 @@ import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.PipeBlockItem; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.pipenet.IPipeType; import com.gregtechceu.gtceu.client.util.PoseStackExtensions; import com.gregtechceu.gtceu.client.util.RenderUtil; import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.common.item.tool.rotation.CustomBlockRotations; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; @@ -37,6 +36,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; import lombok.experimental.ExtensionMethod; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.joml.Quaternionfc; import org.joml.Vector3f; @@ -78,9 +78,11 @@ public static void renderBlockHighlight(PoseStack poseStack, Camera camera, Bloc gridHighlight = new IToolGridHighlight() { @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, - Set toolTypes, Direction side) { - return behavior.showSideTip(state, side) ? GuiTextures.TOOL_FRONT_FACING_ROTATION : + public @Nullable UITexture sideTips(@NotNull Player player, @NotNull BlockPos pos, + @NotNull BlockState state, + @NotNull Set toolTypes, + @NotNull Direction side) { + return behavior.showSideTip(state, side) ? GTGuiTextures.TOOL_FRONT_FACING_ROTATION : null; } }; @@ -116,7 +118,7 @@ public static void renderBlockHighlight(PoseStack poseStack, Camera camera, Bloc poseStack.scale(1f / 16, 1f / 16, 0); poseStack.translate(-8, -8, 0); - drawResourceTexture(poseStack, multiBufferSource, texture, 0xffffffff, + drawOverlayTexture(poseStack, multiBufferSource, texture, 0xffffffff, 4, 4, 8, 8); RenderSystem.disableBlend(); @@ -134,7 +136,7 @@ public static void renderBlockHighlight(PoseStack poseStack, Camera camera, Bloc poseStack.pushPose(); drawGridOverlays(poseStack, multiBufferSource, cameraPos, target, - side -> coverable.hasCover(side) ? null : GuiTextures.TOOL_ATTACH_COVER); + side -> coverable.hasCover(side) ? null : GTGuiTextures.TOOL_ATTACH_COVER); poseStack.popPose(); } @@ -160,7 +162,7 @@ public static void renderBlockHighlight(PoseStack poseStack, Camera camera, Bloc private static float bColour; private static void drawGridOverlays(PoseStack poseStack, MultiBufferSource bufferSource, Vec3 cameraPos, - BlockHitResult blockHitResult, Function texture) { + BlockHitResult blockHitResult, Function texture) { rColour = gColour = 0.2F + (float) Math.sin((System.currentTimeMillis() % (Mth.PI * 800)) / 800) / 2; bColour = 1f; BlockPos blockPos = blockHitResult.getBlockPos(); @@ -199,12 +201,12 @@ private static void drawGridOverlays(PoseStack poseStack, MultiBufferSource buff shiftX.rotate(rotation); shiftY.rotate(rotation); - ResourceTexture leftBlocked = texture.apply(left); - ResourceTexture rightBlocked = texture.apply(right); - ResourceTexture topBlocked = texture.apply(top); - ResourceTexture bottomBlocked = texture.apply(bottom); - ResourceTexture frontBlocked = texture.apply(front); - ResourceTexture backBlocked = texture.apply(back); + UITexture leftBlocked = texture.apply(left); + UITexture rightBlocked = texture.apply(right); + UITexture topBlocked = texture.apply(top); + UITexture bottomBlocked = texture.apply(bottom); + UITexture frontBlocked = texture.apply(front); + UITexture backBlocked = texture.apply(back); topRight.add(cubeCenter); bottomRight.add(cubeCenter); @@ -241,30 +243,30 @@ private static void drawGridOverlays(PoseStack poseStack, MultiBufferSource buff if (leftBlocked != null) { int color = attachSide == left ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, leftBlocked, color, 0, 6, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, leftBlocked, color, 0, 6, MARGIN); } if (topBlocked != null) { int color = attachSide == top ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, topBlocked, color, 6, 12, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, topBlocked, color, 6, 12, MARGIN); } if (rightBlocked != null) { int color = attachSide == right ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, rightBlocked, color, 12, 6, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, rightBlocked, color, 12, 6, MARGIN); } if (bottomBlocked != null) { int color = attachSide == bottom ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, bottomBlocked, color, 6, 0, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, bottomBlocked, color, 6, 0, MARGIN); } if (frontBlocked != null) { int color = attachSide == front ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, frontBlocked, color, 6, 6, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, frontBlocked, color, 6, 6, MARGIN); } if (backBlocked != null) { int color = attachSide == back ? 0xffffffff : 0x44ffffff; - drawResourceTextureWithMargin(poseStack, bufferSource, backBlocked, color, 0, 0, 4, 4, MARGIN); - drawResourceTextureWithMargin(poseStack, bufferSource, backBlocked, color, 12, 0, 4, 4, MARGIN); - drawResourceTextureWithMargin(poseStack, bufferSource, backBlocked, color, 0, 12, 4, 4, MARGIN); - drawResourceTextureWithMargin(poseStack, bufferSource, backBlocked, color, 12, 12, 4, 4, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, backBlocked, color, 0, 0, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, backBlocked, color, 12, 0, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, backBlocked, color, 0, 12, MARGIN); + drawOverlayTextureWithMargin(poseStack, bufferSource, backBlocked, color, 12, 12, MARGIN); } RenderSystem.disableBlend(); RenderSystem.enableDepthTest(); @@ -286,13 +288,13 @@ private static void drawLine(PoseStack.Pose pose, VertexConsumer buffer, Vector3 .endVertex(); } - private static void drawResourceTexture(PoseStack poseStack, MultiBufferSource bufferSource, - ResourceTexture texture, int color, - float x, float y, float w, float h) { - VertexConsumer consumer = bufferSource.getBuffer(RenderType.text(texture.imageLocation)); + private static void drawOverlayTexture(PoseStack poseStack, MultiBufferSource bufferSource, + UITexture texture, int color, + float x, float y, float w, float h) { + VertexConsumer consumer = bufferSource.getBuffer(RenderType.text(texture.location)); var pose = poseStack.last().pose(); - float u0 = texture.offsetX, v0 = texture.offsetY; - float u1 = texture.imageWidth, v1 = texture.imageHeight; + float u0 = texture.u0, v0 = texture.v0; + float u1 = texture.u1, v1 = texture.v1; // spotless:off consumer.vertex(pose, x, y + h, 0).color(color).uv(u0, v0 + v1).uv2(LightTexture.FULL_BRIGHT).endVertex(); consumer.vertex(pose, x + w, y + h, 0).color(color).uv(u0 + u1, v0 + v1).uv2(LightTexture.FULL_BRIGHT).endVertex(); @@ -301,10 +303,10 @@ private static void drawResourceTexture(PoseStack poseStack, MultiBufferSource b // spotless:on } - private static void drawResourceTextureWithMargin(PoseStack poseStack, MultiBufferSource bufferSource, - ResourceTexture texture, int color, - float x, float y, float w, float h, float m) { - drawResourceTexture(poseStack, bufferSource, texture, color, - x + m, y + m, w - 2 * m, h - 2 * m); + private static void drawOverlayTextureWithMargin(PoseStack poseStack, MultiBufferSource bufferSource, + UITexture texture, int color, + float x, float y, float m) { + drawOverlayTexture(poseStack, bufferSource, texture, color, + x + m, y + m, (float) 4 - 2 * m, (float) 4 - 2 * m); } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java index c4bdbffa385..6c772128c1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/MultiblockInWorldPreviewRenderer.java @@ -5,11 +5,11 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.MultiblockShapeInfo; import com.lowdragmc.lowdraglib.client.scene.WorldSceneRenderer; import com.lowdragmc.lowdraglib.client.scene.forge.WorldSceneRendererImpl; -import com.lowdragmc.lowdraglib.utils.BlockInfo; import com.lowdragmc.lowdraglib.utils.TrackedDummyWorld; import net.minecraft.client.Camera; @@ -203,7 +203,7 @@ public static void showPreview(BlockPos pos, MultiblockControllerMachine control } } - LEVEL.addBlocks(blockMap); + // LEVEL.addBlocks(blockMap); if (controllerBase != null) { LEVEL.setInnerBlockEntity(controllerBase.self()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index 4adfabd4de4..c50eb91d80b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -6,22 +6,21 @@ import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.block.CableBlock; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.pipelike.cable.*; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -322,8 +321,8 @@ public static void onBlockEntityRegister(BlockEntityType cable ////////////////////////////////////// @Override - public ResourceTexture getPipeTexture(boolean isBlock) { - return isBlock ? GuiTextures.TOOL_WIRE_CONNECT : GuiTextures.TOOL_WIRE_BLOCK; + public UITexture getPipeTexture(boolean isBlock) { + return isBlock ? GTGuiTextures.TOOL_WIRE_CONNECT : GTGuiTextures.TOOL_WIRE_BLOCK; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index b8d8f77221f..be8639dc960 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -28,7 +28,6 @@ import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -487,15 +486,6 @@ protected boolean createManualIOModeRow() { return true; } - @NotNull - protected String getUITitle() { - return "cover.conveyor.title"; - } - - protected void buildAdditionalUI(WidgetGroup group) { - // Do nothing in the base implementation. This is intended to be overridden by subclasses. - } - protected void configureFilter() { // Do nothing in the base implementation. This is intended to be overridden by subclasses. } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java index 3a82b270b77..8a3e2ae9051 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java @@ -50,7 +50,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class MachineControllerCover extends CoverBehavior implements IMuiCover {// IUICover { +public class MachineControllerCover extends CoverBehavior implements IMuiCover { @SaveField @Getter diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 47304523c37..6fe1ae07372 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; @@ -21,8 +20,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.pipelike.item.ItemNetHandler; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -33,7 +30,6 @@ import lombok.Getter; import lombok.Setter; -import org.jetbrains.annotations.NotNull; import java.util.Iterator; import java.util.Map; @@ -167,13 +163,6 @@ public void clearBuffer() { ////////////////////////////////////// // *********** GUI ***********// - ////////////////////////////////////// - - @Override - @NotNull - protected String getUITitle() { - return "cover.robotic_arm.title"; - } @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, @@ -196,18 +185,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .setEnabledIf($ -> shouldShowStackSize())); } - @Override - protected void buildAdditionalUI(WidgetGroup group) { - group.addWidget( - new EnumSelectorWidget<>(146, 45, 20, 20, TransferMode.values(), transferMode, this::setTransferMode)); - - this.stackSizeInput = new IntInputWidget(64, 45, 80, 20, - () -> globalTransferLimit, val -> globalTransferLimit = val); - configureStackSizeInput(); - - group.addWidget(this.stackSizeInput); - } - public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java index 66647e0bff2..0ebf805ce78 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java @@ -4,9 +4,6 @@ import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.IMuiCover; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; @@ -19,16 +16,10 @@ import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.client.mui.screen.UISettings; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.List; @@ -85,33 +76,4 @@ public void createCoverUIRows(Flow parent, SidedPosGuiData data, PanelSyncManage .margin(3) .coverChildren(); } - - @Override - public @Nullable IFancyConfigurator getConfigurator() { - return new StorageCoverConfigurator(); - } - - private class StorageCoverConfigurator implements IFancyConfigurator { - - @Override - public Component getTitle() { - return Component.translatable("cover.storage.title"); - } - - @Override - public IGuiTexture getIcon() { - return GuiTextures.STORAGE_ICON; - } - - @Override - public Widget createConfigurator() { - final var group = new WidgetGroup(0, 0, 126, 87); - - for (int slot = 0; slot < SIZE; slot++) { - group.addWidget(new SlotWidget(inventory, slot, 7 + (slot % 6) * 18, 21 + (slot / 6) * 18)); - } - - return group; - } - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java index 137f7c5d7d4..eda385414aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java @@ -1,11 +1,6 @@ package com.gregtechceu.gtceu.common.cover.data; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - -public enum DistributionMode implements EnumSelectorWidget.SelectableEnum { +public enum DistributionMode { ROUND_ROBIN_GLOBAL("round_robin_global"), ROUND_ROBIN_PRIO("round_robin_prio"), @@ -20,13 +15,7 @@ public enum DistributionMode implements EnumSelectorWidget.SelectableEnum { this.localeName = localeName; } - @Override public String getTooltip() { return "cover.conveyor.distribution." + localeName; } - - @Override - public IGuiTexture getIcon() { - return new ResourceTexture("gtceu:textures/gui/icon/distribution_mode/" + localeName + ".png"); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java index c7ca25c8239..976176eb3c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java @@ -1,10 +1,6 @@ package com.gregtechceu.gtceu.common.cover.data; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; import net.minecraft.MethodsReturnNonnullByDefault; @@ -12,7 +8,7 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public enum FilterMode implements EnumSelectorWidget.SelectableEnum { +public enum FilterMode { FILTER_INSERT("filter_insert"), FILTER_EXTRACT("filter_extract"), @@ -26,16 +22,10 @@ public enum FilterMode implements EnumSelectorWidget.SelectableEnum { this.localeName = localeName; } - @Override public String getTooltip() { return "cover.filter.mode." + this.localeName; } - @Override - public IGuiTexture getIcon() { - return new ResourceTexture("gtceu:textures/gui/icon/filter_mode/" + localeName + ".png"); - } - public boolean filters(IO io) { return (this == FILTER_INSERT && io.support(IO.IN)) || (this == FILTER_EXTRACT && io.support(IO.OUT)) || (this == FILTER_BOTH); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java index c03b48b0a28..a03db0c369c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java @@ -1,11 +1,8 @@ package com.gregtechceu.gtceu.common.cover.data; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; +import org.jetbrains.annotations.NotNull; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - -public enum ManualIOMode implements EnumSelectorWidget.SelectableEnum { +public enum ManualIOMode { DISABLED("disabled"), FILTERED("filtered"), @@ -19,13 +16,7 @@ public enum ManualIOMode implements EnumSelectorWidget.SelectableEnum { this.localeName = localeName; } - @Override - public String getTooltip() { + public @NotNull String getTooltip() { return "cover.universal.manual_import_export.mode." + localeName; } - - @Override - public IGuiTexture getIcon() { - return new ResourceTexture("gtceu:textures/gui/icon/manual_io_mode/" + localeName + ".png"); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java index aefcf62a6f9..2253e08af62 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java @@ -1,13 +1,8 @@ package com.gregtechceu.gtceu.common.cover.data; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import lombok.Getter; -public enum TransferMode implements EnumSelectorWidget.SelectableEnum { +public enum TransferMode { TRANSFER_ANY("cover.robotic_arm.transfer_mode.transfer_any", "transfer_any", 1), TRANSFER_EXACT("cover.robotic_arm.transfer_mode.transfer_exact", "transfer_exact", 1024), @@ -15,13 +10,10 @@ public enum TransferMode implements EnumSelectorWidget.SelectableEnum { @Getter public final String tooltip; - @Getter - public final IGuiTexture icon; public final int maxStackSize; TransferMode(String tooltip, String textureName, int maxStackSize) { this.tooltip = tooltip; this.maxStackSize = maxStackSize; - this.icon = new ResourceTexture("gtceu:textures/gui/icon/transfer_mode/" + textureName + ".png"); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/VoidingMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/VoidingMode.java index bed98901158..efe46810aba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/VoidingMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/VoidingMode.java @@ -1,26 +1,18 @@ package com.gregtechceu.gtceu.common.cover.data; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import lombok.Getter; -public enum VoidingMode implements EnumSelectorWidget.SelectableEnum { +public enum VoidingMode { VOID_ANY("cover.voiding.voiding_mode.void_any", "void_any", 1), VOID_OVERFLOW("cover.voiding.voiding_mode.void_overflow", "void_overflow", 1024); @Getter public final String tooltip; - @Getter - public final IGuiTexture icon; public final int maxStackSize; VoidingMode(String tooltip, String textureName, int maxStackSize) { this.tooltip = tooltip; this.maxStackSize = maxStackSize; - this.icon = new ResourceTexture("gtceu:textures/gui/icon/voiding_mode/" + textureName + ".png"); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java index e0bb8705c01..d15091cedce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; @@ -20,8 +19,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -32,7 +29,6 @@ import lombok.Getter; import lombok.Setter; -import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -147,23 +143,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .setEnabledIf($ -> shouldShowStackSize())); } - @Override - protected @NotNull String getUITitle() { - return "cover.item.voiding.advanced.title"; - } - - @Override - protected void buildAdditionalUI(WidgetGroup group) { - group.addWidget( - new EnumSelectorWidget<>(146, 20, 20, 20, VoidingMode.values(), voidingMode, this::setVoidingMode)); - - this.stackSizeInput = new IntInputWidget(64, 20, 80, 20, - () -> globalVoidingLimit, val -> globalVoidingLimit = val); - configureStackSizeInput(); - - group.addWidget(this.stackSizeInput); - } - @Override protected void configureFilter() { if (filterHandler.getFilter() instanceof SimpleItemFilter filter) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java index 2369890bb05..c883f5442fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java @@ -2,8 +2,8 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverDefinition; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; @@ -11,10 +11,9 @@ import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.cover.PumpCover; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTMath; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -113,10 +112,10 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.SOFT_MALLET)) { - return isWorkingEnabled() ? GuiTextures.TOOL_START : GuiTextures.TOOL_PAUSE; + return isWorkingEnabled() ? GTGuiTextures.TOOL_START : GTGuiTextures.TOOL_PAUSE; } return super.sideTips(player, pos, state, toolTypes, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java index a4bcfdbacbe..9108db2ac07 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java @@ -4,16 +4,15 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.cover.ConveyorCover; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -27,7 +26,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandler; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Set; @@ -95,11 +93,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage settings)); } - @NotNull - protected String getUITitle() { - return "cover.item.voiding.title"; - } - @Override public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { if (!isRemote()) { @@ -118,12 +111,12 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { var superTips = super.sideTips(player, pos, state, toolTypes, side); if (superTips != null) return superTips; if (toolTypes.contains(GTToolType.SOFT_MALLET)) { - return isWorkingEnabled() ? GuiTextures.TOOL_START : GuiTextures.TOOL_PAUSE; + return isWorkingEnabled() ? GTGuiTextures.TOOL_START : GTGuiTextures.TOOL_PAUSE; } return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index a2d59d52967..38a7c28b58d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -23,6 +23,7 @@ import com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.mui.factory.PanelFactory; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; import com.gregtechceu.gtceu.api.pattern.MultiblockShapeInfo; import com.gregtechceu.gtceu.api.pattern.Predicates; @@ -57,8 +58,6 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.ChatFormatting; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java index a3aed30e864..112b69f65a1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java @@ -9,11 +9,8 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; -import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory; - import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; @@ -62,23 +59,6 @@ public static boolean isIntegratedCircuit(ItemStack itemStack) { return isCircuit; } - // deprecated, not needed (for now) - @Deprecated - public static void adjustConfiguration(HeldItemUIFactory.HeldItemHolder holder, int amount) { - adjustConfiguration(holder.getHeld(), amount); - holder.markAsDirty(); - } - - // deprecated, not needed (for now) - @Deprecated - public static void adjustConfiguration(ItemStack stack, int amount) { - if (!isIntegratedCircuit(stack)) return; - int configuration = getCircuitConfiguration(stack); - configuration += amount; - configuration = Mth.clamp(configuration, 0, CIRCUIT_MAX); - setCircuitConfiguration(stack, configuration); - } - @Override public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag isAdvanced) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java index c0af0800eec..18be8f55fe6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java @@ -5,24 +5,13 @@ import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.UITemplate; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.item.ComponentItem; import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.api.item.component.IItemLifeCycle; -import com.gregtechceu.gtceu.api.item.component.IItemUIFactory; import com.gregtechceu.gtceu.common.data.GTItems; -import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory; -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.sounds.SoundEvents; @@ -47,12 +36,11 @@ import com.tterrag.registrate.util.entry.ItemEntry; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import oshi.util.tuples.Triplet; import top.theillusivec4.curios.api.CuriosApi; import java.util.*; -public class ItemMagnetBehavior implements IInteractionItem, IItemLifeCycle, IAddInformation, IItemUIFactory { +public class ItemMagnetBehavior implements IInteractionItem, IItemLifeCycle, IAddInformation { public static final String FILTER_TAG = "MagnetFilter"; public static final String FILTER_ORDINAL_TAG = "FilterOrdinal"; @@ -66,57 +54,12 @@ public ItemMagnetBehavior(int range) { MinecraftForge.EVENT_BUS.register(this); } - @Override - public ModularUI createUI(HeldItemUIFactory.HeldItemHolder holder, Player entityPlayer) { - var held = holder.getHeld(); - var tag = held.getOrCreateTag(); - var selected = Filter.get(tag.getInt(FILTER_ORDINAL_TAG)); - var widgets = new HashSet>(); - var stacks = new HashMap(); - var ui = new ModularUI(176, 157, holder, entityPlayer) - .background(GuiTextures.BACKGROUND) - .widget(new EnumSelectorWidget<>(146, 5, 20, 20, - Filter.values(), selected, (val) -> updateSelection(tag, val, widgets))) - .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), GuiTextures.SLOT, 7, 75, true)); - for (var f : Filter.values()) { - var stack = f.getFilter(held); - stack.setTag(tag.getCompound(FILTER_TAG).copy()); - stacks.put(f, stack); - var description = new LabelWidget(5, 5, stack.getDescriptionId()); - var config = ItemFilter - .loadFilter(stack) - .openConfigurator((176 - 80) / 2, (60 - 55) / 2 + 15); - var visible = f == selected; - description.setVisible(visible); - config.setVisible(visible); - widgets.add(new Triplet<>(f, description, config)); - ui.widget(description); - ui.widget(config); - } - ui.registerCloseListener(() -> { - var selection = Filter.get(tag.getInt(FILTER_ORDINAL_TAG)); - tag.put(FILTER_TAG, stacks.get(selection).getOrCreateTag()); - }); - return ui; - } - - private void updateSelection(CompoundTag tag, Filter filter, Collection> widgets) { - tag.putInt(FILTER_ORDINAL_TAG, filter.ordinal()); - widgets.forEach(tri -> { - var visible = tri.getA() == filter; - tri.getB().setVisible(visible); - tri.getC().setVisible(visible); - }); - } - @Override public InteractionResultHolder use(Item item, Level world, @NotNull Player player, InteractionHand hand) { if (!player.level().isClientSide && player.isShiftKeyDown()) { player.displayClientMessage(Component.translatable(toggleActive(player.getItemInHand(hand)) ? "behavior.item_magnet.enabled" : "behavior.item_magnet.disabled"), true); - } else { - IItemUIFactory.super.use(item, world, player, hand); } return InteractionResultHolder.pass(player.getItemInHand(hand)); } @@ -287,7 +230,7 @@ public static boolean hasMagnetCurios(Player player) { } } - public enum Filter implements EnumSelectorWidget.SelectableEnum { + public enum Filter { SIMPLE(GTItems.ITEM_FILTER, "item_filter"), TAG(GTItems.TAG_FILTER, "item_tag_filter"); @@ -315,15 +258,5 @@ public ItemFilter loadFilter(ItemStack magnet) { public static Filter get(int ordinal) { return Filter.values()[ordinal]; } - - @Override - public @NotNull String getTooltip() { - return item.asItem().getDescriptionId(); - } - - @Override - public @NotNull IGuiTexture getIcon() { - return new ResourceTexture("gtceu:textures/item/" + texture + ".png"); - } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java index fa7cc09023a..b12dbb337e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java @@ -323,7 +323,7 @@ public int addScannerInfo(Player player, Level level, BlockPos pos, DisplayMode if (recipeLogic.getStatus().equals(RecipeLogic.Status.WAITING)) { list.add(Component.translatable("behavior.portable_scanner.divider")); list.add(Component.translatable("gtceu.multiblock.waiting")); - list.addAll(recipeLogic.getFancyTooltip()); + list.addAll(recipeLogic.getFailureReasons()); } else if (recipe != null) { list.add(Component.translatable("behavior.portable_scanner.divider")); var EUt = RecipeHelper.getRealEUtWithIO(recipe); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index 6f2cf812f04..2957e91b9c0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -3,13 +3,12 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.common.machine.trait.ConverterTrait; - -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -96,10 +95,11 @@ public boolean isFacingValid(Direction facing) { } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.SOFT_MALLET)) { - return this.isFeToEu() ? GuiTextures.TOOL_SWITCH_CONVERTER_NATIVE : GuiTextures.TOOL_SWITCH_CONVERTER_EU; + return this.isFeToEu() ? GTGuiTextures.TOOL_SWITCH_CONVERTER_NATIVE : + GTGuiTextures.TOOL_SWITCH_CONVERTER_EU; } return super.sideTips(player, pos, state, toolTypes, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java index 4828888116c..14b77a88f4e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java @@ -5,21 +5,20 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.IControllable; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -223,10 +222,10 @@ public void setWorkingEnabled(boolean workingEnabled) { } @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.SOFT_MALLET)) { - return isWorkingEnabled ? GuiTextures.TOOL_PAUSE : GuiTextures.TOOL_START; + return isWorkingEnabled ? GTGuiTextures.TOOL_PAUSE : GTGuiTextures.TOOL_START; } return super.sideTips(player, pos, state, toolTypes, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 1aecbed33cf..15b68dc69c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -32,6 +32,7 @@ import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; import com.gregtechceu.gtceu.api.pattern.Predicates; @@ -59,8 +60,6 @@ import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java index 237ecc5ec9b..54b74b3e6e1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java @@ -38,8 +38,6 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index d3c71b5451c..10f0d0d0da3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -6,7 +6,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.util.TimedProgressSupplier; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; @@ -88,15 +87,12 @@ public class HPCAMachine extends WorkableElectricMultiblockMachine @SaveField private double temperature = IDLE_TEMPERATURE; // start at idle temperature - private final TimedProgressSupplier progressSupplier; - @Nullable protected TickableSubscription tickSubs; public HPCAMachine(BlockEntityCreationInfo info) { super(info); this.energyContainer = new EnergyContainerList(new ArrayList<>()); - this.progressSupplier = new TimedProgressSupplier(200, 47, false); this.hpcaHandler = new HPCAGridHandler(this); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index ca374963189..11c998b88c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -36,8 +36,6 @@ import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index b7a05fa2d02..de1d7148ffb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.item.ComponentItem; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.pattern.BlockInfo; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; import com.gregtechceu.gtceu.api.pattern.Predicates; @@ -16,8 +17,6 @@ import com.gregtechceu.gtceu.common.item.behavior.LighterBehavior; import com.gregtechceu.gtceu.data.recipe.CustomTags; -import com.lowdragmc.lowdraglib.utils.BlockInfo; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Holder; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java index 1dc01efe414..b884ae82fea 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; -public class PrimitiveFancyUIWorkableMachine extends PrimitiveWorkableMachine implements IFancyUIMachine { +// TODO figure out how this should work with mui +public class PrimitiveFancyUIWorkableMachine extends PrimitiveWorkableMachine { public PrimitiveFancyUIWorkableMachine(BlockEntityCreationInfo info) { super(info); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 049a773e409..b2a9efa2313 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -4,26 +4,33 @@ import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IMiner; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.UITemplate; -import com.gregtechceu.gtceu.api.gui.widget.PredicatedImageWidget; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.steam.SteamWorkableMachine; import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.drawable.Icon; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; +import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; +import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid; +import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; +import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; +import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; -import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; - import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -31,12 +38,10 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; import net.minecraftforge.fluids.capability.IFluidHandler; import lombok.Getter; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -48,7 +53,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SteamMinerMachine extends SteamWorkableMachine implements IControllable, - IUIMachine, IDataInfoProvider, IMiner { + IDataInfoProvider, IMiner, IMuiMachine { @SaveField public final NotifiableItemStackHandler importItems; @@ -148,65 +153,72 @@ protected void autoOutput() { ////////////////////////////////////// // *********** GUI ***********// ////////////////////////////////////// - @Override - public ModularUI createUI(Player entityPlayer) { - int rowSize = (int) Math.sqrt(inventorySize); - - ModularUI builder = new ModularUI(175, 176, this, entityPlayer) - .background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure())); - builder.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - GuiTextures.SLOT_STEAM.get(isHighPressure()), 7, - 94, true)); - - for (int y = 0; y < rowSize; y++) { - for (int x = 0; x < rowSize; x++) { - int index = y * rowSize + x; - builder.widget(new SlotWidget(exportItems, index, 142 - rowSize * 9 + x * 18, 18 + y * 18, true, false) - .setBackgroundTexture(GuiTextures.SLOT_STEAM.get(isHighPressure()))); - } - } - builder.widget(new LabelWidget(5, 5, getBlockState().getBlock().getDescriptionId())); - builder.widget(new PredicatedImageWidget(79, 42, 18, 18, GuiTextures.INDICATOR_NO_STEAM.get(isHighPressure())) - .setPredicate(() -> !drainInput(true))); - builder.widget(new ImageWidget(7, 16, 105, 75, GuiTextures.DISPLAY_STEAM.get(isHighPressure()))); - builder.widget(new ComponentPanelWidget(10, 19, this::addDisplayText) - .setMaxWidthLimit(84)); - builder.widget(new ComponentPanelWidget(70, 19, this::addDisplayText2) - .setMaxWidthLimit(84)); - - return builder; + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + ModularPanel panel = GTGuis.createPanel(this, 176, 166); + + panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)); + int rowSize = 2; + + SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); + panel.child(new Grid() + .coverChildren() + .top(10) + .alignX(0.75f) + .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() + .slot(SyncHandlers.itemSlot(exportItems, index) + .slotGroup(group) + .changeListener((newItem, amount, client, init) -> { + if (amount) { + exportItems.onContentsChanged(); + } + }) + .accessibility(false, true)))) + .child(new ListWidget<>() + .top(10) + .alignX(0.25f) + .coverChildren() + .childSeparator(Icon.EMPTY_2PX) + .crossAxisAlignment(Alignment.CrossAxis.START) + .alignX(Alignment.CenterLeft).children(getDisplayTextWidgets())) + .child(SlotGroupWidget.playerInventory(true) + .left(7) + .bottom(7)); + + return panel; } - void addDisplayText(List textList) { + List getDisplayTextWidgets() { + List widgets = new ArrayList<>(); int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - textList.add(Component.translatable("gtceu.machine.miner.startx", this.getRecipeLogic().getX())); - textList.add(Component.translatable("gtceu.machine.miner.starty", this.getRecipeLogic().getY())); - textList.add(Component.translatable("gtceu.machine.miner.startz", this.getRecipeLogic().getZ())); - textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); + widgets.add( + IKey.lang("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX()).asWidget()); + widgets.add( + IKey.lang("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY()).asWidget()); + widgets.add( + IKey.lang("gtceu.machine.miner.z", getRecipeLogic().getZ(), getRecipeLogic().getMineZ()).asWidget()); + widgets.add(IKey.lang("gtceu.universal.tooltip.working_area", workingArea, workingArea).asWidget()); if (this.getRecipeLogic().isDone()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.done") - .withStyle(ChatFormatting.GREEN)); + widgets.add(IKey + .lang(Component.translatable("gtceu.multiblock.large_miner.done").withStyle(ChatFormatting.GREEN)) + .asWidget()); else if (this.getRecipeLogic().isWorking()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.working") - .withStyle(ChatFormatting.GOLD)); + widgets.add(IKey + .lang(Component.translatable("gtceu.multiblock.large_miner.working").withStyle(ChatFormatting.GOLD)) + .asWidget()); else if (!this.isWorkingEnabled()) - textList.add(Component.translatable("gtceu.multiblock.work_paused")); + widgets.add(IKey.lang("gtceu.multiblock.work_paused").asWidget()); if (getRecipeLogic().isInventoryFull()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.invfull") - .withStyle(ChatFormatting.RED)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.invfull") + .withStyle(ChatFormatting.RED)).asWidget()); if (exhaustVentTrait.isVentingBlocked()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.vent") - .withStyle(ChatFormatting.RED)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.vent") + .withStyle(ChatFormatting.RED)).asWidget()); else if (!drainInput(true)) - textList.add(Component.translatable("gtceu.multiblock.large_miner.steam") - .withStyle(ChatFormatting.RED)); - } - - void addDisplayText2(List textList) { - textList.add(Component.translatable("gtceu.machine.miner.minex", this.getRecipeLogic().getMineX())); - textList.add(Component.translatable("gtceu.machine.miner.miney", this.getRecipeLogic().getMineY())); - textList.add(Component.translatable("gtceu.machine.miner.minez", this.getRecipeLogic().getMineZ())); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.steam") + .withStyle(ChatFormatting.RED)).asWidget()); + return widgets; } @Override @@ -220,7 +232,6 @@ public boolean drainInput(boolean simulate) { return false; } - @NotNull @Override public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { if (mode == PortableScannerBehavior.DisplayMode.SHOW_ALL || diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index 7242f1f966b..a23f95bedd0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -6,8 +6,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java index bd4ddd559b7..b6222d85eed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.utils.Alignment; import com.gregtechceu.gtceu.api.mui.value.BoolValue; @@ -38,9 +39,6 @@ import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -374,8 +372,8 @@ private IWidget createPhantomLockeditemSlot(PanelSyncManager syncManager) { // ******* Rendering ********// ////////////////////////////////////// @Override - public @Nullable ResourceTexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, - Direction side) { + public @Nullable UITexture sideTips(Player player, BlockPos pos, BlockState state, Set toolTypes, + Direction side) { if (toolTypes.contains(GTToolType.SOFT_MALLET)) { if (side == getFrontFacing()) return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java index 23d9ea82583..8b1848cd82f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -799,6 +799,41 @@ public static class IDs { public static final UITexture HPCA_BRIDGE_COMPONENT = fullImage("textures/gui/widget/hpca/bridge_component.png"); public static final UITexture HPCA_COMPONENT_OUTLINE = fullImage("textures/gui/widget/hpca/component_outline.png"); + // MACHINE GRID OVERLAYS + + public static final UITexture TOOL_FRONT_FACING_ROTATION = fullImage( + "textures/gui/overlay/tool_front_facing_rotation.png"); + public static final UITexture TOOL_IO_FACING_ROTATION = fullImage( + "textures/gui/overlay/tool_io_facing_rotation.png"); + public static final UITexture TOOL_PAUSE = fullImage("textures/gui/overlay/tool_pause.png"); + public static final UITexture TOOL_START = fullImage("textures/gui/overlay/tool_start.png"); + public static final UITexture TOOL_COVER_SETTINGS = fullImage( + "textures/gui/overlay/tool_cover_settings.png"); + public static final UITexture TOOL_MUTE = fullImage("textures/gui/overlay/tool_mute.png"); + public static final UITexture TOOL_SOUND = fullImage("textures/gui/overlay/tool_sound.png"); + public static final UITexture TOOL_ALLOW_INPUT = fullImage( + "textures/gui/overlay/tool_allow_input.png"); + public static final UITexture TOOL_ATTACH_COVER = fullImage( + "textures/gui/overlay/tool_attach_cover.png"); + public static final UITexture TOOL_REMOVE_COVER = fullImage( + "textures/gui/overlay/tool_remove_cover.png"); + public static final UITexture TOOL_PIPE_BLOCK = fullImage( + "textures/gui/overlay/tool_pipe_block.png"); + public static final UITexture TOOL_PIPE_CONNECT = fullImage( + "textures/gui/overlay/tool_pipe_connect.png"); + public static final UITexture TOOL_WIRE_BLOCK = fullImage( + "textures/gui/overlay/tool_wire_block.png"); + public static final UITexture TOOL_WIRE_CONNECT = fullImage( + "textures/gui/overlay/tool_wire_connect.png"); + public static final UITexture TOOL_AUTO_OUTPUT = fullImage( + "textures/gui/overlay/tool_auto_output.png"); + public static final UITexture TOOL_DISABLE_AUTO_OUTPUT = fullImage( + "textures/gui/overlay/tool_disable_auto_output.png"); + public static final UITexture TOOL_SWITCH_CONVERTER_NATIVE = fullImage( + "textures/gui/overlay/tool_wire_block.png"); + public static final UITexture TOOL_SWITCH_CONVERTER_EU = fullImage( + "textures/gui/overlay/tool_wire_connect.png"); + // MISC public static void init() {/**/} diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java index 3108211f622..e55977acc66 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java @@ -20,8 +20,8 @@ public static ModularPanel createPanel(String name, int width, int height) { return ModularPanel.defaultPanel(name, width, height); } - public static ModularPanel createPanel(MetaMachine mte, int width, int height) { - return createPanel(mte.getDefinition().getId().getPath(), width, height); + public static ModularPanel createPanel(MetaMachine machine, int width, int height) { + return createPanel(machine.getDefinition().getId().getPath(), width, height); } public static ModularPanel createPanel(CoverBehavior cover, int width, int height) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java b/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java index 6415bc9de8d..93348fc679d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java @@ -476,12 +476,9 @@ protected static void init(RegistrateLangProvider provider) { provider.add("gtceu.machine.miner.fluid_usage", "Uses §f%d mB/t §7of §f%s§7, doubled per overclock."); provider.add("gtceu.machine.miner.multi.description", "A multiblock mining machine that covers a large area and produces huge quantity of ore."); - provider.add("gtceu.machine.miner.startx", "sX: %d"); - provider.add("gtceu.machine.miner.starty", "sY: %d"); - provider.add("gtceu.machine.miner.startz", "sZ: %d"); - provider.add("gtceu.machine.miner.minex", "mX: %d"); - provider.add("gtceu.machine.miner.miney", "mY: %d"); - provider.add("gtceu.machine.miner.minez", "mZ: %d"); + provider.add("gtceu.machine.miner.x", "sX: %d, mX: %d"); + provider.add("gtceu.machine.miner.y", "sY: %d, mY: %d"); + provider.add("gtceu.machine.miner.z", "sZ: %d, mZ: %d"); provider.add("gtceu.machine.miner.radius", "Radius: %d"); provider.add("gtceu.machine.miner.chunkradius", "Chunk Radius: %d"); provider.add("gtceu.machine.miner.progress", "Progress: %d/%d"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java index 9fb82764ffd..b7329277676 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.ShapedEnergyTransferRecipe; -import com.lowdragmc.lowdraglib.utils.Builder; import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; import net.minecraft.core.registries.BuiltInRegistries; @@ -22,17 +21,21 @@ import com.google.gson.JsonObject; import org.jetbrains.annotations.Nullable; +import java.util.*; import java.util.function.Consumer; -public class ShapedEnergyTransferRecipeBuilder extends Builder { +public class ShapedEnergyTransferRecipeBuilder { protected ItemStack output = ItemStack.EMPTY; protected Ingredient chargeIngredient = Ingredient.EMPTY; - protected ResourceLocation id; - protected String group; + protected @Nullable ResourceLocation id; + protected @Nullable String group; protected boolean transferMaxCharge; protected boolean overrideCharge; + protected List shape = new ArrayList<>(); + protected Map ingredientMap = new LinkedHashMap<>(); + public ShapedEnergyTransferRecipeBuilder(@Nullable ResourceLocation id) { this.id = id; } @@ -41,6 +44,16 @@ public ShapedEnergyTransferRecipeBuilder() { this(null); } + public ShapedEnergyTransferRecipeBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapedEnergyTransferRecipeBuilder where(char symbol, Ingredient value) { + this.ingredientMap.put(symbol, value); + return this; + } + public ShapedEnergyTransferRecipeBuilder pattern(String slice) { return aisle(slice); } @@ -109,9 +122,10 @@ public ShapedEnergyTransferRecipeBuilder group(String group) { return this; } - @Override public ShapedEnergyTransferRecipeBuilder shallowCopy() { - var builder = super.shallowCopy(); + var builder = new ShapedEnergyTransferRecipeBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.ingredientMap = new HashMap<>(this.ingredientMap); builder.output = output.copy(); return builder; } @@ -131,9 +145,9 @@ public void toJson(JsonObject json) { json.add("pattern", pattern); } - if (!symbolMap.isEmpty()) { + if (!ingredientMap.isEmpty()) { JsonObject key = new JsonObject(); - symbolMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); + ingredientMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); json.add("key", key); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java index b871319e325..eb2251f7b55 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.StrictShapedRecipe; -import com.lowdragmc.lowdraglib.utils.Builder; import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; import net.minecraft.core.registries.BuiltInRegistries; @@ -22,16 +21,20 @@ import com.google.gson.JsonObject; import org.jetbrains.annotations.Nullable; +import java.util.*; import java.util.function.Consumer; -public class ShapedRecipeBuilder extends Builder { +public class ShapedRecipeBuilder { protected ItemStack output = ItemStack.EMPTY; - protected ResourceLocation id; - protected String group; + protected @Nullable ResourceLocation id; + protected @Nullable String group; protected boolean isStrict; protected boolean matchSize; + protected List shape = new ArrayList<>(); + protected Map ingredientMap = new LinkedHashMap<>(); + public ShapedRecipeBuilder(@Nullable ResourceLocation id) { this.id = id; } @@ -40,6 +43,16 @@ public ShapedRecipeBuilder() { this(null); } + public ShapedRecipeBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapedRecipeBuilder where(char symbol, Ingredient value) { + this.ingredientMap.put(symbol, value); + return this; + } + public ShapedRecipeBuilder pattern(String slice) { return aisle(slice); } @@ -62,13 +75,13 @@ public ShapedRecipeBuilder define(char cha, Ingredient ingredient) { public ShapedRecipeBuilder output(ItemStack itemStack) { this.output = itemStack.copy(); - return (ShapedRecipeBuilder) this; + return this; } public ShapedRecipeBuilder output(ItemStack itemStack, int count) { this.output = itemStack.copy(); this.output.setCount(count); - return (ShapedRecipeBuilder) this; + return this; } public ShapedRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { @@ -104,9 +117,10 @@ public ShapedRecipeBuilder matchSize(boolean matchSize) { return this; } - @Override public ShapedRecipeBuilder shallowCopy() { - var builder = super.shallowCopy(); + ShapedRecipeBuilder builder = new ShapedRecipeBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.ingredientMap = new HashMap<>(this.ingredientMap); builder.output = output.copy(); return builder; } @@ -126,9 +140,9 @@ public void toJson(JsonObject json) { json.add("pattern", pattern); } - if (!symbolMap.isEmpty()) { + if (!ingredientMap.isEmpty()) { JsonObject key = new JsonObject(); - symbolMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); + ingredientMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); json.add("key", key); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEFluidConfigWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEFluidConfigWidget.java deleted file mode 100644 index 2ebe1b3164e..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEFluidConfigWidget.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget; - -import com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEFluidConfigSlotWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidSlot; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import appeng.api.stacks.GenericStack; - -public class AEFluidConfigWidget extends ConfigWidget { - - private final ExportOnlyAEFluidList fluidList; - - public AEFluidConfigWidget(int x, int y, ExportOnlyAEFluidList list) { - super(x, y, list.getInventory(), list.isStocking()); - this.fluidList = list; - } - - @Override - void init() { - int line; - this.displayList = new IConfigurableSlot[this.config.length]; - this.cached = new IConfigurableSlot[this.config.length]; - for (int index = 0; index < this.config.length; index++) { - this.displayList[index] = new ExportOnlyAEFluidSlot(); - this.cached[index] = new ExportOnlyAEFluidSlot(); - line = index / 8; - this.addWidget(new AEFluidConfigSlotWidget((index - line * 8) * 18, line * (18 * 2 + 2), this, index)); - } - } - - public boolean hasStackInConfig(GenericStack stack) { - return fluidList.hasStackInConfig(stack, true); - } - - public boolean isAutoPull() { - return fluidList.isAutoPull(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEItemConfigWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEItemConfigWidget.java deleted file mode 100644 index 167afbb34a5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AEItemConfigWidget.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget; - -import com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEItemConfigSlotWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import appeng.api.stacks.GenericStack; - -public class AEItemConfigWidget extends ConfigWidget { - - private final ExportOnlyAEItemList itemList; - - public AEItemConfigWidget(int x, int y, ExportOnlyAEItemList list) { - super(x, y, list.getInventory(), list.isStocking()); - this.itemList = list; - } - - @Override - void init() { - int line; - this.displayList = new IConfigurableSlot[this.config.length]; - this.cached = new IConfigurableSlot[this.config.length]; - for (int index = 0; index < this.config.length; index++) { - this.displayList[index] = new ExportOnlyAEItemSlot(); - this.cached[index] = new ExportOnlyAEItemSlot(); - line = index / 8; - this.addWidget(new AEItemConfigSlotWidget((index - line * 8) * 18, line * (18 * 2 + 2), this, index)); - } - } - - public boolean hasStackInConfig(GenericStack stack) { - return itemList.hasStackInConfig(stack, true); - } - - public boolean isAutoPull() { - return itemList.isAutoPull(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AETextInputButtonWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AETextInputButtonWidget.java deleted file mode 100644 index 2baeffb5d8b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AETextInputButtonWidget.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.TextTexture; -import com.lowdragmc.lowdraglib.gui.widget.TextFieldWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.network.chat.Component; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.util.function.Consumer; - -@Accessors(chain = true) -public class AETextInputButtonWidget extends WidgetGroup { - - @Setter - private Consumer onConfirm; - - @Getter - @Setter - private String text = ""; - - private Component[] hoverTexts = new Component[0]; - - @Getter - private boolean isInputting; - - private Widget textField; - - public AETextInputButtonWidget() {} - - public AETextInputButtonWidget(int x, int y, int width, int height) { - super(x, y, width, height); - } - - public AETextInputButtonWidget(Position position) { - super(position); - } - - public AETextInputButtonWidget(Position position, Size size) { - super(position, size); - } - - public AETextInputButtonWidget setButtonTooltips(Component... tooltipTexts) { - this.hoverTexts = tooltipTexts; - return this; - } - - @Override - public void initWidget() { - super.initWidget(); - this.textField = new TextFieldWidget( - 0, - 0, - getSizeWidth() - getSizeHeight() - 2, - getSizeHeight(), - this::getText, - this::setText).setActive(false).setVisible(false); - this.addWidget(new ToggleButtonWidget( - getSizeWidth() - getSizeHeight(), - 0, - getSizeHeight(), - getSizeHeight(), - this::isInputting, - pressed -> { - isInputting = pressed; - if (pressed) { - textField.setActive(true); - textField.setVisible(true); - } else { - onConfirm.accept(text); - textField.setActive(false); - textField.setVisible(false); - } - }) - .setTexture( - new GuiTextureGroup(GuiTextures.VANILLA_BUTTON, new TextTexture("✎")), - new GuiTextureGroup(GuiTextures.VANILLA_BUTTON, new TextTexture("✔"))) - .setHoverTooltips(hoverTexts)); - this.addWidget(textField); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AmountSetWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AmountSetWidget.java deleted file mode 100644 index 1139bd36c2f..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/AmountSetWidget.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import com.lowdragmc.lowdraglib.gui.widget.TextFieldWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.utils.Position; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import appeng.api.stacks.GenericStack; -import lombok.Getter; -import org.jetbrains.annotations.NotNull; - -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawStringSized; - -public class AmountSetWidget extends Widget { - - private int index = -1; - @Getter - private final TextFieldWidget amountText; - private final ConfigWidget parentWidget; - - public AmountSetWidget(int x, int y, ConfigWidget widget) { - super(x, y, 80, 30); - this.parentWidget = widget; - this.amountText = new TextFieldWidget(x + 3, y + 12, 65, 13, this::getAmountStr, this::setNewAmount) - .setNumbersOnly(0, Integer.MAX_VALUE) - .setMaxStringLength(10); - } - - @OnlyIn(Dist.CLIENT) - public void setSlotIndexClient(int slotIndex) { - this.index = slotIndex; - writeClientAction(0, buf -> buf.writeVarInt(this.index)); - } - - public void setSlotIndex(int slotIndex) { - this.index = slotIndex; - } - - public String getAmountStr() { - if (this.index < 0) { - return "0"; - } - IConfigurableSlot slot = this.parentWidget.getConfig(this.index); - if (slot.getConfig() != null) { - return String.valueOf(slot.getConfig().amount()); - } - return "0"; - } - - public void setNewAmount(String amount) { - try { - long newAmount = Long.parseLong(amount); - if (this.index < 0) { - return; - } - IConfigurableSlot slot = this.parentWidget.getConfig(this.index); - if (newAmount > 0 && slot.getConfig() != null) { - slot.setConfig(new GenericStack(slot.getConfig().what(), newAmount)); - } - } catch (NumberFormatException ignore) {} - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - super.handleClientAction(id, buffer); - if (id == 0) { - this.index = buffer.readVarInt(); - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - Position position = getPosition(); - GuiTextures.BACKGROUND.draw(graphics, mouseX, mouseY, position.x, position.y, 80, 30); - drawStringSized(graphics, "Amount", position.x + 3, position.y + 3, 0x404040, false, 1f, false); - GuiTextures.DISPLAY.draw(graphics, mouseX, mouseY, position.x + 3, position.y + 11, 65, 14); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/ConfigWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/ConfigWidget.java deleted file mode 100644 index 69198688a73..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/ConfigWidget.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget; - -import com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEConfigSlotWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import appeng.api.stacks.GenericStack; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import lombok.Getter; - -public abstract class ConfigWidget extends WidgetGroup { - - protected final IConfigurableSlot[] config; - protected IConfigurableSlot[] cached; - protected Int2ObjectMap changeMap = new Int2ObjectOpenHashMap<>(); - protected IConfigurableSlot[] displayList; - protected AmountSetWidget amountSetWidget; - protected final static int UPDATE_ID = 1000; - - @Getter - protected final boolean isStocking; - - public ConfigWidget(int x, int y, IConfigurableSlot[] config, boolean isStocking) { - super(new Position(x, y), new Size(config.length / 2 * 18, 18 * 4 + 2)); - this.isStocking = isStocking; - this.config = config; - this.init(); - this.amountSetWidget = new AmountSetWidget(31, -50, this); - this.addWidget(this.amountSetWidget); - this.addWidget(this.amountSetWidget.getAmountText()); - this.amountSetWidget.setVisible(false); - this.amountSetWidget.getAmountText().setVisible(false); - } - - @OnlyIn(Dist.CLIENT) - public void enableAmountClient(int slotIndex) { - this.amountSetWidget.setSlotIndexClient(slotIndex); - this.amountSetWidget.setVisible(true); - this.amountSetWidget.getAmountText().setVisible(true); - } - - @OnlyIn(Dist.CLIENT) - public void disableAmountClient() { - this.amountSetWidget.setSlotIndexClient(-1); - this.amountSetWidget.setVisible(false); - this.amountSetWidget.getAmountText().setVisible(false); - } - - public void enableAmount(int slotIndex) { - this.amountSetWidget.setSlotIndex(slotIndex); - this.amountSetWidget.setVisible(true); - this.amountSetWidget.getAmountText().setVisible(true); - } - - public void disableAmount() { - this.amountSetWidget.setSlotIndex(-1); - this.amountSetWidget.setVisible(false); - this.amountSetWidget.getAmountText().setVisible(false); - } - - @OnlyIn(Dist.CLIENT) - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.amountSetWidget.isVisible()) { - if (this.amountSetWidget.getAmountText().mouseClicked(mouseX, mouseY, button)) { - return true; - } - } - for (Widget w : this.widgets) { - if (w instanceof AEConfigSlotWidget slot) { - slot.setSelect(false); - } - } - this.disableAmountClient(); - return super.mouseClicked(mouseX, mouseY, button); - } - - abstract void init(); - - public abstract boolean hasStackInConfig(GenericStack stack); - - public abstract boolean isAutoPull(); - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - this.changeMap.clear(); - for (int index = 0; index < this.config.length; index++) { - IConfigurableSlot newSlot = this.config[index]; - IConfigurableSlot oldSlot = this.cached[index]; - GenericStack nConfig = newSlot.getConfig(); - GenericStack nStock = newSlot.getStock(); - GenericStack oConfig = oldSlot.getConfig(); - GenericStack oStock = oldSlot.getStock(); - if (!areAEStackCountsEqual(nConfig, oConfig) || !areAEStackCountsEqual(nStock, oStock)) { - this.changeMap.put(index, newSlot.copy()); - this.cached[index] = this.config[index].copy(); - this.gui.holder.markAsDirty(); - } - } - if (!this.changeMap.isEmpty()) { - this.writeUpdateInfo(UPDATE_ID, buf -> { - buf.writeVarInt(this.changeMap.size()); - for (int index : this.changeMap.keySet()) { - GenericStack sConfig = this.changeMap.get(index).getConfig(); - GenericStack sStock = this.changeMap.get(index).getStock(); - buf.writeVarInt(index); - if (sConfig != null) { - buf.writeBoolean(true); - GenericStack.writeBuffer(sConfig, buf); - } else { - buf.writeBoolean(false); - } - if (sStock != null) { - buf.writeBoolean(true); - GenericStack.writeBuffer(sStock, buf); - } else { - buf.writeBoolean(false); - } - } - }); - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - super.readUpdateInfo(id, buffer); - if (id == UPDATE_ID) { - int size = buffer.readVarInt(); - for (int i = 0; i < size; i++) { - int index = buffer.readVarInt(); - IConfigurableSlot slot = this.displayList[index]; - if (buffer.readBoolean()) { - slot.setConfig(GenericStack.readBuffer(buffer)); - } else { - slot.setConfig(null); - } - if (buffer.readBoolean()) { - slot.setStock(GenericStack.readBuffer(buffer)); - } else { - slot.setStock(null); - } - } - } - } - - public final IConfigurableSlot getConfig(int index) { - return this.config[index]; - } - - public final IConfigurableSlot getDisplay(int index) { - return this.displayList[index]; - } - - protected final boolean areAEStackCountsEqual(GenericStack s1, GenericStack s2) { - if (s2 == s1) { - return true; - } - if (s1 != null && s2 != null) { - return s1.amount() == s2.amount() && s1.what().matches(s2); - } - return false; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEFluidDisplayWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEFluidDisplayWidget.java deleted file mode 100644 index 08dd66ce998..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEFluidDisplayWidget.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.list; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.client.TooltipsHandler; -import com.gregtechceu.gtceu.utils.GTMath; - -import com.lowdragmc.lowdraglib.gui.util.DrawerHelper; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.side.fluid.forge.FluidHelperImpl; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.TooltipFlag; -import net.minecraftforge.fluids.FluidStack; - -import appeng.api.stacks.AEFluidKey; -import appeng.api.stacks.GenericStack; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEConfigSlotWidget.drawSelectionOverlay; -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawText; - -/** - * Display a certain {@link FluidStack} element. - */ -public class AEFluidDisplayWidget extends Widget { - - private final AEListGridWidget gridWidget; - private final int index; - - public AEFluidDisplayWidget(int x, int y, AEListGridWidget gridWidget, int index) { - super(new Position(x, y), new Size(18, 18)); - this.gridWidget = gridWidget; - this.index = index; - } - - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - Position position = getPosition(); - GenericStack fluid = this.gridWidget.getAt(this.index); - GuiTextures.FLUID_SLOT.draw(graphics, mouseX, mouseY, position.x, position.y, 18, 18); - GuiTextures.NUMBER_BACKGROUND.draw(graphics, mouseX, mouseY, position.x + 18, position.y, 140, 18); - int stackX = position.x + 1; - int stackY = position.y + 1; - if (fluid != null) { - FluidStack fluidStack = fluid.what() instanceof AEFluidKey key ? - new FluidStack(key.getFluid(), GTMath.saturatedCast(fluid.amount()), key.getTag()) : - FluidStack.EMPTY; - DrawerHelper.drawFluidForGui(graphics, FluidHelperImpl.toFluidStack(fluidStack), fluid.amount(), stackX, - stackY, 16, 16); - String amountStr = String.format("x%,d", fluid.amount()); - drawText(graphics, amountStr, stackX + 20, stackY + 5, 1, 0xFFFFFFFF); - } - if (isMouseOverElement(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY, 16, 16); - } - } - - @Override - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - if (isMouseOverElement(mouseX, mouseY)) { - GenericStack fluid = this.gridWidget.getAt(this.index); - if (fluid != null) { - FluidStack fluidStack = fluid.what() instanceof AEFluidKey key ? - new FluidStack(key.getFluid(), GTMath.saturatedCast(fluid.amount()), key.getTag()) : - FluidStack.EMPTY; - List tooltips = new ArrayList<>(); - tooltips.add(fluidStack.getDisplayName()); - tooltips.add(Component.literal(String.format("%,d mB", fluid.amount()))); - TooltipsHandler.appendFluidTooltips(fluidStack, tooltips::add, TooltipFlag.NORMAL); - graphics.renderTooltip(Minecraft.getInstance().font, tooltips, Optional.empty(), mouseX, mouseY); - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEItemDisplayWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEItemDisplayWidget.java deleted file mode 100644 index 3c28a821248..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEItemDisplayWidget.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.list; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; - -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.item.ItemStack; - -import appeng.api.stacks.AEItemKey; -import appeng.api.stacks.GenericStack; -import org.jetbrains.annotations.NotNull; - -import static com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEConfigSlotWidget.drawSelectionOverlay; -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawItemStack; -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawText; - -/** - * Display a certain {@link appeng.api.stacks.GenericStack} element. - */ -public class AEItemDisplayWidget extends Widget { - - private final AEListGridWidget gridWidget; - private final int index; - - public AEItemDisplayWidget(int x, int y, AEListGridWidget gridWidget, int index) { - super(new Position(x, y), new Size(18, 18)); - this.gridWidget = gridWidget; - this.index = index; - } - - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - Position position = getPosition(); - GenericStack item = this.gridWidget.getAt(this.index); - GuiTextures.SLOT.draw(graphics, mouseX, mouseY, position.x, position.y, 18, 18); - GuiTextures.NUMBER_BACKGROUND.draw(graphics, mouseX, mouseY, position.x + 18, position.y, 140, 18); - int stackX = position.x + 1; - int stackY = position.y + 1; - if (item != null) { - ItemStack realStack = item.what() instanceof AEItemKey key ? new ItemStack(key.getItem()) : ItemStack.EMPTY; - drawItemStack(graphics, realStack, stackX, stackY, -1, null); - String amountStr = String.format("x%,d", item.amount()); - drawText(graphics, amountStr, stackX + 20, stackY + 5, 1, 0xFFFFFFFF); - } - if (isMouseOverElement(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY, 16, 16); - } - } - - @Override - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - if (isMouseOverElement(mouseX, mouseY)) { - GenericStack item = this.gridWidget.getAt(this.index); - if (item != null) { - graphics.renderTooltip(Minecraft.getInstance().font, GenericStack.wrapInItemStack(item), mouseX, - mouseY); - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEListGridWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEListGridWidget.java deleted file mode 100644 index fe52076fd63..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/list/AEListGridWidget.java +++ /dev/null @@ -1,233 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.list; - -import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; - -import com.lowdragmc.lowdraglib.gui.widget.DraggableScrollableWidgetGroup; -import com.lowdragmc.lowdraglib.gui.widget.Widget; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import appeng.api.stacks.AEFluidKey; -import appeng.api.stacks.AEItemKey; -import appeng.api.stacks.AEKey; -import appeng.api.stacks.GenericStack; -import it.unimi.dsi.fastutil.objects.Object2LongMap; -import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; - -import java.util.ArrayList; -import java.util.List; - -/** - * A display only widget for {@link KeyStorage} - */ -public abstract class AEListGridWidget extends DraggableScrollableWidgetGroup { - - protected final KeyStorage list; - private final int slotAmountY; - private int slotRowsAmount; - protected final static int ROW_CHANGE_ID = 2; - protected final static int CONTENT_CHANGE_ID = 3; - - protected final Object2LongMap changeMap = new Object2LongOpenHashMap<>(); - protected final KeyStorage cached = new KeyStorage(); - protected final List displayList = new ArrayList<>(); - - public AEListGridWidget(int x, int y, int slotsY, KeyStorage internalList) { - super(x, y, 18 + 140, slotsY * 18); - this.list = internalList; - this.slotAmountY = slotsY; - } - - public GenericStack getAt(int index) { - return index >= 0 && index < displayList.size() ? displayList.get(index) : null; - } - - private void addSlotRows(int amount) { - for (int i = 0; i < amount; i++) { - int widgetAmount = this.widgets.size(); - Widget widget = createDisplayWidget(0, i * 18, widgetAmount); - this.addWidget(widget); - } - } - - private void removeSlotRows(int amount) { - for (int i = 0; i < amount; i++) { - Widget slotWidget = this.widgets.remove(this.widgets.size() - 1); - removeWidget(slotWidget); - } - } - - private void modifySlotRows(int delta) { - if (delta > 0) { - addSlotRows(delta); - } else { - removeSlotRows(delta); - } - } - - protected void writeListChange(FriendlyByteBuf buffer) { - this.changeMap.clear(); - - // Remove - var cachedIt = cached.storage.object2LongEntrySet().iterator(); - while (cachedIt.hasNext()) { - var entry = cachedIt.next(); - var cachedKey = entry.getKey(); - if (!list.storage.containsKey(cachedKey)) { - this.changeMap.put(cachedKey, -entry.getLongValue()); - cachedIt.remove(); - } - } - - // Change/Add - for (var entry : list.storage.object2LongEntrySet()) { - var key = entry.getKey(); - long value = entry.getLongValue(); - long cacheValue = cached.storage.getOrDefault(key, 0); - if (cacheValue == 0) { - // Add - this.changeMap.put(key, value); - this.cached.storage.put(key, value); - } else { - // Change - if (cacheValue != value) { - this.changeMap.put(key, value - cacheValue); - this.cached.storage.put(key, value); - } - } - } - - buffer.writeVarInt(this.changeMap.size()); - for (var entry : this.changeMap.object2LongEntrySet()) { - entry.getKey().writeToPacket(buffer); - buffer.writeVarLong(entry.getLongValue()); - } - } - - protected void readListChange(FriendlyByteBuf buffer) { - int size = buffer.readVarInt(); - for (int i = 0; i < size; i++) { - var key = fromPacket(buffer); - long delta = buffer.readVarLong(); - - boolean found = false; - var li = displayList.listIterator(); - while (li.hasNext()) { - var stack = li.next(); - if (stack.what().equals(key)) { - long newAmount = stack.amount() + delta; - if (newAmount > 0) { - li.set(new GenericStack(key, newAmount)); - } else { - li.remove(); - } - found = true; - break; - } - } - if (!found) { - displayList.add(new GenericStack(key, delta)); - } - } - } - - protected abstract void toPacket(FriendlyByteBuf buffer, AEKey key); - - protected abstract AEKey fromPacket(FriendlyByteBuf buffer); - - protected abstract Widget createDisplayWidget(int x, int y, int index); - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - if (this.list == null) return; - int slotRowsRequired = Math.max(this.slotAmountY, list.storage.size()); - if (this.slotRowsAmount != slotRowsRequired) { - int slotsToAdd = slotRowsRequired - this.slotRowsAmount; - this.slotRowsAmount = slotRowsRequired; - this.writeUpdateInfo(ROW_CHANGE_ID, buf -> buf.writeVarInt(slotsToAdd)); - this.modifySlotRows(slotsToAdd); - } - this.writeUpdateInfo(CONTENT_CHANGE_ID, this::writeListChange); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - super.readUpdateInfo(id, buffer); - if (id == ROW_CHANGE_ID) { - int slotsToAdd = buffer.readVarInt(); - this.modifySlotRows(slotsToAdd); - } - if (id == CONTENT_CHANGE_ID) { - this.readListChange(buffer); - } - } - - @Override - public void writeInitialData(FriendlyByteBuf buffer) { - super.writeInitialData(buffer); - if (this.list == null) return; - int slotRowsRequired = Math.max(this.slotAmountY, list.storage.size()); - int slotsToAdd = slotRowsRequired - this.slotRowsAmount; - this.slotRowsAmount = slotRowsRequired; - this.modifySlotRows(slotsToAdd); - buffer.writeVarInt(slotsToAdd); - this.writeListChange(buffer); - } - - @Override - @OnlyIn(Dist.CLIENT) - public void readInitialData(FriendlyByteBuf buffer) { - super.readInitialData(buffer); - if (this.list == null) return; - this.modifySlotRows(buffer.readVarInt()); - this.readListChange(buffer); - } - - public static class Item extends AEListGridWidget { - - public Item(int x, int y, int slotsY, KeyStorage internalList) { - super(x, y, slotsY, internalList); - } - - @Override - protected void toPacket(FriendlyByteBuf buffer, AEKey key) { - key.writeToPacket(buffer); - } - - @Override - protected AEKey fromPacket(FriendlyByteBuf buffer) { - return AEItemKey.fromPacket(buffer); - } - - @Override - protected Widget createDisplayWidget(int x, int y, int index) { - return new AEItemDisplayWidget(x, y, this, index); - } - } - - public static class Fluid extends AEListGridWidget { - - public Fluid(int x, int y, int slotsY, KeyStorage internalList) { - super(x, y, slotsY, internalList); - } - - @Override - protected void toPacket(FriendlyByteBuf buffer, AEKey key) { - key.writeToPacket(buffer); - } - - @Override - protected AEKey fromPacket(FriendlyByteBuf buffer) { - return AEFluidKey.fromPacket(buffer); - } - - @Override - protected Widget createDisplayWidget(int x, int y, int index) { - return new AEFluidDisplayWidget(x, y, this, index); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEConfigSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEConfigSlotWidget.java deleted file mode 100644 index b6d04d492ce..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEConfigSlotWidget.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.slot; - -import com.gregtechceu.gtceu.integration.ae2.gui.widget.ConfigWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import appeng.api.stacks.GenericStack; -import com.mojang.blaze3d.systems.RenderSystem; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawGradientRect; - -public class AEConfigSlotWidget extends Widget { - - protected ConfigWidget parentWidget; - protected int index; - protected final static int REMOVE_ID = 1000; - protected final static int UPDATE_ID = 1001; - protected final static int AMOUNT_CHANGE_ID = 1002; - protected final static int PICK_UP_ID = 1003; - protected boolean select = false; - - public AEConfigSlotWidget(Position pos, Size size, ConfigWidget widget, int index) { - super(pos, size); - this.parentWidget = widget; - this.index = index; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void drawInForeground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInForeground(graphics, mouseX, mouseY, partialTicks); - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - if (slot.getConfig() == null) { - if (mouseOverConfig(mouseX, mouseY)) { - List hoverStringList = new ArrayList<>(); - hoverStringList.add(Component.translatable("gtceu.gui.config_slot")); - if (parentWidget.isAutoPull()) { - hoverStringList.add(Component.translatable("gtceu.gui.config_slot.auto_pull_managed")); - } else { - if (!parentWidget.isStocking()) { - hoverStringList.add(Component.translatable("gtceu.gui.config_slot.set")); - hoverStringList.add(Component.translatable("gtceu.gui.config_slot.scroll")); - } else { - hoverStringList.add(Component.translatable("gtceu.gui.config_slot.set_only")); - } - hoverStringList.add(Component.translatable("gtceu.gui.config_slot.remove")); - } - graphics.renderTooltip(Minecraft.getInstance().font, hoverStringList, Optional.empty(), mouseX, mouseY); - } - } else { - GenericStack item = null; - if (mouseOverConfig(mouseX, mouseY)) { - item = slot.getConfig(); - } else if (mouseOverStock(mouseX, mouseY)) { - item = slot.getStock(); - } - if (item != null) { - graphics.renderTooltip(Minecraft.getInstance().font, GenericStack.wrapInItemStack(item), mouseX, - mouseY); - } - } - } - - public void setSelect(boolean val) { - this.select = val; - } - - protected boolean mouseOverConfig(double mouseX, double mouseY) { - Position position = getPosition(); - return isMouseOver(position.x, position.y, 18, 18, mouseX, mouseY); - } - - protected boolean mouseOverStock(double mouseX, double mouseY) { - Position position = getPosition(); - return isMouseOver(position.x, position.y + 18, 18, 18, mouseX, mouseY); - } - - @OnlyIn(Dist.CLIENT) - public static void drawSelectionOverlay(GuiGraphics graphics, int x, int y, int width, int height) { - RenderSystem.disableDepthTest(); - RenderSystem.colorMask(true, true, true, false); - drawGradientRect(graphics, x, y, width, height, -2130706433, -2130706433); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableDepthTest(); - RenderSystem.enableBlend(); - } - - // Method for server-side validation of an attempted new configured item - protected boolean isStackValidForSlot(GenericStack stack) { - if (stack == null || stack.amount() < 0) return true; - if (!parentWidget.isStocking()) return true; - return !parentWidget.hasStackInConfig(stack); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEFluidConfigSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEFluidConfigSlotWidget.java deleted file mode 100644 index bbf171ffbe9..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEFluidConfigSlotWidget.java +++ /dev/null @@ -1,312 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.slot; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.misc.IGhostFluidTarget; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.ConfigWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidSlot; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; -import com.gregtechceu.gtceu.integration.ae2.utils.AEUtil; -import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.gregtechceu.gtceu.utils.GTMath; - -import com.lowdragmc.lowdraglib.gui.util.DrawerHelper; -import com.lowdragmc.lowdraglib.side.fluid.forge.FluidHelperImpl; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.Rect2i; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.material.Fluids; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.SoundActions; -import net.minecraftforge.fluids.FluidActionResult; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; - -import appeng.api.stacks.AEFluidKey; -import appeng.api.stacks.GenericStack; -import org.jetbrains.annotations.NotNull; - -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawStringFixedCorner; - -public class AEFluidConfigSlotWidget extends AEConfigSlotWidget implements IGhostFluidTarget { - - public AEFluidConfigSlotWidget(int x, int y, ConfigWidget widget, int index) { - super(new Position(x, y), new Size(18, 18 * 2), widget, index); - } - - @OnlyIn(Dist.CLIENT) - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - Position position = getPosition(); - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - GenericStack config = slot.getConfig(); - GenericStack stock = slot.getStock(); - drawSlots(graphics, mouseX, mouseY, position.x, position.y, parentWidget.isAutoPull()); - if (this.select) { - GuiTextures.SELECT_BOX.draw(graphics, mouseX, mouseY, position.x, position.y, 18, 18); - } - - int stackX = position.x + 1; - int stackY = position.y + 1; - if (config != null) { - var stack = AEUtil.toFluidStack(config); - if (!stack.isEmpty()) { - DrawerHelper.drawFluidForGui(graphics, FluidHelperImpl.toFluidStack(stack), config.amount(), stackX, - stackY, 16, 16); - if (!parentWidget.isStocking()) { - String amountStr = FormattingUtil.formatNumberReadable(config.amount(), true, - FormattingUtil.DECIMAL_FORMAT_0F, "B"); - drawStringFixedCorner(graphics, amountStr, stackX + 17, stackY + 17, 16777215, true, 0.5f); - } - } - } - if (stock != null) { - var stack = AEUtil.toFluidStack(stock); - if (!stack.isEmpty()) { - DrawerHelper.drawFluidForGui(graphics, FluidHelperImpl.toFluidStack(stack), stock.amount(), stackX, - stackY + 18, 16, - 16); - String amountStr = FormattingUtil.formatNumberReadable(stock.amount(), true, - FormattingUtil.DECIMAL_FORMAT_0F, "B"); - drawStringFixedCorner(graphics, amountStr, stackX + 17, stackY + 18 + 17, 16777215, true, 0.5f); - } - } - - if (mouseOverConfig(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY, 16, 16); - } else if (mouseOverStock(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY + 18, 16, 16); - } - } - - @OnlyIn(Dist.CLIENT) - private void drawSlots(GuiGraphics graphics, int mouseX, int mouseY, int x, int y, boolean autoPull) { - if (autoPull) { - GuiTextures.SLOT_DARK.draw(graphics, mouseX, mouseY, x, y, 18, 18); - GuiTextures.CONFIG_ARROW_DARK.draw(graphics, mouseX, mouseY, x, y, 18, 18); - } else { - GuiTextures.FLUID_SLOT.draw(graphics, mouseX, mouseY, x, y, 18, 18); - GuiTextures.CONFIG_ARROW.draw(graphics, mouseX, mouseY, x, y, 18, 18); - } - GuiTextures.SLOT_DARK.draw(graphics, mouseX, mouseY, x, y + 18, 18, 18); - } - - @OnlyIn(Dist.CLIENT) - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (mouseOverConfig(mouseX, mouseY)) { - // don't allow manual interaction with config slots when auto pull is enabled - if (parentWidget.isAutoPull()) { - return false; - } - - if (button == 1) { - // Right click to clear - writeClientAction(REMOVE_ID, buf -> {}); - - if (!parentWidget.isStocking()) { - this.parentWidget.disableAmountClient(); - } - } else if (button == 0) { - // Left click to set/select - ItemStack hold = this.gui.getModularUIContainer().getCarried(); - FluidUtil.getFluidContained(hold).ifPresent(f -> writeClientAction(UPDATE_ID, f::writeToPacket)); - - if (!parentWidget.isStocking()) { - this.parentWidget.enableAmountClient(this.index); - this.select = true; - } - } - return true; - } else if (mouseOverStock(mouseX, mouseY)) { - // Left click to pick up - if (button == 0) { - if (parentWidget.isStocking()) { - return false; - } - GenericStack stack = this.parentWidget.getDisplay(this.index).getStock(); - if (stack != null) { - writeClientAction(PICK_UP_ID, buf -> buf.writeBoolean(isShiftDown())); - } - return true; - } - } - return false; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - super.handleClientAction(id, buffer); - IConfigurableSlot slot = this.parentWidget.getConfig(this.index); - if (id == REMOVE_ID) { - slot.setConfig(null); - this.parentWidget.disableAmount(); - writeUpdateInfo(REMOVE_ID, buf -> {}); - } - if (id == UPDATE_ID) { - FluidStack fluid = FluidStack.readFromPacket(buffer); - var stack = AEUtil.fromFluidStack(fluid); - if (!isStackValidForSlot(stack)) return; - slot.setConfig(stack); - this.parentWidget.enableAmount(this.index); - if (fluid != FluidStack.EMPTY) { - writeUpdateInfo(UPDATE_ID, fluid::writeToPacket); - } - } - if (id == AMOUNT_CHANGE_ID) { - if (slot.getConfig() != null) { - int amt = buffer.readInt(); - slot.setConfig(ExportOnlyAESlot.copy(slot.getConfig(), amt)); - writeUpdateInfo(AMOUNT_CHANGE_ID, buf -> buf.writeInt(amt)); - } - } - if (id == PICK_UP_ID) { - if (slot.getStock() != null) { - boolean isShiftKeyDown = buffer.readBoolean(); - int clickResult = tryClickContainer(isShiftKeyDown); - if (clickResult >= 0) { - writeUpdateInfo(PICK_UP_ID, buf -> buf.writeVarInt(clickResult)); - } - } - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - super.readUpdateInfo(id, buffer); - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - if (id == REMOVE_ID) { - slot.setConfig(null); - } - if (id == UPDATE_ID) { - FluidStack fluid = new FluidStack(BuiltInRegistries.FLUID.get(buffer.readResourceLocation()), - buffer.readVarInt()); - slot.setConfig(new GenericStack(AEFluidKey.of(fluid.getFluid()), fluid.getAmount())); - } - if (id == AMOUNT_CHANGE_ID) { - if (slot.getConfig() != null) { - int amt = buffer.readInt(); - slot.setConfig(ExportOnlyAESlot.copy(slot.getConfig(), amt)); - } - } - if (id == PICK_UP_ID) { - if (slot.getStock() != null && slot.getStock().what() instanceof AEFluidKey key) { - ItemStack currentStack = gui.getModularUIContainer().getCarried(); - int newStackSize = buffer.readVarInt(); - currentStack.setCount(newStackSize); - gui.getModularUIContainer().setCarried(currentStack); - - FluidStack stack = new FluidStack(key.getFluid(), GTMath.saturatedCast(slot.getStock().amount())); - if (key.hasTag()) { - stack.setTag(key.getTag().copy()); - } - GenericStack stack1 = ExportOnlyAESlot.copy(slot.getStock(), - Math.max(0, (slot.getStock().amount() - stack.getAmount()))); - slot.setStock(stack1.amount() == 0 ? null : stack1); - } - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public Rect2i getRectangleBox() { - Rect2i rectangle = toRectangleBox(); - rectangle.setHeight(rectangle.getHeight() / 2); - return rectangle; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void acceptFluid(FluidStack fluidStack) { - if (fluidStack.getRawFluid() != Fluids.EMPTY && fluidStack.getAmount() <= 0L) { - fluidStack.setAmount(1000); - } - - if (!fluidStack.isEmpty()) { - writeClientAction(UPDATE_ID, fluidStack::writeToPacket); - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - // Only allow the amount scrolling if not stocking, as amount is useless for stocking - if (parentWidget.isStocking()) return false; - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - Rect2i rectangle = toRectangleBox(); - rectangle.setHeight(rectangle.getHeight() / 2); - if (slot.getConfig() == null || wheelDelta == 0 || !rectangle.contains((int) mouseX, (int) mouseY)) { - return false; - } - FluidStack fluid = slot.getConfig().what() instanceof AEFluidKey fluidKey ? - new FluidStack(fluidKey.getFluid(), GTMath.saturatedCast(slot.getConfig().amount()), - fluidKey.getTag()) : - FluidStack.EMPTY; - long amt; - if (isCtrlDown()) { - amt = wheelDelta > 0 ? fluid.getAmount() * 2L : fluid.getAmount() / 2L; - } else { - amt = wheelDelta > 0 ? fluid.getAmount() + 1L : fluid.getAmount() - 1L; - } - - if (amt > 0 && amt < Integer.MAX_VALUE + 1L) { - int finalAmt = (int) amt; - writeClientAction(AMOUNT_CHANGE_ID, buf -> buf.writeInt(finalAmt)); - return true; - } - return false; - } - - private int tryClickContainer(boolean isShiftKeyDown) { - ExportOnlyAEFluidSlot fluidTank = this.parentWidget - .getConfig(this.index) instanceof ExportOnlyAEFluidSlot fluid ? fluid : null; - if (fluidTank == null) return -1; - Player player = gui.entityPlayer; - ItemStack currentStack = gui.getModularUIContainer().getCarried(); - var handler = FluidUtil.getFluidHandler(currentStack).resolve().orElse(null); - if (handler == null) return -1; - int maxAttempts = isShiftKeyDown ? currentStack.getCount() : 1; - - if (fluidTank.getFluidAmount() > 0) { - boolean performedFill = false; - FluidStack initialFluid = fluidTank.getFluid(); - for (int i = 0; i < maxAttempts; i++) { - FluidActionResult result = FluidUtil.tryFillContainer(currentStack, fluidTank, Integer.MAX_VALUE, null, - false); - if (!result.isSuccess()) break; - ItemStack remainingStack = FluidUtil - .tryFillContainer(currentStack, fluidTank, Integer.MAX_VALUE, null, true).getResult(); - currentStack.shrink(1); - performedFill = true; - if (!remainingStack.isEmpty() && !player.addItem(remainingStack)) { - Block.popResource(player.level(), player.getOnPos(), remainingStack); - break; - } - } - if (performedFill) { - SoundEvent soundevent = initialFluid.getFluid().getFluidType().getSound(initialFluid, - SoundActions.BUCKET_FILL); - if (soundevent != null) { - player.level().playSound(null, player.position().x, player.position().y + 0.5, player.position().z, - soundevent, SoundSource.BLOCKS, 1.0F, 1.0F); - } - gui.getModularUIContainer().setCarried(currentStack); - return currentStack.getCount(); - } - } - - return -1; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEItemConfigSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEItemConfigSlotWidget.java deleted file mode 100644 index 574b4fdf276..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEItemConfigSlotWidget.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.slot; - -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.misc.IGhostItemTarget; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.ConfigWidget; -import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; -import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; - -import com.lowdragmc.lowdraglib.gui.util.TextFormattingUtil; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.Rect2i; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import appeng.api.stacks.AEItemKey; -import appeng.api.stacks.GenericStack; -import org.jetbrains.annotations.NotNull; - -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawItemStack; -import static com.lowdragmc.lowdraglib.gui.util.DrawerHelper.drawStringFixedCorner; - -public class AEItemConfigSlotWidget extends AEConfigSlotWidget implements IGhostItemTarget { - - public AEItemConfigSlotWidget(int x, int y, ConfigWidget widget, int index) { - super(new Position(x, y), new Size(18, 18 * 2), widget, index); - } - - @OnlyIn(Dist.CLIENT) - @Override - public void drawInBackground(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.drawInBackground(graphics, mouseX, mouseY, partialTicks); - Position position = getPosition(); - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - GenericStack config = slot.getConfig(); - GenericStack stock = slot.getStock(); - drawSlots(graphics, mouseX, mouseY, position.x, position.y, parentWidget.isAutoPull()); - if (this.select) { - GuiTextures.SELECT_BOX.draw(graphics, mouseX, mouseY, position.x, position.y, 18, 18); - } - int stackX = position.x + 1; - int stackY = position.y + 1; - if (config != null) { - ItemStack stack = config.what() instanceof AEItemKey key ? new ItemStack(key.getItem()) : ItemStack.EMPTY; - drawItemStack(graphics, stack, stackX, stackY, 0xFFFFFFFF, null); - - if (!parentWidget.isStocking()) { - String amountStr = TextFormattingUtil.formatLongToCompactString(config.amount(), 4); - drawStringFixedCorner(graphics, amountStr, stackX + 17, stackY + 17, 16777215, true, 0.5f); - } - } - if (stock != null) { - ItemStack stack = stock.what() instanceof AEItemKey key ? new ItemStack(key.getItem()) : ItemStack.EMPTY; - drawItemStack(graphics, stack, stackX, stackY + 18, 0xFFFFFFFF, null); - String amountStr = TextFormattingUtil.formatLongToCompactString(stock.amount(), 4); - drawStringFixedCorner(graphics, amountStr, stackX + 17, stackY + 18 + 17, 16777215, true, 0.5f); - } - if (mouseOverConfig(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY, 16, 16); - } else if (mouseOverStock(mouseX, mouseY)) { - drawSelectionOverlay(graphics, stackX, stackY + 18, 16, 16); - } - } - - @OnlyIn(Dist.CLIENT) - private void drawSlots(GuiGraphics graphics, int mouseX, int mouseY, int x, int y, boolean autoPull) { - if (autoPull) { - GuiTextures.SLOT_DARK.draw(graphics, mouseX, mouseY, x, y, 18, 18); - GuiTextures.CONFIG_ARROW.draw(graphics, mouseX, mouseY, x, y, 18, 18); - } else { - GuiTextures.SLOT.draw(graphics, mouseX, mouseY, x, y, 18, 18); - GuiTextures.CONFIG_ARROW_DARK.draw(graphics, mouseX, mouseY, x, y, 18, 18); - } - GuiTextures.SLOT_DARK.draw(graphics, mouseX, mouseY, x, y + 18, 18, 18); - } - - @OnlyIn(Dist.CLIENT) - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (mouseOverConfig(mouseX, mouseY)) { - // don't allow manual interaction with config slots when auto pull is enabled - if (parentWidget.isAutoPull()) { - return false; - } - - if (button == 1) { - // Right click to clear - writeClientAction(REMOVE_ID, buf -> {}); - - if (!parentWidget.isStocking()) { - this.parentWidget.disableAmountClient(); - } - } else if (button == 0) { - // Left click to set/select - ItemStack item = this.gui.getModularUIContainer().getCarried(); - - if (!item.isEmpty()) { - writeClientAction(UPDATE_ID, buf -> buf.writeItem(item)); - } - - if (!parentWidget.isStocking()) { - this.parentWidget.enableAmountClient(this.index); - this.select = true; - } - } - return true; - } else if (mouseOverStock(mouseX, mouseY)) { - // Left click to pick up - if (button == 0) { - if (parentWidget.isStocking()) { - return false; - } - GenericStack stack = this.parentWidget.getDisplay(this.index).getStock(); - if (stack != null) { - writeClientAction(PICK_UP_ID, buf -> {}); - } - return true; - } - } - return false; - } - - @Override - public void handleClientAction(int id, FriendlyByteBuf buffer) { - super.handleClientAction(id, buffer); - IConfigurableSlot slot = this.parentWidget.getConfig(this.index); - if (id == REMOVE_ID) { - slot.setConfig(null); - this.parentWidget.disableAmount(); - writeUpdateInfo(REMOVE_ID, buf -> {}); - } - if (id == UPDATE_ID) { - ItemStack item = buffer.readItem(); - var stack = GenericStack.fromItemStack(item); - if (!isStackValidForSlot(stack)) return; - slot.setConfig(stack); - this.parentWidget.enableAmount(this.index); - if (!item.isEmpty()) { - writeUpdateInfo(UPDATE_ID, buf -> buf.writeItem(item)); - } - } - if (id == AMOUNT_CHANGE_ID) { - if (slot.getConfig() != null) { - long amt = buffer.readVarLong(); - slot.setConfig(new GenericStack(slot.getConfig().what(), amt)); - writeUpdateInfo(AMOUNT_CHANGE_ID, buf -> buf.writeVarLong(amt)); - } - } - if (id == PICK_UP_ID) { - if (slot.getStock() != null && this.gui.getModularUIContainer().getCarried() == ItemStack.EMPTY && - slot.getStock().what() instanceof AEItemKey key) { - ItemStack stack = new ItemStack(key.getItem()); - stack.setCount(Math.min((int) slot.getStock().amount(), stack.getMaxStackSize())); - if (key.hasTag()) { - stack.setTag(key.getTag().copy()); - } - this.gui.getModularUIContainer().setCarried(stack); - GenericStack stack1 = ExportOnlyAESlot.copy(slot.getStock(), - Math.max(0, (slot.getStock().amount() - stack.getCount()))); - slot.setStock(stack1.amount() == 0 ? null : stack1); - writeUpdateInfo(PICK_UP_ID, buf -> {}); - } - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public void readUpdateInfo(int id, FriendlyByteBuf buffer) { - super.readUpdateInfo(id, buffer); - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - if (id == REMOVE_ID) { - slot.setConfig(null); - } - if (id == UPDATE_ID) { - ItemStack item = buffer.readItem(); - slot.setConfig(new GenericStack(AEItemKey.of(item.getItem(), item.getTag()), item.getCount())); - } - if (id == AMOUNT_CHANGE_ID) { - if (slot.getConfig() != null) { - long amt = buffer.readVarLong(); - slot.setConfig(new GenericStack(slot.getConfig().what(), amt)); - } - } - if (id == PICK_UP_ID) { - if (slot.getStock() != null && slot.getStock().what() instanceof AEItemKey key) { - ItemStack stack = new ItemStack(key.getItem()); - stack.setCount(Math.min((int) slot.getStock().amount(), stack.getMaxStackSize())); - if (key.hasTag()) { - stack.setTag(key.getTag().copy()); - } - this.gui.getModularUIContainer().setCarried(stack); - GenericStack stack1 = ExportOnlyAESlot.copy(slot.getStock(), - Math.max(0, (slot.getStock().amount() - stack.getCount()))); - slot.setStock(stack1.amount() == 0 ? null : stack1); - } - } - } - - @OnlyIn(Dist.CLIENT) - @Override - public Rect2i getRectangleBox() { - Rect2i rectangle = toRectangleBox(); - rectangle.setHeight(rectangle.getHeight() / 2); - return rectangle; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void acceptItem(ItemStack itemStack) { - writeClientAction(UPDATE_ID, buf -> buf.writeItem(itemStack)); - } - - @OnlyIn(Dist.CLIENT) - @Override - public boolean mouseWheelMove(double mouseX, double mouseY, double wheelDelta) { - // Only allow the amount scrolling if not stocking, as amount is useless for stocking - if (parentWidget.isStocking()) return false; - IConfigurableSlot slot = this.parentWidget.getDisplay(this.index); - Rect2i rectangle = toRectangleBox(); - rectangle.setHeight(rectangle.getHeight() / 2); - if (slot.getConfig() == null || wheelDelta == 0 || !rectangle.contains((int) mouseX, (int) mouseY)) { - return false; - } - GenericStack stack = slot.getConfig(); - long amt; - if (isCtrlDown()) { - amt = wheelDelta > 0 ? stack.amount() * 2L : stack.amount() / 2L; - } else { - amt = wheelDelta > 0 ? stack.amount() + 1L : stack.amount() - 1L; - } - if (amt > 0 && amt < Integer.MAX_VALUE + 1L) { - writeClientAction(AMOUNT_CHANGE_ID, buf -> buf.writeVarLong(amt)); - return true; - } - return false; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEPatternViewSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEPatternViewSlotWidget.java deleted file mode 100644 index a3d0f477b93..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/slot/AEPatternViewSlotWidget.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.slot; - -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; - -import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.utils.Position; -import com.lowdragmc.lowdraglib.utils.Size; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.Container; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.items.IItemHandlerModifiable; - -import org.jetbrains.annotations.NotNull; - -public class AEPatternViewSlotWidget extends SlotWidget { - - protected IGuiTexture occupiedTexture; - - public AEPatternViewSlotWidget() {} - - public AEPatternViewSlotWidget( - Container inventory, - int slotIndex, - int xPosition, - int yPosition, - boolean canTakeItems, - boolean canPutItems) { - super(inventory, slotIndex, xPosition, yPosition, canTakeItems, canPutItems); - } - - public AEPatternViewSlotWidget( - IItemHandlerModifiable itemHandler, - int slotIndex, - int xPosition, - int yPosition, - boolean canTakeItems, - boolean canPutItems) { - super(itemHandler, slotIndex, xPosition, yPosition, canTakeItems, canPutItems); - } - - public AEPatternViewSlotWidget( - IItemHandlerModifiable itemHandler, int slotIndex, int xPosition, int yPosition) { - super(itemHandler, slotIndex, xPosition, yPosition); - } - - public AEPatternViewSlotWidget(Container inventory, int slotIndex, int xPosition, int yPosition) { - super(inventory, slotIndex, xPosition, yPosition); - } - - public AEPatternViewSlotWidget setOccupiedTexture(IGuiTexture... occupiedTexture) { - this.occupiedTexture = occupiedTexture.length > 1 ? new GuiTextureGroup(occupiedTexture) : occupiedTexture[0]; - return this; - } - - @Override - @OnlyIn(Dist.CLIENT) - public void updateScreen() { - super.updateScreen(); - if (occupiedTexture != null) { - occupiedTexture.updateTick(); - } - } - - @Override - @OnlyIn(Dist.CLIENT) - protected void drawBackgroundTexture(@NotNull GuiGraphics graphics, int mouseX, int mouseY) { - Position pos = getPosition(); - Size size = getSize(); - if (getHandler() != null && getHandler().hasItem()) { - if (occupiedTexture != null) { - occupiedTexture.draw(graphics, mouseX, mouseY, pos.x, pos.y, size.width, size.height); - } - } else { - if (backgroundTexture != null) { - backgroundTexture.draw(graphics, mouseX, mouseY, pos.x, pos.y, size.width, size.height); - } - } - - if (hoverTexture != null && isMouseOverElement(mouseX, mouseY)) { - hoverTexture.draw(graphics, mouseX, mouseY, pos.x, pos.y, size.width, size.height); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index 0374bf3c540..11a259d009b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -23,7 +23,7 @@ import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEConfigWidget; +import com.gregtechceu.gtceu.integration.ae2.mui.AEConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java index 62d22b5a112..e4b81c45b66 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java @@ -21,7 +21,7 @@ import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEConfigWidget; +import com.gregtechceu.gtceu.integration.ae2.mui.AEConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidSlot; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index 2df604de832..860f6675fda 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -20,9 +20,9 @@ import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEKeyStorageSyncHandler; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEStackDisplayWidget; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.ScrollPreservingGrid; +import com.gregtechceu.gtceu.integration.ae2.mui.AEKeyStorageSyncHandler; +import com.gregtechceu.gtceu.integration.ae2.mui.AEStackDisplayWidget; +import com.gregtechceu.gtceu.integration.ae2.mui.ScrollPreservingGrid; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java index a292f24dba2..4a0c96114fa 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java @@ -22,9 +22,9 @@ import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEKeyStorageSyncHandler; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.AEStackDisplayWidget; -import com.gregtechceu.gtceu.integration.ae2.gui.widget.mui.ScrollPreservingGrid; +import com.gregtechceu.gtceu.integration.ae2.mui.AEKeyStorageSyncHandler; +import com.gregtechceu.gtceu.integration.ae2.mui.AEStackDisplayWidget; +import com.gregtechceu.gtceu.integration.ae2.mui.ScrollPreservingGrid; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; import com.gregtechceu.gtceu.utils.GTMath; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigSyncHandler.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigSyncHandler.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigSyncHandler.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigSyncHandler.java index 28118d95929..ffe6de1de10 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigSyncHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigSyncHandler.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandler; import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlot; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigWidget.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigWidget.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigWidget.java index b81702351de..a5699018fb5 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEConfigWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEConfigWidget.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEGuiHelper.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEGuiHelper.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEGuiHelper.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEGuiHelper.java index 75c15d4f07d..cdcc533a284 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEGuiHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEGuiHelper.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.integration.ae2.utils.AEUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEKeyStorageSyncHandler.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEKeyStorageSyncHandler.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEKeyStorageSyncHandler.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEKeyStorageSyncHandler.java index f595f939ebe..8f1fed22842 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEKeyStorageSyncHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEKeyStorageSyncHandler.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.api.mui.value.sync.ValueSyncHandler; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEStackDisplayWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEStackDisplayWidget.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEStackDisplayWidget.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEStackDisplayWidget.java index cf40210ed5e..a8959d9eab2 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/AEStackDisplayWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/AEStackDisplayWidget.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.mui.base.ITheme; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/ScrollPreservingGrid.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/ScrollPreservingGrid.java similarity index 95% rename from src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/ScrollPreservingGrid.java rename to src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/ScrollPreservingGrid.java index 1f1e7cbe19b..7b61658b4ee 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/gui/widget/mui/ScrollPreservingGrid.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/ScrollPreservingGrid.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.ae2.gui.widget.mui; +package com.gregtechceu.gtceu.integration.ae2.mui; import com.gregtechceu.gtceu.api.mui.widget.scroll.ScrollData; import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java index defe62e35f9..087d8f490ea 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/RecipeLogicProvider.java @@ -120,13 +120,13 @@ protected void addTooltip(CompoundTag capData, ITooltip tooltip, Player player, if (blockEntity instanceof IRecipeLogicMachine rlm) { var logic = rlm.getRecipeLogic(); - if (logic.showFancyTooltip() && logic.isWorkingEnabled()) { + if (logic.hasReasonText() && logic.isWorkingEnabled()) { Component status = logic.isWaiting() ? Component.translatable("gtceu.recipe_logic.recipe_waiting") .withStyle(ChatFormatting.YELLOW) : Component.translatable("gtceu.recipe_logic.setup_fail").withStyle(ChatFormatting.RED); tooltip.add(status); - logic.getFancyTooltip().forEach(tooltip::add); + logic.getReasonText().forEach(tooltip::add); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java index 04a9f1fefae..d0b3b6b4940 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java @@ -41,6 +41,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.Tags; @@ -55,6 +58,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; import java.lang.reflect.ParameterizedType; @@ -694,4 +698,46 @@ public static void setOnFire(Level level, BlockPos pos, double additionalFireCha } } } + + public static AABB rotateAABB(AABB AABB, Direction facing) { + switch (facing) { + case SOUTH -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), 180); + } + case EAST -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), -90); + } + case WEST -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), 90); + } + case UP -> { + return rotateAABB(AABB, new Vector3f(1, 0, 0), 90); + } + case DOWN -> { + return rotateAABB(AABB, new Vector3f(1, 0, 0), -90); + } + } + return AABB; + } + + public static AABB rotateAABB(AABB AABB, Vector3f axis, double degree) { + Vector3f min = new Vector3f((float) AABB.minX, (float) AABB.minY, (float) AABB.minZ).sub(0.5f, 0.5f, 0.5f); + Vector3f max = new Vector3f((float) AABB.minX, (float) AABB.minY, (float) AABB.minZ).sub(0.5f, 0.5f, 0.5f); + float radians = (float) Math.toRadians(degree); + min.rotateAxis(radians, axis.x, axis.y, axis.z); + max.rotateAxis(radians, axis.x, axis.y, axis.z); + min.add(0.5f, 0.5f, 0.5f); + max.add(0.5f, 0.5f, 0.5f); + return new AABB(min.x, min.y, min.z, max.x, max.y, max.z); + } + + public static VoxelShape rotateVoxelShape(VoxelShape shape, Vector3f axis, double degree) { + return shape.toAabbs().stream().map(AABB -> Shapes.create(rotateAABB(AABB, axis, degree))) + .reduce(Shapes.empty(), Shapes::or); + } + + public static VoxelShape rotateVoxelShape(VoxelShape shape, Direction dir) { + return shape.toAabbs().stream().map(AABB -> Shapes.create(rotateAABB(AABB, dir))).reduce(Shapes.empty(), + Shapes::or); + } }