mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-11-18 06:24:17 +01:00
Merge branch 'profileswitch'
# Conflicts: # MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/skilltree/SkillTreeViewer.java
This commit is contained in:
commit
9dd82e8aec
@ -113,6 +113,16 @@
|
||||
|
||||
</repositories>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>24.1.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- Paper API -->
|
||||
@ -132,14 +142,15 @@
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.6</version>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>26.0.2-1</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- Extra libs -->
|
||||
|
||||
<dependency>
|
||||
<groupId>io.papermc</groupId>
|
||||
<artifactId>paperlib</artifactId>
|
||||
@ -175,7 +186,7 @@
|
||||
<dependency>
|
||||
<groupId>fr.phoenixdevt</groupId>
|
||||
<artifactId>Profile-API</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<version>1.1.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
@ -183,7 +194,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>
|
||||
@ -362,7 +373,8 @@
|
||||
<dependency>
|
||||
<groupId>me.glaremasters</groupId>
|
||||
<artifactId>Guilds</artifactId>
|
||||
<version>3.5.6.0</version>
|
||||
<version>3.5.7.1</version>
|
||||
<classifier>stripped</classifier>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
@ -2,16 +2,17 @@ package net.Indyuce.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.data.sql.SQLDataSource;
|
||||
import io.lumine.mythic.lib.data.SynchronizedDataManager;
|
||||
import io.lumine.mythic.lib.metrics.bukkit.Metrics;
|
||||
import io.lumine.mythic.lib.module.MMOPlugin;
|
||||
import io.lumine.mythic.lib.player.modifier.PlayerModifier;
|
||||
import io.lumine.mythic.lib.util.MMOPlugin;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import io.lumine.mythic.lib.version.SpigotPlugin;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.attribute.AttributeModifier;
|
||||
import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource;
|
||||
import net.Indyuce.mmocore.command.MMOCoreCommandTreeRoot;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.command.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.MMOCoreCommandTreeRoot;
|
||||
import net.Indyuce.mmocore.comp.citizens.CitizenInteractEventListener;
|
||||
import net.Indyuce.mmocore.comp.citizens.CitizensMMOLoader;
|
||||
import net.Indyuce.mmocore.comp.mythicmobs.MythicHook;
|
||||
@ -37,7 +38,8 @@ import net.Indyuce.mmocore.manager.data.DataProvider;
|
||||
import net.Indyuce.mmocore.manager.data.GuildDataManager;
|
||||
import net.Indyuce.mmocore.manager.data.LegacyDataProvider;
|
||||
import net.Indyuce.mmocore.manager.data.PlayerDataManager;
|
||||
import net.Indyuce.mmocore.manager.data.sql.SQLDataHandler;
|
||||
import net.Indyuce.mmocore.manager.data.sql.SQLDatabaseImpl;
|
||||
import net.Indyuce.mmocore.manager.data.yaml.YAMLDatabaseImpl;
|
||||
import net.Indyuce.mmocore.manager.profession.*;
|
||||
import net.Indyuce.mmocore.manager.social.BoosterManager;
|
||||
import net.Indyuce.mmocore.manager.social.PartyManager;
|
||||
@ -52,7 +54,6 @@ import net.Indyuce.mmocore.script.mechanic.StaminaMechanic;
|
||||
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 org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -151,10 +152,7 @@ public class MMOCore extends MMOPlugin {
|
||||
getLogger().warning("(Your config version: '" + configVersion + "' | Expected config version: '" + defConfigVersion + "')");
|
||||
}
|
||||
|
||||
if (getConfig().isConfigurationSection("mysql") && getConfig().getBoolean("mysql.enabled")) {
|
||||
final SQLDataSource dataSource = new SQLDataSource(this);
|
||||
playerDataManager.setDataHandler(new SQLDataHandler(dataSource));
|
||||
}
|
||||
playerDataManager.setupDatabase(SQLDatabaseImpl::new, YAMLDatabaseImpl::new);
|
||||
|
||||
if (getConfig().isConfigurationSection("default-playerdata"))
|
||||
playerDataManager.loadDefaultData(getConfig().getConfigurationSection("default-playerdata"));
|
||||
@ -192,9 +190,8 @@ public class MMOCore extends MMOPlugin {
|
||||
for (PlayerData player : PlayerData.getAll())
|
||||
if (player.isOnline() && !player.getPlayer().isDead())
|
||||
for (PlayerResource resource : PlayerResource.values()) {
|
||||
double regenAmount = player.getProfess().getHandler(resource).getRegen(player);
|
||||
if (regenAmount != 0)
|
||||
resource.regen(player, regenAmount);
|
||||
final var regenAmount = player.getProfess().getHandler(resource).getRegen(player);
|
||||
if (regenAmount != 0) resource.regen(player, regenAmount);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(MMOCore.plugin, 100, 20);
|
||||
@ -263,7 +260,7 @@ public class MMOCore extends MMOPlugin {
|
||||
nativeGuildManager.load();
|
||||
|
||||
// Toggleable Commands
|
||||
ToggleableCommand.register();
|
||||
ToggleableCommand.loadCommands();
|
||||
|
||||
// Register MMOCore command what soever
|
||||
MMOCoreCommandTreeRoot mmoCoreCommand = new MMOCoreCommandTreeRoot();
|
||||
@ -348,4 +345,9 @@ public class MMOCore extends MMOPlugin {
|
||||
public boolean hasEconomy() {
|
||||
return economy != null && economy.isValid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull SynchronizedDataManager<?, ?> getRawPlayerDataManager() {
|
||||
return this.playerDataManager;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
package net.Indyuce.mmocore.api;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.message.actionbar.ActionBarPriority;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -162,7 +163,7 @@ public class ConfigMessage {
|
||||
|
||||
// Handle special case with player data + action bar
|
||||
if (playerData != null && playerData.isOnline() && actionbar) {
|
||||
playerData.displayActionBar(rawMessage, raw);
|
||||
playerData.getMMOPlayerData().getActionBar().show(ActionBarPriority.NORMAL, rawMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -6,6 +6,7 @@ import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.result.SkillResult;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerMetadata;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.guild.GuildModule;
|
||||
@ -14,7 +15,6 @@ import net.Indyuce.mmocore.party.PartyModule;
|
||||
import net.Indyuce.mmocore.skill.CastableSkill;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
@ -4,11 +4,11 @@ import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.api.condition.type.BlockCondition;
|
||||
import io.lumine.mythic.lib.api.condition.type.MMOCondition;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
|
||||
import net.Indyuce.mmocore.loot.LootBuilder;
|
||||
import net.Indyuce.mmocore.loot.droptable.DropTable;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
@ -0,0 +1,86 @@
|
||||
package net.Indyuce.mmocore.api.block;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.data.MultipleFacing;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class MushroomBlockType implements BlockType {
|
||||
private final Set<BlockFace> faces;
|
||||
private final Material type;
|
||||
|
||||
public MushroomBlockType(MMOLineConfig config) {
|
||||
config.validateKeys("faces", "type");
|
||||
|
||||
this.type = UtilityMethods.prettyValueOf(Material::valueOf, config.getString("type"), "No material with ID %s");
|
||||
var split = config.getString("faces").split("\\,");
|
||||
faces = new HashSet<>();
|
||||
for (int j = 0; j < split.length; j++)
|
||||
faces.add(UtilityMethods.prettyValueOf(BlockFace::valueOf, split[j], "No block face with ID %s"));
|
||||
}
|
||||
|
||||
public MushroomBlockType(@NotNull Block block) {
|
||||
final var state = (MultipleFacing) block.getBlockData();
|
||||
this.type = block.getType();
|
||||
this.faces = state.getAllowedFaces();
|
||||
}
|
||||
|
||||
public Set<BlockFace> getFaces() {
|
||||
return faces;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean breakRestrictions(@NotNull Block block) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(RegeneratingBlock block) {
|
||||
Location loc = block.getLocation();
|
||||
block.getLocation().getBlock().setType(type);
|
||||
|
||||
var state = (MultipleFacing) loc.getBlock().getBlockData();
|
||||
for (var face : faces) state.setFace(face, true);
|
||||
loc.getBlock().setBlockData(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void regenerate(RegeneratingBlock block) {
|
||||
Location loc = block.getLocation();
|
||||
loc.getBlock().setType(type);
|
||||
// Sets the original blocks old data (only when regenerating)
|
||||
loc.getBlock().setBlockData(block.getBlockData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String display() {
|
||||
return "Mushroom{type=" + type.name() + ", faces=[" + this.faces.stream().map(BlockFace::name).reduce((a, b) -> a + ", " + b).orElse("") + "]}";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return display();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (this == object) return true;
|
||||
if (object == null || getClass() != object.getClass()) return false;
|
||||
MushroomBlockType that = (MushroomBlockType) object;
|
||||
return Objects.equals(faces, that.faces) && type == that.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(faces, type);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
package net.Indyuce.mmocore.api.block;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
|
||||
import org.bukkit.Instrument;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Note;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.type.NoteBlock;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class NoteBlockType implements BlockType {
|
||||
private final Instrument instrument;
|
||||
private final Note note;
|
||||
|
||||
public NoteBlockType(MMOLineConfig config) {
|
||||
config.validateKeys("note");
|
||||
|
||||
instrument = config.contains("instrument")
|
||||
? UtilityMethods.prettyValueOf(Instrument::valueOf, config.getString("instrument"), "No instrument with ID '%s'")
|
||||
: Instrument.PIANO;
|
||||
note = new Note(config.getInt("note"));
|
||||
}
|
||||
|
||||
public NoteBlockType(@NotNull Block block) {
|
||||
final var state = (NoteBlock) block.getBlockData();
|
||||
this.instrument = state.getInstrument();
|
||||
this.note = state.getNote();
|
||||
}
|
||||
|
||||
public Instrument getInstrument() {
|
||||
return instrument;
|
||||
}
|
||||
|
||||
public Note getNote() {
|
||||
return note;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean breakRestrictions(@NotNull Block block) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void place(RegeneratingBlock block) {
|
||||
Location loc = block.getLocation();
|
||||
block.getLocation().getBlock().setType(Material.NOTE_BLOCK);
|
||||
|
||||
NoteBlock state = (NoteBlock) loc.getBlock().getBlockData();
|
||||
state.setInstrument(instrument);
|
||||
state.setNote(note);
|
||||
loc.getBlock().setBlockData(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void regenerate(RegeneratingBlock block) {
|
||||
Location loc = block.getLocation();
|
||||
loc.getBlock().setType(Material.NOTE_BLOCK);
|
||||
// Sets the original blocks old data (only when regenerating)
|
||||
loc.getBlock().setBlockData(block.getBlockData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String display() {
|
||||
return "NoteBlock{instrument=" + instrument.name() + ", note=" + note.getId() + "}";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (this == object) return true;
|
||||
if (object == null || getClass() != object.getClass()) return false;
|
||||
NoteBlockType that = (NoteBlockType) object;
|
||||
return instrument == that.instrument && Objects.equals(note, that.note);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(instrument, note);
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,8 @@
|
||||
package net.Indyuce.mmocore.api.block;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
public class RegenInfo {
|
||||
|
||||
@ -7,6 +7,7 @@ import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -49,7 +50,7 @@ public class SkullBlockType implements BlockType {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String display() {
|
||||
public @NotNull String display() {
|
||||
return "Skull{" + value + "}";
|
||||
}
|
||||
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
package net.Indyuce.mmocore.api.block;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.Ageable;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -23,7 +25,7 @@ public class VanillaBlockType implements BlockType {
|
||||
public VanillaBlockType(MMOLineConfig config) {
|
||||
config.validate("type");
|
||||
|
||||
type = Material.valueOf(config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_"));
|
||||
type = UtilityMethods.prettyValueOf(Material::valueOf, config.getString("type"), "No material with ID %s");
|
||||
age = config.getInt("age", 0);
|
||||
|
||||
Validate.isTrue(age >= 0 && age < 8, "Age must be between 0 and 7");
|
||||
@ -43,8 +45,8 @@ public class VanillaBlockType implements BlockType {
|
||||
Location loc = block.getLocation();
|
||||
block.getLocation().getBlock().setType(type);
|
||||
|
||||
BlockData state = block.getLocation().getBlock().getBlockData();
|
||||
if (age > 0 && state instanceof Ageable) {
|
||||
BlockData state;
|
||||
if (age > 0 && (state = block.getLocation().getBlock().getBlockData()) instanceof Ageable) {
|
||||
((Ageable) state).setAge(age);
|
||||
loc.getBlock().setBlockData(state);
|
||||
}
|
||||
@ -59,7 +61,7 @@ public class VanillaBlockType implements BlockType {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String display() {
|
||||
public @NotNull String display() {
|
||||
return "Vanilla{" + type.name() + "}";
|
||||
}
|
||||
|
||||
|
||||
@ -1,45 +1,50 @@
|
||||
package net.Indyuce.mmocore.api.event;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* @deprecated Use Bukkit event instead
|
||||
*/
|
||||
@Deprecated
|
||||
// TODO move to MythicLib
|
||||
public class MMOCommandEvent extends PlayerDataEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private boolean cancelled;
|
||||
|
||||
private final String command;
|
||||
private final String command;
|
||||
|
||||
public MMOCommandEvent(PlayerData player, String command) {
|
||||
super(player);
|
||||
@Deprecated
|
||||
public MMOCommandEvent(PlayerData player, String command) {
|
||||
super(player);
|
||||
|
||||
this.command = command;
|
||||
}
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public String getCommand() {
|
||||
return command;
|
||||
}
|
||||
public MMOCommandEvent(PlayerData player, CommandTreeRoot command) {
|
||||
super(player);
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
this.command = command.getId();
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
public String getCommand() {
|
||||
return command;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean b) {
|
||||
cancelled = b;
|
||||
}
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean b) {
|
||||
cancelled = b;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,44 +4,81 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerChangeClassEvent extends PlayerDataEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
private final PlayerClass newClass;
|
||||
private final PlayerClass newClass;
|
||||
private final Reason reason;
|
||||
|
||||
private boolean cancelled = false;
|
||||
private boolean cancelled = false;
|
||||
|
||||
public PlayerChangeClassEvent(PlayerData player, PlayerClass newClass) {
|
||||
super(player);
|
||||
@Deprecated
|
||||
public PlayerChangeClassEvent(PlayerData player, PlayerClass newClass) {
|
||||
this(player, newClass, Reason.UNKNOWN);
|
||||
}
|
||||
|
||||
this.newClass = newClass;
|
||||
}
|
||||
public PlayerChangeClassEvent(PlayerData player, PlayerClass newClass, Reason reason) {
|
||||
super(player);
|
||||
|
||||
public PlayerClass getNewClass() {
|
||||
return newClass;
|
||||
}
|
||||
this.reason = reason;
|
||||
this.newClass = newClass;
|
||||
}
|
||||
|
||||
public boolean isSubclass() {
|
||||
return getData().getProfess().getSubclasses().stream().anyMatch(sub -> sub.getProfess().equals(newClass));
|
||||
}
|
||||
@NotNull
|
||||
public Reason getReason() {
|
||||
return reason;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
@NotNull
|
||||
public PlayerClass getNewClass() {
|
||||
return newClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean value) {
|
||||
cancelled = value;
|
||||
}
|
||||
public boolean isSubclass() {
|
||||
return getData().getProfess().getSubclasses().stream().anyMatch(sub -> sub.getProfess().equals(newClass));
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
@Override
|
||||
public void setCancelled(boolean value) {
|
||||
cancelled = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static enum Reason {
|
||||
|
||||
/**
|
||||
* Class is selected (class switch) by an admin command.
|
||||
*/
|
||||
COMMAND_SELECT,
|
||||
|
||||
/**
|
||||
* Class is forcefully changed by an admin command.
|
||||
*/
|
||||
COMMAND_FORCE,
|
||||
|
||||
/**
|
||||
* When the player changes class using the class change GUI
|
||||
*/
|
||||
GUI,
|
||||
|
||||
/**
|
||||
* Not specified by user
|
||||
*/
|
||||
UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancellable {
|
||||
@ -17,11 +18,11 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel
|
||||
private double experience;
|
||||
private boolean cancelled;
|
||||
|
||||
public PlayerExperienceGainEvent(PlayerData player, double experience, EXPSource source) {
|
||||
public PlayerExperienceGainEvent(@NotNull PlayerData player, double experience, @NotNull EXPSource source) {
|
||||
this(player, null, experience, source);
|
||||
}
|
||||
|
||||
public PlayerExperienceGainEvent(PlayerData player, @Nullable Profession profession, double experience, EXPSource source) {
|
||||
public PlayerExperienceGainEvent(@NotNull PlayerData player, @Nullable Profession profession, double experience, @NotNull EXPSource source) {
|
||||
super(player);
|
||||
|
||||
this.profession = profession;
|
||||
@ -56,16 +57,18 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel
|
||||
return profession != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Profession getProfession() {
|
||||
return profession;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public EXPSource getSource() {
|
||||
return source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
public @NotNull HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,104 @@
|
||||
package net.Indyuce.mmocore.api.event;
|
||||
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class PlayerLevelChangeEvent extends PlayerDataEvent {
|
||||
private final int oldLevel, newLevel;
|
||||
@Nullable(value = "null if class levels")
|
||||
private final Profession profession;
|
||||
private final Reason reason;
|
||||
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
@Deprecated
|
||||
public PlayerLevelChangeEvent(PlayerData player, int oldLevel, int newLevel) {
|
||||
this(player, null, oldLevel, newLevel, Reason.UNKNOWN);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public PlayerLevelChangeEvent(PlayerData player, Profession profession, int oldLevel, int newLevel) {
|
||||
this(player, profession, oldLevel, newLevel, Reason.UNKNOWN);
|
||||
}
|
||||
|
||||
public PlayerLevelChangeEvent(PlayerData player, @Nullable Profession profession, int oldLevel, int newLevel, Reason reason) {
|
||||
super(player);
|
||||
|
||||
this.profession = profession;
|
||||
this.oldLevel = oldLevel;
|
||||
this.newLevel = newLevel;
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Reason getReason() {
|
||||
return reason;
|
||||
}
|
||||
|
||||
public int getNewLevel() {
|
||||
return newLevel;
|
||||
}
|
||||
|
||||
public int getOldLevel() {
|
||||
return oldLevel;
|
||||
}
|
||||
|
||||
public boolean hasProfession() {
|
||||
return profession != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Profession getProfession() {
|
||||
return profession;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static enum Reason {
|
||||
|
||||
/**
|
||||
* Players level up one of their profession or main class
|
||||
*/
|
||||
LEVEL_UP,
|
||||
|
||||
/**
|
||||
* Command to change the player's level
|
||||
*/
|
||||
COMMAND,
|
||||
|
||||
/**
|
||||
* Their level is reset using the player data reset command
|
||||
*/
|
||||
RESET,
|
||||
|
||||
/**
|
||||
* When a player changes their current class
|
||||
*/
|
||||
CHOOSE_CLASS,
|
||||
|
||||
/**
|
||||
* When a player logs in or chooses their profile
|
||||
*/
|
||||
CHOOSE_PROFILE,
|
||||
|
||||
/**
|
||||
* Not provided by the user
|
||||
*/
|
||||
UNKNOWN,
|
||||
|
||||
/**
|
||||
* Not used internally
|
||||
*/
|
||||
OTHER,
|
||||
}
|
||||
}
|
||||
@ -5,48 +5,64 @@ import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @see PlayerLevelChangeEvent
|
||||
* @see net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent.Reason#LEVEL_UP
|
||||
* @deprecated Level up can now be detected through PlayerLevelChangeEvent with a reason of LEVEL_UP.
|
||||
*/
|
||||
@Deprecated
|
||||
public class PlayerLevelUpEvent extends PlayerDataEvent {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
// If null, this is main level
|
||||
private final Profession profession;
|
||||
private final int oldLevel, newLevel;
|
||||
// If null, this is main level
|
||||
private final Profession profession;
|
||||
private final int oldLevel, newLevel;
|
||||
|
||||
public PlayerLevelUpEvent(PlayerData player, int oldLevel, int newLevel) {
|
||||
this(player, null, oldLevel, newLevel);
|
||||
}
|
||||
/**
|
||||
* @see PlayerLevelChangeEvent
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
public PlayerLevelUpEvent(PlayerData player, int oldLevel, int newLevel) {
|
||||
this(player, null, oldLevel, newLevel);
|
||||
}
|
||||
|
||||
public PlayerLevelUpEvent(PlayerData player, Profession profession, int oldLevel, int newLevel) {
|
||||
super(player);
|
||||
/**
|
||||
* @see PlayerLevelChangeEvent
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
public PlayerLevelUpEvent(PlayerData player, Profession profession, int oldLevel, int newLevel) {
|
||||
super(player);
|
||||
|
||||
this.profession = profession;
|
||||
this.oldLevel = oldLevel;
|
||||
this.newLevel = newLevel;
|
||||
}
|
||||
this.profession = profession;
|
||||
this.oldLevel = oldLevel;
|
||||
this.newLevel = newLevel;
|
||||
}
|
||||
|
||||
public int getNewLevel() {
|
||||
return newLevel;
|
||||
}
|
||||
public int getNewLevel() {
|
||||
return newLevel;
|
||||
}
|
||||
|
||||
public int getOldLevel() {
|
||||
return oldLevel;
|
||||
}
|
||||
public int getOldLevel() {
|
||||
return oldLevel;
|
||||
}
|
||||
|
||||
public boolean hasProfession() {
|
||||
return profession != null;
|
||||
}
|
||||
public boolean hasProfession() {
|
||||
return profession != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Profession getProfession() {
|
||||
return profession;
|
||||
}
|
||||
@Nullable
|
||||
public Profession getProfession() {
|
||||
return profession;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,131 +5,180 @@ import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.ManaTrigger;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.StaminaTrigger;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.StelliumTrigger;
|
||||
import net.Indyuce.mmocore.command.rpg.admin.ResourceCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.admin.ResourceCommandTreeNode;
|
||||
import net.Indyuce.mmocore.skill.list.Neptune_Gift;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerResourceUpdateEvent extends PlayerDataEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
/**
|
||||
* Type of resource being regenerated, this way
|
||||
* this event handles all four resources.
|
||||
*/
|
||||
private final PlayerResource resource;
|
||||
private final UpdateReason reason;
|
||||
/**
|
||||
* Type of resource being regenerated, this way
|
||||
* this event handles all four resources.
|
||||
*/
|
||||
private final PlayerResource resource;
|
||||
private final UpdateReason reason;
|
||||
private final double oldAmount, originalNewAmount;
|
||||
|
||||
/**
|
||||
* Amount of resource regenerated. The whole point of the event is
|
||||
* being able to modify it, for instance to apply the mana regeneration stat.
|
||||
*/
|
||||
private double amount;
|
||||
/**
|
||||
* New amount. To obtain the amount of resource regenerated, if REASON
|
||||
* is REGENERATION, you must subtract oldAmount from newAmount.
|
||||
*/
|
||||
private double newAmount;
|
||||
|
||||
private boolean cancelled = false;
|
||||
private boolean cancelled = false;
|
||||
|
||||
/**
|
||||
* Called when a player gains some resource back. This can
|
||||
* be used to handle stats like health or mana regeneration.
|
||||
* <p>
|
||||
* Example use: {@link Neptune_Gift} which is a skill
|
||||
* that temporarily increases resource regeneration for a short amount of time.
|
||||
*
|
||||
* @param playerData Player regenerating
|
||||
* @param resource Resource being increased
|
||||
* @param amount Amount being taken away/regenerated
|
||||
* @param reason The reason why this event was called
|
||||
*/
|
||||
public PlayerResourceUpdateEvent(PlayerData playerData, PlayerResource resource, double amount, UpdateReason reason) {
|
||||
super(playerData);
|
||||
/**
|
||||
* Called when a player gains some resource back. This can
|
||||
* be used to handle stats like health or mana regeneration.
|
||||
* <p>
|
||||
* Example use: {@link Neptune_Gift} which is a skill
|
||||
* that temporarily increases resource regeneration for a short amount of time.
|
||||
*
|
||||
* @param playerData Player regenerating
|
||||
* @param resource Resource being increased
|
||||
* @param oldAmount The old amount of resource before this event was called. Not modifiable.
|
||||
* @param newAmount The new amount of resource after this event was called. Modifiable.
|
||||
* @param reason The reason why this event was called
|
||||
*/
|
||||
public PlayerResourceUpdateEvent(@NotNull PlayerData playerData, @NotNull PlayerResource resource, double oldAmount, double newAmount, @NotNull UpdateReason reason) {
|
||||
super(playerData);
|
||||
|
||||
this.resource = resource;
|
||||
this.amount = amount;
|
||||
this.reason = reason;
|
||||
}
|
||||
this.resource = resource;
|
||||
this.oldAmount = oldAmount;
|
||||
this.originalNewAmount = newAmount;
|
||||
this.newAmount = newAmount;
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
public PlayerResource getResource() {
|
||||
return resource;
|
||||
}
|
||||
@NotNull
|
||||
public PlayerResource getResource() {
|
||||
return resource;
|
||||
}
|
||||
|
||||
public double getAmount() {
|
||||
return amount;
|
||||
}
|
||||
@Deprecated
|
||||
public double getAmount() {
|
||||
return getDifference();
|
||||
}
|
||||
|
||||
public UpdateReason getReason() {
|
||||
return reason;
|
||||
}
|
||||
public double getDifference() {
|
||||
return newAmount - oldAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the amount of resource given/taken away
|
||||
*
|
||||
* @param amount New amount
|
||||
*/
|
||||
public void setAmount(double amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
public double getNewAmount() {
|
||||
return newAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
public double getOriginalNewAmount() {
|
||||
return originalNewAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
public double getOldAmount() {
|
||||
return oldAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
@NotNull
|
||||
public UpdateReason getReason() {
|
||||
return reason;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
/**
|
||||
* @see #setNewAmount(double)
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
public void setAmount(double amount) {
|
||||
this.setNewAmount(amount + oldAmount);
|
||||
}
|
||||
|
||||
public enum UpdateReason {
|
||||
/**
|
||||
* Sets the new amount of resource after the update.
|
||||
* Will not be applied if the event is cancelled.
|
||||
*
|
||||
* @param newAmount New amount of resource
|
||||
*/
|
||||
public void setNewAmount(double newAmount) {
|
||||
this.newAmount = newAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* When resource is being regenerated
|
||||
*/
|
||||
REGENERATION,
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* When some resource is gained, or consumed by some skills
|
||||
*/
|
||||
SKILL_REGENERATION,
|
||||
@Override
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* When some resource is gained, or consumed by some skills
|
||||
*/
|
||||
SKILL_COST,
|
||||
@Override
|
||||
public @NotNull HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
/**
|
||||
* When consuming stellium to use a waypoint
|
||||
*/
|
||||
USE_WAYPOINT,
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by quests triggers
|
||||
* - {@link ManaTrigger}
|
||||
* - {@link StaminaTrigger}
|
||||
* - {@link StelliumTrigger}
|
||||
*/
|
||||
TRIGGER,
|
||||
public enum UpdateReason {
|
||||
|
||||
/**
|
||||
* When using the resource command {@link ResourceCommandTreeNode}
|
||||
*/
|
||||
COMMAND,
|
||||
/**
|
||||
* When resource is being regenerated
|
||||
*/
|
||||
REGENERATION,
|
||||
|
||||
/**
|
||||
* Anything else
|
||||
*/
|
||||
OTHER;
|
||||
/**
|
||||
* When some resource is gained, or consumed by some skills
|
||||
*/
|
||||
SKILL_REGENERATION,
|
||||
|
||||
public boolean isSkill() {
|
||||
return this == SKILL_COST || this == SKILL_REGENERATION;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* When some resource is gained, or consumed by some skills
|
||||
*/
|
||||
SKILL_COST,
|
||||
|
||||
/**
|
||||
* When consuming stellium to use a waypoint
|
||||
*/
|
||||
USE_WAYPOINT,
|
||||
|
||||
/**
|
||||
* When the player chooses a class and mana from their previous
|
||||
* game session is restored
|
||||
*/
|
||||
CHOOSE_CLASS,
|
||||
|
||||
/**
|
||||
* Used by quests triggers
|
||||
* - {@link ManaTrigger}
|
||||
* - {@link StaminaTrigger}
|
||||
* - {@link StelliumTrigger}
|
||||
*/
|
||||
TRIGGER,
|
||||
|
||||
/**
|
||||
* When using the resource command {@link ResourceCommandTreeNode}
|
||||
*/
|
||||
COMMAND,
|
||||
|
||||
/**
|
||||
* Reason not provided by user
|
||||
*/
|
||||
UNKNOWN,
|
||||
|
||||
/**
|
||||
* Anything else
|
||||
*/
|
||||
OTHER;
|
||||
|
||||
public boolean isRegeneration() {
|
||||
return this == REGENERATION || this == SKILL_REGENERATION;
|
||||
}
|
||||
|
||||
public boolean isSkill() {
|
||||
return this == SKILL_COST || this == SKILL_REGENERATION;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,32 +5,36 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.guild.provided.Guild;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class GuildChatEvent extends PlayerDataEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private final Guild guild;
|
||||
|
||||
private boolean cancelled;
|
||||
|
||||
@Deprecated
|
||||
private String message;
|
||||
private boolean cancelled;
|
||||
|
||||
public GuildChatEvent(PlayerData playerData, String message) {
|
||||
super(playerData);
|
||||
|
||||
this.guild = playerData.getGuild();
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
public void setMessage(@Nullable String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Nullable
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Guild getGuild() {
|
||||
return guild;
|
||||
}
|
||||
|
||||
@ -5,6 +5,10 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.party.provided.Party;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class PartyChatEvent extends PlayerDataEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
@ -12,23 +16,25 @@ public class PartyChatEvent extends PlayerDataEvent implements Cancellable {
|
||||
private final Party party;
|
||||
|
||||
private boolean cancelled;
|
||||
private String message;
|
||||
private String rawMessage;
|
||||
|
||||
public PartyChatEvent(Party party, PlayerData playerData, String message) {
|
||||
public PartyChatEvent(Party party, PlayerData playerData, String rawMessage) {
|
||||
super(playerData);
|
||||
|
||||
this.party = party;
|
||||
this.message = message;
|
||||
this.rawMessage = rawMessage;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
public void setMessage(@Nullable String rawMessage) {
|
||||
this.rawMessage = Objects.requireNonNull(rawMessage, "Message cannot be null");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getMessage() {
|
||||
return message;
|
||||
return rawMessage;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Party getParty() {
|
||||
return party;
|
||||
}
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
package net.Indyuce.mmocore.api.load;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import net.Indyuce.mmocore.api.block.BlockType;
|
||||
import net.Indyuce.mmocore.api.block.SkullBlockType;
|
||||
import net.Indyuce.mmocore.api.block.VanillaBlockType;
|
||||
import net.Indyuce.mmocore.api.block.*;
|
||||
import net.Indyuce.mmocore.api.quest.objective.*;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.*;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
@ -196,8 +194,11 @@ public class DefaultMMOLoader extends MMOLoader {
|
||||
@Override
|
||||
public BlockType loadBlockType(MMOLineConfig config) {
|
||||
|
||||
if (config.getKey().equalsIgnoreCase("vanilla"))
|
||||
return new VanillaBlockType(config);
|
||||
if (config.getKey().equalsIgnoreCase("vanilla")) return new VanillaBlockType(config);
|
||||
|
||||
if (config.getKey().equalsIgnoreCase("note")) return new NoteBlockType(config);
|
||||
|
||||
if (config.getKey().equalsIgnoreCase("mushroom")) return new MushroomBlockType(config);
|
||||
|
||||
if (config.getKey().equalsIgnoreCase("skull") || config.getKey().equals("head") || config.getKey().equals("playerhead"))
|
||||
return new SkullBlockType(config);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,13 +2,13 @@ package net.Indyuce.mmocore.api.player.attribute;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.ExpCurve;
|
||||
import net.Indyuce.mmocore.experience.ExperienceObject;
|
||||
import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -10,9 +10,9 @@ import io.lumine.mythic.lib.player.modifier.ModifierSource;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierType;
|
||||
import io.lumine.mythic.lib.util.Closeable;
|
||||
import io.lumine.mythic.lib.util.Lazy;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -189,7 +189,7 @@ public class PlayerAttributes {
|
||||
public AttributeInstance(@NotNull String attributeId) {
|
||||
this.id = attributeId;
|
||||
this.enumName = UtilityMethods.enumName(this.id);
|
||||
this.attribute = Lazy.of(() -> MMOCore.plugin.attributeManager.get(this.id));
|
||||
this.attribute = Lazy.persistent(() -> MMOCore.plugin.attributeManager.get(this.id));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -311,10 +311,15 @@ public class PlayerClass implements ExperienceObject, PreloadedObject {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExpCurve getExpCurve() {
|
||||
public @NotNull ExpCurve getExpCurve() {
|
||||
return expCurve;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<ClassSkill> getSkills() {
|
||||
return skills.values();
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public ExperienceTable getExperienceTable() {
|
||||
@ -423,7 +428,7 @@ public class PlayerClass implements ExperienceObject, PreloadedObject {
|
||||
return skillSlots;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Nullable
|
||||
public ClassSkill getSkill(RegisteredSkill skill) {
|
||||
return getSkill(skill.getHandler().getId());
|
||||
}
|
||||
@ -469,11 +474,6 @@ public class PlayerClass implements ExperienceObject, PreloadedObject {
|
||||
return calculateBaseStat(stat, level, null);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Collection<ClassSkill> getSkills() {
|
||||
return skills.values();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public ItemStack getIcon() {
|
||||
return icon.toItemStack();
|
||||
|
||||
@ -2,16 +2,16 @@ package net.Indyuce.mmocore.api.player.profess;
|
||||
|
||||
import io.lumine.mythic.lib.gson.JsonElement;
|
||||
import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.version.Attributes;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.player.ClassDataContainer;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@ -119,7 +119,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
this.skillTreeReallocationPoints = data.getSkillTreeReallocationPoints();
|
||||
this.skillReallocationPoints = data.getSkillReallocationPoints();
|
||||
this.experience = data.getExperience();
|
||||
this.health = data.getHealth();
|
||||
this.health = data.getLastHealth();
|
||||
this.mana = data.getMana();
|
||||
this.stellium = data.getStellium();
|
||||
this.stamina = data.getStamina();
|
||||
@ -159,7 +159,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getHealth() {
|
||||
public double getLastHealth() {
|
||||
return health;
|
||||
}
|
||||
|
||||
@ -284,7 +284,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
* @param profess Target player class
|
||||
* @param player Player changing class
|
||||
*/
|
||||
public void load(PlayerClass profess, PlayerData player) {
|
||||
public void load(@NotNull PlayerClass profess, @NotNull PlayerData player) {
|
||||
|
||||
/*
|
||||
* Saves current class info inside a SavedClassInformation, only
|
||||
@ -310,7 +310,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
* Reads this class info, applies it to the player. set class after
|
||||
* changing level so the player stats can be calculated based on new level
|
||||
*/
|
||||
player.setLevel(level);
|
||||
player.setLevel(level, PlayerLevelChangeEvent.Reason.CHOOSE_CLASS);
|
||||
player.setExperience(experience);
|
||||
player.setSkillPoints(skillPoints);
|
||||
player.setAttributePoints(attributePoints);
|
||||
@ -332,21 +332,17 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
for (SkillTreeNode node : skillTree.getNodes())
|
||||
player.setNodeLevel(node, nodeLevels.getOrDefault(node.getFullId(), 0));
|
||||
|
||||
skillTree.setupNodeStates(player);
|
||||
skillTree.resolveStates(player);
|
||||
}
|
||||
|
||||
// Add the values to the times claimed table and claims the corresponding stat triggers.
|
||||
nodeTimesClaimed.forEach((str, val) -> player.setClaims(str, val));
|
||||
nodeTimesClaimed.forEach(player::setClaims);
|
||||
|
||||
// Unload current class information
|
||||
player.unloadClassInfo(profess);
|
||||
|
||||
// This needs to be done at the end to make sure the MAX_HEALTH/MAX_MANA/... stats are loaded.
|
||||
player.getPlayer().setHealth(MMOCoreUtils.fixResource(health, player.getPlayer().getAttribute(Attributes.MAX_HEALTH).getValue()));
|
||||
player.setHealth(health);
|
||||
player.setMana(mana);
|
||||
player.setStellium(stellium);
|
||||
player.setStamina(stamina);
|
||||
player.loadResources(health, mana, stellium, stamina);
|
||||
player.applyTemporaryTriggers();
|
||||
player.getStats().updateStats();
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package net.Indyuce.mmocore.api.player.profess;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
|
||||
public class Subclass {
|
||||
private final PlayerClass profess;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.api.player.profess.event;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package net.Indyuce.mmocore.api.player.profess.event.trigger;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
import net.Indyuce.mmocore.api.player.profess.event.EventTriggerHandler;
|
||||
@ -10,32 +10,34 @@ import org.bukkit.event.EventPriority;
|
||||
@Deprecated
|
||||
public class LevelUpEventTrigger implements EventTriggerHandler {
|
||||
|
||||
@Override
|
||||
public boolean handles(String event) {
|
||||
return event.startsWith("level-up");
|
||||
}
|
||||
@Override
|
||||
public boolean handles(String event) {
|
||||
return event.startsWith("level-up");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void a(PlayerLevelUpEvent event) {
|
||||
PlayerData player = event.getData();
|
||||
PlayerClass profess = player.getProfess();
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void a(PlayerLevelChangeEvent event) {
|
||||
PlayerData player = event.getData();
|
||||
PlayerClass profess = player.getProfess();
|
||||
|
||||
for(int i = event.getOldLevel(); i < event.getNewLevel(); i++) {
|
||||
int level = i + 1;
|
||||
if(event.hasProfession()) {
|
||||
String prof = event.getProfession().getId().toLowerCase();
|
||||
processTrigger(player, profess, "level-up-" + prof);
|
||||
processTrigger(player, profess, "level-up-" + prof + "-" + level);
|
||||
} else {
|
||||
processTrigger(player, profess, "level-up");
|
||||
processTrigger(player, profess, "level-up-" + level);
|
||||
if(profess.getMaxLevel() == level)
|
||||
processTrigger(player, profess, "level-up-max");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void processTrigger(PlayerData player, PlayerClass profess, String trigger) {
|
||||
if(profess.hasEventTriggers(trigger)) profess.getEventTriggers(trigger).getTriggers().forEach(t -> t.apply(player));
|
||||
}
|
||||
if (event.getReason() == PlayerLevelChangeEvent.Reason.LEVEL_UP)
|
||||
for (int i = event.getOldLevel(); i < event.getNewLevel(); i++) {
|
||||
int level = i + 1;
|
||||
if (event.hasProfession()) {
|
||||
String prof = event.getProfession().getId().toLowerCase();
|
||||
processTrigger(player, profess, "level-up-" + prof);
|
||||
processTrigger(player, profess, "level-up-" + prof + "-" + level);
|
||||
} else {
|
||||
processTrigger(player, profess, "level-up");
|
||||
processTrigger(player, profess, "level-up-" + level);
|
||||
if (profess.getMaxLevel() == level)
|
||||
processTrigger(player, profess, "level-up-max");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void processTrigger(PlayerData player, PlayerClass profess, String trigger) {
|
||||
if (profess.hasEventTriggers(trigger))
|
||||
profess.getEventTriggers(trigger).getTriggers().forEach(t -> t.apply(player));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package net.Indyuce.mmocore.api.player.profess.event.trigger;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
import net.Indyuce.mmocore.api.player.profess.event.EventTriggerHandler;
|
||||
@ -18,31 +18,33 @@ public class MultipleLevelUpEventTrigger implements EventTriggerHandler {
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void a(PlayerLevelUpEvent event) {
|
||||
public void a(PlayerLevelChangeEvent event) {
|
||||
PlayerData player = event.getData();
|
||||
PlayerClass profess = player.getProfess();
|
||||
|
||||
for(int i = event.getOldLevel(); i < event.getNewLevel(); i++) {
|
||||
int level = i + 1;
|
||||
if (event.getReason() == PlayerLevelChangeEvent.Reason.LEVEL_UP)
|
||||
for (int i = event.getOldLevel(); i < event.getNewLevel(); i++) {
|
||||
int level = i + 1;
|
||||
|
||||
for (String t : profess.getEventTriggers()){
|
||||
if (t.startsWith("level-up-multiple")) {
|
||||
String[] split = t.split("-");
|
||||
double multiple = Double.parseDouble(split[split.length-1]);
|
||||
if (level / multiple % 1 == 0) {
|
||||
DecimalFormat f = new DecimalFormat("#");
|
||||
if (event.hasProfession()) {
|
||||
processTrigger(player, profess, "level-up-multiple-" + event.getProfession().getId().toLowerCase() + "-" + f.format(multiple));
|
||||
} else {
|
||||
processTrigger(player, profess, "level-up-multiple-" + f.format(multiple));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String t : profess.getEventTriggers()) {
|
||||
if (t.startsWith("level-up-multiple")) {
|
||||
String[] split = t.split("-");
|
||||
double multiple = Double.parseDouble(split[split.length - 1]);
|
||||
if (level / multiple % 1 == 0) {
|
||||
DecimalFormat f = new DecimalFormat("#");
|
||||
if (event.hasProfession()) {
|
||||
processTrigger(player, profess, "level-up-multiple-" + event.getProfession().getId().toLowerCase() + "-" + f.format(multiple));
|
||||
} else {
|
||||
processTrigger(player, profess, "level-up-multiple-" + f.format(multiple));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void processTrigger(PlayerData player, PlayerClass profess, String trigger) {
|
||||
if(profess.hasEventTriggers(trigger)) profess.getEventTriggers(trigger).getTriggers().forEach(t -> t.apply(player));
|
||||
if (profess.hasEventTriggers(trigger))
|
||||
profess.getEventTriggers(trigger).getTriggers().forEach(t -> t.apply(player));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ package net.Indyuce.mmocore.api.player.profess.resource;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.util.AltChar;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import net.Indyuce.mmocore.api.event.PlayerResourceUpdateEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.ClassOption;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.ManaTrigger;
|
||||
import net.Indyuce.mmocore.command.rpg.admin.ResourceCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.admin.ResourceCommandTreeNode;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
@ -24,21 +24,21 @@ public enum PlayerResource {
|
||||
(data, amount) -> data.giveMana(amount, PlayerResourceUpdateEvent.UpdateReason.REGENERATION),
|
||||
(data, amount) -> data.giveMana(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.giveMana(-amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.setMana(amount)),
|
||||
(data, amount) -> data.setMana(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND)),
|
||||
|
||||
STAMINA(PlayerData::getStamina,
|
||||
data -> data.getStats().getStat("MAX_STAMINA"),
|
||||
(data, amount) -> data.giveStamina(amount, PlayerResourceUpdateEvent.UpdateReason.REGENERATION),
|
||||
(data, amount) -> data.giveStamina(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.giveStamina(-amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.setStamina(amount)),
|
||||
(data, amount) -> data.setStamina(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND)),
|
||||
|
||||
STELLIUM(PlayerData::getStellium,
|
||||
data -> data.getStats().getStat("MAX_STELLIUM"),
|
||||
(data, amount) -> data.giveStellium(amount, PlayerResourceUpdateEvent.UpdateReason.REGENERATION),
|
||||
(data, amount) -> data.giveStellium(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.giveStellium(-amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND),
|
||||
(data, amount) -> data.setStellium(amount));
|
||||
(data, amount) -> data.setStellium(amount, PlayerResourceUpdateEvent.UpdateReason.COMMAND));
|
||||
|
||||
private final String regenStat, maxRegenStat;
|
||||
private final ClassOption offCombatRegen;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.api.player.profess.resource;
|
||||
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.formula.FormulaFailsafeException;
|
||||
import net.Indyuce.mmocore.util.formula.ScalingFormula;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package net.Indyuce.mmocore.api.player.social;
|
||||
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
@ -15,6 +15,7 @@ import net.Indyuce.mmocore.experience.Profession;
|
||||
import net.Indyuce.mmocore.player.stats.StatInfo;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
|
||||
// TODO merge with PlayerData? not really needed class
|
||||
public class PlayerStats {
|
||||
private final PlayerData data;
|
||||
|
||||
@ -67,8 +68,9 @@ public class PlayerStats {
|
||||
return data.getProfess().calculateBaseStat(stat, profession == null ? data.getLevel() : data.getCollectionSkills().getLevel(profession), data);
|
||||
}
|
||||
|
||||
public void updateStats() {
|
||||
updateStats(false);
|
||||
@Deprecated
|
||||
public void updateStats(boolean ignored) {
|
||||
this.updateStats();
|
||||
}
|
||||
|
||||
private static final String MODIFIER_KEY = "MMOCoreClass";
|
||||
@ -77,25 +79,19 @@ public class PlayerStats {
|
||||
* Used to update MMOCore stat modifiers due to class and send them over to
|
||||
* MythicLib. Must be ran everytime the player levels up, changes class or
|
||||
* when the plugin reloads.
|
||||
* <p>
|
||||
* Login scripts are a pretty special case of scripts/skills since they are
|
||||
* not loaded yet when MythicLib triggers them naturally. Therefore, they
|
||||
* need to be cast as soon as they are loaded into the MMOCore player data.
|
||||
*
|
||||
* @param castLoginScripts Should login scripts be cast
|
||||
*/
|
||||
public synchronized void updateStats(boolean castLoginScripts) {
|
||||
public synchronized void updateStats() {
|
||||
|
||||
// Update player stats
|
||||
getMap().bufferUpdates(() -> {
|
||||
for (String stat : MMOCore.plugin.statManager.getRegistered()) {
|
||||
final StatInstance instance = getMap().getInstance(stat);
|
||||
final var instance = getMap().getInstance(stat);
|
||||
|
||||
// Remove modifiers due to class
|
||||
instance.removeIf(MODIFIER_KEY::equals);
|
||||
|
||||
// Add newest one
|
||||
final double total = getBase(instance.getStat()) - instance.getBase();
|
||||
final double total = getBase(instance.getStat()) - instance.getDefaultBase();
|
||||
if (total != 0)
|
||||
instance.registerModifier(new StatModifier(MODIFIER_KEY, instance.getStat(), total, ModifierType.FLAT, EquipmentSlot.OTHER, ModifierSource.OTHER));
|
||||
}
|
||||
@ -115,18 +111,5 @@ public class PlayerStats {
|
||||
skillMap.removeModifiers("MMOCoreClassScript");
|
||||
for (PassiveSkill script : data.getProfess().getScripts())
|
||||
if (script.getType() != TriggerType.LOGIN) skillMap.addModifier(script);
|
||||
|
||||
// If data hasn't been synchronized yet, cast LOGIN scripts
|
||||
if (castLoginScripts) {
|
||||
|
||||
// Call class login skills
|
||||
for (ClassSkill skill : data.getProfess().getSkills())
|
||||
if (skill.getSkill().getTrigger() == TriggerType.LOGIN)
|
||||
skill.toCastable(data).cast(data.getMMOPlayerData());
|
||||
|
||||
// Call class login scripts
|
||||
for (PassiveSkill skill : data.getProfess().getScripts())
|
||||
if (skill.getType() == TriggerType.LOGIN) skill.getTriggeredSkill().cast(data.getMMOPlayerData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,6 +32,11 @@ public abstract class ObjectiveProgress implements Closeable {
|
||||
return questProgress;
|
||||
}
|
||||
|
||||
public double getProgress() {
|
||||
// default to 0, maybe ppl implemented quest objectives
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
if (this instanceof Listener)
|
||||
|
||||
@ -6,6 +6,7 @@ import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.util.Closeable;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.boss.BarColor;
|
||||
@ -24,27 +25,25 @@ import java.util.logging.Level;
|
||||
public class PlayerQuests implements Closeable {
|
||||
private final PlayerData playerData;
|
||||
private final Map<String, Long> finished = new HashMap<>();
|
||||
|
||||
@Nullable
|
||||
private final BossBar bossbar;
|
||||
private final NamespacedKey bossbarNamespacedKey;
|
||||
|
||||
@Nullable
|
||||
private BossBar bossbar;
|
||||
private QuestProgress current;
|
||||
|
||||
public PlayerQuests(PlayerData playerData) {
|
||||
this.playerData = playerData;
|
||||
|
||||
if (!MMOCore.plugin.configManager.disableQuestBossBar && playerData.isOnline()) {
|
||||
bossbarNamespacedKey = new NamespacedKey(MMOCore.plugin, "mmocore_quest_progress_" + playerData.getUniqueId().toString());
|
||||
bossbar = Bukkit.createBossBar(bossbarNamespacedKey, "", BarColor.PURPLE, BarStyle.SEGMENTED_20);
|
||||
bossbar.addPlayer(playerData.getPlayer());
|
||||
bossbar.setVisible(false); // Safety
|
||||
bossbarNamespacedKey = new NamespacedKey(MMOCore.plugin, "quest_progress_" + playerData.getUniqueId());
|
||||
/*
|
||||
Bukkit.getScheduler().runTaskTimer(MMOCore.plugin, () -> {
|
||||
|
||||
// Bossbar is disabled
|
||||
} else {
|
||||
bossbarNamespacedKey = null;
|
||||
bossbar = null;
|
||||
}
|
||||
Bukkit.broadcastMessage("bossbar=" + bossbar);
|
||||
Bukkit.broadcastMessage("current=" + current);
|
||||
|
||||
|
||||
}, 20, 20);
|
||||
*/
|
||||
}
|
||||
|
||||
public PlayerQuests load(ConfigurationSection config) {
|
||||
@ -69,6 +68,8 @@ public class PlayerQuests implements Closeable {
|
||||
return this;
|
||||
}
|
||||
|
||||
//region DB
|
||||
|
||||
public void save(ConfigurationSection config) {
|
||||
if (current != null) {
|
||||
config.set("current.id", current.getQuest().getId());
|
||||
@ -93,7 +94,7 @@ public class PlayerQuests implements Closeable {
|
||||
for (String key : finished.keySet())
|
||||
fin.addProperty(key, finished.get(key));
|
||||
|
||||
if (finished.size() != 0)
|
||||
if (!finished.isEmpty())
|
||||
json.add("finished", fin);
|
||||
return json.toString();
|
||||
}
|
||||
@ -114,6 +115,8 @@ public class PlayerQuests implements Closeable {
|
||||
finished.put(entry.getKey(), entry.getValue().getAsLong());
|
||||
}
|
||||
|
||||
//endregion DB
|
||||
|
||||
public QuestProgress getCurrent() {
|
||||
return current;
|
||||
}
|
||||
@ -135,6 +138,7 @@ public class PlayerQuests implements Closeable {
|
||||
}
|
||||
|
||||
public void finishCurrent() {
|
||||
Validate.notNull(current, "No ongoing quest");
|
||||
finished.put(current.getQuest().getId(), System.currentTimeMillis());
|
||||
start(null);
|
||||
}
|
||||
@ -147,35 +151,36 @@ public class PlayerQuests implements Closeable {
|
||||
return new Date(finished.get(quest.getId()));
|
||||
}
|
||||
|
||||
public void start(Quest quest) {
|
||||
public void start(@Nullable Quest quest) {
|
||||
|
||||
// Close current objective progress if quest is active
|
||||
closeCurrentQuest();
|
||||
cancelCurrentQuest();
|
||||
|
||||
// Apply newest quest
|
||||
current = quest == null ? null : quest.generateNewProgress(playerData);
|
||||
updateBossBar();
|
||||
}
|
||||
|
||||
public void closeCurrentQuest() {
|
||||
if (current == null)
|
||||
return;
|
||||
public void cancelCurrentQuest() {
|
||||
if (current == null) return;
|
||||
|
||||
current.getProgress().close();
|
||||
current = null;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void closeCurrentQuest() {
|
||||
cancelCurrentQuest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
// Remove boss bar
|
||||
if (bossbar != null) {
|
||||
bossbar.removeAll();
|
||||
Bukkit.removeBossBar(bossbarNamespacedKey);
|
||||
}
|
||||
if (bossbar != null) deleteBossbar();
|
||||
|
||||
// Close current objective progress
|
||||
closeCurrentQuest();
|
||||
// Close only progress
|
||||
if (current != null) current.getProgress().close();
|
||||
}
|
||||
|
||||
public boolean checkCooldownAvailability(Quest quest) {
|
||||
@ -193,20 +198,50 @@ public class PlayerQuests implements Closeable {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void updateBossBar() {
|
||||
//region Bossbar
|
||||
|
||||
// Bossbar is disabled
|
||||
if (bossbar == null)
|
||||
return;
|
||||
|
||||
if (!hasCurrent() || !current.getProgress().getObjective().hasLore()) {
|
||||
bossbar.setVisible(false);
|
||||
return;
|
||||
}
|
||||
private boolean isBossbarRelevant() {
|
||||
return !MMOCore.plugin.configManager.disableQuestBossBar
|
||||
&& current != null
|
||||
&& current.getQuest().usesBossbar();
|
||||
}
|
||||
|
||||
private void initializeBossbar() {
|
||||
Validate.isTrue(this.bossbar == null, "Tried to create a new bossbar while one already exists");
|
||||
this.bossbar = Bukkit.createBossBar(bossbarNamespacedKey, "", BarColor.PURPLE, BarStyle.SEGMENTED_20);
|
||||
bossbar.addPlayer(playerData.getPlayer());
|
||||
bossbar.setVisible(true);
|
||||
}
|
||||
|
||||
private void deleteBossbar() {
|
||||
Validate.notNull(this.bossbar, "Bossbar is null");
|
||||
|
||||
bossbar.removeAll();
|
||||
Bukkit.removeBossBar(bossbarNamespacedKey);
|
||||
this.bossbar = null;
|
||||
}
|
||||
|
||||
public void updateBossBar() {
|
||||
final var flag = isBossbarRelevant();
|
||||
final var enabled = bossbar != null;
|
||||
|
||||
// Initialize/remove if needed
|
||||
if (enabled && !flag) deleteBossbar();
|
||||
else if (!enabled && flag) initializeBossbar();
|
||||
|
||||
// Bossbar
|
||||
if (bossbar == null) return;
|
||||
|
||||
final var bossbarProgress = current.getQuest().isObjectiveBossbar()
|
||||
// Fine tuned progress
|
||||
? current.getProgress().getProgress()
|
||||
// Based on objective number
|
||||
: (double) current.getObjectiveNumber() / current.getQuest().getObjectives().size();
|
||||
|
||||
bossbar.setColor(current.getProgress().getObjective().getBarColor());
|
||||
bossbar.setTitle(current.getFormattedLore());
|
||||
bossbar.setProgress((double) current.getObjectiveNumber() / current.getQuest().getObjectives().size());
|
||||
bossbar.setProgress(bossbarProgress);
|
||||
}
|
||||
|
||||
//endregion
|
||||
}
|
||||
|
||||
@ -3,11 +3,11 @@ package net.Indyuce.mmocore.api.quest;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.PostLoadAction;
|
||||
import io.lumine.mythic.lib.util.PreloadedObject;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.quest.objective.Objective;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -20,6 +20,7 @@ public class Quest implements PreloadedObject {
|
||||
private final List<Objective> objectives = new ArrayList<>();
|
||||
private final List<String> lore;
|
||||
private final int mainLevelRestriction;
|
||||
private final boolean useBossbar, objectiveBossbar;
|
||||
private final Map<Profession, Integer> levelRestrictions = new HashMap<>();
|
||||
|
||||
// Cooldown in millis
|
||||
@ -40,6 +41,8 @@ public class Quest implements PreloadedObject {
|
||||
cooldown = (long) (config.contains("delay") ? config.getDouble("delay") * 60 * 60 * 1000 : -1);
|
||||
name = config.getString("name");
|
||||
lore = config.getStringList("lore");
|
||||
objectiveBossbar = config.getBoolean("bossbar.objective", true);
|
||||
useBossbar = config.getBoolean("bossbar.enabled", true);
|
||||
|
||||
mainLevelRestriction = config.getInt("level-req.main");
|
||||
|
||||
@ -80,6 +83,14 @@ public class Quest implements PreloadedObject {
|
||||
return id;
|
||||
}
|
||||
|
||||
public boolean usesBossbar() {
|
||||
return useBossbar;
|
||||
}
|
||||
|
||||
public boolean isObjectiveBossbar() {
|
||||
return objectiveBossbar;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ public class QuestProgress {
|
||||
private final Quest quest;
|
||||
private final PlayerData player;
|
||||
|
||||
private int objective;
|
||||
private int objectiveIndex;
|
||||
private ObjectiveProgress objectiveProgress;
|
||||
|
||||
public QuestProgress(Quest quest, PlayerData player) {
|
||||
@ -19,7 +19,7 @@ public class QuestProgress {
|
||||
this.quest = quest;
|
||||
this.player = player;
|
||||
|
||||
this.objective = objective;
|
||||
this.objectiveIndex = objective;
|
||||
objectiveProgress = nextObjective().newProgress(this);
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ public class QuestProgress {
|
||||
}
|
||||
|
||||
public int getObjectiveNumber() {
|
||||
return objective;
|
||||
return objectiveIndex;
|
||||
}
|
||||
|
||||
public ObjectiveProgress getProgress() {
|
||||
@ -40,18 +40,19 @@ public class QuestProgress {
|
||||
}
|
||||
|
||||
private Objective nextObjective() {
|
||||
return quest.getObjectives().get(objective);
|
||||
return quest.getObjectives().get(objectiveIndex);
|
||||
}
|
||||
|
||||
public void completeObjective() {
|
||||
objective++;
|
||||
objectiveIndex++;
|
||||
objectiveProgress.close();
|
||||
final ObjectiveProgress finishedObjectiveProgress = objectiveProgress;
|
||||
final var finishedObjectiveProgress = objectiveProgress;
|
||||
|
||||
// Start next objective, or end quest.
|
||||
if (objective >= quest.getObjectives().size()) player.getQuestData().finishCurrent();
|
||||
if (objectiveIndex >= quest.getObjectives().size()) player.getQuestData().finishCurrent();
|
||||
else objectiveProgress = nextObjective().newProgress(this);
|
||||
|
||||
// Update bossbar
|
||||
player.getQuestData().updateBossBar();
|
||||
|
||||
/*
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.api.quest.objective;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.quest.ObjectiveProgress;
|
||||
import net.Indyuce.mmocore.api.quest.QuestProgress;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -31,13 +31,13 @@ public class ClickonObjective extends Objective {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectiveProgress newProgress(QuestProgress questProgress) {
|
||||
return new GotoProgress(questProgress, this);
|
||||
public GotoProgress newProgress(QuestProgress questProgress) {
|
||||
return new GotoProgress(questProgress);
|
||||
}
|
||||
|
||||
public class GotoProgress extends ObjectiveProgress implements Listener {
|
||||
public GotoProgress(QuestProgress questProgress, Objective objective) {
|
||||
super(questProgress, objective);
|
||||
public GotoProgress(QuestProgress questProgress) {
|
||||
super(questProgress, ClickonObjective.this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -51,6 +51,11 @@ public class ClickonObjective extends Objective {
|
||||
getQuestProgress().completeObjective();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getProgress() {
|
||||
return 1d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String formatLore(String lore) {
|
||||
return lore;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.api.quest.objective;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.quest.ObjectiveProgress;
|
||||
import net.Indyuce.mmocore.api.quest.QuestProgress;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -29,18 +29,20 @@ public class GoToObjective extends Objective {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectiveProgress newProgress(QuestProgress questProgress) {
|
||||
return new GotoProgress(questProgress, this);
|
||||
public GotoProgress newProgress(QuestProgress questProgress) {
|
||||
return new GotoProgress(questProgress);
|
||||
}
|
||||
|
||||
public class GotoProgress extends ObjectiveProgress implements Listener {
|
||||
public GotoProgress(QuestProgress questProgress, Objective objective) {
|
||||
super(questProgress, objective);
|
||||
public GotoProgress(QuestProgress questProgress) {
|
||||
super(questProgress, GoToObjective.this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void a(PlayerMoveEvent event) {
|
||||
if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockY() == event.getTo().getBlockY() && event.getFrom().getBlockZ() == event.getTo().getBlockZ())
|
||||
if (event.getFrom().getBlockX() == event.getTo().getBlockX()
|
||||
&& event.getFrom().getBlockY() == event.getTo().getBlockY()
|
||||
&& event.getFrom().getBlockZ() == event.getTo().getBlockZ())
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
@ -50,6 +52,11 @@ public class GoToObjective extends Objective {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getProgress() {
|
||||
return 1d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String formatLore(String lore) {
|
||||
return lore;
|
||||
|
||||
@ -23,26 +23,32 @@ public class KillMobObjective extends Objective {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectiveProgress newProgress(QuestProgress questProgress) {
|
||||
return new KillMobProgress(questProgress, this);
|
||||
public KillMobProgress newProgress(QuestProgress questProgress) {
|
||||
return new KillMobProgress(questProgress);
|
||||
}
|
||||
|
||||
public class KillMobProgress extends ObjectiveProgress implements Listener {
|
||||
private int count;
|
||||
|
||||
public KillMobProgress(QuestProgress questProgress, Objective objective) {
|
||||
super(questProgress, objective);
|
||||
public KillMobProgress(QuestProgress questProgress) {
|
||||
super(questProgress, KillMobObjective.this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void a(PlayerKillEntityEvent event) {
|
||||
if(!getPlayer().isOnline()) return;
|
||||
if (event.getTarget().getType() == type && event.getPlayer().equals(getPlayer().getPlayer())) {
|
||||
count++;
|
||||
getQuestProgress().getPlayer().getQuestData().updateBossBar();
|
||||
if (count >= required)
|
||||
getQuestProgress().completeObjective();
|
||||
}
|
||||
@EventHandler
|
||||
public void a(PlayerKillEntityEvent event) {
|
||||
if (!getPlayer().isOnline()) return;
|
||||
|
||||
if (event.getTarget().getType() == type && event.getPlayer().equals(getPlayer().getPlayer())) {
|
||||
count++;
|
||||
getQuestProgress().getPlayer().getQuestData().updateBossBar();
|
||||
if (count >= required)
|
||||
getQuestProgress().completeObjective();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getProgress() {
|
||||
return (double) count / required;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -54,6 +54,11 @@ public class MineBlockObjective extends Objective {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getProgress() {
|
||||
return (double) count / required;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void b(CustomBlockMineEvent event) {
|
||||
if(!getQuestProgress().getPlayer().isOnline()) return;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package net.Indyuce.mmocore.api.quest.objective;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.quest.ObjectiveProgress;
|
||||
import net.Indyuce.mmocore.api.quest.QuestProgress;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
|
||||
@ -1,40 +1,37 @@
|
||||
package net.Indyuce.mmocore.api.quest.trigger;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.math.formula.RandomAmount;
|
||||
import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.SimpleExperienceObject;
|
||||
import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ExperienceTrigger extends Trigger {
|
||||
@NotNull
|
||||
private final RandomAmount amount;
|
||||
@NotNull
|
||||
private final EXPSource source;
|
||||
@NotNull
|
||||
private final ExperienceDispenser dispenser;
|
||||
@Nullable
|
||||
private final Profession profession;
|
||||
|
||||
public ExperienceTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
|
||||
config.validate("amount");
|
||||
|
||||
if (config.contains("profession")) {
|
||||
String id = config.getString("profession").toLowerCase().replace("_", "-");
|
||||
Validate.isTrue(MMOCore.plugin.professionManager.has(id), "Could not find profession");
|
||||
dispenser = MMOCore.plugin.professionManager.get(id);
|
||||
} else
|
||||
dispenser = new SimpleExperienceObject();
|
||||
if (config.contains("profession")) {
|
||||
String id = config.getString("profession").toLowerCase().replace("_", "-");
|
||||
Validate.isTrue(MMOCore.plugin.professionManager.has(id), "Could not find profession");
|
||||
profession = MMOCore.plugin.professionManager.get(id);
|
||||
} else profession = null;
|
||||
amount = new RandomAmount(config.getString("amount"));
|
||||
source = config.contains("source") ? EXPSource.valueOf(config.getString("source").toUpperCase()) : EXPSource.QUEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
dispenser.giveExperience(player, amount.calculate(), null, source);
|
||||
}
|
||||
if (profession != null) profession.giveExperience(player, amount.calculate(), null, source);
|
||||
else player.getProfess().giveExperience(player, amount.calculate(), null, source);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,9 +2,9 @@ package net.Indyuce.mmocore.api.quest.trigger;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.config.YamlFile;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -26,7 +26,7 @@ public class ManaTrigger extends Trigger {
|
||||
|
||||
// Set mana
|
||||
else if (operation == Operation.SET)
|
||||
player.setMana(amount.calculate());
|
||||
player.setMana(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
|
||||
// Take mana
|
||||
else
|
||||
|
||||
@ -5,12 +5,12 @@ import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierType;
|
||||
import io.lumine.mythic.lib.player.skillmod.SkillModifier;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.api.Removable;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.api.Temporary;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,27 +1,23 @@
|
||||
package net.Indyuce.mmocore.api.quest.trigger;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.version.Sounds;
|
||||
import io.lumine.mythic.lib.message.SoundReader;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class SoundTrigger extends Trigger {
|
||||
private final Sound sound;
|
||||
private final float vol, pitch;
|
||||
private final SoundReader sound;
|
||||
|
||||
public SoundTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
|
||||
config.validate("sound");
|
||||
|
||||
sound = Sounds.fromName(config.getString("sound").toUpperCase().replace("-", "_"));
|
||||
vol = config.contains("volume") ? (float) config.getDouble("volume") : 1f;
|
||||
pitch = config.contains("pitch") ? (float) config.getDouble("pitch") : 1f;
|
||||
sound = new SoundReader(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
if(!player.isOnline()) return;
|
||||
player.getPlayer().playSound(player.getPlayer().getLocation(), sound, vol, pitch);
|
||||
sound.play(player.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,30 +7,29 @@ import net.Indyuce.mmocore.api.quest.trigger.ManaTrigger.Operation;
|
||||
import net.Indyuce.mmocore.api.util.math.formula.RandomAmount;
|
||||
|
||||
public class StaminaTrigger extends Trigger {
|
||||
private final RandomAmount amount;
|
||||
private final Operation operation;
|
||||
private final RandomAmount amount;
|
||||
private final Operation operation;
|
||||
|
||||
public StaminaTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
public StaminaTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
|
||||
config.validate("amount");
|
||||
amount = new RandomAmount(config.getString("amount"));
|
||||
operation = config.contains("operation") ? Operation.valueOf(config.getString("operation").toUpperCase()) : Operation.GIVE;
|
||||
}
|
||||
config.validate("amount");
|
||||
amount = new RandomAmount(config.getString("amount"));
|
||||
operation = config.contains("operation") ? Operation.valueOf(config.getString("operation").toUpperCase()) : Operation.GIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
|
||||
// Give stamina
|
||||
if (operation == Operation.GIVE)
|
||||
player.giveStamina(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
// Give stamina
|
||||
if (operation == Operation.GIVE)
|
||||
player.giveStamina(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
|
||||
// Set stamina
|
||||
else if (operation == Operation.SET)
|
||||
player.setStamina(amount.calculate());
|
||||
// Set stamina
|
||||
else if (operation == Operation.SET)
|
||||
player.setStamina(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
|
||||
// Take stamina
|
||||
else
|
||||
player.giveStamina(-amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
}
|
||||
// Take stamina
|
||||
else player.giveStamina(-amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,10 +3,10 @@ package net.Indyuce.mmocore.api.quest.trigger;
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierType;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.api.Removable;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.api.Temporary;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
public class StatTrigger extends Trigger implements Removable, Temporary {
|
||||
private final StatModifier modifier;
|
||||
|
||||
@ -7,30 +7,29 @@ import net.Indyuce.mmocore.api.quest.trigger.ManaTrigger.Operation;
|
||||
import net.Indyuce.mmocore.api.util.math.formula.RandomAmount;
|
||||
|
||||
public class StelliumTrigger extends Trigger {
|
||||
private final RandomAmount amount;
|
||||
private final Operation operation;
|
||||
private final RandomAmount amount;
|
||||
private final Operation operation;
|
||||
|
||||
public StelliumTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
public StelliumTrigger(MMOLineConfig config) {
|
||||
super(config);
|
||||
|
||||
config.validate("amount");
|
||||
amount = new RandomAmount(config.getString("amount"));
|
||||
operation = config.contains("operation") ? Operation.valueOf(config.getString("operation").toUpperCase()) : Operation.GIVE;
|
||||
}
|
||||
config.validate("amount");
|
||||
amount = new RandomAmount(config.getString("amount"));
|
||||
operation = config.contains("operation") ? Operation.valueOf(config.getString("operation").toUpperCase()) : Operation.GIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
@Override
|
||||
public void apply(PlayerData player) {
|
||||
|
||||
// Give stellium
|
||||
if (operation == Operation.GIVE)
|
||||
player.giveStellium(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
// Give stellium
|
||||
if (operation == Operation.GIVE)
|
||||
player.giveStellium(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
|
||||
// Set stellium
|
||||
else if (operation == Operation.SET)
|
||||
player.setStellium(amount.calculate());
|
||||
// Set stellium
|
||||
else if (operation == Operation.SET)
|
||||
player.setStellium(amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
|
||||
// Take stellium
|
||||
else
|
||||
player.giveStellium(-amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
}
|
||||
// Take stellium
|
||||
else player.giveStellium(-amount.calculate(), PlayerResourceUpdateEvent.UpdateReason.TRIGGER);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.api.quest.trigger;
|
||||
|
||||
import io.lumine.mythic.lib.api.MMOLineConfig;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.quest.trigger.api.Removable;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
|
||||
public class UnlockSlotTrigger extends Trigger implements Removable {
|
||||
|
||||
@ -3,14 +3,17 @@ package net.Indyuce.mmocore.api.util;
|
||||
import com.google.common.collect.MultimapBuilder;
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.gson.JsonArray;
|
||||
import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.hologram.Hologram;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import io.lumine.mythic.lib.version.Attributes;
|
||||
import io.lumine.mythic.lib.version.VEnchantment;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.util.Icon;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
@ -51,6 +54,12 @@ public class MMOCoreUtils {
|
||||
return player.getName() == null;
|
||||
}
|
||||
|
||||
public static boolean callLegacyCommandEvent(PlayerData playerData, CommandTreeRoot command) {
|
||||
final var called = new MMOCommandEvent(playerData, command);
|
||||
Bukkit.getServer().getPluginManager().callEvent(called);
|
||||
return called.isCancelled();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String displayName(ItemStack item) {
|
||||
return item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName()
|
||||
@ -62,7 +71,10 @@ public class MMOCoreUtils {
|
||||
* @param maxStat Maximum value of resource
|
||||
* @return Clamped resource value. If the provided current value is 0,
|
||||
* this function will return the maximum resource value.
|
||||
* @deprecated Not used anymore
|
||||
* @see UtilityMethods#setHealth(LivingEntity, double)
|
||||
*/
|
||||
@Deprecated
|
||||
public static double fixResource(double current, double maxStat) {
|
||||
return current == 0 ? maxStat : Math.max(0, Math.min(current, maxStat));
|
||||
}
|
||||
@ -125,6 +137,7 @@ public class MMOCoreUtils {
|
||||
return material == Material.PLAYER_HEAD || material == Material.PLAYER_WALL_HEAD;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void addAllItemFlags(@NotNull ItemMeta meta) {
|
||||
meta.addItemFlags(ItemFlag.values());
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package net.Indyuce.mmocore.api.util.math.formula;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
|
||||
@ -0,0 +1,137 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.command.argument.ArgumentParseException;
|
||||
import io.lumine.mythic.lib.command.argument.PermissionException;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
import net.Indyuce.mmocore.api.quest.Quest;
|
||||
import net.Indyuce.mmocore.experience.Booster;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import net.Indyuce.mmocore.waypoint.Waypoint;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class Arguments {
|
||||
|
||||
public static final Argument<@NotNull PlayerClass> CLASS = new Argument<>("class",
|
||||
(explorer, list) -> MMOCore.plugin.classManager.getAll().forEach(profess -> list.add(profess.getId())),
|
||||
(explorer, input) -> {
|
||||
final var profess = MMOCore.plugin.classManager.get(input.toUpperCase().replace("-", "_"));
|
||||
if (profess == null) throw new ArgumentParseException("Could not find class with ID '" + input + "'");
|
||||
return profess;
|
||||
});
|
||||
|
||||
public static final Argument<@NotNull Waypoint> WAYPOINT = new Argument<>("waypoint",
|
||||
(explorer, list) -> MMOCore.plugin.waypointManager.getAll().forEach(way -> list.add(way.getId())),
|
||||
(explorer, input) -> {
|
||||
final var waypoint = MMOCore.plugin.waypointManager.get(input);
|
||||
if (waypoint == null)
|
||||
throw new ArgumentParseException("Could not find waypoint with ID '" + input + "'");
|
||||
return waypoint;
|
||||
});
|
||||
|
||||
public static final Argument<@Nullable String> ACCEPT_OR_DENY_OPTIONAL = Argument.choices("accept/deny", "accept", "deny").withFallback(explorer -> null);
|
||||
|
||||
public static final Argument<@NotNull Player> PLAYER_IF_OP = new Argument<>("player",
|
||||
(explorer, list) -> {
|
||||
if (!explorer.getSender().hasPermission("mmocore.admin")) return;
|
||||
Bukkit.getOnlinePlayers().forEach(online -> list.add(online.getName()));
|
||||
},
|
||||
(explorer, input) -> {
|
||||
if (!explorer.getSender().hasPermission("mmocore.admin")) throw new PermissionException();
|
||||
|
||||
final var player = Bukkit.getPlayer(input);
|
||||
Validate.notNull(player, "Could not find player " + input);
|
||||
return player;
|
||||
}, explorer -> {
|
||||
if (explorer.getSender() instanceof Player) return (Player) explorer.getSender();
|
||||
throw new ArgumentParseException("Please provide a player");
|
||||
});
|
||||
|
||||
public static final Argument<@NotNull PlayerAttribute> ATTRIBUTE = new Argument<>("attribute",
|
||||
(explorer, list) -> MMOCore.plugin.attributeManager.getAll().forEach(attribute -> list.add(attribute.getId())),
|
||||
(explorer, input) -> {
|
||||
final var attribute = MMOCore.plugin.attributeManager.get(input);
|
||||
if (attribute == null)
|
||||
throw new ArgumentParseException("Could not find attribute with ID '" + input + "'");
|
||||
return attribute;
|
||||
});
|
||||
|
||||
public static final Argument<@NotNull RegisteredSkill> SKILL = new Argument<>("skill",
|
||||
(explorer, list) -> MMOCore.plugin.skillManager.getAll().forEach(skill -> list.add(skill.getHandler().getId().toUpperCase())),
|
||||
(explorer, input) -> {
|
||||
final var skill = MMOCore.plugin.skillManager.getSkill(input);
|
||||
if (skill == null) throw new ArgumentParseException("Could not find skill with ID '" + input + "'");
|
||||
return skill;
|
||||
});
|
||||
|
||||
public static final Argument<Profession> PROFESSION = new Argument<>("profession/main", (explorer, list) -> {
|
||||
MMOCore.plugin.professionManager.getAll().forEach(profession -> list.add(profession.getId()));
|
||||
list.add("main");
|
||||
}, (explorer, input) -> {
|
||||
if (input.equalsIgnoreCase("main")) return null;
|
||||
final var profession = MMOCore.plugin.professionManager.get(input);
|
||||
if (profession == null) throw new ArgumentParseException("Could not find profession with ID '" + input + "'");
|
||||
return profession;
|
||||
});
|
||||
|
||||
public static final Argument<Booster> BOOSTER = new Argument<>("booster_id",
|
||||
(explorer, list) -> MMOCore.plugin.boosterManager.getActive().forEach(booster -> list.add(String.valueOf(booster.getUniqueId()))),
|
||||
(explorer, input) -> {
|
||||
try {
|
||||
final var uuid = java.util.UUID.fromString(input);
|
||||
for (Booster booster : MMOCore.plugin.boosterManager.getActive())
|
||||
if (booster.getUniqueId().equals(uuid))
|
||||
return booster;
|
||||
throw new ArgumentParseException("Could not find active booster with ID '" + input + "'");
|
||||
} catch (IllegalArgumentException exception) {
|
||||
throw new ArgumentParseException("Invalid UUID '" + input + "'");
|
||||
}
|
||||
});
|
||||
|
||||
public static final Argument<Quest> QUEST = new Argument<>("quest",
|
||||
(explorer, list) -> MMOCore.plugin.questManager.getAll().forEach(quest -> list.add(quest.getId())),
|
||||
(explorer, input) -> {
|
||||
final var quest = MMOCore.plugin.questManager.get(input);
|
||||
if (quest == null) throw new ArgumentParseException("Could not find quest with ID '" + input + "'");
|
||||
return quest;
|
||||
});
|
||||
|
||||
public static final Argument<SkillTree> SKILL_TREE = new Argument<>("skill_tree_id",
|
||||
(explorer, list) -> MMOCore.plugin.skillTreeManager.getAll().forEach(skillTree -> list.add(skillTree.getId())),
|
||||
(explorer, input) -> {
|
||||
final var skillTree = MMOCore.plugin.skillTreeManager.get(input);
|
||||
if (skillTree == null)
|
||||
throw new ArgumentParseException("Could not find skill tree with ID '" + input + "'");
|
||||
return skillTree;
|
||||
});
|
||||
|
||||
public static final String SKILL_TREE_GLOBAL_KEY = "global";
|
||||
|
||||
public static final Argument<@Nullable SkillTree> SKILL_TREE_OR_GLOBAL = new Argument<>("skill_tree_id",
|
||||
(explorer, list) -> {
|
||||
list.add("global");
|
||||
MMOCore.plugin.skillTreeManager.getAll().forEach(skillTree -> list.add(skillTree.getId()));
|
||||
},
|
||||
(explorer, input) -> {
|
||||
if (input.equalsIgnoreCase(SKILL_TREE_GLOBAL_KEY)) return null;
|
||||
final var skillTree = MMOCore.plugin.skillTreeManager.get(input);
|
||||
if (skillTree == null)
|
||||
throw new ArgumentParseException("Could not find skill tree with ID '" + input + "' and not '" + SKILL_TREE_GLOBAL_KEY + "'");
|
||||
return skillTree;
|
||||
});
|
||||
|
||||
public static final Argument<@NotNull Integer> INDEX = Argument.AMOUNT_INT
|
||||
.withKey("index")
|
||||
.withAutoComplete((explorer, list) -> {
|
||||
for (int j = 1; j <= 9; j++)
|
||||
list.add(String.valueOf(j));
|
||||
});
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class AttributesCommand extends RegisteredCommand {
|
||||
public AttributesCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.attributes"))
|
||||
return false;
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "attributes");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if(!event.isCancelled()) InventoryManager.ATTRIBUTE_VIEW.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,40 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class ClassCommand extends RegisteredCommand {
|
||||
public ClassCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.CLASS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.class-select"))
|
||||
return false;
|
||||
|
||||
Player player = args.length > 0 && sender.hasPermission("mmocore.admin") ? Bukkit.getPlayer(args[0]) : sender instanceof Player ? (Player) sender : null;
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Please specify a valid player.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "class");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if(event.isCancelled()) return true;
|
||||
if (data.getProfess().getSubclasses().stream().anyMatch(sub -> sub.getLevel() <= data.getLevel()))
|
||||
InventoryManager.SUBCLASS_SELECT.newInventory(data).open();
|
||||
else
|
||||
InventoryManager.CLASS_SELECT.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,47 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.gui.eco.DepositMenu;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class DepositCommand extends RegisteredCommand {
|
||||
public DepositCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.DEPOSIT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.currency"))
|
||||
return false;
|
||||
|
||||
Player player = args.length > 0 && sender.hasPermission("mmocore.admin") ? Bukkit.getPlayer(args[0]) : sender instanceof Player ? (Player) sender : null;
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Please specify a valid player.");
|
||||
return true;
|
||||
}
|
||||
|
||||
// if (sender instanceof Player)
|
||||
// if (!isNearEnderchest(((Player) sender).getLocation())) {
|
||||
// sender.sendMessage(ConfigMessage.fromKey("stand-near-enderchest"));
|
||||
// return true;
|
||||
// }
|
||||
|
||||
new DepositMenu(player).open();
|
||||
return true;
|
||||
}
|
||||
|
||||
// private boolean isNearEnderchest(Location loc) {
|
||||
// for (int x = -5; x < 6; x++)
|
||||
// for (int y = -5; y < 6; y++)
|
||||
// for (int z = -5; z < 6; z++)
|
||||
// if (loc.clone().add(x, y, z).getBlock().getType() ==
|
||||
// Material.ENDER_CHEST)
|
||||
// return true;
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
@ -1,74 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.FriendRequest;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class FriendsCommand extends RegisteredCommand {
|
||||
public FriendsCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.FRIENDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.friends"))
|
||||
return false;
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "friends");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return true;
|
||||
|
||||
if (args.length > 1) {
|
||||
|
||||
final @Nullable FriendRequest invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(args[1]);
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(uuid);
|
||||
Validate.isTrue(!req.isTimedOut() && req instanceof FriendRequest);
|
||||
Validate.isTrue(!data.hasFriend(req.getCreator().getUniqueId()));
|
||||
invite = (FriendRequest) req;
|
||||
} catch (Exception exception) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else
|
||||
invite = MMOCore.plugin.requestManager.findRequest(data, FriendRequest.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null)
|
||||
return true;
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept"))
|
||||
invite.accept();
|
||||
if (args[0].equalsIgnoreCase("deny"))
|
||||
invite.deny();
|
||||
return true;
|
||||
}
|
||||
|
||||
InventoryManager.FRIEND_LIST.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.guild.provided.GuildInvite;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class GuildCommand extends RegisteredCommand {
|
||||
public GuildCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.GUILD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.guild"))
|
||||
return false;
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get((OfflinePlayer) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "guild");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return true;
|
||||
|
||||
if (args.length >= 1) {
|
||||
|
||||
final @Nullable GuildInvite invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(args[1]);
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(uuid);
|
||||
Validate.isTrue(!req.isTimedOut() && req instanceof GuildInvite);
|
||||
invite = (GuildInvite) req;
|
||||
Validate.isTrue(MMOCore.plugin.nativeGuildManager.isRegistered(invite.getGuild()));
|
||||
} catch (Exception exception) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else
|
||||
invite = MMOCore.plugin.requestManager.findRequest(data, GuildInvite.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null)
|
||||
return true;
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept"))
|
||||
invite.accept();
|
||||
if (args[0].equalsIgnoreCase("deny"))
|
||||
invite.deny();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (data.inGuild())
|
||||
InventoryManager.GUILD_VIEW.newInventory(data).open();
|
||||
else
|
||||
InventoryManager.GUILD_CREATION.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,39 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.command.rpg.CastCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.CoinsCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.NoteCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.ReloadCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.admin.AdminCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.booster.BoosterCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.debug.DebugCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.quest.QuestCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.rpg.waypoint.WaypointsCommandTreeNode;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
|
||||
public class MMOCoreCommandTreeRoot extends CommandTreeRoot implements CommandExecutor, TabCompleter {
|
||||
public static final Parameter PROFESSION = new Parameter("<profession/main>", (explorer, list) -> {
|
||||
MMOCore.plugin.professionManager.getAll().forEach(profession -> list.add(profession.getId()));
|
||||
list.add("main");
|
||||
});
|
||||
public static final Parameter QUEST = new Parameter("<quest>",
|
||||
(explorer, list) -> MMOCore.plugin.questManager.getAll().forEach(quest -> list.add(quest.getId())));
|
||||
|
||||
public MMOCoreCommandTreeRoot() {
|
||||
super("mmocore", "mmocore.admin");
|
||||
|
||||
addChild(new ReloadCommandTreeNode(this));
|
||||
addChild(new CastCommandTreeNode(this));
|
||||
addChild(new CoinsCommandTreeNode(this));
|
||||
addChild(new NoteCommandTreeNode(this));
|
||||
addChild(new AdminCommandTreeNode(this));
|
||||
addChild(new DebugCommandTreeNode(this));
|
||||
addChild(new BoosterCommandTreeNode(this));
|
||||
addChild(new WaypointsCommandTreeNode(this));
|
||||
addChild(new QuestCommandTreeNode(this));
|
||||
}
|
||||
}
|
||||
@ -1,82 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import net.Indyuce.mmocore.party.provided.PartyInvite;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class PartyCommand extends RegisteredCommand {
|
||||
public PartyCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.PARTY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.party"))
|
||||
return false;
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return true;
|
||||
}
|
||||
if(!(MMOCore.plugin.partyModule instanceof MMOCorePartyModule)){
|
||||
sender.sendMessage(ChatColor.RED+"You can't use MMOCore party system as you delegated the party system to another plugin.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get((OfflinePlayer) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "party");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return true;
|
||||
|
||||
if (args.length > 0) {
|
||||
|
||||
final @Nullable PartyInvite invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(UUID.fromString(args[1]));
|
||||
Validate.isTrue(req instanceof PartyInvite && !req.isTimedOut());
|
||||
invite = (PartyInvite) req;
|
||||
Validate.isTrue(((MMOCorePartyModule) MMOCore.plugin.partyModule).isRegistered(invite.getParty()));
|
||||
} catch (Exception exception) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else
|
||||
invite = MMOCore.plugin.requestManager.findRequest(data, PartyInvite.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null)
|
||||
return true;
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept"))
|
||||
invite.accept();
|
||||
else if (args[0].equalsIgnoreCase("deny"))
|
||||
invite.deny();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (data.getParty() != null)
|
||||
InventoryManager.PARTY_VIEW.newInventory(data).open();
|
||||
else
|
||||
InventoryManager.PARTY_CREATION.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerStatsCommand extends RegisteredCommand {
|
||||
public PlayerStatsCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.PLAYER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.profile"))
|
||||
return false;
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "profile");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) InventoryManager.PLAYER_STATS.newInventory(data).open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,63 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.comp.flags.CustomFlag;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PvpModeCommand extends RegisteredCommand {
|
||||
public PvpModeCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.PVP_MODE);
|
||||
}
|
||||
|
||||
public static final String COOLDOWN_KEY = "PvpMode";
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("mmocore.pvpmode")) {
|
||||
Message.NOT_ENOUGH_PERMS.send((Player) sender);
|
||||
return false;
|
||||
}
|
||||
|
||||
final PlayerData playerData = PlayerData.get((Player) sender);
|
||||
|
||||
// Command cooldown
|
||||
if (playerData.getCooldownMap().isOnCooldown(COOLDOWN_KEY)) {
|
||||
var remainingFormatted = MythicLib.plugin.getMMOConfig().decimal.format(playerData.getCooldownMap().getCooldown(COOLDOWN_KEY));
|
||||
Message.PVP_MODE_COOLDOWN.send((Player) sender, "remaining", remainingFormatted);
|
||||
return true;
|
||||
}
|
||||
|
||||
playerData.getCombat().setPvpMode(!playerData.getCombat().isInPvpMode());
|
||||
playerData.getCooldownMap().applyCooldown(COOLDOWN_KEY, playerData.getCombat().isInPvpMode() ? MMOCore.plugin.configManager.pvpModeToggleOnCooldown : MMOCore.plugin.configManager.pvpModeToggleOffCooldown);
|
||||
|
||||
// Toggling on when in PVP region
|
||||
// Give invulnerability for a short time
|
||||
if (playerData.getCombat().isInPvpMode() &&
|
||||
MythicLib.plugin.getFlags().isFlagAllowed(playerData.getPlayer(), CustomFlag.PVP_MODE)) {
|
||||
playerData.getCombat().setInvulnerable(MMOCore.plugin.configManager.pvpModeInvulnerabilityTimeCommand);
|
||||
var timeFormatted = MythicLib.plugin.getMMOConfig().decimal.format(MMOCore.plugin.configManager.pvpModeInvulnerabilityTimeCommand);
|
||||
Message.PVP_MODE_TOGGLE_ON_INVULNERABLE.send((Player) sender, "time", timeFormatted);
|
||||
}
|
||||
|
||||
// Just send message otherwise
|
||||
else {
|
||||
var currentPvpMode = playerData.getCombat().isInPvpMode();
|
||||
(currentPvpMode ? Message.PVP_MODE_TOGGLE_ON_SAFE : Message.PVP_MODE_TOGGLE_OFF_SAFE).send((Player) sender);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class QuestsCommand extends RegisteredCommand {
|
||||
public QuestsCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.QUESTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.quests"))
|
||||
return false;
|
||||
if (sender instanceof Player) {
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "quests");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if(!event.isCancelled()) InventoryManager.QUEST_LIST.newInventory(data).open();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SkillTreesCommand extends RegisteredCommand {
|
||||
public SkillTreesCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.SKILL_TREES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(@NotNull CommandSender sender, @NotNull String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.skilltrees")) return false;
|
||||
if (!(sender instanceof Player)) return false;
|
||||
|
||||
final Player player = (Player) sender;
|
||||
PlayerData data = PlayerData.get(player);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "skilltrees");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled())
|
||||
return false;
|
||||
|
||||
// Default skilltree command
|
||||
if (args.length == 0) {
|
||||
if (!MMOCore.plugin.configManager.enableGlobalSkillTreeGUI) {
|
||||
sender.sendMessage(ChatColor.RED + "Usage: /skilltrees <skilltree_id>");
|
||||
return false;
|
||||
}
|
||||
if (!data.getProfess().getSkillTrees().isEmpty()) {
|
||||
InventoryManager.TREE_VIEW.newInventory(data).open();
|
||||
return true;
|
||||
} else {
|
||||
Message.NO_SKILL_TREE.send(player);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Specific skilltree command
|
||||
if (args.length == 1) {
|
||||
if (!MMOCore.plugin.configManager.enableSpecificSkillTreeGUI) {
|
||||
sender.sendMessage(ChatColor.RED + "Usage: /skilltrees <skilltree-id>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (data.getProfess().getSkillTrees()
|
||||
.stream()
|
||||
.filter(skillTree -> UtilityMethods.ymlName(skillTree.getId()).equals(UtilityMethods.ymlName(args[0])))
|
||||
.collect(Collectors.toList())
|
||||
.size() != 0) {
|
||||
InventoryManager.SPECIFIC_TREE_VIEW.get(UtilityMethods.ymlName(args[0])).newInventory(data).open();
|
||||
return true;
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "Your class does not have a skill tree with id: " + args[0]);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (MMOCore.plugin.configManager.enableSpecificSkillTreeGUI)
|
||||
sender.sendMessage(ChatColor.RED + "Usage: /skilltrees <skilltree-id>");
|
||||
else
|
||||
sender.sendMessage(ChatColor.RED + "Usage: /skilltrees");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class SkillsCommand extends RegisteredCommand {
|
||||
public SkillsCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.SKILLS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.skills")) return false;
|
||||
|
||||
if (sender instanceof Player) {
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "skills");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return true;
|
||||
|
||||
if (data.getUnlockedSkills().isEmpty()) {
|
||||
Message.NO_CLASS_SKILL.send((Player) sender);
|
||||
return true;
|
||||
}
|
||||
|
||||
InventoryManager.SKILL_LIST.newInventory(data).open();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,107 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.util.config.YamlFile;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.command.builtin.*;
|
||||
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* Commands which can be disabled using commands.yml
|
||||
*/
|
||||
public enum ToggleableCommand {
|
||||
PLAYER("player", "mmocore.profile", "Displays player stats", PlayerStatsCommand::new, "p", "profile"),
|
||||
ATTRIBUTES("attributes", "mmocore.attributes", "Display and manage attributes", AttributesCommand::new, "att", "stats"),
|
||||
CLASS("class", "mmocore.class-select", "Select a new class", ClassCommand::new, "c"),
|
||||
WAYPOINTS("waypoints", "mmocore.waypoints", "Display discovered waypoints", WaypointsCommand::new, "wp"),
|
||||
QUESTS("quests", "mmocore.quests", "Display available quests", QuestsCommand::new, "q", "journal"),
|
||||
SKILLS("skills", "mmocore.skills", "Spend skill points to unlock new skills", SkillsCommand::new, "s"),
|
||||
FRIENDS("friends", "mmocore.friends", "Show online/offline friends", FriendsCommand::new, "f"),
|
||||
PARTY("party", "mmocore.party", "Invite players in a party to split exp", PartyCommand::new, () -> (MMOCore.plugin.partyModule instanceof MMOCorePartyModule)),
|
||||
GUILD("guild", "mmocore.guild", "Show players in current guild", GuildCommand::new),
|
||||
WITHDRAW("withdraw", "mmocore.currency", "Withdraw money into coins and notes", WithdrawCommand::new, () -> MMOCore.plugin.hasEconomy() && MMOCore.plugin.economy.isValid(), "w"),
|
||||
SKILL_TREES("skilltrees", "mmocore.skilltrees", "Open up the skill tree menu", SkillTreesCommand::new, "st", "trees", "tree"),
|
||||
DEPOSIT("deposit", "mmocore.currency", "Open the currency deposit menu", DepositCommand::new, "d"),
|
||||
PVP_MODE("pvpmode", "mmocore.pvpmode", "Toggle on/off PVP mode.", PvpModeCommand::new, "pvp");
|
||||
|
||||
private final String mainLabel;
|
||||
private final String description, permission;
|
||||
private final Function<ConfigurationSection, CommandTreeRoot> generator;
|
||||
private final List<String> aliases;
|
||||
private final Supplier<Boolean> enabled;
|
||||
|
||||
ToggleableCommand(@NotNull String mainLabel, @Nullable String permission, @NotNull String description, @NotNull Function<ConfigurationSection, CommandTreeRoot> generator, @NotNull String... aliases) {
|
||||
this(mainLabel, permission, description, generator, null, aliases);
|
||||
}
|
||||
|
||||
ToggleableCommand(@NotNull String mainLabel, @Nullable String permission, @NotNull String description, @NotNull Function<ConfigurationSection, CommandTreeRoot> generator, @Nullable Supplier<Boolean> enabled, @NotNull String... aliases) {
|
||||
this.mainLabel = mainLabel;
|
||||
this.permission = permission;
|
||||
this.description = description;
|
||||
this.generator = generator;
|
||||
this.aliases = Arrays.asList(aliases);
|
||||
this.enabled = enabled == null ? () -> true : enabled;
|
||||
}
|
||||
|
||||
public String getMainLabel() {
|
||||
return mainLabel;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
public List<String> getAliases() {
|
||||
return aliases;
|
||||
}
|
||||
|
||||
public String getConfigPath() {
|
||||
return name().toLowerCase().replace("_", "-");
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled.get();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void register() {
|
||||
loadCommands();
|
||||
}
|
||||
|
||||
public static void loadCommands() {
|
||||
|
||||
// Load default config file
|
||||
final var config = new YamlFile(MMOCore.plugin, "commands");
|
||||
if (!config.exists()) {
|
||||
for (ToggleableCommand cmd : values()) {
|
||||
final String path = cmd.getConfigPath();
|
||||
config.getContent().set(path + ".main", cmd.mainLabel);
|
||||
config.getContent().set(path + ".aliases", cmd.aliases);
|
||||
config.getContent().set(path + ".description", cmd.description);
|
||||
config.getContent().set(path + ".permission", cmd.permission);
|
||||
config.getContent().set(path + ".verbose", "ALL");
|
||||
}
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
// Enable commands individually
|
||||
final var commandMap = UtilityMethods.getCommandMap();
|
||||
for (var cmd : values())
|
||||
if (cmd.enabled.get() && config.getContent().contains(cmd.getConfigPath()))
|
||||
commandMap.register("mmocore", cmd.generator.apply(config.getContent().getConfigurationSection(cmd.getConfigPath())).toBukkit());
|
||||
}
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class WaypointsCommand extends RegisteredCommand {
|
||||
public WaypointsCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.WAYPOINTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (sender instanceof Player && sender.hasPermission("mmocore.waypoints")) {
|
||||
PlayerData data = PlayerData.get((Player) sender);
|
||||
MMOCommandEvent event = new MMOCommandEvent(data, "waypoints");
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if(!event.isCancelled()) InventoryManager.WAYPOINTS.newInventory(data).open();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
package net.Indyuce.mmocore.command;
|
||||
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.eco.Withdraw;
|
||||
import net.Indyuce.mmocore.command.api.RegisteredCommand;
|
||||
import net.Indyuce.mmocore.command.api.ToggleableCommand;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class WithdrawCommand extends RegisteredCommand {
|
||||
public WithdrawCommand(ConfigurationSection config) {
|
||||
super(config, ToggleableCommand.WITHDRAW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||
if (!sender.hasPermission("mmocore.currency"))
|
||||
return false;
|
||||
|
||||
final Player player;
|
||||
if (args.length >= 2 && sender.hasPermission("mmocore.admin")) player = Bukkit.getPlayer(args[0]);
|
||||
else if (args.length == 1 && sender.hasPermission("mmocore.admin")) {
|
||||
Player tryFirstArg = Bukkit.getPlayer(args[0]);
|
||||
player = tryFirstArg != null ? tryFirstArg : sender instanceof Player ? (Player) sender : null;
|
||||
} else if (sender instanceof Player) player = (Player) sender;
|
||||
else player = null;
|
||||
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Please specify a valid player.");
|
||||
return true;
|
||||
}
|
||||
|
||||
int amount;
|
||||
try {
|
||||
if (args.length == 0) amount = 0;
|
||||
else amount = Integer.parseInt(args[args.length - 1]);
|
||||
Validate.isTrue(amount >= 0);
|
||||
} catch (IllegalArgumentException exception) {
|
||||
if (sender instanceof Player)
|
||||
Message.WITHDRAW_INVALID_AMOUNT.prepare("arg", args[0]).send((MMOPlayerData) sender);
|
||||
else sender.sendMessage(ChatColor.RED + "Please specify a valid number.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Withdraw request = new Withdraw(player);
|
||||
|
||||
if (amount == 0) {
|
||||
request.open();
|
||||
return true;
|
||||
}
|
||||
|
||||
int left = (int) MMOCore.plugin.economy.getEconomy().getBalance(player) - amount;
|
||||
if (left < 0) {
|
||||
Message.WITHDRAW_NOT_ENOUGH_MONEY.send(player, "left", -left);
|
||||
return true;
|
||||
}
|
||||
|
||||
MMOCore.plugin.economy.getEconomy().withdrawPlayer(player, amount);
|
||||
request.withdrawAlgorithm(amount);
|
||||
Message.WITHDRAW_SUCCESS.send(player, "worth", amount);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
package net.Indyuce.mmocore.command.api;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class CommandVerbose {
|
||||
private final Map<CommandType, VerboseValue> values = new HashMap<>();
|
||||
|
||||
public void reload(ConfigurationSection config) {
|
||||
values.clear();
|
||||
for (CommandType type : CommandType.values())
|
||||
try {
|
||||
values.put(type, VerboseValue.valueOf(config.getString(UtilityMethods.ymlName(type.name()), "TRUE").toUpperCase()));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
values.put(type, VerboseValue.TRUE);
|
||||
MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load command verbose action for " + type.name());
|
||||
}
|
||||
}
|
||||
|
||||
public void handle(CommandSender sender, CommandType type, String verbose) {
|
||||
switch (values.getOrDefault(type, VerboseValue.FALSE)) {
|
||||
case FALSE:
|
||||
return;
|
||||
case TRUE:
|
||||
sender.sendMessage(verbose);
|
||||
break;
|
||||
case PLAYER:
|
||||
if (sender instanceof Player)
|
||||
sender.sendMessage(verbose);
|
||||
break;
|
||||
case CONSOLE:
|
||||
if (sender instanceof ConsoleCommandSender)
|
||||
sender.sendMessage(verbose);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void verbose(CommandSender sender, CommandType cmd, String verbose) {
|
||||
MMOCore.plugin.configManager.commandVerbose.handle(sender, cmd, verbose);
|
||||
}
|
||||
|
||||
public enum CommandType {
|
||||
ATTRIBUTE,
|
||||
SKILL,
|
||||
CLASS,
|
||||
EXPERIENCE,
|
||||
LEVEL,
|
||||
NOCD,
|
||||
POINTS,
|
||||
SKILL_TREE_POINTS,
|
||||
RESET,
|
||||
RESOURCE,
|
||||
WAYPOINT;
|
||||
}
|
||||
|
||||
private enum VerboseValue {
|
||||
TRUE,
|
||||
PLAYER,
|
||||
CONSOLE,
|
||||
FALSE
|
||||
}
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
package net.Indyuce.mmocore.command.api;
|
||||
|
||||
import org.bukkit.command.defaults.BukkitCommand;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class RegisteredCommand extends BukkitCommand {
|
||||
public RegisteredCommand(@NotNull ConfigurationSection config, ToggleableCommand command) {
|
||||
super(config.getString("main"));
|
||||
|
||||
setAliases(config.getStringList("aliases"));
|
||||
setDescription(config.getString("description", command.getDescription()));
|
||||
}
|
||||
}
|
||||
@ -1,111 +0,0 @@
|
||||
package net.Indyuce.mmocore.command.api;
|
||||
|
||||
import io.lumine.mythic.lib.util.config.YamlFile;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.command.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandMap;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* Commands which can be disabled using commands.yml
|
||||
*/
|
||||
public enum ToggleableCommand {
|
||||
PLAYER("player", "Displays player stats", config -> new PlayerStatsCommand(config), "p", "profile"),
|
||||
ATTRIBUTES("attributes", "Display and manage attributes", config -> new AttributesCommand(config), "att", "stats"),
|
||||
CLASS("class", "Select a new class", config -> new ClassCommand(config), "c"),
|
||||
WAYPOINTS("waypoints", "Display discovered waypoints", config -> new WaypointsCommand(config), "wp"),
|
||||
QUESTS("quests", "Display available quests", config -> new QuestsCommand(config), "q", "journal"),
|
||||
SKILLS("skills", "Spend skill points to unlock new skills", config -> new SkillsCommand(config), "s"),
|
||||
FRIENDS("friends", "Show online/offline friends", config -> new FriendsCommand(config), "f"),
|
||||
PARTY("party", "Invite players in a party to split exp", config -> new PartyCommand(config)),
|
||||
GUILD("guild", "Show players in current guild", config -> new GuildCommand(config)),
|
||||
WITHDRAW("withdraw", "Withdraw money into coins and notes", config -> new WithdrawCommand(config), v -> MMOCore.plugin.hasEconomy() && MMOCore.plugin.economy.isValid(), "w"),
|
||||
SKILL_TREES("skilltrees", "Open up the skill tree menu", config -> new SkillTreesCommand(config), "st", "trees", "tree"),
|
||||
DEPOSIT("deposit", "Open the currency deposit menu", config -> new DepositCommand(config), "d"),
|
||||
PVP_MODE("pvpmode", "Toggle on/off PVP mode.", config -> new PvpModeCommand(config), "pvp");
|
||||
|
||||
private final String mainLabel;
|
||||
private final String description;
|
||||
private final Function<ConfigurationSection, RegisteredCommand> generator;
|
||||
private final List<String> aliases;
|
||||
private final Predicate<Void> enabled;
|
||||
|
||||
ToggleableCommand(@NotNull String mainLabel, @NotNull String description, @NotNull Function<ConfigurationSection, RegisteredCommand> generator, @NotNull String... aliases) {
|
||||
this(mainLabel, description, generator, null, aliases);
|
||||
}
|
||||
|
||||
ToggleableCommand(@NotNull String mainLabel, @NotNull String description, @NotNull Function<ConfigurationSection, RegisteredCommand> generator, @Nullable Predicate<Void> enabled, @NotNull String... aliases) {
|
||||
this.mainLabel = mainLabel;
|
||||
this.description = description;
|
||||
this.generator = generator;
|
||||
this.aliases = Arrays.asList(aliases);
|
||||
this.enabled = enabled == null ? v -> true : enabled;
|
||||
}
|
||||
|
||||
public String getMainLabel() {
|
||||
return mainLabel;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public List<String> getAliases() {
|
||||
return aliases;
|
||||
}
|
||||
|
||||
public String getConfigPath() {
|
||||
return name().toLowerCase().replace("_", "-");
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled.test(null);
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
|
||||
// Load default config file
|
||||
if (!new File(MMOCore.plugin.getDataFolder(), "commands.yml").exists()) {
|
||||
final var config = new YamlFile(MMOCore.plugin, "commands");
|
||||
|
||||
for (ToggleableCommand cmd : values()) {
|
||||
final String path = cmd.getConfigPath();
|
||||
config.getContent().set(path + ".main", cmd.mainLabel);
|
||||
config.getContent().set(path + ".aliases", cmd.aliases);
|
||||
config.getContent().set(path + ".description", cmd.description);
|
||||
}
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
|
||||
// Find command map
|
||||
final Field commandMapField = Bukkit.getServer().getClass().getDeclaredField("commandMap");
|
||||
commandMapField.setAccessible(true);
|
||||
final CommandMap commandMap = (CommandMap) commandMapField.get(Bukkit.getServer());
|
||||
|
||||
// Enable commands individually
|
||||
final var config = new YamlFile(MMOCore.plugin, "commands").getContent();
|
||||
for (ToggleableCommand cmd : values())
|
||||
if (cmd.isEnabled() && config.contains(cmd.getConfigPath()))
|
||||
commandMap.register("mmocore", cmd.generator.apply(config.getConfigurationSection(cmd.getConfigPath())));
|
||||
|
||||
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException exception) {
|
||||
MMOCore.plugin.getLogger().log(Level.WARNING, "Unable to register custom commands:");
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class AttributesCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public AttributesCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
InventoryManager.ATTRIBUTE_VIEW.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClassCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public ClassCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Main class or subclass
|
||||
if (playerData.getProfess().getSubclasses().stream().anyMatch(sub -> sub.getLevel() <= playerData.getLevel()))
|
||||
InventoryManager.SUBCLASS_SELECT.newInventory(playerData).open();
|
||||
else InventoryManager.CLASS_SELECT.newInventory(playerData).open();
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.gui.eco.DepositMenu;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DepositCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public DepositCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(PlayerData.get(player), this)) return CommandResult.FAILURE;
|
||||
|
||||
// if (sender instanceof Player)
|
||||
// if (!isNearEnderchest(((Player) sender).getLocation())) {
|
||||
// sender.sendMessage(ConfigMessage.fromKey("stand-near-enderchest"));
|
||||
// return true;
|
||||
// }
|
||||
|
||||
new DepositMenu(player).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
// private boolean isNearEnderchest(Location loc) {
|
||||
// for (int x = -5; x < 6; x++)
|
||||
// for (int y = -5; y < 6; y++)
|
||||
// for (int z = -5; z < 6; z++)
|
||||
// if (loc.clone().add(x, y, z).getBlock().getType() ==
|
||||
// Material.ENDER_CHEST)
|
||||
// return true;
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.FriendRequest;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class FriendsCommand extends CommandTreeRoot {
|
||||
private final Argument<String> argAction;
|
||||
|
||||
public FriendsCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argAction = addArgument(Arguments.ACCEPT_OR_DENY_OPTIONAL);
|
||||
setOnlyForPlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var action = explorer.parse(argAction);
|
||||
|
||||
PlayerData playerData = PlayerData.get((Player) sender);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Open inventory
|
||||
if (action == null) {
|
||||
InventoryManager.FRIEND_LIST.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
final @Nullable FriendRequest invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(args[1]);
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(uuid);
|
||||
Validate.isTrue(!req.isTimedOut() && req instanceof FriendRequest);
|
||||
Validate.isTrue(!playerData.hasFriend(req.getCreator().getUniqueId()));
|
||||
invite = (FriendRequest) req;
|
||||
} catch (Exception exception) {
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else invite = MMOCore.plugin.requestManager.findRequest(playerData, FriendRequest.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null) {
|
||||
Message.FRIEND_NO_PENDING_INVITE.send(playerData);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept")) invite.accept();
|
||||
if (args[0].equalsIgnoreCase("deny")) invite.deny();
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.guild.provided.GuildInvite;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class GuildCommand extends CommandTreeRoot {
|
||||
private final Argument<String> argAction;
|
||||
|
||||
public GuildCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argAction = addArgument(Arguments.ACCEPT_OR_DENY_OPTIONAL);
|
||||
setOnlyForPlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var action = explorer.parse(argAction);
|
||||
|
||||
final var playerData = PlayerData.get((Player) sender);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Open guild inventory/creation
|
||||
if (action == null) {
|
||||
if (playerData.inGuild()) InventoryManager.GUILD_VIEW.newInventory(playerData).open();
|
||||
else InventoryManager.GUILD_CREATION.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
final @Nullable GuildInvite invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(args[1]);
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(uuid);
|
||||
Validate.isTrue(!req.isTimedOut() && req instanceof GuildInvite);
|
||||
invite = (GuildInvite) req;
|
||||
Validate.isTrue(MMOCore.plugin.nativeGuildManager.isRegistered(invite.getGuild()));
|
||||
} catch (Exception exception) {
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else invite = MMOCore.plugin.requestManager.findRequest(playerData, GuildInvite.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null) {
|
||||
Message.GUILD_NO_PENDING_INVITE.send(playerData);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept")) invite.accept();
|
||||
if (args[0].equalsIgnoreCase("deny")) invite.deny();
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.social.Request;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
|
||||
import net.Indyuce.mmocore.party.provided.PartyInvite;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class PartyCommand extends CommandTreeRoot {
|
||||
private final Argument<String> argAction;
|
||||
|
||||
public PartyCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argAction = addArgument(Arguments.ACCEPT_OR_DENY_OPTIONAL);
|
||||
setOnlyForPlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var action = explorer.parse(argAction);
|
||||
|
||||
final var playerData = PlayerData.get((Player) sender);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Open inventory
|
||||
if (action == null) {
|
||||
if (playerData.getParty() != null) InventoryManager.PARTY_VIEW.newInventory(playerData).open();
|
||||
else InventoryManager.PARTY_CREATION.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
final @Nullable PartyInvite invite;
|
||||
if (args.length > 1)
|
||||
|
||||
// Search by request ID
|
||||
try {
|
||||
final Request req = MMOCore.plugin.requestManager.getRequest(UUID.fromString(args[1]));
|
||||
Validate.isTrue(req instanceof PartyInvite && !req.isTimedOut());
|
||||
invite = (PartyInvite) req;
|
||||
Validate.isTrue(((MMOCorePartyModule) MMOCore.plugin.partyModule).isRegistered(invite.getParty()));
|
||||
} catch (Exception exception) {
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
// Search by target player
|
||||
else invite = MMOCore.plugin.requestManager.findRequest(playerData, PartyInvite.class);
|
||||
|
||||
// No invite found with given identifier/target player
|
||||
if (invite == null) {
|
||||
Message.PARTY_NO_PENDING_INVITE.send(playerData);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("accept")) invite.accept();
|
||||
else if (args[0].equalsIgnoreCase("deny")) invite.deny();
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerStatsCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public PlayerStatsCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
InventoryManager.PLAYER_STATS.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.comp.flags.CustomFlag;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.player.CombatHandler;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PvpModeCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public PvpModeCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final PlayerData playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Check command cooldown
|
||||
if (playerData.getCooldownMap().isOnCooldown(CombatHandler.COOLDOWN_KEY)) {
|
||||
var remainingFormatted = MythicLib.plugin.getMMOConfig().decimal.format(playerData.getCooldownMap().getCooldown(CombatHandler.COOLDOWN_KEY));
|
||||
Message.PVP_MODE_COOLDOWN.send(playerData, "remaining", remainingFormatted);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
playerData.getCombat().setPvpMode(!playerData.getCombat().isInPvpMode());
|
||||
playerData.getCooldownMap().applyCooldown(CombatHandler.COOLDOWN_KEY, playerData.getCombat().isInPvpMode() ? MMOCore.plugin.configManager.pvpModeToggleOnCooldown : MMOCore.plugin.configManager.pvpModeToggleOffCooldown);
|
||||
|
||||
// Toggling on when in PVP region
|
||||
// Give invulnerability for a short time
|
||||
if (playerData.getCombat().isInPvpMode() &&
|
||||
MythicLib.plugin.getFlags().isFlagAllowed(playerData.getPlayer(), CustomFlag.PVP_MODE)) {
|
||||
playerData.getCombat().setInvulnerable(MMOCore.plugin.configManager.pvpModeInvulnerabilityTimeCommand);
|
||||
var timeFormatted = MythicLib.plugin.getMMOConfig().decimal.format(MMOCore.plugin.configManager.pvpModeInvulnerabilityTimeCommand);
|
||||
Message.PVP_MODE_TOGGLE_ON_INVULNERABLE.send((Player) sender, "time", timeFormatted);
|
||||
}
|
||||
|
||||
// Just send message otherwise
|
||||
else {
|
||||
var currentPvpMode = playerData.getCombat().isInPvpMode();
|
||||
(currentPvpMode ? Message.PVP_MODE_TOGGLE_ON_SAFE : Message.PVP_MODE_TOGGLE_OFF_SAFE).send((Player) sender);
|
||||
}
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class QuestsCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public QuestsCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
InventoryManager.QUEST_LIST.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class SkillTreesCommand extends CommandTreeRoot {
|
||||
private final Argument<SkillTree> argType;
|
||||
|
||||
public SkillTreesCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argType = addArgument(MMOCore.plugin.configManager.enableGlobalSkillTreeGUI ? Arguments.SKILL_TREE_OR_GLOBAL.withFallback(e -> null) : Arguments.SKILL_TREE);
|
||||
setOnlyForPlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var data = PlayerData.get((Player) sender);
|
||||
if (data.getProfess().getSkillTrees().isEmpty()) {
|
||||
Message.NO_SKILL_TREE.send(data);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
final @Nullable var opened = explorer.parse(argType); // null == global
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(data, this)) return CommandResult.FAILURE;
|
||||
|
||||
// Global skill tree view
|
||||
if (opened == null) {
|
||||
InventoryManager.TREE_VIEW.newInventory(data).open();
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
// Specific skill tree view
|
||||
final var classHas = data.getProfess().getSkillTrees().stream().anyMatch(tree -> tree.getId().equals(opened.getId()));
|
||||
if (!classHas) {
|
||||
Message.NO_CLASS_SKILL_TREE.send(data);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
InventoryManager.SPECIFIC_TREE_VIEW.get(UtilityMethods.kebabCase(opened.getId())).newInventory(data).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class SkillsCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public SkillsCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
if (playerData.getUnlockedSkills().isEmpty()) {
|
||||
Message.NO_CLASS_SKILL.send((Player) sender);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
InventoryManager.SKILL_LIST.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class WaypointsCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
|
||||
public WaypointsCommand(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
|
||||
final var playerData = PlayerData.get(player);
|
||||
if (MMOCoreUtils.callLegacyCommandEvent(playerData, this)) return CommandResult.FAILURE;
|
||||
|
||||
InventoryManager.WAYPOINTS.newInventory(playerData).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package net.Indyuce.mmocore.command.builtin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.eco.Withdraw;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class WithdrawCommand extends CommandTreeRoot {
|
||||
private final Argument<Player> argPlayer;
|
||||
private final Argument<Integer> argAmount;
|
||||
|
||||
public WithdrawCommand(@NotNull ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
argPlayer = addArgument(Arguments.PLAYER_IF_OP);
|
||||
argAmount = addArgument(Argument.AMOUNT_INT.withFallback(explorer -> 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
final var amount = explorer.parse(argAmount);
|
||||
|
||||
if (amount == 0) {
|
||||
new Withdraw(player).open();
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
int left = (int) MMOCore.plugin.economy.getEconomy().getBalance(player) - amount;
|
||||
if (left < 0) {
|
||||
Message.WITHDRAW_NOT_ENOUGH_MONEY.send(player, "left", -left);
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
MMOCore.plugin.economy.getEconomy().withdrawPlayer(player, amount);
|
||||
new Withdraw(player).withdrawAlgorithm(amount);
|
||||
Message.WITHDRAW_SUCCESS.send(player, "worth", amount);
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
|
||||
import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class AttributeCommandTreeNode extends CommandTreeNode {
|
||||
public AttributeCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "attribute");
|
||||
|
||||
addChild(new ActionCommandTreeNode(this, "give", 1));
|
||||
addChild(new ActionCommandTreeNode(this, "take", -1));
|
||||
}
|
||||
|
||||
static class ActionCommandTreeNode extends CommandTreeNode {
|
||||
private final Argument<Player> argPlayer;
|
||||
private final Argument<PlayerAttribute> argAttribute;
|
||||
private final Argument<Integer> argAmount;
|
||||
|
||||
private final int c;
|
||||
|
||||
public ActionCommandTreeNode(CommandTreeNode parent, String type, int coef) {
|
||||
super(parent, type);
|
||||
|
||||
this.c = coef;
|
||||
|
||||
argPlayer = addArgument(Argument.PLAYER);
|
||||
argAttribute = addArgument(Arguments.ATTRIBUTE);
|
||||
argAmount = addArgument(Argument.AMOUNT_INT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
final var player = explorer.parse(argPlayer);
|
||||
final var attribute = explorer.parse(argAttribute);
|
||||
final var amount = explorer.parse(argAmount);
|
||||
|
||||
PlayerAttributes.AttributeInstance instance = PlayerData.get(player).getAttributes().getInstance(attribute);
|
||||
instance.setBase(Math.min(attribute.getMax(), instance.getBase() + c * amount));
|
||||
return explorer.success("&6" + player.getName() + "&e now has &6" + instance.getBase() + "&e points in " + attribute.getName() + ".");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.cast.FirstCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.cast.SpecificCommandTreeNode;
|
||||
|
||||
public class CastCommandTreeNode extends CommandTreeNode {
|
||||
public CastCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "cast");
|
||||
|
||||
addChild(new FirstCommandTreeNode(this));
|
||||
addChild(new SpecificCommandTreeNode(this));
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,9 @@
|
||||
package net.Indyuce.mmocore.command.rpg;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.api.util.SmartGive;
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.util.item.CurrencyItemBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -10,17 +11,16 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public class CoinsCommandTreeNode extends CommandTreeNode {
|
||||
public CoinsCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "coins");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(Parameter.AMOUNT);
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Argument.AMOUNT_INT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 3)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeRoot;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.admin.AdminCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.booster.BoosterCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.clazz.ClassCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.debug.DebugCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.quest.QuestCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.skill.SkillCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.skilltree.SkillTreeCommandNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.waypoint.WaypointsCommandTreeNode;
|
||||
|
||||
public class MMOCoreCommandTreeRoot extends CommandTreeRoot {
|
||||
public MMOCoreCommandTreeRoot() {
|
||||
super("mmocore", "mmocore.admin");
|
||||
|
||||
addChild(new ReloadCommandTreeNode(this));
|
||||
addChild(new CastCommandTreeNode(this));
|
||||
addChild(new CoinsCommandTreeNode(this));
|
||||
addChild(new NoteCommandTreeNode(this));
|
||||
addChild(new SkillTreeCommandNode(this));
|
||||
addChild(new AdminCommandTreeNode(this));
|
||||
addChild(new DebugCommandTreeNode(this));
|
||||
addChild(new BoosterCommandTreeNode(this));
|
||||
addChild(new WaypointsCommandTreeNode(this));
|
||||
addChild(new QuestCommandTreeNode(this));
|
||||
addChild(new SkillCommandTreeNode(this));
|
||||
addChild(new AttributeCommandTreeNode(this));
|
||||
addChild(new ClassCommandTreeNode(this));
|
||||
}
|
||||
}
|
||||
@ -1,27 +1,25 @@
|
||||
package net.Indyuce.mmocore.command.rpg;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.api.util.SmartGive;
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.util.item.CurrencyItemBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class NoteCommandTreeNode extends CommandTreeNode {
|
||||
public NoteCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "note");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(new Parameter("<worth>",
|
||||
(explorer, list) -> list.addAll(Arrays.asList("10", "20", "30", "40", "50", "60", "70", "80", "90", "100"))));
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Argument.AMOUNT_INT.withKey("worth"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 3)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package net.Indyuce.mmocore.command.rpg;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -11,7 +12,7 @@ public class ReloadCommandTreeNode extends CommandTreeNode {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
|
||||
sender.sendMessage(ChatColor.YELLOW + "Reloading " + MMOCore.plugin.getName() + " " + MMOCore.plugin.getDescription().getVersion() + "...");
|
||||
long ms = System.currentTimeMillis();
|
||||
@ -0,0 +1,60 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.AttributeCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.admin.reset.ResetCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.skill.SkillCommandTreeNode;
|
||||
import net.Indyuce.mmocore.command.builtin.mmocore.slot.SlotCommandTreeNode;
|
||||
|
||||
public class AdminCommandTreeNode extends CommandTreeNode {
|
||||
public AdminCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "admin");
|
||||
|
||||
addChild(new HideActionBarCommandTreeNode(this));
|
||||
addChild(new NoCooldownCommandTreeNode(this));
|
||||
addChild(new ResetCommandTreeNode(this));
|
||||
addChild(new InfoCommandTreeNode(this));
|
||||
addChild(new LegacyClassCommandTreeNode(this));
|
||||
addChild(new LegacyForceClassCommandTreeNode(this));
|
||||
addChild(new ExportDataTreeNode(this));
|
||||
|
||||
addChild(new ExperienceCommandTreeNode(this));
|
||||
addChild(new LevelCommandTreeNode(this));
|
||||
addChild(new AttributeCommandTreeNode(this)); // Backwards compatibility
|
||||
addChild(new SkillCommandTreeNode(this)); // Backwards compatibility
|
||||
addChild(new SaveDataTreeNode(this));
|
||||
addChild(new SlotCommandTreeNode(this));
|
||||
addChild(new PointsCommandTreeNode("skill", this,
|
||||
PlayerData::setSkillPoints,
|
||||
PlayerData::giveSkillPoints,
|
||||
PlayerData::getSkillPoints));
|
||||
addChild(new PointsCommandTreeNode("class", this,
|
||||
PlayerData::setClassPoints,
|
||||
PlayerData::giveClassPoints,
|
||||
PlayerData::getClassPoints));
|
||||
addChild(new PointsCommandTreeNode("attribute", this,
|
||||
PlayerData::setAttributePoints,
|
||||
PlayerData::giveAttributePoints,
|
||||
PlayerData::getAttributePoints));
|
||||
addChild(new PointsCommandTreeNode("attr-realloc", this,
|
||||
PlayerData::setAttributeReallocationPoints,
|
||||
PlayerData::giveAttributeReallocationPoints,
|
||||
PlayerData::getAttributeReallocationPoints));
|
||||
addChild(new PointsCommandTreeNode("skill-realloc", this,
|
||||
PlayerData::setSkillReallocationPoints,
|
||||
PlayerData::giveSkillReallocationPoints,
|
||||
PlayerData::getSkillReallocationPoints));
|
||||
addChild(new PointsCommandTreeNode("skill-tree-realloc", this,
|
||||
PlayerData::setSkillTreeReallocationPoints,
|
||||
PlayerData::giveSkillTreeReallocationPoints,
|
||||
PlayerData::getSkillTreeReallocationPoints));
|
||||
addChild(new SkillTreePointsCommandTreeNode(this,
|
||||
(playerData, amount, skillTree) -> playerData.setSkillTreePoints(skillTree, amount),
|
||||
(playerData, amount, skillTree) -> playerData.giveSkillTreePoints(skillTree, amount),
|
||||
PlayerData::getSkillTreePoints));
|
||||
for (PlayerResource res : PlayerResource.values())
|
||||
addChild(new ResourceCommandTreeNode(res.name().toLowerCase(), this, res));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,85 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.PlayerProfessions;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import net.Indyuce.mmocore.util.TriConsumer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class ExperienceCommandTreeNode extends CommandTreeNode {
|
||||
public ExperienceCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "exp");
|
||||
|
||||
addChild(new ActionCommandTreeNode(this, "set", PlayerData::setExperience, PlayerProfessions::setExperience));
|
||||
addChild(new ActionCommandTreeNode(this, "give", (data, value) -> data.giveExperience(value, EXPSource.COMMAND), (professions, profession,
|
||||
value) -> professions.giveExperience(profession, value, EXPSource.COMMAND)));
|
||||
addChild(new ActionCommandTreeNode(this, "take", (data, value) -> data.giveExperience(-value, EXPSource.COMMAND), (professions, profession,
|
||||
value) -> professions.giveExperience(profession, -value, EXPSource.COMMAND)));
|
||||
}
|
||||
|
||||
public static class ActionCommandTreeNode extends CommandTreeNode {
|
||||
private final BiConsumer<PlayerData, Long> main;
|
||||
private final TriConsumer<PlayerProfessions, Profession, Long> profession;
|
||||
|
||||
public ActionCommandTreeNode(CommandTreeNode parent, String type, BiConsumer<PlayerData, Long> main,
|
||||
TriConsumer<PlayerProfessions, Profession, Long> profession) {
|
||||
super(parent, type);
|
||||
|
||||
this.main = main;
|
||||
this.profession = profession;
|
||||
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Arguments.PROFESSION);
|
||||
addArgument(Argument.AMOUNT_INT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 6)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
return explorer.fail("Could not find the player called " + args[3] + ".");
|
||||
}
|
||||
|
||||
long amount;
|
||||
try {
|
||||
amount = Long.parseLong(args[5]);
|
||||
Validate.isTrue(amount >= 0);
|
||||
} catch (RuntimeException exception) {
|
||||
return explorer.fail( args[5] + " is not a valid number.");
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
if (args[4].equalsIgnoreCase("main")) {
|
||||
main.accept(data, amount);
|
||||
return explorer.success(ChatColor.GOLD + player.getName() + ChatColor.YELLOW
|
||||
+ " now has " + ChatColor.GOLD + MythicLib.plugin.getMMOConfig().decimal.format(data.getExperience()) + ChatColor.YELLOW + " EXP.");
|
||||
}
|
||||
|
||||
String format = args[4].toLowerCase().replace("_", "-");
|
||||
if (!MMOCore.plugin.professionManager.has(format)) {
|
||||
return explorer.fail(format + " is not a valid profession.");
|
||||
}
|
||||
|
||||
Profession profession = MMOCore.plugin.professionManager.get(format);
|
||||
this.profession.accept(data.getCollectionSkills(), profession, amount);
|
||||
return explorer.success(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD
|
||||
+ data.getCollectionSkills().getExperience(profession) + ChatColor.YELLOW + " EXP in " + profession.getName() + ".");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,11 @@
|
||||
package net.Indyuce.mmocore.command.rpg.admin;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.data.DataExport;
|
||||
import io.lumine.mythic.lib.data.sql.SQLDataSource;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.manager.data.sql.SQLDataHandler;
|
||||
import net.Indyuce.mmocore.manager.data.yaml.YAMLPlayerDataHandler;
|
||||
import net.Indyuce.mmocore.manager.data.sql.SQLDatabaseImpl;
|
||||
import net.Indyuce.mmocore.manager.data.yaml.YAMLDatabaseImpl;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -20,12 +20,12 @@ public class ExportDataTreeNode extends CommandTreeNode {
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public CommandResult execute(CommandSender sender, String[] strings) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
|
||||
// Export YAML to SQL
|
||||
final boolean result = new DataExport<>(MMOCore.plugin.playerDataManager, sender).start(
|
||||
() -> new YAMLPlayerDataHandler(MMOCore.plugin),
|
||||
() -> new SQLDataHandler(new SQLDataSource(MMOCore.plugin)));
|
||||
YAMLDatabaseImpl::new,
|
||||
SQLDatabaseImpl::new);
|
||||
|
||||
return result ? CommandResult.SUCCESS : CommandResult.FAILURE;
|
||||
}
|
||||
@ -1,7 +1,8 @@
|
||||
package net.Indyuce.mmocore.command.rpg.admin;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import io.lumine.mythic.lib.message.actionbar.ActionBarPriority;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -13,12 +14,12 @@ public class HideActionBarCommandTreeNode extends CommandTreeNode {
|
||||
public HideActionBarCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "hideab");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addParameter(Parameter.AMOUNT);
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Argument.DURATION_TICKS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 4)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package net.Indyuce.mmocore.command.rpg.admin;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
@ -15,11 +16,11 @@ public class InfoCommandTreeNode extends CommandTreeNode {
|
||||
public InfoCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "info");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addArgument(Argument.PLAYER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 3)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
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.PlayerClass;
|
||||
import net.Indyuce.mmocore.api.player.profess.SavedClassInformation;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.player.Message;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @see net.Indyuce.mmocore.command.builtin.mmocore.clazz.ClassCommandTreeNode
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
public class LegacyClassCommandTreeNode extends CommandTreeNode {
|
||||
private final Argument<Player> argPlayer;
|
||||
private final Argument<PlayerClass> argClass;
|
||||
|
||||
@Deprecated
|
||||
public LegacyClassCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "class");
|
||||
|
||||
argPlayer = addArgument(Argument.PLAYER);
|
||||
argClass = addArgument(Arguments.CLASS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
Player player = explorer.parse(argPlayer);
|
||||
PlayerClass profess = explorer.parse(argClass);
|
||||
PlayerData data = PlayerData.get(player);
|
||||
if (data.getProfess().equals(profess)) return CommandResult.SUCCESS;
|
||||
|
||||
PlayerChangeClassEvent called = new PlayerChangeClassEvent(data, profess, PlayerChangeClassEvent.Reason.COMMAND_SELECT);
|
||||
Bukkit.getPluginManager().callEvent(called);
|
||||
if (called.isCancelled()) return explorer.fail("Bukkit event canceled");
|
||||
|
||||
(data.hasSavedClass(profess) ? data.getClassInfo(profess)
|
||||
: new SavedClassInformation(MMOCore.plugin.playerDataManager.getDefaultData())).load(profess, data);
|
||||
if (data.isOnline()) {
|
||||
Message.CLASS_SELECT.send(data, "class", profess.getName());
|
||||
}
|
||||
|
||||
return explorer.success(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now a " + ChatColor.GOLD + profess.getName() + ChatColor.YELLOW + ".");
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
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.PlayerClass;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @see net.Indyuce.mmocore.command.builtin.mmocore.clazz.ForceCommandTreeNode
|
||||
*/
|
||||
@Deprecated
|
||||
public class LegacyForceClassCommandTreeNode extends CommandTreeNode {
|
||||
public LegacyForceClassCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "force-class");
|
||||
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Arguments.CLASS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull CommandResult execute(CommandTreeExplorer explorer, 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;
|
||||
}
|
||||
|
||||
String format = args[3].toUpperCase().replace("-", "_");
|
||||
if (!MMOCore.plugin.classManager.has(format)) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find class " + format + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
PlayerClass profess = MMOCore.plugin.classManager.get(format);
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
final var called = new PlayerChangeClassEvent(data, profess, PlayerChangeClassEvent.Reason.COMMAND_FORCE);
|
||||
Bukkit.getPluginManager().callEvent(called);
|
||||
if (called.isCancelled()) return explorer.fail("Bukkit event canceled");
|
||||
|
||||
data.setClass(profess);
|
||||
return explorer.success(ChatColor.GOLD + player.getName()
|
||||
+ ChatColor.YELLOW + " is now a " + ChatColor.GOLD + profess.getName());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,89 @@
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.Arguments;
|
||||
import net.Indyuce.mmocore.experience.EXPSource;
|
||||
import net.Indyuce.mmocore.experience.PlayerProfessions;
|
||||
import net.Indyuce.mmocore.experience.Profession;
|
||||
import net.Indyuce.mmocore.util.TriConsumer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class LevelCommandTreeNode extends CommandTreeNode {
|
||||
public LevelCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "level");
|
||||
|
||||
addChild(new ActionCommandTreeNode(this, "set",
|
||||
(player, newLevel) -> player.setLevel(newLevel, PlayerLevelChangeEvent.Reason.COMMAND),
|
||||
(player, profession, amount) -> player.setLevel(profession, amount, PlayerLevelChangeEvent.Reason.COMMAND)));
|
||||
addChild(new ActionCommandTreeNode(this, "give",
|
||||
(data, value) -> data.giveLevels(value, EXPSource.COMMAND),
|
||||
(professions, profession, value) -> professions.giveLevels(profession, value, EXPSource.COMMAND)));
|
||||
addChild(new ActionCommandTreeNode(this, "take",
|
||||
(playerData, amount) -> playerData.setLevel(playerData.getLevel() - amount, PlayerLevelChangeEvent.Reason.COMMAND),
|
||||
(player, profession, amount) -> player.setLevel(profession, player.getLevel(profession) - amount, PlayerLevelChangeEvent.Reason.COMMAND)));
|
||||
}
|
||||
|
||||
public static class ActionCommandTreeNode extends CommandTreeNode {
|
||||
private final BiConsumer<PlayerData, Integer> main;
|
||||
private final TriConsumer<PlayerProfessions, Profession, Integer> profession;
|
||||
|
||||
public ActionCommandTreeNode(CommandTreeNode parent, String type, BiConsumer<PlayerData, Integer> main,
|
||||
TriConsumer<PlayerProfessions, Profession, Integer> profession) {
|
||||
super(parent, type);
|
||||
|
||||
this.main = main;
|
||||
this.profession = profession;
|
||||
|
||||
addArgument(Argument.PLAYER);
|
||||
addArgument(Arguments.PROFESSION);
|
||||
addArgument(Argument.AMOUNT_INT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 6)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
Player player = Bukkit.getPlayer(args[3]);
|
||||
if (player == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
int amount;
|
||||
try {
|
||||
amount = Integer.parseInt(args[5]);
|
||||
} catch (NumberFormatException exception) {
|
||||
sender.sendMessage(ChatColor.RED + args[5] + " is not a valid number.");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
if (args[4].equalsIgnoreCase("main")) {
|
||||
main.accept(data, amount);
|
||||
|
||||
return explorer.success(ChatColor.GOLD + player.getName() + "&e is now Lvl &6" + data.getLevel());
|
||||
}
|
||||
|
||||
String format = args[4].toLowerCase().replace("_", "-");
|
||||
if (!MMOCore.plugin.professionManager.has(format)) {
|
||||
return explorer.fail(format + " is not a valid profession.");
|
||||
}
|
||||
|
||||
Profession profession = MMOCore.plugin.professionManager.get(format);
|
||||
this.profession.accept(data.getCollectionSkills(), profession, amount);
|
||||
return explorer.success(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now Lvl " + ChatColor.GOLD
|
||||
+ data.getCollectionSkills().getLevel(profession) + ChatColor.YELLOW + " in " + profession.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,9 @@
|
||||
package net.Indyuce.mmocore.command.rpg.admin;
|
||||
package net.Indyuce.mmocore.command.builtin.mmocore.admin;
|
||||
|
||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.api.Parameter;
|
||||
import io.lumine.mythic.lib.command.CommandTreeExplorer;
|
||||
import io.lumine.mythic.lib.command.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.command.argument.Argument;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.command.api.CommandVerbose;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -13,11 +13,11 @@ public class NoCooldownCommandTreeNode extends CommandTreeNode {
|
||||
public NoCooldownCommandTreeNode(CommandTreeNode parent) {
|
||||
super(parent, "nocd");
|
||||
|
||||
addParameter(Parameter.PLAYER);
|
||||
addArgument(Argument.PLAYER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandSender sender, String[] args) {
|
||||
public CommandResult execute(CommandTreeExplorer explorer, CommandSender sender, String[] args) {
|
||||
if (args.length < 3)
|
||||
return CommandResult.THROW_USAGE;
|
||||
|
||||
@ -29,8 +29,6 @@ public class NoCooldownCommandTreeNode extends CommandTreeNode {
|
||||
|
||||
PlayerData data = PlayerData.get(player);
|
||||
data.noCooldown = !data.noCooldown;
|
||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.NOCD,
|
||||
ChatColor.YELLOW + "NoCD " + (data.noCooldown ? "enabled" : "disabled") + " for " + player.getName() + ".");
|
||||
return CommandResult.SUCCESS;
|
||||
return explorer.success(ChatColor.YELLOW + "NoCD " + (data.noCooldown ? "enabled" : "disabled") + " for " + player.getName());
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user