Jump to content

[1.10.2]Interaction problems - Successful interaction without further processing


Elix_x

Recommended Posts

Good day everybody!

Today, i have met some problems with interactions system. I have items that have interactions for right clicking air, block and left clicking block. I am handling those with interaction events. But when i right click on block, right click air event is also called and both things happen. I have tried many things (cancelling, setting use item & block results to allow/deny), but none helped.

By looking in code calling interaction methods, i understood that we cannot at the same time cancel further interaction (item methods + offhand) and make it successfull with events (basically, what i need).

So, how can it be done?

 

Code:

	@SubscribeEvent
public void manipulate(PlayerInteractEvent event){
	EntityPlayer player = event.getEntityPlayer();
	ItemStack itemstack = event.getItemStack();
	if(itemstack != null && itemstack.getItem() instanceof IColoringTool){
		IColoringTool tool = (IColoringTool) itemstack.getItem();
		if(event instanceof RightClickItem && tool.displayDefaultGui(player, itemstack)){
			ColorfulBlocksBase.proxy.displayGuiSelectColor(itemstack);
			event.setCanceled(true);
		}
		if(event instanceof RightClickBlock && tool.colorBlocksOnRightClick(player, itemstack)){
			for(BlockPos pos : tool.getTargettedBlocks(player, itemstack)){
				if(tool.colorBlockProceed(player, itemstack, pos)){
					ColoredBlocksManager.get(event.getWorld()).addRGBA(pos, tool.getCurrentColor(itemstack));
				}
			}
			player.swingArm(event.getHand());
			((RightClickBlock) event).setUseItem(Result.ALLOW);
			((RightClickBlock) event).setUseBlock(Result.ALLOW);
		}
		if(event instanceof LeftClickBlock && tool.pickColorOnLeftClick(player, itemstack)){
			RGBA rgba = ColoredBlocksManager.get(event.getWorld()).getRGBA(new BlockPos(event.getPos()));
			if(rgba != null){
				ColoringToolsManager.updateColor(player, rgba);
				player.swingArm(event.getHand());
				((LeftClickBlock) event).setUseItem(Result.DENY);
				((LeftClickBlock) event).setUseBlock(Result.DENY);
				event.setCanceled(true);
			}
		}
	}

	if(event instanceof RightClickBlock){
		if(itemstack != null && itemstack.getItem() == Items.POTIONITEM && itemstack.getItemDamage() == 0){
			if(ColoredBlocksManager.get(event.getWorld()).hasRGBA(new BlockPos(event.getPos()))){
				ColoredBlocksManager.get(event.getWorld()).removeRGBA(new BlockPos(event.getPos()));
				if(ColorfulBlocksBase.consumeWaterOnErase && !player.capabilities.isCreativeMode){
					player.setItemStackToSlot(event.getHand() == EnumHand.MAIN_HAND ? EntityEquipmentSlot.MAINHAND : EntityEquipmentSlot.OFFHAND, new ItemStack(Items.GLASS_BOTTLE));
				}
				((RightClickBlock) event).setUseItem(Result.DENY);
				((RightClickBlock) event).setUseBlock(Result.DENY);
				event.setCanceled(true);
			}
		}
	}
}

 

Thanks for help!

If you have any questions - just ask!

Link to comment
Share on other sites

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

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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