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.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;
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.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.ItemStack;
@ -11,6 +14,8 @@ import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public class RenderUtils {
private static int rotationAngle = 0;
public static void bindTexture(ResourceLocation texture) {
FMLClientHandler.instance().getClient().getTextureManager().bindTexture(texture);
}
@ -95,4 +100,36 @@ public class RenderUtils {
private static double getPulseValue() {
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;
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.Key;
import com.pahimar.ee3.reference.Names;
@ -134,4 +136,10 @@ public class ItemMiniumStone
//thePlayer.openGui((Object)EquivalentExchange3.instance, 1, thePlayer.worldObj,
//(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;
import com.pahimar.ee3.client.renderer.IOverlayItemRenderer;
import com.pahimar.ee3.reference.Key;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.util.IKeyBound;
import com.pahimar.ee3.util.IOverlayItem;
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.item.ItemStack;
import net.minecraft.world.World;
@ -58,4 +62,10 @@ public class ItemPhilosophersStone
public void transmuteBlock(
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;
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();
}