diff options
Diffstat (limited to 'src/main/java/kubatech/api/utils')
-rw-r--r-- | src/main/java/kubatech/api/utils/InfernalHelper.java | 1 | ||||
-rw-r--r-- | src/main/java/kubatech/api/utils/MobUtils.java | 57 | ||||
-rw-r--r-- | src/main/java/kubatech/api/utils/ReflectionHelper.java | 9 |
3 files changed, 61 insertions, 6 deletions
diff --git a/src/main/java/kubatech/api/utils/InfernalHelper.java b/src/main/java/kubatech/api/utils/InfernalHelper.java index 60263b0a17..4bd48274f3 100644 --- a/src/main/java/kubatech/api/utils/InfernalHelper.java +++ b/src/main/java/kubatech/api/utils/InfernalHelper.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +@SuppressWarnings("unchecked") public class InfernalHelper { private static Method isClassAllowed = null; diff --git a/src/main/java/kubatech/api/utils/MobUtils.java b/src/main/java/kubatech/api/utils/MobUtils.java new file mode 100644 index 0000000000..3e20adac1c --- /dev/null +++ b/src/main/java/kubatech/api/utils/MobUtils.java @@ -0,0 +1,57 @@ +package kubatech.api.utils; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.lang.reflect.Field; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RendererLivingEntity; +import net.minecraft.entity.EntityLiving; + +public class MobUtils { + + private static Field mainmodelfield = null; + + @SideOnly(Side.CLIENT) + public static float getDesiredScale(EntityLiving e, float desiredHeight) { + try { + if (mainmodelfield == null) { + mainmodelfield = RendererLivingEntity.class.getDeclaredField( + ModUtils.isDeobfuscatedEnvironment ? "mainModel" : "field_77045_g"); + mainmodelfield.setAccessible(true); + } + 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; + } + } + } + return desiredHeight / eheight; + } catch (Exception ex) { + return 1f; + } + } +} diff --git a/src/main/java/kubatech/api/utils/ReflectionHelper.java b/src/main/java/kubatech/api/utils/ReflectionHelper.java index 7c7301c1c8..48d07c6eee 100644 --- a/src/main/java/kubatech/api/utils/ReflectionHelper.java +++ b/src/main/java/kubatech/api/utils/ReflectionHelper.java @@ -25,7 +25,8 @@ import java.util.HashMap; public class ReflectionHelper { private static final HashMap<String, HashMap<String, Field>> fields = new HashMap<>(); - public static <T> T getField(Object obj, String fieldName, boolean useBasicTypes, T defaultvalue) { + @SuppressWarnings("unchecked") + public static <T> T getField(Object obj, String fieldName, T defaultvalue) { Class<?> cl = obj.getClass(); String clName = cl.getName(); HashMap<String, Field> classmap = fields.computeIfAbsent(clName, s -> new HashMap<>()); @@ -52,11 +53,7 @@ public class ReflectionHelper { } } - public static <T> T getField(Object obj, String fieldName, boolean useBasicTypes) { - return getField(obj, fieldName, useBasicTypes, null); - } - public static <T> T getField(Object obj, String fieldName) { - return getField(obj, fieldName, true, null); + return getField(obj, fieldName, null); } } |