Posted March 18, 20169 yr I recently updated my mod from 1.8.9 to 1.9 and most things are working except for the right-click harvesting I implemented. This worked perfectly in 1.8.9 but the PlayerInteractEvent no longer fires on right-click. I have confirmed that my event method fires during a left-click. This is my first post so please be gentle . Code from CustomEventHandler @SubscribeEvent(receiveCanceled = true) public void PlayerRightClicked(PlayerInteractEvent event) { // Only process during right-click. if (event.action == Action.RIGHT_CLICK_BLOCK && !event.world.isRemote && !event.isCanceled()) { code-snipped for brevity } } Snipped code From CommonProxy private static CustomEventHandler eventHandler = new CustomEventHandler(); public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(eventHandler); } While trying to look through the Minecraft code it seems that in NetHandlerPlayServer in the processRightClickBlock method it's not calling "net.minecraftforge.event.ForgeEventFactory.onPlayerInteract" when it calls "this.playerEntity.interactionManager.processRightClickBlock(". Code from NetHandlerPlayServer below. public void processRightClickBlock(CPacketPlayerTryUseItem packetIn) { PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.playerEntity.getServerForPlayer()); WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); EnumHand enumhand = packetIn.getHand(); ItemStack itemstack = this.playerEntity.getHeldItem(enumhand); BlockPos blockpos = packetIn.getPos(); EnumFacing enumfacing = packetIn.func_187024_b(); this.playerEntity.markPlayerActive(); if (blockpos.getY() < this.serverController.getBuildLimit() - 1 || enumfacing != EnumFacing.UP && blockpos.getY() < this.serverController.getBuildLimit()) { double dist = playerEntity.interactionManager.getBlockReachDistance() + 3; dist *= dist; if (this.field_184362_y == null && this.playerEntity.getDistanceSq((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < dist && !this.serverController.isBlockProtected(worldserver, blockpos, this.playerEntity) && worldserver.getWorldBorder().contains(blockpos)) { this.playerEntity.interactionManager.processRightClickBlock(this.playerEntity, worldserver, itemstack, enumhand, blockpos, enumfacing, packetIn.func_187026_d(), packetIn.func_187025_e(), packetIn.func_187020_f()); // NOTE: ****************************** This is where I would expect the right-click event to be fired ****************************** } } else { TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("build.tooHigh", new Object[] {Integer.valueOf(this.serverController.getBuildLimit())}); textcomponenttranslation.getChatStyle().setColor(TextFormatting.RED); this.playerEntity.playerNetServerHandler.sendPacket(new SPacketChat(textcomponenttranslation)); } this.playerEntity.playerNetServerHandler.sendPacket(new SPacketBlockChange(worldserver, blockpos)); this.playerEntity.playerNetServerHandler.sendPacket(new SPacketBlockChange(worldserver, blockpos.offset(enumfacing))); itemstack = this.playerEntity.getHeldItem(enumhand); if (itemstack != null && itemstack.stackSize == 0) { this.playerEntity.setHeldItem(enumhand, (ItemStack)null); net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this.playerEntity, itemstack, enumhand); itemstack = null; } }
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.