From 5dc98a0be07d520c3e224ee693978c2b4fe7b6bf Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 13 Aug 2016 10:13:33 -0400 Subject: [PATCH] Removed silly crystal overlay and added more Will brackets to the Sentient Sword --- .../item/soul/ItemSentientSword.java | 30 +-- .../util/handler/event/ClientHandler.java | 247 +----------------- .../textures/entities/defaultCrystalLayer.png | Bin 5104 -> 7231 bytes 3 files changed, 16 insertions(+), 261 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java index b1dd87dd..73f5de59 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java @@ -47,27 +47,27 @@ import com.google.common.collect.Multimap; public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IMeshProvider, IMultiWillTool { - public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000 }; - public static double[] defaultDamageAdded = new double[] { 1, 1.5, 2, 2.5, 3 }; - public static double[] destructiveDamageAdded = new double[] { 1.5, 2.25, 3, 3.75, 4.5 }; - public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; - public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2 }; - public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75 }; - public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13 }; - public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3 }; + public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000, 2000, 4000 }; + public static double[] defaultDamageAdded = new double[] { 1, 1.5, 2, 2.5, 3, 3.5, 4 }; + public static double[] destructiveDamageAdded = new double[] { 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6 }; + public static double[] vengefulDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2, 2.25, 2.5 }; + public static double[] steadfastDamageAdded = new double[] { 0, 0.5, 1, 1.5, 2, 2.25, 2.5 }; + public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75, 1, 1.25 }; + public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13, 15, 18 }; + public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3, 4, 4 }; - public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0 }; //TODO: Think of implementing this later - public static double[] vengefulAttackSpeed = new double[] { -2.1, -2, -1.8, -1.7, -1.6 }; - public static double[] destructiveAttackSpeed = new double[] { -2.6, -2.7, -2.8, -2.9, -3 }; + public static double[] healthBonus = new double[] { 0, 0, 0, 0, 0, 0, 0 }; //TODO: Think of implementing this later + public static double[] vengefulAttackSpeed = new double[] { -2.1, -2, -1.8, -1.7, -1.6, -1.6, -1.5 }; + public static double[] destructiveAttackSpeed = new double[] { -2.6, -2.7, -2.8, -2.9, -3, -3, -3 }; - public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600 }; + public static int[] absorptionTime = new int[] { 200, 300, 400, 500, 600, 700, 800 }; public static double maxAbsorptionHearts = 10; - public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100 }; - public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1 }; + public static int[] poisonTime = new int[] { 25, 50, 60, 80, 100, 120, 150 }; + public static int[] poisonLevel = new int[] { 0, 0, 0, 1, 1, 1, 1 }; - public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25 }; + public static double[] movementSpeed = new double[] { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4 }; public ItemSentientSword() { diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index 111155c6..3f002da9 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -11,29 +11,21 @@ import javax.annotation.Nullable; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.renderer.entity.RenderLivingBase; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.passive.EntityChicken; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EnumPlayerModelParts; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.event.sound.PlaySoundEvent; @@ -104,7 +96,7 @@ public class ClientHandler private static EnumFacing mrsHoloDirection; private static boolean mrsHoloDisplay; - boolean doCrystalRenderTest = false; + boolean doCrystalRenderTest = true; public static ResourceLocation crystalResource = new ResourceLocation(Constants.Mod.DOMAIN + "textures/entities/defaultCrystalLayer.png"); // Contrary to what your IDE tells you, this *is* actually needed. @@ -132,243 +124,6 @@ public class ClientHandler } } - public static int stateMachine = 0; - - @SubscribeEvent - public void onLivingRenderEvent(RenderLivingEvent.Post event) - { - if (doCrystalRenderTest) - blarg(crystalResource, event.getRenderer(), event.getEntity(), event.getX(), event.getY(), event.getZ(), event.getEntity().rotationYaw, Minecraft.getMinecraft().getRenderPartialTicks()); - } - - //TODO: START - - public void blarg(ResourceLocation resource, RenderLivingBase renderer, EntityLivingBase entity, double x, double y, double z, float entityYaw, float partialTicks) - { -// if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Pre(entity, this, x, y, z))) return; - GlStateManager.pushMatrix(); - GlStateManager.disableCull(); - renderer.getMainModel().swingProgress = entity.getSwingProgress(partialTicks); - boolean shouldSit = entity.isRiding() && (entity.getRidingEntity() != null && entity.getRidingEntity().shouldRiderSit()); - renderer.getMainModel().isRiding = shouldSit; - renderer.getMainModel().isChild = entity.isChild(); - - try - { - float f = this.interpolateRotation(entity.prevRenderYawOffset, entity.renderYawOffset, partialTicks); - float f1 = this.interpolateRotation(entity.prevRotationYawHead, entity.rotationYawHead, partialTicks); - float f2 = f1 - f; - - if (shouldSit && entity.getRidingEntity() instanceof EntityLivingBase) - { - EntityLivingBase entitylivingbase = (EntityLivingBase) entity.getRidingEntity(); - f = this.interpolateRotation(entitylivingbase.prevRenderYawOffset, entitylivingbase.renderYawOffset, partialTicks); - f2 = f1 - f; - float f3 = MathHelper.wrapDegrees(f2); - - if (f3 < -85.0F) - { - f3 = -85.0F; - } - - if (f3 >= 85.0F) - { - f3 = 85.0F; - } - - f = f1 - f3; - - if (f3 * f3 > 2500.0F) - { - f += f3 * 0.2F; - } - } - - float f7 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; - this.renderLivingAt(entity, x, y, z); - float f8 = this.handleRotationFloat(entity, partialTicks); - this.rotateCorpse(entity, f8, f, partialTicks); - float f4 = this.prepareScale(entity, partialTicks); - float f5 = 0.0F; - float f6 = 0.0F; - - if (!entity.isRiding()) - { - f5 = entity.prevLimbSwingAmount + (entity.limbSwingAmount - entity.prevLimbSwingAmount) * partialTicks; - f6 = entity.limbSwing - entity.limbSwingAmount * (1.0F - partialTicks); - - if (entity.isChild()) - { - f6 *= 3.0F; - } - - if (f5 > 1.0F) - { - f5 = 1.0F; - } - } - - GlStateManager.enableAlpha(); - renderer.getMainModel().setLivingAnimations(entity, f6, f5, partialTicks); - renderer.getMainModel().setRotationAngles(f6, f5, f8, f2, f7, f4, entity); - -// if (this.renderOutlines) -// { -// boolean flag1 = this.setScoreTeamColor(entity); -// GlStateManager.enableColorMaterial(); -// GlStateManager.enableOutlineMode(this.getTeamColor(entity)); -// -// if (!this.renderMarker) -// { -// this.renderModel(resource, renderer, entity, f6, f5, f8, f2, f7, f4); -// } -// -//// if (!(entity instanceof EntityPlayer) || !((EntityPlayer) entity).isSpectator()) -//// { -//// this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4); -//// } -// -// GlStateManager.disableOutlineMode(); -// GlStateManager.disableColorMaterial(); -// -//// if (flag1) -//// { -//// this.unsetScoreTeamColor(); -//// } -// } else - { -// boolean flag = this.setDoRenderBrightness(entity, partialTicks); - this.renderModel(resource, renderer, entity, f6, f5, f8, f2, f7, f4); - -// if (flag) -// { -// renderer.unsetBrightness(); -// } - - GlStateManager.depthMask(true); - - if (!(entity instanceof EntityPlayer) || !((EntityPlayer) entity).isSpectator()) - { -// this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4); - } - } - - GlStateManager.disableRescaleNormal(); - } catch (Exception exception) - { -// LOGGER.error((String)"Couldn\'t render entity", (Throwable)exception); - } - - GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GlStateManager.enableTexture2D(); - GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); - GlStateManager.enableCull(); - GlStateManager.popMatrix(); -// super.doRender(entity, x, y, z, entityYaw, partialTicks); -// net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Post(entity, this, x, y, z)); - } - - protected void renderModel(ResourceLocation resource, RenderLivingBase renderer, EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor) - { - boolean flag = !entitylivingbaseIn.isInvisible();// || this.renderOutlines; - boolean flag1 = !flag && !entitylivingbaseIn.isInvisibleToPlayer(Minecraft.getMinecraft().thePlayer); - - if (flag || flag1) - { - renderer.bindTexture(resource); - - if (flag1) - { - GlStateManager.enableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL); - } - - renderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor); - - if (flag1) - { - GlStateManager.disableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL); - } - } - } - - protected float interpolateRotation(float prevYawOffset, float yawOffset, float partialTicks) - { - float f; - - for (f = yawOffset - prevYawOffset; f < -180.0F; f += 360.0F) - { - ; - } - - while (f >= 180.0F) - { - f -= 360.0F; - } - - return prevYawOffset + partialTicks * f; - } - - protected void renderLivingAt(EntityLivingBase entityLivingBaseIn, double x, double y, double z) - { - GlStateManager.translate((float) x, (float) y, (float) z); - } - - protected void rotateCorpse(EntityLivingBase entityLiving, float p_77043_2_, float p_77043_3_, float partialTicks) - { - GlStateManager.rotate(180.0F - p_77043_3_, 0.0F, 1.0F, 0.0F); - - if (entityLiving.deathTime > 0) - { - float f = ((float) entityLiving.deathTime + partialTicks - 1.0F) / 20.0F * 1.6F; - f = MathHelper.sqrt_float(f); - - if (f > 1.0F) - { - f = 1.0F; - } - - GlStateManager.rotate(f * this.getDeathMaxRotation(entityLiving), 0.0F, 0.0F, 1.0F); - } else - { - String s = TextFormatting.getTextWithoutFormattingCodes(entityLiving.getName()); - - if (s != null && (s.equals("Dinnerbone") || s.equals("Grumm")) && (!(entityLiving instanceof EntityPlayer) || ((EntityPlayer) entityLiving).isWearing(EnumPlayerModelParts.CAPE))) - { - GlStateManager.translate(0.0F, entityLiving.height + 0.1F, 0.0F); - GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); - } - } - } - - protected float getDeathMaxRotation(EntityLivingBase entity) - { - return 90.0F; - } - - public float prepareScale(EntityLivingBase entitylivingbaseIn, float partialTicks) - { - GlStateManager.enableRescaleNormal(); - GlStateManager.scale(-1.0F, -1.0F, 1.0F); -// this.preRenderCallback(entitylivingbaseIn, partialTicks); - float f = 0.0625F; - GlStateManager.translate(0.0F, -1.501F, 0.0F); - return f; - } - - protected float handleRotationFloat(EntityLivingBase livingBase, float partialTicks) - { - if (livingBase instanceof EntityChicken) - { - EntityChicken chickenEntity = (EntityChicken) livingBase; - float f = chickenEntity.oFlap + (chickenEntity.wingRotation - chickenEntity.oFlap) * partialTicks; - float f1 = chickenEntity.oFlapSpeed + (chickenEntity.destPos - chickenEntity.oFlapSpeed) * partialTicks; - return (MathHelper.sin(f) + 1.0F) * f1; - } - return (float) livingBase.ticksExisted + partialTicks; - } - - //TODO: END - @SubscribeEvent public void onSoundEvent(PlaySoundEvent event) { diff --git a/src/main/resources/assets/bloodmagic/textures/entities/defaultCrystalLayer.png b/src/main/resources/assets/bloodmagic/textures/entities/defaultCrystalLayer.png index 594387e144456aa7aaa3a48de84a9763531e499c..5f2cc19c4a9dfbbd91cc51489e778f463e2121dc 100644 GIT binary patch delta 7188 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 WNR=lZMs)xH002ovPDHK)LSTY#$Pj@5 delta 5044 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 KMNUMnLSTaJ