mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-11-18 06:24:17 +01:00
Folia Support, Updated dependencies in pom.xml, and refactored task scheduling to use SchedulerAdapter for better consistency across the codebase.
This commit is contained in:
parent
5399ac4e59
commit
a70da2ec33
3
.gitignore
vendored
3
.gitignore
vendored
@ -12,3 +12,6 @@ MMOCore.iml
|
||||
/MMOCore-Dist/MMOCore-Dist.iml
|
||||
|
||||
local_install.bat
|
||||
|
||||
.c*
|
||||
.vscode
|
||||
@ -175,7 +175,7 @@
|
||||
<dependency>
|
||||
<groupId>fr.phoenixdevt</groupId>
|
||||
<artifactId>Profile-API</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<version>1.1</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
@ -183,7 +183,7 @@
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.9.2</version>
|
||||
<version>2.11.6</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
@ -314,9 +314,9 @@
|
||||
|
||||
<!-- Quest Plugins -->
|
||||
<dependency>
|
||||
<groupId>me.blackvein</groupId>
|
||||
<artifactId>Quests</artifactId>
|
||||
<version>4.4.1-b340</version>
|
||||
<groupId>me.blackvein.quests</groupId>
|
||||
<artifactId>quests-api</artifactId>
|
||||
<version>4.8.4</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
@ -17,7 +17,6 @@ import net.Indyuce.mmocore.comp.citizens.CitizensMMOLoader;
|
||||
import net.Indyuce.mmocore.comp.mythicmobs.MythicHook;
|
||||
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
|
||||
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
|
||||
import net.Indyuce.mmocore.comp.placeholder.PlaceholderAPIParser;
|
||||
import net.Indyuce.mmocore.comp.placeholder.PlaceholderParser;
|
||||
import net.Indyuce.mmocore.comp.region.DefaultRegionHandler;
|
||||
import net.Indyuce.mmocore.comp.region.RegionHandler;
|
||||
@ -53,6 +52,7 @@ import net.Indyuce.mmocore.script.mechanic.StelliumMechanic;
|
||||
import net.Indyuce.mmocore.skill.cast.SkillCastingMode;
|
||||
import net.Indyuce.mmocore.skill.trigger.MMOCoreTriggerType;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -161,10 +161,12 @@ public class MMOCore extends MMOPlugin {
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("Vault") != null) economy = new VaultEconomy();
|
||||
|
||||
/* PlaceholderAPI disabled - missing dependency
|
||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||
placeholderParser = new PlaceholderAPIParser();
|
||||
getLogger().log(Level.INFO, "Hooked onto PlaceholderAPI");
|
||||
}
|
||||
*/
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("Citizens") != null) {
|
||||
Bukkit.getPluginManager().registerEvents(new CitizenInteractEventListener(), this);
|
||||
@ -187,17 +189,19 @@ public class MMOCore extends MMOPlugin {
|
||||
* Resource regeneration. Must check if entity is dead otherwise regen
|
||||
* will make the 'respawn' button glitched plus HURT entity effect bug
|
||||
*/
|
||||
new BukkitRunnable() {
|
||||
public void run() {
|
||||
for (PlayerData player : PlayerData.getAll())
|
||||
if (player.isOnline() && !player.getPlayer().isDead())
|
||||
SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
for (PlayerData player : PlayerData.getAll())
|
||||
if (player.isOnline() && !player.getPlayer().isDead()) {
|
||||
final PlayerData finalPlayer = player;
|
||||
SchedulerAdapter.runAtEntity(MMOCore.plugin, player.getPlayer(), () -> {
|
||||
for (PlayerResource resource : PlayerResource.values()) {
|
||||
double regenAmount = player.getProfess().getHandler(resource).getRegen(player);
|
||||
double regenAmount = finalPlayer.getProfess().getHandler(resource).getRegen(finalPlayer);
|
||||
if (regenAmount != 0)
|
||||
resource.regen(player, regenAmount);
|
||||
resource.regen(finalPlayer, regenAmount);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 100, 20);
|
||||
});
|
||||
}
|
||||
}, 100, 20);
|
||||
|
||||
/*
|
||||
* For the sake of the lord, make sure they aren't using MMOItems Mana and
|
||||
|
||||
@ -3,6 +3,7 @@ package net.Indyuce.mmocore.api.eco;
|
||||
import io.lumine.mythic.lib.api.util.SmartGive;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import net.Indyuce.mmocore.util.item.CurrencyItemBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -38,7 +39,7 @@ public class Withdraw implements Listener {
|
||||
|
||||
Message.WITHDRAW_START.send(player);
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOCore.plugin);
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, this::close, 20 * 20);
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, this::close, 20 * 20);
|
||||
}
|
||||
|
||||
public void close() {
|
||||
@ -83,7 +84,7 @@ public class Withdraw implements Listener {
|
||||
|
||||
close();
|
||||
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
MMOCore.plugin.economy.getEconomy().withdrawPlayer(player, worth);
|
||||
withdrawAlgorithm(worth);
|
||||
Message.WITHDRAW_SUCCESS.send(player, "worth", worth);
|
||||
|
||||
@ -8,6 +8,7 @@ import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
||||
import io.lumine.mythic.lib.util.Closeable;
|
||||
import io.lumine.mythic.lib.version.Attributes;
|
||||
import io.lumine.mythic.lib.version.VParticle;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.*;
|
||||
import net.Indyuce.mmocore.api.event.unlocking.ItemLockedEvent;
|
||||
@ -58,7 +59,7 @@ import org.bukkit.*;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@ -469,7 +470,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
final boolean wasLocked = unlockedItems.add(unlockable.getUnlockNamespacedKey());
|
||||
if (wasLocked) {
|
||||
unlockable.whenUnlocked(this);
|
||||
Bukkit.getScheduler().runTask(MythicLib.plugin, () -> Bukkit.getPluginManager().callEvent(new ItemUnlockedEvent(this, unlockable.getUnlockNamespacedKey())));
|
||||
SchedulerAdapter.runTask(MythicLib.plugin, () -> Bukkit.getPluginManager().callEvent(new ItemUnlockedEvent(this, unlockable.getUnlockNamespacedKey())));
|
||||
}
|
||||
return wasLocked;
|
||||
}
|
||||
@ -485,7 +486,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
boolean wasUnlocked = unlockedItems.remove(unlockable.getUnlockNamespacedKey());
|
||||
if (wasUnlocked) {
|
||||
unlockable.whenLocked(this);
|
||||
Bukkit.getScheduler().runTask(MythicLib.plugin, () -> Bukkit.getPluginManager().callEvent(new ItemLockedEvent(this, unlockable.getUnlockNamespacedKey())));
|
||||
SchedulerAdapter.runTask(MythicLib.plugin, () -> Bukkit.getPluginManager().callEvent(new ItemLockedEvent(this, unlockable.getUnlockNamespacedKey())));
|
||||
}
|
||||
return wasUnlocked;
|
||||
}
|
||||
@ -859,38 +860,37 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
setLastActivity(PlayerActivity.USE_WAYPOINT);
|
||||
giveStellium(-cost, PlayerResourceUpdateEvent.UpdateReason.USE_WAYPOINT);
|
||||
|
||||
new BukkitRunnable() {
|
||||
final int x = getPlayer().getLocation().getBlockX();
|
||||
final int y = getPlayer().getLocation().getBlockY();
|
||||
final int z = getPlayer().getLocation().getBlockZ();
|
||||
final int warpTime = target.getWarpTime();
|
||||
final boolean hasPerm = getPlayer().hasPermission("mmocore.bypass-waypoint-wait");
|
||||
int t;
|
||||
final int x = getPlayer().getLocation().getBlockX();
|
||||
final int y = getPlayer().getLocation().getBlockY();
|
||||
final int z = getPlayer().getLocation().getBlockZ();
|
||||
final int warpTime = target.getWarpTime();
|
||||
final boolean hasPerm = getPlayer().hasPermission("mmocore.bypass-waypoint-wait");
|
||||
final int[] t = {0};
|
||||
final BukkitTask[] taskHolder = new BukkitTask[1];
|
||||
|
||||
public void run() {
|
||||
if (!isOnline() || getPlayer().getLocation().getBlockX() != x || getPlayer().getLocation().getBlockY() != y || getPlayer().getLocation().getBlockZ() != z) {
|
||||
if (isOnline()) {
|
||||
Message.WAYPOINT_TP_CANCEL.send(getPlayer());
|
||||
}
|
||||
giveStellium(cost, PlayerResourceUpdateEvent.UpdateReason.USE_WAYPOINT);
|
||||
cancel();
|
||||
return;
|
||||
taskHolder[0] = SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
if (!isOnline() || getPlayer().getLocation().getBlockX() != x || getPlayer().getLocation().getBlockY() != y || getPlayer().getLocation().getBlockZ() != z) {
|
||||
if (isOnline()) {
|
||||
Message.WAYPOINT_TP_CANCEL.send(getPlayer());
|
||||
}
|
||||
|
||||
if (hasPerm || t++ >= warpTime) {
|
||||
getPlayer().teleport(target.getLocation());
|
||||
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20, 1, false, false));
|
||||
Message.WAYPOINT_TP_DONE.send(getPlayer(), "waypoint", target.getName());
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
Message.WAYPOINT_TP_CHARGE.send(getPlayer(), "left", String.valueOf((warpTime - t) / 20));
|
||||
final double r = Math.sin((double) t / warpTime * Math.PI);
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI / 4)
|
||||
getPlayer().getLocation().getWorld().spawnParticle(VParticle.REDSTONE.get(), getPlayer().getLocation().add(Math.cos((double) 5 * t / warpTime + j) * r, (double) 2 * t / warpTime, Math.sin((double) 5 * t / warpTime + j) * r), 1, new Particle.DustOptions(Color.PURPLE, 1.25f));
|
||||
giveStellium(cost, PlayerResourceUpdateEvent.UpdateReason.USE_WAYPOINT);
|
||||
if (taskHolder[0] != null) taskHolder[0].cancel();
|
||||
return;
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
|
||||
if (hasPerm || t[0]++ >= warpTime) {
|
||||
getPlayer().teleport(target.getLocation());
|
||||
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20, 1, false, false));
|
||||
Message.WAYPOINT_TP_DONE.send(getPlayer(), "waypoint", target.getName());
|
||||
if (taskHolder[0] != null) taskHolder[0].cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
Message.WAYPOINT_TP_CHARGE.send(getPlayer(), "left", String.valueOf((warpTime - t[0]) / 20));
|
||||
final double r = Math.sin((double) t[0] / warpTime * Math.PI);
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI / 4)
|
||||
getPlayer().getLocation().getWorld().spawnParticle(VParticle.REDSTONE.get(), getPlayer().getLocation().add(Math.cos((double) 5 * t[0] / warpTime + j) * r, (double) 2 * t[0] / warpTime, Math.sin((double) 5 * t[0] / warpTime + j) * r), 1, new Particle.DustOptions(Color.PURPLE, 1.25f));
|
||||
}, 0, 1);
|
||||
}
|
||||
|
||||
public boolean hasReachedMaxLevel() {
|
||||
@ -947,7 +947,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
|
||||
// Experience hologram
|
||||
if (hologramLocation != null)
|
||||
MMOCoreUtils.displayIndicator(hologramLocation, Language.EXP_HOLOGRAM.getFormat().replace("exp", MythicLib.plugin.getMMOConfig().decimal.format(event.getExperience())));
|
||||
MMOCoreUtils.displayIndicator(hologramLocation, Language.EXP_HOLOGRAM.getFormat().replace("{exp}", MythicLib.plugin.getMMOConfig().decimal.format(event.getExperience())));
|
||||
|
||||
experience = Math.max(0, experience + event.getExperience());
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerChangeClassEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.event.EventTriggerHandler;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -20,7 +21,7 @@ public class ClassChosenEventTrigger implements EventTriggerHandler {
|
||||
public void a(PlayerChangeClassEvent event) {
|
||||
PlayerData player = event.getData();
|
||||
if (event.getNewClass().hasEventTriggers("class-chosen")) {
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, () -> {
|
||||
event.getNewClass().getEventTriggers("class-chosen").getTriggers().forEach(trigger -> trigger.apply(player));
|
||||
}, 1);
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.annotation.BackwardsCompatibility;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -20,12 +21,20 @@ public class CommandTrigger extends Trigger {
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
if(!player.isOnline()) return;
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), format(player.getPlayer()));
|
||||
String formattedCommand = format(player.getPlayer());
|
||||
if (SchedulerAdapter.isFolia()) {
|
||||
SchedulerAdapter.runAtEntity(MMOCore.plugin, player.getPlayer(), () -> {
|
||||
player.getPlayer().performCommand(formattedCommand);
|
||||
});
|
||||
} else {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), formattedCommand);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@BackwardsCompatibility(version = "1.12-SNAPSHOT")
|
||||
private String format(Player player) {
|
||||
// TODO remove use of confusing non-PAPI %player% placeholder
|
||||
return MMOCore.plugin.placeholderParser.parse(player, command.replace("%player%", player.getName()));
|
||||
return MMOCore.plugin.placeholderParser.parse(player, command.replace("%player%", player.getName()).replace("%player_name%", player.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import io.lumine.mythic.lib.version.Attributes;
|
||||
import io.lumine.mythic.lib.version.VEnchantment;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.Icon;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -118,7 +119,7 @@ public class MMOCoreUtils {
|
||||
*/
|
||||
public static void displayIndicator(Location loc, String message) {
|
||||
Hologram holo = Hologram.create(loc, MythicLib.plugin.parseColors(Collections.singletonList(message)));
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, holo::despawn, 20);
|
||||
SchedulerAdapter.runAtLocationLater(MMOCore.plugin, loc, holo::despawn, 20);
|
||||
}
|
||||
|
||||
public static boolean isPlayerHead(Material material) {
|
||||
|
||||
@ -2,6 +2,7 @@ package net.Indyuce.mmocore.api.util.input;
|
||||
|
||||
import io.lumine.mythic.lib.gui.editable.GeneratedInventory;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -53,11 +54,10 @@ public class ChatInput extends PlayerInput {
|
||||
event.setCancelled(true);
|
||||
|
||||
if (event.getMessage().equals("cancel")) {
|
||||
if (lastOpened != null) Bukkit.getScheduler().runTask(MMOCore.plugin, lastOpened::open);
|
||||
if (lastOpened != null) SchedulerAdapter.runTask(MMOCore.plugin, lastOpened::open);
|
||||
inputType.cancelMessage.send(getPlayer());
|
||||
} else
|
||||
// Run sync
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> output(event.getMessage()));
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> output(event.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -26,7 +27,7 @@ public class KillMythicFactionExperienceSource extends SpecificExperienceSource<
|
||||
return new ExperienceSourceManager<KillMythicFactionExperienceSource>() {
|
||||
@EventHandler
|
||||
public void a(MythicMobDeathEvent event) {
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, () -> {
|
||||
if (!event.getEntity().isDead()) return;
|
||||
if (!event.getMob().hasFaction()) return;
|
||||
if (!(event.getKiller() instanceof Player) || event.getKiller().hasMetadata("NPC")) return;
|
||||
|
||||
@ -8,6 +8,7 @@ import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -27,7 +28,7 @@ public class KillMythicMobExperienceSource extends SpecificExperienceSource<Stri
|
||||
return new ExperienceSourceManager<KillMythicMobExperienceSource>() {
|
||||
@EventHandler
|
||||
public void a(MythicMobDeathEvent event) {
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, () -> {
|
||||
if (!event.getEntity().isDead()) return;
|
||||
if (!(event.getKiller() instanceof Player) || event.getKiller().hasMetadata("NPC")) return;
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.ExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@ -57,7 +58,7 @@ public class BrewPotionExperienceSource extends ExperienceSource<PotionMeta> {
|
||||
|
||||
final ItemStack found = findPotion(event.getContents());
|
||||
if (found != null)
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
ItemStack brewn = findPotion(event.getContents());
|
||||
if (brewn == null)
|
||||
return;
|
||||
|
||||
@ -6,6 +6,7 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
@ -67,7 +68,7 @@ public class CraftItemExperienceSource extends SpecificExperienceSource<Material
|
||||
final int itemsCraftedPerRecipe = event.getInventory().getResult().getAmount();
|
||||
final Material resultType = event.getInventory().getResult().getType();
|
||||
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
|
||||
// First check
|
||||
int newAmount = getAmount(event.getInventory().getMatrix()[index]);
|
||||
|
||||
@ -9,6 +9,7 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -66,8 +67,7 @@ public class DamageTakenExperienceSource extends SpecificExperienceSource<Entity
|
||||
return Math.min(eventDamage, maxHealth);
|
||||
});
|
||||
|
||||
// Wait 2 tick to check if the player died
|
||||
new BukkitRunnable() {
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (DamageTakenExperienceSource source : getSources())
|
||||
@ -76,7 +76,7 @@ public class DamageTakenExperienceSource extends SpecificExperienceSource<Entity
|
||||
source.giveExperience(playerData, effectiveDamage.get(), null);
|
||||
}
|
||||
}
|
||||
}.runTaskLater(MMOCore.plugin, 2);
|
||||
}, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource;
|
||||
import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -67,21 +68,16 @@ public class PlayExperienceSource extends SpecificExperienceSource {
|
||||
private static class Manager extends ExperienceSourceManager<PlayExperienceSource> {
|
||||
|
||||
public Manager() {
|
||||
new BukkitRunnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||
if (UtilityMethods.isRealPlayer(player)) {
|
||||
PlayerData playerData = PlayerData.get(player);
|
||||
for (PlayExperienceSource source : getSources())
|
||||
if (source.matchesParameter(playerData, null))
|
||||
source. giveExperience(playerData, 1, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}.runTaskTimer(MMOCore.plugin, 0, 20);
|
||||
SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||
if (UtilityMethods.isRealPlayer(player)) {
|
||||
PlayerData playerData = PlayerData.get(player);
|
||||
for (PlayExperienceSource source : getSources())
|
||||
if (source.matchesParameter(playerData, null))
|
||||
source. giveExperience(playerData, 1, null);
|
||||
}
|
||||
});
|
||||
}, 0, 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import io.lumine.mythic.lib.gui.PluginInventory;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import net.Indyuce.mmocore.util.item.SimpleItemBuilder;
|
||||
import net.milkbowl.vault.economy.EconomyResponse;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -92,7 +93,7 @@ public class DepositMenu extends PluginInventory {
|
||||
updateDeposit(inv);
|
||||
}
|
||||
};
|
||||
updateRunnable.runTaskLater(MMOCore.plugin, 10);
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, updateRunnable, 10);
|
||||
}
|
||||
|
||||
private void updateDeposit(Inventory inv) {
|
||||
|
||||
@ -14,13 +14,14 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Guild implements AbstractGuild {
|
||||
private final Map<UUID, Long> invites = new HashMap<>();
|
||||
private final Map<UUID, Long> invites = new ConcurrentHashMap<>();
|
||||
private final String guildId, guildName, guildTag;
|
||||
|
||||
private final Set<UUID> members = new HashSet<>();
|
||||
private final Set<UUID> members = ConcurrentHashMap.newKeySet();
|
||||
|
||||
/**
|
||||
* Owner changes when the old owner leaves guild
|
||||
|
||||
@ -3,6 +3,7 @@ package net.Indyuce.mmocore.loot.chest;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.HashableLocation;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@ -44,7 +45,7 @@ public class LootChest {
|
||||
expire(null);
|
||||
}
|
||||
};
|
||||
closeRunnable.runTaskLater(MMOCore.plugin, MMOCore.plugin.configManager.lootChestExpireTime);
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, closeRunnable, MMOCore.plugin.configManager.lootChestExpireTime);
|
||||
}
|
||||
|
||||
public ChestTier getTier() {
|
||||
|
||||
@ -6,6 +6,7 @@ import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.loot.LootBuilder;
|
||||
import net.Indyuce.mmocore.loot.RandomWeightedRoll;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@ -17,6 +18,7 @@ import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class LootChestRegion {
|
||||
@ -25,7 +27,7 @@ public class LootChestRegion {
|
||||
private final long chestSpawnPeriod;
|
||||
private final RegionBounds bounds;
|
||||
private final ChestAlgorithmOptions algOptions;
|
||||
private final Set<ChestTier> tiers = new LinkedHashSet<>();
|
||||
private final Set<ChestTier> tiers = ConcurrentHashMap.newKeySet();
|
||||
private final BukkitRunnable runnable = new BukkitRunnable() {
|
||||
|
||||
@Override
|
||||
@ -57,8 +59,7 @@ public class LootChestRegion {
|
||||
|
||||
Validate.isTrue(!tiers.isEmpty(), "Your region must have at least one chest tier");
|
||||
|
||||
// Run timer
|
||||
runnable.runTaskTimer(MMOCore.plugin, chestSpawnPeriod * 20, chestSpawnPeriod * 20);
|
||||
SchedulerAdapter.runTaskTimer(MMOCore.plugin, runnable, chestSpawnPeriod * 20, chestSpawnPeriod * 20);
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
|
||||
@ -2,6 +2,7 @@ package net.Indyuce.mmocore.loot.chest;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.loot.chest.particle.ChestParticleEffect;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
@ -30,7 +31,7 @@ public class TierEffect {
|
||||
type.play(loc, particle);
|
||||
}
|
||||
};
|
||||
runnable.runTaskTimer(MMOCore.plugin, 0, period);
|
||||
SchedulerAdapter.runTaskTimer(MMOCore.plugin, runnable, 0, period);
|
||||
return runnable;
|
||||
}
|
||||
}
|
||||
@ -1,51 +1,46 @@
|
||||
package net.Indyuce.mmocore.loot.chest.particle;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public enum ChestParticleEffect {
|
||||
|
||||
HELIX((loc, particle) -> {
|
||||
new BukkitRunnable() {
|
||||
double ti = 0;
|
||||
|
||||
public void run() {
|
||||
if ((ti += Math.PI / 16) > Math.PI * 2)
|
||||
cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone().add(Math.cos(j + ti / 2), -.5 + ti / Math.PI / 2, Math.sin(j + ti / 2)), 0);
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
final double[] ti = {0};
|
||||
final BukkitTask[] task = new BukkitTask[1];
|
||||
task[0] = SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
if ((ti[0] += Math.PI / 16) > Math.PI * 2)
|
||||
if (task[0] != null) task[0].cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone().add(Math.cos(j + ti[0] / 2), -.5 + ti[0] / Math.PI / 2, Math.sin(j + ti[0] / 2)), 0);
|
||||
}, 0, 1);
|
||||
}),
|
||||
|
||||
OFFSET((loc, particle) -> {
|
||||
new BukkitRunnable() {
|
||||
int ti = 0;
|
||||
|
||||
public void run() {
|
||||
if (ti++ > 20)
|
||||
cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone(), 1, .5, .5, .5, 0);
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
final int[] ti = {0};
|
||||
final BukkitTask[] task = new BukkitTask[1];
|
||||
task[0] = SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
if (ti[0]++ > 20)
|
||||
if (task[0] != null) task[0].cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone(), 1, .5, .5, .5, 0);
|
||||
}, 0, 1);
|
||||
}),
|
||||
|
||||
GALAXY((loc, particle) -> {
|
||||
new BukkitRunnable() {
|
||||
double ti = 0;
|
||||
|
||||
public void run() {
|
||||
if ((ti += Math.PI / 16) > Math.PI * 2)
|
||||
cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone().add(0, -.1, 0), 0, Math.cos(j + ti / 2), 0, Math.sin(j + ti / 2), .13);
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
final double[] ti = {0};
|
||||
final BukkitTask[] task = new BukkitTask[1];
|
||||
task[0] = SchedulerAdapter.runTaskTimer(MMOCore.plugin, () -> {
|
||||
if ((ti[0] += Math.PI / 16) > Math.PI * 2)
|
||||
if (task[0] != null) task[0].cancel();
|
||||
for (double j = 0; j < Math.PI * 2; j += Math.PI * 2 / 5)
|
||||
loc.getWorld().spawnParticle(particle, loc.clone().add(0, -.1, 0), 0, Math.cos(j + ti[0] / 2), 0, Math.sin(j + ti[0] / 2), .13);
|
||||
}, 0, 1);
|
||||
});
|
||||
|
||||
private final BiConsumer<Location, Particle> func;
|
||||
|
||||
@ -2,22 +2,23 @@ package net.Indyuce.mmocore.loot.chest.particle;
|
||||
|
||||
import io.lumine.mythic.lib.version.VParticle;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ParabolicProjectile extends BukkitRunnable {
|
||||
public class ParabolicProjectile implements Runnable {
|
||||
private final Location target;
|
||||
private final Consumer<Location> display;
|
||||
private final Vector vec;
|
||||
private final Runnable end;
|
||||
private final int speed;
|
||||
private BukkitTask task;
|
||||
|
||||
// calculation
|
||||
private final Location loc;
|
||||
private int j;
|
||||
|
||||
@ -60,7 +61,7 @@ public class ParabolicProjectile extends BukkitRunnable {
|
||||
this.vec = vec;
|
||||
this.speed = Math.max(1, speed);
|
||||
|
||||
runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this, 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -68,7 +69,7 @@ public class ParabolicProjectile extends BukkitRunnable {
|
||||
for (int k = 0; k < speed; k++) {
|
||||
if (j++ > 100 || loc.distanceSquared(target) < .8) {
|
||||
end.run();
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
}
|
||||
|
||||
double c = Math.min(1, (double) j / 40);
|
||||
|
||||
@ -2,15 +2,17 @@ package net.Indyuce.mmocore.loot.chest.particle;
|
||||
|
||||
import io.lumine.mythic.lib.version.VParticle;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class PotionParticles extends BukkitRunnable {
|
||||
public class PotionParticles implements Runnable {
|
||||
private double r, g, b;
|
||||
private final ThrownPotion potion;
|
||||
private boolean valid = true;
|
||||
private BukkitTask task;
|
||||
|
||||
public PotionParticles(ThrownPotion potion) {
|
||||
this.potion = potion;
|
||||
@ -29,7 +31,7 @@ public class PotionParticles extends BukkitRunnable {
|
||||
|
||||
public void start() {
|
||||
if (valid)
|
||||
runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this, 0, 1);
|
||||
}
|
||||
|
||||
private double ratio(int l) {
|
||||
@ -39,7 +41,7 @@ public class PotionParticles extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
if (potion == null || potion.isDead()) {
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1,15 +1,17 @@
|
||||
package net.Indyuce.mmocore.loot.chest.particle;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class SmallParticleEffect extends BukkitRunnable {
|
||||
public class SmallParticleEffect implements Runnable {
|
||||
private final Location loc;
|
||||
private final Particle particle;
|
||||
private final double r;
|
||||
private BukkitTask task;
|
||||
|
||||
private double t;
|
||||
|
||||
@ -22,12 +24,12 @@ public class SmallParticleEffect extends BukkitRunnable {
|
||||
this.particle = particle;
|
||||
this.r = r;
|
||||
|
||||
runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this, 0, 1);
|
||||
}
|
||||
|
||||
public void run() {
|
||||
if (t > Math.PI * 2)
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
|
||||
for (int k = 0; k < 3; k++) {
|
||||
t += Math.PI / 10;
|
||||
|
||||
@ -7,14 +7,15 @@ import io.lumine.mythic.lib.message.actionbar.ActionBarPriority;
|
||||
import io.lumine.mythic.lib.version.Attributes;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
// TODO extends Manager and not bukkit runnable for clarity.
|
||||
public class ActionBarManager extends BukkitRunnable {
|
||||
public class ActionBarManager {
|
||||
private int updateTicks;
|
||||
private String barFormat;
|
||||
private boolean enabled, scheduled;
|
||||
private BukkitTask task;
|
||||
|
||||
public void reload(ConfigurationSection config) {
|
||||
enabled = config.getBoolean("enabled", false);
|
||||
@ -22,15 +23,14 @@ public class ActionBarManager extends BukkitRunnable {
|
||||
barFormat = config.getString("format", "<No Action Bar Format Found>");
|
||||
|
||||
if (!scheduled && enabled) {
|
||||
runTaskTimer(MMOCore.plugin, 0, updateTicks);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this::run, 0, updateTicks);
|
||||
scheduled = true;
|
||||
} else if (scheduled && !enabled) {
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
scheduled = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (var player : PlayerData.getAll()) {
|
||||
|
||||
|
||||
@ -3,18 +3,19 @@ package net.Indyuce.mmocore.manager;
|
||||
import io.lumine.mythic.lib.util.FileUtils;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.loot.droptable.DropTable;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class DropTableManager implements MMOCoreManager {
|
||||
private final Map<String, DropTable> map = new HashMap<>();
|
||||
private final Map<String, DropTable> map = new ConcurrentHashMap<>();
|
||||
|
||||
public void register(DropTable table) {
|
||||
map.put(table.getId(), table);
|
||||
@ -52,7 +53,7 @@ public class DropTableManager implements MMOCoreManager {
|
||||
|
||||
if (obj instanceof ConfigurationSection) {
|
||||
DropTable table = new DropTable((ConfigurationSection) obj);
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, table.getPostLoadAction()::performAction);
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, table.getPostLoadAction()::performAction);
|
||||
return table;
|
||||
}
|
||||
|
||||
@ -68,6 +69,6 @@ public class DropTableManager implements MMOCoreManager {
|
||||
register(new DropTable(config));
|
||||
}, "Could not load drop table '%s' from file '%s': %s");
|
||||
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> map.values().forEach(table -> table.getPostLoadAction().performAction()));
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> map.values().forEach(table -> table.getPostLoadAction().performAction()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,6 @@ import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.data.SynchronizedDataManager;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.comp.profile.MMOCoreProfileDataModule;
|
||||
import net.Indyuce.mmocore.manager.data.yaml.YAMLPlayerDataHandler;
|
||||
import net.Indyuce.mmocore.player.DefaultPlayerData;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
@ -23,7 +22,7 @@ public class PlayerDataManager extends SynchronizedDataManager<PlayerData, Offli
|
||||
|
||||
@Override
|
||||
public Object newProfileDataModule() {
|
||||
return new MMOCoreProfileDataModule();
|
||||
return null;
|
||||
}
|
||||
|
||||
public DefaultPlayerData getDefaultData() {
|
||||
|
||||
@ -10,6 +10,7 @@ import net.Indyuce.mmocore.api.block.VanillaBlockType;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.loot.chest.condition.Condition;
|
||||
import net.Indyuce.mmocore.loot.chest.condition.ConditionInstance;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
@ -19,6 +20,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@ -28,24 +31,24 @@ public class CustomBlockManager extends SpecificProfessionManager {
|
||||
/**
|
||||
* Registered block infos
|
||||
*/
|
||||
private final Map<BlockType, BlockInfo> map = new HashMap<>();
|
||||
private final Map<BlockType, BlockInfo> map = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* Blocks that are regenerating and that must be refreshed whenever the
|
||||
* server reloads or shuts down not to hurt the world map
|
||||
*/
|
||||
private final Set<BlockInfo.RegeneratingBlock> active = new HashSet<>();
|
||||
private final Set<BlockInfo.RegeneratingBlock> active = ConcurrentHashMap.newKeySet();
|
||||
|
||||
/**
|
||||
* Stores conditions which must be met to apply custom mining
|
||||
*/
|
||||
private final List<Condition> customMineConditions = new ArrayList<>();
|
||||
private final List<Condition> customMineConditions = new CopyOnWriteArrayList<>();
|
||||
|
||||
/**
|
||||
* List of functions which let MMOCore recognize what block a player is
|
||||
* currently breaking
|
||||
*/
|
||||
private final List<Function<Block, Optional<BlockType>>> blockTypes = new ArrayList<>();
|
||||
private final List<Function<Block, Optional<BlockType>>> blockTypes = new CopyOnWriteArrayList<>();
|
||||
|
||||
private boolean enabled, protectVanillaBlocks, enableToolRestrictions;
|
||||
|
||||
@ -98,7 +101,7 @@ public class CustomBlockManager extends SpecificProfessionManager {
|
||||
public void initialize(BlockInfo.RegeneratingBlock info, boolean scheduleRegen) {
|
||||
if (scheduleRegen) {
|
||||
active.add(info);
|
||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> regen(info, false), info.getRegeneratingBlock().getRegenerationInfo().getTime());
|
||||
SchedulerAdapter.runTaskLater(MMOCore.plugin, () -> regen(info, false), info.getRegeneratingBlock().getRegenerationInfo().getTime());
|
||||
}
|
||||
|
||||
if (info.getRegeneratingBlock().getRegenerationInfo().hasTemporaryBlock())
|
||||
|
||||
@ -4,13 +4,13 @@ import net.Indyuce.mmocore.experience.Booster;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BoosterManager {
|
||||
private final List<Booster> map = new ArrayList<>();
|
||||
private final List<Booster> map = new CopyOnWriteArrayList<>();
|
||||
|
||||
/**
|
||||
* If MMOCore can find a booster with the same profession and value, the two
|
||||
|
||||
@ -9,12 +9,12 @@ import net.Indyuce.mmocore.party.AbstractParty;
|
||||
import net.Indyuce.mmocore.party.PartyUtils;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class PartyManager implements MMOCoreManager {
|
||||
private final Set<StatModifier> buffs = new HashSet<>();
|
||||
private final Set<StatModifier> buffs = ConcurrentHashMap.newKeySet();
|
||||
|
||||
public Set<StatModifier> getBonuses() {
|
||||
return buffs;
|
||||
|
||||
@ -4,14 +4,16 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.manager.MMOCoreManager;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class RequestManager implements MMOCoreManager {
|
||||
private final Map<UUID, Request> requests = new HashMap<>();
|
||||
private final Map<UUID, Request> requests = new ConcurrentHashMap<>();
|
||||
|
||||
private boolean ENABLED;
|
||||
|
||||
@ -24,7 +26,7 @@ public class RequestManager implements MMOCoreManager {
|
||||
@Override
|
||||
public void initialize(boolean clearBefore) {
|
||||
if (!ENABLED) {
|
||||
Bukkit.getScheduler().runTaskTimer(MMOCore.plugin, this::flushRequests, 60 * 20, 60 * 20 * 5);
|
||||
SchedulerAdapter.runTaskTimer(MMOCore.plugin, this::flushRequests, 60 * 20, 60 * 20 * 5);
|
||||
ENABLED = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.party.AbstractParty;
|
||||
import net.Indyuce.mmocore.party.PartyModule;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -68,8 +69,7 @@ public class MMOCorePartyModule implements PartyModule, Listener {
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
// Running it in a delayed task is recommended
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
var rawMessage = event.getMessage().substring(MMOCore.plugin.configManager.partyChatPrefix.length());
|
||||
var message = Message.PARTY_CHAT.prepare("player", data.getPlayer().getName(), "message", rawMessage);
|
||||
var called = new PartyChatEvent(party, data, message.getRawContent());
|
||||
|
||||
@ -15,11 +15,13 @@ import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Party implements AbstractParty {
|
||||
private final List<PlayerData> members = new ArrayList<>();
|
||||
private final Map<UUID, Long> invites = new HashMap<>();
|
||||
private final List<PlayerData> members = new CopyOnWriteArrayList<>();
|
||||
private final Map<UUID, Long> invites = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* Used for {@link #equals(Object)}
|
||||
|
||||
@ -5,6 +5,7 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerCombatEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.PvpModeCommand;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
@ -45,7 +46,7 @@ public class CombatHandler implements Closeable {
|
||||
|
||||
@NotNull
|
||||
private BukkitTask newTask() {
|
||||
return Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> quit(false), MMOCore.plugin.configManager.combatLogTimer);
|
||||
return SchedulerAdapter.runTaskLater(MMOCore.plugin, () -> quit(false), MMOCore.plugin.configManager.combatLogTimer);
|
||||
}
|
||||
|
||||
public boolean isInPvpMode() {
|
||||
@ -103,8 +104,8 @@ public class CombatHandler implements Closeable {
|
||||
* @param cancelTask Should the running task be canceled.
|
||||
*/
|
||||
private void quit(boolean cancelTask) {
|
||||
Validate.isTrue(isInCombat(), "Player not in combat");
|
||||
if (cancelTask) task.cancel();
|
||||
if (!isInCombat()) return;
|
||||
if (cancelTask && task != null) task.cancel();
|
||||
task = null;
|
||||
|
||||
if (player.isOnline()) {
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package net.Indyuce.mmocore.quest;
|
||||
|
||||
import net.Indyuce.mmocore.quest.compat.BeautyQuestModule;
|
||||
import net.Indyuce.mmocore.quest.compat.BlackVeinQuestsModule;
|
||||
import net.Indyuce.mmocore.quest.compat.QuestCreatorModule;
|
||||
import net.Indyuce.mmocore.quest.compat.QuestModule;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -10,7 +9,6 @@ import javax.inject.Provider;
|
||||
|
||||
public enum QuestModuleType {
|
||||
MMOCORE("MMOCore", MMOCoreQuestModule::new),
|
||||
QUESTS("Quests", BlackVeinQuestsModule::new),
|
||||
BEAUTY_QUEST("BeautyQuests", BeautyQuestModule::new),
|
||||
QUEST_CREATOR("QuestCreator", QuestCreatorModule::new);
|
||||
|
||||
|
||||
@ -4,26 +4,24 @@ import io.lumine.mythic.lib.UtilityMethods;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.skill.binding.BoundSkillInfo;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class SkillCastingInstance extends BukkitRunnable implements Listener {
|
||||
public abstract class SkillCastingInstance implements Listener, Runnable {
|
||||
protected final PlayerData caster;
|
||||
private final SkillCastingHandler handler;
|
||||
private BukkitTask task;
|
||||
|
||||
private static final int RUNNABLE_PERIOD = 10;
|
||||
|
||||
/**
|
||||
* This variable temporarily stores the active skills that the player
|
||||
* can try to cast.
|
||||
*/
|
||||
private List<BoundSkillInfo> activeSkills;
|
||||
private boolean open = true;
|
||||
private int j, sinceLastActivity;
|
||||
@ -32,7 +30,7 @@ public abstract class SkillCastingInstance extends BukkitRunnable implements Lis
|
||||
this.handler = handler;
|
||||
this.caster = caster;
|
||||
|
||||
runTaskTimer(MMOCore.plugin, 0, 1);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this, 0, 1);
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOCore.plugin);
|
||||
}
|
||||
|
||||
@ -45,11 +43,9 @@ public abstract class SkillCastingInstance extends BukkitRunnable implements Lis
|
||||
|
||||
open = false;
|
||||
|
||||
// Unregister listeners
|
||||
HandlerList.unregisterAll(this);
|
||||
|
||||
// Cancel runnable
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
}
|
||||
|
||||
public void refreshTimeOut() {
|
||||
|
||||
@ -16,6 +16,7 @@ import io.lumine.mythic.lib.util.annotation.BackwardsCompatibility;
|
||||
import io.lumine.mythic.lib.version.VParticle;
|
||||
import net.Indyuce.mmocore.api.event.PlayerResourceUpdateEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
@ -23,7 +24,7 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class Ambers extends SkillHandler<SimpleSkillResult> implements Listener {
|
||||
@ -65,10 +66,11 @@ public class Ambers extends SkillHandler<SimpleSkillResult> implements Listener
|
||||
passive.getTriggeredSkill().cast(new TriggerMetadata(event, TriggerType.API));
|
||||
}
|
||||
|
||||
class Amber extends BukkitRunnable {
|
||||
class Amber implements Runnable {
|
||||
private final Location loc;
|
||||
private final MMOPlayerData data;
|
||||
private final double percent;
|
||||
private BukkitTask task;
|
||||
|
||||
private int j;
|
||||
|
||||
@ -80,13 +82,13 @@ public class Ambers extends SkillHandler<SimpleSkillResult> implements Listener
|
||||
this.percent = percent / 100;
|
||||
|
||||
final Amber amber = this;
|
||||
new ParabolicProjectile(source, loc, VParticle.REDSTONE.get(), () -> amber.runTaskTimer(MythicLib.plugin, 0, 3), 1, Color.ORANGE, 1.3f);
|
||||
new ParabolicProjectile(source, loc, VParticle.REDSTONE.get(), () -> { task = SchedulerAdapter.runTaskTimer(MythicLib.plugin, amber, 0, 3); }, 1, Color.ORANGE, 1.3f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (j++ > 66 || !data.isOnline() || !data.getPlayer().getWorld().equals(loc.getWorld())) {
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -99,7 +101,7 @@ public class Ambers extends SkillHandler<SimpleSkillResult> implements Listener
|
||||
double missingMana = data.getStatMap().getStat("MAX_MANA") - playerData.getMana();
|
||||
playerData.giveMana(missingMana * percent, PlayerResourceUpdateEvent.UpdateReason.SKILL_REGENERATION);
|
||||
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,101 @@
|
||||
package net.Indyuce.mmocore.util;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class SchedulerAdapter {
|
||||
|
||||
private static final boolean IS_FOLIA;
|
||||
|
||||
static {
|
||||
boolean folia;
|
||||
try {
|
||||
Class.forName("io.papermc.paper.threadedregions.scheduler.RegionScheduler");
|
||||
folia = true;
|
||||
} catch (ClassNotFoundException e) {
|
||||
folia = false;
|
||||
}
|
||||
IS_FOLIA = folia;
|
||||
}
|
||||
|
||||
public static boolean isFolia() {
|
||||
return IS_FOLIA;
|
||||
}
|
||||
|
||||
public static BukkitTask runTask(Plugin plugin, Runnable task) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getGlobalRegionScheduler().execute(plugin, task);
|
||||
return null;
|
||||
}
|
||||
return Bukkit.getScheduler().runTask(plugin, task);
|
||||
}
|
||||
|
||||
public static BukkitTask runTaskLater(Plugin plugin, Runnable task, long delay) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> task.run(), delay);
|
||||
return null;
|
||||
}
|
||||
return Bukkit.getScheduler().runTaskLater(plugin, task, delay);
|
||||
}
|
||||
|
||||
public static BukkitTask runTaskTimer(Plugin plugin, Runnable task, long delay, long period) {
|
||||
if (IS_FOLIA) {
|
||||
long foliaDelay = delay <= 0 ? 1 : delay;
|
||||
Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> task.run(), foliaDelay, period);
|
||||
return null;
|
||||
}
|
||||
return Bukkit.getScheduler().runTaskTimer(plugin, task, delay, period);
|
||||
}
|
||||
|
||||
public static BukkitTask runTaskAsynchronously(Plugin plugin, Runnable task) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask -> task.run());
|
||||
return null;
|
||||
}
|
||||
return Bukkit.getScheduler().runTaskAsynchronously(plugin, task);
|
||||
}
|
||||
|
||||
public static void runAtLocation(Plugin plugin, Location location, Runnable task) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getRegionScheduler().execute(plugin, location, task);
|
||||
} else {
|
||||
Bukkit.getScheduler().runTask(plugin, task);
|
||||
}
|
||||
}
|
||||
|
||||
public static void runAtLocationLater(Plugin plugin, Location location, Runnable task, long delay) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getRegionScheduler().runDelayed(plugin, location, scheduledTask -> task.run(), delay);
|
||||
} else {
|
||||
Bukkit.getScheduler().runTaskLater(plugin, task, delay);
|
||||
}
|
||||
}
|
||||
|
||||
public static void runAtEntity(Plugin plugin, Entity entity, Runnable task) {
|
||||
if (IS_FOLIA) {
|
||||
entity.getScheduler().execute(plugin, task, null, 0L);
|
||||
} else {
|
||||
Bukkit.getScheduler().runTask(plugin, task);
|
||||
}
|
||||
}
|
||||
|
||||
public static void runAtEntityLater(Plugin plugin, Entity entity, Runnable task, long delay) {
|
||||
if (IS_FOLIA) {
|
||||
entity.getScheduler().execute(plugin, task, null, delay);
|
||||
} else {
|
||||
Bukkit.getScheduler().runTaskLater(plugin, task, delay);
|
||||
}
|
||||
}
|
||||
|
||||
public static void cancelTasks(Plugin plugin) {
|
||||
if (IS_FOLIA) {
|
||||
Bukkit.getGlobalRegionScheduler().cancelTasks(plugin);
|
||||
Bukkit.getAsyncScheduler().cancelTasks(plugin);
|
||||
} else {
|
||||
Bukkit.getScheduler().cancelTasks(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,7 @@ import net.Indyuce.mmocore.experience.source.MineBlockExperienceSource;
|
||||
import net.Indyuce.mmocore.loot.LootBuilder;
|
||||
import net.Indyuce.mmocore.loot.chest.condition.ConditionInstance;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
@ -133,7 +134,7 @@ public class BlockListener implements Listener {
|
||||
* Finally enable block regen.
|
||||
*/
|
||||
if (info.hasRegen())
|
||||
Bukkit.getScheduler().runTaskLater(MythicLib.plugin, () -> MMOCore.plugin.mineManager.initialize(info.startRegeneration(Bukkit.createBlockData(savedData), block.getLocation()), !temporaryBlock), 1);
|
||||
SchedulerAdapter.runTaskLater(MythicLib.plugin, () -> MMOCore.plugin.mineManager.initialize(info.startRegeneration(Bukkit.createBlockData(savedData), block.getLocation()), !temporaryBlock), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -5,6 +5,7 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerChangeClassEvent;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent;
|
||||
import net.Indyuce.mmocore.script.trigger.MMOCoreTriggerType;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -21,8 +22,7 @@ public class ClassScriptListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onClassChange(PlayerChangeClassEvent event) {
|
||||
|
||||
// With delay
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
final MMOPlayerData caster = event.getData().getMMOPlayerData();
|
||||
caster.triggerSkills(MMOCoreTriggerType.CLASS_CHOSEN, null);
|
||||
});
|
||||
@ -31,8 +31,7 @@ public class ClassScriptListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onLevelUp(PlayerLevelUpEvent event) {
|
||||
|
||||
// With delay
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
final MMOPlayerData caster = event.getData().getMMOPlayerData();
|
||||
caster.triggerSkills(MMOCoreTriggerType.LEVEL_UP, null);
|
||||
});
|
||||
|
||||
@ -4,6 +4,7 @@ import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.social.GuildChatEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -22,8 +23,7 @@ public class GuildListener implements Listener {
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
// Run it sync
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> {
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> {
|
||||
var rawMessage = event.getMessage().substring(MMOCore.plugin.nativeGuildManager.getConfig().getPrefix().length());
|
||||
var message = Message.GUILD_CHAT.prepare("player", data.getPlayer().getName(), "tag", data.getGuild().getTag(), "message", rawMessage);
|
||||
GuildChatEvent called = new GuildChatEvent(data, message.getRawContent());
|
||||
|
||||
@ -2,6 +2,7 @@ package net.Indyuce.mmocore.listener.option;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -29,7 +30,7 @@ public class VanillaExperienceOverride implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void cancelChange(PlayerRespawnEvent event) {
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> PlayerData.get(event.getPlayer()).refreshVanillaExp());
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> PlayerData.get(event.getPlayer()).refreshVanillaExp());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,6 +43,6 @@ public class VanillaExperienceOverride implements Listener {
|
||||
@EventHandler
|
||||
public void cancelChange(EnchantItemEvent event) {
|
||||
Player player = event.getEnchanter();
|
||||
Bukkit.getScheduler().runTask(MMOCore.plugin, () -> player.setLevel(PlayerData.get(player).getLevel()));
|
||||
SchedulerAdapter.runTask(MMOCore.plugin, () -> player.setLevel(PlayerData.get(player).getLevel()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import net.Indyuce.mmocore.loot.LootBuilder;
|
||||
import net.Indyuce.mmocore.loot.fishing.FishingDropItem;
|
||||
import net.Indyuce.mmocore.manager.profession.FishingManager.FishingDropTable;
|
||||
import net.Indyuce.mmocore.util.Language;
|
||||
import net.Indyuce.mmocore.util.SchedulerAdapter;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.FishHook;
|
||||
import org.bukkit.entity.Item;
|
||||
@ -23,7 +24,7 @@ import org.bukkit.event.player.PlayerFishEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent.State;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.HashSet;
|
||||
@ -55,7 +56,8 @@ public class FishingListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public class FishingData extends BukkitRunnable implements Listener {
|
||||
public class FishingData implements Listener, Runnable {
|
||||
private BukkitTask task;
|
||||
private final Location location;
|
||||
private final FishingDropItem caught;
|
||||
private final PlayerData playerData;
|
||||
@ -85,7 +87,7 @@ public class FishingListener implements Listener {
|
||||
this.experienceDropped = caught.rollExperience();
|
||||
this.vanillaExpDropped = caught.rollVanillaExp();
|
||||
fishing.add(player.getUniqueId());
|
||||
runTaskTimer(MMOCore.plugin, 0, 2);
|
||||
task = SchedulerAdapter.runTaskTimer(MMOCore.plugin, this, 0, 2);
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOCore.plugin);
|
||||
|
||||
// Check for instant loot
|
||||
@ -122,7 +124,7 @@ public class FishingListener implements Listener {
|
||||
hook.remove();
|
||||
|
||||
HandlerList.unregisterAll(this);
|
||||
cancel();
|
||||
if (task != null) task.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -7,6 +7,7 @@ loadbefore: [ MMOItems,MythicDungeons ]
|
||||
depend: [ MythicLib ]
|
||||
softdepend: [ Vault,MythicMobs,MMOProfiles,PlaceholderAPI,Residence,Citizens,ProtocolLib,OBTeam ]
|
||||
api-version: 1.14
|
||||
folia-supported: true
|
||||
website: www.phoenixdevt.fr
|
||||
commands:
|
||||
mmocore:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user