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)
conditions.add((BlockCondition) condition);
}
}
public boolean getOption(BlockInfoOption option) {

View File

@ -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));

View File

@ -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) {

View File

@ -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<Material
/**
* Set to false by default.
*
* <p>
* 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<Material
@Override
public ExperienceSourceManager<MineBlockExperienceSource> newManager() {
return
new ExperienceSourceManager<MineBlockExperienceSource>() {
return new ExperienceSourceManager<MineBlockExperienceSource>() {
@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());

View File

@ -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);
}