feat: add minium stone block overlay

This commit is contained in:
LordMZTE 2023-01-03 18:46:26 +01:00
parent 3345a53e9e
commit 5e09684be3
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6
7 changed files with 151 additions and 1 deletions

View file

@ -83,5 +83,9 @@ public class HUDTickHandler {
GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_LIGHTING);
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glPopMatrix(); GL11.glPopMatrix();
((IOverlayItem) itemStack.getItem())
.getOverlayItemRenderer()
.renderOverlayItem(entityPlayer, itemStack);
} }
} }

View file

@ -0,0 +1,11 @@
package com.pahimar.ee3.client.renderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* A renderer to render IOverlayItems in the HUD.
*/
public interface IOverlayItemRenderer {
void renderOverlayItem(EntityPlayer player, ItemStack stack);
}

View file

@ -0,0 +1,73 @@
package com.pahimar.ee3.client.renderer.overlay_item;
import com.pahimar.ee3.client.renderer.IOverlayItemRenderer;
import com.pahimar.ee3.client.util.RenderUtils;
import com.pahimar.ee3.util.TransmutationHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
public class MiniumStoneOverlayItemRenderer implements IOverlayItemRenderer {
public static final MiniumStoneOverlayItemRenderer INSTANCE
= new MiniumStoneOverlayItemRenderer();
@Override
public void renderOverlayItem(EntityPlayer player, ItemStack stack) {
Minecraft minecraft = Minecraft.getMinecraft();
//float overlayScale = ConfigurationSettings.TARGET_BLOCK_OVERLAY_SCALE;
float overlayScale = 2.0f;
float blockScale = overlayScale / 2.0F;
//float overlayOpacity = ConfigurationSettings.TARGET_BLOCK_OVERLAY_OPACITY;
float overlayOpacity = 1.0f;
GL11.glPushMatrix();
ScaledResolution sr = new ScaledResolution(
minecraft, minecraft.displayWidth, minecraft.displayHeight
);
GL11.glClear(256);
GL11.glMatrixMode(5889);
GL11.glLoadIdentity();
GL11.glOrtho(
0.0,
sr.getScaledWidth_double(),
sr.getScaledHeight_double(),
0.0,
1000.0,
3000.0
);
GL11.glMatrixMode(5888);
GL11.glLoadIdentity();
GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
GL11.glPushMatrix();
RenderHelper.enableGUIStandardItemLighting();
GL11.glDisable(2896);
GL11.glEnable(32826);
GL11.glEnable(2903);
GL11.glEnable(2896);
int hudBlockX = 0;
int hudBlockY = 0;
hudBlockX
= (int) ((float) sr.getScaledWidth() - 16.0F * overlayScale / 2.0F - 8.0F);
hudBlockY
= (int) ((float) sr.getScaledHeight() - 16.0F * overlayScale / 2.0F - 8.0F);
if (TransmutationHelper.targetBlockStack != null
&& TransmutationHelper.targetBlockStack.getItem() instanceof ItemBlock) {
RenderUtils.renderRotatingBlockIntoGUI(
minecraft.fontRenderer,
TransmutationHelper.targetBlockStack,
hudBlockX,
hudBlockY,
-90.0F,
blockScale
);
}
GL11.glDisable(2896);
GL11.glPopMatrix();
GL11.glPopMatrix();
}
}

View file

