From 7224ac4299098c70efae9dbd04c50a97e3f5f583 Mon Sep 17 00:00:00 2001 From: Blood Asp Date: Thu, 23 Apr 2015 18:14:22 +0200 Subject: Initial Commit --- .../gregtech/common/entities/GT_Entity_Arrow.java | 397 +++++++++++++++++++++ .../common/entities/GT_Entity_Arrow_Potion.java | 77 ++++ 2 files changed, 474 insertions(+) create mode 100644 main/java/gregtech/common/entities/GT_Entity_Arrow.java create mode 100644 main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java (limited to 'main/java/gregtech/common/entities') diff --git a/main/java/gregtech/common/entities/GT_Entity_Arrow.java b/main/java/gregtech/common/entities/GT_Entity_Arrow.java new file mode 100644 index 0000000000..63a319f01a --- /dev/null +++ b/main/java/gregtech/common/entities/GT_Entity_Arrow.java @@ -0,0 +1,397 @@ +/* 1: */ package gregtech.common.entities; +/* 2: */ +/* 3: */ import com.mojang.authlib.GameProfile; +/* 4: */ import gregtech.api.enums.Materials; +/* 5: */ import gregtech.api.objects.ItemData; +/* 6: */ import gregtech.api.objects.MaterialStack; +/* 7: */ import gregtech.api.util.GT_OreDictUnificator; +/* 8: */ import gregtech.api.util.GT_Utility; +/* 9: */ import gregtech.api.util.GT_Utility.GT_EnchantmentHelper; +/* 10: */ import java.util.List; +/* 11: */ import java.util.Random; +/* 12: */ import java.util.UUID; +/* 13: */ import net.minecraft.block.Block; +/* 14: */ import net.minecraft.block.material.Material; +/* 15: */ import net.minecraft.enchantment.Enchantment; +/* 16: */ import net.minecraft.enchantment.EnchantmentHelper; +/* 17: */ import net.minecraft.entity.Entity; +/* 18: */ import net.minecraft.entity.EntityLivingBase; +/* 19: */ import net.minecraft.entity.monster.EntityCreeper; +/* 20: */ import net.minecraft.entity.monster.EntityEnderman; +/* 21: */ import net.minecraft.entity.player.EntityPlayer; +/* 22: */ import net.minecraft.entity.player.EntityPlayerMP; +/* 23: */ import net.minecraft.entity.player.InventoryPlayer; +/* 24: */ import net.minecraft.entity.player.PlayerCapabilities; +/* 25: */ import net.minecraft.entity.projectile.EntityArrow; +/* 26: */ import net.minecraft.init.Blocks; +/* 27: */ import net.minecraft.init.Items; +/* 28: */ import net.minecraft.item.ItemStack; +/* 29: */ import net.minecraft.nbt.NBTTagCompound; +/* 30: */ import net.minecraft.network.NetHandlerPlayServer; +/* 31: */ import net.minecraft.network.play.server.S2BPacketChangeGameState; +/* 32: */ import net.minecraft.potion.Potion; +/* 33: */ import net.minecraft.util.AxisAlignedBB; +/* 34: */ import net.minecraft.util.DamageSource; +/* 35: */ import net.minecraft.util.MathHelper; +/* 36: */ import net.minecraft.util.MovingObjectPosition; +/* 37: */ import net.minecraft.util.Vec3; +/* 38: */ import net.minecraft.world.World; +/* 39: */ import net.minecraft.world.WorldServer; +/* 40: */ import net.minecraftforge.common.util.FakePlayerFactory; +/* 41: */ +/* 42: */ public class GT_Entity_Arrow +/* 43: */ extends EntityArrow +/* 44: */ { +/* 45: 36 */ private int mHitBlockX = -1; +/* 46: 37 */ private int mHitBlockY = -1; +/* 47: 38 */ private int mHitBlockZ = -1; +/* 48: 39 */ private Block mHitBlock = Blocks.air; +/* 49: 40 */ private int mHitBlockMeta = 0; +/* 50: 41 */ private boolean inGround = false; +/* 51: 42 */ private int mTicksAlive = 0; +/* 52: 43 */ private int ticksInAir = 0; +/* 53: 44 */ private int mKnockback = 0; +/* 54: 46 */ private ItemStack mArrow = null; +/* 55: */ +/* 56: */ public GT_Entity_Arrow(World aWorld) +/* 57: */ { +/* 58: 49 */ super(aWorld); +/* 59: */ } +/* 60: */ +/* 61: */ public GT_Entity_Arrow(World aWorld, double aX, double aY, double aZ) +/* 62: */ { +/* 63: 53 */ super(aWorld, aX, aY, aZ); +/* 64: */ } +/* 65: */ +/* 66: */ public GT_Entity_Arrow(World aWorld, EntityLivingBase aEntity, float aSpeed) +/* 67: */ { +/* 68: 57 */ super(aWorld, aEntity, aSpeed); +/* 69: */ } +/* 70: */ +/* 71: */ public GT_Entity_Arrow(EntityArrow aArrow, ItemStack aStack) +/* 72: */ { +/* 73: 61 */ super(aArrow.worldObj); +/* 74: 62 */ NBTTagCompound tNBT = new NBTTagCompound(); +/* 75: 63 */ aArrow.writeToNBT(tNBT); +/* 76: 64 */ readFromNBT(tNBT); +/* 77: 65 */ setArrowItem(aStack); +/* 78: */ } +/* 79: */ +/* 80: */ public void onUpdate() +/* 81: */ { +/* 82: 70 */ onEntityUpdate(); +/* 83: 71 */ if ((this.mArrow == null) && (!this.worldObj.isRemote)) +/* 84: */ { +/* 85: 72 */ setDead(); +/* 86: 73 */ return; +/* 87: */ } +/* 88: 76 */ Entity tShootingEntity = this.shootingEntity; +/* 89: 78 */ if ((this.prevRotationPitch == 0.0F) && (this.prevRotationYaw == 0.0F)) +/* 90: */ { +/* 91: 79 */ float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); +/* 92: 80 */ this.prevRotationYaw = (this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / 3.141592653589793D)); +/* 93: 81 */ this.prevRotationPitch = (this.rotationPitch = (float)(Math.atan2(this.motionY, f) * 180.0D / 3.141592653589793D)); +/* 94: */ } +/* 95: 84 */ if (this.mTicksAlive++ == 3000) { +/* 96: 84 */ setDead(); +/* 97: */ } +/* 98: 86 */ Block tBlock = this.worldObj.getBlock(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 99: 88 */ if (tBlock.getMaterial() != Material.air) +/* 100: */ { +/* 101: 89 */ tBlock.setBlockBoundsBasedOnState(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 102: 90 */ AxisAlignedBB axisalignedbb = tBlock.getCollisionBoundingBoxFromPool(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 103: 91 */ if ((axisalignedbb != null) && (axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ)))) { +/* 104: 91 */ this.inGround = true; +/* 105: */ } +/* 106: */ } +/* 107: 94 */ if (this.arrowShake > 0) { +/* 108: 94 */ this.arrowShake -= 1; +/* 109: */ } +/* 110: 96 */ if (this.inGround) +/* 111: */ { +/* 112: 97 */ int j = this.worldObj.getBlockMetadata(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 113: 98 */ if ((tBlock != this.mHitBlock) || (j != this.mHitBlockMeta)) +/* 114: */ { +/* 115: 99 */ this.inGround = false; +/* 116:100 */ this.motionX *= this.rand.nextFloat() * 0.2F; +/* 117:101 */ this.motionY *= this.rand.nextFloat() * 0.2F; +/* 118:102 */ this.motionZ *= this.rand.nextFloat() * 0.2F; +/* 119:103 */ this.mTicksAlive = 0; +/* 120:104 */ this.ticksInAir = 0; +/* 121: */ } +/* 122: */ } +/* 123: */ else +/* 124: */ { +/* 125:107 */ this.ticksInAir += 1; +/* 126:108 */ Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); +/* 127:109 */ Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); +/* 128:110 */ MovingObjectPosition tVector = this.worldObj.func_147447_a(vec31, vec3, false, true, false); +/* 129:111 */ vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ); +/* 130:112 */ vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); +/* 131:114 */ if (tVector != null) { +/* 132:114 */ vec3 = Vec3.createVectorHelper(tVector.hitVec.xCoord, tVector.hitVec.yCoord, tVector.hitVec.zCoord); +/* 133: */ } +/* 134:116 */ Entity tHitEntity = null; +/* 135:117 */ List tAllPotentiallyHitEntities = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); +/* 136:118 */ double tLargestDistance = 1.7976931348623157E+308D; +/* 137:120 */ for (int i = 0; i < tAllPotentiallyHitEntities.size(); i++) +/* 138: */ { +/* 139:121 */ Entity entity1 = (Entity)tAllPotentiallyHitEntities.get(i); +/* 140:123 */ if ((entity1.canBeCollidedWith()) && ((entity1 != tShootingEntity) || (this.ticksInAir >= 5))) +/* 141: */ { +/* 142:124 */ AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand(0.3D, 0.3D, 0.3D); +/* 143:125 */ MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); +/* 144:127 */ if (movingobjectposition1 != null) +/* 145: */ { +/* 146:128 */ double tDistance = vec31.distanceTo(movingobjectposition1.hitVec); +/* 147:130 */ if (tDistance < tLargestDistance) +/* 148: */ { +/* 149:131 */ tHitEntity = entity1; +/* 150:132 */ tLargestDistance = tDistance; +/* 151: */ } +/* 152: */ } +/* 153: */ } +/* 154: */ } +/* 155:138 */ if (tHitEntity != null) { +/* 156:138 */ tVector = new MovingObjectPosition(tHitEntity); +/* 157: */ } +/* 158:140 */ if ((tVector != null) && (tVector.entityHit != null) && ((tVector.entityHit instanceof EntityPlayer))) +/* 159: */ { +/* 160:141 */ EntityPlayer entityplayer = (EntityPlayer)tVector.entityHit; +/* 161:142 */ if ((entityplayer.capabilities.disableDamage) || (((tShootingEntity instanceof EntityPlayer)) && (!((EntityPlayer)tShootingEntity).canAttackPlayer(entityplayer)))) { +/* 162:142 */ tVector = null; +/* 163: */ } +/* 164: */ } +/* 165:145 */ if (tVector != null) { +/* 166:146 */ if (tVector.entityHit != null) +/* 167: */ { +/* 168:147 */ ItemData tData = GT_OreDictUnificator.getItemData(this.mArrow); +/* 169: */ +/* 170: */ +/* 171:150 */ float tMagicDamage = (tVector.entityHit instanceof EntityLivingBase) ? EnchantmentHelper.func_152377_a(this.mArrow, ((EntityLivingBase)tVector.entityHit).getCreatureAttribute()) : 0.0F; +/* 172:151 */ float tDamage = MathHelper.ceiling_double_int(MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ) * (getDamage() + ((tData != null) && (tData.mMaterial != null) && (tData.mMaterial.mMaterial != null) ? tData.mMaterial.mMaterial.mToolQuality / 2.0F - 1.0F : 0.0F))); +/* 173:153 */ if (getIsCritical()) { +/* 174:153 */ tDamage += this.rand.nextInt((int)(tDamage / 2.0D + 2.0D)); +/* 175: */ } +/* 176:156 */ int tFireDamage = (isBurning() ? 5 : 0) + 4 * EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow); +/* 177:157 */ int tKnockback = this.mKnockback + EnchantmentHelper.getEnchantmentLevel(Enchantment.knockback.effectId, this.mArrow); +/* 178:158 */ int tHitTimer = -1; +/* 179: */ +/* 180:160 */ int[] tDamages = onHitEntity(tVector.entityHit, tShootingEntity == null ? this : tShootingEntity, this.mArrow == null ? new ItemStack(Items.arrow, 1) : this.mArrow, (int)(tDamage * 2.0F), (int)(tMagicDamage * 2.0F), tKnockback, tFireDamage, tHitTimer); +/* 181:162 */ if (tDamages != null) +/* 182: */ { +/* 183:163 */ tDamage = tDamages[0] / 2.0F; +/* 184:164 */ tMagicDamage = tDamages[1] / 2.0F; +/* 185:165 */ tKnockback = tDamages[2]; +/* 186:166 */ tFireDamage = tDamages[3]; +/* 187:167 */ tHitTimer = tDamages[4]; +/* 188:169 */ if ((tFireDamage > 0) && (!(tVector.entityHit instanceof EntityEnderman))) { +/* 189:169 */ tVector.entityHit.setFire(tFireDamage); +/* 190: */ } +/* 191:171 */ if ((!(tHitEntity instanceof EntityPlayer)) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, this.mArrow) > 0)) +/* 192: */ { +/* 193:172 */ EntityPlayer tPlayer = null; +/* 194:173 */ if ((this.worldObj instanceof WorldServer)) { +/* 195:173 */ tPlayer = FakePlayerFactory.get((WorldServer)this.worldObj, new GameProfile(new UUID(0L, 0L), (tShootingEntity instanceof EntityLivingBase) ? ((EntityLivingBase)tShootingEntity).getCommandSenderName() : "Arrow")); +/* 196: */ } +/* 197:174 */ if (tPlayer != null) +/* 198: */ { +/* 199:175 */ tPlayer.inventory.currentItem = 0; +/* 200:176 */ tPlayer.inventory.setInventorySlotContents(0, getArrowItem()); +/* 201:177 */ tShootingEntity = tPlayer; +/* 202:178 */ tPlayer.setDead(); +/* 203: */ } +/* 204: */ } +/* 205:182 */ DamageSource tDamageSource = DamageSource.causeArrowDamage(this, tShootingEntity == null ? this : tShootingEntity); +/* 206:184 */ if ((tDamage + tMagicDamage > 0.0F) && (tVector.entityHit.attackEntityFrom(tDamageSource, tDamage + tMagicDamage))) +/* 207: */ { +/* 208:185 */ if ((tVector.entityHit instanceof EntityLivingBase)) +/* 209: */ { +/* 210:186 */ if (tHitTimer >= 0) { +/* 211:186 */ tVector.entityHit.hurtResistantTime = tHitTimer; +/* 212: */ } +/* 213:188 */ if (((tVector.entityHit instanceof EntityCreeper)) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow) > 0)) { +/* 214:188 */ ((EntityCreeper)tVector.entityHit).func_146079_cb(); +/* 215: */ } +/* 216:190 */ EntityLivingBase tHitLivingEntity = (EntityLivingBase)tVector.entityHit; +/* 217:192 */ if (!this.worldObj.isRemote) { +/* 218:192 */ tHitLivingEntity.setArrowCountInEntity(tHitLivingEntity.getArrowCountInEntity() + 1); +/* 219: */ } +/* 220:194 */ if (tKnockback > 0) +/* 221: */ { +/* 222:195 */ float tKnockbackDivider = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); +/* 223:196 */ if (tKnockbackDivider > 0.0F) { +/* 224:196 */ tHitLivingEntity.addVelocity(this.motionX * tKnockback * 0.6000000238418579D / tKnockbackDivider, 0.1D, this.motionZ * tKnockback * 0.6000000238418579D / tKnockbackDivider); +/* 225: */ } +/* 226: */ } +/* 227:199 */ GT_Utility.GT_EnchantmentHelper.applyBullshitA(tHitLivingEntity, tShootingEntity == null ? this : tShootingEntity, this.mArrow); +/* 228:200 */ GT_Utility.GT_EnchantmentHelper.applyBullshitB((tShootingEntity instanceof EntityLivingBase) ? (EntityLivingBase)tShootingEntity : null, tHitLivingEntity, this.mArrow); +/* 229:202 */ if ((tShootingEntity != null) && (tHitLivingEntity != tShootingEntity) && ((tHitLivingEntity instanceof EntityPlayer)) && ((tShootingEntity instanceof EntityPlayerMP))) { +/* 230:203 */ ((EntityPlayerMP)tShootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F)); +/* 231: */ } +/* 232: */ } +/* 233:207 */ if (((tShootingEntity instanceof EntityPlayer)) && (tMagicDamage > 0.0F)) { +/* 234:207 */ ((EntityPlayer)tShootingEntity).onEnchantmentCritical(tVector.entityHit); +/* 235: */ } +/* 236:209 */ if ((!(tVector.entityHit instanceof EntityEnderman)) || (((EntityEnderman)tVector.entityHit).getActivePotionEffect(Potion.weakness) != null)) +/* 237: */ { +/* 238:210 */ if (tFireDamage > 0) { +/* 239:210 */ tVector.entityHit.setFire(tFireDamage); +/* 240: */ } +/* 241:211 */ playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); +/* 242:212 */ setDead(); +/* 243: */ } +/* 244: */ } +/* 245: */ else +/* 246: */ { +/* 247:215 */ this.motionX *= -0.1000000014901161D; +/* 248:216 */ this.motionY *= -0.1000000014901161D; +/* 249:217 */ this.motionZ *= -0.1000000014901161D; +/* 250:218 */ this.rotationYaw += 180.0F; +/* 251:219 */ this.prevRotationYaw += 180.0F; +/* 252:220 */ this.ticksInAir = 0; +/* 253: */ } +/* 254: */ } +/* 255: */ } +/* 256: */ else +/* 257: */ { +/* 258:224 */ this.mHitBlockX = tVector.blockX; +/* 259:225 */ this.mHitBlockY = tVector.blockY; +/* 260:226 */ this.mHitBlockZ = tVector.blockZ; +/* 261:227 */ this.mHitBlock = this.worldObj.getBlock(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 262:228 */ this.mHitBlockMeta = this.worldObj.getBlockMetadata(this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ); +/* 263:229 */ this.motionX = ((float)(tVector.hitVec.xCoord - this.posX)); +/* 264:230 */ this.motionY = ((float)(tVector.hitVec.yCoord - this.posY)); +/* 265:231 */ this.motionZ = ((float)(tVector.hitVec.zCoord - this.posZ)); +/* 266:232 */ float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); +/* 267:233 */ this.posX -= this.motionX / f2 * 0.0500000007450581D; +/* 268:234 */ this.posY -= this.motionY / f2 * 0.0500000007450581D; +/* 269:235 */ this.posZ -= this.motionZ / f2 * 0.0500000007450581D; +/* 270:236 */ playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); +/* 271:237 */ this.inGround = true; +/* 272:238 */ this.arrowShake = 7; +/* 273:239 */ setIsCritical(false); +/* 274:241 */ if (this.mHitBlock.getMaterial() != Material.air) { +/* 275:241 */ this.mHitBlock.onEntityCollidedWithBlock(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ, this); +/* 276: */ } +/* 277:243 */ if ((!this.worldObj.isRemote) && (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, this.mArrow) > 2)) { +/* 278:243 */ GT_Utility.setCoordsOnFire(this.worldObj, this.mHitBlockX, this.mHitBlockY, this.mHitBlockZ, true); +/* 279: */ } +/* 280:245 */ if (breaksOnImpact()) { +/* 281:245 */ setDead(); +/* 282: */ } +/* 283: */ } +/* 284: */ } +/* 285:249 */ if (getIsCritical()) { +/* 286:249 */ for (int i = 0; i < 4; i++) { +/* 287:249 */ this.worldObj.spawnParticle("crit", this.posX + this.motionX * i / 4.0D, this.posY + this.motionY * i / 4.0D, this.posZ + this.motionZ * i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); +/* 288: */ } +/* 289: */ } +/* 290:251 */ this.posX += this.motionX;this.posY += this.motionY;this.posZ += this.motionZ; +/* 291: */ +/* 292:253 */ this.rotationYaw = ((float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / 3.141592653589793D)); +/* 293:255 */ for (this.rotationPitch = ((float)(Math.atan2(this.motionY, MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ)) * 180.0D / 3.141592653589793D)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {} +/* 294:257 */ while (this.rotationPitch - this.prevRotationPitch >= 180.0F) { +/* 295:257 */ this.prevRotationPitch += 360.0F; +/* 296: */ } +/* 297:258 */ while (this.rotationYaw - this.prevRotationYaw < -180.0F) { +/* 298:258 */ this.prevRotationYaw -= 360.0F; +/* 299: */ } +/* 300:259 */ while (this.rotationYaw - this.prevRotationYaw >= 180.0F) { +/* 301:259 */ this.prevRotationYaw += 360.0F; +/* 302: */ } +/* 303:261 */ this.rotationPitch = (this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F); +/* 304:262 */ this.rotationYaw = (this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F); +/* 305:263 */ float tFrictionMultiplier = 0.99F; +/* 306:265 */ if (isInWater()) +/* 307: */ { +/* 308:266 */ for (int l = 0; l < 4; l++) { +/* 309:266 */ this.worldObj.spawnParticle("bubble", this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ); +/* 310: */ } +/* 311:267 */ tFrictionMultiplier = 0.8F; +/* 312: */ } +/* 313:270 */ if (isWet()) { +/* 314:270 */ extinguish(); +/* 315: */ } +/* 316:272 */ this.motionX *= tFrictionMultiplier; +/* 317:273 */ this.motionY *= tFrictionMultiplier; +/* 318:274 */ this.motionZ *= tFrictionMultiplier; +/* 319:275 */ this.motionY -= 0.0500000007450581D; +/* 320:276 */ setPosition(this.posX, this.posY, this.posZ); +/* 321:277 */ func_145775_I(); +/* 322: */ } +/* 323: */ } +/* 324: */ +/* 325: */ public void writeEntityToNBT(NBTTagCompound aNBT) +/* 326: */ { +/* 327:283 */ super.writeEntityToNBT(aNBT); +/* 328:284 */ aNBT.setShort("xTile", (short)this.mHitBlockX); +/* 329:285 */ aNBT.setShort("yTile", (short)this.mHitBlockY); +/* 330:286 */ aNBT.setShort("zTile", (short)this.mHitBlockZ); +/* 331:287 */ aNBT.setShort("life", (short)this.mTicksAlive); +/* 332:288 */ aNBT.setByte("inTile", (byte)Block.getIdFromBlock(this.mHitBlock)); +/* 333:289 */ aNBT.setByte("inData", (byte)this.mHitBlockMeta); +/* 334:290 */ aNBT.setByte("shake", (byte)this.arrowShake); +/* 335:291 */ aNBT.setByte("inGround", (byte)(this.inGround ? 1 : 0)); +/* 336:292 */ aNBT.setByte("pickup", (byte)this.canBePickedUp); +/* 337:293 */ aNBT.setDouble("damage", getDamage()); +/* 338:294 */ aNBT.setTag("mArrow", this.mArrow == null ? null : this.mArrow.writeToNBT(new NBTTagCompound())); +/* 339: */ } +/* 340: */ +/* 341: */ public void readEntityFromNBT(NBTTagCompound aNBT) +/* 342: */ { +/* 343:299 */ super.readEntityFromNBT(aNBT); +/* 344:300 */ this.mHitBlockX = aNBT.getShort("xTile"); +/* 345:301 */ this.mHitBlockY = aNBT.getShort("yTile"); +/* 346:302 */ this.mHitBlockZ = aNBT.getShort("zTile"); +/* 347:303 */ this.mTicksAlive = aNBT.getShort("life"); +/* 348:304 */ this.mHitBlock = Block.getBlockById(aNBT.getByte("inTile") & 0xFF); +/* 349:305 */ this.mHitBlockMeta = (aNBT.getByte("inData") & 0xFF); +/* 350:306 */ this.arrowShake = (aNBT.getByte("shake") & 0xFF); +/* 351:307 */ this.inGround = (aNBT.getByte("inGround") == 1); +/* 352:308 */ setDamage(aNBT.getDouble("damage")); +/* 353:309 */ this.canBePickedUp = aNBT.getByte("pickup"); +/* 354:310 */ this.mArrow = GT_Utility.loadItem(aNBT, "mArrow"); +/* 355: */ } +/* 356: */ +/* 357: */ public void onCollideWithPlayer(EntityPlayer aPlayer) +/* 358: */ { +/* 359:315 */ if ((!this.worldObj.isRemote) && (this.inGround) && (this.arrowShake <= 0) && (this.canBePickedUp == 1) && (aPlayer.inventory.addItemStackToInventory(getArrowItem()))) +/* 360: */ { +/* 361:316 */ playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); +/* 362:317 */ aPlayer.onItemPickup(this, 1); +/* 363:318 */ setDead(); +/* 364: */ } +/* 365: */ } +/* 366: */ +/* 367: */ public int[] onHitEntity(Entity aHitEntity, Entity aShootingEntity, ItemStack aArrow, int aRegularDamage, int aMagicDamage, int aKnockback, int aFireDamage, int aHitTimer) +/* 368: */ { +/* 369:333 */ return new int[] { aRegularDamage, aMagicDamage, aKnockback, aFireDamage, aHitTimer }; +/* 370: */ } +/* 371: */ +/* 372: */ public void setArrowItem(ItemStack aStack) +/* 373: */ { +/* 374:337 */ this.mArrow = GT_Utility.updateItemStack(GT_Utility.copyAmount(1L, new Object[] { aStack })); +/* 375: */ } +/* 376: */ +/* 377: */ public ItemStack getArrowItem() +/* 378: */ { +/* 379:341 */ return GT_Utility.copy(new Object[] { this.mArrow }); +/* 380: */ } +/* 381: */ +/* 382: */ public boolean breaksOnImpact() +/* 383: */ { +/* 384:345 */ return false; +/* 385: */ } +/* 386: */ +/* 387: */ public void setKnockbackStrength(int aKnockback) +/* 388: */ { +/* 389:350 */ this.mKnockback = aKnockback; +/* 390: */ } +/* 391: */ } + + +/* Location: F:\Torrent\minecraft\jd-gui-0.3.6.windows\gregtech_1.7.10-5.07.07-dev.jar + * Qualified Name: gregtech.common.entities.GT_Entity_Arrow + * JD-Core Version: 0.7.0.1 + */ \ No newline at end of file diff --git a/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java b/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java new file mode 100644 index 0000000000..8da5f11206 --- /dev/null +++ b/main/java/gregtech/common/entities/GT_Entity_Arrow_Potion.java @@ -0,0 +1,77 @@ +/* 1: */ package gregtech.common.entities; +/* 2: */ +/* 3: */ import java.util.Random; +/* 4: */ import net.minecraft.entity.Entity; +/* 5: */ import net.minecraft.entity.EntityLivingBase; +/* 6: */ import net.minecraft.item.ItemStack; +/* 7: */ import net.minecraft.nbt.NBTTagCompound; +/* 8: */ import net.minecraft.potion.PotionEffect; +/* 9: */ import net.minecraft.world.World; +/* 10: */ +/* 11: */ public class GT_Entity_Arrow_Potion +/* 12: */ extends GT_Entity_Arrow +/* 13: */ { +/* 14: */ public GT_Entity_Arrow_Potion(World aWorld) +/* 15: */ { +/* 16:13 */ super(aWorld); +/* 17: */ } +/* 18: */ +/* 19: */ public GT_Entity_Arrow_Potion(World aWorld, double aX, double aY, double aZ) +/* 20: */ { +/* 21:17 */ super(aWorld, aX, aY, aZ); +/* 22: */ } +/* 23: */ +/* 24: */ public GT_Entity_Arrow_Potion(World aWorld, EntityLivingBase aEntity, float aSpeed) +/* 25: */ { +/* 26:21 */ super(aWorld, aEntity, aSpeed); +/* 27: */ } +/* 28: */ +/* 29: */ public void writeEntityToNBT(NBTTagCompound aNBT) +/* 30: */ { +/* 31:26 */ super.writeEntityToNBT(aNBT); +/* 32:27 */ aNBT.setIntArray("mPotions", this.mPotions); +/* 33: */ } +/* 34: */ +/* 35: */ public void readEntityFromNBT(NBTTagCompound aNBT) +/* 36: */ { +/* 37:32 */ super.readEntityFromNBT(aNBT); +/* 38:33 */ setPotions(aNBT.getIntArray("mPotions")); +/* 39: */ } +/* 40: */ +/* 41: */ public boolean breaksOnImpact() +/* 42: */ { +/* 43:38 */ return true; +/* 44: */ } +/* 45: */ +/* 46: */ public void setPotions(int... aPotions) +/* 47: */ { +/* 48:49 */ if (aPotions != null) { +/* 49:49 */ this.mPotions = aPotions; +/* 50: */ } +/* 51: */ } +/* 52: */ +/* 53: */ public int[] getPotions() +/* 54: */ { +/* 55:53 */ return this.mPotions; +/* 56: */ } +/* 57: */ +/* 58:56 */ private int[] mPotions = new int[0]; +/* 59: */ +/* 60: */ public int[] onHitEntity(Entity aHitEntity, Entity aShootingEntity, ItemStack aArrow, int aRegularDamage, int aMagicDamage, int aKnockback, int aFireDamage, int aHitTimer) +/* 61: */ { +/* 62:60 */ if ((aHitEntity instanceof EntityLivingBase)) { +/* 63:60 */ for (int i = 3; i < this.mPotions.length; i += 4) { +/* 64:61 */ if (aHitEntity.worldObj.rand.nextInt(100) < this.mPotions[i]) { +/* 65:62 */ ((EntityLivingBase)aHitEntity).addPotionEffect(new PotionEffect(this.mPotions[(i - 3)], this.mPotions[(i - 2)], this.mPotions[(i - 1)], false)); +/* 66: */ } +/* 67: */ } +/* 68: */ } +/* 69:65 */ return super.onHitEntity(aHitEntity, aShootingEntity, aArrow, 1, aMagicDamage, aKnockback, aFireDamage, aHitTimer); +/* 70: */ } +/* 71: */ } + + +/* Location: F:\Torrent\minecraft\jd-gui-0.3.6.windows\gregtech_1.7.10-5.07.07-dev.jar + * Qualified Name: gregtech.common.entities.GT_Entity_Arrow_Potion + * JD-Core Version: 0.7.0.1 + */ \ No newline at end of file -- cgit