diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java index 0d1a1ce2..256768bd 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java @@ -1,5 +1,6 @@ package li.cil.oc2.client.gui; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import li.cil.oc2.api.bus.device.DeviceTypes; import li.cil.oc2.client.gui.util.GuiUtils; @@ -9,6 +10,7 @@ import li.cil.oc2.common.Constants; import li.cil.oc2.common.container.AbstractMachineTerminalContainer; import li.cil.oc2.common.util.TooltipUtils; import net.minecraft.ChatFormatting; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.TranslatableComponent; @@ -73,22 +75,53 @@ public abstract class AbstractMachineInventoryScreen 0) { - final int energyStored = menu.getEnergy(); - final int energyConsumption = menu.getEnergyConsumption(); + Sprites.SIDEBAR_2.draw(stack, leftPos - Sprites.SIDEBAR_2.width, topPos + CONTROLS_TOP); - Sprites.ENERGY_BAR.drawFillY(stack, leftPos - Sprites.SIDEBAR_2.width + 4, topPos + ENERGY_TOP + 4, energyStored / (float) energyCapacity); + if (shouldRenderEnergyBar()) { + final int x = leftPos - Sprites.SIDEBAR_2.width; + final int y = topPos + ENERGY_TOP; + Sprites.SIDEBAR_2.draw(stack, x, y); + Sprites.ENERGY_BASE.draw(stack, x + 4, y + 4); + } + } + @Override + protected void renderFg(final PoseStack stack, final float partialTicks, final int mouseX, final int mouseY) { + super.renderFg(stack, partialTicks, mouseX, mouseY); + + GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.FLASH_MEMORY, Sprites.WARN_ICON); + GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.MEMORY, Sprites.WARN_ICON); + GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.HARD_DRIVE, Sprites.INFO_ICON); + + if (shouldRenderEnergyBar()) { + final int x = leftPos - Sprites.SIDEBAR_2.width + 4; + final int y = topPos + ENERGY_TOP + 4; + Sprites.ENERGY_BAR.drawFillY(stack, x, y, menu.getEnergy() / (float) menu.getEnergyCapacity()); + } + } + + @Override + protected void renderTooltip(final PoseStack stack, final int mouseX, final int mouseY) { + super.renderTooltip(stack, mouseX, mouseY); + + GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.FLASH_MEMORY); + GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.MEMORY); + GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.HARD_DRIVE); + + if (shouldRenderEnergyBar()) { if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) { final List tooltip = asList( - new TranslatableComponent(Constants.TOOLTIP_ENERGY, withFormat(energyStored + "/" + energyCapacity, ChatFormatting.GREEN)), - new TranslatableComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, withFormat(String.valueOf(energyConsumption), ChatFormatting.GREEN)) + new TranslatableComponent(Constants.TOOLTIP_ENERGY, + withFormat(menu.getEnergy() + "/" + menu.getEnergyCapacity(), ChatFormatting.GREEN)), + new TranslatableComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, + withFormat(String.valueOf(menu.getEnergyConsumption()), ChatFormatting.GREEN)) ); TooltipUtils.drawTooltip(stack, tooltip, mouseX, mouseY, 200); } @@ -97,25 +130,7 @@ public abstract class AbstractMachineInventoryScreen 0) { - final int x = leftPos - Sprites.SIDEBAR_2.width; - final int y = topPos + ENERGY_TOP; - Sprites.SIDEBAR_2.draw(stack, x, y); - Sprites.ENERGY_BASE.draw(stack, x + 4, y + 4); - } - } - - protected void renderMissingDeviceInfo(final PoseStack stack, final int mouseX, final int mouseY) { - GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.FLASH_MEMORY, Sprites.WARN_ICON); - GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.MEMORY, Sprites.WARN_ICON); - GuiUtils.renderMissingDeviceInfoIcon(stack, this, DeviceTypes.HARD_DRIVE, Sprites.INFO_ICON); - - GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.FLASH_MEMORY); - GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.MEMORY); - GuiUtils.renderMissingDeviceInfoTooltip(stack, this, mouseX, mouseY, DeviceTypes.HARD_DRIVE); + private boolean shouldRenderEnergyBar() { + return menu.getEnergyCapacity() > 0; } } diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java index 1ff4f203..cd051146 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java @@ -48,29 +48,6 @@ public abstract class AbstractMachineTerminalScreen 0) { - final int energyStored = menu.getEnergy(); - final int energyConsumption = menu.getEnergyConsumption(); - - Sprites.ENERGY_BAR.drawFillY(stack, leftPos - Sprites.SIDEBAR_2.width + 4, topPos + ENERGY_TOP + 4, energyStored / (float) energyCapacity); - - if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) { - final List tooltip = asList( - new TranslatableComponent(Constants.TOOLTIP_ENERGY, withFormat(energyStored + "/" + energyCapacity, ChatFormatting.GREEN)), - new TranslatableComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, withFormat(String.valueOf(energyConsumption), ChatFormatting.GREEN)) - ); - TooltipUtils.drawTooltip(stack, tooltip, mouseX, mouseY, 200); - } - } - } - @Override public void containerTick() { super.containerTick(); @@ -180,13 +157,23 @@ public abstract class AbstractMachineTerminalScreen 0) { + if (shouldRenderEnergyBar()) { final int x = leftPos - Sprites.SIDEBAR_2.width; final int y = topPos + ENERGY_TOP; Sprites.SIDEBAR_2.draw(stack, x, y); @@ -196,8 +183,32 @@ public abstract class AbstractMachineTerminalScreen tooltip = asList( + new TranslatableComponent(Constants.TOOLTIP_ENERGY, + withFormat(menu.getEnergy() + "/" + menu.getEnergyCapacity(), ChatFormatting.GREEN)), + new TranslatableComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, + withFormat(String.valueOf(menu.getEnergyConsumption()), ChatFormatting.GREEN)) + ); + TooltipUtils.drawTooltip(stack, tooltip, mouseX, mouseY, 200); + } + } + } + @Override protected void renderLabels(final PoseStack stack, final int mouseX, final int mouseY) { // This is required to prevent the labels from being rendered } + + /////////////////////////////////////////////////////////////////// + + private boolean shouldRenderEnergyBar() { + return menu.getEnergyCapacity() > 0; + } } diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractModContainerScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractModContainerScreen.java index 814bb4bb..a0b76d34 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractModContainerScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractModContainerScreen.java @@ -1,6 +1,11 @@ package li.cil.oc2.client.gui; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -23,4 +28,34 @@ public abstract class AbstractModContainerScreen= y && localMouseY < y + height; } + + @Override + public void render(final PoseStack stack, final int mouseX, final int mouseY, final float partialTicks) { + renderBackground(stack); + + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1, 1, 1, 1); + + super.render(stack, mouseX, mouseY, partialTicks); + + renderFg(stack, partialTicks, mouseX, mouseY); + + renderTooltip(stack, mouseX, mouseY); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void renderTooltip(final PoseStack stack, final int mouseX, final int mouseY) { + super.renderTooltip(stack, mouseX, mouseY); + + for (final Widget widget : renderables) { + if (widget instanceof AbstractWidget abstractWidget) { + abstractWidget.renderToolTip(stack, mouseX, mouseY); + } + } + } + + protected void renderFg(final PoseStack stack, final float partialTicks, final int mouseX, final int mouseY) { + } } diff --git a/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java b/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java index 1a0ef17b..a5c85527 100644 --- a/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java @@ -1,9 +1,7 @@ package li.cil.oc2.client.gui; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import li.cil.oc2.common.container.ComputerInventoryContainer; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraftforge.api.distmarker.Dist; @@ -20,23 +18,9 @@ public final class ComputerContainerScreen extends AbstractMachineInventoryScree /////////////////////////////////////////////////////////////////// - @Override - public void render(final PoseStack stack, final int mouseX, final int mouseY, final float partialTicks) { - super.render(stack, mouseX, mouseY, partialTicks); - - renderMissingDeviceInfo(stack, mouseX, mouseY); - - renderTooltip(stack, mouseX, mouseY); - } - - /////////////////////////////////////////////////////////////////// - @Override protected void renderBg(final PoseStack stack, final float partialTicks, final int mouseX, final int mouseY) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1, 1, 1, 1); - - Sprites.COMPUTER_CONTAINER.draw(stack, leftPos, topPos); super.renderBg(stack, partialTicks, mouseX, mouseY); + Sprites.COMPUTER_CONTAINER.draw(stack, leftPos, topPos); } } diff --git a/src/main/java/li/cil/oc2/client/gui/RobotContainerScreen.java b/src/main/java/li/cil/oc2/client/gui/RobotContainerScreen.java index 821eb37a..ad995f81 100644 --- a/src/main/java/li/cil/oc2/client/gui/RobotContainerScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/RobotContainerScreen.java @@ -34,31 +34,13 @@ public final class RobotContainerScreen extends AbstractMachineInventoryScreen