aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/kubatech/api/network/CustomTileEntityPacket.java8
-rw-r--r--src/main/java/kubatech/api/utils/MobUtils.java12
-rw-r--r--src/main/java/kubatech/client/effect/EntityRenderer.java16
-rw-r--r--src/main/java/kubatech/nei/Mob_Handler.java44
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java39
5 files changed, 69 insertions, 50 deletions
diff --git a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
index 9236594647..cd7bfd3389 100644
--- a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
+++ b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
@@ -59,6 +59,10 @@ public class CustomTileEntityPacket implements IMessage {
addData(bytes);
}
+ public void addData(boolean data) {
+ customdata.writeBoolean(data);
+ }
+
public void getData(byte[] bytes) {
customdata.readBytes(bytes);
}
@@ -77,6 +81,10 @@ public class CustomTileEntityPacket implements IMessage {
return new String(getData(getDataInt()), StandardCharsets.UTF_8);
}
+ public boolean getDataBoolean() {
+ return customdata.readBoolean();
+ }
+
@Override
public void fromBytes(ByteBuf buf) {
w = buf.readInt();
diff --git a/src/main/java/kubatech/api/utils/MobUtils.java b/src/main/java/kubatech/api/utils/MobUtils.java
index 3e20adac1c..0b20364484 100644
--- a/src/main/java/kubatech/api/utils/MobUtils.java
+++ b/src/main/java/kubatech/api/utils/MobUtils.java
@@ -17,6 +17,16 @@ public class MobUtils {
@SideOnly(Side.CLIENT)
public static float getDesiredScale(EntityLiving e, float desiredHeight) {
+ return getDesiredScale(getMobHeight(e), desiredHeight);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public static float getDesiredScale(float entityHeight, float desiredHeight) {
+ return desiredHeight / entityHeight;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public static float getMobHeight(EntityLiving e) {
try {
if (mainmodelfield == null) {
mainmodelfield = RendererLivingEntity.class.getDeclaredField(
@@ -49,7 +59,7 @@ public class MobUtils {
}
}
}
- return desiredHeight / eheight;
+ return eheight;
} catch (Exception ex) {
return 1f;
}
diff --git a/src/main/java/kubatech/client/effect/EntityRenderer.java b/src/main/java/kubatech/client/effect/EntityRenderer.java
index 23f1a6e44a..ed545b3cb6 100644
--- a/src/main/java/kubatech/client/effect/EntityRenderer.java
+++ b/src/main/java/kubatech/client/effect/EntityRenderer.java
@@ -1,6 +1,7 @@
package kubatech.client.effect;
import static net.minecraft.client.renderer.entity.RenderManager.*;
+import static org.lwjgl.opengl.GL11.GL_MODELVIEW_STACK_DEPTH;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -127,16 +128,25 @@ public class EntityRenderer extends EntityFX {
GL11.glColor4f(1f, 1f, 1f, 1F);
RenderHelper.enableStandardItemLighting();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
+ int stackdepth = GL11.glGetInteger(GL_MODELVIEW_STACK_DEPTH);
GL11.glPushMatrix();
GL11.glTranslatef(
(float) (this.posX - renderPosX), (float) (this.posY - renderPosY), (float) (this.posZ - renderPosZ));
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
float desiredScale = MobUtils.getDesiredScale(entityToRender, 2f);
if (desiredScale < 1f) GL11.glScalef(desiredScale, desiredScale, desiredScale);
+ try {
+ instance.renderEntityWithPosYaw(entityToRender, 0f, 0f, 0f, f1, p_147936_2_);
+ } catch (Throwable ex) {
+ Tessellator tes = Tessellator.instance;
+ try {
+ tes.draw();
+ } catch (Exception ignored) {
+ }
+ }
- instance.renderEntityWithPosYaw(entityToRender, 0f, 0f, 0f, f1, p_147936_2_);
-
- GL11.glPopMatrix();
+ stackdepth -= GL11.glGetInteger(GL_MODELVIEW_STACK_DEPTH);
+ if (stackdepth < 0) for (; stackdepth < 0; stackdepth++) GL11.glPopMatrix();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_COLOR_MATERIAL);
diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java
index 78294326c9..5418aa1488 100644
--- a/src/main/java/kubatech/nei/Mob_Handler.java
+++ b/src/main/java/kubatech/nei/Mob_Handler.java
@@ -38,6 +38,7 @@ import java.util.List;
import kubatech.api.LoaderReference;
import kubatech.api.utils.FastRandom;
import kubatech.api.utils.InfernalHelper;
+import kubatech.api.utils.MobUtils;
import kubatech.api.utils.ModUtils;
import kubatech.kubatech;
import kubatech.loaders.MobRecipeLoader;
@@ -45,12 +46,7 @@ import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExtermin
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiInventory;
-import net.minecraft.client.model.ModelBase;
-import net.minecraft.client.model.ModelBox;
-import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.entity.Render;
-import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityList;
@@ -279,36 +275,9 @@ public class Mob_Handler extends TemplateRecipeHandler {
try {
EntityLiving e = currentrecipe.mob;
- float eheight = e.height;
- float ewidth = e.width;
-
- Render r = RenderManager.instance.getEntityRenderObject(e);
- if (r instanceof RendererLivingEntity && mainmodelfield != null) {
- ModelBase mainmodel = (ModelBase) mainmodelfield.get(r);
- for (Object box : mainmodel.boxList) {
- if (box instanceof ModelRenderer) {
- float minY = 999f;
- float minX = 999f;
- float maxY = -999f;
- float maxX = -999f;
- for (Object cube : ((ModelRenderer) box).cubeList) {
- if (cube instanceof ModelBox) {
- if (minY > ((ModelBox) cube).posY1) minY = ((ModelBox) cube).posY1;
- if (minX > ((ModelBox) cube).posX1) minX = ((ModelBox) cube).posX1;
- if (maxY < ((ModelBox) cube).posY2) maxY = ((ModelBox) cube).posY2;
- if (maxX < ((ModelBox) cube).posX2) maxX = ((ModelBox) cube).posX2;
- }
- }
- float cubeheight = (maxY - minY) / 10f;
- float cubewidth = (maxX - minX) / 10f;
- if (eheight < cubeheight) eheight = cubeheight;
- if (ewidth < cubewidth) ewidth = cubewidth;
- }
- }
- }
- int desiredheight = 27;
- int scaled = (int) (desiredheight / eheight);
+ float eheight = MobUtils.getMobHeight(e);
+ float scaled = MobUtils.getDesiredScale(eheight, 27);
//
// int maxwidth = 15;
// scaled = (int) Math.min(scaled, maxwidth / ewidth);
@@ -317,7 +286,12 @@ public class Mob_Handler extends TemplateRecipeHandler {
e.setPosition(mc.thePlayer.posX + 5, mc.thePlayer.posY, mc.thePlayer.posZ);
// ARGS: x, y, scale, rot, rot, entity
GuiInventory.func_147046_a(
- mobx, moby, scaled, (float) (x + mobx) - mouseX, (float) (y + moby - eheight * scaled) - mouseZ, e);
+ mobx,
+ moby,
+ Math.round(scaled),
+ (float) (x + mobx) - mouseX,
+ (float) (y + moby - eheight * scaled) - mouseZ,
+ e);
} catch (Throwable ex) {
Tessellator tes = Tessellator.instance;
try {
diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
index b4ed94058b..29104036f5 100644
--- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
@@ -130,9 +130,13 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
1)))
.addElement(
'g',
- LoaderReference.Bartworks
- ? BorosilicateGlass.ofBoroGlassAnyTier()
- : ofBlock(Blocks.glass, 0))
+ ofChain(
+ onElementPass(
+ t -> t.mGlasDetected = true,
+ LoaderReference.Bartworks
+ ? BorosilicateGlass.ofBoroGlassAnyTier()
+ : ofBlock(Blocks.glass, 0)),
+ ofBlock(GregTech_API.sBlockCasings2, 0)))
.addElement(
's',
LoaderReference.ExtraUtilities
@@ -144,8 +148,10 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
private TileEntity tileAltar = null;
private boolean isInRitualMode = false;
private int mCasing = 0;
+ private boolean mGlasDetected = false;
private EntityRenderer entityRenderer = null;
+ private boolean renderEntity = false;
@Override
public void saveNBTData(NBTTagCompound aNBT) {
@@ -266,7 +272,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPostTick(aBaseMetaTileEntity, aTick);
if (aBaseMetaTileEntity.isClientSide()) {
- if (aBaseMetaTileEntity.isActive() && aTick % 40 == 0) {
+ if (renderEntity && aBaseMetaTileEntity.isActive() && aTick % 40 == 0) {
setupEntityRenderer(aBaseMetaTileEntity, 40);
}
}
@@ -275,12 +281,21 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
@SideOnly(Side.CLIENT)
@Override
public void HandleCustomPacket(CustomTileEntityPacket message) {
- String mobType = message.getDataString();
- MobRecipeLoader.MobRecipe r = MobNameToRecipeMap.get(mobType);
- if (r != null) {
- if (entityRenderer == null) setupEntityRenderer(getBaseMetaTileEntity(), 40);
- entityRenderer.setEntity(r.entity);
- } else entityRenderer.setEntity(null);
+ if (message.getDataBoolean()) {
+ renderEntity = true;
+ String mobType = message.getDataString();
+ MobRecipeLoader.MobRecipe r = MobNameToRecipeMap.get(mobType);
+ if (r != null) {
+ if (entityRenderer == null) setupEntityRenderer(getBaseMetaTileEntity(), 40);
+ entityRenderer.setEntity(r.entity);
+ } else entityRenderer.setEntity(null);
+ } else {
+ renderEntity = false;
+ if (entityRenderer != null) {
+ entityRenderer.setDead();
+ entityRenderer = null;
+ }
+ }
}
@Override
@@ -392,7 +407,8 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
if (mobPacket == null) mobPacket = new CustomTileEntityPacket((TileEntity) this.getBaseMetaTileEntity(), null);
mobPacket.resetHelperData();
- mobPacket.addData(mobType);
+ mobPacket.addData(mGlasDetected);
+ if (mGlasDetected) mobPacket.addData(mobType);
mobPacket.sendToAllAround(16);
return true;
@@ -430,6 +446,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mGlasDetected = false;
if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 6, 0)) return false;
if (mCasing < 10 || mMaintenanceHatches.size() != 1 || mEnergyHatches.size() == 0) return false;
if (isInRitualMode) connectToRitual();