Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Noah_Beech

Members
  • Joined

  • Last visited

Everything posted by Noah_Beech

  1. Thanks! But why do I need the ongroundspeed variable? lol I only want the FOV for the bows, or is there something I'm missing? Is that variable needed for something else? ~Noah
  2. Okay, after looking at it for awhile, there is a variable in EntityRenderer called || private float fovMultiplierTemp; || And it obtains the value that is returned in getFOVMultiplier in this bit of code. if (mc.renderViewEntity instanceof EntityPlayerSP) { EntityPlayerSP entityplayersp = (EntityPlayerSP)this.mc.renderViewEntity; this.fovMultiplierTemp = entityplayersp.getFOVMultiplier(); } else { this.fovMultiplierTemp = mc.thePlayer.getFOVMultiplier(); } (Lines 345-370 in EntityRenderer) This value is private, so would it be possible via reflection to make this variable change around (Possibly every tick, BTW)? It would be nice if there was a way to do this without reflection, as the value will constantly be changing (Possible lag?)
  3. Okay, after looking at it for awhile, there is a variable in EntityRenderer called || private float fovMultiplierTemp; || And it obtains the value that is returned in getFOVMultiplier in this bit of code. if (mc.renderViewEntity instanceof EntityPlayerSP) { EntityPlayerSP entityplayersp = (EntityPlayerSP)this.mc.renderViewEntity; this.fovMultiplierTemp = entityplayersp.getFOVMultiplier(); } else { this.fovMultiplierTemp = mc.thePlayer.getFOVMultiplier(); } (Lines 345-370 in EntityRenderer) This value is private, so would it be possible via reflection to make this variable change around (Possibly every tick, BTW)? It would be nice if there was a way to do this without reflection, as the value will constantly be changing (Possible lag?)
  4. recently I've been optimizing my custom bows and now everything about them is good (Right size, you hold them correctly, no more floppy arrows) But For the final part I've ran into a problem. The regular bow uses an FOV multiplier in EntityplayerSP to give a little zoom when you hold down the right click. The code looks something like this. public float getFOVMultiplier() { float f = 1.0F; if (this.capabilities.isFlying) { f *= 1.1F; } f *= (this.landMovementFactor * this.getSpeedModifier() / this.speedOnGround + 1.0F) / 2.0F; if (this.isUsingItem() && this.getItemInUse().itemID == Item.bow.itemID) { int i = this.getItemInUseDuration(); float f1 = (float)i / 20.0F; if (f1 > 1.0F) { f1 = 1.0F; } else { f1 *= f1; } f *= 1.0F - f1 * 0.15F; } return f; } This FOV multiplier cannot seem to be used without modifying the class (A dumb idea haha) And I've heard maybe that reflection can do this? However I don't think so because it returns a local variable . Any help would be appreciated, thanks in advance! ~Noah
  5. recently I've been optimizing my custom bows and now everything about them is good (Right size, you hold them correctly, no more floppy arrows) But For the final part I've ran into a problem. The regular bow uses an FOV multiplier in EntityplayerSP to give a little zoom when you hold down the right click. The code looks something like this. public float getFOVMultiplier() { float f = 1.0F; if (this.capabilities.isFlying) { f *= 1.1F; } f *= (this.landMovementFactor * this.getSpeedModifier() / this.speedOnGround + 1.0F) / 2.0F; if (this.isUsingItem() && this.getItemInUse().itemID == Item.bow.itemID) { int i = this.getItemInUseDuration(); float f1 = (float)i / 20.0F; if (f1 > 1.0F) { f1 = 1.0F; } else { f1 *= f1; } f *= 1.0F - f1 * 0.15F; } return f; } This FOV multiplier cannot seem to be used without modifying the class (A dumb idea haha) And I've heard maybe that reflection can do this? However I don't think so because it returns a local variable . Any help would be appreciated, thanks in advance! ~Noah
  6. I see exactly what you are saying, I've only been coding for a mere 4-6 months now and making organized code really isn't a strongpoint. As of now I should put my points of focus on getting better understanding of how java works (It is still somewhat basic) but I see how what you said is important.
  7. buy this, read it and ***understand it*** !!! http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 if the "bad coder" would only produce code for himself to read, in, as you put it, "their OWN MOD", I would not give a #2 how rubbish their code might be. But if somebody will ask for help regarding the code, I demand the code to be clean and pretty (and that includes well chosen names and correct indention) I see where you are coming from, but there is a difference between bad code itself, and bad coding placement/ clarity.
  8. It won't: displayGUIWorkbench creates a ContainerWorkbench which checks if the block at the coordinates is a workbench. If it's not, it will close immediately. You won't get around making a) a Custom Container b) a GuiHandler Your code isn't really good either. par3EntityPlayer? Whats that? A variable name? Yuck! Calling someones code bad because of their variable names? You have to be kidding me, using small, more understandable variable names may be "good coding practice" but as long as the coder know what it is and it doesn't interfere with their ability to code their OWN MOD then it is fine...
  9. Could it be possible to create a condition that takes the coordinates of the player and of the block/tileentity, and subtracts the distance from one of the two and takes the absolute value of your result and then uses an if statement? Im not 100% sure but sounds like it would work if you knew how to do it.
  10. Unless you are 100% sure what you are doing eclipse is the most user-friendly. I know some people don't like eclipse for certain reasons but it is nice that most people use it because then everyone can talk over what issues they have with it to others that may have similar problems.
  11. Look at itembow and how it sets the amount of time to right click into a tick counter, and you could create a max amount of ticks that devided the number of ticks it has been held. This would create a constant counter that gradually increases as you hold it!
  12. Thanks! The name is a bit misleading, so that is why I was wondering, I figured it out on my own last night, luckily <3.
  13. Lets make this short and simple, I want to use Itemstack to keep track of what the player is holding when he hits a block, but If it is a block then How do I do it? Does Itemstack work the same for blocks or is there a different type that is used in the case of blocks? Thanks in advance. ~Noah
  14. PLease tell me this is a bug in forge...
  15. Today, I've been struggling with some arrow problems, and decided to use Renderarrow for my custom arrow. Since then I've ran into a serious problem. Whenever I shoot with any bow from my mod and the regular bow, after the arrow hits the ground it appears to fly up into the air, but the entity is actually in its regular spot. This is unaccpetable, and was wondering if anyone had a clue to why this is happening. Below is my custom entity code, set to dissapear when it hits the ground. package mod_Rareores; import java.util.List; import net.minecraft.block.Block; import net.minecraft.enchantment.EnchantmentThorns; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; 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.network.packet.Packet70GameEvent; 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 EntityPherithiumArrow extends EntityArrow implements IProjectile { private int xTile = -1; private int yTile = -1; private int zTile = -1; private int inTile = 0; private int inData = 0; private boolean inGround = false; /** 1 if the player can pick up the arrow */ public int canBePickedUp = 0; /** Seems to be some sort of timer for animating an arrow. */ public int arrowShake = 0; /** The owner of this arrow. */ public Entity shootingEntity; private int ticksInGround; private int ticksInAir = 0; private double damage = 2.0D; private int knockbackStrength; public EntityPherithiumArrow(World par1World) { super(par1World); this.renderDistanceWeight = 10.0D; this.setSize(0.5F, 0.5F); } public EntityPherithiumArrow(World par1World, double par2, double par4, double par6) { super(par1World); this.renderDistanceWeight = 10.0D; this.setSize(0.5F, 0.5F); this.setPosition(par2, par4, par6); this.yOffset = 0.0F; } public EntityPherithiumArrow(World par1World, EntityLiving par2EntityLiving, EntityLiving par3EntityLiving, float par4, float par5) { super(par1World); this.renderDistanceWeight = 10.0D; this.shootingEntity = par2EntityLiving; if (par2EntityLiving instanceof EntityPlayer) { this.canBePickedUp = 1; } this.posY = par2EntityLiving.posY + (double)par2EntityLiving.getEyeHeight() - 0.10000000149011612D; double var6 = par3EntityLiving.posX - par2EntityLiving.posX; double var8 = par3EntityLiving.posY + (double)par3EntityLiving.getEyeHeight() - 0.699999988079071D - this.posY; double var10 = par3EntityLiving.posZ - par2EntityLiving.posZ; double var12 = (double)MathHelper.sqrt_double(var6 * var6 + var10 * var10); if (var12 >= 1.0E-7D) { float var14 = (float)(Math.atan2(var10, var6) * 180.0D / Math.PI) - 90.0F; float var15 = (float)(-(Math.atan2(var8, var12) * 180.0D / Math.PI)); double var16 = var6 / var12; double var18 = var10 / var12; this.setLocationAndAngles(par2EntityLiving.posX + var16, this.posY, par2EntityLiving.posZ + var18, var14, var15); this.yOffset = 0.0F; float var20 = (float)var12 * 0.2F; this.setThrowableHeading(var6, var8 + (double)var20, var10, par4, par5); } } public EntityPherithiumArrow(World par1World, EntityLiving par2EntityLiving, float par3) { super(par1World); this.renderDistanceWeight = 10.0D; this.shootingEntity = par2EntityLiving; if (par2EntityLiving instanceof EntityPlayer) { this.canBePickedUp = 1; } this.setSize(0.5F, 0.5F); this.setLocationAndAngles(par2EntityLiving.posX, par2EntityLiving.posY + (double)par2EntityLiving.getEyeHeight(), par2EntityLiving.posZ, par2EntityLiving.rotationYaw, par2EntityLiving.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, par3 * 1.5F, 1.0F); } 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); } int i = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); if (i > 0) { Block.blocksList[i].setBlockBoundsBasedOnState(this.worldObj, this.xTile, this.yTile, this.zTile); AxisAlignedBB axisalignedbb = Block.blocksList[i].getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile); if (axisalignedbb != null && axisalignedbb.isVecInside(this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ))) { this.inGround = true; } } if (this.arrowShake > 0) { --this.arrowShake; } if (this.inGround) { int j = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); int k = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); if (j == this.inTile && k == this.inData) { ++this.ticksInGround; if (this.ticksInGround == 1200) { 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 vec3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); Vec3 vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks_do_do(vec3, vec31, false, true); vec3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); if (movingobjectposition != null) { vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool(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 l; float f1; for (l = 0; l < list.size(); ++l) { Entity entity1 = (Entity)list.get(l); 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(vec3, vec31); if (movingobjectposition1 != null) { double d1 = vec3.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).func_96122_a(entityplayer)) { movingobjectposition = null; } } float f2; float f3; if (movingobjectposition != null) { if (movingobjectposition.entityHit != null) { f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); int i1 = MathHelper.ceiling_double_int((double)f2 * this.damage); if (this.getIsCritical()) { i1 += this.rand.nextInt(i1 / 2 + 2); } DamageSource damagesource = null; if (this.shootingEntity == null) { damagesource = DamageSource.causeArrowDamage(this, this); } else { damagesource = DamageSource.causeArrowDamage(this, this.shootingEntity); } if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) { movingobjectposition.entityHit.setFire(5); } if (movingobjectposition.entityHit.attackEntityFrom(damagesource, i1)) { if (movingobjectposition.entityHit instanceof EntityLiving) { EntityLiving entityliving = (EntityLiving)movingobjectposition.entityHit; if (!this.worldObj.isRemote) { entityliving.setArrowCountInEntity(entityliving.getArrowCountInEntity() + 1); } if (this.knockbackStrength > 0) { f3 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); if (f3 > 0.0F) { movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f3, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f3); } } if (this.shootingEntity != null) { EnchantmentThorns.func_92096_a(this.shootingEntity, entityliving, this.rand); } if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) { ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(6, 0)); } } 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.xTile = movingobjectposition.blockX; this.yTile = movingobjectposition.blockY; this.zTile = movingobjectposition.blockZ; this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); this.inData = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); 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; this.setIsCritical(false); if (this.inTile != 0) { Block.blocksList[this.inTile].onEntityCollidedWithBlock(this.worldObj, this.xTile, this.yTile, this.zTile, this); } if(this.inGround==true){ this.setDead(); } } } if (this.getIsCritical()) { for (l = 0; l < 4; ++l) { this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)l / 4.0D, this.posY + this.motionY * (double)l / 4.0D, this.posZ + this.motionZ * (double)l / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); } } 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 f4 = 0.99F; f1 = 0.05F; if (this.isInWater()) { for (int j1 = 0; j1 < 4; ++j1) { f3 = 0.25F; this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f3, this.posY - this.motionY * (double)f3, this.posZ - this.motionZ * (double)f3, this.motionX, this.motionY, this.motionZ); } f4 = 0.8F; } this.motionX *= (double)f4; this.motionY *= (double)f4; this.motionZ *= (double)f4; this.motionY -= (double)f1; this.setPosition(this.posX, this.posY, this.posZ); this.doBlockCollisions(); } } }
  16. Wait so did you get your sword to work? If so can you show me what you did?
  17. I'm having a similar problem, and yes we know what lines are giving the errors, I've only had this problem in 1.5.1 also, was something changed, or is there a bug in a certain version of forge that causes this? To make it detailed, line 23 in itemsword is this.setMaxDamage(par2EnumToolMaterial.getMaxUses()); This sets the items durability, which from what I understand should be done in the enum. I also get this weird error that also has to do with enums, except it is with the vanilla ones. Is there a bug in forge or something of that sort? ------> http://pastebin.com/54mAgimp
  18. Best thign to do is just have a vanilla launcher or something, I play on Hungergames and sabotage all the time so I know how you feel...
  19. Lol, yes...No? (clicks no, crashes)"WTF" When you think about it, it is freaking hilarious
  20. I just make tools have -1 durability, does the same thing, you can't encahnt using an encahntment table however... (It's a "feature")
  21. Are you sure? In the if statements, the texture code is only ran when it reaches that number. And when you release the number reaches 0, so the texture should return to normal, but it won't let me do that... If anything can help me out with this problem, please do so, this is rather urgent...
  22. I've searched on google and just find a load of crap, >.> Can anyone help me out with this by chance?
  23. Oh, just wait a sec, lemme bring it up!
  24. Did you put the zip in your mods folder? Make sure to open the zip and drag those files in...
  25. So when I updated to 1.5, I got a TON of compiler errors, after fixing a bunch of them, I arrived to the point where I just had a few errors left in the bow classes. When I tried to fix them, I kept getting a bunch of error that are troubling me. With the way the new texture system works, I'm confused on how to animate the Bows. I've tried multiple methods that count right click ticks, but to no avail when I put in the texture function in an if statement I just get an error. Im usually pretty good at fixing/figuring this stuff out, but I am REALLY short on time so I could use some help from the gang!(This is the only thing preventing me from updating, so it is rather urgent) Reward is a plus 1 <3.

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.