Created
June 20, 2020 00:20
-
-
Save Lanse505/0bcc92e37b7de17bc4908ddb13b3965a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* This file is part of Titanium | |
* Copyright (C) 2020, Horizon Studio <[email protected]>. | |
* | |
* This code is licensed under GNU Lesser General Public License v3.0, the full license text can be found in LICENSE.txt | |
*/ | |
package com.hrznstudio.titanium.client.screen.addon; | |
import com.hrznstudio.titanium.api.client.AssetTypes; | |
import com.hrznstudio.titanium.api.client.IAsset; | |
import com.hrznstudio.titanium.component.IComponentHarness; | |
import com.hrznstudio.titanium.component.inventory.InventoryComponent; | |
import com.hrznstudio.titanium.component.inventory.SidedInventoryComponent; | |
import com.hrznstudio.titanium.client.screen.asset.IAssetProvider; | |
import com.hrznstudio.titanium.util.AssetUtil; | |
import com.mojang.blaze3d.systems.RenderSystem; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.client.gui.AbstractGui; | |
import net.minecraft.client.gui.screen.Screen; | |
import net.minecraft.client.renderer.ItemRenderer; | |
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; | |
import net.minecraft.item.ItemStack; | |
import org.apache.commons.lang3.tuple.Pair; | |
import java.awt.*; | |
import java.util.function.Function; | |
public class SlotsScreenAddon<T extends IComponentHarness> extends BasicScreenAddon { | |
private final InventoryComponent<T> handler; | |
public SlotsScreenAddon(InventoryComponent<T> handler) { | |
super(handler.getXPos(), handler.getYPos()); | |
this.handler = handler; | |
} | |
@Override | |
public int getXSize() { | |
return 0; | |
} | |
@Override | |
public int getYSize() { | |
return 0; | |
} | |
public void drawAsset(Screen screen, IAssetProvider provider, int handlerPosX, int handlerPosY, int guiX, int guiY, int slots, Function<Integer, Pair<Integer, Integer>> positionFunction, boolean drawColor, int color) { | |
IAsset slot = IAssetProvider.getAsset(provider, AssetTypes.SLOT); | |
Rectangle area = slot.getArea(); | |
screen.getMinecraft().getTextureManager().bindTexture(slot.getResourceLocation()); | |
//Draw background | |
if (drawColor) { | |
for (int slotID = 0; slotID < slots; slotID++) { | |
int posX = positionFunction.apply(slotID).getLeft(); | |
int posY = positionFunction.apply(slotID).getRight(); | |
Color colored = new Color(color); | |
AbstractGui.fill(guiX + handlerPosX + posX - 2, guiY + handlerPosY + posY - 2, | |
guiX + handlerPosX + posX + area.width, guiY + handlerPosY + posY + area.height, new Color(colored.getRed(), colored.getGreen(), colored.getBlue(), 256/2).getRGB()); | |
RenderSystem.color4f(1, 1, 1, 0.5f); | |
} | |
} | |
//Draw slot | |
for (int slotID = 0; slotID < slots; slotID++) { | |
int posX = positionFunction.apply(slotID).getLeft(); | |
int posY = positionFunction.apply(slotID).getRight(); | |
AssetUtil.drawAsset(screen, slot, handlerPosX + posX + guiX - 1, handlerPosY + posY + guiY - 1); | |
} | |
//Draw overlay | |
if (drawColor) { | |
for (int slotID = 0; slotID < slots; slotID++) { | |
int posX = positionFunction.apply(slotID).getLeft(); | |
int posY = positionFunction.apply(slotID).getRight(); | |
Color colored = new Color(color); | |
AbstractGui.fill(guiX + handlerPosX + posX, guiY + handlerPosY + posY, | |
guiX + handlerPosX + posX + area.width - 2, guiY + handlerPosY + posY + area.height - 2, new Color(colored.getRed(), colored.getGreen(), colored.getBlue(), 256 / 2).getRGB()); | |
RenderSystem.color4f(1, 1, 1, 1); | |
} | |
} | |
} | |
@Override | |
public void drawBackgroundLayer(Screen screen, IAssetProvider provider, int guiX, int guiY, int mouseX, int mouseY, float partialTicks) { | |
//Draw ItemStack for Slot if applicable | |
for (int slotID = 0; slotID < handler.getSlots(); slotID++) { | |
int posX = handler.getSlotPosition().apply(slotID).getLeft(); | |
int posY = handler.getSlotPosition().apply(slotID).getRight(); | |
ItemStack stack = handler.getItemStackForSlotRendering(slotID); | |
screen.getMinecraft().getItemRenderer().renderItemIntoGUI(stack, getPosX() + posX + guiX, getPosY() + posY + guiY); | |
} | |
drawAsset(screen, provider, guiX, guiY, getPosX(), getPosY(), handler.getSlots(), handler.getSlotPosition(), handler instanceof SidedInventoryComponent && ((SidedInventoryComponent<T>) handler).isColorGuiEnabled(), handler instanceof SidedInventoryComponent ? ((SidedInventoryComponent<T>) handler).getColor() : 0); | |
} | |
@Override | |
public void drawForegroundLayer(Screen screen, IAssetProvider provider, int guiX, int guiY, int mouseX, int mouseY) { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment