From 7d93031aebeaa6ed0d1118981b7ba7824bd81c0e Mon Sep 17 00:00:00 2001 From: Jules Date: Mon, 6 Nov 2023 00:28:03 +0100 Subject: [PATCH] Better handling of fake events --- .../java/net/Indyuce/mmocore/api/block/BlockInfo.java | 1 - .../profess/event/trigger/BlockBrokenTrigger.java | 3 +++ .../api/quest/objective/MineBlockObjective.java | 3 +++ .../experience/source/MineBlockExperienceSource.java | 10 +++++----- .../net/Indyuce/mmocore/listener/BlockListener.java | 4 ++++ 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/block/BlockInfo.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/block/BlockInfo.java index c488bb5f..20292a86 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/block/BlockInfo.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/block/BlockInfo.java @@ -65,7 +65,6 @@ public class BlockInfo { if (condition instanceof BlockCondition) conditions.add((BlockCondition) condition); } - } public boolean getOption(BlockInfoOption option) { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/event/trigger/BlockBrokenTrigger.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/event/trigger/BlockBrokenTrigger.java index 89ad08c8..e992b4cd 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/event/trigger/BlockBrokenTrigger.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/event/trigger/BlockBrokenTrigger.java @@ -1,5 +1,6 @@ package net.Indyuce.mmocore.api.player.profess.event.trigger; +import io.lumine.mythic.lib.UtilityMethods; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; @@ -17,6 +18,8 @@ public class BlockBrokenTrigger implements EventTriggerHandler { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void a(BlockBreakEvent event) { + if (UtilityMethods.isFake(event)) return; + PlayerData player = PlayerData.get(event.getPlayer()); if (player.getProfess().hasEventTriggers("break-block")) player.getProfess().getEventTriggers("break-block").getTriggers().forEach(trigger -> trigger.apply(player)); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/objective/MineBlockObjective.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/objective/MineBlockObjective.java index f3379e1f..81780641 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/objective/MineBlockObjective.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/objective/MineBlockObjective.java @@ -1,5 +1,6 @@ package net.Indyuce.mmocore.api.quest.objective; +import io.lumine.mythic.lib.UtilityMethods; import net.Indyuce.mmocore.api.quest.ObjectiveProgress; import net.Indyuce.mmocore.api.event.CustomBlockMineEvent; import net.Indyuce.mmocore.api.quest.QuestProgress; @@ -42,6 +43,8 @@ public class MineBlockObjective extends Objective { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void a(BlockBreakEvent event) { if(!getQuestProgress().getPlayer().isOnline()) return; + if (UtilityMethods.isFake(event)) return; + if ((!playerPlaced) && event.getBlock().hasMetadata("player_placed")) return; if (event.getPlayer().equals(getQuestProgress().getPlayer().getPlayer()) && event.getBlock().getType() == block) { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java index e889bd8a..d83636a2 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java @@ -1,6 +1,7 @@ package net.Indyuce.mmocore.experience.source; import io.lumine.mythic.lib.MythicLib; +import io.lumine.mythic.lib.UtilityMethods; import io.lumine.mythic.lib.api.MMOLineConfig; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource; @@ -21,7 +22,7 @@ public class MineBlockExperienceSource extends SpecificExperienceSource * When set to true, the exp source will trigger when breaking * blocks that were placed by players. This can be used for crops */ @@ -39,12 +40,11 @@ public class MineBlockExperienceSource extends SpecificExperienceSource newManager() { - return - new ExperienceSourceManager() { + return new ExperienceSourceManager() { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void a(BlockBreakEvent event) { - if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) - return; + if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) return; + if (UtilityMethods.isFake(event)) return; PlayerData data = PlayerData.get(event.getPlayer()); diff --git a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java index 0bf3790f..9e509ffb 100644 --- a/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java +++ b/MMOCore-Dist/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java @@ -75,6 +75,9 @@ public class BlockListener implements Listener { return; } + // Broken can be broken, if event is fake then skip it. + if (UtilityMethods.isFake(event)) return; + boolean canBreak = true; ItemStack item = player.getInventory().getItemInMainHand(); if (!MMOCore.plugin.restrictionManager.checkPermissions(item, info.getBlock())) { @@ -148,6 +151,7 @@ public class BlockListener implements Listener { */ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void unregisterPlayerPlacedBlocksTag(BlockBreakEvent event) { + if (UtilityMethods.isFake(event)) return; event.getBlock().removeMetadata("player_placed", MMOCore.plugin); }