forked from Upstream/mmocore
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/main/java/net/Indyuce/mmocore/MMOCore.java # src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java # src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java
This commit is contained in:
commit
be23a38e3d
28
pom.xml
28
pom.xml
@ -15,20 +15,6 @@
|
|||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<distributionManagement>
|
|
||||||
<repository>
|
|
||||||
<id>nexus</id>
|
|
||||||
<name>Lumine Releases</name>
|
|
||||||
<url>https://mvn.lumine.io/repository/maven-releases/</url>
|
|
||||||
</repository>
|
|
||||||
<snapshotRepository>
|
|
||||||
<id>nexus</id>
|
|
||||||
<name>Lumine Snapshots</name>
|
|
||||||
<url>https://mvn.lumine.io/repository/maven-snapshots/</url>
|
|
||||||
</snapshotRepository>
|
|
||||||
|
|
||||||
</distributionManagement>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>${project.name}-${project.version}</finalName>
|
<finalName>${project.name}-${project.version}</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
@ -81,13 +67,13 @@
|
|||||||
<repositories>
|
<repositories>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>lumine</id>
|
<id>nexus</id>
|
||||||
<url>https://mvn.lumine.io/repository/maven/</url>
|
<url>https://mvn.lumine.io/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>placeholderapi</id>
|
<id>phoenix</id>
|
||||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
<url>http://la-grange-evasion.pro.dns-orange.fr:8081/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
@ -160,8 +146,8 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.clip</groupId>
|
<groupId>me.clip</groupId>
|
||||||
<artifactId>placeholderapi</artifactId>
|
<artifactId>PlaceholderAPI</artifactId>
|
||||||
<version>2.9.2</version>
|
<version>2.11.1</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -182,7 +168,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.citizensnpcs</groupId>
|
<groupId>net.citizensnpcs</groupId>
|
||||||
<artifactId>Citizens</artifactId>
|
<artifactId>Citizens</artifactId>
|
||||||
<version>2.0.25</version>
|
<version>2.0.30-b2571</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ import net.Indyuce.mmocore.comp.vault.VaultEconomy;
|
|||||||
import net.Indyuce.mmocore.comp.vault.VaultMMOLoader;
|
import net.Indyuce.mmocore.comp.vault.VaultMMOLoader;
|
||||||
import net.Indyuce.mmocore.guild.provided.Guild;
|
import net.Indyuce.mmocore.guild.provided.Guild;
|
||||||
import net.Indyuce.mmocore.listener.*;
|
import net.Indyuce.mmocore.listener.*;
|
||||||
import net.Indyuce.mmocore.listener.bungee.GetMMOCorePlayerListener;
|
|
||||||
import net.Indyuce.mmocore.listener.event.PlayerPressKeyListener;
|
import net.Indyuce.mmocore.listener.event.PlayerPressKeyListener;
|
||||||
import net.Indyuce.mmocore.listener.option.*;
|
import net.Indyuce.mmocore.listener.option.*;
|
||||||
import net.Indyuce.mmocore.listener.profession.FishingListener;
|
import net.Indyuce.mmocore.listener.profession.FishingListener;
|
||||||
@ -52,7 +51,6 @@ import org.bukkit.command.CommandMap;
|
|||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.spigotmc.SpigotConfig;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@ -99,6 +97,8 @@ public class MMOCore extends LuminePlugin {
|
|||||||
// Modules
|
// Modules
|
||||||
@NotNull
|
@NotNull
|
||||||
public PartyModule partyModule;
|
public PartyModule partyModule;
|
||||||
|
@NotNull
|
||||||
|
public GuildModule guildModule;
|
||||||
|
|
||||||
public boolean shouldDebugSQL = false;
|
public boolean shouldDebugSQL = false;
|
||||||
public boolean hasBungee=false;
|
public boolean hasBungee=false;
|
||||||
@ -255,6 +255,16 @@ public class MMOCore extends LuminePlugin {
|
|||||||
partyModule = new MMOCorePartyModule();
|
partyModule = new MMOCorePartyModule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load guild module
|
||||||
|
try {
|
||||||
|
String pluginName = UtilityMethods.enumName(getConfig().getString("guild-plugin"));
|
||||||
|
GuildModuleType moduleType = GuildModuleType.valueOf(pluginName);
|
||||||
|
Validate.isTrue(moduleType.isValid(), "Plugin '" + moduleType.name() + "' is not installed");
|
||||||
|
guildModule = moduleType.provideModule();
|
||||||
|
} catch (RuntimeException exception) {
|
||||||
|
getLogger().log(Level.WARNING, "Could not initialize guild module: " + exception.getMessage());
|
||||||
|
guildModule = new MMOCoreGuildModule();
|
||||||
|
}
|
||||||
|
|
||||||
// Skill casting
|
// Skill casting
|
||||||
try {
|
try {
|
||||||
@ -392,7 +402,7 @@ public class MMOCore extends LuminePlugin {
|
|||||||
* Called either when the server starts when initializing the manager for
|
* Called either when the server starts when initializing the manager for
|
||||||
* the first time, or when issuing a plugin reload; in that case, stuff
|
* the first time, or when issuing a plugin reload; in that case, stuff
|
||||||
* like listeners must all be cleared before.
|
* like listeners must all be cleared before.
|
||||||
* <p>
|
*
|
||||||
* Also see {@link MMOCoreManager}
|
* Also see {@link MMOCoreManager}
|
||||||
*
|
*
|
||||||
* @param clearBefore True when issuing a plugin reload
|
* @param clearBefore True when issuing a plugin reload
|
||||||
@ -462,7 +472,7 @@ public class MMOCore extends LuminePlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void sqlDebug(String s) {
|
public static void sqlDebug(String s) {
|
||||||
if (!MMOCore.plugin.shouldDebugSQL) return;
|
if(!MMOCore.plugin.shouldDebugSQL) return;
|
||||||
MMOCore.plugin.getLogger().warning("- [SQL Debug] " + s);
|
MMOCore.plugin.getLogger().warning("- [SQL Debug] " + s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public class PlayerActionBar extends BukkitRunnable {
|
|||||||
.replace("{stellium}", digit.format(data.getStellium()))
|
.replace("{stellium}", digit.format(data.getStellium()))
|
||||||
.replace("{max_stellium}", StatInfo.valueOf("MAX_STELLIUM").format(data.getStats().getStat("MAX_STELLIUM")))
|
.replace("{max_stellium}", StatInfo.valueOf("MAX_STELLIUM").format(data.getStats().getStat("MAX_STELLIUM")))
|
||||||
.replace("{class}", data.getProfess().getName())
|
.replace("{class}", data.getProfess().getName())
|
||||||
.replace("{xp}", "" + data.getExperience())
|
.replace("{xp}", MythicLib.plugin.getMMOConfig().decimal.format(data.getExperience()))
|
||||||
.replace("{armor}", StatInfo.valueOf("ARMOR").format(data.getPlayer().getAttribute(Attribute.GENERIC_ARMOR).getValue()))
|
.replace("{armor}", StatInfo.valueOf("ARMOR").format(data.getPlayer().getAttribute(Attribute.GENERIC_ARMOR).getValue()))
|
||||||
.replace("{level}", "" + data.getLevel())
|
.replace("{level}", "" + data.getLevel())
|
||||||
.replace("{name}", data.getPlayer().getDisplayName())))));
|
.replace("{name}", data.getPlayer().getDisplayName())))));
|
||||||
|
@ -4,11 +4,12 @@ import org.bukkit.event.HandlerList;
|
|||||||
|
|
||||||
import net.Indyuce.mmocore.experience.Profession;
|
import net.Indyuce.mmocore.experience.Profession;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class PlayerLevelUpEvent extends PlayerDataEvent {
|
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
|
// If null, this is main level
|
||||||
private final Profession profession;
|
private final Profession profession;
|
||||||
private final int oldLevel, newLevel;
|
private final int oldLevel, newLevel;
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ public class PlayerLevelUpEvent extends PlayerDataEvent {
|
|||||||
return profession != null;
|
return profession != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
public Profession getProfession() {
|
public Profession getProfession() {
|
||||||
return profession;
|
return profession;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package net.Indyuce.mmocore.api.player;
|
package net.Indyuce.mmocore.api.player;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||||
import io.lumine.mythic.lib.player.TemporaryPlayerData;
|
import io.lumine.mythic.lib.player.TemporaryPlayerData;
|
||||||
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
|
||||||
@ -29,7 +28,6 @@ import net.Indyuce.mmocore.experience.droptable.ExperienceItem;
|
|||||||
import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
|
import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
|
||||||
import net.Indyuce.mmocore.guild.provided.Guild;
|
import net.Indyuce.mmocore.guild.provided.Guild;
|
||||||
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
||||||
import net.Indyuce.mmocore.manager.data.mysql.MySQLTableEditor;
|
|
||||||
import net.Indyuce.mmocore.party.AbstractParty;
|
import net.Indyuce.mmocore.party.AbstractParty;
|
||||||
import net.Indyuce.mmocore.party.provided.Party;
|
import net.Indyuce.mmocore.party.provided.Party;
|
||||||
import net.Indyuce.mmocore.player.Unlockable;
|
import net.Indyuce.mmocore.player.Unlockable;
|
||||||
@ -52,7 +50,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
|
||||||
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
|
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
|
||||||
@ -601,18 +598,19 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = MMOCore.plugin.boosterManager.calculateExp(null, value);
|
|
||||||
value *= 1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100;
|
|
||||||
|
|
||||||
// Splitting exp through party members
|
// Splitting exp through party members
|
||||||
AbstractParty party = getParty();
|
AbstractParty party;
|
||||||
if (splitExp && party != null) {
|
if (splitExp && (party = getParty()) != null) {
|
||||||
List<PlayerData> onlineMembers = getParty().getOnlineMembers();
|
List<PlayerData> onlineMembers = party.getOnlineMembers();
|
||||||
value /= onlineMembers.size();
|
value /= onlineMembers.size();
|
||||||
for (PlayerData member : onlineMembers)
|
for (PlayerData member : onlineMembers)
|
||||||
member.giveExperience(value, EXPSource.PARTY_SHARING, null, false);
|
if (!equals(member))
|
||||||
|
member.giveExperience(value, source, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apply buffs AFTER splitting exp
|
||||||
|
value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null);
|
||||||
|
|
||||||
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(this, value, source);
|
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(this, value, source);
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
if (event.isCancelled())
|
if (event.isCancelled())
|
||||||
@ -620,7 +618,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
|
|
||||||
// Experience hologram
|
// Experience hologram
|
||||||
if (hologramLocation != null && isOnline())
|
if (hologramLocation != null && isOnline())
|
||||||
MMOCoreUtils.displayIndicator(hologramLocation, MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", String.valueOf(event.getExperience())).message());
|
MMOCoreUtils.displayIndicator(hologramLocation, MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", MythicLib.plugin.getMMOConfig().decimal.format(event.getExperience())).message());
|
||||||
|
|
||||||
experience = Math.max(0, experience + event.getExperience());
|
experience = Math.max(0, experience + event.getExperience());
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.Indyuce.mmocore.command.rpg.admin;
|
package net.Indyuce.mmocore.command.rpg.admin;
|
||||||
|
|
||||||
|
import io.lumine.mythic.lib.MythicLib;
|
||||||
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
import io.lumine.mythic.lib.command.api.CommandTreeNode;
|
||||||
import io.lumine.mythic.lib.command.api.Parameter;
|
import io.lumine.mythic.lib.command.api.Parameter;
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
@ -23,9 +24,9 @@ public class ExperienceCommandTreeNode extends CommandTreeNode {
|
|||||||
|
|
||||||
addChild(new ActionCommandTreeNode(this, "set", PlayerData::setExperience, PlayerProfessions::setExperience));
|
addChild(new ActionCommandTreeNode(this, "set", PlayerData::setExperience, PlayerProfessions::setExperience));
|
||||||
addChild(new ActionCommandTreeNode(this, "give", (data, value) -> data.giveExperience(value, EXPSource.COMMAND), (professions, profession,
|
addChild(new ActionCommandTreeNode(this, "give", (data, value) -> data.giveExperience(value, EXPSource.COMMAND), (professions, profession,
|
||||||
value) -> professions.giveExperience(profession, value, EXPSource.COMMAND, professions.getPlayerData().getPlayer().getLocation())));
|
value) -> professions.giveExperience(profession, value, EXPSource.COMMAND)));
|
||||||
addChild(new ActionCommandTreeNode(this, "take", (data, value) -> data.giveExperience(-value, EXPSource.COMMAND), (professions, profession,
|
addChild(new ActionCommandTreeNode(this, "take", (data, value) -> data.giveExperience(-value, EXPSource.COMMAND), (professions, profession,
|
||||||
value) -> professions.giveExperience(profession, -value, EXPSource.COMMAND, professions.getPlayerData().getPlayer().getLocation())));
|
value) -> professions.giveExperience(profession, -value, EXPSource.COMMAND)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ActionCommandTreeNode extends CommandTreeNode {
|
public static class ActionCommandTreeNode extends CommandTreeNode {
|
||||||
@ -68,7 +69,7 @@ public class ExperienceCommandTreeNode extends CommandTreeNode {
|
|||||||
if (args[4].equalsIgnoreCase("main")) {
|
if (args[4].equalsIgnoreCase("main")) {
|
||||||
main.accept(data, amount);
|
main.accept(data, amount);
|
||||||
CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, ChatColor.GOLD + player.getName() + ChatColor.YELLOW
|
CommandVerbose.verbose(sender, CommandVerbose.CommandType.EXPERIENCE, ChatColor.GOLD + player.getName() + ChatColor.YELLOW
|
||||||
+ " now has " + ChatColor.GOLD + data.getExperience() + ChatColor.YELLOW + " EXP.");
|
+ " now has " + ChatColor.GOLD + MythicLib.plugin.getMMOConfig().decimal.format(data.getExperience()) + ChatColor.YELLOW + " EXP.");
|
||||||
return CommandResult.SUCCESS;
|
return CommandResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.Indyuce.mmocore.command.rpg.admin;
|
package net.Indyuce.mmocore.command.rpg.admin;
|
||||||
|
|
||||||
|
import io.lumine.mythic.lib.MythicLib;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -33,7 +34,7 @@ public class InfoCommandTreeNode extends CommandTreeNode {
|
|||||||
sender.sendMessage(ChatColor.YELLOW + "----------------------------------------------------");
|
sender.sendMessage(ChatColor.YELLOW + "----------------------------------------------------");
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Class: " + ChatColor.GOLD + playerData.getProfess().getName());
|
sender.sendMessage(ChatColor.YELLOW + "Class: " + ChatColor.GOLD + playerData.getProfess().getName());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Level: " + ChatColor.GOLD + playerData.getLevel());
|
sender.sendMessage(ChatColor.YELLOW + "Level: " + ChatColor.GOLD + playerData.getLevel());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Experience: " + ChatColor.GOLD + playerData.getExperience() + ChatColor.YELLOW + " / " + ChatColor.GOLD
|
sender.sendMessage(ChatColor.YELLOW + "Experience: " + ChatColor.GOLD + MythicLib.plugin.getMMOConfig().decimal.format(playerData.getExperience()) + ChatColor.YELLOW + " / " + ChatColor.GOLD
|
||||||
+ playerData.getLevelUpExperience());
|
+ playerData.getLevelUpExperience());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Class Points: " + ChatColor.GOLD + playerData.getClassPoints());
|
sender.sendMessage(ChatColor.YELLOW + "Class Points: " + ChatColor.GOLD + playerData.getClassPoints());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Quests: " + ChatColor.GOLD + playerData.getQuestData().getFinishedQuests().size() + ChatColor.YELLOW
|
sender.sendMessage(ChatColor.YELLOW + "Quests: " + ChatColor.GOLD + playerData.getQuestData().getFinishedQuests().size() + ChatColor.YELLOW
|
||||||
|
@ -128,7 +128,7 @@ public class RPGPlaceholders extends PlaceholderExpansion {
|
|||||||
.valueOf(playerData.getCollectionSkills().getLevel(identifier.substring(11).replace(" ", "-").replace("_", "-").toLowerCase()));
|
.valueOf(playerData.getCollectionSkills().getLevel(identifier.substring(11).replace(" ", "-").replace("_", "-").toLowerCase()));
|
||||||
|
|
||||||
else if (identifier.equals("experience"))
|
else if (identifier.equals("experience"))
|
||||||
return String.valueOf(playerData.getExperience());
|
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getExperience());
|
||||||
|
|
||||||
else if (identifier.equals("next_level"))
|
else if (identifier.equals("next_level"))
|
||||||
return String.valueOf(playerData.getLevelUpExperience());
|
return String.valueOf(playerData.getLevelUpExperience());
|
||||||
@ -226,9 +226,9 @@ public class RPGPlaceholders extends PlaceholderExpansion {
|
|||||||
else if (placeholder.equalsIgnoreCase("leader"))
|
else if (placeholder.equalsIgnoreCase("leader"))
|
||||||
return Bukkit.getOfflinePlayer(playerData.getGuild().getOwner()).getName();
|
return Bukkit.getOfflinePlayer(playerData.getGuild().getOwner()).getName();
|
||||||
else if (placeholder.equalsIgnoreCase("members"))
|
else if (placeholder.equalsIgnoreCase("members"))
|
||||||
return "" + playerData.getGuild().getMembers().count();
|
return String.valueOf(playerData.getGuild().countMembers());
|
||||||
else if (placeholder.equalsIgnoreCase("online_members"))
|
else if (placeholder.equalsIgnoreCase("online_members"))
|
||||||
return "" + playerData.getGuild().getMembers().countOnline();
|
return String.valueOf(playerData.getGuild().countOnlineMembers());
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -19,7 +19,10 @@ public enum EXPSource {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* When party members share exp
|
* When party members share exp
|
||||||
|
*
|
||||||
|
* @deprecated Not used anymore
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
PARTY_SHARING,
|
PARTY_SHARING,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +13,7 @@ import net.Indyuce.mmocore.api.event.PlayerLevelUpEvent;
|
|||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
|
||||||
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
|
||||||
|
import net.Indyuce.mmocore.party.AbstractParty;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -22,6 +23,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
@ -147,15 +149,15 @@ public class PlayerProfessions {
|
|||||||
giveExperience(profession, total, source);
|
giveExperience(profession, total, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void giveExperience(Profession profession, double value, EXPSource source) {
|
|
||||||
giveExperience(profession, value, source, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasReachedMaxLevel(Profession profession) {
|
public boolean hasReachedMaxLevel(Profession profession) {
|
||||||
return profession.hasMaxLevel() && getLevel(profession) >= profession.getMaxLevel();
|
return profession.hasMaxLevel() && getLevel(profession) >= profession.getMaxLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void giveExperience(Profession profession, double value, EXPSource source, @Nullable Location hologramLocation) {
|
public void giveExperience(Profession profession, double value, EXPSource source) {
|
||||||
|
giveExperience(profession, value, source, null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void giveExperience(Profession profession, double value, EXPSource source, @Nullable Location hologramLocation, boolean splitExp) {
|
||||||
Validate.isTrue(playerData.isOnline(), "Cannot give experience to offline player");
|
Validate.isTrue(playerData.isOnline(), "Cannot give experience to offline player");
|
||||||
if (value <= 0)
|
if (value <= 0)
|
||||||
return;
|
return;
|
||||||
@ -165,23 +167,31 @@ public class PlayerProfessions {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = MMOCore.plugin.boosterManager.calculateExp(profession, value);
|
// Splitting exp through party members
|
||||||
|
AbstractParty party;
|
||||||
|
if (splitExp && (party = playerData.getParty()) != null) {
|
||||||
|
List<PlayerData> onlineMembers = party.getOnlineMembers();
|
||||||
|
value /= onlineMembers.size();
|
||||||
|
for (PlayerData member : onlineMembers)
|
||||||
|
if (!member.equals(playerData))
|
||||||
|
member.getCollectionSkills().giveExperience(profession, value, source, null, false);
|
||||||
|
}
|
||||||
|
|
||||||
// Adds functionality for additional experience per profession.
|
// Apply buffs AFTER splitting exp
|
||||||
value *= 1 + playerData.getStats().getInstance("ADDITIONAL_EXPERIENCE_" + UtilityMethods.enumName(profession.getId())).getTotal() / 100;
|
value *= (1 + playerData.getStats().getStat("ADDITIONAL_EXPERIENCE_" + UtilityMethods.enumName(profession.getId())) / 100) * MMOCore.plugin.boosterManager.getMultiplier(profession);
|
||||||
|
|
||||||
// Display hologram
|
|
||||||
if (hologramLocation != null)
|
|
||||||
MMOCoreUtils.displayIndicator(hologramLocation.add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message());
|
|
||||||
|
|
||||||
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(playerData, profession, value, source);
|
PlayerExperienceGainEvent event = new PlayerExperienceGainEvent(playerData, profession, value, source);
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
if (event.isCancelled())
|
if (event.isCancelled())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Display hologram
|
||||||
|
if (hologramLocation != null)
|
||||||
|
MMOCoreUtils.displayIndicator(hologramLocation.add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", MythicLib.plugin.getMMOConfig().decimal.format(event.getExperience())).message());
|
||||||
|
|
||||||
exp.put(profession.getId(), Math.max(0, exp.getOrDefault(profession.getId(), 0.) + event.getExperience()));
|
exp.put(profession.getId(), Math.max(0, exp.getOrDefault(profession.getId(), 0.) + event.getExperience()));
|
||||||
int level, oldLevel = getLevel(profession);
|
int level, oldLevel = getLevel(profession);
|
||||||
double needed,exp;
|
double needed, exp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loop for exp overload when leveling up, will continue
|
* Loop for exp overload when leveling up, will continue
|
||||||
|
@ -127,7 +127,7 @@ public class Profession extends PostLoadObject implements ExperienceObject {
|
|||||||
public void giveExperience(PlayerData playerData, double experience, @Nullable Location hologramLocation, EXPSource source) {
|
public void giveExperience(PlayerData playerData, double experience, @Nullable Location hologramLocation, EXPSource source) {
|
||||||
hologramLocation = !getOption(Profession.ProfessionOption.EXP_HOLOGRAMS) ? null
|
hologramLocation = !getOption(Profession.ProfessionOption.EXP_HOLOGRAMS) ? null
|
||||||
: hologramLocation;
|
: hologramLocation;
|
||||||
playerData.getCollectionSkills().giveExperience(this, experience, EXPSource.SOURCE, hologramLocation);
|
playerData.getCollectionSkills().giveExperience(this, experience, EXPSource.SOURCE, hologramLocation, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -11,6 +11,8 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
* Used to differenciate between the main class experience and
|
* Used to differenciate between the main class experience and
|
||||||
* experience given in a specific profession. Also being used to
|
* experience given in a specific profession. Also being used to
|
||||||
* monitor EXP holograms.
|
* monitor EXP holograms.
|
||||||
|
*
|
||||||
|
* @deprecated Merged with {@link net.Indyuce.mmocore.experience.ExperienceObject}
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public interface ExperienceDispenser {
|
public interface ExperienceDispenser {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.Indyuce.mmocore.gui;
|
package net.Indyuce.mmocore.gui;
|
||||||
|
|
||||||
|
import io.lumine.mythic.lib.MythicLib;
|
||||||
import io.lumine.mythic.lib.UtilityMethods;
|
import io.lumine.mythic.lib.UtilityMethods;
|
||||||
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
|
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
|
||||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||||
@ -243,7 +244,7 @@ public class PlayerStats extends EditableInventory {
|
|||||||
bar.append(j == chars ? "" + ChatColor.WHITE + ChatColor.BOLD : "").append("|");
|
bar.append(j == chars ? "" + ChatColor.WHITE + ChatColor.BOLD : "").append("|");
|
||||||
|
|
||||||
holders.register("percent", decimal.format(ratio * 100));
|
holders.register("percent", decimal.format(ratio * 100));
|
||||||
holders.register("exp", "" + data.getExperience());
|
holders.register("exp", MythicLib.plugin.getMMOConfig().decimal.format(data.getExperience()));
|
||||||
holders.register("level", "" + data.getLevel());
|
holders.register("level", "" + data.getLevel());
|
||||||
holders.register("class_points", "" + data.getClassPoints());
|
holders.register("class_points", "" + data.getClassPoints());
|
||||||
holders.register("skill_points", "" + data.getSkillPoints());
|
holders.register("skill_points", "" + data.getSkillPoints());
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package net.Indyuce.mmocore.gui.social.guild;
|
package net.Indyuce.mmocore.gui.social.guild;
|
||||||
|
|
||||||
import io.lumine.mythic.lib.api.item.ItemTag;
|
|
||||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
|
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
|
||||||
@ -25,6 +23,7 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EditableGuildAdmin extends EditableInventory {
|
public class EditableGuildAdmin extends EditableInventory {
|
||||||
@ -43,7 +42,7 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
return new GuildViewInventory(data, this);
|
return new GuildViewInventory(data, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MemberDisplayItem extends InventoryItem {
|
public static class MemberDisplayItem extends InventoryItem<GuildViewInventory> {
|
||||||
public MemberDisplayItem(MemberItem memberItem, ConfigurationSection config) {
|
public MemberDisplayItem(MemberItem memberItem, ConfigurationSection config) {
|
||||||
super(memberItem, config);
|
super(memberItem, config);
|
||||||
}
|
}
|
||||||
@ -54,8 +53,8 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
public Placeholders getPlaceholders(GuildViewInventory inv, int n) {
|
||||||
PlayerData member = PlayerData.get(inv.getPlayerData().getGuild().getMembers().get(n));
|
PlayerData member = PlayerData.get(inv.members.get(n));
|
||||||
|
|
||||||
Placeholders holders = new Placeholders();
|
Placeholders holders = new Placeholders();
|
||||||
|
|
||||||
@ -68,8 +67,8 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack display(GeneratedInventory inv, int n) {
|
public ItemStack display(GuildViewInventory inv, int n) {
|
||||||
UUID uuid = inv.getPlayerData().getGuild().getMembers().get(n);
|
UUID uuid = inv.members.get(n);
|
||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
|
||||||
ItemStack disp = super.display(inv, n);
|
ItemStack disp = super.display(inv, n);
|
||||||
@ -87,7 +86,7 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MemberItem extends SimplePlaceholderItem {
|
public static class MemberItem extends SimplePlaceholderItem<GuildViewInventory> {
|
||||||
private final InventoryItem empty;
|
private final InventoryItem empty;
|
||||||
private final MemberDisplayItem member;
|
private final MemberDisplayItem member;
|
||||||
|
|
||||||
@ -102,8 +101,8 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack display(GeneratedInventory inv, int n) {
|
public ItemStack display(GuildViewInventory inv, int n) {
|
||||||
return inv.getPlayerData().getGuild().getMembers().count() > n ? member.display(inv, n) : empty.display(inv, n);
|
return inv.getPlayerData().getGuild().countMembers() > n ? member.display(inv, n) : empty.display(inv, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -115,15 +114,23 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
public class GuildViewInventory extends GeneratedInventory {
|
public class GuildViewInventory extends GeneratedInventory {
|
||||||
private final int max;
|
private final int max;
|
||||||
|
|
||||||
|
private List<UUID> members;
|
||||||
|
|
||||||
public GuildViewInventory(PlayerData playerData, EditableInventory editable) {
|
public GuildViewInventory(PlayerData playerData, EditableInventory editable) {
|
||||||
super(playerData, editable);
|
super(playerData, editable);
|
||||||
|
|
||||||
max = editable.getByFunction("member").getSlots().size();
|
max = editable.getByFunction("member").getSlots().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open() {
|
||||||
|
members = playerData.getGuild().listMembers();
|
||||||
|
super.open();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String calculateName() {
|
public String calculateName() {
|
||||||
return getName().replace("{max}", "" + max).replace("{players}", "" + getPlayerData().getGuild().getMembers().count());
|
return getName().replace("{max}", "" + max).replace("{players}", "" + getPlayerData().getGuild().countMembers());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -138,7 +145,7 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
|
|
||||||
if (item.getFunction().equals("invite")) {
|
if (item.getFunction().equals("invite")) {
|
||||||
|
|
||||||
if (playerData.getGuild().getMembers().count() >= max) {
|
if (playerData.getGuild().countMembers() >= max) {
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("guild-is-full").send(player);
|
MMOCore.plugin.configManager.getSimpleMessage("guild-is-full").send(player);
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||||
return;
|
return;
|
||||||
@ -162,7 +169,7 @@ public class EditableGuildAdmin extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlayerData targetData = PlayerData.get(target);
|
PlayerData targetData = PlayerData.get(target);
|
||||||
if (playerData.getGuild().getMembers().has(target.getUniqueId())) {
|
if (playerData.getGuild().hasMember(target.getUniqueId())) {
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("already-in-guild", "player", target.getName()).send(player);
|
MMOCore.plugin.configManager.getSimpleMessage("already-in-guild", "player", target.getName()).send(player);
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||||
open();
|
open();
|
||||||
|
@ -21,6 +21,7 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EditableGuildView extends EditableInventory {
|
public class EditableGuildView extends EditableInventory {
|
||||||
@ -35,7 +36,7 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous") || function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new SimplePlaceholderItem(config);
|
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous") || function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new SimplePlaceholderItem(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MemberDisplayItem extends InventoryItem {
|
public static class MemberDisplayItem extends InventoryItem<GuildViewInventory> {
|
||||||
public MemberDisplayItem(MemberItem memberItem, ConfigurationSection config) {
|
public MemberDisplayItem(MemberItem memberItem, ConfigurationSection config) {
|
||||||
super(memberItem, config);
|
super(memberItem, config);
|
||||||
}
|
}
|
||||||
@ -46,8 +47,8 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
public Placeholders getPlaceholders(GuildViewInventory inv, int n) {
|
||||||
UUID uuid = inv.getPlayerData().getGuild().getMembers().get(n);
|
UUID uuid = inv.members.get(n);
|
||||||
Placeholders holders = new Placeholders();
|
Placeholders holders = new Placeholders();
|
||||||
/*
|
/*
|
||||||
* Will never be null since a players name will always be recorded
|
* Will never be null since a players name will always be recorded
|
||||||
@ -64,8 +65,8 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack display(GeneratedInventory inv, int n) {
|
public ItemStack display(GuildViewInventory inv, int n) {
|
||||||
UUID uuid = inv.getPlayerData().getGuild().getMembers().get(n);
|
UUID uuid = inv.members.get(n);
|
||||||
|
|
||||||
ItemStack disp = super.display(inv, n);
|
ItemStack disp = super.display(inv, n);
|
||||||
ItemMeta meta = disp.getItemMeta();
|
ItemMeta meta = disp.getItemMeta();
|
||||||
@ -99,7 +100,7 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
@Override
|
@Override
|
||||||
public ItemStack display(GuildViewInventory inv, int n) {
|
public ItemStack display(GuildViewInventory inv, int n) {
|
||||||
int index = n * inv.getPage();
|
int index = n * inv.getPage();
|
||||||
return inv.getPlayerData().getGuild().getMembers().count() > index ? member.display(inv, index) : empty.display(inv, index);
|
return inv.getPlayerData().getGuild().countMembers() > index ? member.display(inv, index) : empty.display(inv, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -120,7 +121,7 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
public ItemStack display(GuildViewInventory inv, int n) {
|
public ItemStack display(GuildViewInventory inv, int n) {
|
||||||
|
|
||||||
if (function.equals("next"))
|
if (function.equals("next"))
|
||||||
if (inv.getPage() == (inv.getPlayerData().getGuild().getMembers().count() + 20)
|
if (inv.getPage() == (inv.getPlayerData().getGuild().countMembers() + 20)
|
||||||
/ inv.getByFunction("member").getSlots().size())
|
/ inv.getByFunction("member").getSlots().size())
|
||||||
return null;
|
return null;
|
||||||
if (function.equals("previous") && inv.getPage() == 1)
|
if (function.equals("previous") && inv.getPage() == 1)
|
||||||
@ -136,19 +137,26 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class GuildViewInventory extends GeneratedInventory {
|
public class GuildViewInventory extends GeneratedInventory {
|
||||||
private int page = 1;
|
|
||||||
private final int maxpages;
|
private final int maxpages;
|
||||||
|
|
||||||
|
private int page = 1;
|
||||||
|
private List<UUID> members;
|
||||||
|
|
||||||
public GuildViewInventory(PlayerData playerData, EditableInventory editable) {
|
public GuildViewInventory(PlayerData playerData, EditableInventory editable) {
|
||||||
super(playerData, editable);
|
super(playerData, editable);
|
||||||
|
|
||||||
maxpages = (playerData.getGuild().getMembers().count() + 20)
|
maxpages = (playerData.getGuild().countMembers() + 20) / editable.getByFunction("member").getSlots().size();
|
||||||
/ editable.getByFunction("member").getSlots().size();
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void open() {
|
||||||
|
members = playerData.getGuild().listMembers();
|
||||||
|
super.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String calculateName() {
|
public String calculateName() {
|
||||||
return getName().replace("{online_players}", "" + getPlayerData().getGuild().getMembers().countOnline()).replace("{page}", "" + page).replace("{maxpages}", "" + maxpages).replace("{players}", "" + getPlayerData().getGuild().getMembers().count()).replace("{tag}", getPlayerData().getGuild().getTag()).replace("{name}", getPlayerData().getGuild().getName());
|
return getName().replace("{online_players}", "" + getPlayerData().getGuild().countOnlineMembers()).replace("{page}", "" + page).replace("{maxpages}", "" + maxpages).replace("{players}", String.valueOf(getPlayerData().getGuild().countMembers())).replace("{tag}", getPlayerData().getGuild().getTag()).replace("{name}", getPlayerData().getGuild().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -209,7 +217,7 @@ public class EditableGuildView extends EditableInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlayerData targetData = PlayerData.get(target);
|
PlayerData targetData = PlayerData.get(target);
|
||||||
if (playerData.getGuild().getMembers().has(targetData.getUniqueId())) {
|
if (playerData.getGuild().hasMember(targetData.getUniqueId())) {
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("already-in-guild", "player", target.getName()).send(player);
|
MMOCore.plugin.configManager.getSimpleMessage("already-in-guild", "player", target.getName()).send(player);
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||||
open();
|
open();
|
||||||
|
@ -172,6 +172,13 @@ public class EditablePartyView extends EditableInventory {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Math.abs(targetData.getLevel() - party.getLevel()) > MMOCore.plugin.configManager.maxPartyLevelDifference) {
|
||||||
|
MMOCore.plugin.configManager.getSimpleMessage("high-level-difference", "player", target.getName()).send(player);
|
||||||
|
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||||
|
open();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
party.sendInvite(playerData, targetData);
|
party.sendInvite(playerData, targetData);
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("sent-party-invite", "player", target.getName()).send(player);
|
MMOCore.plugin.configManager.getSimpleMessage("sent-party-invite", "player", target.getName()).send(player);
|
||||||
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
package net.Indyuce.mmocore.guild;
|
package net.Indyuce.mmocore.guild;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public interface AbstractGuild {
|
public interface AbstractGuild {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return If given player is in that party
|
||||||
|
*/
|
||||||
|
boolean hasMember(Player player);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package net.Indyuce.mmocore.guild;
|
package net.Indyuce.mmocore.guild;
|
||||||
|
|
||||||
import net.Indyuce.mmocore.guild.compat.FactionsGuildModule;
|
|
||||||
import net.Indyuce.mmocore.guild.compat.GuildsGuildModule;
|
import net.Indyuce.mmocore.guild.compat.GuildsGuildModule;
|
||||||
|
import net.Indyuce.mmocore.guild.compat.KingdomsXGuildModule;
|
||||||
import net.Indyuce.mmocore.guild.compat.UltimateClansGuildModule;
|
import net.Indyuce.mmocore.guild.compat.UltimateClansGuildModule;
|
||||||
import net.Indyuce.mmocore.guild.provided.MMOCoreGuildModule;
|
import net.Indyuce.mmocore.guild.provided.MMOCoreGuildModule;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -9,9 +9,10 @@ import org.bukkit.Bukkit;
|
|||||||
import javax.inject.Provider;
|
import javax.inject.Provider;
|
||||||
|
|
||||||
public enum GuildModuleType {
|
public enum GuildModuleType {
|
||||||
FACTIONS("Factions", FactionsGuildModule::new),
|
// Useless since MythicLib already supports FactionBridge
|
||||||
|
// FACTIONS("Factions", FactionsGuildModule::new),
|
||||||
GUILDS("Guilds", GuildsGuildModule::new),
|
GUILDS("Guilds", GuildsGuildModule::new),
|
||||||
KINGDOMSX("Guilds", GuildsGuildModule::new),
|
KINGDOMSX("KingdomsX", KingdomsXGuildModule::new),
|
||||||
MMOCORE("MMOCore", MMOCoreGuildModule::new),
|
MMOCORE("MMOCore", MMOCoreGuildModule::new),
|
||||||
ULTIMATE_CLANS("UltimateClans", UltimateClansGuildModule::new),
|
ULTIMATE_CLANS("UltimateClans", UltimateClansGuildModule::new),
|
||||||
;
|
;
|
||||||
|
@ -6,13 +6,20 @@ import com.massivecraft.factions.Faction;
|
|||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.guild.AbstractGuild;
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import net.Indyuce.mmocore.guild.GuildModule;
|
import net.Indyuce.mmocore.guild.GuildModule;
|
||||||
|
import org.apache.commons.lang.NotImplementedException;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class FactionsGuildModule implements GuildModule {
|
public class FactionsGuildModule implements GuildModule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractGuild getGuild(PlayerData playerData) {
|
public AbstractGuild getGuild(PlayerData playerData) {
|
||||||
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(playerData.getPlayer());
|
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(playerData.getPlayer());
|
||||||
|
if (fPlayer == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
return fPlayer.hasFaction() ? new CustomGuild(fPlayer.getFaction()) : null;
|
return fPlayer.hasFaction() ? new CustomGuild(fPlayer.getFaction()) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +29,12 @@ public class FactionsGuildModule implements GuildModule {
|
|||||||
private final Faction faction;
|
private final Faction faction;
|
||||||
|
|
||||||
CustomGuild(Faction faction) {
|
CustomGuild(Faction faction) {
|
||||||
this.faction = faction;
|
this.faction = Objects.requireNonNull(faction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasMember(Player player) {
|
||||||
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,11 @@ import me.glaremasters.guilds.guild.Guild;
|
|||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.guild.AbstractGuild;
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import net.Indyuce.mmocore.guild.GuildModule;
|
import net.Indyuce.mmocore.guild.GuildModule;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class GuildsGuildModule implements GuildModule {
|
public class GuildsGuildModule implements GuildModule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -21,7 +24,12 @@ public class GuildsGuildModule implements GuildModule {
|
|||||||
private final Guild guild;
|
private final Guild guild;
|
||||||
|
|
||||||
CustomGuild(Guild guild) {
|
CustomGuild(Guild guild) {
|
||||||
this.guild = guild;
|
this.guild = Objects.requireNonNull(guild);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasMember(Player player) {
|
||||||
|
return guild.getMember(player.getUniqueId()) != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,23 @@ package net.Indyuce.mmocore.guild.compat;
|
|||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.guild.AbstractGuild;
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import net.Indyuce.mmocore.guild.GuildModule;
|
import net.Indyuce.mmocore.guild.GuildModule;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.kingdoms.constants.kingdom.Kingdom;
|
import org.kingdoms.constants.kingdom.Kingdom;
|
||||||
import org.kingdoms.constants.player.KingdomPlayer;
|
import org.kingdoms.constants.player.KingdomPlayer;
|
||||||
import org.kingdoms.main.Kingdoms;
|
import org.kingdoms.main.Kingdoms;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class KingdomsXGuildModule implements GuildModule {
|
public class KingdomsXGuildModule implements GuildModule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractGuild getGuild(PlayerData playerData) {
|
public AbstractGuild getGuild(PlayerData playerData) {
|
||||||
KingdomPlayer kPlayer = Kingdoms.get().getDataHandlers().getKingdomPlayerManager().getData(playerData.getUniqueId());
|
KingdomPlayer kPlayer = Kingdoms.get().getDataHandlers().getKingdomPlayerManager().getData(playerData.getUniqueId());
|
||||||
Kingdom kingdom = kPlayer == null ? null : kPlayer.getKingdom();
|
if (kPlayer == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
Kingdom kingdom = kPlayer.getKingdom();
|
||||||
return kingdom == null ? null : new CustomGuild(kingdom);
|
return kingdom == null ? null : new CustomGuild(kingdom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +29,12 @@ public class KingdomsXGuildModule implements GuildModule {
|
|||||||
private final Kingdom kingdom;
|
private final Kingdom kingdom;
|
||||||
|
|
||||||
CustomGuild(Kingdom kingdom) {
|
CustomGuild(Kingdom kingdom) {
|
||||||
this.kingdom = kingdom;
|
this.kingdom = Objects.requireNonNull(kingdom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasMember(Player player) {
|
||||||
|
return kingdom.isMember(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,11 @@ import net.Indyuce.mmocore.api.player.PlayerData;
|
|||||||
import net.Indyuce.mmocore.guild.AbstractGuild;
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import net.Indyuce.mmocore.guild.GuildModule;
|
import net.Indyuce.mmocore.guild.GuildModule;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class UltimateClansGuildModule implements GuildModule {
|
public class UltimateClansGuildModule implements GuildModule {
|
||||||
private static final UClans API = (UClans) Bukkit.getPluginManager().getPlugin("UltimateCLans");
|
private static final UClans API = (UClans) Bukkit.getPluginManager().getPlugin("UltimateCLans");
|
||||||
|
|
||||||
@ -22,7 +25,13 @@ public class UltimateClansGuildModule implements GuildModule {
|
|||||||
private final ClanData clan;
|
private final ClanData clan;
|
||||||
|
|
||||||
CustomGuild(ClanData clan) {
|
CustomGuild(ClanData clan) {
|
||||||
this.clan = clan;
|
this.clan = Objects.requireNonNull(clan);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasMember(Player player) {
|
||||||
|
// List implementation. Pretty bad
|
||||||
|
return clan.getMembers().contains(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,25 @@
|
|||||||
package net.Indyuce.mmocore.guild.provided;
|
package net.Indyuce.mmocore.guild.provided;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import net.Indyuce.mmocore.guild.AbstractGuild;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.ConfigMessage;
|
import net.Indyuce.mmocore.api.ConfigMessage;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.api.player.social.Request;
|
import net.Indyuce.mmocore.api.player.social.Request;
|
||||||
import net.Indyuce.mmocore.gui.api.PluginInventory;
|
import net.Indyuce.mmocore.gui.api.PluginInventory;
|
||||||
import net.Indyuce.mmocore.gui.social.guild.EditableGuildView.GuildViewInventory;
|
import net.Indyuce.mmocore.gui.social.guild.EditableGuildView.GuildViewInventory;
|
||||||
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class Guild implements AbstractGuild {
|
public class Guild implements AbstractGuild {
|
||||||
private final GuildMembers members = new GuildMembers();
|
|
||||||
private final Map<UUID, Long> invites = new HashMap<>();
|
private final Map<UUID, Long> invites = new HashMap<>();
|
||||||
private final String guildId, guildName, guildTag;
|
private final String guildId, guildName, guildTag;
|
||||||
|
|
||||||
|
private final Set<UUID> members = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Owner changes when the old owner leaves guild
|
* Owner changes when the old owner leaves guild
|
||||||
*/
|
*/
|
||||||
@ -52,10 +48,6 @@ public class Guild implements AbstractGuild {
|
|||||||
return guildTag;
|
return guildTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GuildMembers getMembers() {
|
|
||||||
return members;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getLastInvite(Player player) {
|
public long getLastInvite(Player player) {
|
||||||
return invites.containsKey(player.getUniqueId()) ? invites.get(player.getUniqueId()) : 0;
|
return invites.containsKey(player.getUniqueId()) ? invites.get(player.getUniqueId()) : 0;
|
||||||
}
|
}
|
||||||
@ -64,8 +56,9 @@ public class Guild implements AbstractGuild {
|
|||||||
invites.remove(player.getUniqueId());
|
invites.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeMember(UUID uuid)
|
public void removeMember(UUID uuid) {
|
||||||
{ removeMember(uuid, false); }
|
removeMember(uuid, false);
|
||||||
|
}
|
||||||
|
|
||||||
// Disband boolean is to prevent co-modification exception when disbanding a guild
|
// Disband boolean is to prevent co-modification exception when disbanding a guild
|
||||||
public void removeMember(UUID uuid, boolean disband) {
|
public void removeMember(UUID uuid, boolean disband) {
|
||||||
@ -73,24 +66,23 @@ public class Guild implements AbstractGuild {
|
|||||||
if (data != null && data.isOnline() && data.getPlayer().getOpenInventory() != null && data.getPlayer().getOpenInventory().getTopInventory().getHolder() instanceof GuildViewInventory)
|
if (data != null && data.isOnline() && data.getPlayer().getOpenInventory() != null && data.getPlayer().getOpenInventory().getTopInventory().getHolder() instanceof GuildViewInventory)
|
||||||
InventoryManager.GUILD_CREATION.newInventory(data).open();
|
InventoryManager.GUILD_CREATION.newInventory(data).open();
|
||||||
|
|
||||||
if(!disband) members.remove(uuid);
|
if (!disband)
|
||||||
if(data != null) data.setGuild(null);
|
members.remove(uuid);
|
||||||
|
if (data != null)
|
||||||
|
data.setGuild(null);
|
||||||
reopenInventories();
|
reopenInventories();
|
||||||
|
|
||||||
//if(!disband) {
|
// Disband the guild if no member left
|
||||||
|
if (members.size() < 1) {
|
||||||
// disband the guild if no member left
|
|
||||||
if (members.count() < 1) {
|
|
||||||
MMOCore.plugin.dataProvider.getGuildManager().unregisterGuild(this);
|
MMOCore.plugin.dataProvider.getGuildManager().unregisterGuild(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// transfer ownership
|
// Transfer ownership
|
||||||
if (owner.equals(uuid)) {
|
if (owner.equals(uuid)) {
|
||||||
owner = members.get(0);
|
owner = members.stream().findAny().get();
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("transfer-guild-ownership").send(Bukkit.getPlayer(owner));
|
MMOCore.plugin.configManager.getSimpleMessage("transfer-guild-ownership").send(Bukkit.getPlayer(owner));
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMember(UUID uuid) {
|
public void addMember(UUID uuid) {
|
||||||
@ -109,7 +101,7 @@ public class Guild implements AbstractGuild {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reopenInventories() {
|
public void reopenInventories() {
|
||||||
for (UUID uuid : members.members) {
|
for (UUID uuid : members) {
|
||||||
PlayerData member = PlayerData.get(uuid);
|
PlayerData member = PlayerData.get(uuid);
|
||||||
if (member != null && member.isOnline() && member.getPlayer().getOpenInventory() != null && member.getPlayer().getOpenInventory().getTopInventory().getHolder() instanceof GuildViewInventory)
|
if (member != null && member.isOnline() && member.getPlayer().getOpenInventory() != null && member.getPlayer().getOpenInventory().getTopInventory().getHolder() instanceof GuildViewInventory)
|
||||||
((PluginInventory) member.getPlayer().getOpenInventory().getTopInventory().getHolder()).open();
|
((PluginInventory) member.getPlayer().getOpenInventory().getTopInventory().getHolder()).open();
|
||||||
@ -123,42 +115,34 @@ public class Guild implements AbstractGuild {
|
|||||||
MMOCore.plugin.requestManager.registerRequest(request);
|
MMOCore.plugin.requestManager.registerRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class GuildMembers {
|
@Override
|
||||||
private final List<UUID> members = new ArrayList<>();
|
public boolean hasMember(Player player) {
|
||||||
|
return hasMember(player.getUniqueId());
|
||||||
public UUID get(int count) {
|
|
||||||
return members.get(count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean has(UUID player) {
|
public boolean hasMember(UUID player) {
|
||||||
return members.contains(player);
|
return members.contains(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(UUID player) {
|
public List<UUID> listMembers() {
|
||||||
members.add(player);
|
return new ArrayList<>(members);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove(UUID player) {
|
public void forEachMember(Consumer<? super UUID> action) {
|
||||||
members.remove(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void forEach(Consumer<? super UUID> action) {
|
|
||||||
members.forEach(action);
|
members.forEach(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int countOnline() {
|
public int countOnlineMembers() {
|
||||||
int online = 0;
|
int online = 0;
|
||||||
|
|
||||||
for(UUID member : members)
|
for (UUID member : members)
|
||||||
if(Bukkit.getOfflinePlayer(member).isOnline())
|
if (Bukkit.getOfflinePlayer(member).isOnline())
|
||||||
online += 1;
|
online++;
|
||||||
|
|
||||||
return online;
|
return online;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int count()
|
public int countMembers() {
|
||||||
{ return members.size(); }
|
return members.size();
|
||||||
public void clear()
|
|
||||||
{ members.clear(); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public class GuildInvite extends Request {
|
|||||||
@Override
|
@Override
|
||||||
public void whenAccepted() {
|
public void whenAccepted() {
|
||||||
guild.removeLastInvite(getCreator().getPlayer());
|
guild.removeLastInvite(getCreator().getPlayer());
|
||||||
guild.getMembers().forEach(member -> {
|
guild.forEachMember(member -> {
|
||||||
if (Bukkit.getPlayer(member) != null) {
|
if (Bukkit.getPlayer(member) != null) {
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("guild-joined-other", "player",
|
MMOCore.plugin.configManager.getSimpleMessage("guild-joined-other", "player",
|
||||||
getTarget().getPlayer().getName()).send(Bukkit.getPlayer(member));
|
getTarget().getPlayer().getName()).send(Bukkit.getPlayer(member));
|
||||||
|
@ -32,7 +32,7 @@ public class GuildListener implements Listener {
|
|||||||
GuildChatEvent called = new GuildChatEvent(data, format.message());
|
GuildChatEvent called = new GuildChatEvent(data, format.message());
|
||||||
Bukkit.getPluginManager().callEvent(called);
|
Bukkit.getPluginManager().callEvent(called);
|
||||||
if (!called.isCancelled())
|
if (!called.isCancelled())
|
||||||
data.getGuild().getMembers().forEach(member -> {
|
data.getGuild().forEachMember(member -> {
|
||||||
Player p = Bukkit.getPlayer(member);
|
Player p = Bukkit.getPlayer(member);
|
||||||
if (p != null)
|
if (p != null)
|
||||||
format.send(p);
|
format.send(p);
|
||||||
|
@ -197,7 +197,7 @@ public class FishingListener implements Listener {
|
|||||||
location.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, location, 0, 4 * (RANDOM.nextDouble() - .5), RANDOM.nextDouble() + 1, 4 * (RANDOM.nextDouble() - .5), .08);
|
location.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, location, 0, 4 * (RANDOM.nextDouble() - .5), RANDOM.nextDouble() + 1, 4 * (RANDOM.nextDouble() - .5), .08);
|
||||||
|
|
||||||
if (MMOCore.plugin.fishingManager.hasLinkedProfession())
|
if (MMOCore.plugin.fishingManager.hasLinkedProfession())
|
||||||
playerData.getCollectionSkills().giveExperience(MMOCore.plugin.fishingManager.getLinkedProfession(), experienceDropped, EXPSource.FISHING, location);
|
playerData.getCollectionSkills().giveExperience(MMOCore.plugin.fishingManager.getLinkedProfession(), experienceDropped, EXPSource.FISHING, location, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,12 @@ import java.util.logging.Level;
|
|||||||
public class ConfigManager {
|
public class ConfigManager {
|
||||||
public final CommandVerbose commandVerbose = new CommandVerbose();
|
public final CommandVerbose commandVerbose = new CommandVerbose();
|
||||||
|
|
||||||
public boolean overrideVanillaExp, canCreativeCast, cobbleGeneratorXP, saveDefaultClassInfo;
|
public boolean overrideVanillaExp, canCreativeCast, cobbleGeneratorXP, saveDefaultClassInfo, attributesAsClassInfo;
|
||||||
public String partyChatPrefix, noSkillBoundPlaceholder;
|
public String partyChatPrefix, noSkillBoundPlaceholder;
|
||||||
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
public ChatColor staminaFull, staminaHalf, staminaEmpty;
|
||||||
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown;
|
||||||
public double lootChestsChanceWeight;
|
public double lootChestsChanceWeight;
|
||||||
|
public int maxPartyLevelDifference;
|
||||||
|
|
||||||
private final FileConfiguration messages;
|
private final FileConfiguration messages;
|
||||||
private final boolean chatInput;
|
private final boolean chatInput;
|
||||||
@ -99,6 +100,7 @@ public class ConfigManager {
|
|||||||
globalSkillCooldown = MMOCore.plugin.getConfig().getLong("global-skill-cooldown") * 50;
|
globalSkillCooldown = MMOCore.plugin.getConfig().getLong("global-skill-cooldown") * 50;
|
||||||
noSkillBoundPlaceholder = getSimpleMessage("no-skill-placeholder").message();
|
noSkillBoundPlaceholder = getSimpleMessage("no-skill-placeholder").message();
|
||||||
lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
|
lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests");
|
||||||
|
maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference");
|
||||||
|
|
||||||
staminaFull = getColorOrDefault("stamina-whole", ChatColor.GREEN);
|
staminaFull = getColorOrDefault("stamina-whole", ChatColor.GREEN);
|
||||||
staminaHalf = getColorOrDefault("stamina-half", ChatColor.DARK_GREEN);
|
staminaHalf = getColorOrDefault("stamina-half", ChatColor.DARK_GREEN);
|
||||||
|
@ -41,6 +41,7 @@ public class MMOLoadManager {
|
|||||||
return load(Objective.class, config, loader -> loader.loadObjective(config, section));
|
return load(Objective.class, config, loader -> loader.loadObjective(config, section));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
|
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, ExperienceDispenser dispenser) {
|
||||||
return load(ExperienceSource.class, config, loader -> loader.loadExperienceSource(config, dispenser));
|
return load(ExperienceSource.class, config, loader -> loader.loadExperienceSource(config, dispenser));
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public abstract class GuildDataManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterGuild(Guild guild) {
|
public void unregisterGuild(Guild guild) {
|
||||||
guild.getMembers().forEach(member -> guild.removeMember(member, true));
|
guild.forEachMember(member -> guild.removeMember(member, true));
|
||||||
// guild.getMembers().clear();
|
// guild.getMembers().clear();
|
||||||
guilds.remove(guild.getId());
|
guilds.remove(guild.getId());
|
||||||
delete(guild);
|
delete(guild);
|
||||||
|
@ -22,7 +22,7 @@ public class YAMLGuildDataManager extends GuildDataManager {
|
|||||||
config.getConfig().set("owner", guild.getOwner().toString());
|
config.getConfig().set("owner", guild.getOwner().toString());
|
||||||
|
|
||||||
List<String> memberList = new ArrayList<>();
|
List<String> memberList = new ArrayList<>();
|
||||||
guild.getMembers().forEach(uuid -> memberList.add(uuid.toString()));
|
guild.forEachMember(uuid -> memberList.add(uuid.toString()));
|
||||||
config.getConfig().set("members", memberList);
|
config.getConfig().set("members", memberList);
|
||||||
|
|
||||||
config.save();
|
config.save();
|
||||||
|
@ -47,7 +47,7 @@ public class YAMLPlayerDataManager extends PlayerDataManager {
|
|||||||
|
|
||||||
if (config.contains("guild")) {
|
if (config.contains("guild")) {
|
||||||
Guild guild = provider.getGuildManager().getGuild(config.getString("guild"));
|
Guild guild = provider.getGuildManager().getGuild(config.getString("guild"));
|
||||||
data.setGuild(guild.getMembers().has(data.getUniqueId()) ? guild : null);
|
data.setGuild(guild.hasMember(data.getUniqueId()) ? guild : null);
|
||||||
}
|
}
|
||||||
if (config.contains("attribute"))
|
if (config.contains("attribute"))
|
||||||
data.getAttributes().load(config.getConfigurationSection("attribute"));
|
data.getAttributes().load(config.getConfigurationSection("attribute"));
|
||||||
|
@ -2,6 +2,7 @@ package net.Indyuce.mmocore.manager.social;
|
|||||||
|
|
||||||
import net.Indyuce.mmocore.experience.Booster;
|
import net.Indyuce.mmocore.experience.Booster;
|
||||||
import net.Indyuce.mmocore.experience.Profession;
|
import net.Indyuce.mmocore.experience.Profession;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -48,7 +49,7 @@ public class BoosterManager {
|
|||||||
/**
|
/**
|
||||||
* @return Sums all current experience boosters values
|
* @return Sums all current experience boosters values
|
||||||
*/
|
*/
|
||||||
public double getMultiplier(Profession profession) {
|
public double getMultiplier(@Nullable Profession profession) {
|
||||||
double d = 1;
|
double d = 1;
|
||||||
|
|
||||||
for (Booster booster : map)
|
for (Booster booster : map)
|
||||||
@ -58,10 +59,6 @@ public class BoosterManager {
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double calculateExp(Profession profession, double exp) {
|
|
||||||
return (exp * getMultiplier(profession));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection of currently registered boosters. Some of them can be
|
* @return Collection of currently registered boosters. Some of them can be
|
||||||
* expired but are not unregistered yet!
|
* expired but are not unregistered yet!
|
||||||
|
@ -4,6 +4,7 @@ import io.lumine.mythic.lib.comp.target.InteractionType;
|
|||||||
import io.lumine.mythic.lib.comp.target.TargetRestriction;
|
import io.lumine.mythic.lib.comp.target.TargetRestriction;
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
|
import net.Indyuce.mmocore.guild.AbstractGuild;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -11,11 +12,21 @@ public class MMOCoreTargetRestriction implements TargetRestriction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canTarget(Player player, LivingEntity livingEntity, InteractionType interactionType) {
|
public boolean canTarget(Player player, LivingEntity livingEntity, InteractionType interactionType) {
|
||||||
if (!interactionType.isOffense() || !(livingEntity instanceof Player) || livingEntity.hasMetadata("NPC"))
|
if (!interactionType.isOffense() || !(livingEntity instanceof Player))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
AbstractParty party = MMOCore.plugin.partyModule.getParty(PlayerData.get(player));
|
PlayerData data = PlayerData.get(player);
|
||||||
// TODO check for guild
|
|
||||||
return party == null || !party.hasMember((Player) livingEntity);
|
// Check for party
|
||||||
|
AbstractParty party = MMOCore.plugin.partyModule.getParty(data);
|
||||||
|
if (party != null && party.hasMember((Player) livingEntity))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Check for guild
|
||||||
|
AbstractGuild guild = MMOCore.plugin.guildModule.getGuild(data);
|
||||||
|
if (guild != null && guild.hasMember((Player) livingEntity))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import net.Indyuce.mmocore.gui.social.party.EditablePartyView.PartyViewInventory
|
|||||||
import net.Indyuce.mmocore.manager.InventoryManager;
|
import net.Indyuce.mmocore.manager.InventoryManager;
|
||||||
import net.Indyuce.mmocore.party.AbstractParty;
|
import net.Indyuce.mmocore.party.AbstractParty;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@ -25,13 +26,21 @@ public class Party implements AbstractParty {
|
|||||||
/**
|
/**
|
||||||
* Owner has to change when previous owner leaves party
|
* Owner has to change when previous owner leaves party
|
||||||
*/
|
*/
|
||||||
|
@NotNull
|
||||||
private PlayerData owner;
|
private PlayerData owner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the difference between a player level and the party
|
||||||
|
* level is too high then players cannot join the party.
|
||||||
|
*/
|
||||||
|
private final int partyLevel;
|
||||||
|
|
||||||
private final MMOCorePartyModule module;
|
private final MMOCorePartyModule module;
|
||||||
|
|
||||||
public Party(MMOCorePartyModule module, PlayerData owner) {
|
public Party(MMOCorePartyModule module, PlayerData owner) {
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.module = module;
|
this.module = module;
|
||||||
|
this.partyLevel = owner.getLevel();
|
||||||
|
|
||||||
addMember(owner);
|
addMember(owner);
|
||||||
}
|
}
|
||||||
@ -59,6 +68,10 @@ public class Party implements AbstractParty {
|
|||||||
return online;
|
return online;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getLevel() {
|
||||||
|
return partyLevel;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int countMembers() {
|
public int countMembers() {
|
||||||
return members.size();
|
return members.size();
|
||||||
|
@ -59,14 +59,22 @@ protect-custom-mine: false
|
|||||||
# - mcmmo
|
# - mcmmo
|
||||||
party-plugin: mmocore
|
party-plugin: mmocore
|
||||||
|
|
||||||
## Edit the plugin handling parties here.
|
# Edit the plugin handling parties here.
|
||||||
## Supported values (just copy and paste):
|
# Supported values (just copy and paste):
|
||||||
## - mmocore
|
# - mmocore
|
||||||
## - beauty_quest
|
# - beauty_quest
|
||||||
## - quest_creator
|
# - quest_creator
|
||||||
## - quests
|
# - quests
|
||||||
quest-plugin: mmocore
|
quest-plugin: mmocore
|
||||||
|
|
||||||
|
# Edit the plugin handling guilds here.
|
||||||
|
# Supported values (just copy and paste):
|
||||||
|
# - mmocore
|
||||||
|
# - guilds
|
||||||
|
# - kingdomsx
|
||||||
|
# - ultimate_clans
|
||||||
|
guild-plugin: mmocore
|
||||||
|
|
||||||
# MythicLib introduces a CHANCE stat that is used in
|
# MythicLib introduces a CHANCE stat that is used in
|
||||||
# several different systems in MMOCore. By changing these
|
# several different systems in MMOCore. By changing these
|
||||||
# weights you can define how much the Chance stat impacts
|
# weights you can define how much the Chance stat impacts
|
||||||
@ -135,10 +143,21 @@ party:
|
|||||||
# to talk in the party chat.
|
# to talk in the party chat.
|
||||||
chat-prefix: '@'
|
chat-prefix: '@'
|
||||||
|
|
||||||
# The max players that can be in
|
# The max amount of players in a party
|
||||||
# any given party. Between 2-8.
|
# Has to be higher than 2
|
||||||
max-players: 8
|
max-players: 8
|
||||||
|
|
||||||
|
# If the difference between a player's level and the
|
||||||
|
# initial party owner's level is higher that this
|
||||||
|
# value, then that player can't join the party.
|
||||||
|
#
|
||||||
|
# This prevents low level players from joining
|
||||||
|
# high level players and earning tons of EXP.
|
||||||
|
#
|
||||||
|
# Set to the max level possible if you want to disable
|
||||||
|
# that feature.
|
||||||
|
max-level-difference: 3
|
||||||
|
|
||||||
# Redirects vanilla experience obtained to MMOCore
|
# Redirects vanilla experience obtained to MMOCore
|
||||||
# class experience. You can define the % of the vanilla
|
# class experience. You can define the % of the vanilla
|
||||||
# experience that is being transfered as MMOCore exp.
|
# experience that is being transfered as MMOCore exp.
|
||||||
@ -206,6 +225,11 @@ resource-bar-colors:
|
|||||||
stamina-half: 'DARK_GREEN'
|
stamina-half: 'DARK_GREEN'
|
||||||
stamina-empty: 'WHITE'
|
stamina-empty: 'WHITE'
|
||||||
|
|
||||||
|
# When set to true, attributes are saved and
|
||||||
|
# reset when a player changes their class.
|
||||||
|
# Not implemented yet.
|
||||||
|
# attributes-as-class-info: true
|
||||||
|
|
||||||
# Whether or not the admin commands should display
|
# Whether or not the admin commands should display
|
||||||
# the result of the command when ran.
|
# the result of the command when ran.
|
||||||
# For Example: "Players Level is now 10."
|
# For Example: "Players Level is now 10."
|
||||||
|
@ -118,6 +118,7 @@ party-joined-other: '&6{player}&e joined your party!'
|
|||||||
transfer-party-ownership: '&eYou were transfered the party ownership.'
|
transfer-party-ownership: '&eYou were transfered the party ownership.'
|
||||||
kick-from-party: '&eYou successfully kicked &6{player}&e.'
|
kick-from-party: '&eYou successfully kicked &6{player}&e.'
|
||||||
party-invite-cooldown: '&cPlease wait {cooldown} before inviting {player}.'
|
party-invite-cooldown: '&cPlease wait {cooldown} before inviting {player}.'
|
||||||
|
high-level-difference: '&cYou cannot invite {player} as the level difference is too high.'
|
||||||
|
|
||||||
# Guilds
|
# Guilds
|
||||||
guild-chat: '&a[{tag}] {player}: {message}'
|
guild-chat: '&a[{tag}] {player}: {message}'
|
||||||
|
Loading…
Reference in New Issue
Block a user