mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-11-18 06:24:17 +01:00
New ML cooldown API
This commit is contained in:
parent
7cabb2398a
commit
c03b91a21b
@ -119,7 +119,7 @@
|
||||
<dependency>
|
||||
<groupId>io.papermc.paper</groupId>
|
||||
<artifactId>paper-api</artifactId>
|
||||
<version>1.20.6-R0.1-SNAPSHOT</version>
|
||||
<version>1.21.1-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
package net.Indyuce.mmocore.api.player;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
|
||||
import javax.inject.Provider;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Used by MMOCore when it has to store the last time a player
|
||||
* did some action. This also features a time out function which
|
||||
* can be used for cooldowns.
|
||||
*
|
||||
* @deprecated Merge with {@link io.lumine.mythic.lib.player.cooldown.CooldownMap}
|
||||
*/
|
||||
public enum PlayerActivity {
|
||||
USE_WAYPOINT(() -> 5 * 1000L),
|
||||
|
||||
FRIEND_REQUEST(() -> 1000 * 60 * 2L),
|
||||
|
||||
ACTION_BAR_MESSAGE(() -> MMOCore.plugin.actionBarManager.getTimeOut() * 50),
|
||||
|
||||
LOOT_CHEST_SPAWN(() -> MMOCore.plugin.configManager.lootChestPlayerCooldown),
|
||||
|
||||
CAST_SKILL(() -> MMOCore.plugin.configManager.globalSkillCooldown),
|
||||
|
||||
;
|
||||
|
||||
private final Provider<Long> timeout;
|
||||
|
||||
PlayerActivity(Provider<Long> timeout) {
|
||||
this.timeout = timeout;
|
||||
}
|
||||
|
||||
public long getTimeOut() {
|
||||
return Objects.requireNonNull(timeout, "Time out not supported").get();
|
||||
}
|
||||
}
|
||||
@ -39,6 +39,7 @@ import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import net.Indyuce.mmocore.party.provided.Party;
|
||||
import net.Indyuce.mmocore.player.ClassDataContainer;
|
||||
import net.Indyuce.mmocore.player.CombatHandler;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.player.Unlockable;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
@ -106,7 +107,6 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
private final PlayerProfessions collectSkills = new PlayerProfessions(this);
|
||||
private final PlayerAttributes attributes = new PlayerAttributes(this);
|
||||
private final Map<String, SavedClassInformation> classSlots = new HashMap<>();
|
||||
private final Map<PlayerActivity, Long> lastActivity = new HashMap<>();
|
||||
private final CombatHandler combat = new CombatHandler(this);
|
||||
|
||||
/**
|
||||
@ -142,9 +142,10 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
*/
|
||||
private final Map<String, Integer> tableItemClaims = new HashMap<>();
|
||||
|
||||
// NON-FINAL player data stuff made public to facilitate field change
|
||||
// NON-FINAL player data stuff made public to facilitate field access
|
||||
public boolean noCooldown;
|
||||
public long lastDropEvent;
|
||||
//public List<FriendRequest> activeFriendRequests = new ArrayList<>();
|
||||
|
||||
public PlayerData(MMOPlayerData mmoData) {
|
||||
super(MMOCore.plugin, mmoData);
|
||||
@ -446,7 +447,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
|
||||
/**
|
||||
* @return If the item is unlocked by the player
|
||||
* This is used for skills that can be locked & unlocked.
|
||||
* This is used for skills that can be locked & unlocked.
|
||||
*/
|
||||
public boolean hasUnlocked(Unlockable unlockable) {
|
||||
return unlockable.isUnlockedByDefault() || unlockedItems.contains(unlockable.getUnlockNamespacedKey());
|
||||
@ -534,22 +535,6 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
return questData;
|
||||
}
|
||||
|
||||
public long getLastActivity(PlayerActivity activity) {
|
||||
return this.lastActivity.getOrDefault(activity, 0l);
|
||||
}
|
||||
|
||||
public long getActivityTimeOut(PlayerActivity activity) {
|
||||
return Math.max(0, getLastActivity(activity) + activity.getTimeOut() - System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public void setLastActivity(PlayerActivity activity) {
|
||||
setLastActivity(activity, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public void setLastActivity(PlayerActivity activity, long timestamp) {
|
||||
this.lastActivity.put(activity, timestamp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastLogin() {
|
||||
return getMMOPlayerData().getLastLogActivity();
|
||||
@ -625,7 +610,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
/**
|
||||
* @param key The identifier of an exp table item.
|
||||
* @return Amount of times an item has been claimed
|
||||
* inside an experience table.
|
||||
* inside an experience table.
|
||||
*/
|
||||
public int getClaims(@NotNull String key) {
|
||||
return tableItemClaims.getOrDefault(key, 0);
|
||||
@ -829,7 +814,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
public void sendFriendRequest(PlayerData target) {
|
||||
if (!isOnline() || !target.isOnline()) return;
|
||||
|
||||
setLastActivity(PlayerActivity.FRIEND_REQUEST);
|
||||
getCooldownMap().applyCooldown(CooldownType.FRIEND_REQUEST);
|
||||
FriendRequest request = new FriendRequest(this, target);
|
||||
ConfigMessage.fromKey("friend-request").addPlaceholders("player", getPlayer().getName(), "uuid", request.getUniqueId().toString()).send(target.getPlayer());
|
||||
MMOCore.plugin.requestManager.registerRequest(request);
|
||||
@ -848,7 +833,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
* spamming waypoints. There is no need to reset it when resetting the
|
||||
* player waypoints data
|
||||
*/
|
||||
setLastActivity(PlayerActivity.USE_WAYPOINT);
|
||||
getCooldownMap().applyCooldown(CooldownType.USE_WAYPOINT);
|
||||
giveStellium(-cost, PlayerResourceUpdateEvent.UpdateReason.USE_WAYPOINT);
|
||||
|
||||
new BukkitRunnable() {
|
||||
@ -1128,7 +1113,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
|
||||
/**
|
||||
* @return If the PlayerEnterCastingModeEvent successfully put the player
|
||||
* into casting mode, otherwise if the event is cancelled, returns false.
|
||||
* into casting mode, otherwise if the event is cancelled, returns false.
|
||||
*/
|
||||
public boolean setSkillCasting() {
|
||||
Validate.isTrue(!isCasting(), "Player already in casting mode");
|
||||
@ -1147,7 +1132,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
|
||||
/**
|
||||
* @return If player successfully left skill casting i.e the Bukkit
|
||||
* event has not been cancelled
|
||||
* event has not been cancelled
|
||||
*/
|
||||
public boolean leaveSkillCasting() {
|
||||
return leaveSkillCasting(false);
|
||||
@ -1156,7 +1141,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
/**
|
||||
* @param skipEvent Skip firing the exit event
|
||||
* @return If player successfully left skill casting i.e the Bukkit
|
||||
* event has not been cancelled
|
||||
* event has not been cancelled
|
||||
*/
|
||||
public boolean leaveSkillCasting(boolean skipEvent) {
|
||||
Validate.isTrue(isCasting(), "Player not in casting mode");
|
||||
@ -1169,7 +1154,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
|
||||
skillCasting.close();
|
||||
this.skillCasting = null;
|
||||
setLastActivity(PlayerActivity.ACTION_BAR_MESSAGE, 0); // Reset action bar
|
||||
getCooldownMap().resetCooldown(CooldownType.ACTION_BAR_MESSAGE); // Reset action bar
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1182,7 +1167,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
// TODO add an option to disable action-bar properly in all casting modes
|
||||
if (ChatColor.stripColor(message).isEmpty()) return;
|
||||
|
||||
setLastActivity(PlayerActivity.ACTION_BAR_MESSAGE);
|
||||
getCooldownMap().applyCooldown(CooldownType.ACTION_BAR_MESSAGE);
|
||||
if (raw) MythicLib.plugin.getVersion().getWrapper().sendActionBarRaw(getPlayer(), message);
|
||||
else getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
|
||||
}
|
||||
@ -1358,7 +1343,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
* checks if they could potentially upgrade to one of these
|
||||
*
|
||||
* @return If the player can change its current class to
|
||||
* a subclass
|
||||
* a subclass
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean canChooseSubclass() {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package net.Indyuce.mmocore.api.player.social;
|
||||
|
||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
@ -17,7 +17,7 @@ public class FriendRequest extends Request {
|
||||
|
||||
@Override
|
||||
public void whenAccepted() {
|
||||
getCreator().setLastActivity(PlayerActivity.FRIEND_REQUEST, 0);
|
||||
getCreator().getCooldownMap().resetCooldown(CooldownType.FRIEND_REQUEST);
|
||||
getCreator().addFriend(getTarget().getUniqueId());
|
||||
getTarget().addFriend(getCreator().getUniqueId());
|
||||
if (getCreator().isOnline()) {
|
||||
|
||||
@ -1,29 +1,33 @@
|
||||
package net.Indyuce.mmocore.api.util.math.format;
|
||||
|
||||
public class DelayFormat {
|
||||
private int display;
|
||||
private int display;
|
||||
|
||||
private static final long[] millisArray = {31557081600L, 2629756800L, 86400000L, 3600000L, 60000L, 1000L};
|
||||
private static final String[] charArray = { "y", "M", "d", "h", "m", "s" };
|
||||
private static final long[] millisArray = {31557081600L, 2629756800L, 86400000L, 3600000L, 60000L, 1000L};
|
||||
private static final String[] charArray = {"y", "M", "d", "h", "m", "s"};
|
||||
|
||||
public DelayFormat() {
|
||||
this(charArray.length);
|
||||
}
|
||||
public DelayFormat() {
|
||||
this(charArray.length);
|
||||
}
|
||||
|
||||
public DelayFormat(int display) {
|
||||
this.display = Math.min(display, charArray.length);
|
||||
}
|
||||
public DelayFormat(int display) {
|
||||
this.display = Math.min(display, charArray.length);
|
||||
}
|
||||
|
||||
public String format(long ms) {
|
||||
StringBuilder format = new StringBuilder();
|
||||
public String format(double ms) {
|
||||
return format(1000L * (long) ms);
|
||||
}
|
||||
|
||||
for (int j = 0; j < charArray.length && display > 0; j++)
|
||||
if (ms > millisArray[j]) {
|
||||
format.append(ms / millisArray[j]).append(charArray[j]).append(" ");
|
||||
ms = ms % millisArray[j];
|
||||
display--;
|
||||
}
|
||||
public String format(long ms) {
|
||||
StringBuilder format = new StringBuilder();
|
||||
|
||||
return format.toString().equals("") ? "Now!" : format.substring(0, format.length() - 1);
|
||||
}
|
||||
for (int j = 0; j < charArray.length && display > 0; j++)
|
||||
if (ms > millisArray[j]) {
|
||||
format.append(ms / millisArray[j]).append(charArray[j]).append(" ");
|
||||
ms = ms % millisArray[j];
|
||||
display--;
|
||||
}
|
||||
|
||||
return format.toString().equals("") ? "Now!" : format.substring(0, format.length() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,42 +2,41 @@ package net.Indyuce.mmocore.command.rpg.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class HideActionBarCommandTreeNode extends CommandTreeNode {
|
||||
public HideActionBarCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "hideab");
|
||||
public HideActionBarCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "hideab");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(Parameter.AMOUNT);
|
||||
}
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(Parameter.AMOUNT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
Player player = Bukkit.getPlayer(args[2]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[2] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
Player player = Bukkit.getPlayer(args[2]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[2] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
int amount;
|
||||
try {
|
||||
amount = Integer.parseInt(args[3]);
|
||||
} catch (Exception e) {
|
||||
sender.sendMessage(ChatColor.RED + args[3] + " is not a valid number.");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
int amount;
|
||||
try {
|
||||
amount = Integer.parseInt(args[3]);
|
||||
} catch (Exception e) {
|
||||
sender.sendMessage(ChatColor.RED + args[3] + " is not a valid number.");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
final long lastUsed = System.currentTimeMillis() - PlayerActivity.ACTION_BAR_MESSAGE.getTimeOut() + amount * 50;
|
||||
PlayerData.get(player).setLastActivity(PlayerActivity.ACTION_BAR_MESSAGE, lastUsed);
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
PlayerData.get(player).getCooldownMap().applyCooldown(CooldownType.ACTION_BAR_MESSAGE, (double) amount / 20d);
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ package net.Indyuce.mmocore.gui;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.gui.api.EditableInventory;
|
||||
@ -269,8 +269,7 @@ public class WaypointViewer extends EditableInventory {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerData.getActivityTimeOut(PlayerActivity.USE_WAYPOINT) > 0)
|
||||
return;
|
||||
if (playerData.getCooldownMap().isOnCooldown(CooldownType.USE_WAYPOINT)) return;
|
||||
|
||||
player.closeInventory();
|
||||
playerData.warp(waypoint, withdraw);
|
||||
|
||||
@ -2,7 +2,7 @@ package net.Indyuce.mmocore.gui.social.friend;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.api.util.input.ChatInput;
|
||||
@ -201,7 +201,7 @@ public class EditableFriendList extends EditableInventory {
|
||||
|
||||
if (item.getFunction().equals("request")) {
|
||||
|
||||
long remaining = playerData.getActivityTimeOut(PlayerActivity.FRIEND_REQUEST);
|
||||
double remaining = playerData.getCooldownMap().getCooldown(CooldownType.FRIEND_REQUEST);
|
||||
if (remaining > 0) {
|
||||
ConfigMessage.fromKey("friend-request-cooldown", "cooldown", new DelayFormat().format(remaining))
|
||||
.send(player);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package net.Indyuce.mmocore.loot.chest;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.loot.RandomWeightedRoll;
|
||||
import net.Indyuce.mmocore.api.event.LootChestSpawnEvent;
|
||||
@ -30,7 +30,7 @@ public class LootChestRegion {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
getBounds().getPlayers().filter(player -> player.getActivityTimeOut(PlayerActivity.LOOT_CHEST_SPAWN) == 0)
|
||||
getBounds().getPlayers().filter(player -> !player.getCooldownMap().isOnCooldown(CooldownType.LOOT_CHEST_SPAWN))
|
||||
.findAny().ifPresent(player -> spawnChest(player));
|
||||
}
|
||||
};
|
||||
@ -84,7 +84,7 @@ public class LootChestRegion {
|
||||
public void spawnChest(PlayerData player) {
|
||||
|
||||
// Apply chest cooldown
|
||||
player.setLastActivity(PlayerActivity.LOOT_CHEST_SPAWN);
|
||||
player.getCooldownMap().applyCooldown(CooldownType.LOOT_CHEST_SPAWN);
|
||||
|
||||
// First randomly determine the chest tier
|
||||
ChestTier tier = rollTier(player);
|
||||
@ -121,7 +121,7 @@ public class LootChestRegion {
|
||||
/**
|
||||
* @param player Player rolling the tier
|
||||
* @return A randomly picked tiers taking into account tier spawn rates
|
||||
* and the player Chance attribute
|
||||
* and the player Chance attribute
|
||||
*/
|
||||
@NotNull
|
||||
public ChestTier rollTier(PlayerData player) {
|
||||
|
||||
@ -3,7 +3,7 @@ package net.Indyuce.mmocore.manager;
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.manager.StatManager;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.gui.api.item.Placeholders;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
@ -19,7 +19,7 @@ public class ActionBarManager extends BukkitRunnable {
|
||||
|
||||
public void reload(ConfigurationSection config) {
|
||||
enabled = config.getBoolean("enabled", false);
|
||||
timeOut = config.getInt("time-out", 60);
|
||||
timeOut = config.getInt("time-out", 60) * 50;
|
||||
updateTicks = config.getInt("ticks-to-update", 5);
|
||||
barFormat = config.getString("format", "<No Action Bar Format Found>");
|
||||
|
||||
@ -39,7 +39,10 @@ public class ActionBarManager extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
for (PlayerData data : PlayerData.getAll())
|
||||
if (data.isOnline() && !data.getPlayer().isDead() && !data.isCasting() && data.getActivityTimeOut(PlayerActivity.ACTION_BAR_MESSAGE) == 0) {
|
||||
if (data.isOnline()
|
||||
&& !data.getPlayer().isDead()
|
||||
&& !data.isCasting()
|
||||
&& !data.getCooldownMap().isOnCooldown(CooldownType.ACTION_BAR_MESSAGE)) {
|
||||
Placeholders holders = getActionBarPlaceholders(data);
|
||||
data.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(
|
||||
holders.apply(data.getPlayer(), data.getProfess().hasActionBar() ? data.getProfess().getActionBar() : barFormat)));
|
||||
|
||||
@ -25,14 +25,17 @@ import java.util.logging.Level;
|
||||
public class ConfigManager {
|
||||
public final CommandVerbose commandVerbose = new CommandVerbose();
|
||||
|
||||
public boolean overrideVanillaExp, canCreativeCast, passiveSkillsNeedBinding, cobbleGeneratorXP, saveDefaultClassInfo, splitMainExp, splitProfessionExp, disableQuestBossBar,
|
||||
pvpModeEnabled, pvpModeInvulnerabilityCanDamage, forceClassSelection, enableGlobalSkillTreeGUI, enableSpecificSkillTreeGUI, waypointAutoPathCalculation, waypointLinkReciprocity;
|
||||
public boolean overrideVanillaExp, canCreativeCast, passiveSkillsNeedBinding, cobbleGeneratorXP, saveDefaultClassInfo,
|
||||
splitMainExp, splitProfessionExp, disableQuestBossBar, pvpModeEnabled, pvpModeInvulnerabilityCanDamage,
|
||||
forceClassSelection, enableGlobalSkillTreeGUI, enableSpecificSkillTreeGUI, waypointAutoPathCalculation, waypointLinkReciprocity;
|
||||
public String partyChatPrefix, noSkillBoundPlaceholder;
|
||||
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
||||
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
||||
public double lootChestsChanceWeight, dropItemsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange, pvpModeToggleOnCooldown, pvpModeToggleOffCooldown, pvpModeCombatCooldown,
|
||||
pvpModeCombatTimeout, pvpModeInvulnerabilityTimeRegionChange, pvpModeInvulnerabilityTimeCommand, pvpModeRegionEnterCooldown, pvpModeRegionLeaveCooldown;
|
||||
public int maxPartyLevelDifference, maxPartyPlayers, minCombatLevel, maxCombatLevelDifference, skillTreeScrollStepX, skillTreeScrollStepY, waypointWarpTime;
|
||||
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown, waypointUseCooldown, friendRequestTimeout;
|
||||
public double lootChestsChanceWeight, dropItemsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange, pvpModeToggleOnCooldown,
|
||||
pvpModeToggleOffCooldown, pvpModeCombatCooldown, pvpModeCombatTimeout, pvpModeInvulnerabilityTimeRegionChange,
|
||||
pvpModeInvulnerabilityTimeCommand, pvpModeRegionEnterCooldown, pvpModeRegionLeaveCooldown;
|
||||
public int maxPartyLevelDifference, maxPartyPlayers, minCombatLevel, maxCombatLevelDifference, skillTreeScrollStepX, skillTreeScrollStepY,
|
||||
waypointWarpTime, maxfriendRequests;
|
||||
public final List<EntityDamageEvent.DamageCause> combatLogDamageCauses = new ArrayList<>();
|
||||
|
||||
private final FileConfiguration messages;
|
||||
@ -153,6 +156,9 @@ public class ConfigManager {
|
||||
waypointWarpTime = MMOCore.plugin.getConfig().getInt("waypoints.default-warp-time");
|
||||
waypointAutoPathCalculation = MMOCore.plugin.getConfig().getBoolean("waypoints.auto_path_calculation");
|
||||
waypointLinkReciprocity = MMOCore.plugin.getConfig().getBoolean("waypoints.link_reciprocity");
|
||||
waypointUseCooldown = MMOCore.plugin.getConfig().getLong("waypoints.use_cooldown") * 50;
|
||||
friendRequestTimeout = MMOCore.plugin.getConfig().getLong("friends.requests.time_out") * 1000;
|
||||
maxfriendRequests = MMOCore.plugin.getConfig().getInt("friends.requests.max_simultaneously");
|
||||
|
||||
// Combat
|
||||
pvpModeEnabled = config.getBoolean("pvp_mode.enabled");
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
package net.Indyuce.mmocore.player;
|
||||
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownProvider;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.inject.Provider;
|
||||
|
||||
/**
|
||||
* Used by MMOCore when it has to store the last time a player
|
||||
* did some action. This also features a timeout function which
|
||||
* can be used for cooldowns.
|
||||
*/
|
||||
public enum CooldownType implements CooldownProvider {
|
||||
USE_WAYPOINT(() -> MMOCore.plugin.configManager.waypointUseCooldown),
|
||||
|
||||
FRIEND_REQUEST(() -> MMOCore.plugin.configManager.friendRequestTimeout),
|
||||
|
||||
ACTION_BAR_MESSAGE(() -> MMOCore.plugin.actionBarManager.getTimeOut()),
|
||||
|
||||
LOOT_CHEST_SPAWN(() -> MMOCore.plugin.configManager.lootChestPlayerCooldown),
|
||||
|
||||
CAST_SKILL(() -> MMOCore.plugin.configManager.globalSkillCooldown),
|
||||
|
||||
;
|
||||
|
||||
private final Provider<Long> timeout;
|
||||
private final NamespacedKey nsk;
|
||||
|
||||
CooldownType(@NotNull Provider<Long> timeout) {
|
||||
this.timeout = timeout;
|
||||
this.nsk = new NamespacedKey(MMOCore.plugin, name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamespacedKey getCooldownKey() {
|
||||
return nsk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCooldown() {
|
||||
return timeout.get();
|
||||
}
|
||||
}
|
||||
@ -6,9 +6,8 @@ import io.lumine.mythic.lib.player.cooldown.CooldownInfo;
|
||||
import io.lumine.mythic.lib.skill.Skill;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||
import net.Indyuce.mmocore.api.player.PlayerActivity;
|
||||
import net.Indyuce.mmocore.player.CooldownType;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.event.PlayerResourceUpdateEvent;
|
||||
|
||||
@ -54,7 +53,7 @@ public class CastableSkill extends Skill {
|
||||
}
|
||||
|
||||
// Global cooldown check
|
||||
if (!getTrigger().isPassive() && playerData.getActivityTimeOut(PlayerActivity.CAST_SKILL) > 0)
|
||||
if (!getTrigger().isPassive() && playerData.getCooldownMap().isOnCooldown(CooldownType.CAST_SKILL))
|
||||
return false;
|
||||
|
||||
// Cooldown check
|
||||
@ -103,7 +102,7 @@ public class CastableSkill extends Skill {
|
||||
}
|
||||
|
||||
if (!getTrigger().isPassive())
|
||||
casterData.setLastActivity(PlayerActivity.CAST_SKILL);
|
||||
casterData.getCooldownMap().applyCooldown(CooldownType.CAST_SKILL);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package net.Indyuce.mmocore.skill;
|
||||
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownObject;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownReference;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierSource;
|
||||
import io.lumine.mythic.lib.player.skill.PassiveSkill;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
@ -11,12 +11,13 @@ import net.Indyuce.mmocore.api.util.math.formula.LinearValue;
|
||||
import net.Indyuce.mmocore.gui.api.item.Placeholders;
|
||||
import net.Indyuce.mmocore.player.Unlockable;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class ClassSkill implements CooldownObject, Unlockable {
|
||||
public class ClassSkill implements CooldownReference, Unlockable {
|
||||
private final RegisteredSkill skill;
|
||||
private final int unlockLevel, maxSkillLevel;
|
||||
private final boolean unlockedByDefault, permanent, upgradable;
|
||||
@ -206,7 +207,7 @@ public class ClassSkill implements CooldownObject, Unlockable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCooldownPath() {
|
||||
return "skill_" + skill.getHandler().getId();
|
||||
public NamespacedKey getCooldownKey() {
|
||||
return skill.getHandler().getCooldownKey();
|
||||
}
|
||||
}
|
||||
@ -26,13 +26,14 @@ import java.util.Objects;
|
||||
|
||||
public class SkillBar extends SkillCastingHandler {
|
||||
private final PlayerKey mainKey;
|
||||
private final boolean disableSneak;
|
||||
private final boolean disableSneak, useLowestSlots;
|
||||
|
||||
public SkillBar(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
mainKey = PlayerKey.valueOf(UtilityMethods.enumName(Objects.requireNonNull(config.getString("open"), "Could not find open key")));
|
||||
disableSneak = config.getBoolean("disable-sneak");
|
||||
useLowestSlots = config.getBoolean("use-lowest-indices");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -79,6 +79,15 @@ party-plugin: mmocore
|
||||
# - ultimate_clans
|
||||
guild-plugin: mmocore
|
||||
|
||||
friends:
|
||||
|
||||
requests:
|
||||
# Maximum number of requests sent simultaneously
|
||||
# Not implemented yet
|
||||
max_simultaneously: 3
|
||||
# Time during which the friend request is valid in seconds
|
||||
time_out: 120
|
||||
|
||||
# MythicLib introduces a CHANCE stat that is used in
|
||||
# several different systems in MMOCore. By changing these
|
||||
# weights you can define how much the Chance stat impacts
|
||||
@ -100,12 +109,13 @@ skill-tree-scroll-step-y: 1
|
||||
# provide the player with experience points or not
|
||||
should-cobblestone-generators-give-exp: false
|
||||
|
||||
# Edit how to cast skills here. This part of the config is
|
||||
# pretty tricky so it's best to read the wiki page before editing anything
|
||||
# Edit how to cast skills here. To customize skill casting,
|
||||
# please refer to the "Skill Casting" wiki page.
|
||||
skill-casting:
|
||||
mode: SKILL_BAR
|
||||
open: SWAP_HANDS
|
||||
disable-sneak: false
|
||||
use-lowest-indices: true
|
||||
|
||||
loot-chests:
|
||||
|
||||
@ -274,6 +284,9 @@ waypoints:
|
||||
# takes to use the waypoint and teleport to target location.
|
||||
default-warp-time: 100
|
||||
|
||||
# Cooldown for using two consecutive waypoints, in ticks
|
||||
use_cooldown: 120
|
||||
|
||||
link_reciprocity: false
|
||||
|
||||
# By default, MMOCore runs path calculation to enable players
|
||||
|
||||
Loading…
Reference in New Issue
Block a user