package micdoodle8.mods.galacticraft.core.client.render.item; import micdoodle8.mods.galacticraft.core.Constants; import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.resources.model.IBakedModel; import net.minecraft.util.Timer; import javax.vecmath.Matrix4f; import javax.vecmath.Vector3f; import java.lang.reflect.Field; public class ItemModelFlag extends ModelTransformWrapper { public ItemModelFlag(IBakedModel modelToWrap) { super(modelToWrap); } @Override protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) { if (cameraTransformType == TransformType.GUI) { Matrix4f ret = new Matrix4f(); ret.setIdentity(); Matrix4f mul = new Matrix4f(); mul.setIdentity(); mul.setScale(0.4F); ret.mul(mul); mul.setIdentity(); mul.setTranslation(new Vector3f(0.2F, -0.8F, 0.0F)); ret.mul(mul); mul.setIdentity(); mul.rotY(Constants.halfPI); ret.mul(mul); return ret; } if (cameraTransformType == TransformType.FIRST_PERSON) { Matrix4f ret = new Matrix4f(); ret.setIdentity(); Matrix4f mul = new Matrix4f(); mul.setIdentity(); mul.rotY((float) -(Math.PI / 3.0F)); ret.mul(mul); mul.setIdentity(); if (Minecraft.getMinecraft().thePlayer.getItemInUseDuration() > 0) { final int useTime = Minecraft.getMinecraft().thePlayer.getItemInUseDuration(); float var7 = useTime / 20.0F; var7 = (var7 * var7 + var7 * 2.0F) / 3.0F; if (var7 > 1.0F) { var7 = 1.0F; } final int useTimeFuture = Minecraft.getMinecraft().thePlayer.getItemInUseDuration() + 1; float var72 = useTimeFuture / 20.0F; var72 = (var72 * var72 + var72 * 2.0F) / 3.0F; if (var72 > 1.0F) { var72 = 1.0F; } try { Class<Minecraft> c = Minecraft.class; Field f = c.getDeclaredField("timer"); f.setAccessible(true); Timer t = (Timer) f.get(Minecraft.getMinecraft()); mul.rotX(((var7 + (var72 - var7) * t.renderPartialTicks) * 75.0F) / Constants.RADIANS_TO_DEGREES); } catch (Exception e) { e.printStackTrace(); } } ret.mul(mul); return ret; } if (cameraTransformType == TransformType.THIRD_PERSON) { Matrix4f ret = new Matrix4f(); ret.setIdentity(); Matrix4f mul = new Matrix4f(); mul.setIdentity(); mul.setScale(0.5F); ret.mul(mul); mul.setIdentity(); mul.setTranslation(new Vector3f(0.15F, 0.45F, 0.15F)); ret.mul(mul); mul.setIdentity(); mul.rotX((float) -(Math.PI / 2.0F)); ret.mul(mul); mul.setIdentity(); mul.setTranslation(new Vector3f(0.0F, 0.5F, 0.0F)); ret.mul(mul); return ret; } return null; } }