diff --git a/changelog.md b/changelog.md
index 6a89904..5bfe69c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+# Unreleased
+
+# 3.0.7
+
+- Add Ultimate Clan support
+- Fix errors with Placeholders
+
# 3.0.6
- Some fixs
diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 32a37a0..aad4ac1 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -3,7 +3,7 @@
4.0.0
fr.maxlego08.koth
zKoth
- 3.0.6
+ 3.0.7
src
@@ -184,6 +184,12 @@
2.15.2
provided
+
+ com.github.UlrichBR
+ UClansV7-API
+ 7.7.0-r1
+ provided
+
com.github.ShieldCommunity
SternalBoard
diff --git a/pom.xml b/pom.xml
index 9f615e5..b074430 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
fr.maxlego08.koth
zKoth
- 3.0.6
+ 3.0.7
UTF-8
8
@@ -242,5 +242,11 @@
${basedir}/libs/GangsPlus-2.6.4.jar
system
+
+ com.github.UlrichBR
+ UClansV7-API
+ 7.7.0-r1
+ provided
+
\ No newline at end of file
diff --git a/src/fr/maxlego08/koth/KothPlaceholder.java b/src/fr/maxlego08/koth/KothPlaceholder.java
index 025821f..3add9ef 100644
--- a/src/fr/maxlego08/koth/KothPlaceholder.java
+++ b/src/fr/maxlego08/koth/KothPlaceholder.java
@@ -120,9 +120,14 @@ public class KothPlaceholder extends ZUtils {
try {
return consumer.accept(Integer.parseInt(argument), optional.get());
} catch (Exception exception) {
+ if (Config.enableDebug) {
+ exception.printStackTrace();
+ }
return consumer.accept(-1, optional.get());
}
- } else return Config.noKoth;
+ } else {
+ return Config.noKoth;
+ }
}
}
diff --git a/src/fr/maxlego08/koth/ZKoth.java b/src/fr/maxlego08/koth/ZKoth.java
index b837404..b608cb8 100644
--- a/src/fr/maxlego08/koth/ZKoth.java
+++ b/src/fr/maxlego08/koth/ZKoth.java
@@ -841,7 +841,7 @@ public class ZKoth extends ZUtils implements Koth {
public PlayerResult getPlayer(int position) {
this.sortScores();
- if (this.playerResults.size() > position) return Config.defaultPlayerResult;
+ if (this.playerResults.isEmpty() || position > this.playerResults.size()) return Config.defaultPlayerResult;
return this.playerResults.get(position - 1);
}
diff --git a/src/fr/maxlego08/koth/api/utils/PlayerResult.java b/src/fr/maxlego08/koth/api/utils/PlayerResult.java
index 5c7aa8f..e892e18 100644
--- a/src/fr/maxlego08/koth/api/utils/PlayerResult.java
+++ b/src/fr/maxlego08/koth/api/utils/PlayerResult.java
@@ -35,4 +35,15 @@ public class PlayerResult {
public String getTeamLeader() {
return teamLeader;
}
+
+ @Override
+ public String toString() {
+ return "PlayerResult{" +
+ "playerName='" + playerName + '\'' +
+ ", points=" + points +
+ ", teamName='" + teamName + '\'' +
+ ", teamId='" + teamId + '\'' +
+ ", teamLeader='" + teamLeader + '\'' +
+ '}';
+ }
}
diff --git a/src/fr/maxlego08/koth/hook/TeamPlugin.java b/src/fr/maxlego08/koth/hook/TeamPlugin.java
index 618eeb3..398d535 100644
--- a/src/fr/maxlego08/koth/hook/TeamPlugin.java
+++ b/src/fr/maxlego08/koth/hook/TeamPlugin.java
@@ -9,6 +9,7 @@ import fr.maxlego08.koth.hook.teams.LandHook;
import fr.maxlego08.koth.hook.teams.SaberFactionHook;
import fr.maxlego08.koth.hook.teams.SimpleClanHook;
import fr.maxlego08.koth.hook.teams.SuperiorSkyblock2Hook;
+import fr.maxlego08.koth.hook.teams.UltimateClan;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
@@ -23,6 +24,7 @@ public enum TeamPlugin {
FACTIONS("Factions", SaberFactionHook.class),
SIMPLECLANS("SimpleClans", SimpleClanHook.class),
GANGSPLUS("GangsPlus", GangsHook.class),
+ ULTIMATE_CLANS("UltimateClans", UltimateClan.class),
;
diff --git a/src/fr/maxlego08/koth/hook/teams/UltimateClan.java b/src/fr/maxlego08/koth/hook/teams/UltimateClan.java
new file mode 100644
index 0000000..18b14c5
--- /dev/null
+++ b/src/fr/maxlego08/koth/hook/teams/UltimateClan.java
@@ -0,0 +1,56 @@
+package fr.maxlego08.koth.hook.teams;
+
+import fr.maxlego08.koth.KothPlugin;
+import fr.maxlego08.koth.api.KothTeam;
+import me.ulrich.clans.Clans;
+import me.ulrich.clans.data.ClanData;
+import me.ulrich.clans.events.ClanDeleteEvent;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+public class UltimateClan implements KothTeam {
+
+ private final KothPlugin plugin;
+ private final Clans clans;
+
+ public UltimateClan(KothPlugin plugin) {
+ this.plugin = plugin;
+ this.clans = (Clans) Bukkit.getPluginManager().getPlugin("UltimateClans");
+ }
+
+ @Override
+ public String getTeamName(OfflinePlayer player) {
+ Optional optional = this.clans.getPlayerAPI().getPlayerClan(player.getUniqueId());
+ return optional.isPresent() ? optional.get().getTag() : player.getName();
+ }
+
+ @Override
+ public List getOnlinePlayer(OfflinePlayer player) {
+ Optional optional = this.clans.getPlayerAPI().getPlayerClan(player.getUniqueId());
+ return optional.map(clanData -> clanData.getOnlineMembers().stream().map(Bukkit::getPlayer).collect(Collectors.toList())).orElseGet(() -> Collections.singletonList(player.getPlayer()));
+ }
+
+ @Override
+ public String getLeaderName(OfflinePlayer player) {
+ Optional optional = this.clans.getPlayerAPI().getPlayerClan(player.getUniqueId());
+ return optional.isPresent() ? Bukkit.getOfflinePlayer(optional.get().getLeader()).getName() : player.getName();
+ }
+
+ @Override
+ public String getTeamId(OfflinePlayer player) {
+ Optional optional = this.clans.getPlayerAPI().getPlayerClan(player.getUniqueId());
+ return optional.isPresent() ? optional.get().getId().toString() : player.getUniqueId().toString();
+ }
+
+ @EventHandler
+ public void onDelete(ClanDeleteEvent event) {
+ this.plugin.getStorageManager().onTeamDisband(String.valueOf(event.getClanID().toString()));
+ }
+}