Create/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxScreen.java
zelophed 9098002c17 Wait it's all Flywheel? Always has been.
- add flywheel as a dependency to catnip
2023-08-13 23:39:10 +02:00

172 lines
5.5 KiB
Java

package com.simibubi.create.content.equipment.toolbox;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPackets;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.menu.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.gui.widget.IconButton;
import com.simibubi.create.foundation.utility.CreateLang;
import net.createmod.catnip.gui.element.GuiGameElement;
import net.createmod.catnip.utility.Iterate;
import net.minecraft.client.renderer.Rect2i;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.ItemStack;
public class ToolboxScreen extends AbstractSimiContainerScreen<ToolboxMenu> {
protected static final AllGuiTextures BG = AllGuiTextures.TOOLBOX;
protected static final AllGuiTextures PLAYER = AllGuiTextures.PLAYER_INVENTORY;
protected Slot hoveredToolboxSlot;
private IconButton confirmButton;
private IconButton disposeButton;
private DyeColor color;
private List<Rect2i> extraAreas = Collections.emptyList();
public ToolboxScreen(ToolboxMenu menu, Inventory inv, Component title) {
super(menu, inv, title);
init();
}
@Override
protected void init() {
setWindowSize(30 + BG.getWidth(), BG.getHeight() + PLAYER.getHeight() - 24);
setWindowOffset(-11, 0);
super.init();
color = menu.contentHolder.getColor();
confirmButton = new IconButton(leftPos + 30 + BG.getWidth() - 33, topPos + BG.getHeight() - 24, AllIcons.I_CONFIRM);
confirmButton.withCallback(() -> {
minecraft.player.closeContainer();
});
addRenderableWidget(confirmButton);
disposeButton = new IconButton(leftPos + 30 + 81, topPos + 69, AllIcons.I_TOOLBOX);
disposeButton.withCallback(() -> {
AllPackets.getChannel().sendToServer(new ToolboxDisposeAllPacket(menu.contentHolder.getBlockPos()));
});
disposeButton.setToolTip(CreateLang.translateDirect("toolbox.depositBox"));
addRenderableWidget(disposeButton);
extraAreas = ImmutableList.of(
new Rect2i(leftPos + 30 + BG.getWidth(), topPos + BG.getHeight() - 15 - 34 - 6, 72, 68)
);
}
@Override
public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) {
menu.renderPass = true;
super.render(matrixStack, mouseX, mouseY, partialTicks);
menu.renderPass = false;
}
@Override
protected void renderBg(PoseStack ms, float partialTicks, int mouseX, int mouseY) {
int x = leftPos + imageWidth - BG.getWidth();
int y = topPos;
BG.render(ms, x, y, this);
font.draw(ms, title, x + 15, y + 4, 0x592424);
int invX = leftPos;
int invY = topPos + imageHeight - PLAYER.getHeight();
renderPlayerInventory(ms, invX, invY);
renderToolbox(ms, x + BG.getWidth() + 50, y + BG.getHeight() + 12, partialTicks);
hoveredToolboxSlot = null;
for (int compartment = 0; compartment < 8; compartment++) {
int baseIndex = compartment * ToolboxInventory.STACKS_PER_COMPARTMENT;
Slot slot = menu.slots.get(baseIndex);
ItemStack itemstack = slot.getItem();
int i = slot.x + leftPos;
int j = slot.y + topPos;
if (itemstack.isEmpty())
itemstack = menu.getFilter(compartment);
if (!itemstack.isEmpty()) {
int count = menu.totalCountInCompartment(compartment);
String s = String.valueOf(count);
setBlitOffset(100);
itemRenderer.blitOffset = 100.0F;
RenderSystem.enableDepthTest();
itemRenderer.renderAndDecorateItem(minecraft.player, itemstack, i, j, 0);
itemRenderer.renderGuiItemDecorations(font, itemstack, i, j, s);
setBlitOffset(0);
itemRenderer.blitOffset = 0.0F;
}
if (isHovering(slot.x, slot.y, 16, 16, mouseX, mouseY)) {
hoveredToolboxSlot = slot;
RenderSystem.disableDepthTest();
RenderSystem.colorMask(true, true, true, false);
int slotColor = this.getSlotColor(baseIndex);
fillGradient(ms, i, j, i + 16, j + 16, slotColor, slotColor);
RenderSystem.colorMask(true, true, true, true);
RenderSystem.enableDepthTest();
}
}
}
private void renderToolbox(PoseStack ms, int x, int y, float partialTicks) {
TransformStack.cast(ms)
.pushPose()
.translate(x, y, 100)
.scale(50)
.rotateX(-22)
.rotateY(-202);
GuiGameElement.of(AllBlocks.TOOLBOXES.get(color)
.getDefaultState())
.render(ms);
TransformStack.cast(ms)
.pushPose()
.translate(0, -6 / 16f, 12 / 16f)
.rotateX(-105 * menu.contentHolder.lid.getValue(partialTicks))
.translate(0, 6 / 16f, -12 / 16f);
GuiGameElement.of(AllPartialModels.TOOLBOX_LIDS.get(color))
.render(ms);
ms.popPose();
for (int offset : Iterate.zeroAndOne) {
ms.pushPose();
ms.translate(0, -offset * 1 / 8f,
menu.contentHolder.drawers.getValue(partialTicks) * -.175f * (2 - offset));
GuiGameElement.of(AllPartialModels.TOOLBOX_DRAWER)
.render(ms);
ms.popPose();
}
ms.popPose();
}
@Override
protected void renderForeground(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) {
if (hoveredToolboxSlot != null)
hoveredSlot = hoveredToolboxSlot;
super.renderForeground(matrixStack, mouseX, mouseY, partialTicks);
}
@Override
public List<Rect2i> getExtraAreas() {
return extraAreas;
}
}