117 lines
4.8 KiB
Java
117 lines
4.8 KiB
Java
package com.atsuishio.superbwarfare.client.screens;
|
|
|
|
import com.atsuishio.superbwarfare.Mod;
|
|
import com.atsuishio.superbwarfare.block.entity.ChargingStationBlockEntity;
|
|
import com.atsuishio.superbwarfare.menu.ChargingStationMenu;
|
|
import com.atsuishio.superbwarfare.network.message.send.ShowChargingRangeMessage;
|
|
import net.minecraft.client.gui.GuiGraphics;
|
|
import net.minecraft.client.gui.components.AbstractButton;
|
|
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
|
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.entity.player.Inventory;
|
|
import net.neoforged.api.distmarker.Dist;
|
|
import net.neoforged.api.distmarker.OnlyIn;
|
|
import net.neoforged.neoforge.network.PacketDistributor;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
public class ChargingStationScreen extends AbstractContainerScreen<ChargingStationMenu> {
|
|
|
|
private static final ResourceLocation TEXTURE = Mod.loc("textures/gui/charging_station.png");
|
|
|
|
public ChargingStationScreen(ChargingStationMenu pMenu, Inventory pPlayerInventory, Component pTitle) {
|
|
super(pMenu, pPlayerInventory, pTitle);
|
|
imageWidth = 176;
|
|
imageHeight = 166;
|
|
}
|
|
|
|
@Override
|
|
protected void renderBg(GuiGraphics pGuiGraphics, float pPartialTick, int pMouseX, int pMouseY) {
|
|
int i = (this.width - this.imageWidth) / 2;
|
|
int j = (this.height - this.imageHeight) / 2;
|
|
pGuiGraphics.blit(TEXTURE, i, j, 0, 0, this.imageWidth, this.imageHeight);
|
|
|
|
long fuelTick = ChargingStationScreen.this.menu.getFuelTick();
|
|
long maxFuelTick = ChargingStationScreen.this.menu.getMaxFuelTick();
|
|
long energy = ChargingStationScreen.this.menu.getEnergy();
|
|
|
|
if (maxFuelTick == 0) {
|
|
maxFuelTick = ChargingStationBlockEntity.DEFAULT_FUEL_TIME;
|
|
}
|
|
|
|
// Fuel
|
|
float fuelRate = (float) fuelTick / (float) maxFuelTick;
|
|
pGuiGraphics.blit(TEXTURE, i + 45, j + 51 - (int) (13 * fuelRate), 177, 14 - (int) (13 * fuelRate), 13, (int) (13 * fuelRate));
|
|
|
|
// Energy
|
|
float energyRate = (float) energy / (float) ChargingStationBlockEntity.MAX_ENERGY;
|
|
pGuiGraphics.blit(TEXTURE, i + 80, j + 70 - (int) (54 * energyRate),
|
|
177, 17, 16, (int) (54 * energyRate));
|
|
}
|
|
|
|
@Override
|
|
public void render(@NotNull GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
|
this.renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
|
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
|
this.renderTooltip(pGuiGraphics, pMouseX, pMouseY);
|
|
}
|
|
|
|
@Override
|
|
protected void renderTooltip(@NotNull GuiGraphics pGuiGraphics, int pX, int pY) {
|
|
super.renderTooltip(pGuiGraphics, pX, pY);
|
|
|
|
int i = (this.width - this.imageWidth) / 2;
|
|
int j = (this.height - this.imageHeight) / 2;
|
|
|
|
List<Component> tooltip = new ArrayList<>();
|
|
tooltip.add(Component.translatable("des.superbwarfare.charging_station.energy", ChargingStationScreen.this.menu.getEnergy(),
|
|
ChargingStationBlockEntity.MAX_ENERGY));
|
|
|
|
if ((pX - i) >= 80 && (pX - i) <= 96 && (pY - j) >= 16 && (pY - j) <= 70) {
|
|
pGuiGraphics.renderTooltip(this.font, tooltip, Optional.empty(), pX, pY);
|
|
}
|
|
}
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
class ShowRangeButton extends AbstractButton {
|
|
|
|
@Override
|
|
protected void renderWidget(@NotNull GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
|
this.setMessage(ChargingStationScreen.this.menu.showRange() ? Component.translatable("container.superbwarfare.charging_station.hide_range") : Component.translatable("container.superbwarfare.charging_station.show_range"));
|
|
super.renderWidget(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
|
}
|
|
|
|
public ShowRangeButton(int pX, int pY) {
|
|
super(pX + 7, pY + 55, 33, 14, Component.translatable("container.superbwarfare.charging_station.show_range"));
|
|
}
|
|
|
|
@Override
|
|
public void onPress() {
|
|
PacketDistributor.sendToServer(new ShowChargingRangeMessage(!ChargingStationScreen.this.menu.showRange()));
|
|
}
|
|
|
|
@Override
|
|
protected void updateWidgetNarration(@NotNull NarrationElementOutput pNarrationElementOutput) {
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void init() {
|
|
super.init();
|
|
this.titleLabelX = 8;
|
|
this.titleLabelY = 5;
|
|
this.inventoryLabelX = 8;
|
|
this.inventoryLabelY = 74;
|
|
|
|
int i = (this.width - this.imageWidth) / 2;
|
|
int j = (this.height - this.imageHeight) / 2;
|
|
this.addRenderableWidget(new ShowRangeButton(i, j));
|
|
}
|
|
|
|
}
|