StrangeOne101 Posted November 28, 2014 Posted November 28, 2014 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 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); } } Quote The enders are everywhere. You can't escape...
SaoModder Posted November 28, 2014 Posted November 28, 2014 what are you trying to do with the code? Quote
StrangeOne101 Posted November 30, 2014 Author Posted November 30, 2014 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 Quote The enders are everywhere. You can't escape...
StrangeOne101 Posted December 2, 2014 Author Posted December 2, 2014 The item is can be any item that fits the standard of what I need. I don't have an item file for it. Quote The enders are everywhere. You can't escape...
StrangeOne101 Posted December 3, 2014 Author Posted December 3, 2014 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. Quote The enders are everywhere. You can't escape...
Draco18s Posted December 3, 2014 Posted December 3, 2014 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... Quote 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.
StrangeOne101 Posted December 3, 2014 Author Posted December 3, 2014 On 12/3/2014 at 3:25 AM, diesieben07 said: 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. Quote 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. Quote The enders are everywhere. You can't escape...
david476 Posted December 3, 2014 Posted December 3, 2014 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. Quote
StrangeOne101 Posted December 3, 2014 Author Posted December 3, 2014 On 12/3/2014 at 5:31 AM, david476 said: 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 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. Quote The enders are everywhere. You can't escape...
Draco18s Posted December 3, 2014 Posted December 3, 2014 On 12/3/2014 at 4:59 AM, StrangeOne101 said: 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... Quote 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.
ImaFool Posted December 3, 2014 Posted December 3, 2014 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)) Quote
ImaFool Posted December 3, 2014 Posted December 3, 2014 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.. Quote
ImaFool Posted December 3, 2014 Posted December 3, 2014 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 Quote
Recommended Posts
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.