aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render
diff options
context:
space:
mode:
authorquerns <33518699+querns@users.noreply.github.com>2024-09-19 08:53:17 -0500
committerGitHub <noreply@github.com>2024-09-19 15:53:17 +0200
commit7ba0fc903e5d14928d2b894b00a7b7dfc65eee18 (patch)
treeebb230105b63eee5cf116cf48d5827f7542a5c8b /src/main/java/gregtech/common/render
parentc24b78060631ea1868c06aeb3b45fd81218d379e (diff)
downloadGT5-Unofficial-7ba0fc903e5d14928d2b894b00a7b7dfc65eee18.tar.gz
GT5-Unofficial-7ba0fc903e5d14928d2b894b00a7b7dfc65eee18.tar.bz2
GT5-Unofficial-7ba0fc903e5d14928d2b894b00a7b7dfc65eee18.zip
Infinite Spraycan Additions (#3226)
Co-authored-by: Caedis <Caedis@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech/common/render')
-rw-r--r--src/main/java/gregtech/common/render/items/DataStickRenderer.java11
-rw-r--r--src/main/java/gregtech/common/render/items/InfiniteSprayCanRenderer.java83
-rw-r--r--src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java60
3 files changed, 140 insertions, 14 deletions
diff --git a/src/main/java/gregtech/common/render/items/DataStickRenderer.java b/src/main/java/gregtech/common/render/items/DataStickRenderer.java
index 3411c24c83..02735e6aef 100644
--- a/src/main/java/gregtech/common/render/items/DataStickRenderer.java
+++ b/src/main/java/gregtech/common/render/items/DataStickRenderer.java
@@ -9,18 +9,25 @@ import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
+import gregtech.api.enums.ItemList;
import gregtech.api.util.AssemblyLineUtils;
// borrow form ae2
-
public class DataStickRenderer implements IItemRenderer {
private final RenderItem ri = new RenderItem();
+ public DataStickRenderer() {
+ MetaGeneratedItemRenderer.registerSpecialRenderer(ItemList.Tool_DataStick, this);
+ }
+
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
final boolean isShiftHeld = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT);
- return type == ItemRenderType.INVENTORY && isShiftHeld;
+ final boolean shouldSwitch = item.hasTagCompound() && item.getTagCompound()
+ .hasKey("output");
+
+ return type == ItemRenderType.INVENTORY && isShiftHeld && shouldSwitch;
}
@Override
diff --git a/src/main/java/gregtech/common/render/items/InfiniteSprayCanRenderer.java b/src/main/java/gregtech/common/render/items/InfiniteSprayCanRenderer.java
new file mode 100644
index 0000000000..4050eadd22
--- /dev/null
+++ b/src/main/java/gregtech/common/render/items/InfiniteSprayCanRenderer.java
@@ -0,0 +1,83 @@
+package gregtech.common.render.items;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+
+import org.lwjgl.opengl.GL11;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.ItemList;
+import gregtech.api.items.MetaGeneratedItem;
+import gregtech.common.items.behaviors.BehaviourSprayColorInfinite;
+import gregtech.common.render.GTRenderUtil;
+
+public class InfiniteSprayCanRenderer implements IItemRenderer {
+
+ public InfiniteSprayCanRenderer() {
+ MetaGeneratedItemRenderer.registerSpecialRenderer(ItemList.Spray_Color_Infinite, this);
+ }
+
+ @Override
+ public boolean handleRenderType(final ItemStack item, final ItemRenderType type) {
+ return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON
+ || type == ItemRenderType.INVENTORY
+ || type == ItemRenderType.ENTITY;
+
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(final ItemRenderType type, final ItemStack item,
+ final ItemRendererHelper helper) {
+ return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING
+ || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics);
+
+ }
+
+ @Override
+ public void renderItem(final ItemRenderType type, final ItemStack item, final Object... data) {
+ final Dyes dye = BehaviourSprayColorInfinite.getDye(item);
+ final short[] modulation = dye.getRGBA();
+
+ if (!(item.getItem() instanceof final MetaGeneratedItem mgItem)) {
+ return;
+ }
+
+ final IIcon[] iconList = mgItem.mIconList[item.getItemDamage() - mgItem.mOffset];
+ if (iconList == null || iconList.length < 4) {
+ return;
+ }
+
+ final IIcon baseLayer = iconList[1];
+ final IIcon lockLayer = iconList[2];
+ final IIcon paintRegion = iconList[3];
+
+ if (baseLayer == null || paintRegion == null || lockLayer == null) {
+ return;
+ }
+
+ boolean locked = false;
+
+ if (item.hasTagCompound()) {
+ locked = item.getTagCompound()
+ .getBoolean(BehaviourSprayColorInfinite.LOCK_NBT_TAG);
+ }
+
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+
+ GTRenderUtil.renderItem(type, baseLayer);
+
+ GL11.glColor4f(modulation[0] / 255.0F, modulation[1] / 255.0F, modulation[2] / 255.0F, 1);
+ GTRenderUtil.renderItem(type, paintRegion);
+ GL11.glColor4f(1, 1, 1, 1);
+
+ if (locked) {
+ GTRenderUtil.renderItem(type, lockLayer);
+ }
+
+ GL11.glDisable(GL11.GL_BLEND);
+ }
+}
diff --git a/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java b/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java
index 14d9b65e7f..f0a614e3e6 100644
--- a/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java
+++ b/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java
@@ -1,12 +1,16 @@
package gregtech.common.render.items;
+import java.util.HashMap;
+import java.util.Map;
+
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.MinecraftForgeClient;
+import com.google.common.base.Objects;
+
import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer;
import gregtech.api.objects.ItemData;
import gregtech.api.util.GTOreDictUnificator;
@@ -18,7 +22,7 @@ public class MetaGeneratedItemRenderer implements IItemRenderer {
private final IItemRenderer mItemRenderer = new GeneratedItemRenderer();
private final IItemRenderer mMaterialRenderer = new GeneratedMaterialRenderer();
- private final IItemRenderer mDataStickRenderer = new DataStickRenderer();
+ private static final Map<RendererKey, IItemRenderer> specialRenderers = new HashMap<>();
public MetaGeneratedItemRenderer() {}
@@ -26,6 +30,15 @@ public class MetaGeneratedItemRenderer implements IItemRenderer {
MinecraftForgeClient.registerItemRenderer(item, this);
}
+ public static void registerSpecialRenderer(ItemList item, IItemRenderer renderer) {
+ specialRenderers.put(
+ new RendererKey(
+ Item.getIdFromItem(item.getItem()),
+ (short) item.getInternalStack_unsafe()
+ .getItemDamage()),
+ renderer);
+ }
+
@Override
public boolean handleRenderType(ItemStack aStack, ItemRenderType aType) {
if ((GTUtility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0)
@@ -53,7 +66,13 @@ public class MetaGeneratedItemRenderer implements IItemRenderer {
}
private IItemRenderer getRendererForItemStack(ItemStack aStack) {
- short aMetaData = (short) aStack.getItemDamage();
+ final short aMetaData = (short) aStack.getItemDamage();
+ final RendererKey key = new RendererKey(Item.getIdFromItem(aStack.getItem()), aMetaData);
+
+ if (specialRenderers.containsKey(key)) {
+ return specialRenderers.get(key);
+ }
+
IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem();
if (aItem != null && aItem.allowMaterialRenderer(aMetaData)) {
@@ -63,9 +82,8 @@ public class MetaGeneratedItemRenderer implements IItemRenderer {
if (aMaterialRenderer == null) {
ItemData itemData = GTOreDictUnificator.getAssociation(aStack);
if (itemData != null) {
- Materials material = itemData.mMaterial.mMaterial;
- if (material.renderer != null) {
- aMaterialRenderer = material.renderer;
+ if (itemData.mMaterial != null && itemData.mMaterial.mMaterial.renderer != null) {
+ aMaterialRenderer = itemData.mMaterial.mMaterial.renderer;
}
}
}
@@ -73,13 +91,31 @@ public class MetaGeneratedItemRenderer implements IItemRenderer {
return aMaterialRenderer != null ? aMaterialRenderer : mMaterialRenderer;
}
- // handle data stick
- if (aStack.getItem() == ItemList.Tool_DataStick.getItem() && aStack.hasTagCompound()
- && aStack.getTagCompound()
- .hasKey("output")) {
- return mDataStickRenderer;
+ return mItemRenderer;
+ }
+
+ @SuppressWarnings("ClassCanBeRecord")
+ private static class RendererKey {
+
+ private final int id;
+ private final short metadata;
+
+ private RendererKey(final int id, final short metadata) {
+ this.id = id;
+ this.metadata = metadata;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ final RendererKey that = (RendererKey) o;
+ return id == that.id && metadata == that.metadata;
}
- return mItemRenderer;
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(id, metadata);
+ }
}
}