Added OnGameStart hook, added custom effect render to fulfill infinite sprite support. Render needs to be changed a little to cover items also, though.
This commit is contained in:
parent
cd9d101e06
commit
1b7e8b6179
3 changed files with 331 additions and 3 deletions
|
@ -50,6 +50,8 @@ public class MinecraftForgeClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void onGameStart() {
|
||||||
|
System.out.println("OnGameHook");
|
||||||
|
ModLoader.getMinecraftInstance().effectRenderer = new MinecraftForgeEffectRenderer(ModLoader.getMinecraftInstance().theWorld, ModLoader.getMinecraftInstance().renderEngine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,314 @@
|
||||||
|
package net.minecraft.src.forge;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import net.minecraft.src.EntityFX;
|
||||||
|
import net.minecraft.src.Entity;
|
||||||
|
import net.minecraft.src.MathHelper;
|
||||||
|
import net.minecraft.src.RenderEngine;
|
||||||
|
import net.minecraft.src.Tessellator;
|
||||||
|
import net.minecraft.src.Block;
|
||||||
|
import net.minecraft.src.EntityDiggingFX;
|
||||||
|
import net.minecraft.src.World;
|
||||||
|
import net.minecraft.src.EffectRenderer;
|
||||||
|
|
||||||
|
public class MinecraftForgeEffectRenderer extends EffectRenderer
|
||||||
|
{
|
||||||
|
class BlockTextureParticles {
|
||||||
|
public String texture;
|
||||||
|
public List effects;
|
||||||
|
|
||||||
|
public BlockTextureParticles(){
|
||||||
|
effects = new ArrayList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//protected World worldObj;
|
||||||
|
private List fxLayers[];
|
||||||
|
private RenderEngine renderer;
|
||||||
|
private Random rand;
|
||||||
|
|
||||||
|
private List effectList;
|
||||||
|
|
||||||
|
public MinecraftForgeEffectRenderer(World world, RenderEngine renderengine)
|
||||||
|
{
|
||||||
|
super(world, renderengine);
|
||||||
|
|
||||||
|
System.out.println("Init");
|
||||||
|
|
||||||
|
effectList = new ArrayList();
|
||||||
|
|
||||||
|
fxLayers = new List[4];
|
||||||
|
rand = new Random();
|
||||||
|
if(world != null)
|
||||||
|
{
|
||||||
|
worldObj = world;
|
||||||
|
}
|
||||||
|
renderer = renderengine;
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
fxLayers[i] = new ArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addEffect(EntityFX entityfx)
|
||||||
|
{
|
||||||
|
int i = entityfx.getFXLayer();
|
||||||
|
if(fxLayers[i].size() >= 4000)
|
||||||
|
{
|
||||||
|
fxLayers[i].remove(0);
|
||||||
|
}
|
||||||
|
fxLayers[i].add(entityfx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateEffects()
|
||||||
|
{
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < fxLayers[i].size(); j++)
|
||||||
|
{
|
||||||
|
EntityFX entityfx = (EntityFX)fxLayers[i].get(j);
|
||||||
|
entityfx.onUpdate();
|
||||||
|
if(entityfx.isDead)
|
||||||
|
{
|
||||||
|
fxLayers[i].remove(j--);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int x = 0; x < effectList.size(); x++)
|
||||||
|
{
|
||||||
|
BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x);
|
||||||
|
for(int y =0; y < entry.effects.size(); y++)
|
||||||
|
{
|
||||||
|
EntityFX entityfx = (EntityFX)entry.effects.get(y);
|
||||||
|
if(entityfx.isDead)
|
||||||
|
{
|
||||||
|
entry.effects.remove(y--);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(effectList.size() == 0) effectList.remove(x--);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderParticles(Entity entity, float f)
|
||||||
|
{
|
||||||
|
float f1 = MathHelper.cos((entity.rotationYaw * 3.141593F) / 180F);
|
||||||
|
float f2 = MathHelper.sin((entity.rotationYaw * 3.141593F) / 180F);
|
||||||
|
float f3 = -f2 * MathHelper.sin((entity.rotationPitch * 3.141593F) / 180F);
|
||||||
|
float f4 = f1 * MathHelper.sin((entity.rotationPitch * 3.141593F) / 180F);
|
||||||
|
float f5 = MathHelper.cos((entity.rotationPitch * 3.141593F) / 180F);
|
||||||
|
EntityFX.interpPosX = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)f;
|
||||||
|
EntityFX.interpPosY = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)f;
|
||||||
|
EntityFX.interpPosZ = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)f;
|
||||||
|
for(int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
if(fxLayers[i].size() == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int j = 0;
|
||||||
|
if(i == 0)
|
||||||
|
{
|
||||||
|
j = renderer.getTexture("/particles.png");
|
||||||
|
}
|
||||||
|
if(i == 1)
|
||||||
|
{
|
||||||
|
j = renderer.getTexture("/terrain.png");
|
||||||
|
}
|
||||||
|
if(i == 2)
|
||||||
|
{
|
||||||
|
j = renderer.getTexture("/gui/items.png");
|
||||||
|
}
|
||||||
|
GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, j);
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
tessellator.startDrawingQuads();
|
||||||
|
for(int k = 0; k < fxLayers[i].size(); k++)
|
||||||
|
{
|
||||||
|
EntityFX entityfx = (EntityFX)fxLayers[i].get(k);
|
||||||
|
if(entityfx instanceof EntityDiggingFX) continue;
|
||||||
|
entityfx.renderParticle(tessellator, f, f1, f5, f2, f3, f4);
|
||||||
|
}
|
||||||
|
tessellator.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
|
||||||
|
for(int x = 0; x < effectList.size(); x++)
|
||||||
|
{
|
||||||
|
BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x);
|
||||||
|
GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, renderer.getTexture(entry.texture));
|
||||||
|
tessellator.startDrawingQuads();
|
||||||
|
for(int y =0; y < entry.effects.size(); y++)
|
||||||
|
{
|
||||||
|
EntityFX entityfx = (EntityFX)entry.effects.get(y);
|
||||||
|
entityfx.renderParticle(tessellator, f, f1, f5, f2, f3, f4);
|
||||||
|
}
|
||||||
|
tessellator.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void func_1187_b(Entity entity, float f)
|
||||||
|
{
|
||||||
|
byte byte0 = 3;
|
||||||
|
if(fxLayers[byte0].size() == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
for(int i = 0; i < fxLayers[byte0].size(); i++)
|
||||||
|
{
|
||||||
|
EntityFX entityfx = (EntityFX)fxLayers[byte0].get(i);
|
||||||
|
entityfx.renderParticle(tessellator, f, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getStatistics()
|
||||||
|
{
|
||||||
|
return (new StringBuilder()).append("").append(fxLayers[0].size() + fxLayers[1].size() + fxLayers[2].size()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearEffects(World world)
|
||||||
|
{
|
||||||
|
worldObj = world;
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
fxLayers[i].clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int x = 0; x < effectList.size(); x++)
|
||||||
|
{
|
||||||
|
BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x);
|
||||||
|
entry.effects.clear();
|
||||||
|
}
|
||||||
|
effectList.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addBlockDestroyEffects(int i, int j, int k, int l, int i1)
|
||||||
|
{
|
||||||
|
if(l == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Block block = Block.blocksList[l];
|
||||||
|
int j1 = 4;
|
||||||
|
for(int k1 = 0; k1 < j1; k1++)
|
||||||
|
{
|
||||||
|
for(int l1 = 0; l1 < j1; l1++)
|
||||||
|
{
|
||||||
|
for(int i2 = 0; i2 < j1; i2++)
|
||||||
|
{
|
||||||
|
double d = (double)i + ((double)k1 + 0.5D) / (double)j1;
|
||||||
|
double d1 = (double)j + ((double)l1 + 0.5D) / (double)j1;
|
||||||
|
double d2 = (double)k + ((double)i2 + 0.5D) / (double)j1;
|
||||||
|
int j2 = rand.nextInt(6);
|
||||||
|
|
||||||
|
EntityDiggingFX dig_effect = new EntityDiggingFX(worldObj, d, d1, d2,
|
||||||
|
d - (double)i - 0.5D,
|
||||||
|
d1 - (double)j - 0.5D,
|
||||||
|
d2 - (double)k - 0.5D,
|
||||||
|
block, j2, i1);
|
||||||
|
dig_effect.func_4041_a(i, j, k);
|
||||||
|
|
||||||
|
addDigParticleEffect(dig_effect, block);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addBlockHitEffects(int i, int j, int k, int l)
|
||||||
|
{
|
||||||
|
int i1 = worldObj.getBlockId(i, j, k);
|
||||||
|
if(i1 == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Block block = Block.blocksList[i1];
|
||||||
|
float f = 0.1F;
|
||||||
|
double d = (double)i + rand.nextDouble() * (block.maxX - block.minX - (double)(f * 2.0F)) + (double)f + block.minX;
|
||||||
|
double d1 = (double)j + rand.nextDouble() * (block.maxY - block.minY - (double)(f * 2.0F)) + (double)f + block.minY;
|
||||||
|
double d2 = (double)k + rand.nextDouble() * (block.maxZ - block.minZ - (double)(f * 2.0F)) + (double)f + block.minZ;
|
||||||
|
if(l == 0)
|
||||||
|
{
|
||||||
|
d1 = ((double)j + block.minY) - (double)f;
|
||||||
|
}
|
||||||
|
if(l == 1)
|
||||||
|
{
|
||||||
|
d1 = (double)j + block.maxY + (double)f;
|
||||||
|
}
|
||||||
|
if(l == 2)
|
||||||
|
{
|
||||||
|
d2 = ((double)k + block.minZ) - (double)f;
|
||||||
|
}
|
||||||
|
if(l == 3)
|
||||||
|
{
|
||||||
|
d2 = (double)k + block.maxZ + (double)f;
|
||||||
|
}
|
||||||
|
if(l == 4)
|
||||||
|
{
|
||||||
|
d = ((double)i + block.minX) - (double)f;
|
||||||
|
}
|
||||||
|
if(l == 5)
|
||||||
|
{
|
||||||
|
d = (double)i + block.maxX + (double)f;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityDiggingFX dig_effect = new EntityDiggingFX(worldObj, d, d1, d2, 0.0D, 0.0D, 0.0D, block, l, worldObj.getBlockMetadata(i, j, k));
|
||||||
|
dig_effect.func_4041_a(i, j, k);
|
||||||
|
dig_effect.func_407_b(0.2F);
|
||||||
|
dig_effect.func_405_d(0.6F);
|
||||||
|
|
||||||
|
addDigParticleEffect(dig_effect, block);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDigParticleEffect(EntityDiggingFX dig_effect, Block block)
|
||||||
|
{
|
||||||
|
boolean added = false;
|
||||||
|
String comp;
|
||||||
|
|
||||||
|
if(block instanceof ITextureProvider)
|
||||||
|
{
|
||||||
|
comp = ((ITextureProvider)block).getTextureFile();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
comp = "/terrain.png";
|
||||||
|
}
|
||||||
|
for(int x = 0; x < effectList.size(); x++)
|
||||||
|
{
|
||||||
|
BlockTextureParticles entry = (BlockTextureParticles)effectList.get(x);
|
||||||
|
if(entry.texture.equals(comp))
|
||||||
|
{
|
||||||
|
entry.effects.add(dig_effect);
|
||||||
|
added = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!added)
|
||||||
|
{
|
||||||
|
BlockTextureParticles entry = new BlockTextureParticles();
|
||||||
|
entry.texture = comp;
|
||||||
|
entry.effects.add(dig_effect);
|
||||||
|
effectList.add(entry);
|
||||||
|
}
|
||||||
|
addEffect(dig_effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -176,6 +176,18 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/WorldRend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/client/Minecraft.java ../src_work/minecraft/net/minecraft/client/Minecraft.java
|
||||||
|
--- ../src_base/minecraft/net/minecraft/client/Minecraft.java 2011-07-11 21:58:45.464698600 +0200
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/client/Minecraft.java 2011-07-16 00:27:38.378475000 +0200
|
||||||
|
@@ -177,6 +177,7 @@
|
||||||
|
renderGlobal = new RenderGlobal(this, renderEngine);
|
||||||
|
GL11.glViewport(0, 0, displayWidth, displayHeight);
|
||||||
|
effectRenderer = new EffectRenderer(theWorld, renderEngine);
|
||||||
|
+ MinecraftForgeClient.onGameStart();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
downloadResourcesThread = new ThreadDownloadResources(mcDataDir, this);
|
||||||
|
|
||||||
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java
|
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java
|
||||||
--- ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 21:58:45.468698800 +0200
|
--- ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 21:58:45.468698800 +0200
|
||||||
+++ ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 22:00:55.619143000 +0200
|
+++ ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 22:00:55.619143000 +0200
|
||||||
|
|
Loading…
Reference in a new issue