mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2024-12-22 04:37:42 +01:00
Supports profiles
This commit is contained in:
parent
b14f0e590b
commit
eeef8db5ad
@ -174,6 +174,14 @@
|
||||
<version>5.1.2-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- Profile API -->
|
||||
<dependency>
|
||||
<groupId>fr.phoenixdevt</groupId>
|
||||
<artifactId>Profile-API</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<!-- WordGuard -->
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
|
@ -37,6 +37,7 @@ import net.Indyuce.mmoitems.comp.rpg.RPGHandler;
|
||||
import net.Indyuce.mmoitems.gui.PluginInventory;
|
||||
import net.Indyuce.mmoitems.gui.edition.recipe.RecipeBrowserGUI;
|
||||
import net.Indyuce.mmoitems.manager.*;
|
||||
import net.Indyuce.mmoitems.manager.data.PlayerDataManager;
|
||||
import net.Indyuce.mmoitems.util.PluginUtils;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -44,6 +45,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -76,6 +78,7 @@ public class MMOItems extends JavaPlugin {
|
||||
private final List<EnchantPlugin<? extends Enchantment>> enchantPlugins = new ArrayList<>();
|
||||
private final StatManager statManager = new StatManager();
|
||||
|
||||
private PlayerDataManager playerDataManager;
|
||||
private DropTableManager dropTableManager;
|
||||
private WorldGenManager worldGenManager;
|
||||
private UpgradeManager upgradeManager;
|
||||
@ -239,7 +242,8 @@ public class MMOItems extends JavaPlugin {
|
||||
}*/
|
||||
|
||||
// Compatibility with /reload
|
||||
Bukkit.getScheduler().runTask(this, () -> Bukkit.getOnlinePlayers().forEach(PlayerData::load));
|
||||
playerDataManager = new PlayerDataManager();
|
||||
playerDataManager.initialize(true, EventPriority.NORMAL, EventPriority.HIGHEST);
|
||||
|
||||
// Amount and bukkit recipes
|
||||
getLogger().log(Level.INFO, "Loading recipes, please wait...");
|
||||
@ -261,7 +265,7 @@ public class MMOItems extends JavaPlugin {
|
||||
return;
|
||||
|
||||
// Save player data
|
||||
PlayerData.getLoaded().forEach(data -> data.save(false));
|
||||
playerDataManager.saveAll(false);
|
||||
|
||||
// Drop abandoned items
|
||||
DeathItemsHandler.getActive().forEach(info -> info.giveItems(true));
|
||||
@ -435,6 +439,10 @@ public class MMOItems extends JavaPlugin {
|
||||
enchantPlugins.add(enchantPlugin);
|
||||
}
|
||||
|
||||
public PlayerDataManager getPlayerDataManager() {
|
||||
return playerDataManager;
|
||||
}
|
||||
|
||||
public StatManager getStats() {
|
||||
return statManager;
|
||||
}
|
||||
|
@ -5,13 +5,14 @@ import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import io.lumine.mythic.lib.data.SynchronizedDataHolder;
|
||||
import io.lumine.mythic.lib.player.PlayerMetadata;
|
||||
import io.lumine.mythic.lib.player.modifier.ModifierSource;
|
||||
import io.lumine.mythic.lib.player.skill.PassiveSkill;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerMetadata;
|
||||
import io.lumine.mythic.lib.util.Closeable;
|
||||
import net.Indyuce.mmoitems.ItemStats;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.ConfigFile;
|
||||
import net.Indyuce.mmoitems.api.ItemSet;
|
||||
import net.Indyuce.mmoitems.api.ItemSet.SetBonuses;
|
||||
import net.Indyuce.mmoitems.api.crafting.CraftingStatus;
|
||||
@ -28,7 +29,6 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
@ -39,7 +39,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class PlayerData {
|
||||
public class PlayerData extends SynchronizedDataHolder implements Closeable {
|
||||
@NotNull
|
||||
private final MMOPlayerData mmoData;
|
||||
|
||||
@ -59,44 +59,17 @@ public class PlayerData {
|
||||
private final PlayerStats stats;
|
||||
private final Set<String> permissions = new HashSet<>();
|
||||
|
||||
private static final Map<UUID, PlayerData> data = new HashMap<>();
|
||||
public PlayerData(@NotNull MMOPlayerData mmoData) {
|
||||
super(mmoData);
|
||||
|
||||
private PlayerData(@NotNull MMOPlayerData mmoData) {
|
||||
this.mmoData = mmoData;
|
||||
rpgPlayer = MMOItems.plugin.getMainRPG().getInfo(this);
|
||||
stats = new PlayerStats(this);
|
||||
|
||||
load(new ConfigFile("/userdata", getUniqueId().toString()).getConfig());
|
||||
}
|
||||
|
||||
private void load(FileConfiguration config) {
|
||||
if (config.contains("crafting-queue"))
|
||||
craftingStatus.load(this, config.getConfigurationSection("crafting-queue"));
|
||||
|
||||
if (MMOItems.plugin.hasPermissions() && config.contains("permissions-from-items")) {
|
||||
final Permission perms = MMOItems.plugin.getVault().getPermissions();
|
||||
config.getStringList("permissions-from-items").forEach(perm -> {
|
||||
if (perms.has(getPlayer(), perm))
|
||||
perms.playerRemove(getPlayer(), perm);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void save(boolean clearForMap) {
|
||||
|
||||
// Empty map if required
|
||||
if (clearForMap)
|
||||
data.remove(getUniqueId());
|
||||
|
||||
// Cancel runnables
|
||||
@Override
|
||||
public void close() {
|
||||
cancelRunnables();
|
||||
|
||||
// Save data in config
|
||||
final ConfigFile config = new ConfigFile("/userdata", getUniqueId().toString());
|
||||
config.getConfig().createSection("crafting-queue");
|
||||
config.getConfig().set("permissions-from-items", new ArrayList<>(permissions));
|
||||
craftingStatus.save(config.getConfig().getConfigurationSection("crafting-queue"));
|
||||
config.save();
|
||||
}
|
||||
|
||||
public MMOPlayerData getMMOPlayerData() {
|
||||
@ -132,7 +105,7 @@ public class PlayerData {
|
||||
|
||||
/**
|
||||
* @return If the player hands are full i.e if the player is holding
|
||||
* two items in their hands, one being two handed
|
||||
* two items in their hands, one being two handed
|
||||
*/
|
||||
public boolean isEncumbered() {
|
||||
|
||||
@ -260,7 +233,7 @@ public class PlayerData {
|
||||
// Calculate the player's item set
|
||||
final Map<ItemSet, Integer> itemSetCount = new HashMap<>();
|
||||
for (EquippedItem equipped : inventory.getEquipped()) {
|
||||
final String tag = equipped.getCached().getNBT().getString("MMOITEMS_ITEM_SET");
|
||||
final String tag = equipped.getCached().getNBT().getString("MMOITEMS_ITEM_SET");
|
||||
final @Nullable ItemSet itemSet = MMOItems.plugin.getSets().get(tag);
|
||||
if (itemSet == null)
|
||||
continue;
|
||||
@ -346,6 +319,10 @@ public class PlayerData {
|
||||
return permanentEffects.containsKey(type) ? permanentEffects.get(type).getAmplifier() : -1;
|
||||
}
|
||||
|
||||
public Set<String> getPermissions() {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
public Collection<PotionEffect> getPermanentPotionEffects() {
|
||||
return permanentEffects.values();
|
||||
}
|
||||
@ -424,49 +401,18 @@ public class PlayerData {
|
||||
* @return If player data is loaded for a player UUID
|
||||
*/
|
||||
public static boolean has(UUID uuid) {
|
||||
return data.containsKey(uuid);
|
||||
return MMOItems.plugin.getPlayerDataManager().isLoaded(uuid);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PlayerData get(UUID uuid) {
|
||||
return Objects.requireNonNull(data.get(uuid), "Player data not loaded");
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the corresponding MMOPlayerData has already been initialized.
|
||||
*/
|
||||
public static @NotNull PlayerData load(@NotNull Player player) {
|
||||
return load(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the corresponding MMOPlayerData has already been initialized.
|
||||
*/
|
||||
public static PlayerData load(@NotNull UUID player) {
|
||||
|
||||
/*
|
||||
* Double check they are online, for some reason even if this is fired
|
||||
* from the join event the player can be offline if they left in the
|
||||
* same tick or something.
|
||||
*/
|
||||
if (!data.containsKey(player)) {
|
||||
PlayerData playerData = new PlayerData(MMOPlayerData.get(player));
|
||||
data.put(player, playerData);
|
||||
playerData.getInventory().scheduleUpdate();
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update the cached RPGPlayer in case of any major change in the player
|
||||
* data of other rpg plugins
|
||||
*/
|
||||
PlayerData playerData = data.get(player);
|
||||
playerData.rpgPlayer = MMOItems.plugin.getMainRPG().getInfo(playerData);
|
||||
return playerData;
|
||||
return MMOItems.plugin.getPlayerDataManager().get(uuid);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@NotNull
|
||||
public static Collection<PlayerData> getLoaded() {
|
||||
return data.values();
|
||||
return MMOItems.plugin.getPlayerDataManager().getLoaded();
|
||||
}
|
||||
|
||||
public enum CooldownType {
|
||||
|
@ -0,0 +1,25 @@
|
||||
package net.Indyuce.mmoitems.manager.data;
|
||||
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.comp.profile.DefaultProfileDataModule;
|
||||
import io.lumine.mythic.lib.data.DefaultOfflineDataHolder;
|
||||
import io.lumine.mythic.lib.data.SynchronizedDataManager;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerDataManager extends SynchronizedDataManager<PlayerData, DefaultOfflineDataHolder> {
|
||||
public PlayerDataManager() {
|
||||
super(MMOItems.plugin, new YAMLDataHandler());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData newPlayerData(@NotNull MMOPlayerData mmoPlayerData) {
|
||||
return new PlayerData(mmoPlayerData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object newProfileDataModule() {
|
||||
return new DefaultProfileDataModule(MMOItems.plugin);
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package net.Indyuce.mmoitems.manager.data;
|
||||
|
||||
import io.lumine.mythic.lib.data.DefaultOfflineDataHolder;
|
||||
import io.lumine.mythic.lib.data.yaml.YAMLSynchronizedDataHandler;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
public class YAMLDataHandler extends YAMLSynchronizedDataHandler<PlayerData, DefaultOfflineDataHolder> {
|
||||
public YAMLDataHandler() {
|
||||
super(MMOItems.plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveInSection(PlayerData playerData, ConfigurationSection config) {
|
||||
config.createSection("crafting-queue");
|
||||
config.set("permissions-from-items", new ArrayList<>(playerData.getPermissions()));
|
||||
playerData.getCrafting().save(config.getConfigurationSection("crafting-queue"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFromSection(PlayerData playerData, ConfigurationSection config) {
|
||||
|
||||
if (config.contains("crafting-queue"))
|
||||
playerData.getCrafting().load(playerData, config.getConfigurationSection("crafting-queue"));
|
||||
|
||||
if (MMOItems.plugin.hasPermissions() && config.contains("permissions-from-items")) {
|
||||
final Permission perms = MMOItems.plugin.getVault().getPermissions();
|
||||
config.getStringList("permissions-from-items").forEach(perm -> {
|
||||
if (perms.has(playerData.getPlayer(), perm)) perms.playerRemove(playerData.getPlayer(), perm);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setup() {
|
||||
// Nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultOfflineDataHolder getOffline(@NotNull UUID uuid) {
|
||||
return new DefaultOfflineDataHolder(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
// Nothing
|
||||
}
|
||||
}
|
@ -11,7 +11,6 @@ import net.Indyuce.mmoitems.api.interaction.util.InteractItem;
|
||||
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.api.util.DeathDowngrading;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Trident;
|
||||
@ -20,30 +19,17 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
|
||||
/**
|
||||
* MythicLib runs of LOWEST
|
||||
* MMOCore and MMOInventory runs on LOW
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
public void loadPlayerData(PlayerJoinEvent event) {
|
||||
MMOItems.plugin.getRecipes().refreshRecipeBook(event.getPlayer());
|
||||
PlayerData.load(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void savePlayerData(PlayerQuitEvent event) {
|
||||
PlayerData.get(event.getPlayer()).save(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the player dies, its time to roll the death-downgrade stat!
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user