From 42f657ebdbbb88f22ebdfb89ce9764c684bcf985 Mon Sep 17 00:00:00 2001 From: KitsuShadow Date: Mon, 1 Feb 2016 22:08:28 -0500 Subject: [PATCH] iron_model_tipped_arrow_added --- bin/com/kitsu/medievalcraft/ClientProxy.class | Bin 1947 -> 2087 bytes bin/com/kitsu/medievalcraft/Main.class | Bin 6842 -> 6946 bytes .../entity/EntityModelArrow.class | Bin 15493 -> 15493 bytes .../item/weapon/ItemLongbow.class | Bin 4010 -> 4578 bytes .../renderer/blocks/RenderModelArrow.class | Bin 2831 -> 2612 bytes .../com/kitsu/medievalcraft/ClientProxy.java | 3 + .../java/com/kitsu/medievalcraft/Main.java | 8 +- .../entity/EntityModelArrow.java | 2 +- .../entity/EntityModelITArrow.java | 581 ++++++++++++++++++ .../item/weapon/ItemLongbow.java | 68 +- .../renderer/blocks/RenderModelArrow.java | 6 +- .../renderer/blocks/RenderModelITArrow.java | 56 ++ 12 files changed, 699 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/kitsu/medievalcraft/entity/EntityModelITArrow.java create mode 100644 src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelITArrow.java diff --git a/bin/com/kitsu/medievalcraft/ClientProxy.class b/bin/com/kitsu/medievalcraft/ClientProxy.class index a1099842d4e6d221231feadf3bdf197e54639ef5..b931bfa56601a16b162e458c0e7f498d8728d5f3 100644 GIT binary patch delta 523 zcmY+A%Su8~6o&upKAzn{{H>)1|W*PnjYpXa%p&F!{&AtOW8{0 zAw*+~>B6I>w<1L>b1+ai=`wniB6!${Vh+n7rqHEs3;1iXmh|H2KAK&oop9 zrF>jI)iK)~m}6+IHn=9kNIAv91wL()iKjS_JC6>NO6dUhb@e&=|r?S^Rl4^tD!$T zSi6@&*4h!Fv!$ye_k`sKLYTIjCP4q+vDiVcV$G7rExB&WAF=+QKt5x#Dm-Gh1up#p DIsQpc delta 438 zcmZ8byG{a86rAfmu6sq<7(p~~L1RczV*rtdDB=qR-&TGA8-h_17dpQ}PibjkVaEWeyS-MvQ!>kgu&o* z>`JxXu$^MVzB;pOW!tfxy1){aIT8#JS7j;&U8=&DgwCK=Yt@E8+9hNdVt<4uwV>ya z=UAt2HKJ@_lV-K_U=G_JWU)hK?c6A0pQFTJ(S>Gd9vtA1zO*|wN;i7YxP}TQ6Q}4w zPo|o(8-S4Lht@_f#$h3VIZPmlNes!Yr=yT{SWYqyh4|Q1yoEmf2o!k>N(@2AG@WuE zTcHY{$%p$qSkEJiRq4c~CMK(!h_|rzimhkab|UHR^}K6UEMT`wPju;`Lw~{Ee?_$K Mq3At4YWp7l0*7%v#{d8T diff --git a/bin/com/kitsu/medievalcraft/Main.class b/bin/com/kitsu/medievalcraft/Main.class index 1b745c24eba6045e75cf4e7643ac2aad29472180..9edfc4d854d058b0a2efe7f42585f99e0feb53b2 100644 GIT binary patch delta 871 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 F{}1oIvnT)n diff --git a/bin/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.class b/bin/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.class index b88149ccd79e94c45f9f5bda482f048933a8e5aa..60776d3f6efea9daa223decb40c70603aeef8501 100644 GIT binary patch delta 986 zcmZ8e%TiN85IvLJ+{;ad*A+=b2#AUypb*{~9)gI70ud3#M=(G_zz{Hmhq{P%v4>s(bO#Eb( z;xU`G>0l@kWtQ5UBOC?bb{xfV4aY>#(qgT^3GvJlrBsV`U9EvnL#=pjEh?@9XW&z@ zz~Vx*Ka@;Nuh>z8298EFiEq}z@*1>ooJNzGHJk{=7h<7gIHJRkHVv%|HEVe;QKlTS zwxdI|Dz20tog7{0U~nYnlA+}ETzoXNtaPOT$$g%q2NxLhso0PVha(J{r-xSMh-AIU z(I>(A^NH}1nLz}B>EuLIMlW;p%V_p4wHdKv5LYw=7~FC3T`9E=;i~whG-VCq8pjB( zi+Wq1K8jl!ZZb5i4Y zeaX7T7tJjmX-~5=*SKHj&IOZFZ&Ht*Eh|gNJy2Me9lj64)U^X$3RiDb+ zhVdH38#Fcx+;rx^O6LK{Nx5(krDg;)LYf?%*>vxuTt+t6yNxpMCW%PI?hcnH2{S#WV?)Z!_d6rgx7#)%0TMK$hvvlBZLgCO}Bps5Zh$r0%Wy2>%x5 zU(sc!&#FmYORb^r3wN^ie%Fz}0wu^UCB+ka!9%~trMOgQmQ&xt;=U5Q32Z|?+RY~K i$T0SZ43Z&<0Ao*vu_wd8t_%aaG7RjLAO9MO!?)H8WI!&2na?StdVMIQ7Of?5?9!e$U^95gS2&q zr#_eQ{u%lpm}1nKPM-4#=eQ|p365@;xd(JoaobNm5es^oFKer!!{r2Ur z0EX~Thr%!}dINFsuhO$S9bjihR!d%`x@Iqz>`lvAa;<_l;n`bW)wL@FCC^?vh%@D7 z+sO)tRRbY(iYKg76j(H9fT3Ib!v>F?;AjO8;}lNo_=sUx{2A;KSCzIv0(~N{6j@6A zp*+&k7}hZ)?gl#MM!*^PiZffS6lW~YEp3I7#wf=a#u-8@&aEZOu?q}ZBA3hc&CBWp z$E2(hZO*mUD~{#a1p^se(s7YtfbKRh#qlw+3@sb3y?L|jSzf8Ue%pG$z;d$nGRG&f z9&z8*)TtUE2VCWt#;4+v8V_Y~o#QiPMP6+`k-_I2Ur5@KL)vV~TPlWe1GjYCWatua z)UF`M9KIB<)X~rle8sVV+u}dWxA}@XlPHGmGblela2h*`- zX^7$4>&v#AbsV`)fn!BPwa08hbO(l5pC~J*qO|%(KAj#M8#|Xz=f!jFx>4oWz;}$E z=9ShdM)iK}dycc@M^T?;ns}iPAOG+<%xCD@rC&io55*_~6hDA`xj5R;E25$9?c>Qk zbkuS37bM?rZGnmy(OS?;L{4uH!u>cynaODsj}ZQw`ofeK>loym*Ksbf6IXZQ+D;wk zQ#D+mZ%XDu%(#Egyi$npNF6ykxt2=TFe8CqibRN0=E zPy7{1ZOetGq06C-g(NDXZ3J6nvd3zMaV~GLI%~z%*JKLDNClh zhxVtG54_WS-GpyMJCtqN&>XD7^#@CtN<$_?L@8q=Q@2v56N6z>) Ri9>Tt9GJuK1F;nR_&?Pk#2Nqq diff --git a/src/main/java/com/kitsu/medievalcraft/ClientProxy.java b/src/main/java/com/kitsu/medievalcraft/ClientProxy.java index 2cf63ea2..73eb8c5b 100644 --- a/src/main/java/com/kitsu/medievalcraft/ClientProxy.java +++ b/src/main/java/com/kitsu/medievalcraft/ClientProxy.java @@ -2,12 +2,14 @@ package com.kitsu.medievalcraft; import com.kitsu.medievalcraft.entity.EntityITSpear; import com.kitsu.medievalcraft.entity.EntityModelArrow; +import com.kitsu.medievalcraft.entity.EntityModelITArrow; import com.kitsu.medievalcraft.entity.EntityShit; import com.kitsu.medievalcraft.entity.EntityTester; import com.kitsu.medievalcraft.item.ModItems; import com.kitsu.medievalcraft.renderer.RenderId; import com.kitsu.medievalcraft.renderer.RendererRegistry; import com.kitsu.medievalcraft.renderer.blocks.RenderModelArrow; +import com.kitsu.medievalcraft.renderer.blocks.RenderModelITArrow; import com.kitsu.medievalcraft.renderer.blocks.RenderModelITSpear; import cpw.mods.fml.client.FMLClientHandler; @@ -22,6 +24,7 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerEntityRenderingHandler(EntityShit.class, new RenderSnowball(ModItems.itemShit)); RenderingRegistry.registerEntityRenderingHandler(EntityTester.class, new RenderSnowball(ModItems.itemTester)); RenderingRegistry.registerEntityRenderingHandler(EntityModelArrow.class, new RenderModelArrow()); + RenderingRegistry.registerEntityRenderingHandler(EntityModelITArrow.class, new RenderModelITArrow()); RenderingRegistry.registerEntityRenderingHandler(EntityITSpear.class, new RenderModelITSpear()); } diff --git a/src/main/java/com/kitsu/medievalcraft/Main.java b/src/main/java/com/kitsu/medievalcraft/Main.java index cc3b296b..b8ba8693 100644 --- a/src/main/java/com/kitsu/medievalcraft/Main.java +++ b/src/main/java/com/kitsu/medievalcraft/Main.java @@ -6,6 +6,7 @@ import com.kitsu.medievalcraft.crafting.CraftingHandle; import com.kitsu.medievalcraft.crafting.ModCrafting; import com.kitsu.medievalcraft.entity.EntityITSpear; import com.kitsu.medievalcraft.entity.EntityModelArrow; +import com.kitsu.medievalcraft.entity.EntityModelITArrow; import com.kitsu.medievalcraft.entity.EntityShit; import com.kitsu.medievalcraft.entity.EntityShortLivedShit; import com.kitsu.medievalcraft.entity.EntityTester; @@ -112,9 +113,10 @@ public class Main { EntityRegistry.registerModEntity(EntityShit.class, "itemShit", 1, this, 64, 10, true); EntityRegistry.registerModEntity(EntityModelArrow.class, "itemModelArrow", 2, this, 64, 10, true); - EntityRegistry.registerModEntity(EntityITSpear.class, "itemITSpear", 3, this, 64, 10, true); - EntityRegistry.registerModEntity(EntityTester.class, "itemTester", 4, this, 64, 10, true); - EntityRegistry.registerModEntity(EntityShortLivedShit.class, "itemShit", 5, this, 64, 10, true); + EntityRegistry.registerModEntity(EntityModelITArrow.class, "itemIronTippedModelArrow", 3, this, 64, 10, true); + EntityRegistry.registerModEntity(EntityITSpear.class, "itemITSpear", 4, this, 64, 10, true); + EntityRegistry.registerModEntity(EntityTester.class, "itemTester", 5, this, 64, 10, true); + EntityRegistry.registerModEntity(EntityShortLivedShit.class, "itemShit", 6, this, 64, 10, true); GameRegistry.registerFuelHandler(new FuelHandler()); diff --git a/src/main/java/com/kitsu/medievalcraft/entity/EntityModelArrow.java b/src/main/java/com/kitsu/medievalcraft/entity/EntityModelArrow.java index 31cee986..d9741def 100644 --- a/src/main/java/com/kitsu/medievalcraft/entity/EntityModelArrow.java +++ b/src/main/java/com/kitsu/medievalcraft/entity/EntityModelArrow.java @@ -42,7 +42,7 @@ public class EntityModelArrow extends EntityArrow implements IProjectile { public Entity shootingEntity; private int ticksInGround; private int ticksInAir; - private double damage = 3.0D; + private double damage = 4.0D; /** The amount of knockback an arrow applies when it hits a mob. */ private int knockbackStrength; diff --git a/src/main/java/com/kitsu/medievalcraft/entity/EntityModelITArrow.java b/src/main/java/com/kitsu/medievalcraft/entity/EntityModelITArrow.java new file mode 100644 index 00000000..dded28e0 --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/entity/EntityModelITArrow.java @@ -0,0 +1,581 @@ +package com.kitsu.medievalcraft.entity; + +import java.util.List; + +import com.kitsu.medievalcraft.item.ModItems; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.S2BPacketChangeGameState; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class EntityModelITArrow extends EntityArrow implements IProjectile { + private int field_145791_d = -1; + private int field_145792_e = -1; + private int field_145789_f = -1; + private Block field_145790_g; + private int inData; + private boolean inGround; + /** 1 if the player can pick up the arrow */ + public int canBePickedUp; + /** Seems to be some sort of timer for animating an arrow. */ + public int arrowShake; + /** The owner of this arrow. */ + public Entity shootingEntity; + private int ticksInGround; + private int ticksInAir; + private double damage = 8.0D; + /** The amount of knockback an arrow applies when it hits a mob. */ + private int knockbackStrength; + + public EntityModelITArrow(World world) + { + super(world); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + } + + public EntityModelITArrow(World world, double x, double y, double z) + { + super(world); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + this.setPosition(x, y, z); + this.yOffset = 0.0F; + } + + @SuppressWarnings("cast") + public EntityModelITArrow(World world, EntityLivingBase player, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_) + { + super(world); + this.renderDistanceWeight = 10.0D; + this.shootingEntity = player; + + if (player instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.posY = player.posY + (double)player.getEyeHeight() + 0.10000000149011612D; + double d0 = p_i1755_3_.posX - player.posX; + double d1 = p_i1755_3_.boundingBox.minY + (double)(p_i1755_3_.height / 3.0F) - this.posY; + double d2 = p_i1755_3_.posZ - player.posZ; + double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2); + + if (d3 >= 1.0E-7D) + { + float f2 = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F; + float f3 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI)); + double d4 = d0 / d3; + double d5 = d2 / d3; + this.setLocationAndAngles(player.posX + d4, this.posY, player.posZ + d5, f2, f3); + this.yOffset = 0.0F; + float f4 = (float)d3 * 0.2F; + this.setThrowableHeading(d0, d1 + (double)f4, d2, p_i1755_4_, p_i1755_5_); + } + } + + @SuppressWarnings("cast") + public EntityModelITArrow(World world, EntityLivingBase player, float p_i1756_3_) + { + super(world); + this.renderDistanceWeight = 10.0D; + this.shootingEntity = player; + + if (player instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(player.posX, player.posY + (double)player.getEyeHeight(), player.posZ, player.rotationYaw, player.rotationPitch); + + this.posX += (player.getLookVec().xCoord); + //this.posY -= 0.10000000149011612D; + this.posZ += (player.getLookVec().zCoord); + //this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY += player.getLookVec().yCoord; + if(player.getLookVec().yCoord < 0){ + this.posY += player.getLookVec().yCoord * 2; + } + + this.setPosition(this.posX, this.posY, this.posZ); + + //this.setSize(0.5F, 0.5F); + //this.setLocationAndAngles(player.posX, player.posY + (double)player.getEyeHeight(), player.posZ, player.rotationYaw, player.rotationPitch); + //this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + //this.posY -= 0.10000000149011612D; + //this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + //this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI)); + this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5F, 1.0F); + } + + protected void entityInit() + { + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction. + */ + @SuppressWarnings("cast") + public void setThrowableHeading(double p_70186_1_, double p_70186_3_, double p_70186_5_, float p_70186_7_, float p_70186_8_) + { + float f2 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_3_ * p_70186_3_ + p_70186_5_ * p_70186_5_); + p_70186_1_ /= (double)f2; + p_70186_3_ /= (double)f2; + p_70186_5_ /= (double)f2; + p_70186_1_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_; + p_70186_3_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_; + p_70186_5_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_; + p_70186_1_ *= (double)p_70186_7_; + p_70186_3_ *= (double)p_70186_7_; + p_70186_5_ *= (double)p_70186_7_; + this.motionX = p_70186_1_; + this.motionY = p_70186_3_; + this.motionZ = p_70186_5_; + float f3 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_5_ * p_70186_5_); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70186_1_, p_70186_5_) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70186_3_, (double)f3) * 180.0D / Math.PI); + this.ticksInGround = 1; + } + + /** + * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX, + * posY, posZ, yaw, pitch + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotation2(double p_70056_1_, double p_70056_3_, double p_70056_5_, float p_70056_7_, float p_70056_8_, int p_70056_9_) + { + this.setPosition(p_70056_1_, p_70056_3_, p_70056_5_); + this.setRotation(p_70056_7_, p_70056_8_); + } + + /** + * Sets the velocity to the args. Args: x, y, z + */ + @SuppressWarnings("cast") + @SideOnly(Side.CLIENT) + public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) + { + this.motionX = p_70016_1_ ; + this.motionY = p_70016_3_ ; + this.motionZ = p_70016_5_ ; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt_double(p_70016_1_ * p_70016_1_ + p_70016_5_ * p_70016_5_); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70016_1_, p_70016_5_) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70016_3_, (double)f) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + /** + * Called to update the entity's position/logic. + */ + @SuppressWarnings("cast") + public void onUpdate() + { + super.onUpdate(); + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI); + } + + Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + //this.getEntityData().setInteger("blockX", this.field_145791_d); + + if (block.getMaterial() != Material.air) + { + block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.inGround) + { + int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + + if (block == this.field_145790_g && j == this.inData) + { + ++this.ticksInGround; + + if (this.ticksInGround == -1) + { + this.setDead(); + } + } + else + { + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } + else + { + ++this.ticksInAir; + Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false); + vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); + vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord); + } + + Entity entity = null; + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int i; + float f1; + + for (i = 0; i < list.size(); ++i) + { + Entity entity1 = (Entity)list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + f1 = 0.3F; + AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1); + MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) + { + double d1 = vec31.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new MovingObjectPosition(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + float f2; + float f4; + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit != null) + { + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int k = MathHelper.ceiling_double_int((double)f2 * this.damage); + + DamageSource damagesource = null; + + if (this.shootingEntity == null) + { + damagesource = DamageSource.causeArrowDamage(this, this.shootingEntity); + } + else + { + damagesource = DamageSource.causeThrownDamage(this, this.shootingEntity); + } + + if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) + { + movingobjectposition.entityHit.setFire(5); + } + + if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k)) + { + if (movingobjectposition.entityHit instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit; + + if (!this.worldObj.isRemote) + { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + if (this.knockbackStrength > 0) + { + f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f4 > 0.0F) + { + movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4); + } + } + + if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase) + { + EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity); + EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase); + } + + if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) + { + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F)); + } + } + + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + + if (!(movingobjectposition.entityHit instanceof EntityEnderman)) + { + this.setDead(); + } + } + else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } + else + { + + this.field_145791_d = movingobjectposition.blockX; + this.field_145792_e = movingobjectposition.blockY; + this.field_145789_f = movingobjectposition.blockZ; + this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.inData = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); + this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ)); + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)f2 * 0.05000000074505806D; + this.posY -= this.motionY / (double)f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D; + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + + + if (this.field_145790_g.getMaterial() != Material.air) + { + this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this); + } + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); + + for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f3 = 0.99F; + f1 = 0.05F; + + if (this.isInWater()) + { + for (int l = 0; l < 4; ++l) + { + f4 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ); + } + + f3 = 0.8F; + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.motionX *= (double)f3; + this.motionY *= (double)f3; + this.motionZ *= (double)f3; + this.motionY -= (double)f1; + this.setPosition(this.posX, this.posY, this.posZ); + this.func_145775_I(); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound p_70014_1_) + { + p_70014_1_.setShort("xTile", (short)this.field_145791_d); + p_70014_1_.setShort("yTile", (short)this.field_145792_e); + p_70014_1_.setShort("zTile", (short)this.field_145789_f); + p_70014_1_.setShort("life", (short)this.ticksInGround); + p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.field_145790_g)); + p_70014_1_.setByte("inData", (byte)this.inData); + p_70014_1_.setByte("shake", (byte)this.arrowShake); + p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + p_70014_1_.setByte("pickup", (byte)this.canBePickedUp); + p_70014_1_.setDouble("damage", this.damage); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound p_70037_1_) + { + this.field_145791_d = p_70037_1_.getShort("xTile"); + this.field_145792_e = p_70037_1_.getShort("yTile"); + this.field_145789_f = p_70037_1_.getShort("zTile"); + this.ticksInGround = p_70037_1_.getShort("life"); + this.field_145790_g = Block.getBlockById(p_70037_1_.getByte("inTile") & 255); + this.inData = p_70037_1_.getByte("inData") & 255; + this.arrowShake = p_70037_1_.getByte("shake") & 255; + this.inGround = p_70037_1_.getByte("inGround") == 1; + + if (p_70037_1_.hasKey("damage", 99)) + { + this.damage = p_70037_1_.getDouble("damage"); + } + + if (p_70037_1_.hasKey("pickup", 99)) + { + this.canBePickedUp = p_70037_1_.getByte("pickup"); + } + else if (p_70037_1_.hasKey("player", 99)) + { + this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0; + } + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer p_70100_1_) + { + if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0) + { + boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode; + + if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.itemIronTippedModelArrow, 1))) + { + flag = false; + } + + if (flag) + { + this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + p_70100_1_.onItemPickup(this, 1); + this.setDead(); + } + } + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + @SideOnly(Side.CLIENT) + public float getShadowSize() + { + return 0.0F; + } + + public void setDamage(double p_70239_1_) + { + this.damage = p_70239_1_; + } + + public double getDamage() + { + return this.damage; + } + + /** + * Sets the amount of knockback the arrow applies when it hits a mob. + */ + public void setKnockbackStrength(int p_70240_1_) + { + this.knockbackStrength = p_70240_1_; + } + + /** + * If returns false, the item will not inflict any damage against entities. + */ + public boolean canAttackWithItem() + { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/kitsu/medievalcraft/item/weapon/ItemLongbow.java b/src/main/java/com/kitsu/medievalcraft/item/weapon/ItemLongbow.java index 127cc03a..82ddacc7 100644 --- a/src/main/java/com/kitsu/medievalcraft/item/weapon/ItemLongbow.java +++ b/src/main/java/com/kitsu/medievalcraft/item/weapon/ItemLongbow.java @@ -28,6 +28,7 @@ import net.minecraft.world.World; import com.kitsu.medievalcraft.Main; import com.kitsu.medievalcraft.entity.EntityModelArrow; +import com.kitsu.medievalcraft.entity.EntityModelITArrow; import com.kitsu.medievalcraft.item.ModItems; import cpw.mods.fml.common.registry.GameRegistry; @@ -50,7 +51,7 @@ public class ItemLongbow extends Item{ GameRegistry.registerItem(this, name); } - + @Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.bow; @@ -58,7 +59,7 @@ public class ItemLongbow extends Item{ @Override public void onUpdate(ItemStack stack, World world, Entity player, int p_77663_4_, boolean using) { - + if((using == true)&&(bowUse == false)){ stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setInteger("D", 0); @@ -73,14 +74,22 @@ public class ItemLongbow extends Item{ @Override public ItemStack onItemRightClick (ItemStack stack, World world, EntityPlayer player) { - player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - bowUse = true; + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1)!=null)){ + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1).getItem()==(ModItems.itemModelArrow))){ + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); + bowUse = true; + } + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1).getItem()==(ModItems.itemIronTippedModelArrow))){ + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); + bowUse = true; + } + } return stack; } @Override public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int p_77615_4_) { - + int j = this.getMaxItemUseDuration(stack) - p_77615_4_; stack.stackTagCompound = new NBTTagCompound(); @@ -88,25 +97,48 @@ public class ItemLongbow extends Item{ stack.damageItem(1, player); player.worldObj.playSoundAtEntity(player, (Main.MODID + ":longbowRelease"), 0.8F, 1.0F); - if((player.inventory.hasItem(ModItems.itemModelArrow))){ - float f = j / 20.0F; - f = (f * f + f * 2.0F) / 3.0F; + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1)!=null)){ + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1).getItem()==(ModItems.itemModelArrow))){ + float f = j / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; - if (f < 0.1D){ - return; + if (f < 0.1D){ + return; + } + + if (f > 1.0F){ + f = 1.0F; + } + + player.inventory.consumeInventoryItem(ModItems.itemModelArrow); + + //EntityArrow arrow = new EntityArrow(world, player, f * 2.0F); + + if (!world.isRemote) { + EntityModelArrow arrow = new EntityModelArrow(world, player, f * 2.0F); + world.spawnEntityInWorld(arrow); + } } + if((player.inventory.getStackInSlot(player.inventory.currentItem - 1).getItem()==(ModItems.itemIronTippedModelArrow))){ + float f = j / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; - if (f > 1.0F){ - f = 1.0F; - } + if (f < 0.1D){ + return; + } - player.inventory.consumeInventoryItem(ModItems.itemModelArrow); + if (f > 1.0F){ + f = 1.0F; + } - //EntityArrow arrow = new EntityArrow(world, player, f * 2.0F); + player.inventory.consumeInventoryItem(ModItems.itemIronTippedModelArrow); - if (!world.isRemote) { - EntityModelArrow arrow = new EntityModelArrow(world, player, f * 2.0F); - world.spawnEntityInWorld(arrow); + //EntityArrow arrow = new EntityArrow(world, player, f * 2.0F); + + if (!world.isRemote) { + EntityModelITArrow arrow = new EntityModelITArrow(world, player, f * 2.0F); + world.spawnEntityInWorld(arrow); + } } } bowUse = false; diff --git a/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.java b/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.java index b93bf629..e6b3b51e 100644 --- a/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.java +++ b/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelArrow.java @@ -16,7 +16,7 @@ public class RenderModelArrow extends Render { //private static final ResourceLocation arrowTextures = new ResourceLocation("textures/entity/arrow.png"); - private static final ResourceLocation arrowTextures = new ResourceLocation("kitsumedievalcraft:textures/items/itemModelArrow.png"); + private static final ResourceLocation arrowTextures = new ResourceLocation("kitsumedievalcraft:models/modelarrow.png"); public static final ResourceLocation MODEL_CRUCIBLE = new ResourceLocation("kitsumedievalcraft:models/ModelArrow.obj"); public static final ResourceLocation TEXTURE = new ResourceLocation("kitsumedievalcraft:models/modelarrow.png"); @@ -35,10 +35,10 @@ public class RenderModelArrow extends Render GL11.glPopMatrix(); } - protected ResourceLocation getEntityTexture(EntityModelArrow p_110775_1_) + /*protected ResourceLocation getEntityTexture(EntityModelArrow p_110775_1_) { return arrowTextures; - } + }*/ /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. diff --git a/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelITArrow.java b/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelITArrow.java new file mode 100644 index 00000000..f464b306 --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/renderer/blocks/RenderModelITArrow.java @@ -0,0 +1,56 @@ +package com.kitsu.medievalcraft.renderer.blocks; + +import org.lwjgl.opengl.GL11; + +import com.kitsu.medievalcraft.entity.EntityModelArrow; +import com.kitsu.medievalcraft.entity.EntityModelITArrow; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +public class RenderModelITArrow extends Render +{ + + //private static final ResourceLocation arrowTextures = new ResourceLocation("textures/entity/arrow.png"); + private static final ResourceLocation arrowTextures = new ResourceLocation("kitsumedievalcraft:models/irontippedmodelarrow.png"); + public static final ResourceLocation MODEL_CRUCIBLE = new ResourceLocation("kitsumedievalcraft:models/ModelArrow.obj"); + public static final ResourceLocation TEXTURE = new ResourceLocation("kitsumedievalcraft:models/irontippedmodelarrow.png"); + + public IModelCustom model = AdvancedModelLoader.loadModel(MODEL_CRUCIBLE); + + public void doRender(EntityModelITArrow p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) + { + GL11.glPushMatrix(); + GL11.glScalef(1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float)p_76986_2_, (float)p_76986_4_, (float)p_76986_6_ ); + GL11.glRotatef(p_76986_1_.prevRotationYaw + (p_76986_1_.rotationYaw - p_76986_1_.prevRotationYaw) * p_76986_9_ - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(p_76986_1_.prevRotationPitch + (p_76986_1_.rotationPitch - p_76986_1_.prevRotationPitch) * p_76986_9_, 0.0F, 0.0F, 1.0F); + Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE); + model.renderAll(); + + GL11.glPopMatrix(); + } + + protected ResourceLocation getEntityTexture(Entity p_110775_1_) + { + return this.getEntityTexture((EntityModelITArrow)p_110775_1_); + } + + /** + * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then + * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic + * (Render