Posted October 13, 201410 yr Is there any workaround for getting if an entity is in the air, or falling? @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { if (entity.worldObj.isRemote && entity.worldObj != null && entity.worldObj.isDaytime()) { stack.damageItem(5, player); if(!entity.isAirBorne) { System.out.println("grounded"); entity.setVelocity(0.0D, 1.0D, 0.0D); player.setVelocity(0.0D, 1.0D, 0.0D); } else { System.out.println("airborne"); entity.setVelocity(0.0D, -1.0D, 0.0D); } } return true; } This always prints "grounded" and adds more positive velocity to both.
October 13, 201410 yr > entity.worldObj.isRemote && entity.worldObj != null - you are accessing world before null-check оО > entity.worldObj != null - i'm not sure, but world can't be null > entity.worldObj.isRemote - it happens at client, not at server, replace with !entity.worldObj.isRemote
October 13, 201410 yr Author Ok, well, inverting isRemote breaks it; the player no longer is affected, and the mobs being airborne still isn't detected.
October 13, 201410 yr What i did in my personal armar was to check "isCollided", as isAirborne did not work. Don't quote me on that but i think entities are airborne when they are hit by something that sends them to the air, like iron golems or creepers. Never tried it though.
October 13, 201410 yr entity.onGround doesn't work? ...and setVelocity is client-side only. Try to modify motion(X/Y/Z).
October 13, 201410 yr Author This is on a sword by the way, not armor. And ugh how did I miss that method, I went through the autocomplete list like 6 times...well, onGround + motion works, thanks! Also I derped, you can't have the isRemote check in here because you need to affect the position of entities on the server. With that check in, the entities just snap back to where they originally were when their position on the server is re-evaluated. @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { WorldServer overworldInst = MinecraftServer.getServer().worldServers[0]; if (overworldInst.isDaytime()) { if (player.onGround && player instanceof EntityLivingBase) { if(entity.onGround && entity instanceof EntityLivingBase) { entity.motionX = 0.0D; entity.motionY = 0.8D; entity.motionZ = 0.0D; player.jump(); stack.damageItem(5, player); } else { Vec3 playerLook = player.getLookVec(); entity.motionX = playerLook.xCoord * 2; entity.motionY = 0.0D; entity.motionZ = playerLook.zCoord * 2; stack.damageItem(1, player); } } } return true; } However, the damaging of the stack is buggy, when the durability runs out, it plays the break noise, but resets the damage to full. If you try to break a block with it, the "new" sword disappears.
October 13, 201410 yr Author Alright, and one other thing about swords that's not being obvious to me right now: what do I have to do to make it damage entities normally at night? Currently it does nothing at night.
October 13, 201410 yr Author @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { WorldServer overworldInst = MinecraftServer.getServer().worldServers[0]; if (overworldInst.isDaytime()) { if (player.onGround && player instanceof EntityLivingBase) { if(entity.onGround && entity instanceof EntityLivingBase) { Vec3 playerLook = player.getLookVec(); entity.motionX = 0.0D; entity.motionY = 1.0D; entity.motionZ = 0.0D; player.setVelocity((playerLook.xCoord * 0.5) * -1.0D, 0.0D, (playerLook.zCoord * 0.5) * -1.0D); stack.damageItem(5, player); return true; } else { Vec3 playerLook = player.getLookVec(); entity.motionX = playerLook.xCoord * 2; entity.motionY = 0.0D; entity.motionZ = playerLook.zCoord * 2; stack.damageItem(1, player); return true; } } else { return false; } } else { return false; } } There we go That hits like a sword while jumping or at night, and does the special actions while on the ground during the day.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.