API Update

added a few events + a new exp source enum for the exp gain event
This commit is contained in:
ASangarin 2020-06-13 17:23:52 +02:00
parent b9b9a35471
commit 168d4a46b5
18 changed files with 139 additions and 24 deletions

View File

@ -0,0 +1,42 @@
package net.Indyuce.mmocore.api.event;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import net.Indyuce.mmocore.api.player.PlayerData;
public class MMOCommandEvent extends PlayerDataEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
private final String command;
public MMOCommandEvent(PlayerData player, String command) {
super(player);
this.command = command;
}
public String getCommand() {
return command;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean b) {
cancelled = b;
}
}

View File

@ -3,6 +3,7 @@ package net.Indyuce.mmocore.api.event;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -11,19 +12,21 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel
// if null, this is main experience
private final Profession profession;
private final EXPSource source;
private int experience;
private boolean cancelled;
public PlayerExperienceGainEvent(PlayerData player, int experience) {
this(player, null, experience);
public PlayerExperienceGainEvent(PlayerData player, int experience, EXPSource source) {
this(player, null, experience, source);
}
public PlayerExperienceGainEvent(PlayerData player, Profession profession, int experience) {
public PlayerExperienceGainEvent(PlayerData player, Profession profession, int experience, EXPSource source) {
super(player);
this.profession = profession;
this.experience = experience;
this.source = source;
}
public int getExperience() {
@ -52,6 +55,10 @@ public class PlayerExperienceGainEvent extends PlayerDataEvent implements Cancel
return profession;
}
public EXPSource getSource() {
return source;
}
@Override
public HandlerList getHandlers() {
return handlers;

View File

@ -0,0 +1,9 @@
package net.Indyuce.mmocore.api.experience;
public enum EXPSource {
COMMAND,
VANILLA,
QUEST,
SOURCE,
OTHER;
}

View File

@ -2,6 +2,7 @@ package net.Indyuce.mmocore.api.experience.source.type;
import org.bukkit.Location;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
@ -48,6 +49,6 @@ public abstract class ExperienceSource<T> {
if (hasProfession())
player.getCollectionSkills().giveExperience(profession, amount, location == null ? player.getPlayer().getLocation() : location);
else
player.giveExperience(amount, location == null ? player.getPlayer().getLocation() : location);
player.giveExperience(amount, location == null ? player.getPlayer().getLocation() : location, EXPSource.SOURCE);
}
}

View File

@ -29,6 +29,7 @@ import net.Indyuce.mmocore.api.event.PlayerCastSkillEvent;
import net.Indyuce.mmocore.api.event.PlayerExperienceGainEvent;
import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent;
import net.Indyuce.mmocore.api.event.PlayerRegenResourceEvent;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.PlayerProfessions;
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes;
@ -245,11 +246,11 @@ public class PlayerData extends OfflinePlayerData {
getStats().updateStats();
}
public void giveLevels(int value) {
public void giveLevels(int value, EXPSource source) {
int total = 0;
while (value-- > 0)
total += getProfess().getExpCurve().getExperience(getLevel() + value + 1);
giveExperience(total);
giveExperience(total, source);
}
public void setExperience(int value) {
@ -422,11 +423,11 @@ public class PlayerData extends OfflinePlayerData {
return getProfess().getMaxLevel() > 0 && getLevel() >= getProfess().getMaxLevel();
}
public void giveExperience(int value) {
giveExperience(value, null);
public void giveExperience(int value, EXPSource source) {
giveExperience(value, null, source);
}
public void giveExperience(int value, Location loc) {
public void giveExperience(int value, Location loc, EXPSource source) {
if (hasReachedMaxLevel()) {
setExperience(0);
return;
@ -441,7 +442,7 @@ public class PlayerData extends OfflinePlayerData {
value = MMOCore.plugin.boosterManager.calculateExp(null, value);
value *= 1 + getStats().getStat(StatType.ADDITIONAL_EXPERIENCE) / 100;
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(this, value);
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(this, value, source);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled())
return;

View File

@ -3,6 +3,7 @@ package net.Indyuce.mmocore.api.quest.trigger;
import org.apache.commons.lang.Validate;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.ExperienceInfo;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -29,7 +30,7 @@ public class ExperienceTrigger extends Trigger {
@Override
public void apply(PlayerData player) {
if (profession == null)
player.giveExperience(amount.calculateInt());
player.giveExperience(amount.calculateInt(), EXPSource.QUEST);
else
player.getCollectionSkills().giveExperience(profession, amount.calculateInt());
}

View File

@ -1,11 +1,13 @@
package net.Indyuce.mmocore.command;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -24,7 +26,10 @@ public class AttributesCommand extends BukkitCommand {
return true;
}
InventoryManager.ATTRIBUTE_VIEW.newInventory(PlayerData.get((Player) sender)).open();
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;
}
}

View File

@ -7,6 +7,7 @@ import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -30,6 +31,9 @@ public class ClassCommand extends BukkitCommand {
}
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().filter(sub -> sub.getLevel() <= data.getLevel()).count() > 0)
InventoryManager.SUBCLASS_SELECT.newInventory(data).open();
else

View File

@ -2,6 +2,7 @@ package net.Indyuce.mmocore.command;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
@ -9,6 +10,7 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.player.social.FriendRequest;
@ -30,6 +32,11 @@ public class FriendsCommand extends BukkitCommand {
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) {
UUID uuid;
try {
@ -59,7 +66,7 @@ public class FriendsCommand extends BukkitCommand {
return true;
}
InventoryManager.FRIEND_LIST.newInventory(PlayerData.get((Player) sender)).open();
InventoryManager.FRIEND_LIST.newInventory(data).open();
return true;
}
}

View File

@ -2,6 +2,7 @@ package net.Indyuce.mmocore.command;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
@ -10,6 +11,7 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
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.api.player.social.guilds.GuildInvite;
@ -31,6 +33,11 @@ public class GuildCommand extends BukkitCommand {
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) {
UUID uuid;
try {
@ -60,7 +67,6 @@ public class GuildCommand extends BukkitCommand {
return true;
}
PlayerData data = PlayerData.get((OfflinePlayer) sender);
if (data.inGuild())
InventoryManager.GUILD_VIEW.newInventory(data).open();
else

View File

@ -2,6 +2,7 @@ package net.Indyuce.mmocore.command;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
@ -10,6 +11,7 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
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.PartyInvite;
import net.Indyuce.mmocore.api.player.social.Request;
@ -31,6 +33,11 @@ public class PartyCommand extends BukkitCommand {
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 > 1) {
UUID uuid;
try {
@ -60,7 +67,6 @@ public class PartyCommand extends BukkitCommand {
return true;
}
PlayerData data = PlayerData.get((OfflinePlayer) sender);
if (data.hasParty())
InventoryManager.PARTY_VIEW.newInventory(data).open();
else

View File

@ -1,11 +1,13 @@
package net.Indyuce.mmocore.command;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -23,8 +25,11 @@ public class PlayerStatsCommand extends BukkitCommand {
sender.sendMessage(ChatColor.RED + "This command is for players only.");
return true;
}
InventoryManager.PLAYER_STATS.newInventory(PlayerData.get((Player) sender)).open();
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;
}
}

View File

@ -1,10 +1,12 @@
package net.Indyuce.mmocore.command;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -18,8 +20,12 @@ public class QuestsCommand extends BukkitCommand {
@Override
public boolean execute(CommandSender sender, String label, String[] args) {
if (sender instanceof Player)
InventoryManager.QUEST_LIST.newInventory(PlayerData.get((Player) sender)).open();
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;
}
}

View File

@ -1,11 +1,13 @@
package net.Indyuce.mmocore.command;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -21,6 +23,10 @@ public class SkillsCommand extends BukkitCommand {
public boolean execute(CommandSender sender, String label, String[] args) {
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.getProfess().getSkills().size() < 1) {
MMOCore.plugin.configManager.getSimpleMessage("no-class-skill").send((Player) sender);
return true;

View File

@ -1,10 +1,12 @@
package net.Indyuce.mmocore.command;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.api.event.MMOCommandEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.InventoryManager;
@ -18,8 +20,12 @@ public class WaypointsCommand extends BukkitCommand {
@Override
public boolean execute(CommandSender sender, String label, String[] args) {
if (sender instanceof Player && sender.hasPermission("mmocore.waypoints"))
InventoryManager.WAYPOINTS.newInventory(PlayerData.get((Player) sender)).open();
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;
}
}

View File

@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.PlayerProfessions;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.command.api.CommandEnd;
@ -20,7 +21,7 @@ public class ExperienceCommandMap extends CommandMap {
super(parent, "exp");
addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setExperience(value), (professions, profession, value) -> professions.setExperience(profession, value)));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveExperience(value, data.getPlayer().getLocation()), (professions, profession, value) -> professions.giveExperience(profession, value, professions.getPlayerData().getPlayer().getLocation())));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveExperience(value, data.getPlayer().getLocation(), EXPSource.COMMAND), (professions, profession, value) -> professions.giveExperience(profession, value, professions.getPlayerData().getPlayer().getLocation())));
}
public class ActionCommandMap extends CommandEnd {

View File

@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.experience.PlayerProfessions;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.command.api.CommandEnd;
@ -20,7 +21,7 @@ public class LevelCommandMap extends CommandMap {
super(parent, "level");
addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setLevel(value), (professions, profession, value) -> professions.setLevel(profession, value)));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveLevels(value), (professions, profession, value) -> professions.giveLevels(profession, value)));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveLevels(value, EXPSource.COMMAND), (professions, profession, value) -> professions.giveLevels(profession, value)));
}
public class ActionCommandMap extends CommandEnd {

View File

@ -4,6 +4,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerExpChangeEvent;
import net.Indyuce.mmocore.api.experience.EXPSource;
import net.Indyuce.mmocore.api.player.PlayerData;
public class RedirectVanillaExp implements Listener {
@ -17,6 +18,6 @@ public class RedirectVanillaExp implements Listener {
public void a(PlayerExpChangeEvent event) {
int a = (int) (event.getAmount() * ratio);
if (a > 0)
PlayerData.get(event.getPlayer()).giveExperience(a);
PlayerData.get(event.getPlayer()).giveExperience(a, EXPSource.VANILLA);
}
}