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

I need an event that either triggers on right click AFTER block interaction or for some way to do that with the PlayerInteractEvent. I want it to be like the onItemUse method in items that triggers after block interaction or if the player is holding shift.

 

I did originally have the code in an item, but the item is meant to override a vanilla item with a new function and that's not possible with 1.7.

 

The following code it what I currently have for my PlayerInteractEvent. I've tried manually triggering the activation then canceling the event after (to prevent activation from happening twice, too) but it seems to cause other problems like no more chest animations or sound.

 

If anyone could help me with this, that'd be great.

 

Thanks :D

 

Code:

@SubscribeEvent
public void onRightClick(PlayerInteractEvent e)
{
	if (e.isCanceled())
	{
		return;
	}

	if (e.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR )
	{
		this.throwBrickEvent(e.entityPlayer); //New item function. Just easier in once line and place.
	}
	else if (e.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK && e.entityPlayer.getHeldItem() != null && this.canThrow(e.entityPlayer.getHeldItem()))
	{
		Block block = e.world.getBlock(e.x, e.y, e.z);
		if (!block.onBlockActivated(e.world, e.x, e.y, e.z, e.entityPlayer, e.face, e.x, e.y, e.z)) //Don't know what the last 3 parameters are 
		{
			e.setResult(Result.DEFAULT);
			this.throwBrickEvent(e.entityPlayer);
		} 			
		e.setCanceled(true);
	}
}

The enders are everywhere. You can't escape...

  • Author

I'm trying to spawn a custom entity when a player right clicks with an item. The only thing is that it still spawns when I interact with blocks like crafting tables, chests, etc

The enders are everywhere. You can't escape...

  • Author

The item is can be any item that fits the standard of what I need. I don't have an item file for it.

The enders are everywhere. You can't escape...

  • Author

As I said, it is causing me issues as it is still spawning when the player is interacting with a block like crafting tables, chests, doors, etc. I don't want it to spawn when they interact with blocks like these, I want it like the item interact code.

 

 

The enders are everywhere. You can't escape...

Or you could fix your RIGHT_CLICK_BLOCK section of code to actually check for your block.  More than one block returns false when right clicked and more than one returns true...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

Don't check for

RIGHT_CLICK_BLOCK

then...

That means that it will not spawn when they right click on any block. So if they click on grass even, it won't spawn. I don't want that.

 

Or you could fix your RIGHT_CLICK_BLOCK section of code to actually check for your block.  More than one block returns false when right clicked and more than one returns true...

I know that. I don't have a certain block I'm trying to check for though. I'm trying to check for all blocks that interact only so I can spawn my entity if it doesn't interact.

The enders are everywhere. You can't escape...

Hope you aren't the person I helped on the irc, and if not, I may have a solution. If you want to check if a block does something on right click, you can just see if it is overridden from the vanilla one with reflection, I'll get the specific code to you soon, not at a workspace.

  • Author

Hope you aren't the person I helped on the irc, and if not, I may have a solution. If you want to check if a block does something on right click, you can just see if it is overridden from the vanilla one with reflection, I'll get the specific code to you soon, not at a workspace.

Haha, hey dude xD I tried what you said but it seemed to make everything stop working completely. Still was stuck so I posted here in hope of getting a solution.

 

As diesieben said, there may not be a way without some really clever stuff so I might just settle on testing for TileEntities and some other blocks. Thanks anyway.

The enders are everywhere. You can't escape...

I know that. I don't have a certain block I'm trying to check for though. I'm trying to check for all blocks that interact only so I can spawn my entity if it doesn't interact.

 

So you want any item when right clicked on any block to spawn something?

 

Jesus christ, talk about a terrible idea...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

So, if i get u right your trying to find out if the block that is clicked has an interraction,

Then, maybe using this code would be a good idea (probably isnt tho):

if(!e.world.getBlock(e.x, e.y, e.z).onBlockActivated(e.world, e.x, e.y, e.y, e.entityPlayer, e.face, 0F, 0F, 0F))

I'm somewhat new to events, but cant you just cancel it so the method is only called once?

So for the player its not goin to make a change..

Alright, the only other ways I can think of are listing all blocks that have a interaction and check if its the clicked block, wich wouldnt work with other mods adding blocks with interactions..

The other one beeing to fake the world and the player so its not going to have a impact on the game, dont know if/how this is possible but that would also fail if the block has a interaction but still doesnt return true in onBlockActivated  ???

guess you can never get a 100% sure :P

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.