@SubscribeEvent public void onEntityInteractSpecific(PlayerInteractEvent.EntityInteractSpecific event) { if (armorStandSwap) { //added for https://www.twitch.tv/darkphan if (event.getWorld().isRemote) { return; } //server side only if (event.getTarget() == null || event.getTarget() instanceof EntityArmorStand == false) { return; } EntityArmorStand entityStand = (EntityArmorStand) event.getTarget(); EntityPlayer player = event.getEntityPlayer(); if (player.isSneaking() == false) { return; } //bc when not sneaking, we do the normal single item version event.setCanceled(true);//which means we need to now cancel that normal version and do our own for (EntityEquipmentSlot slot : armorStandEquipment) { ItemStack itemPlayer = player.getItemStackFromSlot(slot); ItemStack itemArmorstand = entityStand.getItemStackFromSlot(slot); player.setItemStackToSlot(slot, itemArmorstand); entityStand.setItemStackToSlot(slot, itemPlayer); } } }
/** * Make a complete copy of the argument. * @param event to copy over * @return the copy */ private static PlayerInteractEvent copy(PlayerInteractEvent event){ PlayerInteractEvent copy = null; if(event instanceof PlayerInteractEvent.RightClickEmpty) copy = new PlayerInteractEvent.RightClickEmpty(event.getEntityPlayer(), event.getHand()); else if(event instanceof PlayerInteractEvent.LeftClickBlock) { copy = new PlayerInteractEvent.LeftClickBlock(event.getEntityPlayer(), event.getPos(), event.getFace(), ((PlayerInteractEvent.LeftClickBlock) event).getHitVec()); ((PlayerInteractEvent.LeftClickBlock)copy).setUseItem(((PlayerInteractEvent.LeftClickBlock) event).getUseItem()); ((PlayerInteractEvent.LeftClickBlock)copy).setUseBlock(((PlayerInteractEvent.LeftClickBlock) event).getUseBlock()); } else if(event instanceof PlayerInteractEvent.EntityInteractSpecific) copy = new PlayerInteractEvent.EntityInteractSpecific(event.getEntityPlayer(), event.getHand(), ((PlayerInteractEvent.EntityInteractSpecific) event).getTarget(), ((PlayerInteractEvent.EntityInteractSpecific) event).getLocalPos()); else if(event instanceof PlayerInteractEvent.EntityInteract) copy = new PlayerInteractEvent.EntityInteract(event.getEntityPlayer(), event.getHand(), ((PlayerInteractEvent.EntityInteract) event).getTarget()); else if(event instanceof PlayerInteractEvent.RightClickBlock) { copy = new PlayerInteractEvent.RightClickBlock(event.getEntityPlayer(), event.getHand(), event.getPos(), event.getFace(), ((PlayerInteractEvent.RightClickBlock) event).getHitVec()); ((PlayerInteractEvent.RightClickBlock)copy).setUseItem(((PlayerInteractEvent.RightClickBlock) event).getUseItem()); ((PlayerInteractEvent.RightClickBlock)copy).setUseBlock(((PlayerInteractEvent.RightClickBlock) event).getUseBlock()); } else if(event instanceof PlayerInteractEvent.RightClickItem) copy = new PlayerInteractEvent.RightClickItem(event.getEntityPlayer(),event.getHand()); if(event.isCanceled()){ copy.setCanceled(true); } return copy; }
@SubscribeEvent public void onEntityInteract(PlayerInteractEvent.EntityInteractSpecific event) { if (event.getEntityLiving() instanceof EntityLiving) { StoneEntityProperties properties = EntityPropertiesHandler.INSTANCE.getProperties(event.getEntityLiving(), StoneEntityProperties.class); if (properties != null && properties.isStone) { event.setCanceled(true); } } }
/** * PlayerInteractEvent.EntityInteractSpecific handler. * <p> * Check, if a player right clicked a entity. * Deny if: * - If the entity is in colony * - player has not permission * * @param event PlayerInteractEvent */ @SubscribeEvent public void on(final PlayerInteractEvent.EntityInteractSpecific event) { if (isFreeToInteractWith(null, event.getPos()) && colony.getPermissions().hasPermission(event.getEntityPlayer(), Action.ACCESS_FREE_BLOCKS)) { return; } checkEventCancelation(Action.RIGHTCLICK_ENTITY, event.getEntityPlayer(), event.getWorld(), event, event.getPos()); }
@SubscribeEvent public void onEntityInteractSpecific(PlayerInteractEvent.EntityInteractSpecific event) { EntityPlayer player = event.getEntityPlayer(); if(event.getTarget().world.isRemote || player.isSpectator() || player.isCreative() || !(event.getTarget() instanceof EntityArmorStand)) return; if(player.isSneaking()) { event.setCanceled(true); EntityArmorStand armorStand = (EntityArmorStand) event.getTarget(); swapSlot(player, armorStand, EntityEquipmentSlot.HEAD); swapSlot(player, armorStand, EntityEquipmentSlot.CHEST); swapSlot(player, armorStand, EntityEquipmentSlot.LEGS); swapSlot(player, armorStand, EntityEquipmentSlot.FEET); if(offhandSwapping) swapSlot(player, armorStand, EntityEquipmentSlot.OFFHAND); } }