diff options
author | querns <33518699+querns@users.noreply.github.com> | 2024-09-19 08:53:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-19 15:53:17 +0200 |
commit | 7ba0fc903e5d14928d2b894b00a7b7dfc65eee18 (patch) | |
tree | ebb230105b63eee5cf116cf48d5827f7542a5c8b /src/main/java/gregtech/common/render | |
parent | c24b78060631ea1868c06aeb3b45fd81218d379e (diff) | |
download | GT5-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')
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); + } } } |