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.

Featured Replies

Posted

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.

> 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

  • Author

Ok, well, inverting isRemote breaks it; the player no longer is affected, and the mobs being airborne still isn't detected.

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.

entity.onGround doesn't work?

 

...and setVelocity is client-side only. Try to modify motion(X/Y/Z).

  • Author

This is on a sword by the way, not armor. :P

 

And ugh how did I miss that method, I went through the autocomplete list like 6 times...well, onGround + motion works, thanks!  :D  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.

  • 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.

  • 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 :D  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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

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.