Better handling of fake events

This commit is contained in:
Jules 2023-11-06 00:28:03 +01:00
parent 44d0785f73
commit 7d93031aeb
5 changed files with 15 additions and 6 deletions

View File

@ -65,7 +65,6 @@ public class BlockInfo {
if (condition instanceof BlockCondition) if (condition instanceof BlockCondition)
conditions.add((BlockCondition) condition); conditions.add((BlockCondition) condition);
} }
} }
public boolean getOption(BlockInfoOption option) { public boolean getOption(BlockInfoOption option) {

View File

@ -1,5 +1,6 @@
package net.Indyuce.mmocore.api.player.profess.event.trigger; package net.Indyuce.mmocore.api.player.profess.event.trigger;
import io.lumine.mythic.lib.UtilityMethods;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
@ -17,6 +18,8 @@ public class BlockBrokenTrigger implements EventTriggerHandler {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void a(BlockBreakEvent event) { public void a(BlockBreakEvent event) {
if (UtilityMethods.isFake(event)) return;
PlayerData player = PlayerData.get(event.getPlayer()); PlayerData player = PlayerData.get(event.getPlayer());
if (player.getProfess().hasEventTriggers("break-block")) if (player.getProfess().hasEventTriggers("break-block"))
player.getProfess().getEventTriggers("break-block").getTriggers().forEach(trigger -> trigger.apply(player)); player.getProfess().getEventTriggers("break-block").getTriggers().forEach(trigger -> trigger.apply(player));

View File

@ -1,5 +1,6 @@
package net.Indyuce.mmocore.api.quest.objective; 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.quest.ObjectiveProgress;
import net.Indyuce.mmocore.api.event.CustomBlockMineEvent; import net.Indyuce.mmocore.api.event.CustomBlockMineEvent;
import net.Indyuce.mmocore.api.quest.QuestProgress; import net.Indyuce.mmocore.api.quest.QuestProgress;
@ -42,6 +43,8 @@ public class MineBlockObjective extends Objective {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void a(BlockBreakEvent event) { public void a(BlockBreakEvent event) {
if(!getQuestProgress().getPlayer().isOnline()) return; if(!getQuestProgress().getPlayer().isOnline()) return;
if (UtilityMethods.isFake(event)) return;
if ((!playerPlaced) && event.getBlock().hasMetadata("player_placed")) if ((!playerPlaced) && event.getBlock().hasMetadata("player_placed"))
return; return;
if (event.getPlayer().equals(getQuestProgress().getPlayer().getPlayer()) && event.getBlock().getType() == block) { if (event.getPlayer().equals(getQuestProgress().getPlayer().getPlayer()) && event.getBlock().getType() == block) {

View File

@ -1,6 +1,7 @@
package net.Indyuce.mmocore.experience.source; package net.Indyuce.mmocore.experience.source;
import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.UtilityMethods;
import io.lumine.mythic.lib.api.MMOLineConfig; import io.lumine.mythic.lib.api.MMOLineConfig;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource; import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
@ -21,7 +22,7 @@ public class MineBlockExperienceSource extends SpecificExperienceSource<Material
/** /**
* Set to false by default. * Set to false by default.
* * <p>
* When set to true, the exp source will trigger when breaking * When set to true, the exp source will trigger when breaking
* blocks that were placed by players. This can be used for crops * blocks that were placed by players. This can be used for crops
*/ */
@ -39,12 +40,11 @@ public class MineBlockExperienceSource extends SpecificExperienceSource<Material
@Override @Override
public ExperienceSourceManager<MineBlockExperienceSource> newManager() { public ExperienceSourceManager<MineBlockExperienceSource> newManager() {
return return new ExperienceSourceManager<MineBlockExperienceSource>() {
new ExperienceSourceManager<MineBlockExperienceSource>() {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void a(BlockBreakEvent event) { public void a(BlockBreakEvent event) {
if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) return;
return; if (UtilityMethods.isFake(event)) return;
PlayerData data = PlayerData.get(event.getPlayer()); PlayerData data = PlayerData.get(event.getPlayer());

View File

@ -75,6 +75,9 @@ public class BlockListener implements Listener {
return; return;
} }
// Broken can be broken, if event is fake then skip it.
if (UtilityMethods.isFake(event)) return;
boolean canBreak = true; boolean canBreak = true;
ItemStack item = player.getInventory().getItemInMainHand(); ItemStack item = player.getInventory().getItemInMainHand();
if (!MMOCore.plugin.restrictionManager.checkPermissions(item, info.getBlock())) { if (!MMOCore.plugin.restrictionManager.checkPermissions(item, info.getBlock())) {
@ -148,6 +151,7 @@ public class BlockListener implements Listener {
*/ */
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void unregisterPlayerPlacedBlocksTag(BlockBreakEvent event) { public void unregisterPlayerPlacedBlocksTag(BlockBreakEvent event) {
if (UtilityMethods.isFake(event)) return;
event.getBlock().removeMetadata("player_placed", MMOCore.plugin); event.getBlock().removeMetadata("player_placed", MMOCore.plugin);
} }