mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-13 16:54:04 +00:00
Fix WorldClient memory leak in butterfly renderer (#113)
This commit is contained in:
1 parent
2635d036aa
commit
839882b783
1 file changed
+42
-38
@@ -25,13 +25,8 @@ import forestry.lepidopterology.entities.EntityButterfly;
|
||||
|
||||
public class RenderButterflyItem implements IItemRenderer {
|
||||
|
||||
private final ModelButterfly model;
|
||||
private EntityButterfly entity;
|
||||
|
||||
public RenderButterflyItem() {
|
||||
model = new ModelButterfly();
|
||||
}
|
||||
|
||||
private static float getWingYaw(IButterfly butterfly) {
|
||||
float wingYaw = 1f;
|
||||
|
||||
@@ -77,10 +72,17 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
.templateAsIndividual(ButterflyManager.butterflyRoot.getDefaultTemplate());
|
||||
}
|
||||
|
||||
if (entity == null) {
|
||||
entity = new EntityButterfly(Proxies.common.getRenderWorld(), butterfly, 0, 0, 0);
|
||||
} else {
|
||||
entity.setIndividual(butterfly);
|
||||
try {
|
||||
if (entity == null) {
|
||||
entity = new EntityButterfly(Proxies.common.getRenderWorld(), butterfly, 0, 0, 0);
|
||||
} else {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
entity.setIndividual(butterfly);
|
||||
}
|
||||
} finally {
|
||||
if (entity != null) {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
}
|
||||
|
||||
return butterfly;
|
||||
@@ -111,7 +113,12 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
entity.rotationPitch = 0;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0f);
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0f);
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
|
||||
} else {
|
||||
GL11.glTranslatef(translateX, translateY, translateZ);
|
||||
@@ -119,14 +126,19 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
GL11.glScalef(-2.0f, 2.0f, 2.0f);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-((float) Math.atan((double) (pitch / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef(-((float) Math.atan(pitch / 40.0F)) * 20.0F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
entity.renderYawOffset = (float) Math.atan((double) (yaw / 40.0F)) * 20.0F;
|
||||
entity.rotationYaw = (float) Math.atan((double) (yaw / 40.0F)) * 40.0F;
|
||||
entity.rotationPitch = -((float) Math.atan((double) (pitch / 40.0F))) * 20.0F;
|
||||
entity.renderYawOffset = (float) Math.atan(yaw / 40.0F) * 20.0F;
|
||||
entity.rotationYaw = (float) Math.atan(yaw / 40.0F) * 40.0F;
|
||||
entity.rotationPitch = -((float) Math.atan(pitch / 40.0F)) * 20.0F;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
}
|
||||
|
||||
GL11.glPopMatrix();
|
||||
@@ -160,8 +172,12 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
entity.rotationPitch = 0;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
GL11.glPopMatrix();
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
@@ -173,39 +189,27 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
switch (type) {
|
||||
case ENTITY:
|
||||
case EQUIPPED:
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
case INVENTORY:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return switch (type) {
|
||||
case ENTITY, EQUIPPED, EQUIPPED_FIRST_PERSON, INVENTORY -> true;
|
||||
default -> false;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
|
||||
switch (helper) {
|
||||
case ENTITY_BOBBING:
|
||||
case ENTITY_ROTATION:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
return switch (helper) {
|
||||
case ENTITY_BOBBING, ENTITY_ROTATION -> false;
|
||||
default -> true;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||
|
||||
switch (type) {
|
||||
case ENTITY:
|
||||
renderButterflyItem(initButterfly(item), 0f, -0.5f, 0f);
|
||||
break;
|
||||
case EQUIPPED:
|
||||
renderButterflyItem(initButterfly(item), 0.5f, -0.9f, 1.0f);
|
||||
break;
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
case EQUIPPED, EQUIPPED_FIRST_PERSON:
|
||||
renderButterflyItem(initButterfly(item), 0.5f, -0.9f, 1.0f);
|
||||
break;
|
||||
case INVENTORY:
|
||||
|
||||
Reference in new issue
Block a user