From 120c12b468fcc669eab0916dd7b125db47cd5609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Zeutzheim?= Date: Thu, 22 Oct 2015 15:10:25 +0900 Subject: [PATCH] Fixed rendering of enchantment effect. Fixes #1 Also added a command to always render enchantment effect on items. --- .../CommandCustomServerItem.java | 20 +++++++- .../customserveritems/CustomItemRenderer.java | 51 ++++++++++++++++++- .../customserveritems/CustomServerItems.java | 2 + .../assets/customserveritems/lang/en_US.lang | 5 +- 4 files changed, 73 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/forgeessentials/customserveritems/CommandCustomServerItem.java b/src/main/java/com/forgeessentials/customserveritems/CommandCustomServerItem.java index 5df08fe..4334526 100644 --- a/src/main/java/com/forgeessentials/customserveritems/CommandCustomServerItem.java +++ b/src/main/java/com/forgeessentials/customserveritems/CommandCustomServerItem.java @@ -16,7 +16,7 @@ public class CommandCustomServerItem extends CommandBase { - public static final String[] subCommands = new String[] { "texture", "name", "tooltip", "tool", "damage", "durability", "meta", "texturelist" }; + public static final String[] subCommands = new String[] { "texture", "name", "tooltip", "tool", "glint", "damage", "durability", "meta", "texturelist" }; @Override public String getCommandName() @@ -67,6 +67,9 @@ public void processCommand(ICommandSender sender, String[] argArray) case "tool": parseTool(player, args, stack); break; + case "glint": + parseGlint(player, args, stack); + break; case "damage": parseDamage(player, args, stack); break; @@ -93,6 +96,9 @@ public List addTabCompletionOptions(ICommandSender sender, String[] args) { case "texture": return getListOfStringsFromIterableMatchingLastWord(args, CustomServerItems.getTextureNames()); + case "glint": + case "tool": + return getListOfStringsMatchingLastWord(args, "true", "false"); } } return null; @@ -137,7 +143,17 @@ public void parseTool(EntityPlayer player, LinkedList args, ItemStack st throw new WrongUsageException("commands.notEnoughArguments"); boolean isTool = parseBoolean(player, args.remove()); stack.func_150996_a(isTool ? CustomServerItems.ITEM_TOOL : CustomServerItems.ITEM); - func_152373_a(player, this, "commands.customservercommand.toolSet", isTool ? "tool" : "item"); + func_152373_a(player, this, isTool ? "commands.customservercommand.toolMode" : "commands.customservercommand.itemMode"); + } + + public void parseGlint(EntityPlayer player, LinkedList args, ItemStack stack) + { + if (args.isEmpty()) + throw new WrongUsageException("commands.notEnoughArguments"); + boolean glint = parseBoolean(player, args.remove()); + NBTTagCompound tag = getOrCreateTag(stack); + tag.setBoolean(CustomServerItems.TAG_GLINT, glint); + func_152373_a(player, this, glint ? "commands.customservercommand.glintOn" : "commands.customservercommand.glintOff"); } public void parseDamage(EntityPlayer player, LinkedList args, ItemStack stack) diff --git a/src/main/java/com/forgeessentials/customserveritems/CustomItemRenderer.java b/src/main/java/com/forgeessentials/customserveritems/CustomItemRenderer.java index d1fb1fd..0b3c30d 100644 --- a/src/main/java/com/forgeessentials/customserveritems/CustomItemRenderer.java +++ b/src/main/java/com/forgeessentials/customserveritems/CustomItemRenderer.java @@ -2,7 +2,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -18,6 +21,8 @@ public class CustomItemRenderer implements IItemRenderer { + public static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + @Override public boolean handleRenderType(ItemStack stack, ItemRenderType type) { @@ -45,7 +50,8 @@ public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { String id = stack.getTagCompound().getString(CustomServerItems.TAG_TEXTURE); ResourceLocation texture = TextureRegistry.getTexture(id); - Minecraft.getMinecraft().renderEngine.bindTexture(texture); + TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); + textureManager.bindTexture(texture); Tessellator tessellator = Tessellator.instance; int iconWidth = 32; @@ -65,17 +71,58 @@ public void renderItem(ItemRenderType type, ItemStack stack, Object... data) TextureUtil.func_152777_a(false, false, 1.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); ItemRenderer.renderItemIn2D(tessellator, 1, 0, 0, 1, iconWidth, iconHeight, 0.0625F); + + if (stack.hasEffect(0) || stack.getTagCompound().getBoolean(CustomServerItems.TAG_GLINT)) + { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + textureManager.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(768, 1, 1, 0); + GL11.glColor4f(0.5F * 0.76F, 0.25F * 0.76F, 0.8F * 0.76F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float f8 = 0.125F; + GL11.glScalef(f8, f8, f8); + float f9 = Minecraft.getSystemTime() % 3000L / 3000.0F * 8.0F; + GL11.glTranslatef(f9, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(f8, f8, f8); + f9 = Minecraft.getSystemTime() % 4873L / 4873.0F * 8.0F; + GL11.glTranslatef(-f9, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + break; case INVENTORY: default: + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glEnable(GL11.GL_BLEND); - double zLevel = 4; + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + double zLevel = RenderItem.getInstance().zLevel; tessellator.startDrawingQuads(); tessellator.addVertexWithUV(0, 16, zLevel, 0, 1); tessellator.addVertexWithUV(16, 16, zLevel, 1, 1); tessellator.addVertexWithUV(16, 0, zLevel, 1, 0); tessellator.addVertexWithUV(0, 0, zLevel, 0, 0); tessellator.draw(); + + if (stack.hasEffect(0) || stack.getTagCompound().getBoolean(CustomServerItems.TAG_GLINT)) + RenderItem.getInstance().renderEffect(textureManager, 0, 0); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_BLEND); break; } diff --git a/src/main/java/com/forgeessentials/customserveritems/CustomServerItems.java b/src/main/java/com/forgeessentials/customserveritems/CustomServerItems.java index e944ebc..66d27ff 100644 --- a/src/main/java/com/forgeessentials/customserveritems/CustomServerItems.java +++ b/src/main/java/com/forgeessentials/customserveritems/CustomServerItems.java @@ -43,6 +43,8 @@ public class CustomServerItems implements IMessageHandler