@ -1,7 +1,10 @@
package com.pahimar.ee3.client.util; package com.pahimar.ee3.client.util;
import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.FMLClientHandler;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -11,6 +14,8 @@ import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12; import org.lwjgl.opengl.GL12;
public class RenderUtils { public class RenderUtils {
private static int rotationAngle = 0;
public static void bindTexture(ResourceLocation texture) { public static void bindTexture(ResourceLocation texture) {
FMLClientHandler.instance().getClient().getTextureManager().bindTexture(texture); FMLClientHandler.instance().getClient().getTextureManager().bindTexture(texture);
} }
@ -95,4 +100,36 @@ public class RenderUtils {
private static double getPulseValue() { private static double getPulseValue() {
return (Math.sin(System.nanoTime() / 100f) + 1) / 2; return (Math.sin(System.nanoTime() / 100f) + 1) / 2;
} }
public static void renderRotatingBlockIntoGUI(
FontRenderer fontRenderer,
ItemStack stack,
int x,
int y,
float zLevel,
float scale
) {
RenderBlocks renderBlocks = new RenderBlocks();
Block block = Block.getBlockFromItem(stack.getItem());
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture
);
GL11.glPushMatrix();
GL11.glTranslatef((float) (x - 2), (float) (y + 3), -3.0F + zLevel);
GL11.glScalef(10.0F, 10.0F, 10.0F);
GL11.glTranslatef(1.0F, 0.5F, 1.0F);
GL11.glScalef(1.0F * scale, 1.0F * scale, -1.0F);
GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(0.0F + (float) (1 * rotationAngle), 0.0F, 1.0F, 0.0F);
rotationAngle = (rotationAngle + 1) % 360;
int var10 = stack.getItem().getColorFromItemStack(stack, 0);
float var16 = (float) (var10 >> 16 & 255) / 255.0F;
float var12 = (float) (var10 >> 8 & 255) / 255.0F;
float var13 = (float) (var10 & 255) / 255.0F;
GL11.glColor4f(var16, var12, var13, 1.0F);
GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
renderBlocks.useInventoryTint = true;
renderBlocks.renderBlockAsItem(block, stack.getItemDamage(), 1.0F);
renderBlocks.useInventoryTint = true;
GL11.glPopMatrix();
}
} }

View file

@ -1,6 +1,8 @@
package com.pahimar.ee3.item; package com.pahimar.ee3.item;
import com.pahimar.ee3.EquivalentExchange3; import com.pahimar.ee3.EquivalentExchange3;
import com.pahimar.ee3.client.renderer.IOverlayItemRenderer;
import com.pahimar.ee3.client.renderer.overlay_item.MiniumStoneOverlayItemRenderer;
import com.pahimar.ee3.reference.GUIs; import com.pahimar.ee3.reference.GUIs;
import com.pahimar.ee3.reference.Key; import com.pahimar.ee3.reference.Key;
import com.pahimar.ee3.reference.Names; import com.pahimar.ee3.reference.Names;
@ -134,4 +136,10 @@ public class ItemMiniumStone
//thePlayer.openGui((Object)EquivalentExchange3.instance, 1, thePlayer.worldObj, //thePlayer.openGui((Object)EquivalentExchange3.instance, 1, thePlayer.worldObj,
//(int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ); //(int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ);
} }
@Override
@SideOnly(Side.CLIENT)
public IOverlayItemRenderer getOverlayItemRenderer() {
return MiniumStoneOverlayItemRenderer.INSTANCE;
}
} }

View file

@ -1,10 +1,14 @@
package com.pahimar.ee3.item; package com.pahimar.ee3.item;
import com.pahimar.ee3.client.renderer.IOverlayItemRenderer;
import com.pahimar.ee3.reference.Key; import com.pahimar.ee3.reference.Key;
import com.pahimar.ee3.reference.Names; import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.util.IKeyBound; import com.pahimar.ee3.util.IKeyBound;
import com.pahimar.ee3.util.IOverlayItem; import com.pahimar.ee3.util.IOverlayItem;
import com.pahimar.ee3.util.LogHelper; import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -58,4 +62,10 @@ public class ItemPhilosophersStone
public void transmuteBlock( public void transmuteBlock(
ItemStack p0, EntityPlayer p1, World p2, int p3, int p4, int p5, int p6 ItemStack p0, EntityPlayer p1, World p2, int p3, int p4, int p5, int p6
) {} ) {}
@Override
@SideOnly(Side.CLIENT)
public IOverlayItemRenderer getOverlayItemRenderer() {
return (e, s) -> {};
}
} }

View file

@ -1,3 +1,10 @@
package com.pahimar.ee3.util; package com.pahimar.ee3.util;
public interface IOverlayItem {} import com.pahimar.ee3.client.renderer.IOverlayItemRenderer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public interface IOverlayItem {
@SideOnly(Side.CLIENT)
IOverlayItemRenderer getOverlayItemRenderer();
}