You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
247 lines
10 KiB
Java
247 lines
10 KiB
Java
package com.zivilon.cinder_loe.mixins;
|
|
|
|
import com.zivilon.cinder_loe.CinderLoE_Config;
|
|
import com.zivilon.cinder_loe.client.render.item.RenderHelper;
|
|
import com.zivilon.cinder_loe.util.Utilities;
|
|
import org.lwjgl.opengl.GL11;
|
|
import org.lwjgl.opengl.GL12;
|
|
import org.spongepowered.asm.mixin.Dynamic;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Overwrite;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
import java.util.Random;
|
|
import java.util.concurrent.Callable;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.FontRenderer;
|
|
import net.minecraft.client.renderer.ItemRenderer;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.entity.Render;
|
|
import net.minecraft.client.renderer.entity.RenderItem;
|
|
import net.minecraft.client.renderer.texture.TextureManager;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.client.renderer.texture.TextureUtil;
|
|
import net.minecraft.crash.CrashReport;
|
|
import net.minecraft.crash.CrashReportCategory;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemBlock;
|
|
import net.minecraft.item.ItemCloth;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.util.ReportedException;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.ForgeHooksClient;
|
|
|
|
@Mixin(RenderItem.class)
|
|
public abstract class MixinRenderItem extends Render {
|
|
@Shadow
|
|
private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png");
|
|
|
|
@Shadow
|
|
private Random random;
|
|
|
|
@Shadow
|
|
public static boolean renderInFrame;
|
|
|
|
@Shadow(remap = false)
|
|
public byte getMiniBlockCount(ItemStack stack, byte original) {
|
|
return 0;
|
|
}
|
|
|
|
@Shadow(remap = false)
|
|
public byte getMiniItemCount(ItemStack stack, byte original) {
|
|
return 0;
|
|
}
|
|
|
|
@Shadow(remap = false)
|
|
public boolean shouldSpreadItems() {
|
|
return false;
|
|
}
|
|
|
|
@Shadow
|
|
private void renderGlint(int p_77018_1_, int p_77018_2_, int p_77018_3_, int p_77018_4_, int p_77018_5_) {}
|
|
|
|
/**
|
|
* Reimplements the default behavior of the renderDroppedItem method.
|
|
*
|
|
* @author Shinare
|
|
* @reason Added support for semi-transparent item textures
|
|
* @param p_77020_1_ Don't ask me it's default parameter
|
|
* @param p_77020_2_ Don't ask me it's default parameter
|
|
* @param p_77020_3_ Don't ask me it's default parameter
|
|
* @param p_77020_4_ Don't ask me it's default parameter
|
|
* @param p_77020_5_ Don't ask me it's default parameter
|
|
* @param p_77020_6_ Don't ask me it's default parameter
|
|
* @param p_77020_7_ Don't ask me it's default parameter
|
|
* @param pass Don't ask me it's default parameter
|
|
*/
|
|
@Overwrite(remap = false)
|
|
private void renderDroppedItem(EntityItem p_77020_1_, IIcon p_77020_2_, int p_77020_3_, float p_77020_4_, float p_77020_5_, float p_77020_6_, float p_77020_7_, int pass) {
|
|
Tessellator tessellator = Tessellator.instance;
|
|
|
|
if (p_77020_2_ == null) {
|
|
TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager();
|
|
ResourceLocation resourcelocation = texturemanager.getResourceLocation(p_77020_1_.getEntityItem().getItemSpriteNumber());
|
|
p_77020_2_ = ((TextureMap)texturemanager.getTexture(resourcelocation)).getAtlasSprite("missingno");
|
|
}
|
|
|
|
float f14 = ((IIcon)p_77020_2_).getMinU();
|
|
float f15 = ((IIcon)p_77020_2_).getMaxU();
|
|
float f4 = ((IIcon)p_77020_2_).getMinV();
|
|
float f5 = ((IIcon)p_77020_2_).getMaxV();
|
|
float f6 = 1.0F;
|
|
float f7 = 0.5F;
|
|
float f8 = 0.25F;
|
|
float f10;
|
|
|
|
if (this.renderManager.options.fancyGraphics) {
|
|
GL11.glPushMatrix();
|
|
|
|
if (renderInFrame) {
|
|
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
else {
|
|
GL11.glRotatef((((float)p_77020_1_.age + p_77020_4_) / 20.0F + p_77020_1_.hoverStart) * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F);
|
|
}
|
|
|
|
float f9 = 0.0625F;
|
|
f10 = 0.021875F;
|
|
ItemStack itemstack = p_77020_1_.getEntityItem();
|
|
int j = itemstack.stackSize;
|
|
byte b0;
|
|
|
|
if (j < 2) {
|
|
b0 = 1;
|
|
}
|
|
else if (j < 16) {
|
|
b0 = 2;
|
|
}
|
|
else if (j < 32) {
|
|
b0 = 3;
|
|
}
|
|
else {
|
|
b0 = 4;
|
|
}
|
|
|
|
b0 = getMiniItemCount(itemstack, b0);
|
|
|
|
GL11.glTranslatef(-f7, -f8, -((f9 + f10) * (float)b0 / 2.0F));
|
|
|
|
for (int k = 0; k < b0; ++k) {
|
|
// Makes items offset when in 3D, like when in 2D, looks much better. Considered a vanilla bug...
|
|
if (k > 0 && shouldSpreadItems()) {
|
|
float x = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F;
|
|
float y = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F;
|
|
float z = (random.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F;
|
|
GL11.glTranslatef(x, y, f9 + f10);
|
|
}
|
|
else {
|
|
GL11.glTranslatef(0f, 0f, f9 + f10);
|
|
}
|
|
|
|
if (itemstack.getItemSpriteNumber() == 0) {
|
|
this.bindTexture(TextureMap.locationBlocksTexture);
|
|
}
|
|
else {
|
|
this.bindTexture(TextureMap.locationItemsTexture);
|
|
}
|
|
|
|
GL11.glColor4f(p_77020_5_, p_77020_6_, p_77020_7_, 1.0F);
|
|
RenderHelper.customRenderItemIn2D(tessellator, f15, f4, f14, f5, ((IIcon)p_77020_2_).getIconWidth(), ((IIcon)p_77020_2_).getIconHeight(), f9, false);
|
|
|
|
if (itemstack.hasEffect(pass)) {
|
|
GL11.glDepthFunc(GL11.GL_EQUAL);
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
this.renderManager.renderEngine.bindTexture(RES_ITEM_GLINT);
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE);
|
|
GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F);
|
|
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
|
GL11.glPushMatrix();
|
|
float f12 = 0.125F;
|
|
GL11.glScalef(f12, f12, f12);
|
|
float f13 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F;
|
|
GL11.glTranslatef(f13, 0.0F, 0.0F);
|
|
GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);
|
|
RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, f9, true);
|
|
GL11.glPopMatrix();
|
|
GL11.glPushMatrix();
|
|
GL11.glScalef(f12, f12, f12);
|
|
f13 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F;
|
|
GL11.glTranslatef(-f13, 0.0F, 0.0F);
|
|
GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);
|
|
RenderHelper.customRenderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, f9, true);
|
|
GL11.glPopMatrix();
|
|
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
GL11.glDepthFunc(GL11.GL_LEQUAL);
|
|
}
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
else {
|
|
for (int l = 0; l < p_77020_3_; ++l) {
|
|
GL11.glPushMatrix();
|
|
|
|
if (l > 0) {
|
|
f10 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F;
|
|
float f16 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F;
|
|
float f17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F;
|
|
GL11.glTranslatef(f10, f16, f17);
|
|
}
|
|
|
|
if (!renderInFrame) {
|
|
GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
|
|
}
|
|
|
|
GL11.glColor4f(p_77020_5_, p_77020_6_, p_77020_7_, 1.0F);
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setNormal(0.0F, 1.0F, 0.0F);
|
|
tessellator.addVertexWithUV((double)(0.0F - f7), (double)(0.0F - f8), 0.0D, (double)f14, (double)f5);
|
|
tessellator.addVertexWithUV((double)(f6 - f7), (double)(0.0F - f8), 0.0D, (double)f15, (double)f5);
|
|
tessellator.addVertexWithUV((double)(f6 - f7), (double)(1.0F - f8), 0.0D, (double)f15, (double)f4);
|
|
tessellator.addVertexWithUV((double)(0.0F - f7), (double)(1.0F - f8), 0.0D, (double)f14, (double)f4);
|
|
tessellator.draw();
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @author Shinare
|
|
* @reason Added support for semi-transparent item textures
|
|
*/
|
|
@Overwrite(remap = false)
|
|
public void renderEffect(TextureManager manager, int x, int y) {
|
|
GL11.glDepthFunc(GL11.GL_EQUAL);
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
GL11.glDepthMask(false);
|
|
manager.bindTexture(RES_ITEM_GLINT);
|
|
GL11.glEnable(GL11.GL_ALPHA_TEST);
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glColor4f(CinderLoE_Config.enchantment_color_red, CinderLoE_Config.enchantment_color_green, CinderLoE_Config.enchantment_color_blue, 1.0F);
|
|
this.renderGlint(x * 431278612 + y * 32178161, x - 2, y - 2, 20, 20);
|
|
GL11.glDepthMask(true);
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
GL11.glDisable(GL11.GL_ALPHA_TEST);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
GL11.glDepthFunc(GL11.GL_LEQUAL);
|
|
}
|
|
}
|