diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatteryMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatteryMenu.java index 7b5e2aa34..7b6b05bc4 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatteryMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatteryMenu.java @@ -22,7 +22,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu { protected Inventory inventory; protected Player ply; - public final ArrayList> widget_list = new ArrayList<>(); + public final ArrayList> mattery_widgets = new ArrayList<>(); public final ArrayList inventory_slots = new ArrayList<>(); protected MatteryMenu(@Nullable MenuType p_38851_, int p_38852_, Inventory inventory) { @@ -37,10 +37,10 @@ public abstract class MatteryMenu extends AbstractContainerMenu { } public void addWidget(AbstractWidget widget, Consumer> consumer) { - if (widget_list.contains(widget)) + if (mattery_widgets.contains(widget)) return; - widget_list.add(widget); + mattery_widgets.add(widget); consumer.accept(this::addDataSlots); } @@ -80,7 +80,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu { @Override public void broadcastChanges() { - for (AbstractWidget widget : this.widget_list) { + for (AbstractWidget widget : this.mattery_widgets) { widget.updateServer(); } @@ -89,7 +89,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu { @Override public void broadcastFullState() { - for (AbstractWidget widget : this.widget_list) { + for (AbstractWidget widget : this.mattery_widgets) { widget.updateServer(); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java index 89568a971..275ed5f5f 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java @@ -50,15 +50,19 @@ public abstract class AbstractWidget { is_hovered = mouse_x >= x + local_x && mouse_y >= y + local_y && x + local_x + getImageWidth() >= mouse_x && y + local_y + getImageHeight() >= mouse_y; } + public void setIsHovered(boolean value) { + is_hovered = value; + } + public boolean isHovered() { return is_hovered; } abstract public void updateServer(); - abstract public void renderBackground(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y); + abstract public void renderBackground(MatteryScreen screen, PoseStack pose, int local_x, int local_y); // true - rendered a tooltip, break the loop // false - pass - abstract public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y); + abstract public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int mouse_x, int mouse_y); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java index 695a047d4..411d6391c 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java @@ -46,7 +46,7 @@ public class BatteryLevelWidget extends StorageGaugeWidge } @Override - public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) { + public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int mouse_x, int mouse_y) { if (is_hovered) { List text = List.of( new TranslatableComponent("otm.gui.power.percentage_level", String.format("%.2f", getLevel() * 100d)), diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java index f1a0d6cda..f8ee2e738 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java @@ -29,7 +29,7 @@ abstract public class GaugeWidget extends AbstractWidget< } @Override - public void renderBackground(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) { + public void renderBackground(MatteryScreen screen, PoseStack pose, int local_x, int local_y) { setupGaugeDrawing(); screen.blit(pose, local_x + x, local_y + y, getImageX(), getImageY(), getImageWidth(), getImageHeight()); diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java index 252298f22..2a13fb16b 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java @@ -46,7 +46,7 @@ public class MatterLevelWidget extends StorageGaugeWidget } @Override - public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) { + public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int mouse_x, int mouse_y) { if (is_hovered) { List text = List.of( new TranslatableComponent("otm.gui.matter.percentage_level", String.format("%.2f", getLevel() * 100d)), diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/ProgressGaugeWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/ProgressGaugeWidget.java index 3c4aa01a8..ac3028031 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/ProgressGaugeWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/ProgressGaugeWidget.java @@ -96,7 +96,7 @@ public class ProgressGaugeWidget extends GaugeWidget { } @Override - public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) { + public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int mouse_x, int mouse_y) { if (is_hovered) { List text; diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java index 0c778e2d8..bb6a60561 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java @@ -22,9 +22,9 @@ import net.minecraft.world.item.ItemStack; import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.menu.MatteryMenu; import ru.dbotthepony.mc.otm.menu.slot.MatterySlot; -import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget; import ru.dbotthepony.mc.otm.screen.panels.EditablePanel; import ru.dbotthepony.mc.otm.screen.panels.FramePanel; +import ru.dbotthepony.mc.otm.screen.panels.MatteryWidgetPanel; import ru.dbotthepony.mc.otm.screen.panels.SlotPanel; import javax.annotation.Nonnull; @@ -128,9 +128,14 @@ public abstract class MatteryScreen extends AbstractConta main_frame = makeMainFrame(); - if (main_frame != null) + if (main_frame != null) { addPanel(main_frame); + for (var widget : menu.mattery_widgets) { + new MatteryWidgetPanel(this, main_frame, widget); + } + } + movePanels(); } @@ -141,7 +146,7 @@ public abstract class MatteryScreen extends AbstractConta @Nullable protected FramePanel makeMainFrame() { - return new FramePanel(this, null, 0, 0, 200, 100, getTitle()); + return new FramePanel(this, null, 0, 0, 18 * 9 + 16, 100, getTitle()); } public ItemRenderer getItemRenderer() { @@ -285,16 +290,6 @@ public abstract class MatteryScreen extends AbstractConta return super.keyPressed(p_97765_, p_97766_, p_97767_); } - protected void renderTooltip(PoseStack pose, int mouseX, int mouseY) { - if (this.hoveredSlot == null && menu.getCarried().isEmpty()) { - for (AbstractWidget widget : menu.widget_list) { - if (widget.renderTooltip(this, pose, leftPos, topPos, mouseX, mouseY)) { - return; - } - } - } - } - public void renderFloatingItem(ItemStack p_97783_, int p_97784_, int p_97785_, String p_97786_) { PoseStack posestack = RenderSystem.getModelViewStack(); posestack.translate(0.0D, 0.0D, 32.0D); @@ -328,11 +323,6 @@ public abstract class MatteryScreen extends AbstractConta hoveredSlot = null; - // renderBg - for (AbstractWidget widget : menu.widget_list) { - widget.renderBackground(this, pose, leftPos, topPos, mouse_x, mouse_y); - } - var hovered = false; for (int i = panels.size() - 1; i >= 0; i--) { @@ -389,7 +379,7 @@ public abstract class MatteryScreen extends AbstractConta this.renderTooltip(pose, this.hoveredSlot.getItem(), mouse_x, mouse_y); } else { for (var panel : panels) { - panel.renderPost(pose, mouse_x, mouse_y, flag); + panel.renderTooltips(pose, mouse_x, mouse_y, flag); } } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/panels/EditablePanel.java b/src/main/java/ru/dbotthepony/mc/otm/screen/panels/EditablePanel.java index 0be130dbc..5831a40ac 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/panels/EditablePanel.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/panels/EditablePanel.java @@ -97,7 +97,7 @@ public class EditablePanel implements GuiEventListener { } - protected void innerRenderPost(PoseStack stack, float mouse_x, float mouse_y, float flag) { + protected void innerRenderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) { } @@ -167,16 +167,16 @@ public class EditablePanel implements GuiEventListener { * @param mouse_y * @param flag */ - public void renderPost(PoseStack stack, float mouse_x, float mouse_y, float flag) { + public void renderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) { if (!getVisible()) { return; } - innerRenderPost(stack, mouse_x, mouse_y, flag); + innerRenderTooltips(stack, mouse_x, mouse_y, flag); for (var child : children) { if (child.getVisible()) { - child.innerRenderPost(stack, mouse_x, mouse_y, flag); + child.innerRenderTooltips(stack, mouse_x, mouse_y, flag); } } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/panels/MatteryWidgetPanel.java b/src/main/java/ru/dbotthepony/mc/otm/screen/panels/MatteryWidgetPanel.java new file mode 100644 index 000000000..99b59f4ce --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/panels/MatteryWidgetPanel.java @@ -0,0 +1,31 @@ +package ru.dbotthepony.mc.otm.screen.panels; + +import com.mojang.blaze3d.vertex.PoseStack; +import ru.dbotthepony.mc.otm.menu.MatteryMenu; +import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget; +import ru.dbotthepony.mc.otm.screen.MatteryScreen; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class MatteryWidgetPanel extends EditablePanel { + public final AbstractWidget widget; + + public MatteryWidgetPanel(@Nonnull MatteryScreen screen, @Nullable EditablePanel parent, AbstractWidget widget) { + super(screen, parent, widget.x, widget.y, widget.getImageWidth(), widget.getImageHeight()); + widget.x = 0; + widget.y = 0; + this.widget = widget; + } + + @Override + protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) { + widget.setIsHovered(is_hovered); + widget.renderBackground((MatteryScreen) screen, stack, 0, 0); + } + + @Override + protected void innerRenderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) { + widget.renderTooltip((MatteryScreen) screen, stack, (int) mouse_x, (int) mouse_y); + } +}