Compare commits

..
35 Commits
Author SHA1 Message Date
Minat0_ 08da8be5d4 GITBOOK-77: allience and rivalry review 2025-02-23 20:50:30 +00:00
Minat0_ c64715ebaa GITBOOK-76: change codemc url repo to roinuj's one 2024-04-25 17:37:06 +00:00
Minat0_ 1469a899bc GITBOOK-75: remove a notation about missing javadoc in Russian docs 2024-04-06 08:07:35 +00:00
Minat0_ 7ac4f52c4c GitBook: [#74] No subject 2023-01-05 19:15:30 +00:00
Minat0_ a12c804886 GitBook: [#72] [RU] [DiscordSRV] Adds missing command for manually discord creation 2022-09-16 23:15:32 +00:00
Minat0_ 0e18dac7ea GitBook: [#71] Adding geyser player head error loading at known-issues | Russian 2022-08-17 01:11:39 +00:00
Minat0_ af8cd427de GitBook: [#71] Adding geyser player head error loading at known-issues | Russian 2022-07-18 16:18:05 +00:00
Edson Passos ad9bf675ca GitBook: [#70] [Russian] Some modifies around configuration page and permissions page 2022-04-29 20:47:52 +00:00
Minat0_ 4fb647575d GitBook: [#69] [Commands] [Permissions] Adds missing invite-toggle | Russian 2022-01-17 16:16:01 +00:00
Edson Passos 3ed0cbb341 GitBook: [#68] [Clan on Tablist] Updates guide to latest | Russian 2022-01-11 19:56:12 +00:00
Edson Passos 5f8222963f GitBook: [#67] Adds DIscordSRV, Verified, Permanent pages. Emojis on headings. | Russian 2021-12-11 19:16:43 +00:00
Minat0_ 231e4a7d5a GitBook: [russian] one page modified 2021-08-30 17:35:32 +00:00
Minat0_ 88695a1df7 GitBook: [russian] 5 pages modified 2021-08-30 16:59:22 +00:00
Minat0_ 61c3da0544 GitBook: [russian] 14 pages modified 2021-08-30 16:40:01 +00:00
Minat0_ 84301e2636 GitBook: [russian] no pages and one asset modified 2021-08-30 16:20:45 +00:00
Minat0_ ee1fd9c80e GitBook: [russian] 14 pages and one asset modified 2021-08-30 15:45:05 +00:00
Minat0_ f76417c080 GitBook: [russian] one page and 6 assets modified 2021-08-30 15:13:26 +00:00
Minat0_ 7cc585b4ad GitBook: [russian] 3 pages modified 2021-07-06 16:08:25 +00:00
Minat0_ f1fcb0c372 GitBook: [russian] no pages and 2 assets modified 2021-07-06 15:54:38 +00:00
Minat0_ 527bff8d20 GitBook: [russian] one page modified 2021-07-06 15:35:28 +00:00
Minat0_ 5d108caadd GitBook: [russian] 2 pages and 2 assets modified 2021-07-06 15:30:56 +00:00
Minat0_ 5a9e5cb561 GitBook: [russian] one page and 2 assets modified 2021-07-05 10:04:49 +00:00
Minat0_ 9cded638d5 GitBook: [russian] 14 pages modified 2021-07-02 17:06:38 +00:00
mehmet yılmaz 5c7f1d3873 GitBook: [russian] 14 pages modified 2021-06-24 20:47:20 +00:00
mehmet yılmaz f45e4b871c GitBook: [russian] 14 pages modified 2021-06-24 20:18:36 +00:00
mehmet yılmaz 2f2124c7f5 GitBook: [russian] 14 pages modified 2021-06-24 19:54:42 +00:00
mehmet yılmaz 078821a13e GitBook: [russian] 14 pages modified 2021-06-24 19:10:12 +00:00
mehmet yılmaz e900404e17 GitBook: [russian] no pages and one asset modified 2021-06-24 18:59:42 +00:00
Minat0_ d7b9c71ee7 GitBook: [russian] 14 pages modified 2021-05-26 12:39:25 +00:00
Minat0_ f33bf64b50 GitBook: [russian] 14 pages modified 2021-03-26 01:40:42 +00:00
Minat0_ 08f16cac00 GitBook: [russian] 14 pages modified 2021-03-21 17:24:47 +00:00
Minat0_ 4a515453c9 GitBook: [russian] 2 pages modified 2021-03-14 00:51:35 +00:00
Minat0_ e515cad210 GitBook: [russian] one page modified 2021-02-10 03:02:00 +00:00
Minat0_ 4de19f44fa GitBook: [russian] 15 pages modified 2020-12-05 02:13:44 +00:00
Minat0_ 3f4c122f53 GitBook: [russian] 15 pages modified 2020-11-29 17:22:33 +00:00
99 changed files with 1561 additions and 1596 deletions

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

+3 -12
View File
@@ -1,14 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
@@ -20,12 +11,12 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.16-R0.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.13-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.MilkBowl:VaultAPI:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
+2 -2
View File
@@ -4,7 +4,7 @@
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<name>SimpleClans</name>
<version>2.14.6</version>
<version>2.14.3</version>
<url>http://dev.bukkit.org/server-mods/simpleclans/</url>
<ciManagement>
<system>jenkins</system>
@@ -130,7 +130,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.4-R0.1-SNAPSHOT</version>
<version>1.13.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
+2 -2
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.14.6</version>
<version>2.14.4.1</version>
<name>SimpleClans</name>
<url>http://dev.bukkit.org/server-mods/simpleclans/</url>
@@ -111,7 +111,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.4-R0.1-SNAPSHOT</version>
<version>1.13.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -24,8 +24,6 @@ import java.io.Serializable;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
/**
@@ -53,14 +51,11 @@ public class Clan implements Serializable, Comparable<Clan> {
private int homeX = 0;
private int homeY = 0;
private int homeZ = 0;
private float homeYaw = 0;
private float homePitch = 0;
private @Nullable String homeWorld = "";
private String homeWorld = "";
private boolean allowWithdraw = false;
private boolean allowDeposit = true;
private boolean feeEnabled;
private List<Rank> ranks = new ArrayList<>();
private String defaultRank = null;
private @Nullable ItemStack banner;
/**
@@ -1065,9 +1060,6 @@ public class Clan implements Serializable, Comparable<Clan> {
cp.setClan(this);
cp.setLeader(false);
cp.setTrusted(SimpleClans.getInstance().getSettingsManager().isClanTrustByDefault());
if (defaultRank != null) {
cp.setRank(defaultRank);
}
importMember(cp);
@@ -1641,8 +1633,6 @@ public class Clan implements Serializable, Comparable<Clan> {
json.put("homeX", homeX);
json.put("homeY", homeY);
json.put("homeZ", homeZ);
json.put("homePitch", homePitch);
json.put("homeYaw", homeYaw);
json.put("homeWorld", homeWorld == null ? "" : homeWorld);
return json.toString();
@@ -1684,19 +1674,16 @@ public class Clan implements Serializable, Comparable<Clan> {
if (flag.equals("homeZ")) {
homeZ = ((Long) flags.get(flag)).intValue();
}
if (flag.equals("homeYaw")) {
homeYaw = ((Double) flags.get(flag)).floatValue();
}
if (flag.equals("homePitch")) {
homePitch = ((Double) flags.get(flag)).floatValue();
}
if (flag.equals("homeWorld")) {
homeWorld = (String) flags.get(flag);
}
} catch (Exception ex) {
Logger logger = SimpleClans.getInstance().getLogger();
logger.log(Level.SEVERE, String.format("Failed reading flag: %s, value: %s", flag,
flags.get(flag)), ex);
for (StackTraceElement el : ex.getStackTrace()) {
System.out.print("Failed reading flag: " + flag);
System.out.print("Value: " + flags.get(flag));
System.out.print(el.toString());
}
}
}
}
@@ -1723,8 +1710,6 @@ public class Clan implements Serializable, Comparable<Clan> {
homeY = 0;
homeX = 0;
homeZ = 0;
homePitch = 0;
homeYaw = 0;
homeWorld = null;
} else {
home.setY(home.getBlockY() + 1);
@@ -1732,9 +1717,7 @@ public class Clan implements Serializable, Comparable<Clan> {
homeX = home.getBlockX();
homeY = home.getBlockY();
homeZ = home.getBlockZ();
homeYaw = home.getYaw();
homePitch = home.getPitch();
homeWorld = home.getWorld() == null ? null : home.getWorld().getName();
homeWorld = home.getWorld().getName();
}
SimpleClans.getInstance().getStorageManager().updateClan(this);
}
@@ -1753,9 +1736,9 @@ public class Clan implements Serializable, Comparable<Clan> {
if (!(world.getBlockAt(homeX, homeY, homeZ).getType().equals(XMaterial.AIR.parseMaterial())) ||
!(world.getBlockAt(homeX, homeY + 1, homeZ).getType().equals(XMaterial.AIR.parseMaterial()))
|| homeY == 0) {
return new Location(world, homeX, world.getHighestBlockYAt(homeX, homeZ), homeZ, homeYaw, homePitch);
return new Location(world, homeX, world.getHighestBlockYAt(homeX, homeZ), homeZ);
} else {
return new Location(world, homeX, homeY, homeZ, homeYaw, homePitch);
return new Location(world, homeX, homeY, homeZ);
}
}
@@ -1904,29 +1887,6 @@ public class Clan implements Serializable, Comparable<Clan> {
return null;
}
/**
* Sets the default rank for this clan.
*
* @param name The name of the rank to be set as default
*/
public void setDefaultRank(@Nullable String name) {
// I don't know how this could happen, but if it somehow does, here's a check for it
if (!hasRank(name)) {
defaultRank = null;
} else {
defaultRank = name;
}
}
/**
* Gets the default rank for this clan.
*
* @return The default rank or null if there is no default
*/
public @Nullable String getDefaultRank() {
return defaultRank;
}
public void setBanner(@Nullable ItemStack banner) {
if (banner == null) {
this.banner = null;
@@ -1,8 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
@@ -79,74 +77,51 @@ public class Helper {
}
return null;
}
public static @Nullable JSONObject parseJson(String json) {
if (json != null && !json.isEmpty()) {
try {
return (JSONObject) new JSONParser().parse(json);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Parses a list of ranks from the specified JSONObject
* Converts a JSON String to a list of Ranks
*
* @param jo the JSON Object
* @param json the JSON String
* @return a list of ranks or null if the JSON String is null/empty
*/
public static @Nullable List<Rank> ranksFromJson(JSONObject jo) {
if (jo != null && !jo.isEmpty()) {
Object ranks = jo.get("ranks");
if (ranks != null) {
JSONArray array = (JSONArray) ranks;
List<Rank> rankList = new ArrayList<>();
for (Object o : array) {
JSONObject r = (JSONObject) o;
String name = (String) r.get("name");
String displayName = (String) r.get("displayName");
Set<String> permissions = new HashSet<>();
for (Object p : (JSONArray) r.get("permissions")) {
permissions.add((String) p);
}
Rank rank = new Rank(name, displayName, permissions);
rankList.add(rank);
}
return rankList;
}
}
public static @Nullable List<Rank> ranksFromJson(String json) {
if (json != null && !json.isEmpty()) {
try {
JSONObject jo = (JSONObject) new JSONParser().parse(json);
Object ranks = jo.get("ranks");
if (ranks != null) {
JSONArray array = (JSONArray) ranks;
List<Rank> rankList = new ArrayList<>();
for (Object o : array) {
JSONObject r = (JSONObject) o;
String name = (String) r.get("name");
String displayName = (String) r.get("displayName");
Set<String> permissions = new HashSet<>();
for (Object p : (JSONArray) r.get("permissions")) {
permissions.add((String) p);
}
Rank rank = new Rank(name, displayName, permissions);
rankList.add(rank);
}
return rankList;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Parses the default rank from the specified JSONObject
*
* @param jo the JSON object
* @return the default rank or null if not found and/or it does not exist
*/
public static @Nullable String defaultRankFromJson(JSONObject jo) {
if (jo != null && !jo.isEmpty()) {
if (!jo.containsKey("defaultRank")) {
return null;
} else {
return (String) jo.get("defaultRank");
}
}
return null;
}
/**
* Converts a list of ranks and the default rank to a JSON String
* Converts a list of Ranks to a JSON String
*
* @param ranks the ranks
* @param defaultRank the default rank
* @param ranks
* @return a JSON String
*/
@SuppressWarnings("unchecked")
public static String ranksToJson(List<Rank> ranks, @Nullable String defaultRank) {
public static String ranksToJson(List<Rank> ranks) {
if (ranks == null)
ranks = new ArrayList<Rank>();
@@ -165,7 +140,6 @@ public class Helper {
JSONObject object = new JSONObject();
object.put("ranks", array);
object.put("defaultRank", defaultRank);
return object.toJSONString();
}
@@ -228,8 +202,7 @@ public class Helper {
List<Player> players = SimpleClans.getInstance().getServer().matchPlayer(playerName);
if (players.size() == 1) {
PermissionsManager pm = SimpleClans.getInstance().getPermissionsManager();
return pm.getPrefix(players.get(0)) + players.get(0).getName() + pm.getSuffix(players.get(0));
return SimpleClans.getInstance().getPermissionsManager().getPrefix(players.get(0)) + players.get(0).getName() + SimpleClans.getInstance().getPermissionsManager().getSuffix(players.get(0));
}
return playerName;
@@ -402,9 +375,6 @@ public class Helper {
if (hexValue == null) {
return "";
}
if (hexValue.startsWith("&#")) {
return ChatUtils.parseColors(hexValue);
}
ChatColor color = ChatColor.getByChar(hexValue);
if (color == null) {
@@ -541,21 +511,25 @@ public class Helper {
}
/**
* @deprecated use {@link ChatUtils#parseColors(String)}
* Convert color hex values with ampersand to special character
*
* @param msg
* @return
*/
@Deprecated
public static String parseColors(String msg) {
return ChatUtils.parseColors(msg);
return msg.replace("&", "\u00a7");
}
/**
* Removes color codes from strings
*
* @deprecated use {@link ChatUtils#stripColors(String)}
* @param msg
* @return
*/
@Deprecated
public static String stripColors(String msg) {
return ChatUtils.stripColors(msg);
String out = msg.replaceAll("[&][0-9a-fk-or]", "");
out = out.replaceAll(String.valueOf((char) 194), "");
return out.replaceAll("[\u00a7][0-9a-fk-or]", "");
}
/*
@@ -843,8 +817,8 @@ public class Helper {
String leaderColor = sm.getAllyChatLeaderColor();
String memberColor = sm.getAllyChatMemberColor();
String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName());
String rankFormat = rank != null ? ChatUtils.parseColors(sm.getAllyChatRank()).replace("%rank%", rank) : "";
String rank = cp.getRankId().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRankDisplayName());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getAllyChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm.getAllyChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
if (placeholders != null) {
@@ -855,13 +829,8 @@ public class Helper {
return message;
}
private static String replacePlaceholders(String messageFormat,
ClanPlayer cp,
String leaderColor,
String memberColor,
String rankFormat,
String msg) {
return ChatUtils.parseColors(messageFormat)
private static String replacePlaceholders(String messageFormat, ClanPlayer cp, String leaderColor, String memberColor, String rankFormat, String msg) {
return ChatColor.translateAlternateColorCodes('&', messageFormat)
.replace("%clan%", Objects.requireNonNull(cp.getClan()).getColorTag())
.replace("%nick-color%", (cp.isLeader() ? leaderColor : memberColor))
.replace("%player%", cp.getName())
@@ -882,8 +851,8 @@ public class Helper {
String leaderColor = sm.getClanChatLeaderColor();
String memberColor = sm.getClanChatMemberColor();
String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName());
String rankFormat = rank != null ? ChatUtils.parseColors(sm.getClanChatRank()).replace("%rank%", rank) : "";
String rank = cp.getRankId().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRankDisplayName());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getClanChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm.getClanChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
@@ -9,10 +9,10 @@ import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.tasks.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatFormatMigration;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.UpdateChecker;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bstats.bukkit.Metrics;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
@@ -249,7 +249,7 @@ public class SimpleClans extends JavaPlugin {
if (lang == null) {
return null;
}
String message = ChatUtils.parseColors(lang);
String message = ChatColor.translateAlternateColorCodes('&', lang);
// contains acf placeholders like {commandprefix}
if (Pattern.compile("\\{(?<key>[a-zA-Z]+?)}").matcher(message).find()) {
return message;
@@ -216,7 +216,6 @@ public class SCCommandManager extends PaperCommandManager {
"modtag", "bb", "clear", "rival", "ally", "add", "remove", "stats", "coords", "vitals", "rivalries",
"alliances", "leaderboard", "allow", "block", "auto", "check", "assign", "unassign", "delete", "me",
"setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone",
"lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod",
"setdefault", "removedefault");
"lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help");
}
}
@@ -7,7 +7,6 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateRankNamePrompt;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationFactory;
@@ -68,7 +67,7 @@ public class RankCommand extends BaseCommand {
@Description("{@@command.description.rank.create}")
public void create(Player player, Clan clan) {
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateRankNamePrompt())
.withLocalEcho(true).withTimeout(60).buildConversation(player);
.withLocalEcho(true).buildConversation(player);
conversation.getContext().setSessionData("clan", clan);
conversation.begin();
}
@@ -99,7 +98,7 @@ public class RankCommand extends BaseCommand {
int count = 1;
for (Rank rank : ranks) {
ChatBlock.sendMessage(player, AQUA + lang("ranks.list.item", player, count,
ChatUtils.parseColors(rank.getDisplayName()) + AQUA, rank.getName()));
Helper.parseColors(rank.getDisplayName()) + AQUA, rank.getName()));
count++;
}
}
@@ -118,23 +117,6 @@ public class RankCommand extends BaseCommand {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("rank.displayname.updated", player));
}
@Subcommand("%setdefault")
@CommandPermission("simpleclans.leader.rank.setdefault")
@CommandCompletion("@ranks")
@Description("{@@command.description.rank.setdefault}")
public void setDefault(Player player, Clan clan, @Name("rank") Rank rank) {
clan.setDefaultRank(rank.getName());
ChatBlock.sendMessage(player, AQUA + lang("rank.setdefault", player, rank.getDisplayName()));
}
@Subcommand("%removedefault")
@CommandPermission("simpleclans.leader.rank.removedefault")
@Description("{@@command.description.rank.removedefault}")
public void removeDefault(Player player, Clan clan) {
clan.setDefaultRank(null);
ChatBlock.sendMessage(player, AQUA + lang("rank.removedefault", player));
}
@Subcommand("%permissions")
public class PermissionsCommand extends BaseCommand {
private final String validPermissionsToMessage = Helper.toMessage(Helper.fromPermissionArray(), ",");
@@ -23,12 +23,12 @@ public class CanVoteCondition extends AbstractCommandCondition {
ClanPlayer cp = clanManager.getCreateClanPlayer(player.getUniqueId());
Clan clan = cp.getClan();
if (clan != null) {
if (!requestManager.hasRequest(clan.getTag())) {
throw new ConditionFailedException(lang("nothing.to.vote", player));
}
if (!clan.isLeader(player)) {
throw new ConditionFailedException(RED + lang("no.leader.permissions", player));
}
if (!requestManager.hasRequest(clan.getTag())) {
throw new ConditionFailedException(lang("nothing.to.vote", player));
}
if (cp.getVote() != null) {
throw new ConditionFailedException(RED + lang("you.have.already.voted", player));
}
@@ -1,7 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.data;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -36,7 +35,7 @@ public class ClanRoster extends Sendable {
Player p = cp.toPlayer();
String name = (cp.isTrusted() ? sm.getPageTrustedColor() : sm.getPageUnTrustedColor()) + cp.getName();
String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender);
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(sender, p) ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender);
chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
}
@@ -49,7 +48,7 @@ public class ClanRoster extends Sendable {
Player p = cp.toPlayer();
String name = sm.getPageLeaderColor() + cp.getName();
String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender)
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(sender, p) ? GREEN + lang("online", sender)
: WHITE + cp.getLastSeenDaysString(sender);
chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
@@ -75,19 +75,10 @@ public class Lookup extends Sendable {
@NotNull
private String getPlayerStatus() {
if (target == null || targetClan == null) {
return lang("free.agent", sender);
}
if (target.isLeader()) {
return sm.getPageLeaderColor() + lang("leader", sender);
}
if (target.isTrusted()) {
return sm.getPageTrustedColor() + lang("trusted", sender);
}
if (target.getRankId() != null && !target.getRankId().isEmpty()) {
return sm.getPageTrustedColor() + lang("in.rank", sender);
}
return sm.getPageUnTrustedColor() + lang("untrusted", sender);
return target == null || targetClan == null ? lang("free.agent", sender) : (target.isLeader() ?
sm.getPageLeaderColor() + lang("leader", sender) : (target.isTrusted() ?
sm.getPageTrustedColor() + lang("trusted", sender) : sm.getPageUnTrustedColor() +
lang("untrusted", sender)));
}
@NotNull
@@ -75,7 +75,7 @@ public class GeneralCommands extends BaseCommand {
initialData.put(TAG_KEY, tag);
initialData.put(NAME_KEY, name);
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateClanTagPrompt())
.withLocalEcho(true).withTimeout(60).withInitialSessionData(initialData).buildConversation(player);
.withLocalEcho(true).withInitialSessionData(initialData).buildConversation(player);
conversation.begin();
}
@@ -6,15 +6,12 @@ import co.aikar.commands.bukkit.contexts.OnlinePlayer;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -44,7 +41,7 @@ public class StaffCommands extends BaseCommand {
@Dependency
private StorageManager storage;
@Subcommand("%mod %place")
@Subcommand("%place")
@CommandPermission("simpleclans.mod.place")
@CommandCompletion("@players @clans")
@HelpSearchTags("move put")
@@ -62,8 +59,9 @@ public class StaffCommands extends BaseCommand {
}
if (oldClan.isLeader(player) && oldClan.getLeaders().size() <= 1) {
ChatBlock.sendMessage(sender, RED + lang("you.cannot.move.the.last.leader", sender));
return;
oldClan.clanAnnounce(player.getName(), AQUA + lang("clan.has.been.disbanded",
oldClan.getName()));
oldClan.disband();
} else {
oldClan.addBb(player.getName(), AQUA + lang("0.has.resigned", player.getName()));
oldClan.removePlayerFromClan(player.getUniqueId());
@@ -77,37 +75,7 @@ public class StaffCommands extends BaseCommand {
newClanInput.addPlayerToClan(cp);
}
@Subcommand("%mod %modtag")
@CommandPermission("simpleclans.mod.modtag")
@Description("{@@command.description.modtag.other}")
public void modtag(Player player, @Name("clan") ClanInput clanInput, @Single @Name("tag") String tag) {
Clan clan = clanInput.getClan();
TagChangeEvent event = new TagChangeEvent(player, clan, tag);
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
tag = event.getNewTag();
String cleanTag = Helper.cleanTag(tag);
TagValidator validator = new TagValidator(plugin, player, tag);
if (validator.getErrorMessage() != null) {
ChatBlock.sendMessage(player, validator.getErrorMessage());
return;
}
if (!cleanTag.equals(clan.getTag())) {
ChatBlock.sendMessage(player, RED + lang("you.can.only.modify.the.color.and.case.of.the.tag",
player));
return;
}
clan.addBb(player.getName(), AQUA + lang("tag.changed.to.0", ChatUtils.parseColors(tag)));
clan.changeClanTag(tag);
player.sendMessage(lang("0.tag.changed.to.1", player, clan.getTag(), tag));
}
@Subcommand("%admin %reload")
@Subcommand("%reload")
@CommandPermission("simpleclans.admin.reload")
@Description("{@@command.description.reload}")
public void reload(CommandSender sender) {
@@ -124,7 +92,7 @@ public class StaffCommands extends BaseCommand {
ChatBlock.sendMessage(sender, AQUA + lang("configuration.reloaded", sender));
}
@Subcommand("%mod %home %set")
@Subcommand("%home %set")
@CommandPermission("simpleclans.mod.home")
@CommandCompletion("@clans")
@Description("{@@command.description.mod.home.set}")
@@ -136,7 +104,7 @@ public class StaffCommands extends BaseCommand {
ChatColor.YELLOW + Helper.toLocationString(loc));
}
@Subcommand("%mod %home %tp")
@Subcommand("%home %tp")
@CommandCompletion("@clans:has_home")
@CommandPermission("simpleclans.mod.hometp")
@Description("{@@command.description.mod.home.tp}")
@@ -151,7 +119,7 @@ public class StaffCommands extends BaseCommand {
plugin.getTeleportManager().teleportToHome(player, clan.getClan());
}
@Subcommand("%mod %ban")
@Subcommand("%ban")
@CommandPermission("simpleclans.mod.ban")
@CommandCompletion("@players")
@Description("{@@command.description.ban}")
@@ -171,7 +139,7 @@ public class StaffCommands extends BaseCommand {
}
}
@Subcommand("%mod %unban")
@Subcommand("%unban")
@CommandPermission("simpleclans.mod.ban")
@CommandCompletion("@players")
@Description("{@@command.description.unban}")
@@ -191,7 +159,7 @@ public class StaffCommands extends BaseCommand {
ChatBlock.sendMessage(sender, AQUA + lang("player.removed.from.the.banned.list", sender));
}
@Subcommand("%mod %globalff %allow")
@Subcommand("%globalff %allow")
@CommandPermission("simpleclans.mod.globalff")
@Description("{@@command.description.globalff.allow}")
public void allowGlobalFf(CommandSender sender) {
@@ -203,7 +171,7 @@ public class StaffCommands extends BaseCommand {
}
}
@Subcommand("%mod %globalff %auto")
@Subcommand("%globalff %auto")
@CommandPermission("simpleclans.mod.globalff")
@Description("{@@command.description.globalff.auto}")
public void autoGlobalFf(CommandSender sender) {
@@ -218,7 +186,7 @@ public class StaffCommands extends BaseCommand {
}
@Subcommand("%mod %verify")
@Subcommand("%verify")
@CommandPermission("simpleclans.mod.verify")
@CommandCompletion("@clans:unverified")
@Description("{@@command.description.mod.verify}")
@@ -234,7 +202,7 @@ public class StaffCommands extends BaseCommand {
}
}
@Subcommand("%admin %purge")
@Subcommand("%purge")
@CommandPermission("simpleclans.admin.purge")
@CommandCompletion("@players")
@Description("{@@command.description.purge}")
@@ -252,7 +220,7 @@ public class StaffCommands extends BaseCommand {
ChatBlock.sendMessage(sender, AQUA + lang("player.purged", sender));
}
@Subcommand("%mod %disband")
@Subcommand("%disband")
@CommandCompletion("@clans")
@CommandPermission("simpleclans.mod.disband")
@Description("{@@command.description.mod.disband}")
@@ -280,7 +248,6 @@ public class StaffCommands extends BaseCommand {
clan.addBb(sender.getName(), AQUA + lang("promoted.to.leader", promotePl.getName()));
clan.promote(promotePl.getUniqueId());
ChatBlock.sendMessage(sender, AQUA + lang("player.successfully.promoted", sender));
}
@Subcommand("%admin %demote")
@@ -300,7 +267,7 @@ public class StaffCommands extends BaseCommand {
ChatBlock.sendMessage(sender, AQUA + lang("player.successfully.demoted", sender));
}
@Subcommand("%admin %resetkdr %everyone")
@Subcommand("%resetkdr %everyone")
@CommandPermission("simpleclans.admin.resetkdr")
@Description("{@@command.description.resetkdr.everyone}")
public void resetKdr(CommandSender sender) {
@@ -310,7 +277,7 @@ public class StaffCommands extends BaseCommand {
ChatBlock.sendMessage(sender, RED + lang("you.have.reseted.kdr.of.all.players", sender));
}
@Subcommand("%admin %resetkdr")
@Subcommand("%resetkdr")
@CommandCompletion("@players")
@CommandPermission("simpleclans.admin.resetkdr")
@Description("{@@command.description.resetkdr.player}")
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans.events;
import net.sacredlabyrinth.phaed.simpleclans.Request;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
*
@@ -23,7 +22,7 @@ public class RequestEvent extends Event {
}
@Override
public @NotNull HandlerList getHandlers() {
public HandlerList getHandlers() {
return handlers;
}
@@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull;
public class TagChangeEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final @NotNull Clan clan;
private final @NotNull Clan clan;
private @NotNull String newTag;
private boolean cancelled;
@@ -12,15 +12,9 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class FriendlyFire implements Listener {
private final SimpleClans plugin;
private final Map<UUID, Long> warned = new HashMap<>();
private static final long WARN_DELAY = 10000;
public FriendlyFire(@NotNull SimpleClans plugin) {
this.plugin = plugin;
@@ -65,24 +59,14 @@ public class FriendlyFire implements Listener {
}
if (victimClan.equals(attackerClan)) {
warn(attacker, "cannot.attack.clan.member");
ChatBlock.sendMessageKey(attacker, "cannot.attack.clan.member");
event.setCancelled(true);
return;
}
if (victimClan.isAlly(attackerClan.getTag())) {
warn(attacker, "cannot.attack.ally");
ChatBlock.sendMessageKey(attacker, "cannot.attack.ally");
event.setCancelled(true);
}
}
private void warn(Player attacker, String messageKey) {
long timestamp = warned.getOrDefault(attacker.getUniqueId(), 0L);
long currentTimeMillis = System.currentTimeMillis();
if (timestamp + WARN_DELAY <= currentTimeMillis) {
ChatBlock.sendMessageKey(attacker, messageKey);
warned.put(attacker.getUniqueId(), currentTimeMillis);
}
}
}
@@ -9,7 +9,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PvPOnlyInWar implements Listener {
@@ -40,8 +39,7 @@ public class PvPOnlyInWar implements Listener {
}
}
private void process(EntityDamageEvent event, Player attacker, Player victim, @Nullable Clan attackerClan,
@Nullable Clan victimClan) {
private void process(EntityDamageEvent event, Player attacker, Player victim, Clan attackerClan, Clan victimClan) {
if (attackerClan == null || victimClan == null) {
ChatBlock.sendMessageKey(attacker, "must.be.in.clan.to.pvp", victim.getName());
event.setCancelled(true);
@@ -14,6 +14,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.*;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
@@ -74,15 +76,14 @@ public class SCPlayerListener implements Listener {
@EventHandler
public void handleChatTags(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
if (plugin.getSettingsManager().isBlacklistedWorld(player.getWorld())) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player.getUniqueId());
if (cp == null || plugin.getSettingsManager().isBlacklistedWorld(player.getWorld())) {
return;
}
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
String tagLabel = cp != null && cp.isTagEnabled() ? cp.getTagLabel() : null;
Clan clan = Objects.requireNonNull(cp.getClan());
if (plugin.getSettingsManager().isCompatMode() && plugin.getSettingsManager().isChatTags()) {
if (tagLabel != null) {
if (cp.isTagEnabled()) {
String tagLabel = clan.getTagLabel(cp.isLeader());
if (player.getDisplayName().contains("{clan}")) {
player.setDisplayName(player.getDisplayName().replace("{clan}", tagLabel));
} else if (event.getFormat().contains("{clan}")) {
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.RequestEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.RequestFinishedEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -407,24 +406,42 @@ public final class RequestManager {
* @param req the Request
*/
public void ask(final Request req) {
String message = lang("request.message", req.getClan().getColorTag(), req.getMsg());
ArrayList<Player> recipients = new ArrayList<>();
if (req.getType() == ClanRequest.INVITE) {
recipients.add(Bukkit.getPlayerExact(req.getTarget()));
final String tag = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + req.getClan().getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight();
final String message = tag + " " + plugin.getSettingsManager().getRequestMessageColor() + req.getMsg();
if (req.getType().equals(ClanRequest.INVITE)) {
Player player = Bukkit.getPlayerExact(req.getTarget());
if (player != null) {
String options = lang("accept.or.deny", player, ChatBlock.makeEmpty(Helper.stripColors(tag)) + " " + ChatColor.DARK_GREEN + "/" + plugin.getSettingsManager().getCommandAccept() + plugin.getSettingsManager().getPageHeadingsColor(), ChatColor.DARK_RED + "/" + plugin.getSettingsManager().getCommandDeny());
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, message);
ChatBlock.sendMessage(player, options);
ChatBlock.sendBlank(player);
}
} else {
for (ClanPlayer cp : req.getAcceptors()) {
if (cp.getVote() == null) {
recipients.add(cp.toPlayer());
Player player = cp.toPlayer();
if (player != null) {
String options = lang("accept.or.deny", player, ChatBlock.makeEmpty(Helper.stripColors(tag)) + " " + ChatColor.DARK_GREEN + "/" + plugin.getSettingsManager().getCommandAccept() + plugin.getSettingsManager().getPageHeadingsColor(), ChatColor.DARK_RED + "/" + plugin.getSettingsManager().getCommandDeny());
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, message);
ChatBlock.sendMessage(player, options);
ChatBlock.sendBlank(player);
}
}
}
}
for (Player recipient : recipients) {
if (recipient != null) {
recipient.spigot().sendMessage(ChatUtils.toBaseComponents(recipient, message));
new BukkitRunnable() {
@Override
public void run() {
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RequestEvent(req));
}
}
Bukkit.getScheduler().runTask(plugin, () -> Bukkit.getPluginManager().callEvent(new RequestEvent(req)));
}.runTask(plugin);
}
}
@@ -13,7 +13,6 @@ import org.bukkit.configuration.file.FileConfiguration;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -178,7 +177,7 @@ public final class SettingsManager {
private boolean moneyperkill;
private double KDRMultipliesPerKill;
private boolean teleportBlocks;
private boolean autoGroupGroupName;
private boolean AutoGroupGroupName;
private boolean tamableMobsSharing;
private boolean allowReGroupCommand;
private boolean useThreads;
@@ -206,7 +205,6 @@ public final class SettingsManager {
config = plugin.getConfig();
main = new File(plugin.getDataFolder() + File.separator + "config.yml");
load();
warnAboutAutoGroupGroupName();
}
/**
@@ -393,7 +391,7 @@ public final class SettingsManager {
teleportBlocks = getConfig().getBoolean("settings.teleport-blocks");
language = getConfig().getString("settings.language", "");
languagePerPlayer = getConfig().getBoolean("settings.user-language-selector", true);
autoGroupGroupName = getConfig().getBoolean("permissions.auto-group-groupname");
AutoGroupGroupName = getConfig().getBoolean("permissions.auto-group-groupname");
tamableMobsSharing = getConfig().getBoolean("settings.tameable-mobs-sharing");
allowReGroupCommand = getConfig().getBoolean("settings.allow-regroup-command");
loreLength = getConfig().getInt("settings.lore-length", 38);
@@ -427,15 +425,6 @@ public final class SettingsManager {
}
}
private void warnAboutAutoGroupGroupName() {
Plugin luckPerms = Bukkit.getServer().getPluginManager().getPlugin("LuckPerms");
if (luckPerms != null && autoGroupGroupName) {
plugin.getLogger().warning("LuckPerms was found and the setting auto-group-groupname is enabled.");
plugin.getLogger().warning("Be careful with that as players will be automatically added in the group" +
" that matches their clan tag.");
}
}
public int getLoreLength() {
return loreLength;
}
@@ -1692,7 +1681,7 @@ public final class SettingsManager {
* @return the AutoGroupGroupName
*/
public boolean isAutoGroupGroupName() {
return autoGroupGroupName;
return AutoGroupGroupName;
}
/**
@@ -7,7 +7,6 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.storage.DBCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.MySQLCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.SQLiteCore;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.YAMLSerializer;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDFetcher;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
@@ -18,7 +17,6 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import org.json.simple.JSONObject;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -88,20 +86,20 @@ public final class StorageManager {
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(255) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(25) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `balance` double(64,2),"
+ " `fee_enabled` tinyint(1) default '0',"
+ " `fee_value` double(64,2),"
@@ -164,20 +162,20 @@ public final class StorageManager {
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20),"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(255) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `id` bigint(20),"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(25) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `balance` double(64,2) default 0.0,"
+ " `fee_enabled` tinyint(1) default '0',"
+ " `fee_value` double(64,2),"
@@ -362,7 +360,7 @@ public final class StorageManager {
boolean verified = res.getBoolean("verified");
boolean friendly_fire = res.getBoolean("friendly_fire");
String tag = res.getString("tag");
String color_tag = ChatUtils.parseColors(res.getString("color_tag"));
String color_tag = Helper.parseColors(res.getString("color_tag"));
String name = res.getString("name");
String description = res.getString("description");
String packed_allies = res.getString("packed_allies");
@@ -370,7 +368,7 @@ public final class StorageManager {
String packed_bb = res.getString("packed_bb");
String cape_url = res.getString("cape_url");
String flags = res.getString("flags");
JSONObject ranks = Helper.parseJson(res.getString("ranks"));
String ranks = res.getString("ranks");
long founded = res.getLong("founded");
long last_used = res.getLong("last_used");
double balance = res.getDouble("balance");
@@ -404,7 +402,6 @@ public final class StorageManager {
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
clan.setDefaultRank(Helper.defaultRankFromJson(ranks));
clan.setBanner(banner);
out.add(clan);
@@ -443,7 +440,7 @@ public final class StorageManager {
boolean verified = res.getBoolean("verified");
boolean friendly_fire = res.getBoolean("friendly_fire");
String tag = res.getString("tag");
String color_tag = ChatUtils.parseColors(res.getString("color_tag"));
String color_tag = Helper.parseColors(res.getString("color_tag"));
String name = res.getString("name");
String description = res.getString("description");
String packed_allies = res.getString("packed_allies");
@@ -451,7 +448,7 @@ public final class StorageManager {
String packed_bb = res.getString("packed_bb");
String cape_url = res.getString("cape_url");
String flags = res.getString("flags");
JSONObject ranks = Helper.parseJson(res.getString("ranks"));
String ranks = res.getString("ranks");
long founded = res.getLong("founded");
long last_used = res.getLong("last_used");
double balance = res.getDouble("balance");
@@ -485,7 +482,6 @@ public final class StorageManager {
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
clan.setDefaultRank(Helper.defaultRankFromJson(ranks));
clan.setBanner(banner);
out = clan;
@@ -532,7 +528,7 @@ public final class StorageManager {
long last_seen = res.getLong("last_seen");
long join_date = res.getLong("join_date");
String flags = res.getString("flags");
String packed_past_clans = ChatUtils.parseColors(res.getString("packed_past_clans"));
String packed_past_clans = Helper.parseColors(res.getString("packed_past_clans"));
String resign_times = res.getString("resign_times");
Locale locale = Helper.forLanguageTag(res.getString("locale"));
@@ -703,7 +699,7 @@ public final class StorageManager {
"`packed_bb`, `cape_url`, `flags`, `balance`) ";
String values = "VALUES ( '"
+ Helper.escapeQuotes(YAMLSerializer.serialize(clan.getBanner())) + "','"
+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks(), clan.getDefaultRank())) + "','"
+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks())) + "','"
+ Helper.escapeQuotes(clan.getDescription())+ "',"
+ (clan.isMemberFeeEnabled() ? 1 : 0) +","
+ Helper.escapeQuotes(String.valueOf(clan.getMemberFee())) + ","
@@ -791,7 +787,7 @@ public final class StorageManager {
private String getUpdateClanQuery(Clan clan) {
String query = "UPDATE `sc_clans`" +
" SET ranks = '"+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks(), clan.getDefaultRank())) +"'," +
" SET ranks = '"+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks())) +"'," +
" banner = '" + Helper.escapeQuotes(YAMLSerializer.serialize(clan.getBanner())) + "'," +
" description = '" + Helper.escapeQuotes(clan.getDescription())+ "'," +
" fee_enabled = "+ (clan.isMemberFeeEnabled() ? 1 : 0) +"," +
@@ -1066,15 +1062,15 @@ public final class StorageManager {
private void updateDatabase() {
String query = null;
/*
/**
* From 2.2.6.3 to 2.3
*/
if (!core.existsColumn("sc_clans", "balance")) {
query = "ALTER TABLE sc_clans ADD COLUMN `balance` double(64,2);";
core.execute(query);
}
/*
/**
* From 2.7.16 to 2.7.17
*/
if (!core.existsColumn("sc_clans", "fee_enabled")) {
@@ -1085,24 +1081,24 @@ public final class StorageManager {
query = "ALTER TABLE sc_clans ADD COLUMN `fee_value` double(64,2);";
core.execute(query);
}
/*
/**
* From 2.7.21 to 2.7.22
*/
if (!core.existsColumn("sc_clans", "description")) {
query = "ALTER TABLE sc_clans ADD COLUMN `description` varchar(255);";
core.execute(query);
}
/*
/**
* From 2.7.22 to 2.7.23
*/
if (!core.existsColumn("sc_players", "resign_times")) {
query = "ALTER TABLE sc_players ADD COLUMN `resign_times` text;";
core.execute(query);
}
/*
/**
* From 2.8.2 to 2.9
*/
if (!core.existsColumn("sc_clans", "ranks")) {
@@ -1119,11 +1115,7 @@ public final class StorageManager {
core.execute("ALTER TABLE sc_clans ADD COLUMN `banner` text;");
}
if (plugin.getSettingsManager().isUseMysql()) {
core.execute("ALTER TABLE sc_clans MODIFY color_tag VARCHAR(255);");
}
/*
/**
* Bukkit 1.7.5+ UUID Migration
*/
if (!core.existsColumn("sc_kills", "attacker_uuid")) {
@@ -84,7 +84,7 @@ public final class TeleportManager {
z = z + zz;
plugin.getTeleportManager().addPlayer(player, new Location(location.getWorld(), x + .5,
location.getBlockY(), z + .5, location.getYaw(), location.getPitch()), clan.getName());
location.getBlockY(), z + .5), clan.getName());
}
}
@@ -23,6 +23,8 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
@@ -4,11 +4,11 @@ import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.events.FrameOpenEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.ChatPaginator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -69,10 +69,6 @@ public class InventoryDrawer {
return inventory;
}
/**
*
* @deprecated use {@link InventoryDrawer#open(SCFrame)}
*/
@Deprecated
public static void update(@NotNull SCFrame frame) {
open(frame);
@@ -109,7 +105,7 @@ public class InventoryDrawer {
if (oldLore != null) {
ArrayList<String> newLore = new ArrayList<>();
for (String line : oldLore) {
String[] strings = ChatUtils.wordWrap(line, plugin.getSettingsManager().getLoreLength());
String[] strings = ChatPaginator.wordWrap(line, plugin.getSettingsManager().getLoreLength());
newLore.addAll(Arrays.asList(strings));
}
itemMeta.setLore(newLore);
@@ -3,9 +3,9 @@ package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
@@ -41,14 +41,16 @@ public class Components {
boolean openDetails) {
SimpleClans pl = SimpleClans.getInstance();
String status = getPlayerStatus(viewer, cp);
String status = cp.getClan() == null ? lang("free.agent",viewer)
: (cp.isLeader() ? lang("leader",viewer)
: (cp.isTrusted() ? lang("trusted",viewer) : lang("untrusted",viewer)));
SCComponent c = new SCComponentImpl(lang("gui.playerdetails.player.title",viewer, cp.getName()),
Arrays.asList(
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan",viewer)
: lang("gui.playerdetails.player.lore.clan",viewer, cp.getClan().getColorTag(),
cp.getClan().getName()),
lang("gui.playerdetails.player.lore.rank",viewer,
ChatUtils.parseColors(cp.getRankDisplayName())),
Helper.parseColors(cp.getRankDisplayName())),
lang("gui.playerdetails.player.lore.status",viewer, status),
lang("gui.playerdetails.player.lore.kdr",viewer,
new DecimalFormat("#.#").format(cp.getKDR())),
@@ -76,23 +78,6 @@ public class Components {
return c;
}
@NotNull
private static String getPlayerStatus(Player viewer, ClanPlayer cp) {
if (cp.getClan() == null) {
return lang("free.agent", viewer);
}
if (cp.isLeader()) {
return lang("leader", viewer);
}
if (cp.isTrusted()) {
return lang("trusted", viewer);
}
if (cp.getRankId() != null && !cp.getRankId().isEmpty()) {
return lang("in.rank", viewer);
}
return lang("untrusted", viewer);
}
public static SCComponent getClanComponent(@NotNull SCFrame frame, @NotNull Player viewer,
@Nullable Clan clan, int slot, boolean openDetails) {
SimpleClans pl = SimpleClans.getInstance();
@@ -182,7 +167,6 @@ public class Components {
return c;
}
@SuppressWarnings("deprecation")
public static void setOwningPlayer(@NotNull ItemStack item, @NotNull OfflinePlayer player) {
SkullMeta itemMeta = (SkullMeta) item.getItemMeta();
if (itemMeta == null) {
@@ -2,7 +2,6 @@ package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
@@ -19,19 +18,17 @@ public class PlayerDetailsFrame extends SCFrame {
private final SimpleClans plugin = SimpleClans.getInstance();
private final OfflinePlayer subject;
private final String subjectName;
private final Clan clan;
public PlayerDetailsFrame(Player viewer, SCFrame parent, OfflinePlayer subject) {
super(parent, viewer);
this.subject = subject;
ClanPlayer cp = plugin.getClanManager().getCreateClanPlayer(viewer.getUniqueId());
subjectName = cp.getName();
clan = cp.getClan();
clan = plugin.getClanManager().getAnyClanPlayer(viewer.getUniqueId()).getClan();
}
@Override
public void createComponents() {
String subjectName = subject.getName();
for (int slot = 0; slot < 9; slot++) {
if (slot == 4)
continue;
@@ -96,7 +93,7 @@ public class PlayerDetailsFrame extends SCFrame {
@Override
public @NotNull String getTitle() {
return lang("gui.playerdetails.title",getViewer(), subjectName);
return lang("gui.playerdetails.title",getViewer(), subject.getName());
}
@Override
@@ -3,10 +3,10 @@ package net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.RosterFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
@@ -50,7 +50,7 @@ public class ClanDetailsFrame extends SCFrame {
Collections.singletonList(lang("gui.staffclandetails.disband.lore", getViewer())),
XMaterial.BARRIER, 34);
disband.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"mod disband", false, clan.getTag()));
"disband", false, clan.getTag()));
disband.setConfirmationRequired(ClickType.LEFT);
disband.setPermission(ClickType.LEFT, "simpleclans.mod.disband");
add(disband);
@@ -71,7 +71,7 @@ public class ClanDetailsFrame extends SCFrame {
verify.setPermission(ClickType.LEFT, "simpleclans.mod.verify");
verify.setConfirmationRequired(ClickType.LEFT);
verify.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"mod verify", false, clan.getTag()));
"verify", false, clan.getTag()));
}
add(verify);
}
@@ -84,10 +84,10 @@ public class ClanDetailsFrame extends SCFrame {
SCComponent home = new SCComponentImpl(lang("gui.clandetails.home.title", getViewer()), lore,
XMaterial.MAGENTA_BED, 30);
home.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"mod home tp", false, clan.getTag()));
"home tp", false, clan.getTag()));
home.setPermission(ClickType.LEFT, "simpleclans.mod.hometp");
home.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"mod home set", false, clan.getTag()));
"home set", false, clan.getTag()));
home.setPermission(ClickType.RIGHT, "simpleclans.mod.home");
home.setConfirmationRequired(ClickType.RIGHT);
add(home);
@@ -111,7 +111,7 @@ public class ClanDetailsFrame extends SCFrame {
@Override
public @NotNull String getTitle() {
return lang("gui.clandetails.title", getViewer(), ChatUtils.stripColors(clan.getColorTag()),
return lang("gui.clandetails.title", getViewer(), Helper.stripColors(clan.getColorTag()),
clan.getName());
}
@@ -60,7 +60,7 @@ public class ClanListFrame extends SCFrame {
} else {
if (toPlace != null) {
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"mod place", false, toPlace.getName(), clan.getTag()));
"place", false, toPlace.getName(), clan.getTag()));
c.setConfirmationRequired(ClickType.LEFT);
c.setPermission(ClickType.LEFT, "simpleclans.mod.place");
}
@@ -83,7 +83,7 @@ public class ClanListFrame extends SCFrame {
}
private void updateFrame() {
InventoryDrawer.open(this);
InventoryDrawer.update(this);
}
@Override
@@ -64,7 +64,7 @@ public class PlayerDetailsFrame extends SCFrame {
lang("gui.playerdetails.purge.lore", getViewer())).build();
purge.setConfirmationRequired(ClickType.LEFT);
purge.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"admin purge", false, subjectName));
"purge", false, subjectName));
purge.setPermission(ClickType.LEFT, "simpleclans.admin.purge");
add(purge);
}
@@ -74,7 +74,7 @@ public class PlayerDetailsFrame extends SCFrame {
.withSlot(30).withDisplayName(lang("gui.main.reset.kdr.title", getViewer()))
.withLoreLine(lang("gui.playerdetails.resetkdr.lore", getViewer())).build();
resetKdr.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"admin resetkdr", false, subjectName));
"resetkdr", false, subjectName));
resetKdr.setConfirmationRequired(ClickType.LEFT);
resetKdr.setPermission(ClickType.LEFT, "simpleclans.admin.resetkdr");
add(resetKdr);
@@ -100,9 +100,9 @@ public class PlayerDetailsFrame extends SCFrame {
banUnban.setPermission(ClickType.LEFT, "simpleclans.mod.ban");
banUnban.setPermission(ClickType.RIGHT, "simpleclans.mod.ban");
banUnban.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"mod ban", false, subjectName));
"ban", false, subjectName));
banUnban.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"mod unban", false, subjectName));
"unban", false, subjectName));
add(banUnban);
}
@@ -73,7 +73,7 @@ public class StaffFrame extends SCFrame {
reload.setPermission(ClickType.LEFT, "simpleclans.admin.reload");
reload.setConfirmationRequired(ClickType.LEFT);
reload.setListener(ClickType.LEFT, () ->
InventoryController.runSubcommand(getViewer(), "admin reload", false));
InventoryController.runSubcommand(getViewer(), "reload", false));
add(reload);
}
@@ -93,7 +93,7 @@ public class StaffFrame extends SCFrame {
} else {
arg = "allow";
}
InventoryController.runSubcommand(getViewer(), "mod globalff", true, arg);
InventoryController.runSubcommand(getViewer(), "globalff", true, arg);
});
add(globalFf);
}
@@ -1,200 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.utils;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.*;
import net.md_5.bungee.api.chat.ComponentBuilder.FormatRetention;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static net.md_5.bungee.api.chat.ClickEvent.Action.RUN_COMMAND;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class ChatUtils {
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("(%([A-Za-z]+)%)");
private static final Pattern HEX_COLOR_PATTERN = Pattern.compile("&#(\\w{5}[0-9A-Fa-f])");
private static boolean supportsHexColors;
static {
try {
ChatColor.class.getDeclaredMethod("of", String.class);
supportsHexColors = true;
} catch (NoSuchMethodException e) {
supportsHexColors = false;
}
}
private ChatUtils() {
}
public static String parseColors(@NotNull String text) {
// Special thanks to the Spigot community!
// https://www.spigotmc.org/threads/hex-color-code-translate.449748/#post-3867795
if (supportsHexColors) {
Matcher matcher = HEX_COLOR_PATTERN.matcher(text);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(buffer, ChatColor.of("#" + matcher.group(1)).toString());
}
text = matcher.appendTail(buffer).toString();
}
return ChatColor.translateAlternateColorCodes('&', text);
}
public static String stripColors(String text) {
if (supportsHexColors) {
Matcher matcher = HEX_COLOR_PATTERN.matcher(text);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(buffer, "");
}
text = matcher.appendTail(buffer).toString();
}
return oldStripColors(text);
}
private static String oldStripColors(String text) {
return text.replaceAll("[&][0-9A-Za-z]", "")
.replaceAll(String.valueOf((char) 194), "") //don't know why
.replaceAll("[\u00a7][0-9A-Za-z]", "");
}
public static BaseComponent[] toBaseComponents(@Nullable CommandSender receiver, @NotNull String text) {
ComponentBuilder builder = new ComponentBuilder("");
ArrayList<String> placeholders = new ArrayList<>();
Matcher matcher = PLACEHOLDER_PATTERN.matcher(text);
while (matcher.find()) {
placeholders.add(matcher.group(0));
}
String[] split = PLACEHOLDER_PATTERN.split(text);
for (int i = 0; i < split.length; i++) {
builder.append(split[i]);
if (i >= placeholders.size()) {
continue;
}
appendPlaceholder(receiver, builder, placeholders.get(i));
}
return builder.create();
}
@SuppressWarnings("deprecation")
private static void appendPlaceholder(@Nullable CommandSender receiver, ComponentBuilder builder, String placeholder) {
Matcher matcher = PLACEHOLDER_PATTERN.matcher(placeholder);
if (!matcher.find()) {
return;
}
placeholder = matcher.group(2);
builder.retain(FormatRetention.FORMATTING).append(lang("clickable." + placeholder, receiver))
.event(new ClickEvent(RUN_COMMAND, "/" + placeholder))
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(
(lang("hover.click.to." + placeholder, receiver)))));
}
/**
* Breaks a raw string up into a series of lines. Words are wrapped using
* spaces as decimeters and the newline character is respected.
*
* @param rawString The raw string to break.
* @param lineLength The length of a line of text.
* @return An array of word-wrapped lines.
*/
@NotNull
public static String[] wordWrap(@Nullable String rawString, int lineLength) {
// A null string is a single line
if (rawString == null) {
return new String[]{""};
}
// A string shorter than the lineWidth is a single line
if (rawString.length() <= lineLength && !rawString.contains("\n")) {
return new String[]{rawString};
}
Pattern splitPattern = Pattern.compile("(?<=\\G.{" + lineLength + "})");
char[] rawChars = (rawString + ' ').toCharArray(); // add a trailing space to trigger pagination
StringBuilder word = new StringBuilder();
StringBuilder line = new StringBuilder();
List<String> lines = new LinkedList<>();
int lineColorChars = 0;
for (int i = 0; i < rawChars.length; i++) {
char c = rawChars[i];
// skip chat color modifiers
if (c == ChatColor.COLOR_CHAR) {
word.append(ChatColor.COLOR_CHAR);
word.append(rawChars[i + 1]);
lineColorChars += 2;
i++; // Eat the next character as we have already processed it
continue;
}
if (c == ' ' || c == '\n') {
if (line.length() == 0 && word.length() - lineColorChars > lineLength) { // special case: extremely long word begins a line
lines.addAll(Arrays.asList(splitPattern.split(word.toString())));
} else if (line.length() + 1 + word.length() - lineColorChars == lineLength) { // Line exactly the correct length...newline
if (line.length() > 0) {
line.append(' ');
}
line.append(word);
lines.add(line.toString());
line = new StringBuilder();
lineColorChars = 0;
} else if (line.length() + 1 + word.length() - lineColorChars > lineLength) { // Line too long...break the line
for (String partialWord : splitPattern.split(word.toString())) {
lines.add(line.toString());
line = new StringBuilder(partialWord);
}
lineColorChars = 0;
} else {
if (line.length() > 0) {
line.append(' ');
}
line.append(word);
}
word = new StringBuilder();
if (c == '\n') { // Newline forces the line to flush
lines.add(line.toString());
line = new StringBuilder();
}
} else {
word.append(c);
}
}
if (line.length() > 0) { // Only add the last line if there is anything to add
lines.add(line.toString());
}
// Iterate over the wrapped lines, applying the last color from one line to the beginning of the next
applyLastColorToFollowingLines(lines);
return lines.toArray(new String[0]);
}
private static void applyLastColorToFollowingLines(List<String> lines) {
if (lines.get(0).length() == 0 || lines.get(0).charAt(0) != ChatColor.COLOR_CHAR) {
lines.set(0, ChatColor.WHITE + lines.get(0));
}
for (int i = 1; i < lines.size(); i++) {
final String pLine = lines.get(i - 1);
final String subLine = lines.get(i);
char color = pLine.charAt(pLine.lastIndexOf(ChatColor.COLOR_CHAR) + 1);
if (subLine.length() == 0 || subLine.charAt(0) != ChatColor.COLOR_CHAR) {
lines.set(i, ChatColor.getByChar(color) + subLine);
}
}
}
}
@@ -7,6 +7,8 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.text.MessageFormat;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class TagValidator {
@@ -29,9 +31,9 @@ public class TagValidator {
*/
@Nullable
public String getErrorMessage() {
String cleanTag = ChatUtils.stripColors(this.tag);
if (tag.length() > 255 && plugin.getSettingsManager().isUseMysql()) {
return lang("your.clan.color.tag.cannot.be.longer.than.characters", player, 255);
String cleanTag = Helper.stripColors(this.tag);
if (tag.length() > 25) {
return lang("your.clan.color.tag.cannot.be.longer.than.characters", player, 25);
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass")) {
@@ -14,7 +14,6 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
/**
*
@@ -53,7 +52,7 @@ public class UpdateChecker {
if (parse.isJsonObject()) {
String latestVersion = parse.getAsJsonObject().get("name").getAsString();
if (compareVersions(version, latestVersion) < 0) {
if (!version.equals(latestVersion)) {
plugin.getLogger().info(String.format("You're running an outdated version (%s).", version));
plugin.getLogger().info(String.format("The latest version is %s. Download it at:", latestVersion));
plugin.getLogger().info("https://www.spigotmc.org/resources/simpleclans.71242/");
@@ -70,18 +69,4 @@ public class UpdateChecker {
}.runTaskAsynchronously(plugin);
}
public static int compareVersions(@NotNull String a, @NotNull String b) {
String[] aSplit = a.split("\\.");
String[] bSplit = b.split("\\.");
int length = Math.max(aSplit.length, bSplit.length);
for (int i = 0; i < length; i++) {
int aPart = aSplit.length > i ? Integer.parseInt(aSplit[i]) : 0;
int bPart = bSplit.length > i ? Integer.parseInt(bSplit[i]) : 0;
if (aPart != bPart) {
return Integer.compare(aPart, bPart);
}
}
return 0;
}
}
+1 -18
View File
@@ -3,8 +3,6 @@ create.command=create
delete.command=delete
rank.command=rank
setdisplayname.command=setdisplayname
setdefault.command=setdefault
removedefault.command=removedefault
permissions.command=permissions
list.command=list
list.order.asc=asc
@@ -51,7 +49,6 @@ purge.command=purge
trust.command=trust
untrust.command=untrust
admin.command=admin
mod.command=mod
promote.command=promote
demote.command=demote
clanff.command=clanff
@@ -180,8 +177,6 @@ command.description.rank.create=Creates a rank
command.description.rank.delete=Deletes a rank
command.description.rank.list=Lists your clan''s ranks
command.description.rank.setdisplayname=Sets a rank''s display name
command.description.rank.setdefault=Sets the default rank
command.description.rank.removedefault=Removes the default rank
command.description.rank.permissions.available=Lists the available rank permissions
command.description.rank.permissions.rank=Lists a rank''s permissions
command.description.rank.permissions.add=Adds a permission to a rank
@@ -214,7 +209,6 @@ leader=leader
roster=roster
trusted=trusted
untrusted=untrusted
in.rank=in rank
deaths=Deaths
weights=Weights
stats=stats
@@ -262,12 +256,7 @@ inviting.you.to.join={0} is inviting you to join {1}
asking.for.the.deletion={0} is asking for the deletion of the clan
asking.for.the.promotion={0} is asking for the promotion of {1}
asking.for.the.demotion={0} is asking for the demotion of {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n &8[&8{0}&8] &b{1}\n %accept% &bor %deny%\n
clickable.accept=&a&l[ACCEPT]
clickable.deny=&c&l[DENY]
hover.click.to.accept=&aClick here to accept
hover.click.to.deny=&cClick here to deny
accept.or.deny={0} or {1}
not.sufficient.money=You do not have sufficient money in your account
account.has.been.debited=Your account has been debited {0}
mysql.connection.successful=MySQL Connection successful
@@ -360,7 +349,6 @@ inactive.0=Inactive: {0}
clan.commands=clan commands
you.can.only.modify.the.color.and.case.of.the.tag=You can only modify the color and case of the tag
tag.changed.to.0=Tag changed to {0}
0.tag.changed.to.1=&bSuccessfully changed {0}''s tag to {1}
name.0=Name: {0}
description.0=Description: {0}
leaders.0=Leaders: {0}
@@ -475,9 +463,7 @@ resign.no=No
resign.confirmation=Are you sure you want to resign? {0}
resign.success=You have successfully resigned from your clan
you.cannot.demote.the.last.leader=You cannot demote the last leader
you.cannot.move.the.last.leader=You cannot move the last leader
player.successfully.demoted=The player was successfully demoted
player.successfully.promoted=The player was successfully promoted
bb.ago= ago
bb.moments=moments
bb.seconds= seconds
@@ -503,8 +489,6 @@ no.description=No description
the.player.must.wait.0.before.joining.your.clan.again=This player must wait {0} minute(s) before joining your clan again
disabled.command=Disabled command
rank.displayname.updated=The rank''s display name was updated!
rank.setdefault=The clan''s default rank has now been set to {0}
rank.removedefault=The clan''s default rank has been removed
rank.0.permissions=Rank {0}''s permissions:
available.rank.permissions=Available permissions for ranks:
rank.already.exists=Rank already exists
@@ -794,7 +778,6 @@ clans.not.at.war.pvp.denied=&cYour clan is not at war with {0}!
cannot.attack.civilians=&cYou cannot attack civilians!
cannot.attack.clan.member=&cYou cannot attack another clan member!
cannot.attack.ally=&cYou cannot attack an ally!
# suppress inspection "TrailingSpacesInProperty"
cannot.change.member.fee.now=&cYou cannot change the member fee close to its collection time.
cannot.change.member.fee.hours=&cTry again in {0} hours...
cannot.change.member.fee.minutes=&cTry again in {0} minute(s)...
@@ -1,22 +0,0 @@
description.command=popis
create.command=vytvořit
delete.command=smazat
rank.command=hodnost
setdisplayname.command=setdisplayname
permissions.command=permissions
list.command=list
list.order.asc=vzestupne
list.order.desc=sestupne
list.type.name=jmeno
list.type.kdr=kdr
list.type.size=velikost
list.type.founded=nalezen
list.type.active=aktivní
profile.command=profil
roster.command=roster
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+1 -2
View File
@@ -83,7 +83,6 @@ acf-core.parameter.order=bestellung
acf-core.parameter.help=seite oder schlüsselwörter
command.description.stats=Zeigt die Mitgliederstatistik deines Clans an
command.description.rivalries=Zeigt alle Clan-Rivalitäten
command.description.kick=Wirf ein Mitglied aus deinem Clan
home-menu=/{0} Home{1} - Teleportiert dich in die Clan Basis
home-set-menu=/{0} Home set{1} - Setzt die Clan Basis
home-clear-menu=/{0} Home clear{1} - Entfernt die Clan Basis
@@ -157,7 +156,7 @@ proposing.an.alliance={0} schlägt vor ein Allianz mit {1} einzugehen
inviting.you.to.join={0} lädt dich zum Beitritt ein {1}
asking.for.the.deletion={0} fragt nach einer Löschung des Clans
asking.for.the.promotion={0} fragt nach einer Beförderung für {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} bzw. {1}
not.sufficient.money=Du hast nicht genügend Geld auf deinem Konto
account.has.been.debited=Ihr Konto wurde belastet {0}
mysql.connection.successful=Verbindung hergestellt
+31 -35
View File
@@ -1,17 +1,17 @@
description.command=description
create.command=create
delete.command=eliminar
delete.command=delete
rank.command=rank
setdisplayname.command=setdisplayname
permissions.command=permisos
permissions.command=permissions
list.command=list
list.order.asc=asc
list.order.desc=desc
list.type.name=nombre
list.type.name=name
list.type.kdr=kdr
list.type.size=tamaño
list.type.founded=fundado
list.type.active=activo
list.type.size=size
list.type.founded=founded
list.type.active=active
profile.command=profile
roster.command=roster
lookup.command=lookup
@@ -22,29 +22,29 @@ vitals.command=vitals
coords.command=coords
stats.command=stats
ally.command=ally
add.command=añadir
remove.command=eliminar
allow.command=permitir
block.command=bloquear
add.command=add
remove.command=remove
allow.command=allow
block.command=block
auto.command=auto
check.command=verificar
assign.command=asignar
unassign.command=desasignar
check.command=check
assign.command=assign
unassign.command=unassign
rival.command=rival
bb.command=bb
clear.command=limpiar
clear.command=clear
modtag.command=modtag
toggle.command=toggle
tag.command=etiqueta
deposit.command=deposito
all.command=todo
withdraw.command=retirar
tag.command=tag
deposit.command=deposit
all.command=all
withdraw.command=withdraw
invite.command=invite
kick.command=kick
bank.command=bank
status.command=estado
status.command=status
fee.command=fee
set.command=poner
set.command=set
purge.command=purge
trust.command=trust
untrust.command=untrust
@@ -63,27 +63,27 @@ globalff.command=globalff
kills.command=kills
mostkilled.command=mostkilled
war.command=war
start.command=iniciar
end.command=terminar
start.command=start
end.command=end
home.command=home
regroup.command=reagrupar
me.command=yo
regroup.command=regroup
me.command=me
tp.command=tp
setrank.command=setrank
place.command=place
resetkdr.command=resetkdr
everyone.command=todos
setbanner.command=fijarbanner
everyone.command=everyone
setbanner.command=setbanner
help.command=ayuda
acf-core.parameter.member=miembro
acf-core.parameter.rank=rango
acf-core.parameter.leader=lider
acf-core.parameter.leader=líder
acf-core.parameter.displayname=nombre de pantalla
acf-core.parameter.permission=permisos
acf-core.parameter.permission=permiso
acf-core.parameter.message=mensaje
acf-core.parameter.tag=etiqueta
acf-core.parameter.tag=tag
acf-core.parameter.fee=tarifa
acf-core.parameter.description=descripcion
acf-core.parameter.description=descripción
acf-core.parameter.player=jugador
acf-core.parameter.clan=clan
acf-core.parameter.type=tipo
@@ -255,7 +255,7 @@ inviting.you.to.join={0} te esta invitando unirte a {1}
asking.for.the.deletion={0} esta solicitando la eliminacion del clan
asking.for.the.promotion={0} esta solicitando promover a {1}
asking.for.the.demotion={0} esta solicitando degradar a {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} o {1}
not.sufficient.money=No tienes suficiente dinero en tu cuenta
account.has.been.debited=Se ha descontado de tu cuenta {0}
mysql.connection.successful=MySQL Connection successful
@@ -529,7 +529,6 @@ gui.main.reset.kdr.lore=&7Clic izquierdo para reiniciar tu KDR
gui.main.leaderboard.title=&fTablero de posiciones
gui.main.leaderboard.lore=&7Clic izquierdo para ver el tablero de posiciones
gui.main.staff.title=&fStaff
gui.main.staff.lore=&7Clic izquierdo para abrir el menú del personal
gui.staff.title=Staff
gui.staff.clan.list.lore.left.click=&7Clic izquierdo para ver la lista de clanes
gui.staff.clan.list.lore.right.click=&7Clic derecho para ver la lista de clanes sin verificar
@@ -751,6 +750,3 @@ clans.not.at.war.pvp.denied=&cTu clan no esta en guerra con {0}\!
cannot.attack.civilians=&cNo puedes atacar civiles\!
cannot.attack.clan.member=&cNo puedes atacar miembros de tu clan\!
cannot.attack.ally=&cNo puedes atacar a un aliado\!
cannot.change.member.fee.now=&cNo puedes cambiar la cuota de miembro cerca de su tiempo de recogida.
cannot.change.member.fee.hours=&cInténtalo de nuevo en {0} horas...
cannot.change.member.fee.minutes=&cInténtalo de nuevo en {0} minuto(s)...
+3 -6
View File
@@ -6,7 +6,7 @@ setdisplayname.command=setdisplayname
permissions.command=permissions
list.command=liste
list.order.desc=desc
list.type.name=nom
list.type.name=nome
list.type.kdr=kda
list.type.size=taille
list.type.founded=fondé
@@ -21,7 +21,7 @@ vitals.command=vitaux
coords.command=coordonnées
stats.command=statistiques
ally.command=allie
add.command=ajoute
add.command=ajouter
remove.command=retirer
allow.command=autoriser
block.command=bloquer
@@ -48,7 +48,6 @@ purge.command=purge
trust.command=confiance
untrust.command=méfiance
admin.command=admin
mod.command=modérateur
promote.command=promouvoir
demote.command=rétrograder
clanff.command=clanff
@@ -82,12 +81,10 @@ acf-core.parameter.displayname=Nom affiché
acf-core.parameter.permission=autorisation
acf-core.parameter.message=message
acf-core.parameter.tag=tag
acf-core.parameter.name=nom
acf-core.parameter.description=description
acf-core.parameter.player=joueur
acf-core.parameter.clan=clan
acf-core.parameter.help=page ou mots-clés
command.description.stats=Montre les stats des membres de votre clan
command.description.list=Liste de tous les clans
command.description.ally=Parle dans le chat des alliés
command.description.deny=Refuser une demande
@@ -215,7 +212,7 @@ inviting.you.to.join={0} vous invite à rejoindre {1}
asking.for.the.deletion={0} demande la suppression du clan
asking.for.the.promotion={0} demande la promotion de {1}
asking.for.the.demotion={0} demande la rétrogradation de {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} ou {1}
not.sufficient.money=Vous n'avez pas assez d'argent sur votre compte
account.has.been.debited=Votre compte a été débité {0}
mysql.connection.successful=MySQL Connexion réussie
+1 -1
View File
@@ -72,7 +72,7 @@ inviting.you.to.join={0} meghívott téged, hogy csatlakozz {1}
asking.for.the.deletion={0} a klán törlését kéri
asking.for.the.promotion={0} kéri a promóció {1}
asking.for.the.demotion={0} kéri a promóció {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} vagy {1}
not.sufficient.money=Nincs elegendő pénz a fiókodban
account.has.been.debited=A fiókod terhelésre került {0}
mysql.connection.successful=MySQL kapcsolat sikeres
+3 -3
View File
@@ -1,7 +1,7 @@
description.command=descrizione
create.command=crea
create.command=creare
delete.command=elimina
rank.command=rango
rank.command=grado
profile.command=profilo
roster.command=membri
lookup.command=ricerca
@@ -144,7 +144,7 @@ proposing.an.alliance={0} sta proponendo un''alleanza con {1}
inviting.you.to.join={0} ti sta invitando ad unirti a {1}
asking.for.the.deletion={0} chiede l''eliminazione del clan
asking.for.the.promotion={0} chiede la promozione di {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} oppure {1}
not.sufficient.money=Non hai abbastanza soldi sul tuo conto
mysql.connection.successful=Connessione MySQL riuscita
mysql.connection.failed=Connessione MySQL fallita
@@ -95,5 +95,4 @@ command.description.regroup.me=Hergroepeert je clan leden naar je locatie
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
@@ -46,5 +46,4 @@ help.command=hjelp
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+4 -4
View File
@@ -1,5 +1,5 @@
description.command=Opis
create.command=utwórz
description.command=opis
create.command=stworz
delete.command=usun
rank.command=ranking
setdisplayname.command=ustaw nazwe wyswietlana
@@ -255,7 +255,7 @@ inviting.you.to.join={0} zaprasza cie do przylaczenia sie do {1}}
asking.for.the.deletion={0} wnioskuje za usunieciem klanu
asking.for.the.promotion={0} wnioskuje o awansowanie {1}
asking.for.the.demotion={0} wnioskuje o degradacje {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} lub {1}
not.sufficient.money=Nie posiadasz wystarczajacej ilosci dukatow
account.has.been.debited=Twoje konto zostalo zmniejszone o {0}
mysql.connection.successful=MySQL udane polaczenie
@@ -753,4 +753,4 @@ cannot.attack.clan.member=&cNie możesz zaatakować innego członka klanu\!
cannot.attack.ally=&cNie możesz zaatakować sojusznika\!
cannot.change.member.fee.now=&cNie możesz zmienić składki członkowskiej blisko czasu jej pobrania.
cannot.change.member.fee.hours=&cSpróbuj ponownie za {0} godzin...
cannot.change.member.fee.minutes=&cSpróbuj ponownie za {0} minut...
cannot.change.member.fee.minutes=&cSpróbuj ponownie za {0} minut...
+3 -12
View File
@@ -49,7 +49,6 @@ purge.command=apagar
trust.command=confiar
untrust.command=naoconfiar
admin.command=admin
mod.command=mod
promote.command=promover
demote.command=rebaixar
clanff.command=clanff
@@ -83,7 +82,6 @@ acf-core.parameter.displayname=nome de exibição
acf-core.parameter.permission=permissão
acf-core.parameter.message=mensagem
acf-core.parameter.tag=tag
acf-core.parameter.name=nome
acf-core.parameter.fee=taxa
acf-core.parameter.description=descrição
acf-core.parameter.player=jogador
@@ -210,7 +208,6 @@ leader=líder
roster=membros
trusted=confiável
untrusted=não-confiável
in.rank=no cargo
deaths=Morreu
weights=Pesos
stats=estatísticas
@@ -258,12 +255,7 @@ inviting.you.to.join={0} está te convidando para ser membro de {1}
asking.for.the.deletion={0} está pedindo pela remoção do clã
asking.for.the.promotion={0} está pedindo pela promoção de {1}
asking.for.the.demotion={0} está pedindo pelo rebaixamento de {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n &8[&8{0}&8] &b{1}\n %accept% &bou %deny%\n
clickable.accept=&a&l[ACEITAR]
clickable.deny=&c&l[REJEITAR]
hover.click.to.accept=&aClique aqui para aceitar
hover.click.to.deny=&cClique aqui para rejeitar
accept.or.deny={0} ou {1}
not.sufficient.money=Você não tem dinheiro suficiente em sua conta
account.has.been.debited={0} foram debitados de sua conta
mysql.connection.successful=Conexão MySQL bem sucedida
@@ -356,7 +348,6 @@ inactive.0=Inativo\: {0}
clan.commands=comandos de clã
you.can.only.modify.the.color.and.case.of.the.tag=Você pode modificar apenas a cor ou a caixa (maiúsculo ou minúsculo) da tag
tag.changed.to.0=Tag modificada para {0}
0.tag.changed.to.1=&bAlterou a tag do clã de {0} para {1}
name.0=Nome\: {0}
description.0=Descrição\: {0}
leaders.0=Líderes\: {0}
@@ -538,7 +529,7 @@ gui.main.reset.kdr.lore=&7Clique com o botão esquerdo para redefinir o seu KDR
gui.main.leaderboard.title=&fRanking
gui.main.leaderboard.lore=&7Clique com o botão esquerdo para ver o ranking
gui.main.staff.title=&fEquipe
gui.main.staff.lore=&7Clique com o botão esquerdo para abrir o menu da equipe
gui.main.staff.lore=&7Clique com o botão esquerdo para abrir o menu da Staff
gui.staff.title=Equipe
gui.staff.clan.list.lore.left.click=&7Clique com o botão esquerdo para ver todos os clãs
gui.staff.clan.list.lore.right.click=&7Clique com o botão direito para ver todos os clãs não verificados
@@ -762,4 +753,4 @@ cannot.attack.clan.member=&cVocê não pode atacar um membro do clã\!
cannot.attack.ally=&cVocê não pode atacar um aliado\!
cannot.change.member.fee.now=&cVocê não pode modificar a taxa perto do horário de coleta.
cannot.change.member.fee.hours=&cTente novamente em {0} horas...
cannot.change.member.fee.minutes=&cTente novamente em {0} minuto(s)...
cannot.change.member.fee.minutes=&cTente novamente em {0} minuto(s)...
@@ -73,5 +73,4 @@ command.description.regroup.home=Adu' membri clanului la casa ta
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+20 -29
View File
@@ -49,7 +49,6 @@ purge.command=очистка
trust.command=доверие
untrust.command=недоверие
admin.command=админ
mod.command=мод
promote.command=повысить
demote.command=понизить
clanff.command=кланфф
@@ -67,7 +66,7 @@ war.command=война
start.command=начать
end.command=конец
home.command=дом
regroup.command=созвать
regroup.command=перегруппироваться
me.command=мне
tp.command=телепортировать
setrank.command=установить ранг
@@ -83,7 +82,6 @@ acf-core.parameter.displayname=отображаемое имя
acf-core.parameter.permission=права
acf-core.parameter.message=сообщение
acf-core.parameter.tag=тег
acf-core.parameter.name=имя
acf-core.parameter.fee=комиссия
acf-core.parameter.description=описание
acf-core.parameter.player=игрок
@@ -94,7 +92,7 @@ acf-core.parameter.help=страница или ключевые слова
command.description.stats=Показать статистику участников вашего клана
command.description.rivalries=Показать всех соперников клана
command.description.mostkilled=Показать общую статистику убийств на всём сервере
command.description.kills=Показать количество убийств вашего или другого игрока
command.description.kills=Показывает количество убийств вашего или другого игрока
command.description.lookup=Посмотреть информацию о себе
command.description.lookup.other=Посмотреть информацию об игроке
command.description.leaderboard=Показать таблицу лидеров
@@ -110,16 +108,16 @@ command.description.deny=Отклонить запрос
command.description.accept=Принять запрос
command.description.more=Показать больше информации
command.description.create=Создать клан
command.description.ff.allow=Разрешить "огонь по своим" для вас
command.description.ff.allow=Разрешить участникам вашего клана бить друг друга
command.description.ff.auto=Установить ваш статус "огонь по своим" по умолчанию
command.description.globalff.allow=Установить глобальный статус "огонь по своим" на разрешено
command.description.globalff.allow=Разрешить участникам всех кланов бить друг друга
command.description.globalff.auto=Установить глобальный статус "огонь по своим" по умолчанию
command.description.clanff.allow=Разрешить "огонь по своим" участникам вашего клана
command.description.clanff.block=Запретить "огонь по своим" участникам вашего клана
command.description.description=Установить описание вашего клана
command.description.ban=Запретить игроку использовать команды клана
command.description.unban=Разрешить игроку использовать команды клана
command.description.regroup.me=Созвать участников вашего клана к вам
command.description.regroup.me=Перегруппировать участников вашего клана в ваше текущее местоположение
command.description.regroup.home=Созвать всех участников на вашу базу
command.description.home.tp=Телепортироваться на базу вашего клана
command.description.home.clear=Удалить базу вашего клана
@@ -165,7 +163,7 @@ command.description.admin.demote=Понизить лидера из любого
command.description.demote=Понизить лидера
command.description.admin.promote=Повысить любого участника из любого клана
command.description.promote=Повысить участника до лидера
command.description.toggle.bb=Следует ли показывать доску объявлений при входе на сервер
command.description.toggle.bb=Следует ли показывать вашим участникам доску объявлений при входе на сервер
command.description.toggle.tag=Показывать ли рядом с вашим именем тег клана
command.description.toggle.deposit=Можно ли вносить средства в банковский счёт вашего клана
command.description.toggle.withdraw=Можно ли выводить средства с банковского счёта вашего клана
@@ -210,7 +208,6 @@ leader=лидер
roster=список
trusted=проверенный
untrusted=недоверенный
in.rank=в ранге
deaths=Смертей
weights=Весит
stats=статистика
@@ -225,7 +222,7 @@ profile=профиль
civilian.abbreviation=Жители
rank=Ранг
leaders=Лидеры
none=Нет
none=Нету
today=Сегодня
kills=Убиты
mostkilled=Наибольшее число убийств
@@ -258,12 +255,7 @@ inviting.you.to.join={0} пригласил вас присоединится к
asking.for.the.deletion={0} предлагает удалить клан
asking.for.the.promotion={0} просит повышение {1}
asking.for.the.demotion={0} просит понизить {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n&8[&8{0}&8] &b{1}\n %accept% &bили %deny%\n
clickable.accept=&a&l[ПРИНЯТЬ]
clickable.deny=&c&l[ОТКЛОНИТЬ]
hover.click.to.accept=Нажмите, чтобы принять
hover.click.to.deny=Нажмите, чтобы отклонить
accept.or.deny={0} или {1}
not.sufficient.money=На вашем балансе недостаточно средств
account.has.been.debited=С вашего баланса было списано {0}
mysql.connection.successful=Соединение с MySQL прошло успешно
@@ -279,7 +271,7 @@ nothing.more.to.see=Больше ничего нет
nothing.to.vote=&cНечего принимать или отклонять
no.leader.permissions=Вы не имеете права лидера
you.have.already.voted=Вы уже проголосовали
has.voted.to.deny={0} проголосовал, чтобы отклонить
has.voted.to.deny={0} проголосовал за отказ
view.next.page=Введите /{0} для просмотра следующей страницы.
voted.to.accept={0} проголосовал за принятие
bulletin.board.header={0}* {1}{2} доска объявлений
@@ -356,7 +348,6 @@ inactive.0=Неактивно\: {0}
clan.commands=команды клана
you.can.only.modify.the.color.and.case.of.the.tag=Вы можете изменить только цвет и регистр тега
tag.changed.to.0=Тег изменён на {0}
0.tag.changed.to.1=&bТег {0} успешно изменён на {1}
name.0=Имя\: {0}
description.0=Описание\:{0}
leaders.0=Лидер\: {0}
@@ -434,7 +425,7 @@ depositoff=Пополнение выключено
withdrawon=Вывод включён
withdrawoff=Вывод выключен
feeoff=Участники клана больше не вносят комиссию на банковский счёт вашего клана.
feeon=Участники клана теперь вносят комиссию на банковский счёт вашего клана. Участники, не имеющие достаточное количество денег, будут автоматически кикнуты с клана.
feeon=Участники клана теперь вносят комиссию на банковский счёт вашего клана. \nУчастники, не имеющие достаточное количество денег, будут автоматически кикнуты с клана.
home.base.only.once=База клана может быть установлена лишь один раз
now.at.homebase=Вы сейчас находитесь на базе клана {0}
hombase.set=База клана\: {0}
@@ -445,7 +436,7 @@ rival.limit.reached=Вы достигли лимита войн, пока что
you.moved.teleport.cancelled=Вы перемещены, телепортация отменена
waiting.for.teleport.stand.still.for.0.seconds=Ожидание телепортирования, оставайтесь на месте ещё {0} секунд
on=включить
off=выключить
off=Выключить
leave=покинуть
join=присоединиться
mute=молчать
@@ -530,7 +521,7 @@ gui.main.languageselector.lore.left.click=&7ЛКМ\: Посмотреть спи
gui.main.languageselector.lore.right.click=&7ПКМ\: &bПомочь с переводом
gui.main.other.commands.title=&fДругие команды
gui.main.other.commands.lore=&7ЛКМ\: Посмотреть все команды клана
gui.main.clan.list.title=&fСписок кланов
gui.main.clan.list.title=&fСписок Кланов
gui.main.clan.list.lore=&7ЛКМ\: Список всех кланов
gui.main.reset.kdr.title=&fСбросить KDR
gui.main.reset.kdr.lore.price=&7Цена\: &b{0}
@@ -578,7 +569,7 @@ gui.clanlist.clan.lore.members=&7Участники\: &b{0}
gui.coords.title=Координаты
gui.coords.player.lore.distance=&7Расстояние\: &b{0}
gui.coords.player.lore.coords=&7Координаты\: &b{0} {1} {2}
gui.coords.player.lore.world=&7Мир\: &b{0}
gui.coords.player.lore.world=&fМир\: {0}
gui.invite.title=Пригласить игрока
gui.invite.player.title=&f{0}
gui.invite.player.price.lore=&7Цена\: &b{0}
@@ -614,7 +605,7 @@ gui.clandetails.clan.lore.status=&7Статус\: &b{0}
gui.clandetails.clan.lore.leaders=&7Лидеры\: &b{0}
gui.clandetails.clan.lore.online.members=&7Участников онлайн\: &b{0}/{1}
gui.clandetails.clan.lore.kdr=&7KDR\: &b{0}
gui.clandetails.clan.lore.kill.totals=&7Убито всего\: &b[Соперники\: {0} Нейтралы\: {1} Без клана\: {2}]
gui.clandetails.clan.lore.kill.totals=&7Убито всего\: &b[Враги\:{0} Нейтральные\:{1} Игроки\:{2}]
gui.clandetails.clan.lore.deaths=&7Смертей\: &b{0}
gui.clandetails.clan.lore.fee=&7Комиссия\: &b{0}, {1}$
# suppress inspection "TrailingSpacesInProperty"
@@ -638,11 +629,11 @@ gui.clandetails.home.title=&fДом
gui.clandetails.home.lore.teleport.price=&7Цена телепортирования\: &b{0}
gui.clandetails.home.lore.teleport=&7ЛКМ\: Телепортироваться на базу вашего клана
gui.staffclandetails.home.lore.teleport=&7ЛКМ\: Телепорироваться на базу этого клана
gui.clandetails.home.lore.clear=&7СКМ\: Удалить точку базы вашего клана
gui.clandetails.home.lore.clear=&7Кликните средней кнопкой мыши, чтобы очистить дом вашего клана
gui.clandetails.home.lore.set.price=&7Установить цену\: &b{0}
gui.clandetails.home.lore.set=&7ПКМ\: Установить точку базы вашего клана
gui.staffclandetails.home.lore.set=&7ПКМ\: Установить точку базы для этого клана
gui.clandetails.regroup.title=&fСозвать
gui.clandetails.regroup.title=&fПерегруппировать
gui.clandetails.regroup.lore.price=&7Цена\: &b{0}
gui.clandetails.regroup.lore.home=&7ЛКМ\: Телепортировать всех участников вашего клана на базу
gui.clandetails.regroup.lore.me=&7ПКМ\: Телепортировать участников вашего клана к вам
@@ -662,7 +653,7 @@ gui.clandetails.fee.status.lore=&7Статус\: &b{0}
gui.clandetails.fee.value.lore=&7Значение\: &b{0}
gui.clandetails.fee.toggle.lore=&7ЛКМ\: Изменить статус комиссии
gui.clandetails.rank.title=&fРанг
gui.clandetails.rank.lore=&7ЛКМ\: Посмотреть ранги клана и редактировать их
gui.clandetails.rank.lore=&7ЛКМ\: Посмотреть список рангов клана и их редактирование
gui.clandetails.verified.title=&fПодтвержден
gui.clandetails.not.verified.title=&fНе подтвержден
gui.clandetails.verify.price.lore=&7Цена\: &b{0}
@@ -689,7 +680,7 @@ gui.playerdetails.player.lore.clan=&7Клан\: &b[{0}&b] {1}
gui.playerdetails.player.lore.rank=&7Ранг\: &b{0}
gui.playerdetails.player.lore.status=&7Статус\: &b{0}
gui.playerdetails.player.lore.kdr=&7KDR\: &b{0}
gui.playerdetails.player.lore.kill.totals=&7Убито всего\: &b[Соперники\: {0} Нейтралы\: {1} Без клана\: {2}]
gui.playerdetails.player.lore.kill.totals=&7Убито всего\: &b[Враги\:{0} Нейтральные\:{1} Игроки\:{2}]
gui.playerdetails.player.lore.deaths=&7Смертей\: &b{0}
gui.playerdetails.player.lore.join.date=&7Дата вступления\: &b{0}
gui.playerdetails.player.lore.last.seen=&7Был в сети\: &b{0}
@@ -746,7 +737,7 @@ you.must.hold.a.banner=&cУ вас в руках должен быть флаг\
you.changed.clan.banner=&bВы изменили флаг своего клана\!
your.clan.already.verified=&cКлан уже подтвержден\!
# suppress inspection "TrailingSpacesInProperty"
clan.profile=\n&7Профиль клана &b%clan_name% &8-------------------------------------------\n \n &7Название\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Описание\: &f%clan_description%\n &7Статус\: &f%clan_verified%\n &7Лидеры\: %clan_leaders%\n &7Участников онлайн\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Всего убийств\: &8[Соперников\:&f%clan_rival_kills% &8Нейтральных\:&f%clan_neutral_kills% &8Гражданских\:&f%clan_civilian_kills%&8]\n &7Смерти\: &f%clan_deaths%\n &7Комиссия\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Союзники\: &f%clan_allies%\n &7Враги\: &f%clan_rivals%\n &7Основан\: &f%clan_founded%\n &7Неактивно\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% дня\n
clan.profile=\n&7Профиль клана &b%clan_name% &8-------------------------------------------\n \n &7Название\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Описание\: &f%clan_description%\n &7Статус\: &f%clan_verified%\n &7Лидеры\: %clan_leaders%\n &7Участников онлайн\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Всего убийств\: &8[Соперников\: &f%clan_rival_kills%, &8Нейтральных\: &f%clan_neutral_kills%, &8Гражданских\:&f%clan_civilian_kills%&8]\n &7Смертей\: &f%clan_deaths%\n &7Комиссия\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Союзники\: &f%clan_allies%\n &7Соперники\: &f%clan_rivals%\n &7Основан\: &f%clan_founded%\n &7Неактивность клана\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% дня\n
player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name%
# suppress inspection "TrailingSpacesInProperty"
player.lookup.killtype=&7Тип убийства\: %player_kill_type%\n
@@ -762,4 +753,4 @@ cannot.attack.clan.member=&cВы не можете атаковать участ
cannot.attack.ally=&cВы не можете атаковать союзников\!
cannot.change.member.fee.now=&cИзменить комиссию участника клана невозможно, так как приближается время её сбора
cannot.change.member.fee.hours=&cПовторите попытку через {0} часов...
cannot.change.member.fee.minutes=&cПовторите попытку через {0} минут(ы)...
cannot.change.member.fee.minutes=&cПовторите попытку через {0} минут(ы)...
@@ -36,5 +36,4 @@ reload.command=omladda
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+1 -1
View File
@@ -140,7 +140,7 @@ inviting.you.to.join={0} seni klana katılmaya davet ediyor {1}
asking.for.the.deletion={0} Klanın silinmesini istiyor
asking.for.the.promotion={0} Promosyonunu istiyor {1}
asking.for.the.demotion={0} düşmanı istiyor {1}
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} veya {1}
not.sufficient.money=Hesabınızda yeterli para yok
account.has.been.debited={0} Hesabınız borçlandırıldı
mysql.connection.successful=MySQL bağlantısı başarılı
@@ -43,5 +43,4 @@ help.command=допомогу
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+1 -1
View File
@@ -115,7 +115,7 @@ inviting.you.to.join={0} 邀请您加入 {1}
asking.for.the.deletion={0} 正在请求删除帮派
asking.for.the.promotion={0} 正在请求 {1} 的提升
asking.for.the.demotion={0} 正在请求 {1} 的降级
# suppress inspection "TrailingSpacesInProperty"
accept.or.deny={0} 或 {1}
not.sufficient.money=您的账户没有足够的资金
account.has.been.debited=你的账户已经被扣除了 {0}
mysql.connection.successful=MySQL 连接成功
@@ -62,5 +62,4 @@ command.description.accept=接受請求
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+13 -10
View File
@@ -1,13 +1,15 @@
name: SimpleClans
main: net.sacredlabyrinth.phaed.simpleclans.SimpleClans
version: '${project.version}'
softdepend: [VanishNoPacket, Permissions, PermissionsBukkit, Vault, PermissionsEx, mChat, mChatSuite, PlaceholderAPI, LuckPerms]
softdepend: [VanishNoPacket, Permissions, PermissionsBukkit, Vault, PermissionsEx, mChat, mChatSuite, PlaceholderAPI]
api-version: '1.13'
authors:
- Phaed
- RoinujNosde
website: https://www.spigotmc.org/resources/simpleclans.71242/
permissions:
simpleclans.admin.permissions:
description: Can grant clans permissions
simpleclans.admin.reload:
description: Can reload configuration
simpleclans.admin.purge:
@@ -28,6 +30,10 @@ permissions:
description: Can disband any clan
simpleclans.mod.globalff:
description: Can turn off global friendly fire protection
simpleclans.mod.nohide:
description: Messages from these players cannot be hidden via chat commands
simpleclans.mod.home:
description: Can set other clan's home
simpleclans.mod.hometp:
description: Can teleport to all clans homes
simpleclans.mod.bypass:
@@ -103,10 +109,14 @@ permissions:
description: Can modify his clan's tag
simpleclans.leader.description:
description: Can modify his clan's description
simpleclans.leader.cape:
description: Can set his clan's cape url
simpleclans.leader.bb-clear:
description: Can clear his clan's bb
simpleclans.leader.setbanner:
description: Can set his clan's banner
simpleclans.member.cape-toggle:
description: Can toggle his cape on/off
simpleclans.member.kills:
description: Can view his and other's kills
simpleclans.member.tag-toggle:
@@ -119,8 +129,6 @@ permissions:
description: Can keep items when teleporting home
simpleclans.mod.place:
description: Can manually place players in clans
simpleclans.mod.modtag:
description: Can change a clan's tag
simpleclans.mod.staffgui:
description: Can open the staff gui
simpleclans.leader.fee:
@@ -143,6 +151,8 @@ permissions:
description: Can set trust levels for members
simpleclans.leader.war:
description: Can start wars
simpleclans.leader.setrank:
description: Can set ranks
simpleclans.leader.coloredrank:
description: Can set colored ranks
default: true
@@ -168,10 +178,6 @@ permissions:
description: Can remove permissions from a rank
simpleclans.leader.rank.setdisplayname:
description: Can set the rank displayname
simpleclans.leader.rank.setdefault:
description: Can set the default rank
simpleclans.leader.rank.removedefault:
description: Can remove the default rank
simpleclans.member.bank:
description: Can use banks
simpleclans.admin.*:
@@ -198,7 +204,6 @@ permissions:
simpleclans.mod.nopvpinwar: true
simpleclans.mod.place: true
simpleclans.mod.staffgui: true
simpleclans.mod.modtag: true
simpleclans.anyone.*:
description: Permissions for anyone
default: true
@@ -264,8 +269,6 @@ permissions:
simpleclans.leader.coloredrank: true
simpleclans.leader.bb-clear: true
simpleclans.leader.rank.setdisplayname: true
simpleclans.leader.rank.setdefault: true
simpleclans.leader.rank.removedefault: true
simpleclans.leader.rank.list: true
simpleclans.leader.rank.create: true
simpleclans.leader.rank.assign: true
@@ -1,21 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.utils;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class UpdateCheckerTest {
@Test
void compareVersions() {
assertEquals(UpdateChecker.compareVersions("0.0", "0"), 0);
assertTrue(UpdateChecker.compareVersions("0.1", "0") > 0);
assertTrue(UpdateChecker.compareVersions("1", "1.1.1") < 0);
assertTrue(UpdateChecker.compareVersions("1.1", "1") > 0);
assertTrue(UpdateChecker.compareVersions("1", "0") > 0);
assertEquals(UpdateChecker.compareVersions("1.0.0", "1"), 0);
assertEquals(UpdateChecker.compareVersions("1.0", "1"), 0);
assertEquals(UpdateChecker.compareVersions("1.0.0", "1.0"), 0);
assertEquals(UpdateChecker.compareVersions("1.0.0", "1.0.0"), 0);
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+10 -11
View File
@@ -1,24 +1,23 @@
---
description: Welcome to the SimpleClans Wiki!
description: Добро пожаловать на SimpleClans Wiki!
---
# Introduction
# 😃 Вступление
Here you will find a complete set of documentation including installation, configuration, permissions and usage for SimpleClans.
Здесь вы найдете полную документацию о плагине, включая установку, настройку, разрешения и использование SimpleClans.
## Support
## Поддержка
`1) The Wiki`
`1) Документация`
You should always check this wiki carefully for the answer to your question! Even if it seems hidden, it may be here!
Всегда тщательно проверяйте эту документацию! Даже если кажется, что ответа нет, он может быть здесь!
`2) The Discord`
`2) Дискорд`
If the wiki does not have your answer, feel free to join [the discord](https://discord.gg/CkNwgdE) server to ask for help.
Если вы не нашли ответа на свой вопрос, то можете найти его в [нашем дискорд канале](https://discord.gg/CkNwgdE), задав свой вопрос.
## Bugs and Suggestions
## Ошибки и предложения по улучшению
`Issue Tracker`
If you believe you have found a bug in the plugin, feel free to make an issue on the [issue tracker!](https://github.com/RoinujNosde/SimpleClans/issues) Bugs will be looked into and addressed at the earliest opportunity.
Если вы уверены в том, что нашли ошибку в плагине или хотите предложить свои идеи, воспользуйтесь [Issue Tracker](https://github.com/RoinujNosde/SimpleClans/issues)! Ошибки будут рассмотрены и устранены при первой же возможности.
+25 -20
View File
@@ -1,29 +1,34 @@
# Table of contents
* [Introduction](README.md)
* [Discord Support](https://discord.gg/CkNwgdE)
* [Bugs and Suggestions](https://github.com/RoinujNosde/SimpleClans/issues)
* [😃 Вступление](README.md)
* [Дискорд | Поддержка](https://discord.gg/CkNwgdE)
* [Ошибки и предложения](https://github.com/RoinujNosde/SimpleClans/issues)
* [Javadoc](https://ci.roinujnosde.me/job/SimpleClans/Javadoc/)
## How to Setup
## Настройка <a href="#how-to-setup" id="how-to-setup"></a>
* [Configuration](how-to-setup/configuration.md)
* [Translation](how-to-setup/translation.md)
* [Member Fee](how-to-setup/member-fee.md)
* [Clan Upkeep](how-to-setup/clan-upkeep.md)
* [Clan Below Player's Name](how-to-setup/clan-below-players-name.md)
* [Clan on Tablist](how-to-setup/clan-on-tablist.md)
* [📘 Конфигурация](how-to-setup/configuration.md)
* [🍕 Перевод](how-to-setup/translation.md)
* [💰 Комиссия в клане](how-to-setup/komissiya-v-klane.md)
* [👇 Клан под ником игрока](how-to-setup/clan-below-players-name.md)
* [☝️ Клан в табе](how-to-setup/clan-on-tablist.md)
## Commands and Permissions
## Команды и разрешения <a href="#commands-and-permissions" id="commands-and-permissions"></a>
* [Commands](commands-and-permissions/commands.md)
* [Permissions](commands-and-permissions/permissions.md)
* [Clan Alliances and Rivalries](commands-and-permissions/aliances-and-rivalries.md)
* [Ranks with Permissions](commands-and-permissions/ranks-with-permissions.md)
* [📌 Команды](commands-and-permissions/commands.md)
* [🚦 Разрешения](commands-and-permissions/permissions.md)
* [🪖 Союзники и соперники](commands-and-permissions/aliances-and-rivalries.md)
* [🏅 Ранги с разрешениями](commands-and-permissions/ranks-with-permissions.md)
* [👍 Подтвержденные кланы](commands-and-permissions/podtverzhdennye-klany.md)
* [⌛ Постоянные кланы](commands-and-permissions/postoyannye-klany.md)
## Other
## Интеграции
* [Known issues](other/known-issues.md)
* [SimpleClans API Example](other/simpleclans-api.md)
* [PlaceholderAPI Support](other/placeholderapi-support.md)
* [Land Claims Plugins](other/land-claims.md)
* [🏝️ GriefPrevention, WorldGuard и другие](integracii/land-claims.md)
* [👾 DiscordSRV](integracii/discordsrv.md)
## Другое <a href="#other" id="other"></a>
* [🪓 Известные проблемы](other/known-issues.md)
* [♟️ SimpleClans API](other/simpleclans-api.md)
* [🪜 Поддержка PlaceholderAPI](other/placeholderapi-support.md)
@@ -1,33 +1,28 @@
---
description: null
---
# 🪖 Союзники и соперники
# Clan Alliances and Rivalries
Союз – это отличная возможность скрепить ваши дружественные намерения. Он позволяет вам общаться в [союзном чате](https://wiki.roinujnosde.me/simpleclans/how-to-setup/configuration#ally-chat), а также защищает от огня по своим.
Any clan leader can send an request to start an alliance with any other clan with `/clan ally add`. If the request is accepted by a leader of the second clan, the alliance is formed. The alliance can be broken by any leader of either clan at any time with `/clan ally remove`, no one needs to accept the removal of an alliance.
Соперничество же обозначает линию между вами. За убитого соперника, ваш клан может повысить свой KDR (смотрите [настройки](https://wiki.roinujnosde.me/simpleclans/how-to-setup/configuration#kill-weights)). В крайнем случае, всегда можно начать [войну](https://wiki.roinujnosde.me/simpleclans/how-to-setup/configuration#war-and-protection) и наконец выяснить ваши отношения!\
\
:warning: Для формирования союза или прекращения вражды **требуется подтверждение** от запрашиваемого клана.&#x20;
Clan rivalries can be started by any clan at any time, no request is needed, rivalries are automatically formed once a clan leader decides he wants one by using `/clan rival add`. If someone has pissed you off and you want them as rivals, their permission is not needed. To break a clan rivalry on the other hand, you need the acceptance of the other clan, you must use `/clan rival remove` to send the other clan a request, once one of their leaders accept the rivalry is broken.
## Команды
You can view a list of all clans and their allies with the `/clan alliances` command, or their rivals with the `/clan rivalries` command.
| Команда | Описание |
| -------------------------- | -------------------------------------- |
| `/clan ally add [tag]` | Отправить запрос на формирование союза |
| `/clan ally remove [tag]` | Расформировать союз |
| `/clan rival add [tag]` | Добавить противника |
| `/clan rival remove [tag]` | Удалить противника |
| `/clan alliances` | Список всех кланов и их союзников |
| `/clan rivalries` | Список всех кланов и их противников |
## Commands
| Commands | Description |
| :--- | :--- |
| `/clan ally add [tag]` | Send an request to start an alliance \(acceptance is required\) |
| `/clan ally remove [tag]` | Remove alliance \(no acceptance is required\) |
| `/clan rival add [tag]` | Starting a rivalry \(no acceptance is required\) |
| `/clan rival remove [tag]` | Remove a rivalry \(acceptance is required\) |
| `/clan alliances` | List all clans and their allies |
| `/clan rivalries` | List all clans and their rivals |
## Permissions
| Permission | Description |
| :--- | :--- |
| `simpleclans.member.ally` | Can use ally chat |
| `simpleclans.leader.ally` | Can ally his clan with other simpleclans |
| `simpleclans.leader.rival` | Can start a rivalry with another clan |
| `simpleclans.anyone.alliances` | Can view alliances by clan |
| `simpleclans.anyone.rivalries` | Can view rivalries by clan |
## Разрешения
| Права | Описание |
| ------------------------------ | -------------------------------------------------- |
| `simpleclans.member.ally` | Может использовать союзный чат |
| `simpleclans.leader.ally` | Может отправить запрос на союз с другими кланами |
| `simpleclans.leader.rival` | Может отправить запрос на вражду с другими кланами |
| `simpleclans.anyone.alliances` | Может видеть союзников кланов |
| `simpleclans.anyone.rivalries` | Может видеть противников кланов |
+111 -101
View File
@@ -1,120 +1,130 @@
---
description: null
---
# 📌 Команды
# Commands
> Required arguments are marked with `(argument)`
> Обязательный аргумент помечен как`(аргумент)`&#x20;
>
> Optional arguments are marked with `[argument]`
> Необязательный аргумент помечен как `[аргумент]`
## Anyone Commands
## Команды всех игроков
| Command | Description | Verified only |
| :--- | :--- | :--- |
| `/clan` | Opens the GUI or shows the help | No |
| `/clan help` | Shows the plugin's commands | No |
| `/clan create [tag] [name]` | Creates a new clan | No |
| `/accept` | Accepts a request | No |
| `/deny` | Denies a request | No |
| `/more` | Shows more information | No |
| `/clan leaderboard` | Shows the leaderboard | No |
| `/clan list [name|size|kdr|founded|active] [asc|desc]` | Lists all clans | No |
| `/clan rivalries` | Shows all clan rivalries | No |
| `/clan alliances` | Shows all clan alliances | No |
| `/clan lookup [player]` | Looks up your or another player's info | No |
| `/clan profile [tag]` | Shows another clan's profile | Yes\* |
| `/clan roster [tag]` | Shows another clan's roster | Yes\* |
| `/clan ff (allow|auto)` | Toggles personal friendly fire | No |
| `/clan resetkdr` | Resets your KDR | No |
| Команда | Описание | Только подтверждённый клан |
| ----------------------------------------------------------- | -------------------------------------------------------- | -------------------------- |
| `/clan` | Открыть GUI или показывать справку | Нет |
| `/clan help` | Показать команды клана | Нет |
| `/clan create [тег] [название]` | Создать новый клан | Нет |
| `/accept` | Принять запрос | Нет |
| `/deny` | Отклонить запрос | Нет |
| `/more` | Показать больше информации | Нет |
| `/clan leaderboard` | Показать таблицу лидеров | Нет |
| `/clan list [name\|size\|kdr\|founded\|active] [asc\|desc]` | Список всех кланов | Нет |
| `/clan rivalries` | Показать всех соперников клана | Нет |
| `/clan alliances` | Показать всех союзников клана | Нет |
| `/clan lookup [игрок]` | Посмотреть статистику вашу или другого игрока | Нет |
| `/clan profile [тег]` | Показать профиль другого клана | Да\* |
| `/clan roster [тег]` | Показать список участников клана | Да\* |
| `/clan ff (allow\|auto)` | Переключает личный "Огонь по своим" | Нет |
| `/clan resetkdr` | Сбрасывает ваш KDR | Нет |
| `/clan toggle invite` | Переключает возможность быть приглашённым в другие кланы | Нет |
\\* The target clan
\\\* Указанный клан
## Members Commands
## Команды участника
### General Commands
### Основные команды
| Command | Description | Verified only |
| :--- | :--- | :--- |
| `/clan kills [player]` | Shows your or another player's kill counts | Yes |
| `/clan toggle` | Toggles personal settings | Yes |
| `/clan mostkilled` | Shows server-wide most killed counts | Yes |
| `/clan resign` | Resigns from the clan | No |
| `/clan fee check` | Checks if the fee is enabled and how much it costs | Yes |
| `/clan vitals` | Shows your clan's vitals | Yes |
| `/clan stats` | Shows your clan's stats | Yes |
| `/clan profile` | Shows your clan's profile | Yes |
| `/clan roster` | Shows your clan's roster | Yes |
| `/clan coords` | Shows your clan's coords | Yes |
| Команда | Описание | Только подтверждённый клан |
| --------------------- | ------------------------------------------------------- | -------------------------- |
| `/clan kills [игрок]` | Показывать количество убийств вашего или другого игрока | Да |
| `/clan toggle` | Переключить личную статистику | Да |
| `/clan mostkilled` | Показать общее количество убитых на сервере | Да |
| `/clan resign` | Выйти из клана | Нет |
| `/clan fee check` | Проверить включена ли комиссия и её значение | Да |
| `/clan vitals` | Показать боеспособность вашего клана | Да |
| `/clan stats` | Показать статистику вашего клана | Да |
| `/clan profile` | Показать профиль вашего клана | Да |
| `/clan roster` | Показать список участников вашего клана | Да |
| `/clan coords` | Показать координаты вашего клана | Да |
| `/clan bb` | Показать доску объявлений вашего клана | Да |
| `/clan bb (сообщ)` | Написать сообщение на доску объявления вашего клана | Да |
### Chat Commands
### Команды чата
| Command | Description | Verified only |
| :--- | :--- | :--- |
| `/. (message)` | Sends a message to your clan's chat | No |
| `/. [join|leave|mute]` | Joins/leaves/mutes your clan's chat | No |
| `/ally (message)` | Sends a message to the ally chat | No |
| `/ally [join|leave|mute]` | Joins/leaves/mutes the ally chat | No |
| Команда | Описание | Только подтверждённый клан |
| --------------------------------------------- | -------------------------------------------------- | -------------------------- |
| `/. (сообщение)` | Отправить сообщение в чат клана | Нет |
| `/. [присоединиться\|покинуть\|заглушить]` | Присоединиться/покинуть/Заглушить чат вашего клана | Нет |
| `/ally (сообщение)` | Отправить сообщение в союзный чат | Нет |
| `/ally [присоединиться\|покинуть\|заглушить]` | Присоединиться/Выйти/Заглушить союзный чат | Нет |
## Leaders Commands
### Команды банка
| Command | Description | Verified only |
| :--- | :--- | :--- |
| `/clan description (description)` | Modifies the clan's description | Yes |
| `/clan invite (player)` | Invites a player | No |
| `/clan kick (player)` | Kicks a player from the clan | No |
| `/clan trust (player)` | Sets a member as trusted | No |
| `/clan untrust (player)` | Sets a member as untrusted | No |
| `/clan promote (member)` | Promotes a member to leader | No |
| `/clan demote (leader)` | Demotes a leader to member | No |
| `/clan setbanner` | Sets the clan's banner | Yes |
| `/clan modtag (tag)` | Modifies your clan's tag \(only colors and case\) | |
| `/clan clanff (allow|block)` | Toggles clan's friendly fire | No |
| `/clan war (start|end) (tag)` | Starts or ends a war | Yes |
| `/clan rival (add|remove) (tag)` | Adds or removes a rival | Yes |
| `/clan ally (add|remove) (tag)` | Adds or removes an ally | Yes |
| `/clan verify` | Verifies your clan | No |
| `/clan disband` | Disbands your clan | No |
| `/clan fee set (amount)` | Sets the clan's member fee | No |
| `/clan regroup me` | Regroups your clan members to your location | Yes |
| `/clan regroup home` | Regroups your clan members to your clan's home | Yes |
| `/clan home` | Teleports to your clan's home | Yes |
| `/clan home clear` | Clears your clan's home | Yes |
| `/clan home set` | Sets your clan's home | Yes |
| `/clan rank create` | Creates a rank | Yes |
| `/clan rank setdisplayname (rank) (displayname)` | Sets the display name of the rank \(it can contain colors and multiple words\) | Yes |
| `/clan rank assign (player) (rank)` | Assigns a user to a rank | Yes |
| `/clan rank unassign (player)` | Unassigns a user from a rank | Yes |
| `/clan rank delete (rank)` | Deletes a rank | Yes |
| `/clan rank list` | Lists the clan's ranks | Yes |
| `/clan rank permissions` | Lists the available permissions for ranks | Yes |
| `/clan rank permissions (rank)` | Lists the rank's permissions | Yes |
| `/clan rank permissions add (rank) (permission)` | Adds a permission to the rank | Yes |
| `/clan rank permissions remove (rank) (permission)` | Removes a permission from the rank | Yes |
| Команда | Описание | Только подтверждённый клан |
| ------------------------- | ------------------------------------------------------------- | -------------------------- |
| `/clan bank status` | Проверить баланс банка вашего клана | Да |
| `/clan bank withdraw all` | Вывести всё из банка вашего клана | Да |
| `/clan bank deposit all` | Внести все деньги, которые у вас имеются, в банк вашего клана | Да |
| `/clan withdraw (кол-во)` | Вывести указанное количество денег из банка вашего клана | Да |
| `/clan deposit (кол-во)` | Внести указанное количество денег в банк вашего клана | Да |
## Mod Commands
## Команды лидера
| Command | Description |
| :--- | :--- |
| `/clan place (player) (new clan)` | Places a player in a clan |
| `/clan home set (tag)` | Sets a clan's home |
| `/clan home tp (tag)` | Teleports to a clan's home |
| `/clan ban (player)` | Bans a player from clan commands |
| `/clan unban (player)` | Unbans a player from clan commands |
| `/clan globalff (allow|auto)` | Toggles the global friendly-fire status |
| `/clan verify (tag)` | Verifies a clan |
| `/clan disband (tag)` | Disbands a clan |
| Команда | Описание | Только подтверждённый клан |
| ----------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------- |
| `/clan description (описание)` | Изменить описание клана | Да |
| `/clan invite (игрок)` | Пригласить игрока в клан | Нет |
| `/clan kick (игрок)` | Выкинуть игрока из клана | Нет |
| `/clan trust (игрок)` | Начать доверять участнику клана | Нет |
| `/clan untrust (игрок)` | Перестать доверять участнику клана | Нет |
| `/clan promote (участник)` | Повысить участника до лидера | Нет |
| `/clan demote (лидер)` | Понизить лидера до участника | Нет |
| `/clan setbanner` | Установить баннер клана | Да |
| `/clan modtag (тег)` | Изменить тег клана (только цвет и регистр) | |
| `/clan clanff (allow\|block)` | Переключить параметр "огонь по своим" в клане | Нет |
| `/clan war (start\|end) (тег)` | Начать или окончить войну | Да |
| `/clan rival (add\|remove) (tag)` | Добавить или удалить соперника | Да |
| `/clan ally (add\|remove) (tag)` | Добавить или удалить союзника | Да |
| `/clan verify` | Подтвердить ваш клан | Нет |
| `/clan disband` | Расформировать ваш клан | Нет |
| `/clan fee set (количество)` | Установить комиссию для участников | Нет |
| `/clan regroup me` | Перегруппировать участников к вам | Да |
| `/clan regroup home` | Перегруппировать участников на вашу базу | Да |
| `/clan home` | Телепортироваться на базу вашего клана | Да |
| `/clan home clear` | Очистить точку базы вашего клана | Да |
| `/clan home set` | Установить точку базы вашего клана | Да |
| `/clan rank create` | Создать новый ранг | Да |
| `/clan rank setdisplayname (ранг) (отобр. имя)` | Установить отображаемое имя ранга (Может содержать цвета и иметь несколько слов) | Да |
| `/clan rank assign (игрок) (ранг)` | Назначить участнику ранг | Да |
| `/clan rank unassign (игрок)` | Убрать у участника ранг | Да |
| `/clan rank delete (ранг)` | Удалить ранг | Да |
| `/clan rank list` | Список всех рангов вашего клана | Да |
| `/clan rank permissions` | Список доступных прав рангов | Да |
| `/clan rank permissions (ранг)` | Список прав ранга | Да |
| `/clan rank permissions add (ранг) (право)` | Добавить право к рангу | Да |
| `/clan rank permissions remove (ранг) (право)` | Удалить право у ранга | Да |
| `/clan bb clear` | Очистить все сообщения с доски объявления вашего клана | Да |
## Admin Commands
## Команды модераторов
| Command | Description |
| :--- | :--- |
| `/clan reload` | Reloads the plugin and its configuration \(some features may need a server restart\) |
| `/clan purge` | Purges a player's data |
| `/clan resetkdr everyone` | Resets everyone's KDR |
| `/clan resetkdr (player)` | Resets a player's KDR |
| `/clan admin demote (player)` | Demotes a leader from any clan |
| `/clan admin promote (player)` | Promotes a member from any clan |
| Команда | Описание |
| ---------------------------------- | ------------------------------------------------------ |
| `/clan place (игрок) (новый клан)` | Переместить игрока в клан |
| `/clan home set (тег)` | Установить точку базы клана |
| `/clan home tp (тег)` | Телепортироваться на точку базы клана |
| `/clan ban (игрок)` | Заблокировать игрока от использования клановых команд |
| `/clan unban (игрок)` | Разблокировать игрока от использования клановых команд |
| `/clan globalff (allow\|auto)` | Переключить общий статус "Огонь по своим" |
| `/clan verify (тег)` | Подтвердить клан |
| `/clan disband (тег)` | Расформировать клан |
| `/clan mod tag (тег) (клан)` | Изменить цвета и регистр клана |
## Команды администраторов
| Команда | Описание |
| ------------------------------ | ---------------------------------------------------------------------------------------------- |
| `/clan reload` | Перезагрузить плагин и его конфигурацию (Некоторым вещам требуется перезагрузка всего сервера) |
| `/clan purge` | Очистить данные игрока |
| `/clan resetkdr everyone` | Сбросить KDR всех игроков |
| `/clan resetkdr (игрок)` | Сбросить KDR игрока |
| `/clan admin demote (игрок)` | Понизить лидера любого клана |
| `/clan admin promote (игрок)` | Повысить лидера любого клана |
| `/clan admin permanent (клан)` | Выдать перманентный статус клану |
+143 -120
View File
@@ -1,139 +1,162 @@
---
description: null
---
# 🚦 Разрешения
# Permissions
## Супер-права
## SuperPerms Nodes \(Some auto added\)
Эти права – быстрый способ настроить SimpleClans. Некоторые из них добавлены автоматически (см. приписку авто). Если вы хотите настроить каждое разрешение по отдельности (см. [индивидуальные права](permissions.md#individualnye-prava)), то сперва отрицайте эти права.
These super permission nodes are a quick way to setup SimpleClans, some are automatically given \(See Auto Added\). If you wish to setup individual permissions to groups you will need to deny these auto added super permission nodes and setup permissions one by one after.
| Право | Описание |
| ------------------------------------- | --------------------------- |
| `simpleclans.anyone.*` (Авто) | Разрешения любого игрока |
| `simpleclans.member.*` (Авто) | Разрешения участников клана |
| `simpleclans.leader.*` (Авто) | Разрешения лидеров клана |
| `simpleclans.mod.*` (Авто к OP'кам) | Разрешения модераторов |
| `simpleclans.admin.*` (Авто к OP'кам) | Разрешения администраторов |
| Permission | Description |
| :--- | :--- |
| `simpleclans.anyone.*` \(Auto added\) | Permissions for anyone |
| `simpleclans.member.*` \(Auto added\) | Permissions for those who can be clan members |
| `simpleclans.leader.*` \(Auto added\) | Permissions for those who can be clan leaders |
| `simpleclans.mod.*` \(Auto added to OPS\) | Permissions for moderators |
| `simpleclans.admin.*` \(Auto added to OPS\) | Permissions for admins |
## Индивидуальные права
## Individual Nodes
Вам не нужно добавлять их, если права добавлены [автоматически ](permissions.md#superperms-prava-nekotorye-dobavlyayutsya-avtomaticheski)(супер-права).\
\
Индивидуальные права существуют только на тот случай, если вы хотите \
настроить разрешения _по отдельности._&#x20;
\(You don't need to add these as they are all included if you've already added the node groups \(above\). They are only included here as reference in case you want to toggle a couple of them off individually. Then you can just drop those in, set to false, along with the node groups.\)
**Пример №1**: мы хотим, чтобы никто не мог пользоваться командой `/clan list`\
Для этого мы поставим `simpleclans.anyone.list` на`false` - всё, теперь никто не сможет пользоваться этой командой.
### Anyone Nodes
**Пример №2**: мы хотим настроить разрешения для лидеров по отдельности.\
Для этого сначала мы поставим `simpleclans.leader.*` на `false`, а уже потом будем настраивать каждое.
| Permission | Description |
| :--- | :--- |
| `simpleclans.anyone.alliances` | Can view alliances by clan |
| `simpleclans.anyone.leaderboard` | Can view the leaderboard |
| `simpleclans.anyone.list` | Can list simpleclans |
| `simpleclans.anyone.lookup` | Can lookup a player's info |
| `simpleclans.anyone.profile` | Can view a clan's profile |
| `simpleclans.anyone.rivalries` | Can view rivalries by clan |
| `simpleclans.anyone.roster` | Can view a clan's member list |
### Разрешения любого игрока
### Member Nodes
| Право | Описание |
| ---------------------------------- | -------------------------------------------------------------- |
| `simpleclans.anyone.alliances` | Может просматривать список союзников всех кланов |
| `simpleclans.anyone.leaderboard` | Может посмотреть таблицу лидеров |
| `simpleclans.anyone.list` | Может посмотреть список всех кланов |
| `simpleclans.anyone.lookup` | Может посмотреть информацию об игроках |
| `simpleclans.anyone.profile` | Может посматривать профили кланов |
| `simpleclans.anyone.rivalries` | Может посмотреть список противников всех кланов |
| `simpleclans.anyone.roster` | Может посмотреть список участников кланов |
| `simpleclans.anyone.invite-toggle` | Может переключать возможность быть приглашённым в другие кланы |
| Permission | Description |
| :--- | :--- |
| `simpleclans.member.abstain` | Can abstain |
| `simpleclans.member.accept` | Can accept |
| `simpleclans.member.ally` | Can use ally chat |
| `simpleclans.member.chat` | Can use clan chat |
| `simpleclans.member.bank` | Can use the clan bank |
| `simpleclans.member.bb-add` | Can add to his clan's bulletin board |
| `simpleclans.member.bb-toggle` | Can toggle the bulletin board on/off |
| `simpleclans.member.bb` | Can view his clan's bulletin board |
| `simpleclans.member.can-join` | Can join clans |
| `simpleclans.member.coords` | Can view his clan's coords |
| `simpleclans.member.deny` | Can deny |
| `simpleclans.member.ff` | Can toggle his own friendly fire |
| `simpleclans.member.home` | Can tp to home base |
| `simpleclans.member.kills` | Can view his and other's kills |
| `simpleclans.member.lookup` | Can view his own player info |
| `simpleclans.member.profile` | Can view his own clan's profile |
| `simpleclans.member.resign` | Can resign from his clan |
| `simpleclans.member.roster` | Can view his own clan's member list |
| `simpleclans.member.stats` | Can view his clan stats |
| `simpleclans.member.vitals` | Can view his clan's vitals |
| `simpleclans.member.toggle.bb` | Can toggle bb on/off |
| `simpleclans.member.tag-toggle` | Can hide/show their clan tag |
| `simpleclans.member.fee-check` | Allows the member to check how much is the fee and if it's enabled |
| `simpleclans.member.bypass-fee` | Can bypass the member fee |
### Разрешения участника
### Leader Nodes
| Право | Описание |
| ----------------------------------------------- | ------------------------------------------------------------- |
| `simpleclans.member.abstain` | Может воздержаться от участия |
| `simpleclans.member.accept` | Может принять запрос |
| `simpleclans.member.ally` | Может использовать союзный чат |
| `simpleclans.member.chat` | Может использовать чат клана |
| `simpleclans.member.bank` | Может использовать банк клана |
| `simpleclans.member.bb-add` | Может добавлять сообщения на доску объявлений |
| `simpleclans.member.bb-toggle` | Может переключать отображение доски объявлений его клана |
| `simpleclans.member.bb` | Может видеть доску объявлений его клана |
| `simpleclans.member.can-join` | Может присоединяться к кланам |
| `simpleclans.member.coords` | Может посмотреть координаты его клана |
| `simpleclans.member.deny` | Может отклонить запрос |
| `simpleclans.member.ff` | Может переключать собственный "огонь по своим" |
| `simpleclans.member.home` | Может телепортироваться на точку базы клана |
| `simpleclans.member.kills` | Может посмотреть убийства свои и других |
| `simpleclans.member.lookup` | Может посмотреть информацию о себе |
| `simpleclans.member.profile` | Может посмотреть информацию о своём клане |
| `simpleclans.member.resign` | Может покинуть свой клан |
| `simpleclans.member.roster` | Может посмотреть список участников его клана |
| `simpleclans.member.stats` | Может посмотреть статистику его клана |
| `simpleclans.member.vitals` | Может посмотреть боеспособность его клана |
| `simpleclans.member.toggle.bb` | Может переключать видимость доски объявлений при входе в игру |
| `simpleclans.member.tag-toggle` | Может скрыть или показать клан тег |
| `simpleclans.member.fee-check` | Позволяет проверить включена ли комиссия и узнать её размер |
| `simpleclans.member.bypass-fee` | Может обойти комиссию участника |
| `simpleclans.member.land` | Может использовать команду land |
| `simpleclans.member.land.allow.container` | Может разрешить действие container |
| `simpleclans.member.land.allow.place` | Может разрешить действие place |
| `simpleclans.member.land.allow.break` | Может разрешить действие break |
| `simpleclans.member.land.allow.damage` | Может разрешить действие damage |
| `simpleclans.member.land.allow.interact` | Может разрешить действие interact |
| `simpleclans.member.land.allow.interact_entity` | Может разрешить действие interact\_entity |
| `simpleclans.member.land.block.container` | Может заблокировать действие container |
| `simpleclans.member.land.block.place` | Может заблокировать действие place |
| `simpleclans.member.land.block.damage` | Может заблокировать действие damage |
| `simpleclans.member.land.block.break` | Может заблокировать действие break |
| `simpleclans.member.land.block.interact` | Может заблокировать действие interact |
| `simpleclans.member.land.block.interact_entity` | Может заблокировать действие interact\_entity |
| Permission | Description |
| :--- | :--- |
| `simpleclans.leader.fee` | allows the user to toggle the fee and set its value |
| `simpleclans.leader.ally` | Can ally his clan with other clans |
| `simpleclans.leader.create` | Can create clans |
| `simpleclans.leader.verify` | Can verify their clan |
| `simpleclans.leader.demote` | Can demote clan leaders to normal players |
| `simpleclans.leader.disband` | Can disband his own clan |
| `simpleclans.leader.ff` | Can toggle his clan's friendly fire |
| `simpleclans.leader.home-set` | Can set home base |
| `simpleclans.leader.regroup.me` | Can teleport the entire clan to themself |
| `simpleclans.leader.regroup.home` | Can teleport the entire clan to homebase |
| `simpleclans.leader.invite` | Can invite players into his clan |
| `simpleclans.leader.kick` | Can kick players form his clan |
| `simpleclans.leader.modtag` | Can modify his clan's tag |
| `simpleclans.leader.description` | Can modify their clan's description |
| `simpleclans.leader.coloredtag` | Can use color codes in tags |
| `simpleclans.leader.coloredrank` | Can use color codes in rank display names |
| `simpleclans.leader.promotable` | Can be promoted to clan leader |
| `simpleclans.leader.promote` | Can promote players to clan leaders |
| `simpleclans.leader.rank.assign` | Can assign a rank to a user |
| `simpleclans.leader.rank.unassign` | Can unassign a player from a rank |
| `simpleclans.leader.rank.create` | Can create a new rank |
| `simpleclans.leader.rank.delete` | Can delete a new rank |
| `simpleclans.leader.rank.list` | Can list all the ranks |
| `simpleclans.leader.rank.setdisplayname` | Can set the display name of the rank |
| `simpleclans.leader.rank.permissions.add` | Can add permissions to a rank |
| `simpleclans.leader.rank.permissions.available` | Can list all available permissions |
| `simpleclans.leader.rank.permissions.list` | Can list the rank's permissions |
| `simpleclans.leader.rank.permissions.remove` | Can remove permissions from a rank |
| `simpleclans.leader.rival` | Can start a rivalry with another clan |
| `simpleclans.leader.settrust` | Can set trust levels for members |
| `simpleclans.leader.war` | Can start wars |
| `simpleclans.leader.setbanner` | Can set his clan's banner |
| `simpleclans.leader.withdraw-toggle:` | Can toggle clan bank withdraw |
| `simpleclans.leader.deposit-toggle:` | Can toggle clan bank deposit |
| `simpleclans.leader.bb-clear` | Clan clear their clan's bb |
### Разрешения лидеров
### Mod Nodes
| Право | Описание |
| ----------------------------------------------- | ----------------------------------------------------------------------- |
| `simpleclans.leader.fee` | Разрешает переключать комиссию клана и изменять её размер |
| `simpleclans.leader.ally` | Может иметь союз с другим кланом |
| `simpleclans.leader.create` | Может создавать кланы |
| `simpleclans.leader.verify` | Может подать заявку на подтверждение собственного клана |
| `simpleclans.leader.demote` | Может понизить лидера до участника |
| `simpleclans.leader.disband` | Может расформировать собственный клан |
| `simpleclans.leader.ff` | Может переключать "огонь по своим" у собственного клана |
| `simpleclans.leader.home-set` | Может установить точку базы клана |
| `simpleclans.leader.regroup.me` | Может перегруппировать (телепортировать ) весь клан к себе |
| `simpleclans.leader.regroup.home` | Может перегруппировать (телепортировать ) весь клан на точку базы клана |
| `simpleclans.leader.invite` | Может приглашать игроков в собственный клан |
| `simpleclans.leader.kick` | Может выгнать (кикнуть) игроков с собственного клана |
| `simpleclans.leader.modtag` | Может изменять тег собственного клана |
| `simpleclans.leader.description` | Может изменять описание собственного клана |
| `simpleclans.leader.coloredtag` | Может использовать цветовые коды в тегах |
| `simpleclans.leader.coloredrank` | Может использовать цветовые коды в отобр. имени ранга |
| `simpleclans.leader.promotable` | Может быть повышен до лидера клана |
| `simpleclans.leader.promote` | Может повысить участника до лидера клана |
| `simpleclans.leader.rank.assign` | Может назначить участнику ранг |
| `simpleclans.leader.rank.unassign` | Может забрать ранг у участника |
| `simpleclans.leader.rank.create` | Может создать новый ранг |
| `simpleclans.leader.rank.delete` | Может удалить существующий ранг |
| `simpleclans.leader.rank.list` | Может посмотреть список рангов |
| `simpleclans.leader.rank.setdisplayname` | Может устанавливать отобр. имя ранга |
| `simpleclans.leader.rank.permissions.add` | Может добавить право к рангу |
| `simpleclans.leader.rank.permissions.available` | Может посмотреть список доступных прав рангов |
| `simpleclans.leader.rank.permissions.list` | Может посмотреть список прав рангов |
| `simpleclans.leader.rank.permissions.remove` | Может удалить права у ранга |
| `simpleclans.leader.rival` | Может начать вражду с другими кланами |
| `simpleclans.leader.settrust` | Может устанавливать уровень доверия участникам |
| `simpleclans.leader.war` | Может начать войну |
| `simpleclans.leader.setbanner` | Может устанавливать баннер собственного клана |
| `simpleclans.leader.withdraw-toggle` | Может переключать вывод клана |
| `simpleclans.leader.deposit-toggle` | Может переключать взнос клана |
| `simpleclans.leader.bb-clear` | Может очистить доску объявлений собственного клана |
| Permission | Description |
| :--- | :--- |
| `simpleclans.mod.ban` | Can ban players from the entire plugin |
| `simpleclans.mod.bypass` | Can bypass restrictions |
| `simpleclans.mod.disband` | Can disband any clan |
| `simpleclans.mod.globalff` | Can turn off global friendly fire protection |
| `simpleclans.mod.home` | Can set other clan's home |
| `simpleclans.mod.hometp` | Can teleport to all clans homes |
| `simpleclans.mod.staffgui` | Can open the staff GUI |
| `simpleclans.mod.place` | Can manually place players in clans |
| `simpleclans.mod.keep-items` | Can keep items when teleporting home |
| `simpleclans.mod.mostkilled` | Can view his and other's clans mostkilled |
| `simpleclans.mod.nopvpinwar` | Can bypass PvP in wars |
| `simpleclans.mod.unban` | Can unban players from the entire plugin |
| `simpleclans.mod.verify` | Can verify clans |
### Разрешения модераторов
### Admin Nodes
| Право | Описание |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `simpleclans.mod.ban` | Может заблокировать игрока от использования команд плагина |
| `simpleclans.mod.bypass` | Может обойти любые ограничения |
| `simpleclans.mod.disband` | Может расформировать любой клан |
| `simpleclans.mod.globalff` | Может выключить глобальный параметр "огонь по своим" |
| `simpleclans.mod.home` | Может ставить точку базы любому клану |
| `simpleclans.mod.hometp` | Может телепортироваться на точку базы любого клана |
| `simpleclans.mod.staffgui` | Может открыть меню администратора |
| `simpleclans.mod.place` | Может перемещать вручную игроков из одного клана в другой |
| `simpleclans.mod.keep-items` | При перемещении на точку дома **не** выбрасывает вещи из [drop-items](https://simpleclans.gitbook.io/simpleclans/how-to-setup/configuration#general-settings). |
| `simpleclans.mod.mostkilled` | Может посмотреть список наибольших убийств у любого клана |
| `simpleclans.mod.nopvpinwar` | Может обойти PvP разрешение в войнах |
| `simpleclans.mod.unban` | Может разблокировать игрока от использования команд плагина |
| `simpleclans.mod.verify` | Может подтвердить клан |
| Permission | Description |
| :--- | :--- |
| `simpleclans.admin.resetkdr` | Can reset a player's or everyone's KDR |
| `simpleclans.admin.purge` | Can purge a player |
| `simpleclans.admin.demote` | Can demote a player back to member |
| `simpleclans.admin.promote` | Can promote players to clan leaders |
| `simpleclans.admin.all-seeing-eye` | Can see all clan chats |
| `simpleclans.admin.reload` | Can reload configuration |
### Разрешешения администраторов
### Other Nodes
| Право | Описание |
| ---------------------------------- | ----------------------------------------- |
| `simpleclans.admin.resetkdr` | Может очистить KDR любого игрока |
| `simpleclans.admin.purge` | Может очистить данные об игроке |
| `simpleclans.admin.demote` | Может понизить игрока до участника |
| `simpleclans.admin.promote` | Может повышать игроков до лидера |
| `simpleclans.admin.all-seeing-eye` | Может читать чаты всех кланов |
| `simpleclans.admin.reload` | Может перезагрузить конфигурацию |
| `simpleclans.admin.permanent` | Позволяет переключить перманентный статус |
| `simpleclans.admin.bank.status` | Позволяет проверить баланс клана |
| `simpleclans.admin.bank.take` | Позволяет забрать деньги из баланса клана |
| `simpleclans.admin.bank.give` | Позволяет выдать деньги в баланс клана |
| `simpleclans.admin.bank.set` | Позволяет установить баланс клана |
| Permission | Node |
| :--- | :--- |
| `simpleclans.other.kdr-exempt` | The player's KDR is not affected on killing/dying \(check Known Issues\) |
| `simpleclans.vip.resetkdr` | Can reset their KDR |
### Другие разрешения
| Право | Описание |
| ------------------------------ | ----------------------------------------------------------------------------- |
| `simpleclans.other.kdr-exempt` | KDR игрока не будет изменяться из-за смерти/убийства (см. известные проблемы) |
| `simpleclans.vip.resetkdr` | Может очистить собственный KDR |
@@ -0,0 +1,21 @@
# 👍 Подтвержденные кланы
## Что это?
<mark style="color:red;">Подтвержденный клан</mark> – это такой клан, который предоставляет больше возможностей для своих участников.
Когда кто-то создаёт клан, в большинстве случаев достаточно лишь _базовых_ команд: выход из клана, приглашение игроков в клан, кик игроков из клана и так далее. Такой тип кланов называется <mark style="color:red;">не подтвержденный</mark>.&#x20;
## Где я могу узнать все возможности?
Вы можете посмотреть все команды подтвержденного статуса на странице с [командами](commands.md).
## Только подтвержденный клан
Предположим, вы хотите сделать, чтобы у вас были только подтвержденные кланы.\
К счастью для вас, SimpleClans позволяет вам это сделать. Просто установите следующую настройку на `false` в конфигурации плагина.&#x20;
```yaml
settings:
new-clan-verification-required: false
```
@@ -0,0 +1,64 @@
# ⌛ Постоянные кланы
## Что это?
Обычно, когда вы создаете какой-либо клан, требуется, чтобы в нем был хотя бы 1 игрок. Но иногда нужно иметь <mark style="color:red;">пустой клан</mark>, верно? Именно этим и занимаются <mark style="color:red;">постоянные кланы</mark>.&#x20;
## Где это может быть полезно?
На самом деле, здесь можно привести достаточно много идей, например:
* Вы хотите продавать кланы на своем сервере, но по каким-то причинам не хотите назначать лидера в этот клан.
* Вы хотите переместить последнего игрока одного клана в другой клан.
* Клан для администраторов: легко вступить и выйти.
* Кланы для RPG сервера.
* И так далее...
## Конкретные примеры
#### Использование постоянных кланов с DeluxeMenus
![Меню, чтобы присоединиться в какой-либо клан](../.gitbook/assets/Permanent-Clans-DeluxeMenus.png)
Пример YAML:
```yaml
items:
'jedi_clan':
material: diamond_block
slot: 5
display_name: "&7Join to &aJedi"
left_click_commands:
- '[console] clan mod place %player_name% jedi'
- '[close]'
```
#### Использование постоянных кланов с Citizens
В качестве альтернативного варианта, вы можете присоединить игроков через NPC:
![](../.gitbook/assets/Permanent-Clans-Citizens.png)
Чтобы это сделать, нужно:
1. Создать NPC: `/npc create <`имя`>`
2. Добавить команду к NPC: `/npc command add clan -o mod place <p> jedi`
## Как использовать постоянные кланы?
Вы можете использовать `/clan admin permanent [clan]` команду для выдачи постоянного статуса клану.
![После вызова команды на каком-нибудь клане](../.gitbook/assets/Permanent-Clans-Command-Usage.png)
{% hint style="danger" %}
**Внимание**
Постоянные кланы не удаляются со временем и не могут быть расформированы игроком. Для удаления используйте: `/clan mod disband`
{% endhint %}
{% hint style="info" %}
**Заметка**
Эта команда (`/clan mod disband)` доступна только администраторам или если у вас имеется разрешение: `simpleclans.admin.permanent` .
{% endhint %}
@@ -1,84 +1,79 @@
---
description: null
---
# 🏅 Ранги с разрешениями
# Ranks with Permissions
## Как это работает?
## How does it work?
Лидеры кланов могут создавать и назначать ранги своим соклановцам. Если `/clan trust` выдаёт [почти все](https://github.com/RoinujNosde/SimpleClans/blob/52ff77e6c105810466d45306a8c5982a858610f5/src/main/java/net/sacredlabyrinth/phaed/simpleclans/RankPermission.java#L13) разрешения, то ранг может содержать как все, так и некоторые из них.
Leaders have the ability to create ranks and give them permissions to perform several actions inside the clan. Unlike `/clan trust`, ranks with permissions allows leaders to have a finer control of who can do what. Ex.: A rank can handle invites \(`invite` permission\), another takes care of moderation \(`kick` permission\), etc
## Рекомендуемые ранги
## Suggested ranks
| Ранг | Описание | Права |
| ---------------------- | --------------------------------------- | :-----------------------------------------------------------------------------------------: |
| **Заместитель лидера** | Заботится о клане, пока нет лидера | `all` |
| **Казначей** | Управляет балансом клана | `bank.balance`, `bank.deposit`, `bank.withdraw` |
| **Посол** | Отвечает за отношения с другими кланами | `ally.chat`, `ally.add`, `ally.remove`, `rival.add`, `rival.remove`, `war.end`, `war.start` |
| **Новобранец** | Участник клана | `stats`, `kills`, `mostkilled`, `rank.list` |
| Ranks | Description | Permission |
| :--- | :--- | :---: |
| **Coleader** | Helps take care of the clan | `all` |
| **Treasurer** | Manages the clan's bank account | `bank.balance`, `bank.deposit`, `bank.withdraw` |
| **Ambassador** | Manages the clan's relations with other clans | `ally.chat`, `ally.add`, `ally.remove`, `rival.add`, `rival.remove`, `war.end`, `war.start` |
| **Recruit** | A member in trial | `stats`, `kills`, `mostkilled`, `rank.list` |
## Команды рангов
## Ranks Commands
| Команда | Описание |
| ----------------------------------------------- | ------------------------------------------------------------------------------- |
| `/clan rank create` | Создать ранг с заданным именем |
| `/clan rank setdisplayname [ранг] [отобр. имя]` | Установить отображаемое имя ранга (Может быть длиннее чем одно слово и цветным) |
| `/clan rank assign (игрок) (ранг)` | Назначить ранг участнику |
| `/clan rank unassign (игрок)` | Убрать ранг у участника |
| `/clan rank delete (ранг)` | Удалить ранг |
| `/clan rank list` | Список рангов клана |
| `/clan rank permissions` | Список доступных прав рангов |
| `/clan rank permissions (ранг)` | Список прав рангов |
| `/clan rank permissions add (ранг) (право)` | Добавить право к рангу |
| `/clan rank permissions remove (ранг) (право)` | Удалить право у ранга |
| Command | Description |
| :--- | :--- |
| `/clan rank create` | Creates a rank with this name |
| `/clan rank setdisplayname [rank] [displayname]` | Sets the display name of the rank \(it can be more than one word and colored\) |
| `/clan rank assign (player) (rank)` | Assigns a user to a rank |
| `/clan rank unassign (player)` | Unassigns a user from a rank |
| `/clan rank delete (rank)` | Deletes a rank |
| `/clan rank list` | Lists the clan's ranks |
| `/clan rank permissions` | Lists the available permissions for ranks |
| `/clan rank permissions (rank)` | Lists the rank's permissions |
| `/clan rank permissions add (rank) (permission)` | Adds a permission to the rank |
| `/clan rank permissions remove (rank) (permission)` | Removes a permission from the rank |
## Доступные права для рангов
## Available permissions for ranks
Игрок может посмотреть эти права в игре: `/clan rank permissions`
A player can view those permissions in-game using `/clan rank permissions`
| Право ранга | Описание |
| ------------------ | -------------------------------------------------------------------- |
| `ally.add` | Может добавлять союзников |
| `ally.remove` | Может удалять союзников |
| `ally.chat` | Может использовать клановый чат |
| `bank.balance` | Может посмотреть баланс клана |
| `bank.deposit` | Может вносить деньги в банк клана |
| `bank.withdraw` | Может выводить деньги из банка клана |
| `bb.add` | Может добавить сообщение на доске объявлений |
| `bb.clear` | Может очистить доску объявлений |
| `coords` | Может посмотреть координаты клана |
| `fee.enable` | Может включить комиссию участника |
| `fee.set` | Может изменить размер комиссии |
| `home.regroup` | Может перегруппировать (телепортировать) участников клана |
| `home.set` | Может поставить точку базы клана |
| `home.tp` | Может телепортироваться на точку базы клана |
| `invite` | Может приглашать кого-либо в клан |
| `kick` | Может кикнуть кого-либо из клана |
| `modtag` | Может изменять тег клана |
| `rank.displayname` | Может изменять отображаемое имя рангов |
| `rank.list` | Может посмотреть список рангов клана |
| `rival.add` | Может добавить противника |
| `rival.remove` | Может удалить противника |
| `war.end` | Может окончить войну |
| `war.start` | Может начать войну |
| `vitals` | Может посмотреть боеспособность клана |
| `stats` | Может посмотреть статистику клана |
| `kills` | Может посмотреть убийства его или других |
| `mostkilled` | Может посмотреть список участников по наибольшему количеству убийств |
| `description` | Может изменять описание клана |
| Rank Permission | Description |
| :--- | :--- |
| `ally.add` | can add an ally |
| `ally.remove` | can remove an ally |
| `ally.chat` | can use ally chat |
| `bank.balance` | can view the bank balance |
| `bank.deposit` | can deposit money |
| `bank.withdraw` | can withdraw money |
| `bb.add` | can add a message to bb |
| `bb.clear` | can clear the bb |
| `coords` | can view the clan's coords |
| `fee.enable` | can enable the member fee |
| `fee.set` | can change the fee value |
| `home.regroup` | can regroup the clan |
| `home.set` | can set the clan home |
| `home.tp` | can tp to the clan home |
| `invite` | can invite someone to the clan |
| `kick` | can kick someone from the clan |
| `modtag` | can modify the clan tag |
| `rank.displayname` | can modify a rank's display name |
| `rank.list` | can list the ranks |
| `rival.add` | can add a rival |
| `rival.remove` | can remove a rival |
| `war.end` | can end a war |
| `war.start` | can start a war |
| `vitals` | can view the clan's vitals |
| `stats` | can view the clan's stats |
| `kills` | can view his or other's kills |
| `mostkilled` | can view the mostkilled |
| `description` | can change the clan's description |
## Permissions to use the rank commands
| Permission | Description |
| :--- | :--- |
| `simpleclans.leader.rank.assign` | Can assign a rank to a user |
| `simpleclans.leader.rank.unassign` | Can unassign a player from a rank |
| `simpleclans.leader.rank.create` | Can create a new rank |
| `simpleclans.leader.rank.delete` | Can delete a new rank |
| `simpleclans.leader.rank.list` | Can list all the ranks |
| `simpleclans.leader.rank.setdisplayname` | Can set the display name of the rank |
| `simpleclans.leader.rank.permissions.add` | Can add permissions to a rank |
| `simpleclans.leader.rank.permissions.available` | Can list all available permissions |
| `simpleclans.leader.rank.permissions.list` | Can list the rank's permissions |
| `simpleclans.leader.rank.permissions.remove` | Can remove permissions from a rank |
## Права для использования команды рангов
| Право | Описание |
| ----------------------------------------------- | -------------------------------------------- |
| `simpleclans.leader.rank.assign` | Может назначить ранг участнику |
| `simpleclans.leader.rank.unassign` | Может убрать ранг у участника |
| `simpleclans.leader.rank.create` | Может создать новый ранг |
| `simpleclans.leader.rank.delete` | Может удалить новый ранг |
| `simpleclans.leader.rank.list` | Может посмотреть список всех рангов |
| `simpleclans.leader.rank.setdisplayname` | Может устанавливать отображаемое имя ранга |
| `simpleclans.leader.rank.permissions.add` | Может добавлять права рангу |
| `simpleclans.leader.rank.permissions.available` | Может посмотреть список доступных прав ранга |
| `simpleclans.leader.rank.permissions.list` | Может посмотреть список прав ранга |
| `simpleclans.leader.rank.permissions.remove` | Может удалить право у ранга |
+9 -14
View File
@@ -1,17 +1,13 @@
---
description: null
---
# 👇 Клан под ником игрока
# Clan Below Player's Name
## Plugins needed
## Необходимые плагины
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)
* [TAB](https://www.spigotmc.org/resources/tab-1-5-x-1-15-x-free-version.57806/) \(you can use a different tablist plugin, as long as it supports PlaceholderAPI\)
* [TAB](https://www.spigotmc.org/resources/tab-1-5-x-1-15-x-free-version.57806/) (Вы можете использовать и другие плагины на таб, если он поддерживает PlaceholderAPI)
## Step by step
## Пошагово
1. Open TAB's config and edit the Groups section adding `%simpleclans_clan_color_tag%` to `belowname`:
1\. Откройте конфиг TAB и измените раздел groups, добавив %simpleclans\_clan\_color\_tag% к blowname:
{% code title="Example:" %}
```yaml
@@ -26,13 +22,12 @@ _OTHER_:
```
{% endcode %}
2. Find the option `belowname` or `classic-vanilla-belowname` and disable it.
2\. Найдите параметр `belowname` или `classic-vanilla-belowname` и выключите его.
3. Find the option `unlimited-nametag-prefix-suffix-mode` and enable it.
3\. Найдите параметр `unlimited-nametag-prefix-suffix-mode` и включите его.
4. Restart \(or reload\) and enjoy!
4\. Перезапустите сервер (или перезагрузите конфиг `/tab reload`) и наслаждайтесь!
## Screenshot
## Скриншот
![](../.gitbook/assets/clans-below-name.png)
+11 -20
View File
@@ -1,34 +1,25 @@
---
description: null
---
# ☝ Клан в табе
# Clan on Tablist
## Необходимые плагины
## Plugins needed
Вы вправе использовать и другие плагины, изменяющие таб, если они поддерживают PlaceholderAPI.
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)
* [PlayerListPlus](https://www.spigotmc.org/resources/%E2%99%9B-playerlistplus-%E2%99%9B-1-8-1-14-3-tablist-editor.55878/) \(you can use a different tablist plugin, as long as it supports PlaceholderAPI\)
* [TAB](https://www.spigotmc.org/resources/tab-1-7-x-1-16-5-free-version.57806/)
## Step by step
## Пошагово
1. Open PlayerListPlus config and edit the formats adding `%simpleclans_clan_color_tag%`:
1\. Откройте `groups.yml` файл в TAB и измените формат таба для всех, добавив`%simpleclans_clan_color_tag%`:
{% code title="Example:" %}
{% code title="Пример:" %}
```yaml
slot-items:
# This slot items will shows all players
PLAYERS:
format: "%simpleclans_clan_color_tag%&c.$displayname"
type: PLAYER_LIST
hidevanished: true
ping: true
skin: true
_DEFAULT_:
tabprefix: "%simpleclans_clan_color_tag%%vault-prefix% "
```
{% endcode %}
2. Restart \(or reload\) and enjoy!
2\. Перезапустите сервер (или перезагрузите конфиг: `/tab reload`) и наслаждайтесь!
## Screenshot
## Скриншот
![](../.gitbook/assets/clans-tablist.png)
+198 -228
View File
@@ -1,48 +1,43 @@
---
description: null
---
# 📘 Конфигурация
# Configuration
[Главный конфигурационный файл для SimpleClans можно найти здесь.](https://github.com/RoinujNosde/SimpleClans/blob/master/src/main/resources/config.yml)
[The main configuration file for SimpleClans can be found here.](https://github.com/RoinujNosde/SimpleClans/blob/master/src/main/resources/config.yml)
## Главные настройки
## General Settings
| Опция | Описание | По умолчанию |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| `enable-gui` | Включить GUI | `true` |
| `disable-messages` | Отключить такие оповещения, как "Клан создан", "Клан расформирован", и другие | `false` |
| `tameable-mobs-sharing` | Если включено, то приручаемые мобы будут поделены с участниками вашего клана. Также отключает любой клановый урон, наносимый по ним | `false` |
| `teleport-blocks` | Мягкое телепортирование (блок стекла под ногами) | `false` |
| `teleport-home-on-spawn` | При возрождении игроки будут телепортированы на базу клана | <p><code>false</code><br></p> |
| `drop-items-on-clan-home` | При телепортации на базу клана, выкидывать предметы на землю | `false` |
| `keep-items-on-clan-hom` | При телепортации на базу клана, оставлять предметы | <p><code>false</code><br><br></p> |
| `item-list` | Список предметов. Используется в связке с `keep-items-on-clan-home` и `drop-items-on-clan-home` | <p><code>[]</code><br></p> |
| `show-debug-info` | Показать отладочную информацию в консоли | `false` |
| `enable-auto-groups` | <p>Управляет группами автоматически. При условии, что у вас есть LuckPerms, а в ней создана любая из следующих групп:</p><ul><li>sc_leader</li><li>sc_trusted</li><li>sc_untrusted</li></ul><p>Будет автоматически закидывать игроков в эту группу</p> | <p><code>false</code><br><br></p> |
| `chat-compatibility-mode` | Режим совместимости с чатом. Если у вас есть какие-либо проблемы с чатом, попробуйте выключить этот параметр | `true` |
| `rival-limit-percent` | <p>Процент возможных соперников на клан.</p><p>Форумула: <code>(rivalsOfClan - 1) * rivalLimitPercent / 100</code></p> | <p><br><br><code>50</code><br></p> |
| `use-colorcode-from-prefix-for-name` | Использовать последний цветовой код в конце префикса | <p><code>true</code><br></p> |
| `display-chat-tags` | Отображать тег клана в чате | `true` |
| `unrivable-clans` | Список кланов, с которыми невозможно начать вражду | `[]` |
| `show-unverified-on-list` | Показывать **не** подтерждённые кланы в `/clan list` | `false` |
| `blacklisted-worlds` | Список миров, где SimpleClans не будет работать | `[]` |
| `banned-players` | Список игроков, которые не могут пользоваться командами плагина | <p><code>[]</code><br></p> |
| `disallowed-tags` | Список запрещенных тегов | `[]` |
| `language` | Язык по умолчанию | <p><code>en</code><br></p> |
| `user-language-selector` | Позволяет игрокам менять их язык | `true` |
| `disallowed-tag-colors` | Список запрещенных цветовых кодов для тега | <p><code>[]</code><br></p> |
| `server-name` | Название вашего сервера | `&4SimpleClans` |
| `new-clan-verification-require` | Должны ли новые кланы проходить верификацию? | `true` |
| `allow-regroup-command` | Разрешить ли команду для перегруппировки (телепортации игроков к себе/на базу) | <p><code>true</code><br></p> |
| `allow-reset-kdr` | <p>Разрешить сброс КДР <br>(соотношение убийств к смертям)</p> | `true` |
| `rejoin-cooldown` | Время в минутах, когда игрок сможет присоединиться к клану после выхода из него. | `60` |
| `rejoin-cooldown-enabled` | Должен ли быть включен таймер пере-присоединения включен? | `false` |
| `min-to-verify` | <p>Количество игроков в клане, чтобы можно было пройти подтверждение </p><p>(Модераторы могут обойти это ограничение)</p> | |
| `ranking-type` | <p></p><p>Допустимые параметры: ORDINAL или DENSE</p><ul><li><code>DENSE</code>: Если у игроков будет одинаковый KDR, их ранговая позиция будет одинаковой. Пример: 12234</li><li><code>ORDINAL</code>: Каждый игрок будет иметь разную ранговую позицию. <br>Пример: 12345</li></ul> | `DENSE` |
* `enable-gui` - Enables the GUI.
* `disable-messages` - This will disable broadcasts from the plugin such as "Clan created", "Clan disbanded", etc.
* `tameable-mobs-sharing` -
* `teleport-blocks` -
* `teleport-home-on-spawn` - Players will be teleported to their clan's home when they respawn.
* `drop-items-on-clan-home` -
* `keep-items-on-clan-home` -
* `item-list` -
* `show-debug-info` -
* `mchat-integration` -
* `enable-auto-groups` -
* `chat-compatibility-mode` -
* `rival-limit-percent` -
* `use-colorcode-from-prefix-for-name` -
* `display-chat-tags` -
* `unrivable-clans` -
* `show-unverified-on-list` -
* `blacklisted-worlds` -
* `banned-players` -
* `disallowed-tags` -
* `language` -
* `language-per-player` -
* `disallowed-tag-colors` -
* `server-name` -
* `new-clan-verification-required` -
* `allow-regroup-command` -
* `allow-reset-kdr` -
* `rejoin-cooldown` -
* `rejoin-cooldown-enabled` -
* `min-to-verify` - The clan must have this amount of members to get verified \(moderators can bypass this\)
* `ranking-type` - Valid options: ORDINAL and DENSE
* `DENSE`: if players have the same KDR, they will have the same rank position. Ex.: 12234
* `ORDINAL`: Every player will have a different rank position. Ex.: 12345
#### Example
### Пример
```yaml
settings:
@@ -85,22 +80,22 @@ settings:
ranking-type: DENSE
```
## Tags Format
## Формат тегов
#### Example
#### Пример
* `default-color` -
* `max-length` -
* `bracket` -
* `color` -
* `leader-color` -
* `left` -
* `right` -
* `min-length` -
* `separator` -
* `color` -
* `leader-color` -
* `char` -
* `default-color` - Цвет по-умолчанию
* `max-length` - Максимальная длинна
* `bracket` - Скобки
* `color` - Цвет
* `leader-color` - Цвет лидера
* `left` - Слева
* `right` - Справа
* `min-length` - Минимальная длина
* `separator` - Разделитель
* `color` - Цвет
* `leader-color` - Цвет лидера
* `char` - Символ
```yaml
tag:
@@ -118,18 +113,11 @@ tag:
char: ' .'
```
## General Commands
## Основные команды
* `more` -
* `ally` -
* `clan` -
* `accept` -
* `deny` -
* `global` -
* `clan_chat` -
* `force-priority` -
В этой секции вы можете редактировать команды плагина. Если какой-то другой плагин уже занимает эти команды, включение `force-priority` на `true` должно помочь.
#### Example
#### Пример
```yaml
commands:
@@ -138,19 +126,19 @@ commands:
clan: clan
accept: accept
deny: deny
global: global
global: global # Удаленная опция, в новых версиях не встретите.
clan_chat: "."
force-priority: true
```
## KDR Grinding Prevention
## Защита от набивания KDR
* `enable-max-kills` -
* `max-kills-per-victim` -
* `enable-kill-delay` -
* `delay-between-kills` -
* `enable-max-kills` - Включить максимальное количество убийств
* `max-kills-per-victim` - Максимальное количество убийств за жертву
* `enable-kill-delay` - Включить задержку перед убийствами
* `delay-between-kills` - Задержка перед убийствами
#### Example
#### Пример
```yaml
kdr-grinding-prevention:
@@ -160,61 +148,36 @@ kdr-grinding-prevention:
delay-between-kills: 5
```
## List Commands
## Экономика
* `size` -
* `kdr` -
* `name` -
* `founded` -
* `active` -
* `asc` -
* `desc` -
* `default` -
* `creation-price` - Цена создания клана&#x20;
* `purchase-clan-create` - Брать ли денги за создание клана?
* `verification-price` - Цена подтверждения
* `purchase-clan-verify` - Брать ли денги за подтверждение клана?
* `invite-price` - Цена приглашения
* `purchase-clan-invite` - Брать ли денги за приглашение в клан?
* `home-teleport-price` - Цена телепортации на базу клана
* `purchase-home-teleport` - Брать ли денги за телепорт на базу клана?
* `home-teleport-set-price` - Цена установки точки базы клана
* `purchase-home-teleport-set` - Брать ли денги за установку точки базы клана?
* `home-regroup-price` - Цена перегруппировки на точку базы клана
* `purchase-home-regroup` - Брать ли денги за перегруппировку на точку базы клана?
* `unique-tax-on-regroup` - Если `false`, цена умножается на количество онлайн-членов клана.
* `issuer-pays-regroup` - Брать ли деньги с того, кто вызвал перегруппировку?
* `money-per-kill` - Награждать ли игроков за убийство?
* `money-per-kill-kdr-multipier` - Множитель убийства.
* `purchase-reset-kdr` - Брать ли денги за сброс KDR?
* `reset-kdr-price` - Цена сброса KDR.
* `purchase-member-fee-set` - Брать ли денги за перегруппировку на точку базы клана
* `member-fee-set-price` - Комиссия на участников.
* `member-fee-enabled` - Включить ли комиссию на участников?
* `max-member-fee` - Максимальная комиссия участников.
* `upkeep` - Коммисия на поддержание клана.
* `upkeep-enabled` - Включить ли комиссию на содержание клана?
* `multiply-upkeep-by-clan-size` - Должна ли комиссия на содержание зависеть от количества участников в клане?
* `charge-upkeep-only-if-member-fee-enabled` - Должна ли комиссия на содержание быть взята только у тех, кто её включил?
#### Example
```yaml
list:
size: size
kdr: kdr
name: name
founded: founded
active: active
asc: asc
desc: desc
default: kdr
```
## Economy
* `creation-price` -
* `purchase-clan-create` -
* `verification-price` -
* `purchase-clan-verify` -
* `invite-price` -
* `purchase-clan-invite` -
* `home-teleport-price` -
* `purchase-home-teleport` -
* `home-teleport-set-price` -
* `purchase-home-teleport-set` -
* `home-regroup-price` -
* `purchase-home-regroup` -
* `unique-tax-on-regroup` -
* `issuer-pays-regroup` -
* `money-per-kill` -
* `money-per-kill-kdr-multipier` -
* `purchase-reset-kdr` -
* `reset-kdr-price` -
* `purchase-member-fee-set` -
* `member-fee-set-price` -
* `member-fee-enabled` -
* `max-member-fee` -
* `upkeep` -
* `upkeep-enabled` -
* `multiply-upkeep-by-clan-size` -
* `charge-upkeep-only-if-member-fee-enabled` -
#### Example
#### Пример
```yaml
economy:
@@ -246,41 +209,40 @@ economy:
charge-upkeep-only-if-member-fee-enabled: true
```
## Kill Weights
## Вес убийств
* `rival` -
* `civilian` -
* `neutral` -
* `deny-same-ip-kills` -
Здесь вы можете установить вес каждого типа убийства. Вес также может быть отрицательным. Он используется для вычисления KDR следующим образом: \
`(Количество убийств * вес убийства) / Количество смертей = KDR`
#### Example
#### Пример
```yaml
kill-weights:
rival: 2.0
civilian: 0.0
neutral: 1.0
deny-same-ip-kills: false
rival: 2.0 # соперник/противник
civilian: 0.0 # мирный/без клана
neutral: 1.0 # нейтральный
deny-same-ip-kills: false # Отменять убийства с одного айпи адреса
```
## Clan Settings
## Настройки клана&#x20;
* `homebase-teleport-wait-secs` -
* `homebase-can-be-set-only-once` -
* `min-size-to-set-rival` -
* `max-length` -
* `max-description-length` -
* `min-description-length` -
* `max-members` -
* `confirmation-for-promote` -
* `trust-members-by-default` -
* `confirmation-for-demote` -
* `percentage-online-to-demote` -
* `ff-on-by-default` -
* `min-length` -
* `min-size-to-set-ally` -
* `homebase-teleport-wait-secs` - Задержка перед телепортацией на точку базы клана
* `homebase-can-be-set-only-once` - Точка базы клана может быть установлена единожды
* `min-size-to-set-rival` - Минимальное количество участников клана для добавления соперников
* `max-length` - Максимальная длина названия клана.
* `max-description-length` - Максимальная длина описания клана
* `min-description-length` - Минимальная длина описания клана.
* `max-members` - Максимальное количество участников
* `confirmation-for-promote` - Должны ли другие лидеры подтвердить повышение участника?
* `trust-members-by-default` - Подтверждать участников по умолчанию?
* `confirmation-for-demote` - Должны ли другие лидеры подтвердить понижение участника?
* `percentage-online-to-demote` - Процент лидеров онлайн для понижения.
* `ff-on-by-default` - Глобальный "Огонь по своим" включен по умолчанию.
* `min-length` - Минимальная длина названия клана.
* `min-size-to-set-ally` - Минимальное количество участников клана для добавления союзников.
* `min-to-verify` - Клан должен иметь следующее число участников, чтобы подтвердить свой клан (модераторы могут обойти это)
#### Example
#### Пример
```yaml
clan:
@@ -300,19 +262,19 @@ clan:
min-size-to-set-ally: 3
```
## Tasks
## Запланированные задачи
* `collect-upkeep` -
* `hour` -
* `minute` -
* `collect-upkeep-warning` -
* `hour` -
* `minute` -
* `collect-fee` -
* `hour` -
* `minute` -
* `collect-upkeep` - Сбор комиссии на содержание клана
* `hour` - час
* `minute` - минуты
* `collect-upkeep-warning` - Предупреждение о сборе комисии на поддержание клана
* `hour` - час&#x20;
* `minute` - минуты&#x20;
* `collect-fee` - Сбор комиссии
* `hour` - час
* `minute` - минуты
#### Example
#### Пример
```yaml
tasks:
@@ -327,18 +289,18 @@ tasks:
minute: 0
```
## Page
## Страницы
* `untrusted-color` -
* `clan-name-color` -
* `subtitle-color` -
* `headings-color` -
* `trusted-color` -
* `leader-color` -
* `separator` -
* `size` -
* `untrusted-color` - Цвет неподтвержденного клана
* `clan-name-color` - Цвет названия клана
* `subtitle-color` - Цвет подзаголовков
* `headings-color` - Цвет заголовков
* `trusted-color` - Цвет подтвержденного клана
* `leader-color` - Цвет лидера
* `separator` - Разделитель
* `size` - Размер
#### Example
#### Пример
```yaml
page:
@@ -352,18 +314,18 @@ page:
size: 100
```
## Clan Chat
## Чат клана
* `enable` -
* `tag-based-clan-chat` -
* `announcement-color` -
* `format` -
* `rank` -
* `leader-color:` -
* `trusted-color` -
* `member-color` -
* `enable` - Включить клановый чат?
* `tag-based-clan-chat` - Если `true` командой для отправки сообщения в клановый чат станет ваш клан тег.
* `announcement-color` - Цвет, используемый для оповещений.
* `format` - Формат отображения чата
* `rank` - Формат отображения ранга
* `leader-color:` - Цвет лидера в чате
* `trusted-color` - Цвет подтвержденного участника в чате&#x20;
* `member-color` - Цвет участника в чате
#### Example
#### Пример
```yaml
clanchat:
@@ -377,13 +339,17 @@ clanchat:
member-color: '7'
```
## Request
## Discord чат
* `message-color` -
* `ask-frequency-secs` -
* `max-asks-per-request` -
Вы можете посмотреть описание конфигурации [здесь](../integracii/discordsrv.md#konfiguraciya).
#### Example
## Запросы
* `message-color` - Цвет сообщений
* `ask-frequency-secs` - Интервал (в секундах) между сообщениями
* `max-asks-per-request` - Максимальное кол-во сообщений перед истечением срока запроса.
#### Пример
```yaml
request:
@@ -392,15 +358,15 @@ request:
max-asks-per-request: 1440
```
## Bulletin Board
## Доска объявлений клана
* `color` -
* `accent-color` -
* `show-on-login` -
* `size` -
* `login-size` -
* `color` - Цвет
* `accent-color` - Цвет акцента
* `show-on-login` - Показывать при входе?
* `size` - Размер
* `login-size` - Размер на входе
#### Example
#### Пример
```yaml
bb:
@@ -411,16 +377,16 @@ bb:
login-size: 6
```
## Ally Chat
## Союзный чат
* `enable` -
* `format` -
* `rank` -
* `leader-color` -
* `trusted-color` -
* `member-color` -
* `enable` - Включить союзный чат?
* `format` - Формат чата
* `rank` - Формат ранга
* `leader-color` - Цвет лидера
* `trusted-color` - Цвет подтвержденного участника
* `member-color` - Цвет участника
#### Example
#### Пример
```yaml
allychat:
@@ -432,13 +398,13 @@ allychat:
member-color: '7'
```
## Purge Data
## Очистка данных
* `inactive-player-data-days` -
* `inactive-clan-days` -
* `unverified-clan-days` -
* `inactive-player-data-days` - Через сколько дней будут очищены данные о неактивных игроках?
* `inactive-clan-days` - Через сколько дней будут очищены не активные кланы?
* `unverified-clan-days` - Через сколько дней будут очищены не активные и не подтвержденные кланы?
#### Example
#### Пример
```yaml
purge:
@@ -447,16 +413,16 @@ purge:
unverified-clan-days: 2
```
## mySQL Settings
## MySQL настройки
* `username` -
* `host` -
* `port` -
* `enable` -
* `password` -
* `database` -
* `username` - Логин
* `host` - Хост
* `port` - Порт
* `enable` - Включить MySQL подключение?
* `password` - Пароль
* `database` - База данных
#### Example
#### Пример
```yaml
mysql:
@@ -468,11 +434,11 @@ mysql:
database: ''
```
## Permissions
## Разрешения
* `auto-group-groupname` -
* `auto-group-groupname` -&#x20;
#### Example
#### Пример
```yaml
permissions:
@@ -481,14 +447,19 @@ permissions:
- test.permission
```
## Performance
## Производительность
* `save-periodically` - The plugin will save its data periodically as opposed to right away, **RECOMMENDED** to set it true.
* `save-interval` - The interval **in minutes** in which changes are written to the database.
* `use-threads` - The plugin will not use the main thread to connect with the database if this is true, **RECOMMENDED** to set it true.
* `use-bungeecord` -
* `save-periodically` - Плагин будет периодически сохранять данные, а не сразу.\
**Рекомендуется** установить данный параметр на `true`.\
#### Example
* `save-interval` - Интервал **в минутах**, в течение которого изменения записываются в базу данных.\
* `use-threads` - Плагин не будет использовать основной поток для подключения к БД.\
**Рекомендуется** установить данный параметр на `true`.\
* `use-bungeecord` - Использовать bungeecord? (WIP)
#### Пример
```yaml
performance:
@@ -498,13 +469,12 @@ performance:
use-bungeecord: false
```
## Safe Civilians
## Защита мирных игроков
* `safe-civilians` - Civilians are safe from PvP, even civilian vs civilian combat is disabled
* `safe-civilians` - Мирные игроки(без клана) будут защищены от PVP.
#### Example
#### Пример
```yaml
safe-civilians: false
```
+62
View File
@@ -0,0 +1,62 @@
---
description: Виды комиссий в клане
---
# 💰 Комиссия в клане
## Комиссия участников
**Как это работает?**\
Если включено в [конфигурационном файле](configuration.md#ekonomika) плагина, а также настроено лидерами клана, то в 1:00 ночи с участников клана будет собрана установленная плата. Участник клана, у которого недостаточно средств для оплаты комиссии, будет **автоматически изгнан из клана**. Собранные средства с комиссии идут в банк клана.\
\
**Конфигурация**
* `member-fee-enabled` – Включить или выключить комиссию участников.
* `max-member-fee` – Ограничивает размер взимаемой комиссии, таким образом лидеры не смогут злоупотреблять участниками клана.
* `purchase-member-fee-set` – Включите эту функцию, чтобы взимать нижеприведенное значение каждый раз, когда лидер изменяет значение платы.
* `member-fee-set-price` – Цена, которую вы платите всякий раз, когда меняете размер комиссии.
Пример:
```yaml
economy:
member-fee-enabled: false
max-member-fee: 200.0
purchase-member-fee-set: false
member-fee-set-price: 1000.0
```
**Разрешения**
| **Разрешение** | Описание |
| ------------------------------ | ----------------------------------------------------------------- |
| `simpleclans.leader.fee` | Разрешает игроку переключать комиссию и устанавливать ей значения |
| `simpleclans.member.fee-check` | Разрешает проверять участнику размер комиссии |
**Команды**
| **Разрешение** | Описание | Права |
| ---------------------------- | ----------------------------- | ------------------------------ |
| `/clan toggle fee` | Включить/Выключить комиссию | `simpleclans.leader.fee` |
| `/clan fee set [количество]` | Устанавливает размер комиссии | `simpleclans.leader.fee` |
| `/clan fee check` | Проверить статус комиссии | `simpleclans.member.fee-check` |
## Комиссия на поддержание клана
**Как это работает?**\
Если включено, кланы будут платить комиссию на содержание каждый день. Комиссия будет собрана в `1:30` ночи. В `12:00` утра, если у клана недостаточно денег, чтобы оплатить комиссию, будет отправлено уведомление на доску объявлений. Размер комиссии может быть фиксированным или зависеть от количества участников в клане.\
\
Пример расчёта комиссии с 10 участниками в клане:
```
Цена начальной комиссии = 20.0
Размер клана = 10
Окончательная цена комиссии = 200.0
```
**Настройка**
* `upkeep` – значение начальной комиссии для поддержания клана.
* `upkeep-enabled` – включает/выключает функцию.
* `multiply-upkeep-by-clan-size` – множитель от количества участников (см. пример выше).
* `charge-upkeep-only-if-member-fee-enabled` - Включить комиссию на поддержание кланов, если включена комиссия на участников.
+21 -23
View File
@@ -1,34 +1,32 @@
---
description: null
---
# 🍕 Перевод
# Translation
## Редактирование сообщений плагина
## Editing the plugin's messages
### Необходимые программы:
### Requirements:
* Архиватор ZIP (например, [WinRAR](https://www.win-rar.com/download.html?\&L=0) или [7-Zip](https://www.7-zip.org/download.html))
* Текстовый редактор, например: [NotePad++](https://notepad-plus-plus.org/downloads/), [Visual Studio Code](https://code.visualstudio.com/) или [Sublime Text](https://www.sublimetext.com/).
* A ZIP explorer program \(such as [WinRAR](https://www.win-rar.com/download.html?&L=0) or [7-Zip](https://www.7-zip.org/download.html)\)
* A Text editor like [NotePad++](https://notepad-plus-plus.org/downloads/), [Visual Studio Code](https://code.visualstudio.com/) or [Sublime Text](https://www.sublimetext.com/).
### Пошагово
### Step by step
1. Нажмите правой кнопкой мыши по .jar файлу плагина, выберите пункт "Открыть с помощью..." и выберите ваш ZIP архиватор.
2. Скопируйте файл с сообщениями плагина, соответствующий вашему языку, в папку плагина.
1. Если здесь нет вашего языка, скопируйте "messages.properties" и переименуйте с добавлением кода языка. Например, если ваш язык – русский:`messages_ru_RU.properties`
3. Отредактируйте сообщения и сохраните.
4. Измените параметр `language` в config.yml на код вашего языка;
5. Перезагрузите плагин, используя `/clan reload`.
1. Right click the plugin jar, click on "Open as" and choose the ZIP program;
2. Copy the messages file corresponding to your language to the plugin's folder;
1. If there isn't one for your language, copy "messages.properties" instead and rename it with your language code appended. For example, if your language is Russian: `messages_ru_RU.properties`
3. Edit the messages and save;
4. Change `language` in config.yml to your language code;
5. Reload the plugin using /clan reload.
### Небольшой трюк
### A little trick
Если вам понравился текущий перевод, но хотите изменить пару строчек: \
1\. Скопируйте файл в папку плагина.\
2\. Удалите все строки, кроме тех, которые хотите поменять.\
3\. Отредактируйте и сохраните.
If you like the current translation, but want to change only a few lines: 1. Copy the file to the plugin's folder; 2. Delete all messages except the ones you would like to edit; 3. Edit them and save.
> **Примечание**: учтите, что пользовательский файл `messages.properties` не будет обновлён автоматически при добавлении новых сообщений из Crowdin.
> **Note**: Please note that your custom `messages.properties` does not automatically update when new messages are added.
## Делитесь вашим переводом
## Share your translations!
SimpleClans has a project on [Crowdin](https://crowdin.com/project/simpleclans). There you can translate the messages and suggest corrections!
> **Note**: if you have an old `language.yml` file for SimpleClans that you translated to your language, [open an issue here](https://github.com/RoinujNosde/SimpleClans/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc), I will convert the file and add it to the plugin.
SimpleClans есть на [Crowdin](https://crowdin.com/project/simpleclans). Здесь вы можете переводить и предложить исправления.
> **Примечание**: если у вас уже есть старый файл language.yml, переведённый на ваш язык, откройте [здесь тему](https://github.com/RoinujNosde/SimpleClans/issues), я конвертирую файл и добавлю его в плагин.
+144
View File
@@ -0,0 +1,144 @@
---
description: Больше пространства для коммуникации
---
# 👾 DiscordSRV
## Включение
Чтобы включить эту функцию всё, что вам нужно сделать – включить её в `config.yml` и установить [DiscordSRV](https://www.spigotmc.org/resources/discordsrv.18494/).&#x20;
{% tabs %}
{% tab title="config.yml" %}
```yaml
discordchat:
enable: true
```
{% endtab %}
{% endtabs %}
{% hint style="warning" %}
**Внимание**
Пожалуйста, убедитесь, что вы используете последнюю версию DiscordSRV (>=1.23.0)
{% endhint %}
## Как это работает?
### Автоматически
В начале запуска вашего сервера, SimpleClans создаст категории для ваших кланов, внутри категорий будет отдельный текстовый канал для каждого клана:
![](../.gitbook/assets/DiscordSRV-Clans.png)
{% hint style="warning" %}
**Внимание**
Имейте ввиду, что ваша структура в дискорде будет отличаться от скриншота.\
`clan1`, `clan2`, `clan3`, `clan4` будут находиться в **одной** категории, пока категория не достигнет своего лимита (в таком случае, SimpleClans создаст ещё одну категорию).
{% endhint %}
**Это позволит игрокам общаться в специально созданных для них каналах.**
Канал Discord будет создан/удален/изменен, когда:
* Игрок создает/удаляет клан
* Игрок вступает в клан/выходит из клана
* Игрок клана получил повышение или понижение&#x20;
* Игрок соединил/отсоединил свой аккаунт с Discord'ом
{% hint style="info" %}
**Заметка 1**
Только связанные игроки имеют доступ к своим кланам в дискорде, но сообщения от несвязанных будут также отправляться.
{% endhint %}
{% hint style="info" %}
**Заметка 2**
Если вы являетесь администратором сервера и не можете написать сообщение в **** чат другого клана, спросите себя: позволяет ли вам SimpleClans отправлять сообщения в чаты других кланов? \
\
Вы могли бы использовать `/clan mod place <`клан`>`, чтобы присоединиться и отправить сообщение в нужный чат.
{% endhint %}
### Вручную
Начиная с версии 2.16.2, у вас есть возможность отключить авто-создание каналов и контроллировать ситуацию собственноручно.&#x20;
Чтобы включить ручное создание, надо выключить следующий пункт:
```yaml
discordchat:
auto-creation: false
```
Наши поздравления! Теперь все лидеры с специальным резрешением (`simpleclans.leader.discord.create`) могут создать их собственный канал.
Для этого им необходимо исполнить следующую команду:
```
/clan discord create
```
Более того, если вы используете экономический плагин, вы также можете указать цену за создание:
```yaml
economy:
purchase-discord-create: true
discord-creation-price: 1000
```
### Основные заметки
{% hint style="info" %}
**Заметка 1**
Только привязанные игроки имеют доступ к их кланам в дискорде, но сообщения от непривязанных будут отправлены в том числе.
{% endhint %}
{% hint style="info" %}
**Заметка 2**
Если вы админ сервера и не можете написать сообщения в другие чаты, спросите себя: _позволяет ли SimpleClans писать вам сообщения в другие чаты кланов?_\
__Вы можете использовать `/clan mod place <нужный клан>`, чтобы присоединиться и отправить сообщения в этот чат.
{% endhint %}
## Говоря об ограничениях дискорда...
> Максимум только 50 каналов в одной категории
Поэтому, когда категория будет заполнена 50 каналами, SimpleClans создаст новую категорию и разместит в ней новый канал.
> Максимум 500 кланов в дискорде сервере
Поэтому, если у вас более 500 кланов, то SimpleClans не сможет обработать их все.\
Вы можете использовать `discordchat.text.clans-limit` в конфигурации для ограничения количества каналов на вашем дискорд сервере.
## Конфигурация
| Опция | Значение |
| ---------------------------------- | --------------------------------------------------------------------------------------------------- |
| `discordchat.enable` | Включает интеграцию с DiscordSRV |
| `discordchat.discord-format` | Формат сообщений из майнкрафта в дискорд |
| `discordchat.format` | Формат сообщений из дискорда в майнкрафт |
| `discordchat.spy-format` | <p>Формат сообщений из дискорда к админам</p><p>(<code>simpleclans.admin.all-seeing-eye</code>)</p> |
| `discordchat.rank` | Формат ранга |
| `discordchat.text.category-format` | <p>Наименование категории <br>("SC – TextChannel")</p> |
| `discordchat.text.category-ids` | <p>Айди категорий. <br>Вы можете добавить их вручную, если хотите.</p> |
| `discordchat.text.whitelist` | Белый список кланов создаст только кланы, указанные в нём. |
| `discordchat.text.clans-limit` | Ограничение каналов на дискорд сервере. Максимум - 500. |
## Опции, которые НЕ будут работать
Некоторые конфигурации DiscordSRV не будут работать на каналах SimpleClans'а. \
Вот небольшой список:
* `DiscordChatChannelDiscordToMinecraft` – Вы можете отключить дискорд интеграцию в конфиге SimpleClans'а.
* `DiscordChatChannelRequireLinkedAccount` _–_ Интеграция с дискордом требует наличие только привязанных игроков.
* `DiscordChatChannelBlockBots` – Мы все роботы :robot:, теперь вы знаете правду.
* `DiscordChatChannelBlockedIds` – И где же я могу заблокировать свой айпи? :thinking:
* `DiscordChatChannelBroadcastDiscordMessagesToConsole` – У вас есть шпионский чат для администраторов.
* `DiscordChatChannelTruncateLength` – Кто-нибудь знает что такое `Truncate`? :smile:
* `DiscordChatChannelRolesAllowedToUseColorCodesInChat` – Нет.
Ну, хотя бы `DiscordChatChannelEmojiBehavior` будет работать нормально. :thumbsup:
+74
View File
@@ -0,0 +1,74 @@
---
description: >-
На этой странице содержится информация о совместном использовании вашей
территории с участниками клана.
---
# 🏝 GriefPrevention, WorldGuard и другие
## Раздел территории
В настоящее время SimpleClans может работать с GriefPrevention, WorldGuard (а также плагинами, зависящими от него) и PlotSquared. SimpleClans имеет методы по умолчанию для разрешения и блокирования различных действий (ломать, строить, взаимодействовать и т.д.).
Полный список команд:
> Необязательные аргументы отмечены как \[аргумент]
| Команда | Описание |
| --------------------------- | -------------------------------------------------------------------------- |
| `/clan land allow [action]` | Разрешает **указанное действие** на этой территории для ваших со-клановцев |
| `/clan land block [action]` | Блокирует **указанное действие** на этой территории для ваших со-клановцев |
Список действий:
| Действие | Описание |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------- |
| container | Используется, чтобы разрешить/заблокировать открытие сундуков, наковален, зачаровательных столов и др. на вашей территории |
| place\_block | Используется, чтобы разрешить/заблокировать установку блоков на вашей территории |
| break | Используется, чтобы разрешить/заблокировать ломание блоков на вашей территории |
| damage | Используется, чтобы разрешить/заблокировать получение любого вида урона на вашей территории |
| interact | Используется, чтобы разрешить/заблокировать взаимодействие с дверьми, кнопками, рычагами, и др. на вашей территории |
| interact\_entity | Используется, чтобы разрешить/заблокировать взаимодействие с сущностями на вашей территории |
| all | Используется, чтобы разрешить/заблокировать все действия |
**Пример:** `/clan land allow place_block` разрешит установку блоков на вашей территории для ваших со-клановцев.
{% hint style="info" %}
**Заметка**\
Команды повляют на территорию, в которой вы в текущий момент находитесь, или на все территории, если вы не стоите не на одной. _(когда edit-all-lands – true)_.
{% endhint %}
## Другие пути для раздела территории
### GriefPrevention
#### Конфигурация
* `enable-auto-groups` -&#x20;
* `auto-group-groupname`-&#x20;
#### Пример
```yaml
settings:
enable-auto-groups: false
permissions:
auto-group-groupname: true
YourClanNameHere:
- test.permission
```
Вы можете заменить `<clantag>` с любым клан тегом (будь то союзник, противник, или прочее)
| Команда | Описание |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `/Trust group.<clantag>` | Даёт право участникам вашего клана изменять ваш регион |
| `/AccessTrust group.<clantag>` | Даёт право участникам вашего клана использовать рычаги, кнопки и кровати, расположенные на вашем регионе |
| `/ContainerTrust group.<clantag>` | Даёт право участникам вашего клана использовать рычаги, кнопки и кровати, столы для крафтов, сундуки и животных. |
| `/PermissionTrust group.<clantag>` | Даёт право участникам вашего клана делиться их уровнем доступа с другими |
| `/UnTrust group.<clantag>` | Забрать любые права, гарантированные ваших сокланавцам, на вашем регионе |
{% hint style="info" %}
**Заметка**\
После того, как вы выдали право, игроки должны перезайти.
{% endhint %}
+37 -11
View File
@@ -1,18 +1,18 @@
---
description: List of the plugin's known issues and possible solutions.
description: Список известных проблем плагина и возможных решений.
---
# Known issues
# 🪓 Известные проблемы
#### MySQL \#1366 - Incorrect string value
### MySQL #1366 - Некорректное string значение
This error happens when you try to insert characters that MySQL's current encoding doesn't support.
Эта ошибка возникает тогда, когда вы пытаетесь вставить символы, которые не поддерживаются кодировкой MySQL.
**Solution:** change MySQL's encoding to `utf8mb4`.
1. Open MySQL's `my.cnf`.
2. Add these configurations, save and restart MySQL:
**Решение:** измените кодировку MySQL на `utf8mb4`.\
1\. Откройте файл MySQL `my.cnf`.\
2\. Добавьте эту конфигурацию, сохраните и перезапустите MySQL:
```text
```
[mysql]
default-character-set=utf8mb4
[mysqld]
@@ -20,9 +20,35 @@ character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
```
#### KDR is not counted
### KDR не подсчитывается
Players report that their KDR is not changing.
Игроки жалуются, что их KDR не изменяется.
**Solution:** deny the permission `simpleclans.other.kdr-exempt`. In some permission plugins, just add a `-` before the node. Others accept the `false` value.
**Решение:** отрицайте разрешение`simpleclans.other.kdr-exempt`. В некоторых плагинах на права, просто добавьте `-` перед правом. Другие принимают `false` значение.
### Странные символы в GUI
В GUI, в некоторых местах, отображаются странные символы.
![Тот самый странный символ](<../.gitbook/assets/izobrazhenie (1).png>)
**Решение:** ваша локальная машина настроена на русский язык из-за чего появляется подобный казус. Решить это можно, добавив следующую строку в параметры запуска сервера:\
`-Duser.country=US -Duser.language=en`
### Geyser | Ошибка при загрузке текстуры головы
Поскольку SimpleClans использует головы игроков в меню, то вы можете столкнуться с [ограничением Geyser](https://wiki.geysermc.org/geyser/current-limitations/).\
\
При попытке открыть меню (`/clan`) вылетает ошибка в консоли.\
Эту ошибку можно определить по стектрейсу:
```
Caused by: java.lang.IllegalArgumentException: Name and ID cannot both be blank
```
**Решение:**\
Поставьте следующее значение на `false` в конфигурации Geyser:
```yaml
allow-custom-skulls: false
```
-38
View File
@@ -1,38 +0,0 @@
---
description: null
---
# Land Claims Plugins
## Configuration
* `enable-auto-groups` -
* `auto-group-groupname`-
### Exemple
```yaml
settings:
enable-auto-groups: false
permissions:
auto-group-groupname: true
YourClanNameHere:
- test.permission
```
## GriefPrevention
You can replace `<clantag>` with ANY clan tag \(ally, rival, etc\)
| Command | Description |
| :--- | :--- |
| `/Trust group.<clantag>` | Gives the Clan members permission to edit in your claim |
| `/AccessTrust group.<clantag>` | Gives the Clan members permission to use your buttons, levers, and beds |
| `/ContainerTrust group.<clantag>` | Gives the Clan members permission to use your buttons, levers, beds, crafting gear, containers, and animals |
| `/PermissionTrust group.<clantag>` | Gives the Clan members permission to share their permission level with others |
| `/UnTrust group.<clantag>` | Revokes any permissions granted to a Clan in your claim |
## Note
After the permission is given, the player must reconnect.
+106 -85
View File
@@ -2,91 +2,112 @@
description: null
---
# PlaceholderAPI Support
# 🪜 Поддержка PlaceholderAPI
## Available placeholders
## Доступные заполнители
| Placeholder | Result | Description | |
| :--- | :--- | :--- | :--- |
| %simpleclans\_neutral\_kills% | INTEGER | | |
| %simpleclans\_rival\_kills% | INTEGER | | |
| %simpleclans\_civilian\_kills% | INTEGER | | |
| %simpleclans\_total\_kills% | INTEGER | | |
| %simpleclans\_weighted\_kills% | INTEGER | | |
| %simpleclans\_deaths% | INTEGER | | |
| %simpleclans\_kdr% | FLOAT | | |
| %simpleclans\_in\_clan% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_leader% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_trusted% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_member% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_bb\_enabled% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_usechatshortcut% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_allychat% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_clanchat% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_globalchat% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_cape\_enabled% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_tag\_enabled% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_friendlyfire\_on% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_muted% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_is\_mutedally% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_join\_date% | DATE | Month, Day, Year, Hour | |
| %simpleclans\_inactive\_days% | INTEGER | | |
| %simpleclans\_lastseen% | INTEGER | | |
| %simpleclans\_lastseendays% | INTEGER | | |
| %simpleclans\_tag% | STRING | lowerscored Clan tag without color | |
| %simpleclans\_tag\_label% | STRING | Clan tag with correct mayus, color and at the end &c | |
| %simpleclans\_rank% | STRING | | |
| %simpleclans\_rank\_displayname% | STRING | | |
| %simpleclans\_clanchat\_player\_color% | | | |
| %simpleclans\_allychat\_player\_color% | | | |
| %simpleclans\_clan\_total\_neutral% | INTEGER | | |
| %simpleclans\_clan\_total\_civilian% | INTEGER | | |
| %simpleclans\_clan\_total\_rival% | INTEGER | | |
| %simpleclans\_clan\_total\_kills% | INTEGER | | |
| %simpleclans\_clan\_total\_deaths% | INTEGER | | |
| %simpleclans\_clan\_total\_kdr% | FLOAT | | |
| %simpleclans\_clan\_average\_wk% | INTEGER | | |
| %simpleclans\_clan\_leader\_size% | INTEGER | | |
| %simpleclans\_clan\_balance% | INTEGER | | |
| %simpleclans\_clan\_allow\_withdraw% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_clan\_allow\_deposit% | BOOLEAN \(YES/NO\) | | |
| %simpleclans\_clan\_size% | INTEGER | | |
| %simpleclans\_clan\_name% | STRING | | |
| %simpleclans\_clan\_color\_tag% | | | |
| %simpleclans\_clan\_tag% | | | |
| %simpleclans\_clan\_founded% | | | |
| %simpleclans\_clan\_friendly\_fire% | | | |
| %simpleclans\_clan\_is\_unrivable% | | | |
| %simpleclans\_clan\_is\_anyonline% | | | |
| %simpleclans\_clan\_is\_verified% | | | |
| %simpleclans\_clan\_capeurl% | | | |
| %simpleclans\_clan\_inactivedays% | | | |
| %simpleclans\_clan\_onlinemembers\_count% | | | |
| %simpleclans\_clan\_allies\_count% | | | |
| %simpleclans\_clan\_rivals\_count% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_neutral% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_civilian% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_rival% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_kills% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_deaths% | | | |
| %simpleclanstopclans\_\#\_clan\_total\_kdr% | | | |
| %simpleclanstopclans\_\#\_clan\_average\_wk% | | | |
| %simpleclanstopclans\_\#\_clan\_leader\_size% | | | |
| %simpleclanstopclans\_\#\_clan\_balance% | | | |
| %simpleclanstopclans\_\#\_clan\_allow\_withdraw% | | | |
| %simpleclanstopclans\_\#\_clan\_allow\_deposit% | | | |
| %simpleclanstopclans\_\#\_clan\_size% | | | |
| %simpleclanstopclans\_\#\_clan\_name% | | | |
| %simpleclanstopclans\_\#\_clan\_color\_tag% | | | |
| %simpleclanstopclans\_\#\_clan\_tag% | | | |
| %simpleclanstopclans\_\#\_clan\_founded% | | | |
| %simpleclanstopclans\_\#\_clan\_friendly\_fire% | | | |
| %simpleclanstopclans\_\#\_clan\_is\_unrivable% | | | |
| %simpleclanstopclans\_\#\_clan\_is\_anyonline% | | | |
| %simpleclanstopclans\_\#\_clan\_is\_verified% | | | |
| %simpleclanstopclans\_\#\_clan\_capeurl% | | | |
| %simpleclanstopclans\_\#\_clan\_inactivedays% | | | |
| %simpleclanstopclans\_\#\_clan\_onlinemembers\_count% | | | |
| %simpleclanstopclans\_\#\_clan\_allies\_count% | | | |
| %simpleclanstopclans\_\#\_clan\_rivals\_count% | | | |
| Заполнитель | Результат | Описание | |
| ---------------------------------------------------- | ------------------- | -------------------------------------- | - |
| %simpleclans\_neutral\_kills% | Числовой | | |
| %simpleclans\_rival\_kills% | Числовой | | |
| %simpleclans\_civilian\_kills% | Числовой | | |
| %simpleclans\_total\_kills% | Числовой | | |
| %simpleclans\_weighted\_kills% | Числовой | | |
| %simpleclans\_deaths% | Числовой | | |
| %simpleclans\_kdr% | FLOAT | | |
| %simpleclans\_in\_clan% | Логический (Да/Нет) | | |
| %simpleclans\_is\_leader% | Логический (Да/Нет) | | |
| %simpleclans\_is\_trusted% | Логический (Да/Нет) | | |
| %simpleclans\_is\_member% | Логический (Да/Нет) | | |
| %simpleclans\_is\_bb\_enabled% | Логический (Да/Нет) | | |
| %simpleclans\_is\_usechatshortcut% | Логический (Да/Нет) | | |
| %simpleclans\_is\_allychat% | Логический (Да/Нет) | | |
| %simpleclans\_is\_clanchat% | Логический (Да/Нет) | | |
| %simpleclans\_is\_globalchat% | Логический (Да/Нет) | | |
| %simpleclans\_is\_cape\_enabled% | Логический (Да/Нет) | | |
| %simpleclans\_is\_tag\_enabled% | Логический (Да/Нет) | | |
| %simpleclans\_is\_friendlyfire\_on% | Логический (Да/Нет) | | |
| %simpleclans\_is\_muted% | Логический (Да/Нет) | | |
| %simpleclans\_is\_mutedally% | Логический (Да/Нет) | | |
| %simpleclans\_join\_date% | Дата | Месяц, День, Год, Час | |
| %simpleclans\_inactive\_days% | Числовой | | |
| %simpleclans\_lastseen% | Числовой | | |
| %simpleclans\_lastseendays% | Числовой | | |
| %simpleclans\_tag% | Строковый | Тег клана без цвета в нижнем регистре. | |
| %simpleclans\_tag\_label% | Строковый | Полный тег клана с цветом | |
| %simpleclans\_rank% | Строковый | | |
| %simpleclans\_rank\_displayname% | Строковый | | |
| %simpleclans\_clanchat\_player\_color% | | | |
| %simpleclans\_allychat\_player\_color% | | | |
| %simpleclans\_clan\_total\_neutral% | Числовой | | |
| %simpleclans\_clan\_total\_civilian% | Числовой | | |
| %simpleclans\_clan\_total\_rival% | Числовой | | |
| %simpleclans\_clan\_total\_kills% | Числовой | | |
| %simpleclans\_clan\_total\_deaths% | Числовой | | |
| %simpleclans\_clan\_total\_kdr% | FLOAT | | |
| %simpleclans\_clan\_average\_wk% | Числовой | | |
| %simpleclans\_clan\_leader\_size% | Числовой | | |
| %simpleclans\_clan\_balance% | Числовой | | |
| %simpleclans\_clan\_allow\_withdraw% | Логический (Да/Нет) | | |
| %simpleclans\_clan\_allow\_deposit% | Логический (Да/Нет) | | |
| %simpleclans\_clan\_size% | Числовой | | |
| %simpleclans\_clan\_name% | Строковый | | |
| %simpleclans\_clan\_color\_tag% | | | |
| %simpleclans\_clan\_tag% | | | |
| %simpleclans\_clan\_founded% | | | |
| %simpleclans\_clan\_friendly\_fire% | | | |
| %simpleclans\_clan\_is\_unrivable% | | | |
| %simpleclans\_clan\_is\_anyonline% | | | |
| %simpleclans\_clan\_is\_verified% | | | |
| %simpleclans\_clan\_capeurl% | | | |
| %simpleclans\_clan\_inactivedays% | | | |
| %simpleclans\_clan\_onlinemembers\_count% | | | |
| %simpleclans\_clan\_allies\_count% | | | |
| %simpleclans\_clan\_rivals\_count% | | | |
| %simpleclanstopclans\_#\_clan\_total\_neutral% | | | |
| %simpleclanstopclans\_#\_clan\_total\_civilian% | | | |
| %simpleclanstopclans\_#\_clan\_total\_rival% | | | |
| %simpleclanstopclans\_#\_clan\_total\_kills% | | | |
| %simpleclanstopclans\_#\_clan\_total\_deaths% | | | |
| %simpleclanstopclans\_#\_clan\_total\_kdr% | | | |
| %simpleclanstopclans\_#\_clan\_average\_wk% | | | |
| %simpleclanstopclans\_#\_clan\_leader\_size% | | | |
| %simpleclanstopclans\_#\_clan\_balance% | | | |
| %simpleclanstopclans\_#\_clan\_allow\_withdraw% | | | |
| %simpleclanstopclans\_#\_clan\_allow\_deposit% | | | |
| %simpleclanstopclans\_#\_clan\_size% | | | |
| %simpleclanstopclans\_#\_clan\_name% | | | |
| %simpleclanstopclans\_#\_clan\_color\_tag% | | | |
| %simpleclanstopclans\_#\_clan\_tag% | | | |
| %simpleclanstopclans\_#\_clan\_founded% | | | |
| %simpleclanstopclans\_#\_clan\_friendly\_fire% | | | |
| %simpleclanstopclans\_#\_clan\_is\_unrivable% | | | |
| %simpleclanstopclans\_#\_clan\_is\_anyonline% | | | |
| %simpleclanstopclans\_#\_clan\_is\_verified% | | | |
| %simpleclanstopclans\_#\_clan\_capeurl% | | | |
| %simpleclanstopclans\_#\_clan\_inactivedays% | | | |
| %simpleclanstopclans\_#\_clan\_onlinemembers\_count% | | | |
| %simpleclanstopclans\_#\_clan\_allies\_count% | | | |
| %simpleclanstopclans\_#\_clan\_rivals\_count% | | | |
## Топ кланов
Топ кланов – это группа placeholder'ов, благодаря которой вы можете создавать свои таблицы лидеров. \
\
Для этого необходимо обратиться к списку выше, взять один из существующих `%simpleclanstopclans_#%`, но вместо `#` добавить `_topclans_#_`, где # – номер позиции клана.\
\
Пример.:\
`%simpleclans_topclans_1_clan_name%` – вернёт клан с именем, находящийся на первой позиции.
## Топ игроков
Другая группа placeholder'ов позволяет создать таблицу лидеров игроков. Принцип схож с топом кланов.\
\
Добавьте `_topplayers_#_` к существующему placeholder'у игроков, чтобы получить значение для указанной позиции.\
\
Пример:\
`%simpleclans_topplayers_2_tag_label%` – Возвращает полный тег клана игрока, находящегося на второй позиции.
#### HolographicDisplays
Чтобы использовать топы (таблицы лидеров) с HolographicDisplays, помните об [установке ](https://www.spigotmc.org/resources/holographicextension.18461/)расширения.
+134 -39
View File
@@ -1,61 +1,156 @@
---
description: null
description: >-
Эта страница поможет вам разобраться в том, как установить и использовать
SimpleClans API в своих плагинах.
---
# SimpleClans API Example
# ♟️ SimpleClans API
You can hook into SimpleClans plugin like so:
## Шаг 1. Добавьте SimpleClans API в свой плагин
Сделать это можно двумя способами: через Maven или локально.\
Мы настоятельно **рекомендуем** делать это через Maven.
### Maven
Добавьте следующие строки в `pom.xml`:
```markup
<repositories>
<repository>
<id>roinujnosde-repo</id>
<url>https://repo.roinujnosde.me/releases/</url>
</repository>
</repositories>
```
```markup
<dependencies>
<dependency>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.19.2</version>
<!-- Вы можете узнать последнюю доступную версию в заметке ниже -->
<scope>provided</scope>
</dependency>
</dependencies>
```
{% hint style="info" %}
**Заметка**\
Последнюю версию можно узнать тут: [ссылка](https://github.com/RoinujNosde/SimpleClans/releases)
{% endhint %}
### Локально
В указаном примере мы будем использовать IntelliJ IDEA, но последующие действия также работают и в других IDE.
1. Откройте структуру вашего проекта (`F4`)
2. Выберите пункт Libraries, кликните на крестик, в появившемся окошке выбираем "New Project Library -> Java" и добавляем SimpleClans.
![](<../.gitbook/assets/izobrazhenie (4).png>)
Возвращаемся к структуре проекта, дальше заходим в Project Settings -> Modules, ставим режим компиляции "Provided".
![](<../.gitbook/assets/izobrazhenie (5) (1).png>)
* [x] Поздравляю, вы поставили SimpleClans API в свой проект. 😃
## Шаг 2. Используйте SimpleClans API
#### Что вам нужно знать?
* **ClanPlayer –** это класс, представляющий из себя объект игрока. В этом классе содержится информация об игроке, его клане и др.
* **Clan –** это класс, презентующий объект клана. В нём имеется методы для получения игроков клана, тега клана, союзников, лидеров и др.
* **ClanManager –** это класс, позволяющий получить **Clan** и **ClanPlayer.**
#### Пример использования SimpleClans
Вы можете использовать плагин SimpleClans вот так:
{% tabs %}
{% tab title="MyPlugin.class" %}
```java
private SimpleClans sc;
public void onEnable()
{
Plugin plug = getServer().getPluginManager().getPlugin("SimpleClans");
if (plug != null)
{
sc = ((SimpleClans) plug);
public class MyPlugin extends JavaPlugin {
private static SimpleClans sc;
@Override
public void onEnable() {
Plugin plug = getServer().getPluginManager().getPlugin("SimpleClans");
if (plug != null) {
sc = (SimpleClans) plug;
}
}
public static getSimpleClans() {
return sc;
}
}
```
{% endtab %}
{% tab title="Example.class" %}
```java
public void doClanStuff(Player player)
{
// get a player's clan
public class Example {
if (sc != null)
{
ClanPlayer cp = sc.getClanManager().getClanPlayer(player.getUniqueId());
if (cp != null)
{
public void doClanStuff(Player player) {
UUID playerUuid = player.getUniqueId();
// Получение клана игрока
ClanPlayer cp = MyPlugin.getSimpleClans().getClanManager().getClanPlayer(playerUuid);
if (cp != null) {
Clan clan = cp.getClan();
} else {
// Игрок не является участником какого-либо клана
}
else
{
// player is not in a clan
}
}
// get a clan from a clan tag
if (sc != null)
{
Clan clan = sc.getClanManager().getClan("staff");
if (clan != null)
{
// clan exists
// Получение клана из клан тега
Clan clan = MyPlugin.getSimpleClans().getClanManager().getClan("staff");
if (clan != null) {
// Клан существует
}
}
}
```
{% endtab %}
{% endtabs %}
Every player has a **ClanPlayer** object which holds all his information, including his clan, and can be used to perform various operations on the player.
В случае, если вы не хотите указывать проверку на наличие плагина, вы всегда можете указать зависимость в `plugin.yml`:
The **Clan** object holds all the information for a clan and can be used to perform various operations on the clan.
{% tabs %}
{% tab title="plugin.yml" %}
```yaml
depend:
- SimpleClans
```
{% endtab %}
The **ClanManager** holds all the **Clans** and **ClanPlayers** and contains methods that allow you to retrieve them.
{% tab title="Example.class" %}
```java
public class Example {
public void doClanStuff(Player player)
{
SimpleClans sc = SimpleClans.getInstance();
// Получение клана игрока
ClanPlayer cp = sc.getClanManager().getClanPlayer(player.getUniqueId());
if (cp != null) {
Clan clan = cp.getClan();
} else {
// Игрок не является участником какого-либо клана
}
// Получение клана из клан тега
Clan clan = sc.getClanManager().getClan("staff");
if (clan != null) {
// Клан существует
}
}
}
```
{% endtab %}
{% endtabs %}