/** * Removes this fishing hook. Drops loot and xp if a player is fishing. */ public void reelIn() { if (location.getBlock().getType() == Material.WATER) { ProjectileSource shooter = getShooter(); if (shooter instanceof Player) { PlayerFishEvent fishEvent = new PlayerFishEvent((Player) shooter, this, null, CAUGHT_FISH); fishEvent.setExpToDrop(ThreadLocalRandom.current().nextInt(1, 7)); fishEvent = EventFactory.getInstance().callEvent(fishEvent); if (!fishEvent.isCancelled()) { // TODO: Item should "fly" towards player world.dropItemNaturally(((Player) getShooter()).getLocation(), getRewardItem()); ((Player) getShooter()).giveExp(fishEvent.getExpToDrop()); } } } remove(); }
@EventHandler(ignoreCancelled = true) public void onPlayerFish(PlayerFishEvent event) { if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { if (Events.fireAndTestCancel(new SpawnEntityEvent(event, create(event.getPlayer(), event.getHook()), event.getHook().getLocation(), EntityType.EXPERIENCE_ORB))) { event.setExpToDrop(0); } } else if (event.getState() == PlayerFishEvent.State.CAUGHT_ENTITY) { Entity caught = event.getCaught(); if (caught == null) return; if (caught instanceof Item) { Events.fireToCancel(event, new DestroyEntityEvent(event, create(event.getPlayer(), event.getHook()), caught)); } else if (Entities.isConsideredBuildingIfUsed(caught)) { Events.fireToCancel(event, new UseEntityEvent(event, create(event.getPlayer(), event.getHook()), caught)); } else if (Entities.isNonHostile(caught) || caught instanceof Player) { Events.fireToCancel(event, new DamageEntityEvent(event, create(event.getPlayer(), event.getHook()), caught)); } } }
public void onPlayerFishHighest(PlayerFishEvent event) { if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); switch (event.getState()) { case CAUGHT_FISH: Item fishingCatch = (Item) event.getCaught(); event.setExpToDrop(fishingManager.handleVanillaXpBoost(event.getExpToDrop())); event.setCancelled(true); fishingManager.iceFishing(event.getHook(), block);
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerFish(PlayerFishEvent event) { if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) { return; } Player player = event.getPlayer(); NormalAchievements category; Material caughtMaterial = ((Item) event.getCaught()).getItemStack().getType(); if (caughtMaterial.name().endsWith("FISH") || serverVersion >= 13 && (caughtMaterial == Material.COD || caughtMaterial == Material.SALMON)) { category = NormalAchievements.FISH; } else { category = NormalAchievements.TREASURES; } if (disabledCategories.contains(category)) { return; } if (!shouldIncreaseBeTakenIntoAccount(player, category)) { return; } updateStatisticAndAwardAchievementsIfAvailable(player, category, 1); } }
@EventHandler(priority=EventPriority.LOWEST) public void onPlayerFish(final PlayerFishEvent event){ // Check also in case of cancelled events. final Player player = event.getPlayer(); if (munchHausen.isEnabled(player) && munchHausen.checkFish(player, event.getCaught(), event.getState())){ event.setCancelled(true); } }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFishing(PlayerFishEvent e) { if (e.getCaught() instanceof Player && getPlugin().getIWM().inWorld(e.getCaught().getLocation())) { // Allow self-inflicted damage if (e.getCaught().equals(e.getPlayer())) { return; } // Protect visitors if (protectedVisitor((Player)e.getCaught())) { User.getInstance(e.getPlayer()).notify(Flags.INVINCIBLE_VISITORS.getHintReference()); e.setCancelled(true); } else if (!checkIsland(e, e.getCaught().getLocation(), getFlag(e.getCaught().getWorld()))) { e.getHook().remove(); User.getInstance(e.getPlayer()).notify(Flags.PVP_OVERWORLD.getHintReference()); e.setCancelled(true); } } }
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onPlayerFish(PlayerFishEvent event) { Entity entity = event.getCaught(); if(entity == null) return; //if nothing pulled, uninteresting event //if should be protected from pulling in land claims without permission if(entity.getType() == EntityType.ARMOR_STAND || entity instanceof Animals) { Player player = event.getPlayer(); PlayerData playerData = GriefPrevention.instance.dataStore.getPlayerData(player.getUniqueId()); Claim claim = GriefPrevention.instance.dataStore.getClaimAt(entity.getLocation(), false, playerData.lastClaim); if(claim != null) { //if no permission, cancel String errorMessage = claim.allowContainers(player); if(errorMessage != null) { event.setCancelled(true); GriefPrevention.sendMessage(player, TextMode.Err, Messages.NoDamageClaimedEntity, claim.getOwnerName()); return; } } } }
private void init() { // create npc registry this.npcRegistry = CitizensAPI.createNamedNPCRegistry("helper", new MemoryNPCDataStore()); // ensure our trait is registered registerTrait(); // handle click events Events.merge(NPCClickEvent.class, NPCRightClickEvent.class, NPCLeftClickEvent.class) .handler(e -> handleClick(e.getNPC(), e.getClicker())).bindWith(this.registry); // don't let players move npcs Events.subscribe(PlayerFishEvent.class) .filter(e -> e.getCaught() != null) .filter(e -> e.getCaught().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); /* Events.subscribe(ProjectileCollideEvent.class) .filter(e -> e.getCollidedWith() != null) .filter(e -> e.getCollidedWith().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); */ Events.subscribe(EntityDamageByEntityEvent.class) .filter(e -> e.getEntity().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); // update npcs every 10 ticks Schedulers.sync().runRepeating(this::tickNpcs, 10L, 10L).bindWith(this.registry); }
/** * Handle attacks with a fishing rod * @param e - event */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFishing(PlayerFishEvent e) { if (e.getCaught() == null) { return; } if (((e.getCaught() instanceof Animals || e.getCaught() instanceof IronGolem || e.getCaught() instanceof Snowman) && checkIsland(e, e.getCaught().getLocation(), Flags.HURT_ANIMALS)) || ((e.getCaught() instanceof Monster || e.getCaught() instanceof Squid || e.getCaught() instanceof Slime) && checkIsland(e, e.getCaught().getLocation(), Flags.HURT_MONSTERS)) || (e.getCaught() instanceof Villager && checkIsland(e, e.getCaught().getLocation(), Flags.HURT_VILLAGERS))) { e.getHook().remove(); } // Handle Armor stands that can be pulled using a rod if (e.getCaught() instanceof ArmorStand && checkIsland(e, e.getCaught().getLocation(), Flags.ARMOR_STAND)) { e.getHook().remove(); } }
/** * This is to cancel dragging the player closer when you reel in */ @EventHandler(priority = EventPriority.HIGHEST) private void onReelIn(PlayerFishEvent e){ if(!isSettingEnabled("cancelDraggingIn") || e.getState() != PlayerFishEvent.State.CAUGHT_ENTITY) return; hookEntityFeature.apply(e).remove(); //Nuke the bobber and don't do anything else e.setCancelled(true); }
@EventHandler public void onPlayerFish(PlayerFishEvent event) { update(event.getPlayer()); }
public ModuleFishingKnockback(OCMMain plugin){ super(plugin, "old-fishing-knockback"); //noinspection Convert2MethodRef as the Method reference would error at initialization, not just when invoked hookEntityFeature = MemoizingFeatureBranch.onException( playerFishEvent -> playerFishEvent.getHook(), playerFishEvent -> playerFishEvent.getHook(), // fall back to reflection on 1.12 and suck up some performance penalty Reflector.memoizeMethodAndInvoke(PlayerFishEvent.class, "getHook") ); }
@Override public MCFishingState getState() { return BukkitMCFishingState.getConvertor().getAbstractedEnum(e.getState()); }
@Override public void setExpToDrop(int exp) { e.setExpToDrop(exp); } }
@Override public int getExpToDrop() { return e.getExpToDrop(); }
public void onPlayerFishMonitor(PlayerFishEvent event) { if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); Entity caught = event.getCaught(); switch (event.getState()) { case FISHING: if (fishingManager.canMasterAngler()) { fishingManager.masterAngler(event.getHook()); fishingManager.setFishingTarget(); if(fishingManager.exploitPrevention(event.getHook().getBoundingBox())) return; fishingManager.handleFishing((Item) caught);
@SuppressWarnings("deprecation") @EventHandler public void onFishCatch(PlayerFishEvent event) { String playerID = PlayerConverter.getID(event.getPlayer()); if (event.getState() != State.CAUGHT_FISH) return; if (!containsPlayer(playerID)) return; if (event.getCaught() == null) return; if (event.getCaught().getType() != EntityType.DROPPED_ITEM) return; ItemStack item = ((Item) event.getCaught()).getItemStack(); if (item.getType() != fish) return; if (data >= 0 && item.getData().getData() != data) return; FishData data = (FishData) dataMap.get(playerID); if (checkConditions(playerID)) data.catchFish(); if (data.getAmount() <= 0) completeObjective(playerID); else if (notify && data.getAmount() % notifyInterval == 0) Config.sendMessage(playerID, "fish_to_catch", new String[] { String.valueOf(data.getAmount()) }); }
private void init() { // create npc registry this.npcRegistry = CitizensAPI.createNamedNPCRegistry("helper", new MemoryNPCDataStore()); // ensure our trait is registered registerTrait(); // handle click events Events.merge(NPCClickEvent.class, NPCRightClickEvent.class, NPCLeftClickEvent.class) .handler(e -> handleClick(e.getNPC(), e.getClicker())).bindWith(this.registry); // don't let players move npcs Events.subscribe(PlayerFishEvent.class) .filter(e -> e.getCaught() != null) .filter(e -> e.getCaught().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); /* Events.subscribe(ProjectileCollideEvent.class) .filter(e -> e.getCollidedWith() != null) .filter(e -> e.getCollidedWith().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); */ Events.subscribe(EntityDamageByEntityEvent.class) .filter(e -> e.getEntity().hasMetadata("NPC")) .handler(e -> e.setCancelled(true)) .bindWith(this.registry); // update npcs every 10 ticks Schedulers.sync().runRepeating(this::tickNpcs, 10L, 10L).bindWith(this.registry); }
@Override public MCFishHook getHook() { return new BukkitMCFishHook(e.getHook()); }