From a1e817f22c2210200a9d4bc665d6411dedfbe4b0 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 18:15:24 +0100 Subject: [PATCH 01/10] Added a "selected" item that replicates the skill that is selected in skill list GUI. --- .../net/Indyuce/mmocore/gui/SkillList.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java index 37b3e9af..f2a7a1c9 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java @@ -3,6 +3,7 @@ package net.Indyuce.mmocore.gui; import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.api.item.ItemTag; import io.lumine.mythic.lib.api.item.NBTItem; +import me.ulrich.clans.manager.I; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.SoundEvent; import net.Indyuce.mmocore.api.player.PlayerData; @@ -88,6 +89,8 @@ public class SkillList extends EditableInventory { } }; } + if(function.equals("selected")) + return new SelectedItem(config); return new SimplePlaceholderItem(config); } @@ -96,6 +99,30 @@ public class SkillList extends EditableInventory { return new SkillViewerInventory(data, this); } + public class SelectedItem extends InventoryItem { + public SelectedItem(ConfigurationSection config) { + super(config); + } + + @Override + public ItemStack display(SkillViewerInventory inv, int n) { + ItemStack item =super.display(inv, n); + if(inv.selected== null) + return new ItemStack(Material.AIR); + if (inv.selected != null) { + item.setType(inv.selected.getSkill().getIcon().getType()); + } + return item; + } + + @Override + public Placeholders getPlaceholders(SkillViewerInventory inv, int n) { + Placeholders holders= new Placeholders(); + holders.register("selected", inv.selected.getSkill().getName()); + return holders; + } + } + public class LevelItem extends InventoryItem { private final int offset; From 56a84015acaecc2682a0b8d7285f458b9dcf79ff Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 18:28:23 +0100 Subject: [PATCH 02/10] Bug fixing related to the "selected" item. --- .../src/main/java/net/Indyuce/mmocore/gui/SkillList.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java index f2a7a1c9..5d3b8b4e 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillList.java @@ -101,7 +101,8 @@ public class SkillList extends EditableInventory { public class SelectedItem extends InventoryItem { public SelectedItem(ConfigurationSection config) { - super(config); + //We must use this constructor to show that there are not specified material + super(Material.BARRIER,config); } @Override From 4de49070a019f4b1b8c0e0316c0c75ad6b5283e7 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 18:29:39 +0100 Subject: [PATCH 03/10] Fixed issue #792 by adding the possibility to put a "custom-model-data" for skill trees. --- .../main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java | 3 +++ .../java/net/Indyuce/mmocore/skilltree/tree/SkillTree.java | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java index 34d05689..2c3d0208 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java @@ -1,5 +1,6 @@ package net.Indyuce.mmocore.gui; +import io.lumine.mythic.lib.MythicLib; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.skilltree.NodeStatus; @@ -120,6 +121,8 @@ public class SkillTreeViewer extends EditableInventory { lore.add(holders.apply(inv.getPlayer(), string)); }); meta.setLore(lore); + if (MythicLib.plugin.getVersion().isStrictlyHigher(1, 13)) + meta.setCustomModelData(skillTree.getCustomModelData()); PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(new NamespacedKey(MMOCore.plugin, "skill-tree-id"), PersistentDataType.STRING, skillTree.getId()); item.setItemMeta(meta); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/skilltree/tree/SkillTree.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/skilltree/tree/SkillTree.java index be9c3980..afc2db25 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/skilltree/tree/SkillTree.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/skilltree/tree/SkillTree.java @@ -39,6 +39,8 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje private final String id, name; private final List lore = new ArrayList<>(); private final Material item; + private final int customModelData; + //2 different maps to get the nodes //Represents all the coordinates that will be displayed as a path (between 2 nodes of the tree) @@ -59,6 +61,7 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje this.name = MythicLib.plugin.parseColors(Objects.requireNonNull(config.getString("name"), "Could not find skill tree name")); Objects.requireNonNull(config.getStringList("lore"), "Could not find skill tree lore").forEach(str -> lore.add(MythicLib.plugin.parseColors(str))); this.item = Material.valueOf(UtilityMethods.enumName(Objects.requireNonNull(config.getString("item")))); + this.customModelData = config.getInt("custom-model-data", 0); Validate.isTrue(config.isConfigurationSection("nodes"), "Could not find any nodes in the tree"); this.maxPointSpent = config.getInt("max-point-spent", Integer.MAX_VALUE); for (String key : config.getConfigurationSection("nodes").getKeys(false)) { @@ -148,6 +151,10 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje return maxPointSpent; } + public int getCustomModelData() { + return customModelData; + } + public static SkillTree loadSkillTree(ConfigurationSection config) { SkillTree skillTree = null; From 048ed1364db1ebf4999b8f236f6c55e6cac5f000 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 20:09:35 +0100 Subject: [PATCH 04/10] Fixed issue #788. --- .../main/java/net/Indyuce/mmocore/gui/SubclassSelect.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SubclassSelect.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SubclassSelect.java index 946da3bc..ad21f793 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SubclassSelect.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SubclassSelect.java @@ -4,6 +4,7 @@ import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.UtilityMethods; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.profess.ClassOption; import net.Indyuce.mmocore.gui.api.EditableInventory; import net.Indyuce.mmocore.gui.api.GeneratedInventory; import net.Indyuce.mmocore.gui.api.InventoryClickContext; @@ -112,13 +113,18 @@ public class SubclassSelect extends EditableInventory { if (item.getFunction().startsWith("sub-class")) { String classId = item.getFunction().substring(10); - + PlayerClass profess = MMOCore.plugin.classManager.get(classId); if (playerData.getClassPoints() < 1) { player.closeInventory(); MMOCore.plugin.soundManager.getSound(SoundEvent.CANT_SELECT_CLASS).playTo(getPlayer()); new ConfigMessage("cant-choose-new-class").send(player); return; } + if (profess.hasOption(ClassOption.NEEDS_PERMISSION) && !player.hasPermission("mmocore.class." + profess.getId().toLowerCase())) { + MMOCore.plugin.soundManager.getSound(SoundEvent.CANT_SELECT_CLASS).playTo(player); + new ConfigMessage("no-permission-for-class").send(player); + return; + } InventoryManager.CLASS_CONFIRM.get(classId).newInventory(playerData, this, true).open(); } From 021cd960da8948cf30c57dbcdb74050975b9986b Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 20:09:49 +0100 Subject: [PATCH 05/10] Bug Fix --- .../main/java/net/Indyuce/mmocore/api/player/PlayerData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 426100d4..b65e774e 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -179,7 +179,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc final String skillId = entry.getValue().getClassSkill().getSkill().getHandler().getId(); final @Nullable ClassSkill classSkill = getProfess().getSkill(skillId); Validate.notNull(skillSlot, "Could not find skill slot n" + entry.getKey()); - Validate.notNull(skillSlot, "Could not find skill with ID '" + skillId + "'"); + Validate.notNull(classSkill, "Could not find skill with ID '" + skillId + "'"); entry.getValue().close(); boundSkills.put(entry.getKey(), new BoundSkillInfo(skillSlot, classSkill, this)); From f9fdbfa1272c332e3caad54e41579163e2abb288 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 21:13:43 +0100 Subject: [PATCH 06/10] Fixed bug #782. --- .../net/Indyuce/mmocore/api/player/PlayerData.java | 11 ++++++----- .../mmocore/api/quest/trigger/StatTrigger.java | 5 ----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index b65e774e..7b688d54 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -19,6 +19,7 @@ import net.Indyuce.mmocore.api.player.profess.PlayerClass; import net.Indyuce.mmocore.api.player.profess.SavedClassInformation; import net.Indyuce.mmocore.api.player.profess.Subclass; import net.Indyuce.mmocore.api.player.profess.resource.PlayerResource; +import net.Indyuce.mmocore.api.quest.trigger.Trigger; import net.Indyuce.mmocore.skill.binding.BoundSkillInfo; import net.Indyuce.mmocore.api.player.social.FriendRequest; import net.Indyuce.mmocore.api.player.stats.PlayerStats; @@ -163,14 +164,15 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc * /mmocore reload */ public void reload() { - try { profess = profess == null ? null : MMOCore.plugin.classManager.get(profess.getId()); getStats().updateStats(); } catch (NullPointerException exception) { MMOCore.log(Level.SEVERE, "[Userdata] Could not find class " + getProfess().getId() + " while refreshing player data."); } - + //We remove all the stats and buffs associated to triggers. + mmoData.getStatMap().getInstances().forEach(statInstance -> statInstance.removeIf(key ->key.startsWith(Trigger.TRIGGER_PREFIX))); + mmoData.getSkillModifierMap().getInstances().forEach(skillModifierInstance -> skillModifierInstance.removeIf(key ->key.startsWith(Trigger.TRIGGER_PREFIX))); final Iterator> ite = boundSkills.entrySet().iterator(); while (ite.hasNext()) try { @@ -180,9 +182,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc final @Nullable ClassSkill classSkill = getProfess().getSkill(skillId); Validate.notNull(skillSlot, "Could not find skill slot n" + entry.getKey()); Validate.notNull(classSkill, "Could not find skill with ID '" + skillId + "'"); - - entry.getValue().close(); - boundSkills.put(entry.getKey(), new BoundSkillInfo(skillSlot, classSkill, this)); + unbindSkill(entry.getKey()); + bindSkill(entry.getKey(), classSkill); } catch (Exception exception) { MMOCore.plugin.getLogger().log(Level.WARNING, "Could not reload data of '" + getPlayer().getName() + "': " + exception.getMessage()); } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/trigger/StatTrigger.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/trigger/StatTrigger.java index 1348ffc5..d99d0289 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/trigger/StatTrigger.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/trigger/StatTrigger.java @@ -37,11 +37,6 @@ public class StatTrigger extends Trigger implements Removable { prevModifier.add(amount).register(player.getMMOPlayerData()); } - /** - * Removes the effect of the trigger to the player by registering the - * opposite amount. (Little corrective term for the relative to have the inverse. - * Not a problem to store twice the stat modifiers are there only remain in the RAM. - */ @Override public void remove(PlayerData playerData) { playerData.getMMOPlayerData().getStatMap().getInstance(stat).remove(modifierKey); From 77f543f3477d63b3a8a820e08ffc8054b23f8e35 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sun, 16 Apr 2023 21:32:53 +0100 Subject: [PATCH 07/10] Added placeholder %mmocore_attribute_points_spent_%. --- .../api/player/attribute/PlayerAttributes.java | 4 ++++ .../mmocore/comp/placeholder/RPGPlaceholders.java | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java index ba103c5e..352c9c97 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java @@ -165,6 +165,10 @@ public class PlayerAttributes { return (int) d; } + public int getSpent() { + return spent; + } + public AttributeModifier getModifier(String key) { return map.get(key); } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java index 3c9bcc8c..639c922d 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java @@ -7,6 +7,7 @@ import io.lumine.mythic.lib.manager.StatManager; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes; import net.Indyuce.mmocore.api.quest.PlayerQuests; import net.Indyuce.mmocore.experience.PlayerProfessions; import net.Indyuce.mmocore.experience.Profession; @@ -16,10 +17,10 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import javax.annotation.Nullable; -import java.util.List; import java.util.Objects; import java.util.UUID; @@ -71,7 +72,15 @@ public class RPGPlaceholders extends PlaceholderExpansion { String id = identifier.substring(12); RegisteredSkill skill = Objects.requireNonNull(MMOCore.plugin.skillManager.getSkill(id), "Could not find skill with ID '" + id + "'"); return String.valueOf(playerData.getSkillLevel(skill)); - } else if (identifier.equals("level_percent")) { + } + else if(identifier.startsWith("mmocore_attribute_points_spent_")){ + String attributeId=identifier.substring(31); + PlayerAttributes.AttributeInstance attributeInstance=Objects.requireNonNull(playerData.getAttributes().getInstance(attributeId),"Could not find attribute with ID '"+attributeId+"'"); + return String.valueOf(attributeInstance.getSpent()); + } + + + else if (identifier.equals("level_percent")) { double current = playerData.getExperience(), next = playerData.getLevelUpExperience(); return MythicLib.plugin.getMMOConfig().decimal.format(current / next * 100); } else if (identifier.equals("health")) From 966cd333c1a3661ecf5ce3287f1c7e78cca648fb Mon Sep 17 00:00:00 2001 From: Jules Date: Sat, 22 Apr 2023 15:59:54 +0200 Subject: [PATCH 08/10] Basic support for OBTeam --- MMOCore-API/pom.xml | 7 +++ .../mmocore/party/PartyModuleType.java | 1 + .../party/compat/DungeonsXLPartyModule.java | 2 +- .../party/compat/McMMOPartyModule.java | 3 +- .../party/compat/OBTeamPartyModule.java | 59 +++++++++++++++++++ MMOCore-Dist/src/main/resources/config.yml | 1 + 6 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/OBTeamPartyModule.java diff --git a/MMOCore-API/pom.xml b/MMOCore-API/pom.xml index cab7f459..26f77a47 100644 --- a/MMOCore-API/pom.xml +++ b/MMOCore-API/pom.xml @@ -196,6 +196,13 @@ provided + + com.civious + OBTeam + 1.1 + provided + + com.alessiodp Parties diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java index 5c497ea9..bf93487f 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java @@ -12,6 +12,7 @@ public enum PartyModuleType { MCMMO("mcMMO", McMMOPartyModule::new), MMOCORE("MMOCore", MMOCorePartyModule::new), PARTIES("Parties", PartiesPartyModule::new), + OBTEAM("OBTeam", OBTeamPartyModule::new), PARTY_AND_FRIENDS("PartyAndFriends", PAFPartyModule::new), PARTY_AND_FRIENDS_BUNGEECORD_VELOCITY("Spigot-Party-API-PAF", PAFProxyPartyModule::new), ; diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonsXLPartyModule.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonsXLPartyModule.java index 92f89b17..381ef5e7 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonsXLPartyModule.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonsXLPartyModule.java @@ -68,7 +68,7 @@ public class DungeonsXLPartyModule implements PartyModule, Listener { MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.unregister(player.getMMOPlayerData())); } - class CustomParty implements AbstractParty, Listener { + class CustomParty implements AbstractParty { private final PlayerGroup group; public CustomParty(PlayerGroup group) { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/McMMOPartyModule.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/McMMOPartyModule.java index 5da0bf71..ac2bf019 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/McMMOPartyModule.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/McMMOPartyModule.java @@ -74,12 +74,11 @@ public class McMMOPartyModule implements PartyModule, Listener { MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.unregister(player.getMMOPlayerData())); } - class CustomParty implements AbstractParty, Listener { + class CustomParty implements AbstractParty { private final Party party; public CustomParty(Party party) { this.party = party; - Bukkit.getPluginManager().registerEvents(this, MMOCore.plugin); } @Override diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/OBTeamPartyModule.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/OBTeamPartyModule.java new file mode 100644 index 00000000..72217bc3 --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/OBTeamPartyModule.java @@ -0,0 +1,59 @@ +package net.Indyuce.mmocore.party.compat; + +import com.civious.obteam.mechanics.Team; +import com.civious.obteam.mechanics.TeamManager; +import com.civious.obteam.mechanics.TeamMember; +import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.party.AbstractParty; +import net.Indyuce.mmocore.party.PartyModule; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class OBTeamPartyModule implements PartyModule, Listener { + + @Nullable + @Override + public AbstractParty getParty(PlayerData playerData) { + final @Nullable Team team = TeamManager.getInstance().getTeam(playerData.getPlayer()); + return team == null ? null : new CustomParty(team); + } + + class CustomParty implements AbstractParty { + private final Team team; + + public CustomParty(Team team) { + this.team = team; + } + + @Override + public boolean hasMember(Player player) { + for (TeamMember member : team.getMembers()) + if (member.getOfflinePlayer().getUniqueId().equals(player.getUniqueId())) return true; + return false; + } + + @Override + public List getOnlineMembers() { + final List list = new ArrayList<>(); + + for (TeamMember member : team.getMembersAndOwner()) + try { + list.add(PlayerData.get(member.getOfflinePlayer().getUniqueId())); + } catch (Exception ignored) { + } + + return list; + } + + @Override + public int countMembers() { + return team.getMembersAndOwner().size(); + } + } +} diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml index 6744a1da..2cfd8575 100644 --- a/MMOCore-Dist/src/main/resources/config.yml +++ b/MMOCore-Dist/src/main/resources/config.yml @@ -60,6 +60,7 @@ protect-custom-mine: false # - party_and_friends (Use this one if you are using Party and Friends Extended for Spigot) # - party_and_friends_bungeecord_velocity (Use this one if you are using Party and Friends For Bungeecord, Party and Friends For Velocity or Party and Friends Extended Edition for Bungeecord/Velocity. This one requires https://www.spigotmc.org/resources/spigot-party-api-for-party-and-friends.39751/ to be installed) # - mcmmo +# - obteam (addon for DungeonMMO) party-plugin: mmocore # Edit the plugin handling guilds here. From f4b21472264afe935a3d02d958894873bf031d30 Mon Sep 17 00:00:00 2001 From: Jules Date: Sat, 22 Apr 2023 16:54:55 +0200 Subject: [PATCH 09/10] Basic support for DungeonParties --- MMOCore-API/pom.xml | 7 +++ .../mmocore/party/PartyModuleType.java | 1 + .../compat/DungeonPartiesPartyModule.java | 57 +++++++++++++++++++ MMOCore-Dist/src/main/resources/plugin.yml | 4 +- 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonPartiesPartyModule.java diff --git a/MMOCore-API/pom.xml b/MMOCore-API/pom.xml index 26f77a47..e06a0583 100644 --- a/MMOCore-API/pom.xml +++ b/MMOCore-API/pom.xml @@ -203,6 +203,13 @@ provided + + net.playavalon + DungeonParties + 1.0 + provided + + com.alessiodp Parties diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java index bf93487f..abfbc663 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/PartyModuleType.java @@ -12,6 +12,7 @@ public enum PartyModuleType { MCMMO("mcMMO", McMMOPartyModule::new), MMOCORE("MMOCore", MMOCorePartyModule::new), PARTIES("Parties", PartiesPartyModule::new), + MYTHICDUNGEONS("MythicDungeons", DungeonPartiesPartyModule::new), OBTEAM("OBTeam", OBTeamPartyModule::new), PARTY_AND_FRIENDS("PartyAndFriends", PAFPartyModule::new), PARTY_AND_FRIENDS_BUNGEECORD_VELOCITY("Spigot-Party-API-PAF", PAFProxyPartyModule::new), diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonPartiesPartyModule.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonPartiesPartyModule.java new file mode 100644 index 00000000..9b1f34d9 --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/party/compat/DungeonPartiesPartyModule.java @@ -0,0 +1,57 @@ +package net.Indyuce.mmocore.party.compat; + +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.party.AbstractParty; +import net.Indyuce.mmocore.party.PartyModule; +import net.playavalon.avnparty.AvNParty; +import net.playavalon.avnparty.party.Party; +import net.playavalon.avnparty.player.AvalonPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class DungeonPartiesPartyModule implements PartyModule, Listener { + + @Nullable + @Override + public AbstractParty getParty(PlayerData playerData) { + final @Nullable Party party = AvNParty.plugin.players.get(playerData.getPlayer()).getParty(); + return party == null ? null : new CustomParty(party); + } + + class CustomParty implements AbstractParty { + private final Party party; + + public CustomParty(Party party) { + this.party = party; + } + + @Override + public boolean hasMember(Player player) { + for (AvalonPlayer member : party.getPlayers()) + if (member.getPlayer().getUniqueId().equals(player.getUniqueId())) return true; + return false; + } + + @Override + public List getOnlineMembers() { + final List list = new ArrayList<>(); + + for (AvalonPlayer member : party.getPlayers()) + try { + list.add(PlayerData.get(member.getPlayer().getUniqueId())); + } catch (Exception ignored) { + } + + return list; + } + + @Override + public int countMembers() { + return party.getPlayers().size(); + } + } +} diff --git a/MMOCore-Dist/src/main/resources/plugin.yml b/MMOCore-Dist/src/main/resources/plugin.yml index 152a94ca..0b937b09 100644 --- a/MMOCore-Dist/src/main/resources/plugin.yml +++ b/MMOCore-Dist/src/main/resources/plugin.yml @@ -3,9 +3,9 @@ version: ${project.version} main: net.Indyuce.mmocore.MMOCore author: Indyuce description: ${project.description} -loadbefore: [ MMOItems ] +loadbefore: [ MMOItems,MythicDungeons ] depend: [ MythicLib ] -softdepend: [ Vault,MythicMobs,PlaceholderAPI,Residence,Citizens,ProtocolLib ] +softdepend: [ Vault,MythicMobs,PlaceholderAPI,Residence,Citizens,ProtocolLib,OBTeam ] api-version: 1.13 commands: mmocore: From 4bfbaac8fbaf8b6d25fa2c0911698e2d8546d987 Mon Sep 17 00:00:00 2001 From: Jules Date: Sat, 22 Apr 2023 17:00:31 +0200 Subject: [PATCH 10/10] Fixed default config for party module --- MMOCore-Dist/src/main/resources/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml index 2cfd8575..19e47e07 100644 --- a/MMOCore-Dist/src/main/resources/config.yml +++ b/MMOCore-Dist/src/main/resources/config.yml @@ -61,6 +61,7 @@ protect-custom-mine: false # - party_and_friends_bungeecord_velocity (Use this one if you are using Party and Friends For Bungeecord, Party and Friends For Velocity or Party and Friends Extended Edition for Bungeecord/Velocity. This one requires https://www.spigotmc.org/resources/spigot-party-api-for-party-and-friends.39751/ to be installed) # - mcmmo # - obteam (addon for DungeonMMO) +# - mythicdungeons (only when using default party handler) party-plugin: mmocore # Edit the plugin handling guilds here.