Compare commits

..
Author SHA1 Message Date
Edson Passos af8edd0a24 AddAlly, Coords, LanguageSelector, Leaderboard, Permissions 2025-03-16 21:07:57 -03:00
Edson Passos 2480bf47bc Check for enabled in drawer 2025-03-12 21:31:20 -03:00
Edson Passos f9de9966ec AlliesFrame, AddAllyFrame, AddRivalFrame, InviteFrame and other changes 2025-03-10 23:07:32 -03:00
Edson Passos f7304c00a7 LeaderboardFrame config and other changes 2025-03-09 16:45:16 -03:00
Edson Passos cd451a2f1f Merge branch 'master' into customizable-gui
# Conflicts:
#	SimpleClans.iml
#	dependency-reduced-pom.xml
#	pom.xml
#	src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/SettingsManager.java
#	src/main/java/net/sacredlabyrinth/phaed/simpleclans/ui/SCFrame.java
2025-03-08 23:06:22 -03:00
RoinujNosde 707a6bfb66 Refactored processLang 2022-12-27 19:09:57 -03:00
RoinujNosde f5ae7e23c3 Fixed error when config was missing 2022-12-25 17:44:38 -03:00
RoinujNosde 91845abea3 Some refactoring 2022-12-22 18:24:10 -03:00
RoinujNosde 7cb55f6177 Move getConfig() to SettingsManager 2022-12-20 22:03:10 -03:00
RoinujNosde 949943fb5e Decorations 2022-12-18 17:02:25 -03:00
RoinujNosde 56b4b64d21 Enabled state for Components, XMaterial updated 2022-12-17 18:55:47 -03:00
RoinujNosde b3324574da Refactored AddPermissionFrame 2022-12-14 19:51:47 -03:00
RoinujNosde edd4c46a9e Generified Paginator, added PageableFrame 2022-12-11 19:56:07 -03:00
RoinujNosde 91c701a729 Merge branch 'master' into customizable-gui 2022-12-11 16:43:37 -03:00
RoinujNosde 45ef2ce219 Added ArrayBuilder - WIP 2022-12-10 20:52:18 -03:00
RoinujNosde dd676565e2 Made realistic changes to GUI config 2022-12-08 19:39:26 -03:00
RoinujNosde 6a570cf003 Added example config and readConfig() method 2022-09-25 19:07:40 -03:00
74 changed files with 1532 additions and 2918 deletions

No files matched your search

+3 -20
View File
@@ -1,5 +1,4 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
@@ -17,8 +16,7 @@
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>plugin.yml</include>
<include>config.yml</include>
<include>**/*.yml</include>
<include>*.properties</include>
</includes>
</resource>
@@ -86,10 +84,6 @@
<pattern>com.google.gson</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.gson</shadedPattern>
</relocation>
<relocation>
<pattern>com.tcoded.folialib</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.folialib</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<excludes>
@@ -99,8 +93,7 @@
<transformers>
<!-- Avoid overlapping MANIFEST.MF file -->
<transformer
implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>MANIFEST.MF</resource>
</transformer>
</transformers>
@@ -267,12 +260,6 @@
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.tcoded</groupId>
<artifactId>FoliaLib</artifactId>
<version>0.5.1</version>
<scope>compile</scope>
</dependency>
<!-- Test frameworks -->
<dependency>
@@ -323,10 +310,6 @@
<id>eldonexus</id>
<url>https://eldonexus.de/repository/maven-public</url>
</repository>
<repository>
<id>tcoded-releases</id>
<url>https://repo.tcoded.com/releases</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
@@ -1440,10 +1440,10 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getRequestManager().removeRequest(getTag());
SimpleClans.getInstance().getScheduler().runNextTick(task -> {
SimpleClans.getInstance().getServer().getScheduler().scheduleSyncDelayedTask(SimpleClans.getInstance(), () -> {
SimpleClans.getInstance().getClanManager().removeClan(getTag());
SimpleClans.getInstance().getStorageManager().deleteClan(this);
});
}, 1);
}
public void disband() {
@@ -1,8 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans;
import co.aikar.commands.BukkitCommandIssuer;
import com.tcoded.folialib.FoliaLib;
import com.tcoded.folialib.impl.PlatformScheduler;
import net.sacredlabyrinth.phaed.simpleclans.commands.SCCommandManager;
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.SimpleClansExpansion;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
@@ -67,7 +65,6 @@ public class SimpleClans extends JavaPlugin {
private BankLogger bankLogger;
private TagValidator tagValidator;
private FoliaLib foliaLib;
/**
* @return the logger
@@ -78,8 +75,7 @@ public class SimpleClans extends JavaPlugin {
}
public static void debug(String msg) {
//instance may be null during tests
if (getInstance() == null || getInstance().getSettingsManager().is(DEBUG)) {
if (getInstance().getSettingsManager().is(DEBUG)) {
logger.log(Level.INFO, msg);
}
}
@@ -103,7 +99,6 @@ public class SimpleClans extends JavaPlugin {
@Override
public void onEnable() {
instance = this;
foliaLib = new FoliaLib(this);
new LanguageMigration(this).migrate();
settingsManager = new SettingsManager(this);
new BbMigration(settingsManager);
@@ -210,14 +205,6 @@ public class SimpleClans extends JavaPlugin {
getSettingsManager().loadAndSave();
}
// TODO Replace this with getFoliaLib#getScheduler?
public PlatformScheduler getScheduler() {
return foliaLib.getScheduler();
}
public FoliaLib getFoliaLib() {
return foliaLib;
}
/**
* @return the clanManager
*/
@@ -21,28 +21,31 @@ public class SpigotChatHandler implements ChatHandler {
/*
TODO: Make it async, change Type to Channel in 3.0
*/
plugin.getScheduler().runLater(() -> {
ChatEvent event = new ChatEvent(message.getContent(), message.getSender(), message.getReceivers(),
ChatEvent.Type.valueOf(message.getChannel().name()));
new BukkitRunnable() {
@Override
public void run() {
ChatEvent event = new ChatEvent(message.getContent(), message.getSender(), message.getReceivers(),
ChatEvent.Type.valueOf(message.getChannel().name()));
getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
message.setContent(stripColorsAndFormatsPerPermission(message.getSender(),event.getMessage()));
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_FORMAT",
message.getSource() == DISCORD ? "DISCORD" : message.getChannel()));
String format = settingsManager.getString(configField);
String formattedMessage = chatManager.parseChatFormat(format, message, event.getPlaceholders());
plugin.getLogger().info(ChatUtils.stripColors(formattedMessage));
for (ClanPlayer cp : message.getReceivers()) {
ChatBlock.sendMessage(cp, formattedMessage);
}
}
message.setContent(stripColorsAndFormatsPerPermission(message.getSender(),event.getMessage()));
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_FORMAT",
message.getSource() == DISCORD ? "DISCORD" : message.getChannel()));
String format = settingsManager.getString(configField);
String formattedMessage = chatManager.parseChatFormat(format, message, event.getPlaceholders());
plugin.getLogger().info(ChatUtils.stripColors(formattedMessage));
for (ClanPlayer cp : message.getReceivers()) {
ChatBlock.sendMessage(cp, formattedMessage);
}
}, 0);
}.runTask(plugin);
}
private String stripColorsAndFormatsPerPermission(ClanPlayer sender, String message) {
@@ -27,16 +27,19 @@ public class Kills extends Sendable {
@Override
public void send() {
plugin.getStorageManager().getKillsPerPlayer(polled, data -> plugin.getScheduler().runAtEntity(player, task -> {
if (data.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("nokillsfound", player));
return;
}
configureAndSendHeader();
addLines(data);
plugin.getStorageManager().getKillsPerPlayer(polled, data -> new BukkitRunnable() {
@Override
public void run() {
if (data.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("nokillsfound", player));
return;
}
configureAndSendHeader();
addLines(data);
sendBlock();
}));
sendBlock();
}
}.runTask(plugin));
}
private void addLines(Map<String, Integer> data) {
@@ -25,22 +25,25 @@ public class MostKilled extends Sendable {
@Override
public void send() {
plugin.getStorageManager().getMostKilled(data -> plugin.getScheduler().runAtEntity(player, task -> {
if (data.isEmpty()) {
ChatBlock.sendMessage(player, RED + lang("nokillsfound", player));
return;
plugin.getStorageManager().getMostKilled(data -> new BukkitRunnable() {
@Override
public void run() {
if (data.isEmpty()) {
ChatBlock.sendMessage(player, RED + lang("nokillsfound", player));
return;
}
sendHeader();
Map<String, Integer> killsPerPlayer = Helper.sortByValue(data);
for (Map.Entry<String, Integer> attackerVictim : killsPerPlayer.entrySet()) {
addLine(attackerVictim);
}
sendBlock();
}
sendHeader();
Map<String, Integer> killsPerPlayer = Helper.sortByValue(data);
for (Map.Entry<String, Integer> attackerVictim : killsPerPlayer.entrySet()) {
addLine(attackerVictim);
}
sendBlock();
}));
}.runTask(plugin));
}
private void addLine(Map.Entry<String, Integer> attackerVictim) {
@@ -49,7 +49,7 @@ public class CreateClanNamePrompt extends StringPrompt {
if (errorPrompt != null) return errorPrompt;
String finalClanName = clanName;
plugin.getScheduler().runNextTick((task) -> {
Bukkit.getScheduler().runTask(plugin, () -> {
String tag = (String) context.getSessionData(TAG_KEY);
//noinspection ConstantConditions
PreCreateClanEvent event = new PreCreateClanEvent(player, tag, finalClanName);
@@ -1,6 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationCanceller;
@@ -49,10 +48,6 @@ public class SCConversation extends Conversation {
}
public void addConversationCanceller(@NotNull ConversationCanceller canceller) {
// not supported yet by Folia, https://github.com/PaperMC/Folia/issues/216
if (SimpleClans.getInstance().getFoliaLib().isFolia()) {
return;
}
canceller.setConversation(this);
cancellers.add(canceller);
}
@@ -0,0 +1,32 @@
package net.sacredlabyrinth.phaed.simpleclans.events;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class PostComponentsCreationEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final @NotNull SCFrame frame;
public PostComponentsCreationEvent(@NotNull SCFrame frame) {
this.frame = frame;
}
public SCFrame getFrame() {
return frame;
}
@NotNull
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static @NotNull HandlerList getHandlerList() {
return HANDLER_LIST;
}
}
@@ -120,7 +120,7 @@ public class SCPlayerListener extends SCListener {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(event.getPlayer());
if (cp != null) {
Clan clan = Objects.requireNonNull(cp.getClan());
plugin.getScheduler().runNextTick((task) -> {
Bukkit.getScheduler().runTask(plugin, () -> {
if (clan.getOnlineMembers().isEmpty()) {
plugin.getProtectionManager().setWarExpirationTime(cp.getClan(),
settingsManager.getMinutes(WAR_DISCONNECT_EXPIRATION_TIME));
@@ -330,7 +330,6 @@ public final class ClanManager {
return clanPlayers.get(uuid);
}
@SuppressWarnings("deprecation")
@Nullable
public ClanPlayer getAnyClanPlayer(String playerName) {
for (ClanPlayer cp : getAllClanPlayers()) {
@@ -603,7 +602,7 @@ public final class ClanManager {
}
}
if (out.length() == 0) {
if (out.isEmpty()) {
out = lang("none", player);
}
@@ -674,7 +673,7 @@ public final class ClanManager {
out += ChatColor.WHITE + lang("weapon.A", player) + headColor + count;
}
if (out.length() == 0) {
if (out.isEmpty()) {
out = lang("none", player);
}
@@ -1,6 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.tcoded.folialib.wrapper.task.WrappedTask;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
@@ -15,6 +14,7 @@ import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -32,7 +32,7 @@ public class ProtectionManager {
private final SettingsManager settingsManager;
private final ClanManager clanManager;
private final Logger logger;
private final Map<War, WrappedTask> wars = new HashMap<>();
private final Map<War, BukkitTask> wars = new HashMap<>();
private final List<ProtectionProvider> providers = new ArrayList<>();
private LandProtection landProtection;
private final SimpleClans plugin;
@@ -46,7 +46,7 @@ public class ProtectionManager {
return;
}
//running on next tick, so all plugins are already loaded
plugin.getScheduler().runNextTick((task) -> registerProviders()) ;
Bukkit.getScheduler().runTask(plugin, this::registerProviders);
clearWars();
}
@@ -149,10 +149,11 @@ public class ProtectionManager {
return true;
}
private WrappedTask scheduleTask(@NotNull War war, int expirationTime) {
WrappedTask timeoutTask = null;
@Nullable
private BukkitTask scheduleTask(@NotNull War war, int expirationTime) {
BukkitTask timeoutTask = null;
if (expirationTime > 0) {
timeoutTask = plugin.getScheduler().runLater(() -> new WarTimeoutTask(war), expirationTime);
timeoutTask = Bukkit.getScheduler().runTaskLater(plugin, new WarTimeoutTask(war), expirationTime);
}
return timeoutTask;
}
@@ -161,12 +162,12 @@ public class ProtectionManager {
if (expirationTime < 1) {
return;
}
for (Map.Entry<War, WrappedTask> entry : wars.entrySet()) {
for (Map.Entry<War, BukkitTask> entry : wars.entrySet()) {
War war = entry.getKey();
if (!war.getClans().contains(clan)) {
continue;
}
WrappedTask task = entry.getValue();
BukkitTask task = entry.getValue();
if (task != null && !task.isCancelled()) {
task.cancel();
}
@@ -442,21 +442,26 @@ public final class RequestManager {
* Starts the task that asks for the votes of all requests
*/
public void askerTask() {
plugin.getScheduler().runTimerAsync(() -> {
for (Iterator<Map.Entry<String, Request>> iter = requests.entrySet().iterator(); iter.hasNext(); ) {
Request req = iter.next().getValue();
if (req == null) {
continue;
}
new BukkitRunnable() {
if (req.reachedRequestLimit()) {
iter.remove();
}
@Override
public void run() {
for (Iterator<Map.Entry<String, Request>> iter = requests.entrySet().iterator(); iter.hasNext(); ) {
Request req = iter.next().getValue();
ask(req);
req.incrementAskCount();
if (req == null) {
continue;
}
if (req.reachedRequestLimit()) {
iter.remove();
}
ask(req);
req.incrementAskCount();
}
}
}, 0, plugin.getSettingsManager().getSeconds(REQUEST_FREQUENCY));
}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getSeconds(REQUEST_FREQUENCY));
}
/**
@@ -483,6 +488,6 @@ public final class RequestManager {
}
}
plugin.getScheduler().runNextTick((task) -> Bukkit.getPluginManager().callEvent(new RequestEvent(req)));
Bukkit.getScheduler().runTask(plugin, () -> Bukkit.getPluginManager().callEvent(new RequestEvent(req)));
}
}
@@ -3,17 +3,22 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.logging.Level;
import java.util.concurrent.ConcurrentHashMap;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType;
@@ -30,6 +35,7 @@ public final class SettingsManager {
private final FileConfiguration config;
private final File configFile;
private final Map<Class<? extends SCFrame>, FileConfiguration> frameConfigs = new ConcurrentHashMap<>();
public SettingsManager(SimpleClans plugin) {
this.plugin = plugin;
@@ -95,6 +101,7 @@ public final class SettingsManager {
SimpleClans.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
}
}
frameConfigs.clear();
save();
}
@@ -133,6 +140,30 @@ public final class SettingsManager {
return new Locale(language);
}
public FileConfiguration getConfig(Class<? extends SCFrame> clazz) {
return frameConfigs.computeIfAbsent(clazz, this::readConfig);
}
private FileConfiguration readConfig(Class<? extends SCFrame> clazz) {
String configPath = clazz.getName().replace("net.sacredlabyrinth.phaed.simpleclans.ui.", "")
.replace(".", File.separator) + ".yml";
File externalFile = new File(plugin.getDataFolder(), configPath);
InputStream resource = plugin.getResource(configPath);
YamlConfiguration config = YamlConfiguration.loadConfiguration(externalFile);
if (resource != null) {
YamlConfiguration defaults = YamlConfiguration.loadConfiguration(new InputStreamReader(resource));
config.setDefaults(defaults);
if (!externalFile.exists()) {
try {
defaults.save(externalFile);
} catch (IOException e) {
plugin.getLogger().log(Level.SEVERE, String.format("Error saving defaults to %s", configPath), e);
}
}
}
return config;
}
public List<Material> getItemList() {
List<Material> itemsList = new ArrayList<>();
for (String material : getStringList(ITEM_LIST)) {
@@ -718,7 +718,12 @@ public final class StorageManager {
*/
@Deprecated
public void updateClanAsync(final Clan clan) {
plugin.getScheduler().runAsync(task -> updateClan(clan));
new BukkitRunnable() {
@Override
public void run() {
updateClan(clan);
}
}.runTaskAsynchronously(plugin);
}
/**
@@ -727,7 +732,12 @@ public final class StorageManager {
* @param cp to update
*/
public void updatePlayerNameAsync(final @NotNull ClanPlayer cp) {
plugin.getScheduler().runAsync(task -> updatePlayerName(cp));
new BukkitRunnable() {
@Override
public void run() {
updatePlayerName(cp);
}
}.runTaskAsynchronously(plugin);
}
/**
@@ -1022,7 +1032,13 @@ public final class StorageManager {
* @param callback the callback
*/
public void getMostKilled(DataCallback<Map<String, Integer>> callback) {
plugin.getScheduler().runAsync(task -> callback.onResultReady(getMostKilled()));
new BukkitRunnable() {
@Override
public void run() {
callback.onResultReady(getMostKilled());
}
}.runTaskAsynchronously(plugin);
}
/**
@@ -1030,7 +1046,12 @@ public final class StorageManager {
*
*/
public void getKillsPerPlayer(final String playerName, final DataCallback<Map<String, Integer>> callback) {
plugin.getScheduler().runAsync(task -> callback.onResultReady(getKillsPerPlayer(playerName)));
new BukkitRunnable() {
@Override
public void run() {
callback.onResultReady(getKillsPerPlayer(playerName));
}
}.runTaskAsynchronously(plugin);
}
/**
@@ -1,5 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import io.papermc.lib.PaperLib;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanPlayerTeleportEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
@@ -79,7 +80,7 @@ public final class TeleportManager {
}
public void teleportToHome(@NotNull Player player, @NotNull Location destination, @NotNull String clanName) {
plugin.getScheduler().teleportAsync(player, getSafe(destination), PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> {
PaperLib.teleportAsync(player, getSafe(destination), PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> {
if (result) {
ChatBlock.sendMessage(player, AQUA + lang("now.at.homebase", player, clanName));
} else {
@@ -150,7 +151,7 @@ public final class TeleportManager {
}
private void startCounter() {
plugin.getScheduler().runTimer(() -> {
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
waitingPlayers.values().removeIf(ts -> ts.getPlayer() == null);
for (Iterator<TeleportState> iter = waitingPlayers.values().iterator(); iter.hasNext(); ) {
TeleportState state = iter.next();
@@ -174,7 +175,7 @@ public final class TeleportManager {
state.setProcessing(false);
}
}, 0, 20);
}, 0, 20L);
}
private void teleport(TeleportState state) {
@@ -17,16 +17,14 @@ import net.sacredlabyrinth.phaed.simpleclans.proxy.adapters.SCMessageAdapter;
import net.sacredlabyrinth.phaed.simpleclans.proxy.listeners.MessageListener;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class BungeeManager implements ProxyManager, PluginMessageListener {
@@ -37,15 +35,12 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
private static final String CHAT_CHANNEL = "Chat";
private static final String BROADCAST = "Broadcast";
private static final String MESSAGE = "Message";
private static final String VERSION = "v1";
private static final Pattern SUBCHANNEL_PATTERN =
Pattern.compile("SimpleClans\\|(?<subchannel>\\w+)\\|(?<version>v\\d+)\\|(?<server>.+)");
private final SimpleClans plugin;
private final Gson gson;
private final List<String> onlinePlayers = new ArrayList<>();
private String serverName = "";
private final Set<String> unsupportedChannels = new HashSet<>();
private final Set<String> unknownChannels = new HashSet<>();
public BungeeManager(SimpleClans plugin) {
this.plugin = plugin;
@@ -59,53 +54,35 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
}
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "BungeeCord");
Bukkit.getMessenger().registerIncomingPluginChannel(plugin, "BungeeCord", this);
plugin.getScheduler().runTimer(this::requestPlayerList, 0, 60 * 20);
Bukkit.getScheduler().runTaskTimer(plugin, this::requestPlayerList, 0, 60 * 20);
requestServerName();
}
@SuppressWarnings("UnstableApiUsage")
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte[] data) {
ByteArrayDataInput dataInput = ByteStreams.newDataInput(data);
String subChannel = dataInput.readUTF();
if (unsupportedChannels.contains(subChannel)) {
ByteArrayDataInput input = ByteStreams.newDataInput(data);
String subChannel = input.readUTF();
if (unknownChannels.contains(subChannel)) {
return;
}
SimpleClans.debug("Message received, sub-channel: " + subChannel);
try {
String serverName = null;
String className = subChannel;
String version = null;
Matcher matcher = SUBCHANNEL_PATTERN.matcher(subChannel);
if (matcher.find()) {
serverName = matcher.group("server");
className = matcher.group("subchannel");
version = matcher.group("version");
}
Class<?> clazz = Class.forName("net.sacredlabyrinth.phaed.simpleclans.proxy.listeners." + className);
Class<?> clazz = Class.forName("net.sacredlabyrinth.phaed.simpleclans.proxy.listeners." + subChannel);
MessageListener listener = (MessageListener) clazz.getConstructor(BungeeManager.class).newInstance(this);
if (listener.isBungeeSubchannel()) {
listener.accept(dataInput); //uses the original data
return;
}
if (!VERSION.equals(version)) {
plugin.getLogger().severe(String.format("Unsupported channel (%s), expected version: %s", subChannel, VERSION));
unsupportedChannels.add(subChannel);
return;
String serverName = null;
if (!listener.isBungeeSubchannel()) {
serverName = input.readUTF();
}
if (serverName != null && !isServerAllowed(serverName)) {
SimpleClans.debug(String.format("Server not allowed: %s", serverName));
return;
}
byte[] messageBytes = new byte[dataInput.readShort()];
dataInput.readFully(messageBytes);
final ByteArrayDataInput message = ByteStreams.newDataInput(messageBytes);
listener.accept(message); // uses the internal data
listener.accept(input);
SimpleClans.debug("Message processed");
} catch (ClassNotFoundException e) {
SimpleClans.debug(String.format("Unknown channel: %s", subChannel));
unsupportedChannels.add(subChannel);
} catch (Exception ex) {
unknownChannels.add(subChannel);
} catch (ReflectiveOperationException ex) {
plugin.getLogger().log(Level.SEVERE, String.format("Error processing channel %s", subChannel), ex);
}
}
@@ -143,7 +120,7 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
@Override
public void sendMessage(SCMessage message) {
forwardToOnlineServers(CHAT_CHANNEL, gson.toJson(message));
forwardPluginMessage(CHAT_CHANNEL, gson.toJson(message), false);
}
@Override
@@ -168,27 +145,43 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
}
private void sendBroadcast(@NotNull String message) {
forwardToOnlineServers(BROADCAST, message);
forwardPluginMessage(BROADCAST, message, false);
}
@SuppressWarnings("UnstableApiUsage")
private void sendPrivateMessage(@NotNull String playerName, @NotNull String message) {
if (!isChannelRegistered()) {
return;
}
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("Forward");
output.writeUTF("ONLINE");
output.writeUTF(MESSAGE);
output.writeUTF(serverName);
output.writeUTF(playerName);
output.writeUTF(message);
sendOnBungeeChannel(output);
}
@Override
public void sendDelete(Clan clan) {
forwardToAllServers(DELETE_CLAN_CHANNEL, clan.getTag());
forwardPluginMessage(DELETE_CLAN_CHANNEL, clan.getTag());
}
@Override
public void sendDelete(ClanPlayer cp) {
forwardToAllServers(DELETE_CLANPLAYER_CHANNEL, cp.getUniqueId().toString());
forwardPluginMessage(DELETE_CLANPLAYER_CHANNEL, cp.getUniqueId().toString());
}
@Override
public void sendUpdate(Clan clan) {
forwardToAllServers(UPDATE_CLAN_CHANNEL, gson.toJson(clan));
forwardPluginMessage(UPDATE_CLAN_CHANNEL, gson.toJson(clan));
}
@Override
public void sendUpdate(ClanPlayer cp) {
forwardToAllServers(UPDATE_CLANPLAYER_CHANNEL, gson.toJson(cp));
forwardPluginMessage(UPDATE_CLANPLAYER_CHANNEL, gson.toJson(cp));
}
public SimpleClans getPlugin() {
@@ -212,60 +205,40 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
}
private void requestServerName() {
plugin.getScheduler().runTimer(task -> {
if (!serverName.isEmpty()) {
task.cancel();
return;
}
Bukkit.getOnlinePlayers().stream().findFirst().ifPresent(player -> {
@SuppressWarnings("UnstableApiUsage")
Listener listener = new Listener() {
@SuppressWarnings("UnstableApiUsage")
@EventHandler
void on(PlayerJoinEvent event) {
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("GetServer");
player.sendPluginMessage(plugin, "BungeeCord", output.toByteArray());
});
}, 0L, 20L);
Bukkit.getScheduler().runTask(plugin, () -> {
event.getPlayer().sendPluginMessage(plugin, "BungeeCord", output.toByteArray());
PlayerJoinEvent.getHandlerList().unregister(this); //only needed once
});
}
};
Bukkit.getPluginManager().registerEvents(listener, plugin);
}
private String createSubchannelName(String subchannel) {
return String.format("SimpleClans|%s|%s|%s", subchannel, VERSION, serverName);
private void forwardPluginMessage(final String subChannel, final String message) {
forwardPluginMessage(subChannel, message, true);
}
@SuppressWarnings("UnstableApiUsage")
private void sendPrivateMessage(@NotNull String playerName, @NotNull String message) {
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF(playerName);
output.writeUTF(message);
forwardPluginMessage(MESSAGE, output, false);
}
@SuppressWarnings("UnstableApiUsage")
private void forwardToAllServers(final String subChannel, final String message) {
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF(message);
forwardPluginMessage(subChannel, output, true);
}
@SuppressWarnings("UnstableApiUsage")
private void forwardToOnlineServers(final String subChannel, final String message) {
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF(message);
forwardPluginMessage(subChannel, output, false);
}
@SuppressWarnings("UnstableApiUsage")
private void forwardPluginMessage(final String subChannel, final ByteArrayDataOutput message, final boolean all) {
private void forwardPluginMessage(final String subChannel, final String message, final boolean all) {
SimpleClans.debug(String.format("Forwarding message, channel %s, message %s, all %s", subChannel, message, all));
if (!isChannelRegistered()) {
SimpleClans.debug("Not registered");
return;
}
String target = all ? "ALL" : "ONLINE";
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("Forward");
output.writeUTF(all ? "ALL" : "ONLINE");
output.writeUTF(createSubchannelName(subChannel));
output.writeShort(message.toByteArray().length);
output.write(message.toByteArray());
output.writeUTF(target);
output.writeUTF(subChannel);
output.writeUTF(serverName);
output.writeUTF(message);
sendOnBungeeChannel(output);
}
@@ -275,11 +248,8 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
player.sendPluginMessage(plugin, "BungeeCord", output.toByteArray()));
}
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
private boolean isChannelRegistered() {
boolean registered = Bukkit.getMessenger().isOutgoingChannelRegistered(plugin, "BungeeCord");
SimpleClans.debug(String.format("BungeeCord channel registered: %s", registered));
return registered;
return Bukkit.getMessenger().isOutgoingChannelRegistered(plugin, "BungeeCord");
}
}
@@ -1,7 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.proxy.listeners;
import com.google.common.io.ByteArrayDataInput;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.proxy.BungeeManager;
public class GetServer extends MessageListener {
@@ -14,7 +13,6 @@ public class GetServer extends MessageListener {
public void accept(ByteArrayDataInput data) {
String name = data.readUTF();
bungee.setServerName(name);
SimpleClans.debug(String.format("Server name: %s", name));
}
@Override
@@ -38,7 +38,6 @@ public interface DBCore {
/**
* Execute a select statement
*
* @param query the query
* @return the result set or null if the query failed
*/
@@ -53,7 +52,6 @@ public interface DBCore {
/**
* Execute a statement
*
* @param query the query
* @return true if the statement was executed
*/
@@ -69,7 +67,6 @@ public interface DBCore {
/**
* Check whether a table exists
*
* @param table the table
* @return true if the table exists
*/
@@ -86,7 +83,7 @@ public interface DBCore {
/**
* Check whether a column exists
*
* @param table the table
* @param table the table
* @param column the column
* @return true if the column exists
*/
@@ -115,7 +112,7 @@ public interface DBCore {
}
};
if (plugin.getSettingsManager().is(ConfigField.PERFORMANCE_USE_THREADS)) {
plugin.getScheduler().runLaterAsync(executeUpdate, 0);
Bukkit.getScheduler().runTaskAsynchronously(plugin, executeUpdate);
} else {
executeUpdate.run();
}
@@ -35,8 +35,8 @@ public class CollectFeeTask extends BukkitRunnable {
int hour = sm.getInt(TASKS_COLLECT_FEE_HOUR);
int minute = sm.getInt(TASKS_COLLECT_FEE_MINUTE);
long delay = Helper.getDelayTo(hour, minute);
plugin.getScheduler().runTimer(this, delay * 20, 86400 * 20);
this.runTaskTimer(plugin, delay * 20, 86400 * 20);
}
/**
@@ -35,7 +35,7 @@ public class CollectUpkeepTask extends BukkitRunnable {
int minute = settingsManager.getInt(TASKS_COLLECT_UPKEEP_MINUTE);
long delay = Helper.getDelayTo(hour, minute);
plugin.getScheduler().runTimerAsync(this, delay * 20, 86400 * 20);
this.runTaskTimer(plugin, delay * 20, 86400 * 20);
}
/**
@@ -27,7 +27,7 @@ public class PlayerHeadCacheTask extends BukkitRunnable {
*/
public void start() {
int hour = 3600;
plugin.getScheduler().runTimerAsync(this, 0, (hour + 60) * 20);
this.runTaskTimerAsynchronously(plugin, 0, (hour + 60) * 20);
}
@Override
@@ -19,7 +19,7 @@ public class SaveDataTask extends BukkitRunnable {
*/
public void start() {
long interval = plugin.getSettingsManager().getMinutes(PERFORMANCE_SAVE_INTERVAL);
plugin.getScheduler().runTimerAsync(this, interval, interval);
runTaskTimerAsynchronously(plugin, interval, interval);
}
@Override
@@ -31,7 +31,8 @@ public class UpkeepWarningTask extends BukkitRunnable {
int hour = sm.getInt(TASKS_COLLECT_UPKEEP_WARNING_HOUR);
int minute = sm.getInt(TASKS_COLLECT_UPKEEP_WARNING_MINUTE);
long delay = Helper.getDelayTo(hour, minute);
plugin.getScheduler().runTimer(this, delay * 20, 86400 * 20);
this.runTaskTimer(plugin, delay * 20, 86400 * 20);
}
/**
@@ -25,7 +25,6 @@ import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.COMMANDS_CLAN;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
/**
*
@@ -92,7 +91,7 @@ public class InventoryController implements Listener {
}
Runnable finalListener = listener;
SimpleClans.getInstance().getScheduler().runAtEntity(entity, task -> {
Bukkit.getScheduler().runTask(SimpleClans.getInstance(), () -> {
ItemStack currentItem = event.getCurrentItem();
if (currentItem == null) return;
@@ -178,17 +177,21 @@ public class InventoryController implements Listener {
SimpleClans plugin = SimpleClans.getInstance();
String baseCommand = plugin.getSettingsManager().getString(COMMANDS_CLAN);
String finalCommand = String.format("%s %s ", baseCommand, subcommand) + String.join(" ", args);
plugin.getScheduler().runAtEntity(player, task -> {
player.performCommand(finalCommand);
if (!update) {
player.closeInventory();
} else {
SCFrame currentFrame = frames.get(player.getUniqueId());
if (currentFrame instanceof ConfirmationFrame) {
currentFrame = currentFrame.getParent();
new BukkitRunnable() {
@Override
public void run() {
player.performCommand(finalCommand);
if (!update) {
player.closeInventory();
} else {
SCFrame currentFrame = frames.get(player.getUniqueId());
if (currentFrame instanceof ConfirmationFrame) {
currentFrame = currentFrame.getParent();
}
InventoryDrawer.open(currentFrame);
}
InventoryDrawer.open(currentFrame);
}
});
}.runTask(plugin);
}
}
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.FrameOpenEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PostComponentsCreationEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.WordWrapper;
import org.bukkit.Bukkit;
@@ -35,19 +36,19 @@ public class InventoryDrawer {
return;
}
FrameOpenEvent event = new FrameOpenEvent(frame.getViewer(), frame);
FrameOpenEvent event = new FrameOpenEvent(frame.getViewer(), frame);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
OPENING.put(uuid, frame);
plugin.getScheduler().runAsync(task -> {
Inventory inventory = prepareInventory(frame);
}
OPENING.put(uuid, frame);
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
Inventory inventory = prepareInventory(frame);
if (!frame.equals(OPENING.get(uuid))) {
return;
}
plugin.getScheduler().runAtEntity(frame.getViewer(), syncTask -> {
Bukkit.getScheduler().runTask(plugin, () -> {
frame.getViewer().openInventory(inventory);
InventoryController.register(frame);
OPENING.remove(uuid);
@@ -70,6 +71,7 @@ public class InventoryDrawer {
}
/**
*
* @deprecated use {@link InventoryDrawer#open(SCFrame)}
*/
@Deprecated
@@ -81,6 +83,7 @@ public class InventoryDrawer {
frame.clear();
try {
frame.createComponents();
Bukkit.getPluginManager().callEvent(new PostComponentsCreationEvent(frame));
} catch (NoSuchFieldError ex) {
runHelpCommand(frame.getViewer());
return;
@@ -92,7 +95,7 @@ public class InventoryDrawer {
return;
}
for (SCComponent c : frame.getComponents()) {
if (c.getSlot() >= frame.getSize()) {
if (c.getSlot() >= frame.getSize() || !c.isEnabled()) {
continue;
}
checkLorePermission(frame, c);
@@ -121,7 +124,7 @@ public class InventoryDrawer {
}
private static void runHelpCommand(@NotNull Player player) {
plugin.getServer().getConsoleSender().sendMessage(lang("gui.not.supported"));
Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getConsoleSender().sendMessage(lang("gui.not.supported")));
SettingsManager settingsManager = plugin.getSettingsManager();
settingsManager.set(ENABLE_GUI, false);
String commandClan = settingsManager.getString(COMMANDS_CLAN);
@@ -147,10 +150,10 @@ public class InventoryDrawer {
}
private static boolean hasPermission(@NotNull Player viewer, @NotNull Object permission) {
if (permission instanceof String) {
return plugin.getPermissionsManager().has(viewer, (String) permission);
}
return plugin.getPermissionsManager().has(viewer, (RankPermission) permission, false);
}
if (permission instanceof String) {
return plugin.getPermissionsManager().has(viewer, (String) permission);
}
return plugin.getPermissionsManager().has(viewer, (RankPermission) permission, false);
}
}
@@ -0,0 +1,62 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.OverridingMethodsMustInvokeSuper;
public abstract class PageableFrame<T> extends SCFrame {
public PageableFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
super(parent, viewer);
}
@Override
@OverridingMethodsMustInvokeSuper
public void createComponents() {
super.createComponents();
SCComponent nextPage = new SCComponentImpl.Builder(getConfig(), "next_page")
.withViewer(getViewer())
.withDisplayNameKey("gui.next.page.title").build();
setOneTimeListener(nextPage, this::nextPage, getPaginator().hasNextPage());
add(nextPage);
SCComponent previousPage = new SCComponentImpl.Builder(getConfig(), "previous_page")
.withViewer(getViewer())
.withDisplayNameKey("gui.previous.page.title").build();
setOneTimeListener(previousPage, this::previousPage, getPaginator().hasPreviousPage());
add(previousPage);
}
public abstract Paginator<T> getPaginator();
public int getPageSize() {
return getConfig().getIntegerList("components.list.slots").size();
}
private void nextPage() {
if (getPaginator().nextPage()) {
update();
}
}
private void previousPage() {
if (getPaginator().previousPage()) {
update();
}
}
private void setOneTimeListener(final SCComponent component, final Runnable runnable, boolean pageCheck) {
if (!pageCheck) {
return;
}
component.setListener(ClickType.LEFT, () -> {
component.setListener(ClickType.LEFT, null);
runnable.run();
});
}
}
@@ -19,6 +19,7 @@ import java.util.Set;
*/
public abstract class SCComponent {
private boolean enabled = true;
private final HashMap<ClickType, Runnable> listeners = new HashMap<>();
private final HashMap<ClickType, Object> permissions = new HashMap<>();
private final Set<ClickType> verified = new HashSet<>();
@@ -30,6 +31,14 @@ public abstract class SCComponent {
public abstract int getSlot();
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Nullable
public ItemMeta getItemMeta() {
return getItem().getItemMeta();
@@ -1,15 +1,25 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class SCComponentImpl extends SCComponent {
@@ -45,6 +55,7 @@ public class SCComponentImpl extends SCComponent {
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
item.setItemMeta(itemMeta);
}
checkSlot(slot);
this.slot = slot;
}
@@ -58,34 +69,66 @@ public class SCComponentImpl extends SCComponent {
return slot;
}
private static void checkMaterial(String material) {
if (material == null || material.isEmpty()) {
throw new IllegalStateException("material cannot be null or empty");
}
}
private static void checkSlot(int slot) {
if (slot < 0) {
throw new IllegalStateException("slot must be >= 0 and < 54");
}
}
public static class Builder {
private final SCComponentImpl component = new SCComponentImpl();
private boolean enabled;
private final ItemStack item;
private String displayName;
private int slot;
private @Nullable List<String> lore;
private Player viewer;
public Builder(@NotNull XMaterial material) {
this(material.parseItem());
}
@SuppressWarnings("unused")
public Builder(@NotNull Material material) {
component.item = new ItemStack(material);
this(new ItemStack(material));
}
public Builder(@Nullable ItemStack item) {
if (item == null) {
item = new ItemStack(Material.STONE);
}
component.item = item;
this.item = item;
}
public Builder(FileConfiguration config, String id) {
String materialName = config.getString("components." + id + ".material");
checkMaterial(materialName);
item = Objects.requireNonNull(XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE).parseItem());
slot = config.getInt("components." + id + ".slot");
checkSlot(slot);
enabled = config.getBoolean("components." + id + ".enabled");
}
public Builder withViewer(@NotNull Player player) {
this.viewer = player;
return this;
}
public Builder withDisplayName(@Nullable String displayName) {
ItemMeta itemMeta = component.getItemMeta();
if (itemMeta != null) {
itemMeta.setDisplayName(displayName);
component.setItemMeta(itemMeta);
}
this.displayName = displayName;
return this;
}
public Builder withDisplayNameKey(@NotNull String key, Object... args) {
if (viewer == null) throw new IllegalStateException("viewer is null");
return withDisplayName(lang(key, viewer, args));
}
public Builder withLore(@Nullable List<String> lore) {
this.lore = lore;
return this;
@@ -99,18 +142,154 @@ public class SCComponentImpl extends SCComponent {
return this;
}
public Builder withLoreKey(@NotNull String key, Object... args) {
if (viewer == null) throw new IllegalStateException("viewer is null");
return withLoreLine(lang(key, viewer, args));
}
public Builder withSlot(int slot) {
component.slot = slot;
checkSlot(slot);
this.slot = slot;
return this;
}
public SCComponent build() {
ItemMeta itemMeta = component.getItemMeta();
SCComponentImpl component = new SCComponentImpl();
component.item = item;
component.setEnabled(enabled);
ItemMeta itemMeta = item.getItemMeta();
if (itemMeta != null) {
itemMeta.setLore(lore);
itemMeta.setDisplayName(displayName);
component.setItemMeta(itemMeta);
}
component.slot = slot;
return component;
}
}
public static class ListBuilder<T> {
private final boolean enabled;
private final XMaterial material;
private Function<T, ItemStack> item;
private Function<T, OfflinePlayer> owningPlayer;
private final List<Integer> slots;
private final List<T> elements;
private Player viewer;
private Function<T, String> displayName = (t) -> null;
private final List<Function<T, String>> lore = new ArrayList<>();
private final Map<ClickType, Function<T, Runnable>> listeners = new HashMap<>();
private final Map<ClickType, String> bukkitPermissions = new HashMap<>();
private final Map<ClickType, RankPermission> rankPermissions = new HashMap<>();
private final Set<ClickType> confirmationRequired = new HashSet<>();
private String lorePermission;
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id, @NotNull List<T> elements) {
String materialName = config.getString("components." + id + ".material");
checkMaterial(materialName);
material = XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE);
item = (t) -> Objects.requireNonNull(material.parseItem());
slots = config.getIntegerList("components." + id + ".slots").stream().filter(i -> i >= 0 && i < 54)
.collect(Collectors.toList());
this.elements = elements;
enabled = config.getBoolean("components." + id + ".enabled");
}
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id) {
this(config, id, new ArrayList<>());
slots.forEach(e -> elements.add(null));
}
public ListBuilder<T> withItem(@NotNull Function<T, ItemStack> item) {
this.item = (t) -> {
ItemStack result = item.apply(t);
return result == null ? material.parseItem() : result;
};
return this;
}
public ListBuilder<T> withViewer(@NotNull Player player) {
viewer = player;
return this;
}
@SafeVarargs
public final ListBuilder<T> withDisplayNameKey(@NotNull String key, Function<T, Object>... args) {
displayName = (t) -> processLang(key, t, args);
return this;
}
@SafeVarargs
public final ListBuilder<T> withLoreKey(@NotNull String key, Function<T, Object>... args) {
lore.add((t) -> processLang(key, t, args));
return this;
}
public final ListBuilder<T> withLoreLine(Function<T, String> line) {
lore.add(line);
return this;
}
public final ListBuilder<T> withOwningPlayer(Function<T, OfflinePlayer> owningPlayer) {
this.owningPlayer = owningPlayer;
return this;
}
@NotNull
private String processLang(@NotNull String key, T t, Function<T, Object>[] args) {
Object[] processedArgs = Arrays.stream(args).map(func -> func.apply(t)).toArray();
if (viewer == null) throw new IllegalStateException("viewer is null");
return lang(key, viewer, processedArgs);
}
public ListBuilder<T> withLorePermission(@Nullable String permission) {
lorePermission = permission;
return this;
}
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable String permission) {
bukkitPermissions.put(click, permission);
listeners.put(click, runnable);
return this;
}
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable RankPermission permission) {
rankPermissions.put(click, permission);
listeners.put(click, runnable);
return this;
}
public ListBuilder<T> withConfirmationRequired(@NotNull ClickType click) {
confirmationRequired.add(click);
return this;
}
public List<SCComponent> build() {
List<SCComponent> components = new ArrayList<>();
for (int i = 0; i < elements.size() && i < slots.size(); i++) {
T t = elements.get(i);
SCComponentImpl component = new SCComponentImpl();
component.setEnabled(enabled);
component.item = item.apply(t);
component.slot = slots.get(i);
ItemMeta itemMeta = component.getItemMeta();
if (itemMeta != null) {
itemMeta.setDisplayName(displayName.apply(t));
List<String> processedLore = lore.stream().map(f -> f.apply(t)).collect(Collectors.toList());
itemMeta.setLore(processedLore);
if (itemMeta instanceof SkullMeta && owningPlayer != null) {
Components.setOwningPlayer(((SkullMeta) itemMeta), owningPlayer.apply(t));
}
component.setItemMeta(itemMeta);
}
component.setLorePermission(lorePermission);
listeners.forEach((click, fn) -> component.setListener(click, fn.apply(t)));
bukkitPermissions.forEach(component::setPermission);
rankPermissions.forEach(component::setPermission);
confirmationRequired.forEach(component::setConfirmationRequired);
components.add(component);
}
return components;
}
}
}
@@ -1,12 +1,19 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.OverridingMethodsMustInvokeSuper;
import java.util.Collection;
/**
*
* @author RoinujNosde
@@ -17,7 +24,7 @@ public abstract class SCFrame {
private final SCFrame parent;
private final Player viewer;
private final Set<SCComponent> components = ConcurrentHashMap.newKeySet();
public SCFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
this.parent = parent;
this.viewer = viewer;
@@ -36,9 +43,27 @@ public abstract class SCFrame {
return parent;
}
public abstract int getSize();
public int getSize() {
return getConfig().getInt("rows", 6) * 9;
}
public abstract void createComponents();
@OverridingMethodsMustInvokeSuper
public void createComponents() {
SCComponent back = new SCComponentImpl.Builder(getConfig(), "back")
.withViewer(getViewer())
.withDisplayNameKey("gui.back.title").build();
back.setListener(ClickType.LEFT, () -> InventoryDrawer.open(getParent()));
add(back);
ConfigurationSection decorSection = getConfig().getConfigurationSection("components.decorations");
if (decorSection != null) {
for (String key : decorSection.getKeys(false)) {
addAll(new SCComponentImpl.ListBuilder<>(getConfig(), "decorations." + key)
.withViewer(getViewer())
.withDisplayNameKey(" ").build());
}
}
}
@Nullable
public SCComponent getComponent(int slot) {
@@ -51,18 +76,34 @@ public abstract class SCFrame {
}
public void add(@NotNull SCComponent c) {
SCComponent old = getComponent(c.getSlot());
if (old != null) {
components.remove(old);
}
components.add(c);
}
public void addAll(@NotNull Collection<SCComponent> collection) {
collection.forEach(this::add);
}
public void clear() {
components.clear();
}
public void update() {
InventoryDrawer.open(this);
}
@NotNull
public Set<SCComponent> getComponents() {
return components;
}
protected FileConfiguration getConfig() {
return SimpleClans.getInstance().getSettingsManager().getConfig(getClass());
}
@Override
public boolean equals(Object other) {
if (other instanceof SCFrame) {
@@ -1,6 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
@@ -10,77 +9,46 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddAllyFrame extends SCFrame {
private final List<Clan> notAllies;
private final Paginator paginator;
public class AddAllyFrame extends PageableFrame<Clan> {
private final Paginator<Clan> paginator;
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
notAllies = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, notAllies);
}
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
List<Clan> notAllies = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), notAllies);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withLoreKey("gui.add.ally.clan.lore")
.withListener(ClickType.LEFT, this::addAlly, RankPermission.ALLY_ADD)
.build();
addAll(list);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
private Runnable addAlly(Clan clan) {
return () -> InventoryController.runSubcommand(getViewer(), "ally add", false, clan.getTag());
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
Clan notRival = notAllies.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title", getViewer(), notRival.getColorTag(), notRival.getName()),
Collections.singletonList(lang("gui.add.ally.clan.lore", getViewer())), XMaterial.CYAN_BANNER,
slot);
@Override
public @NotNull String getTitle() {
return lang("gui.add.ally.title", getViewer());
}
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"ally add", false, notRival.getTag()));
c.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.ally.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,23 +1,27 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddPermissionFrame extends SCFrame {
private final String[] availablePermissions;
private final Paginator paginator;
public class AddPermissionFrame extends PageableFrame<String> {
private final List<String> availablePermissions;
private final Paginator<String> paginator;
private final Rank rank;
public AddPermissionFrame(SCFrame parent, Player viewer, Rank rank) {
@@ -25,63 +29,38 @@ public class AddPermissionFrame extends SCFrame {
this.rank = rank;
Set<String> rankPerms = rank.getPermissions();
availablePermissions = Arrays.stream(Helper.fromPermissionArray()).filter(p -> !rankPerms.contains(p))
.toArray(String[]::new);
paginator = new Paginator(getSize() - 9, availablePermissions.length);
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), availablePermissions);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
String permission = availablePermissions[i];
SCComponent c = new SCComponentImpl(
lang("gui.add.permission.permission.title",getViewer(), permission),
Collections.singletonList(lang("gui.add.permission.permission.lore",getViewer())),
XMaterial.PAPER, slot);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"rank permissions add", true, rank.getName(), permission));
c.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(c);
slot++;
}
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.add.permission.permission.title", p -> p)
.withLoreKey("gui.add.permission.permission.lore")
.withListener(ClickType.LEFT, this::addPermission, "simpleclans.leader.rank.permissions.add")
.build();
addAll(list);
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
private Runnable addPermission(String permission) {
return () -> {
availablePermissions.remove(permission);
InventoryController.runSubcommand(getViewer(), "rank permissions add", true,
rank.getName(), permission);
};
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
@Override
public Paginator<String> getPaginator() {
return paginator;
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.permission.title",getViewer());
}
@Override
public int getSize() {
return 3 * 9;
return lang("gui.add.permission.title", getViewer());
}
}
@@ -1,6 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
@@ -10,79 +9,45 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddRivalFrame extends SCFrame {
public class AddRivalFrame extends PageableFrame<Clan> {
private final List<Clan> notRivals;
private final Paginator paginator;
private final Paginator<Clan> paginator;
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
notRivals = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, notRivals.size());
}
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
List<Clan> notRivals = plugin.getClanManager().getClans().stream().filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag())).collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), notRivals);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.add.rival.clan.lore")
.withListener(ClickType.LEFT, this::addRival, RankPermission.RIVAL_ADD)
.withConfirmationRequired(ClickType.LEFT).build();
addAll(list);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
private Runnable addRival(Clan clan) {
return () -> InventoryController.runSubcommand(getViewer(), "rival add", false, clan.getTag());
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
Clan notRival = notRivals.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title",getViewer(), notRival.getColorTag(), notRival.getName()),
Collections.singletonList(lang("gui.add.rival.clan.lore", getViewer())), XMaterial.RED_BANNER,
slot);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"rival add", false, notRival.getTag()));
c.setConfirmationRequired(ClickType.LEFT);
c.setPermission(ClickType.LEFT, RankPermission.RIVAL_ADD);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.rival.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.rival.title", getViewer());
}
}
@@ -1,94 +1,64 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AlliesFrame extends SCFrame {
private final SimpleClans plugin = SimpleClans.getInstance();
private final Paginator paginator;
private final List<String> allies;
private final Clan subject;
public class AlliesFrame extends PageableFrame<Clan> {
private final Paginator<Clan> paginator;
private final Clan subject;
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
this.subject = subject;
allies = subject.getAllies();
paginator = new Paginator(getSize() - 9, allies.size());
}
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
this.subject = subject;
ClanManager manager = SimpleClans.getInstance().getClanManager();
List<Clan> allies = subject.getAllies().stream().map(manager::getClan).filter(Objects::nonNull).collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), allies);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
@Override
public void createComponents() {
super.createComponents();
add(Components.getBackComponent(getParent(), 2, getViewer()));
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
.withViewer(getViewer())
.withDisplayNameKey("gui.allies.add.title")
.build();
add.setVerifiedOnly(ClickType.LEFT);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(add);
SCComponent add = new SCComponentImpl(lang("gui.allies.add.title",getViewer()), null,
XMaterial.CYAN_WOOL, 4);
add.setVerifiedOnly(ClickType.LEFT);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(add);
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.allies.clan.lore")
.withListener(ClickType.RIGHT, (clan) -> () -> InventoryController.runSubcommand(getViewer(),
"ally remove", false, clan.getTag()), RankPermission.ALLY_REMOVE)
.build();
addAll(list);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Clan clan = plugin.getClanManager().getClan(allies.get(i));
if (clan == null)
continue;
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title",getViewer(), clan.getColorTag(), clan.getName()),
Collections.singletonList(lang("gui.allies.clan.lore",getViewer())), XMaterial.CYAN_BANNER, slot);
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"ally remove", false, clan.getTag()));
c.setPermission(ClickType.RIGHT, RankPermission.ALLY_REMOVE);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.allies.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
@Override
public @NotNull String getTitle() {
return lang("gui.allies.title", getViewer());
}
}
@@ -1,31 +1,28 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SHOW_UNVERIFIED_ON_LIST;
public class ClanListFrame extends SCFrame {
public class ClanListFrame extends PageableFrame<Clan> {
private final List<Clan> clans;
private final Paginator paginator;
private final Paginator<Clan> paginator;
private final RankingNumberResolver<Clan, BigDecimal> rankingResolver;
public ClanListFrame(SCFrame parent, Player viewer) {
@@ -34,8 +31,8 @@ public class ClanListFrame extends SCFrame {
SettingsManager sm = plugin.getSettingsManager();
clans = plugin.getClanManager().getClans().stream()
.filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST)).collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, clans);
plugin.getClanManager().sortClansByKDR(clans);
paginator = new Paginator<>(getPageSize(), clans);
rankingResolver = new RankingNumberResolver<>(clans, c -> KDRFormat.toBigDecimal(c.getTotalKDR()), false,
sm.getRankingType());
@@ -43,57 +40,26 @@ public class ClanListFrame extends SCFrame {
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Clan clan = clans.get(i);
ItemStack banner = clan.getBanner() != null ? clan.getBanner() : XMaterial.BLACK_BANNER.parseItem();
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title", getViewer(), clan.getColorTag(), clan.getName()),
Arrays.asList(lang("gui.clanlist.clan.lore.position", getViewer(),
rankingResolver.getRankingNumber(clan)),
lang("gui.clanlist.clan.lore.kdr", getViewer(), KDRFormat.format(clan.getTotalKDR())),
lang("gui.clanlist.clan.lore.members", getViewer(), clan.getMembers().size())),
banner, slot);
c.setLorePermission("simpleclans.anyone.list");
add(c);
slot++;
}
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withItem(Clan::getBanner)
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.clanlist.clan.lore.position", rankingResolver::getRankingNumber)
.withLoreKey("gui.clanlist.clan.lore.kdr", clan -> KDRFormat.format(clan.getTotalKDR()))
.withLoreKey("gui.clanlist.clan.lore.members", clan -> clan.getMembers().size())
.withLorePermission("simpleclans.anyone.list").build();
addAll(list);
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
@Override
public @NotNull String getTitle() {
return lang("gui.clanlist.title",getViewer(), clans.size());
}
@Override
public int getSize() {
return 6 * 9;
return lang("gui.clanlist.title", getViewer(), clans.size());
}
}
@@ -12,6 +12,7 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -147,6 +148,7 @@ public class Components {
return c;
}
@Deprecated
public static SCComponent getBackComponent(@Nullable SCFrame parent, int slot, Player viewer) {
SCComponent back = new SCComponentImpl(lang("gui.back.title", viewer), null,
XMaterial.ARROW, slot);
@@ -154,11 +156,13 @@ public class Components {
return back;
}
@Deprecated
public static SCComponent getPanelComponent(int slot) {
return new SCComponentImpl(" ", null, XMaterial.GRAY_STAINED_GLASS_PANE, slot);
}
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
@Deprecated
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
if (!paginator.hasPreviousPage()) {
return getPanelComponent(slot);
}
@@ -168,7 +172,8 @@ public class Components {
return c;
}
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
@Deprecated
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
if (!paginator.hasNextPage()) {
return getPanelComponent(slot);
}
@@ -187,18 +192,23 @@ public class Components {
});
}
@SuppressWarnings("deprecation")
public static void setOwningPlayer(@NotNull ItemStack item, @NotNull OfflinePlayer player) {
SkullMeta itemMeta = (SkullMeta) item.getItemMeta();
if (itemMeta == null || player.getName() == null) {
if (player.getName() == null) {
return;
}
try {
itemMeta.setOwningPlayer(player);
} catch (NoSuchMethodError e) {
itemMeta.setOwner(player.getName());
ItemMeta itemMeta = item.getItemMeta();
if (itemMeta instanceof SkullMeta) {
setOwningPlayer((SkullMeta) itemMeta, player);
item.setItemMeta(itemMeta);
}
}
item.setItemMeta(itemMeta);
@SuppressWarnings("deprecation")
public static void setOwningPlayer(@NotNull SkullMeta skullMeta, @NotNull OfflinePlayer player) {
try {
skullMeta.setOwningPlayer(player);
} catch (NoSuchMethodError e) {
skullMeta.setOwner(player.getName());
}
}
}
@@ -1,13 +1,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.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
@@ -17,83 +13,63 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class CoordsFrame extends SCFrame {
public class CoordsFrame extends PageableFrame<ClanPlayer> {
private final List<ClanPlayer> allMembers;
private final Paginator paginator;
private final List<ClanPlayer> allMembers;
private final Paginator<ClanPlayer> paginator;
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
paginator = new Paginator(getSize() - 9, allMembers);
}
paginator = new Paginator<>(getPageSize(), allMembers);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
@Override
public void createComponents() {
super.createComponents();
add(Components.getBackComponent(getParent(), 2, getViewer()));
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.playerdetails.player.title", ClanPlayer::getName)
.withLoreKey("gui.coords.player.lore.distance", cp -> {
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
return (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
}).withLoreKey("gui.coords.player.lore.coords", this::getBlocks)
.withLoreKey("gui.coords.player.lore.world", cp ->
Objects.requireNonNull(cp.toPlayer()).getWorld().getName())
.withOwningPlayer(ClanPlayer::toPlayer)
.withListener(ClickType.LEFT, cp -> () -> {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer));
}, RankPermission.COORDS).build();
addAll(list);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
ClanPlayer cp = allMembers.get(i);
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
int distance = (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
private int[] getBlocks(ClanPlayer cp) {
int[] blocks = new int[3];
Location location = Objects.requireNonNull(cp.toPlayer()).getLocation();
blocks[0] = location.getBlockX();
blocks[1] = location.getBlockY();
blocks[2] = location.getBlockZ();
return blocks;
}
SCComponent c = new SCComponentImpl(lang("gui.playerdetails.player.title",getViewer(), cp.getName()),
Arrays.asList(lang("gui.coords.player.lore.distance",getViewer(), distance),
lang("gui.coords.player.lore.coords",getViewer(), cpLoc.getBlockX(),
cpLoc.getBlockY(), cpLoc.getBlockZ()),
lang("gui.coords.player.lore.world",getViewer(), Objects.requireNonNull(cpLoc.getWorld()).getName())),
XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
c.setLorePermission(RankPermission.COORDS);
add(c);
slot++;
}
}
@Override
public Paginator<ClanPlayer> getPaginator() {
return paginator;
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
@Override
@NotNull
public String getTitle() {
return lang("gui.coords.title", getViewer());
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
@NotNull
public String getTitle() {
return lang("gui.coords.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,19 +1,20 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -21,87 +22,53 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_INVITE_PRICE;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_PURCHASE_CLAN_INVITE;
public class InviteFrame extends SCFrame {
public class InviteFrame extends PageableFrame<Player> {
private final Paginator paginator;
private final SimpleClans plugin;
private final List<Player> players;
private final Paginator<Player> paginator;
private final SimpleClans plugin;
public InviteFrame(SCFrame parent, Player viewer) {
super(parent, viewer);
this.plugin = SimpleClans.getInstance();
ClanManager cm = plugin.getClanManager();
players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, players.size());
public InviteFrame(SCFrame parent, Player viewer) {
super(parent, viewer);
this.plugin = SimpleClans.getInstance();
ClanManager cm = plugin.getClanManager();
List<Player> players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), players);
}
}
@Override
public void createComponents() {
super.createComponents();
SettingsManager settings = plugin.getSettingsManager();
double price = settings.is(ECONOMY_PURCHASE_CLAN_INVITE) ? settings.getDouble(ECONOMY_INVITE_PRICE) : 0;
@Override
public void createComponents() {
addHeader();
ListBuilder<Player> builder = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.invite.player.title", Player::getName)
.withOwningPlayer(p -> Bukkit.getOfflinePlayer(p.getUniqueId()))
.withListener(ClickType.LEFT, this::invite, RankPermission.INVITE);
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
if (price != 0) {
String formattedPrice = CurrencyFormat.format(price);
builder.withLoreKey("gui.invite.player.price.lore", p -> formattedPrice);
}
builder.withLoreKey("gui.invite.player.lore")
;
Player player = players.get(i);
SCComponent c = createPlayerComponent(player, slot);
add(c);
slot++;
}
}
}
@NotNull
private SCComponent createPlayerComponent(@NotNull Player player, int slot) {
double price = plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE) ? plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE) : 0;
List<String> lore = new ArrayList<>();
if (price != 0) lore.add(lang("gui.invite.player.price.lore", getViewer(), CurrencyFormat.format(price)));
lore.add(lang("gui.invite.player.lore", getViewer()));
private Runnable invite(Player player) {
return () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName());
}
SCComponent c = new SCComponentImpl(
lang("gui.invite.player.title", getViewer(), player.getName()), lore, XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName()));
c.setPermission(ClickType.LEFT, RankPermission.INVITE);
return c;
}
@Override
public Paginator<Player> getPaginator() {
return paginator;
}
public void addHeader() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
@Override
public @NotNull String getTitle() {
return lang("gui.invite.title", getViewer());
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.invite.title",getViewer());
}
@Override
public int getSize() {
return 3 * 9;
}
}
@@ -1,38 +1,32 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class LanguageSelectorFrame extends SCFrame {
public class LanguageSelectorFrame extends PageableFrame<Locale> {
private final ClanPlayer clanPlayer;
private final SimpleClans plugin;
private final Paginator paginator;
private final List<Locale> languages;
private final Paginator<Locale> paginator;
public LanguageSelectorFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
super(parent, viewer);
plugin = SimpleClans.getInstance();
clanPlayer = plugin.getClanManager().getCreateClanPlayer(viewer.getUniqueId());
languages = LanguageResource.getAvailableLocales();
paginator = new Paginator(getSize() - 9, languages);
List<Locale> languages = LanguageResource.getAvailableLocales();
paginator = new Paginator<>(getPageSize(), languages);
}
@Override
@@ -44,44 +38,38 @@ public class LanguageSelectorFrame extends SCFrame {
return lang("gui.languageselector.title", getViewer(), locale.toLanguageTag());
}
@Override
public int getSize() {
return 3 * 9;
}
@Override
public void createComponents() {
addHeader();
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Locale locale = languages.get(i);
addLanguage(slot, locale);
slot++;
}
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.languageselector.language.title",
loc -> loc.toLanguageTag().replace("-", "_"))
.withLoreKey("gui.languageselector.language.lore.left.click")
.withLoreKey("gui.languageselector.language.lore.translation.status", LanguageResource::getTranslationStatus)
.withLoreLine(loc -> !loc.equals(Locale.ENGLISH)
? lang("gui.languageselector.language.lore.right.click", getViewer()) : "")
.withListener(ClickType.LEFT, this::setLocale, (String) null)
.withListener(ClickType.RIGHT, this::translate, (String) null).build();
addAll(list);
}
private void addLanguage(int slot, Locale locale) {
SCComponent c = new SCComponentImpl.Builder(XMaterial.PAPER)
.withDisplayName(lang("gui.languageselector.language.title", getViewer(), locale.toLanguageTag().replace("-", "_")))
.withSlot(slot).withLore(
Arrays.asList(lang("gui.languageselector.language.lore.left.click", getViewer()),
lang("gui.languageselector.language.lore.translation.status", getViewer(),
LanguageResource.getTranslationStatus(locale)),
!locale.equals(Locale.ENGLISH) ?
lang("gui.languageselector.language.lore.right.click", getViewer()) : ""))
.build();
c.setListener(ClickType.LEFT, () -> {
private Runnable setLocale(Locale locale) {
return () -> {
clanPlayer.setLocale(locale);
plugin.getStorageManager().updateClanPlayer(clanPlayer);
InventoryDrawer.open(this);
});
if (!locale.equals(Locale.ENGLISH)) {
c.setListener(ClickType.RIGHT, () -> {
};
}
private Runnable translate(Locale locale) {
return () -> {
if (!locale.equals(Locale.ENGLISH)) {
getViewer().sendMessage(lang("click.to.help.translating", getViewer(), getCrowdinLink(locale)));
getViewer().closeInventory();
});
}
add(c);
}
};
}
private String getCrowdinLink(@NotNull Locale locale) {
@@ -97,31 +85,9 @@ public class LanguageSelectorFrame extends SCFrame {
return base + locale.toLanguageTag();
}
public void addHeader() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public Paginator<Locale> getPaginator() {
return paginator;
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
}
@@ -1,30 +1,28 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class LeaderboardFrame extends SCFrame {
public class LeaderboardFrame extends PageableFrame<ClanPlayer> {
private final Paginator paginator;
private final Paginator<ClanPlayer> paginator;
private final List<ClanPlayer> clanPlayers;
private final RankingNumberResolver<ClanPlayer, BigDecimal> rankingResolver;
@@ -36,58 +34,35 @@ public class LeaderboardFrame extends SCFrame {
rankingResolver = new RankingNumberResolver<>(clanPlayers, c -> KDRFormat.toBigDecimal(c.getKDR()), false,
plugin.getSettingsManager().getRankingType());
paginator = new Paginator(getSize() - 9, this.clanPlayers);
paginator = new Paginator<>(getPageSize(), this.clanPlayers);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
ClanPlayer cp = clanPlayers.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.leaderboard.player.title", getViewer(),
rankingResolver.getRankingNumber(cp), cp.getName()),
Arrays.asList(
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
: lang("gui.playerdetails.player.lore.clan", getViewer(),
cp.getClan().getColorTag(), cp.getClan().getName()),
lang("gui.playerdetails.player.lore.kdr", getViewer(), KDRFormat.format(cp.getKDR())),
lang("gui.playerdetails.player.lore.last.seen", getViewer(), cp.getLastSeenString(getViewer()))),
XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT,
() -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
c.setLorePermission("simpleclans.anyone.leaderboard");
add(c);
slot++;
}
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.leaderboard.player.title", rankingResolver::getRankingNumber, ClanPlayer::getName)
.withListener(ClickType.LEFT, this::openDetails, (String) null)
.withLorePermission("simpleclans.anyone.leaderboard")
.withLoreLine(cp ->
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
: lang("gui.playerdetails.player.lore.clan", getViewer()
))
.withLoreKey("gui.playerdetails.player.lore.kdr", cp -> KDRFormat.format(cp.getKDR()))
.withLoreKey("gui.playerdetails.player.lore.last.seen", cp -> cp.getLastSeenString(getViewer()))
.withOwningPlayer(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())).build();
addAll(list);
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
private Runnable openDetails(ClanPlayer cp) {
return () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this,
Bukkit.getOfflinePlayer(cp.getUniqueId())));
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
@Override
public Paginator<ClanPlayer> getPaginator() {
return paginator;
}
@Override
@@ -95,9 +70,4 @@ public class LeaderboardFrame extends SCFrame {
return lang("gui.leaderboard.title", getViewer(), clanPlayers.size());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,6 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
@@ -8,80 +7,55 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class PermissionsFrame extends SCFrame {
private final Rank rank;
private final Paginator paginator;
private final String[] permissions;
public class PermissionsFrame extends PageableFrame<String> {
private final Rank rank;
private final Paginator<String> paginator;
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
super(parent, viewer);
this.rank = rank;
permissions = rank.getPermissions().toArray(new String[0]);
paginator = new Paginator(getSize() - 9, permissions.length);
}
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
super(parent, viewer);
this.rank = rank;
paginator = new Paginator<>(getPageSize(), new ArrayList<>(rank.getPermissions()));
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
@Override
public void createComponents() {
super.createComponents();
add(Components.getBackComponent(getParent(), 2, getViewer()));
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
.withViewer(getViewer())
.withDisplayNameKey("gui.permissions.add.title")
.build();
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(add);
SCComponent add = new SCComponentImpl(lang("gui.permissions.add.title",getViewer()), null, XMaterial.WHITE_WOOL,
4);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(add);
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.permissions.permission.title", p -> p)
.withLoreKey("gui.permissions.permission.lore")
.withListener(ClickType.RIGHT, this::removePermission, "simpleclans.leader.rank.permissions.remove")
.build();
addAll(list);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
private Runnable removePermission(String permission) {
return () -> InventoryController.runSubcommand(getViewer(),
"rank permissions remove", true, rank.getName(), permission);
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public Paginator<String> getPaginator() {
return paginator;
}
String permission = permissions[i];
SCComponent c = new SCComponentImpl(lang("gui.permissions.permission.title",getViewer(), permission),
Collections.singletonList(lang("gui.permissions.permission.lore",getViewer())), XMaterial.PAPER, slot);
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"rank permissions remove", true, rank.getName(), permission));
c.setPermission(ClickType.RIGHT, "simpleclans.leader.rank.permissions.remove");
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.permissions.title",getViewer(), rank.getName());
}
@Override
public int getSize() {
return 3 * 9;
}
@Override
public @NotNull String getTitle() {
return lang("gui.permissions.title", getViewer(), rank.getName());
}
}
@@ -1,10 +1,8 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
@@ -25,20 +23,9 @@ public class StaffFrame extends SCFrame {
return lang("gui.staff.title", getViewer());
}
@Override
public int getSize() {
return 3 * 9;
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 4)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 4, getViewer()));
super.createComponents();
addClans();
addPlayers();
addGlobalFf();
@@ -46,10 +33,11 @@ public class StaffFrame extends SCFrame {
}
private void addClans() {
SCComponent clanList = new SCComponentImpl.Builder(XMaterial.PURPLE_BANNER)
.withDisplayName(lang("gui.main.clan.list.title", getViewer())).withSlot(9)
.withLoreLine(lang("gui.staff.clan.list.lore.left.click", getViewer()))
.withLoreLine(lang("gui.staff.clan.list.lore.right.click", getViewer())).build();
SCComponent clanList = new SCComponentImpl.Builder(getConfig(), "clans")
.withViewer(getViewer())
.withDisplayNameKey("gui.main.clan.list.title")
.withLoreKey("gui.staff.clan.list.lore.left.click")
.withLoreKey("gui.staff.clan.list.lore.right.click").build();
clanList.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
Type.ALL, null)));
clanList.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
@@ -58,19 +46,19 @@ public class StaffFrame extends SCFrame {
}
private void addPlayers() {
SCComponent players = new SCComponentImpl.Builder(XMaterial.WHITE_BANNER)
.withDisplayName(lang("gui.staff.player.list.title", getViewer())).withSlot(10)
.withLoreLine(lang("gui.staff.player.list.lore.left.click", getViewer()))
.withLoreLine(lang("gui.staff.player.list.lore.right.click", getViewer())).build();
SCComponent players = new SCComponentImpl.Builder(getConfig(), "players")
.withViewer(getViewer())
.withDisplayNameKey("gui.staff.player.list.title")
.withLoreKey("gui.staff.player.list.lore.left.click")
.withLoreKey("gui.staff.player.list.lore.right.click").build();
players.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, false)));
players.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, true)));
add(players);
}
private void addReload() {
SCComponent reload = new SCComponentImpl.Builder(XMaterial.SPAWNER)
.withDisplayName(lang("gui.staff.reload.title", getViewer())).withSlot(17)
.withLoreLine(lang("gui.staff.reload.lore", getViewer())).build();
SCComponent reload = new SCComponentImpl.Builder(getConfig(), "reload").withViewer(getViewer())
.withDisplayNameKey("gui.staff.reload.title").withLoreKey("gui.staff.reload.lore").build();
reload.setPermission(ClickType.LEFT, "simpleclans.admin.reload");
reload.setConfirmationRequired(ClickType.LEFT);
reload.setListener(ClickType.LEFT, () ->
@@ -82,18 +70,14 @@ public class StaffFrame extends SCFrame {
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
boolean globalffAllowed = sm.is(GLOBAL_FRIENDLY_FIRE);
String status = globalffAllowed ? lang("allowed", getViewer()) : lang("auto", getViewer());
SCComponent globalFf = new SCComponentImpl.Builder(XMaterial.DIAMOND_SWORD).withSlot(12)
.withDisplayName(lang("gui.staff.global.ff.title", getViewer()))
.withLoreLine(lang("gui.staff.global.ff.lore.status", getViewer(), status))
.withLoreLine(lang("gui.staff.global.ff.lore.toggle", getViewer())).build();
SCComponent globalFf = new SCComponentImpl.Builder(getConfig(), "global_ff").withViewer(getViewer())
.withDisplayNameKey("gui.staff.global.ff.title")
.withLoreKey("gui.staff.global.ff.lore.status", status)
.withLoreKey("gui.staff.global.ff.lore.toggle").build();
globalFf.setPermission(ClickType.LEFT, "simpleclans.mod.globalff");
globalFf.setListener(ClickType.LEFT, () -> {
String arg;
if (globalffAllowed) {
arg = "auto";
} else {
arg = "allow";
}
String arg = globalffAllowed ? "auto" : "allow";
InventoryController.runSubcommand(getViewer(), "mod globalff", true, arg);
});
add(globalFf);
@@ -2,19 +2,21 @@ package net.sacredlabyrinth.phaed.simpleclans.utils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
*
* @author RoinujNosde
*
*/
public class Paginator {
public class Paginator<T> {
private int currentPage;
private final int sizePerPage;
private int totalElements;
private Collection<?> collection;
private List<T> collection;
public Paginator(int sizePerPage, int totalElements) {
if (sizePerPage < 1) {
@@ -27,12 +29,17 @@ public class Paginator {
this.totalElements = totalElements;
}
public Paginator(int sizePerPage, @NotNull Collection<?> collection) {
@Deprecated
public Paginator(int sizePerPage, @NotNull Collection<T> collection) {
this(sizePerPage, new ArrayList<>(collection));
}
public Paginator(int sizePerPage, @NotNull List<T> list) {
if (sizePerPage < 1) {
throw new IllegalArgumentException("sizePerPage cannot be less than 1");
}
this.sizePerPage = sizePerPage;
this.collection = collection;
this.collection = list;
}
/**
@@ -81,7 +88,21 @@ public class Paginator {
public int getCurrentPage() {
return currentPage;
}
/**
*
* @return the elements in the current page
*
* @throws IllegalStateException if the underlining collection is null
*/
public @NotNull List<T> getCurrentElements() throws IllegalStateException {
if (collection == null) {
throw new IllegalStateException("the collection is null");
}
int maxIndex = Math.min(getMaxIndex(), collection.size());
return collection.subList(getMinIndex(), maxIndex);
}
/**
* Increases the page number if there are elements to display
*
@@ -90,11 +111,11 @@ public class Paginator {
* </p>
*/
public boolean nextPage() {
if (!hasNextPage()) {
return false;
boolean hasNext = hasNextPage();
if (hasNext) {
currentPage++;
}
currentPage++;
return true;
return hasNext;
}
/**
@@ -112,11 +133,11 @@ public class Paginator {
* </p>
*/
public boolean previousPage() {
if (hasPreviousPage()) {
boolean hasPrevious = hasPreviousPage();
if (hasPrevious) {
currentPage--;
return true;
}
return false;
return hasPrevious;
}
/**
@@ -37,31 +37,35 @@ public class UpdateChecker {
*
*/
public void check() {
plugin.getScheduler().runAsync(task -> {
try {
URL url = new URL(LATEST_VERSION_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("User-Agent", userAgent);
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
new BukkitRunnable() {
JsonElement parse = JsonParser.parseReader(reader);
if (parse.isJsonObject()) {
String latestVersion = parse.getAsJsonObject().get("name").getAsString();
@Override
public void run() {
try {
URL url = new URL(LATEST_VERSION_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("User-Agent", userAgent);
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
JsonElement parse = JsonParser.parseReader(reader);
if (parse.isJsonObject()) {
String latestVersion = parse.getAsJsonObject().get("name").getAsString();
if (compareVersions(version, latestVersion) < 0) {
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/");
if (compareVersions(version, latestVersion) < 0) {
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/");
}
}
reader.close();
} catch (MalformedURLException ignored) {
} catch (IOException | JsonParseException ex) {
plugin.getLogger().log(Level.WARNING, "Error checking the plugin version...");
}
reader.close();
} catch (MalformedURLException ignored) {
} catch (IOException | JsonParseException ex) {
plugin.getLogger().log(Level.WARNING, "Error checking the plugin version...");
}
});
}.runTaskAsynchronously(plugin);
}
public static int compareVersions(@NotNull String a, @NotNull String b) {
@@ -138,13 +138,9 @@ public final class UUIDFetcher {
private static @Nullable UUID fetchUUID(@NotNull URL url) throws IOException {
HttpURLConnection connection = createConnection(url);
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) {
return null;
}
if (responseCode != HttpURLConnection.HTTP_OK) {
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException(String.format("Unexpected response code: %d. Response: %s",
responseCode, connection.getResponseMessage()));
connection.getResponseCode(), connection.getResponseMessage()));
}
JsonObject response = gson.fromJson(new InputStreamReader(connection.getInputStream(), UTF_8), JsonObject.class);
@@ -0,0 +1,27 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: CYAN_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,24 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,27 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: RED_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
+31
View File
@@ -0,0 +1,31 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: CYAN_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,27 @@
rows: 6
components:
list:
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: BLACK_BANNER
enabled: true
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
slots: [0, 1, 3, 4, 5, 8]
enabled: true
material: GRAY_STAINED_GLASS_PANE
+31
View File
@@ -0,0 +1,31 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
+28
View File
@@ -0,0 +1,28 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,24 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,27 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
slots: [0, 1, 3, 4, 5, 8]
enabled: true
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,28 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: WHITE_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -0,0 +1,27 @@
rows: 3
components:
decorations:
panels:
enabled: true
slots: [ 0, 1, 2, 3, 5, 6, 7, 8 ]
material: GRAY_STAINED_GLASS_PANE
clans:
enabled: true
material: PURPLE_BANNER
slot: 9
players:
enabled: true
material: WHITE_BANNER
slot: 10
reload:
enabled: true
material: SPAWNER
slot: 17
global_ff:
enabled: true
material: DIAMOND_SWORD
slot: 12
back:
enabled: true
slot: 4
material: ARROW
+5 -8
View File
@@ -1,7 +1,7 @@
description.command=beschreibung
create.command=erstellen
delete.command=lösche
rank.command=Rang
rank.command=rang
setdisplayname.command=setdisplayname
setdefault.command=setdefault
removedefault.command=removedefault
@@ -11,9 +11,9 @@ balance.command=guthaben
list.order.asc=aufsteigend
list.order.desc=absteigend
list.type.name=Name
list.type.kdr=Kill-Death-Ratio
list.type.size=Größe
list.type.founded=Gegründet
list.type.kdr=kdr
list.type.size=größe
list.type.founded=gegründet
list.type.active=aktiv
land.command=land
break.command=abbauen
@@ -94,11 +94,9 @@ help.command=hilfe
leave.command=verlassen
join.command=beitreten
mute.command=stummschalten
tag.completion=[tag]
name.completion=[name]
acf-core.parameter.amount=betrag
acf-core.parameter.member=mitglieder
acf-core.parameter.rank=Rang
acf-core.parameter.rank=rang
acf-core.parameter.leader=anführer
acf-core.parameter.displayname=angezeigter_name
acf-core.parameter.permission=berechtigung
@@ -418,7 +416,6 @@ inactive.0=Inaktiv\: {0}
clan.commands=clan Befehle
you.can.only.modify.the.color.and.case.of.the.tag=Du kannst nur die Farbe und die Gros- / Kleinschreibung dieses Tags ändern
locale.has.been.changed=&cDeine Sprache wurde geändert
locale.is.prohibited=&cSprachauswahl ist auf dem Server verboten.
tag.changed.to.0=Tag geändert zu {0}
0.tag.changed.to.1=&bErfolgreich den Tag von {0} zu {1} geändert
name.0=Name\: {0}
+1 -3
View File
@@ -94,8 +94,6 @@ help.command=ayuda
leave.command=salir
join.command=entrar
mute.command=silenciar
tag.completion=
name.completion=
acf-core.parameter.amount=cantidad
acf-core.parameter.member=miembro
acf-core.parameter.rank=rank
@@ -515,7 +513,7 @@ off=off
player.rank.changed=El rango se ha asignado
your.clans.are.already.rivals=Sus clanes ya son rivales
player.got.money=Obtuviste {0} por matar a {1} basado en tu KDR\: {2}
cleared.bb=Has limpiado el tablón de anuncios
cleared.bb=Has limpieado el tablon de anuncios
clan.balance=Balance del Clan\: {0}
clan.admin.balance=&8(&cClan&8)&7 El dinero del clan &c{0}&7 es\: &c${1}&7.
bb.fee.player.kicked={0} fue expulsado por no pagar la cuota
@@ -94,8 +94,6 @@ help.command=apu
leave.command=poistua
join.command=liittyä
mute.command=mykistys
tag.completion=[tag]
name.completion=[name]
acf-core.parameter.amount=määrä
acf-core.parameter.member=jäsen
acf-core.parameter.rank=/rankki
@@ -418,7 +416,6 @@ inactive.0=Inaktiivinen\: {0}
clan.commands=klaanin komennot
you.can.only.modify.the.color.and.case.of.the.tag=Voit ainoastaan muokata tunnisteen väriä ja muotoa
locale.has.been.changed=&cKielesi on vaihdettu
locale.is.prohibited=&cLanguage valinta palvelimella on kielletty.
tag.changed.to.0=Tunniste on nyt {0}
0.tag.changed.to.1=&bOnnistuneesti vaihdettu {0}\: n tunniste {1}
name.0=Nimi\: {0}
@@ -94,8 +94,6 @@ help.command=aide
leave.command=quitter
join.command=rejoindre
mute.command=muet
tag.completion=[tag]
name.completion=[nom]
acf-core.parameter.amount=montant
acf-core.parameter.member=membre
acf-core.parameter.rank=rang
@@ -418,7 +416,6 @@ inactive.0=Inactif\: {0}
clan.commands=commandes de clan
you.can.only.modify.the.color.and.case.of.the.tag=Vous ne pouvez seulement modifier la couleur et le tag
locale.has.been.changed=&cVotre langue a été modifiée
locale.is.prohibited=&cLa sélection de la langue sur le serveur est interdite.
tag.changed.to.0=Tag changé à {0}
0.tag.changed.to.1=&bLe tag de {0} a été changé avec succès en {1}
name.0=Nom\: {0}
+16 -876
View File
@@ -1,888 +1,28 @@
description.command=
create.command=
delete.command=
rank.command=
setdisplayname.command=
setdefault.command=
removedefault.command=
permissions.command=
list.command=
balance.command=
list.order.asc=בסדר עולה
list.order.desc=בסדר יורד
list.type.name=שם
list.type.kdr=יחס הריגות מוות
list.type.size=גודל
list.type.founded=יוסד
list.type.active=פעיל
land.command=
break.command=
interact.command=
place_block.command=
damage.command=
interact_entity.command=
container.command=
confirm.command=
profile.command=
roster.command=
lookup.command=
leaderboard.command=
alliances.command=
rivalries.command=
vitals.command=
coords.command=
stats.command=
ally.command=
add.command=
remove.command=
allow.command=
block.command=
auto.command=
check.command=
assign.command=
unassign.command=
rival.command=
bb.command=
display.command=
clear.command=
modtag.command=
rename.command=
toggle.command=
tag.command=
deposit.command=
all.command=
withdraw.command=
invite.command=
kick.command=
bank.command=
give.command=
take.command=
status.command=
fee.command=
set.command=
purge.command=
trust.command=
untrust.command=
admin.command=
mod.command=
promote.command=
demote.command=
clanff.command=
ff.command=
resign.command=
disband.command=
verify.command=
ban.command=
unban.command=
reload.command=
globalff.command=
kills.command=
mostkilled.command=
war.command=
start.command=
end.command=
home.command=
regroup.command=
me.command=
tp.command=
setrank.command=
place.command=
resetkdr.command=
everyone.command=
setbanner.command=
help.command=
leave.command=
join.command=
mute.command=
tag.completion=[תג קלאן]
name.completion=[שם הקלאן המלא]
description.command=תיאור
create.command=צור
delete.command=למחוק
rank.command=דרוג
setdisplayname.command=להביא שם
permissions.command=הרשאה
list.command=רשימה
balance.command=יתרה
give.command=להביא
resign.command=להטפטר
reload.command=רענון
start.command=התחל
leave.command=לעזוב
acf-core.parameter.amount=סכום
acf-core.parameter.member=חברים
acf-core.parameter.rank=
acf-core.parameter.leader=מנהיג
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=שחקן
acf-core.parameter.rank=דרוג
acf-core.parameter.description=תיאור
acf-core.parameter.clan=קלאן
acf-core.parameter.type=סוג
acf-core.parameter.order=סדר
acf-core.parameter.help=עמדו או מילות מפתח
command.description.land.allow.all=מאפשר את כל הפעולות בארץ שלך
command.description.land.allow.interact_entity=מאפשר לחברי קלאן הידוד עם ישויות בארץ שלך
command.description.land.allow.interact=מאפשר לחברי קלאן הידוד בארץ שלך
command.description.land.allow.container=מאפשר לחברי קלאן לפתוח מכולות בארץ שלך
command.description.land.allow.place=מאפשר לחברי קלאן לשים בלוקים בארץ שלך
command.description.land.allow.break=מאפשר לחברי קלאן לשבור בלוקים בארץ שלך
command.description.land.allow.damage=מאפשר לחברי קלאן לגרום לדמג' בארץ שלך
command.description.land.block.all=חוסם את כל הפעולות בארץ שלך
command.description.land.block.interact_entity=חוסם חברי קלאן מביצוע הידוד עם ישויות בארץ שלך
command.description.land.block.interact=חוסם חברי קלאן מביצוע הידוד בארץ שלך
command.description.land.block.container=חוסם חברי קלאן מלפתוח מכולות בארץ שלך
command.description.land.block.place=חוסם חברי קלאן מלשים בלוקים בארץ שלך
command.description.land.block.break=חוסם חברי קלאן מלשבור בלוקים בארץ שלך
command.description.land.block.damage=חוסם חברי קלאן מלגרום דמג' בשטח הקלאן
command.description.stats=מראה את המידע על חברי הקלאן שלך
command.description.rivalries=מראה את כל יריבויות הקלאן
command.description.mostkilled=מציג בסדר יורד את כמות הקילים בשרת
command.description.kills=מראה כמות הריגות שלך או של שחקן אחר
command.description.lookup=בודק מידע עליך
command.description.lookup.other=בודק מידע על שחקן
command.description.leaderboard=מציג את לוח המובילים
command.description.roster.other=מציג חברי קלאן מסוים
command.description.roster=מציג את חברי הקלאן שלך
command.description.profile.other=מראה פרופיל של קלאן אחר
command.description.profile=מראה את פרופיל הלקאן שלך
command.description.vitals=מראה את האנשים החיוניים בקלאן שלך ובני בריתך
command.description.list=מציג את כל הקלאנים
command.description.list.balance=מראה את הקלאנים העשירים ביותר
command.description.chat=מדבר בצ'אט קלאן
command.description.ally=מדבר בצ'אט בריתות
command.description.deny=דוחה בקשה
command.description.accept=מאשר בקשה
command.description.more=מראה מידע נוסף
command.description.create=יוצר קלאן
command.description.discord.create=יוצר חדר דיסקורד לקלאן שלך
command.description.ff.allow=מגדיר אש ידידותית אישית למותרת
command.description.ff.auto=מגדיר אש ידידותית אישית לאוטומטית
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.home=מקבץ את חברי הקלאן שלך לבית הקלאן שלך
command.description.home.tp=משגר אותך לבית הקלאן שלך
command.description.home.clear=מנקה את הבית של הקלאן שלך
command.description.home.set=מגדיר בית לקלאן שלך
command.description.mod.home.set=מגדיר בית של קלאן
command.description.mod.home.tp=משתגר לבית של קלאן
command.description.rival.remove=מסיר יריב
command.description.rival.add=מוסיף יריב
command.description.ally.remove=מסיר יריב
command.description.kick=מעיף חבר מהקלאן שלך
command.description.bb.display=מציג את לוח המודעות של הקלאן שלך
command.description.bb.clear=מוחק את תוכן לוח המודעות של הקלאן שלך
command.description.bb.post=מפרסם הודעות בלוח המודעות של הקלאן שלך
command.description.mod.bb.display=מציג לוח מודעות של קלאן
command.description.mod.bb.clear=מוחק את תוכן לוח המודעות של קלאן מסוים
command.description.mod.bb.post=פרסם הודעה בלוח מודעות של קלאן מסוים
command.description.place=מכניס שחקן לקלאן
command.description.reload=טוען מחדש את הפלאגין עם תצורותיו
command.description.trust=הופך חבר קלאן למוסמך
command.description.untrust=הופך חבר קלאן ללא-מוסמך
command.description.resign=פורש מהקלאן שלך
command.description.help=מראה את העזרה הזו או חיפושים בעזרה
command.description.ally.add=מוסיף בן ברית
command.description.clan=פותח את התפריט
command.description.disband=מפרק את הקלאן שלך
command.description.mod.disband=מפרק קלאן מסוים
command.description.mod.kick=מעיף שחקן מקלאן מסוים
command.description.modtag.other=משנה תג של קלאן מסוים
command.description.modtag=משנה את התג של הקלאן שלך
command.description.purge=מטהר חלק ממידע של שחקן
command.description.setbanner=מגדיר באנר לקלאן שלך
command.description.verify=מאמת את הקלאן שלך
command.description.mod.verify=מאמת קלאן מסוים
command.description.invite=מזמין שחקן לקלאן שלך
command.description.fee.check=בודק את הערך של עמלת הקלאן שלך, והאם היא מופעלת
command.description.fee.set=מגדיר את עמלת הקלאן שלך
command.description.bank.status=בודק את יתרת בנק הקלאן שלך
command.description.bank.admin.status=בודק יתרת בנק של קלאן מסוים
command.description.bank.withdraw.all=משיכה של הכל מבנק הקלאן שלך
command.description.bank.withdraw.amount=משיכת כמות כסף מבנק הקלאן שלך
command.description.bank.admin.take=לוקחת כמות כסף מבנק של קלאן מסוים
command.description.bank.deposit.all=הפקדה של כל הכסף שלך אל בנק הקלאן שלך
command.description.bank.deposit.amount=הפקדה של כמות מהכסף שלך אל בנק הקלאן שלך
command.description.bank.admin.give=מעניק כמות כסף לבנק של קלאן מסוים
command.description.bank.admin.set=מגדיר כמות כסף לבנק של קלאן
command.description.war.start=מתחיל מלחמה
command.description.war.end=מסיים מלחמה
command.description.resetkdr.everyone=מאפס את יחס הריגות-מוות של כולם
command.description.resetkdr.player=מאפס את יחס הריגות-מוות של שחקן
command.description.resetkdr=מאפס את יחס הריגות-מוות שלך
command.description.admin.demote=מוריד בדרגה כל מנהיג מכל קלאן
command.description.demote=מוריד בדרגה מנהיג
command.description.admin.promote=מקדם כל חבר קלאן מכל קלאן
command.description.promote=מקדם חבר קלאן למנהיג
command.description.admin.permanent=מפעיל/מכבה את הסטטוס הנצחי של כל קלאן
command.description.toggle.bb=מפעיל/מכבה הצגת לוח המודעות עם כניסה
command.description.toggle.invite=מפעיל/מכבה קבלת הזמנות לקלאן
command.description.toggle.tag=מפעיל/מכבה הצגת תג קלאן ליד השם שלך
command.description.toggle.deposit=מפעיל/מכבה הפקדות אל קלאן שלך
command.description.toggle.withdraw=מפעיל/מכבה משיכות מהקלאן שלך
command.description.toggle.fee=מפעיל/מכבה עמלה של קלאן
command.description.alliances=מציג את כל הבריתות של כל הקלאנים
command.description.coords=מציג את כל הקורדינטות של חברי הקלאן שלך
command.description.rank.assign=מעניק דרגה לחבר קלאן
command.description.rank.unassign=מסיר דרגה לחבר קלאן
command.description.rank.create=יוצר דרגה
command.description.rank.delete=מוחק דרגה
command.description.rank.list=מציג את כל הדרגות בקלאן שלך
command.description.rank.setdisplayname=מגדיר שם לתצוגה של דרגה
command.description.rank.setdefault=מגדיר את דרגת ברירת המחדל
command.description.rank.removedefault=מסיר את דרגת ברירת המחדל
command.description.rank.permissions.available=מציג את ההרשאות הזמינות לדרגה
command.description.rank.permissions.rank=מציג גישות של דרגה
command.description.rank.permissions.add=מוסיף גישות לדרגה
command.description.rank.permissions.remove=מסיר גישות מדרגה
command.description.rename=משנה שם לקלאן שלך
command.description.mod.rename=משנה שם לקלאן מסוים
command.description.locale=מגדיר את השפה שלך
command.description.mod.locale=מגדיר את השפה של שחקן מסוים
home-menu=/{0} home{1} - טלפורט לבית הקלאן
home-set-menu=/{0} home set{1} - קבע את בסיס הבית של הקלאן
home-clear-menu=/{0} home clear{1} - הסר את נקודת בסיס הבית של הקלאן
clan=קלאן
allies=בני ברית
alliances=
coords=
name=שם
distance=מרחק
coords.upper=קורדים
world=עולם
kdr=יחס הריגה/מוות
members=חברים
clans.lower=קלאנים
rival=יריב
civilian=אזרח
neutral=נטרלי
ally=בן ברית
free.agent=סוכן חופשי
days=ימים
rivals=יריבים
rivalries=
online=מחובר
player=שחקן
seen=נראה
leader=מנהיג
roster=
trusted=מוסמך
untrusted=לא מוסמך
in.rank=בדרגה
deaths=מקרי מוות
weights=משקלים
stats=
health=חיים
armor=שריון
weapons=נשקים
food=אוכל
vitals=
verified=מאומת
unverified=לא מאומת
permanent=תמידי
profile=
civilian.abbreviation=אזרח
rank=דרגה
leaders=מנהיגים
none=&8ללא
today=היום
kills=הריגות
mostkilled=נהרג הכי הרבה
killcount=כמות הריגות
attacker=תוקף
victim=קורבן
kill.death.ratio=יחס הריגות/מוות
nokillsfound=לא נמצאו הריגות
promoted.to.leader=השחקן {0} קודם לדרגת מנהיג
denied.demotion=ההורדה בדרגה של {1} סורבה על ידי {0}. לא הושגה הסכמה כללית.
membership.invitation=ההזמנה לחברות נדחתה על ידי {0}
joined.the.clan=השחקן {0} הצטרף לקלאן
signed.off.request.cancelled=השחקן {0} התנתק. הבקשה של {1} בוטלה.
clan.deletion=המחיקה של הקלאן סורבה על ידי {0}. לא הושגה הסכמה כללית.
rename.refused=שינוי שם הקלאן סורב על ידי {0}. לא הושגה הסכמה כללית.
has.been.disbanded=הקלאן {0} התפרק
denied.the.promotion=הקידום של {1} סורב על ידי {0}. לא הושגה הסכמה כללית.
demoted.back.to.member=הורדה לדרגת חבר בוצעה ל{0}
peace.agreement.denied=ההסכם לשלום עם {0} סורב
denied.to.make.peace=השלום עם {1} סורב על ידי {0}
broken.the.rivalry=היריבות עם {1} נשברה על ידי {0}
broken.the.rivalry.with=היריבות עם {1} נשברה על ידי {0}
the.alliance.was.denied=הברית עם {0} נדחתה
denied.an.alliance=ברית עם {1} סורבה על ידי {0}
accepted.an.alliance=ברית עם {1} אושרה על ידי {0}
created.an.alliance=ברית עם {1} נוצרה על ידי {0}
has.joined=הקידום של {1} סורב על ידי {0}. לא הושגה הסכמה כללית
proposing.to.end.the.rivalry=הצעה לסיום היריבות עם {1} הועלתה על ידי {0}
proposing.an.alliance=הצעה לברית עם {1} הועלתה על ידי {0}
inviting.you.to.join=ההזמנה להצטרף ל־{1} נשלחה על ידי {0}
asking.for.the.promotion=בקשה לקידום של {1} הועלתה על ידי {0}
asking.for.the.demotion=בקשה להורדה בדרגה של {1} הועלתה על ידי {0}
asking.to.disband=בקשה לפירוק הקלאן הועלתה על ידי {0}
asking.to.rename=בקשה לשינוי שם הקלאן ל־{1} הועלתה על ידי {0}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n&8[&8{0}&8] &b{1}\n %accept% &bאו %deny%
clickable.accept=&a&l[אישור]
clickable.deny=&c&l[דחייה]
hover.click.to.accept=&aלחץ כאן על מנת לאשר
hover.click.to.deny=&cלחץ כאן על מנת לדחות
not.sufficient.money=אין לך מספיק כסף בחשבון (נדרש\: {0} $)
account.has.been.debited=החשבון שלך חויב ב־{0}
mysql.connection.successful=חיבור MySQL צלח
mysql.connection.failed=חיבור MySQL כשל
sqlite.connection.successful=חיבור עם SQLite צלח
sqlite.connection.failed= חיבור עם SQLite נכשל
purging.player.data=ניקוי נתוני שחקן\: {0}
purging.clan=ניקוי קלאן\: {0}
clan.players=שחקני הקלאן\: {0}
clans=קלאנים\: {0}\n
banned=אתה חסום מלהשתמש בפקודות קלאן
nothing.more.to.see=לא נשאר דבר לראות
nothing.to.vote=&cאין מה לאשר או לדחות
no.leader.permissions=אין לך גישות מנהיג
you.have.already.voted=כבר הצבעת
has.voted.to.deny=ההצבעה לסירוב בוצעה על ידי {0}
view.next.page=הקלד {0}/ כדי לצפות בעמוד הבא.
voted.to.accept=ההצבעה לאישור בוצעה על ידי {0}
bulletin.board.header=&8* &e{0} &fלוח מודעות
bulletin.board.message={0}\: &f{1}
has.been.disbanded.rivalry.ended=הקלאן {0} פורק. היריבות הסתיימה.
has.been.disbanded.alliance.ended=הקלאן {0} פורק. הברית הסתיימה.
clan.disbanded=קלאן פורק
1.color.day=1 {0}יום
many.color.days={0}{1} ימים
insufficient.permissions=אין מספיק גישות
clan.is.not.verified=קלאן לא מאומת
player.not.a.member.of.any.clan=&cהשחקן לא חבר באף קלאן
not.a.member.of.any.clan=אתה לא חבר באף קלאן
minimum.to.make.alliance=לקלאן חייב להיות לפחות {0} שחקנים על מנת ליצור בריתות
cannot.be.same.clan=&cעליך להזין קלאן שונה מהקלאן שלך\!
other.clan.not.verified=&cהקלאן האחר לא מאומת\!
your.clans.are.not.allies=הקלאנים שלכם לא בעלי ברית
has.broken.the.alliance=הברית עם {1} נשברה על ידי {0}
at.least.one.leader.accept.the.alliance=לפחות מנהיג מצד הברית חייב להיות מחובר כדי לכרות ברית
leaders.have.been.asked.for.an.alliance=מנהיגי {0} התבקשו לברית
your.clans.are.already.allies=הקלאנים שלכם כבר בני ברית
your.clan.cannot.create.rivals=הקלאן שלך לא יכול ליצור יריבים
min.players.rivalries=לקלאן שלך חייב להיות לפחות {0} שחקנים על מנת ליצור יריבויות
this.player.is.already.banned=השחקן הזה כבר בבאן
player.added.to.banned.list=השחקן נוסף לרשימת הבאנים
you.banned=אתה בבאן מפקודות קלאן
clan.wide.friendly.fire.blocked=אש ידידותית ברחבי הקלאן חסומה
clan.wide.friendly.fire.is.allowed=אש ידידותית ברחבי הקלאן פועלת
you.are.the.only.member.online=אתה חבר הקלאן היחיד שמחובר
your.clan.color.tag.cannot.be.longer.than.characters=&cתג הקלאן שלך לא יכול להיות ארוך מ־{0} תווים
your.clan.tag.cannot.be.longer.than.characters=&cתג הקלאן שלך לא יכול להיות ארוך מ־{0} תווים
your.clan.tag.must.be.longer.than.characters=&cתג הקלאן שלך חייב להיות ארוך מ־{0} תווים
your.tag.cannot.contain.the.following.colors=&cהתג שלך לא יכול להכיל את הצבעים הבאים\: {0}
your.tag.doesnt.meet.the.requirements=&cהתג שלך לא עומד בדרישות.
your.tag.cannot.contain.color.codes=&cהתג שלך לא יכול להכיל קודי צבעים
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cתג הקלאן שלך יכול להכיל רק אותיות, מספרים, וקודי צבעים
you.cannot.set.colored.ranks=אתה לא יכול להגדיר דרגות צבועות
your.clan.name.cannot.be.longer.than.characters=שם הקלאן שלך לא יכול להיות ארוך מ־{0} תווים
your.clan.name.must.be.longer.than.characters=שם הקלאן שלך חייב להיות ארוך מ־{0} תווים
your.clan.name.cannot.contain.color.codes=שם הקלאן שלך לא יכול להכיל קודי צבעים
that.tag.name.is.disallowed=&cהתג הזה לא מותר
you.must.first.resign=עליך לפרוש מ־{0} קודם כל
clan.with.this.tag.already.exists=כבר קיים קלאן עם התג הזה
get.your.clan.verified.to.access.advanced.features=אמת את הקלאן שלך כדי לקבל גישה לעוד פיטצ'רים מתקדמים
clan.created=קלאן {0} נוצר
not.enough.leaders.online.to.vote.on.demotion=אין מספיק מנהיגים מחוברים בכדי להצביע על הורדת הדרגה
demotion.vote.has.been.requested.from.all.leaders=נדרשה הצבעת הורדה בדרגה מכל המנהיגים
player.is.not.a.leader.of.your.clan=השחקן לא מנהיג של הקלאן שלך
player.is.not.a.leader=השחקן הזה לא מנהיג
clan.has.been.disbanded=הקלאן {0} התפרק
clan.disband.vote.has.been.requested.from.all.leaders=נדרשה הצבעת פירוק הקלאן מכל המנהיגים
friendy.fire.is.now.managed.by.your.clan=ירי ידידותי מנוהל כעת על ידי הקלאן שלך
personal.friendly.fire.is.set.to.allowed=ירי ידידותי אישי הוגדר כמאושר
global.friendy.fire.is.now.managed.by.each.clan=ירי ידידותי גלובלי מנוהל כעת על ידי כל קלאן
global.friendy.fire.is.already.being.managed.by.each.clan=ירי ידידותי גלובלי כבר מנוהל על ידי כל קלאן
global.friendly.fire.is.set.to.allowed=ירי ידידותי גלובלי הוגדר כמאושר
global.friendly.fire.is.already.being.allowed=ירי ידידותי גלובלי כבר מוגדר כמאושר
the.player.doesn.t.not.have.the.permissions.to.join.clans=לשחקן אין גישות להצטרף לקלאנים
you.cannot.invite.yourself=אתה לא יכול להזמין את עצמך
you.did.not.answer.in.time=לא ענית בזמן, מבטל...
this.player.is.banned.from.using.clan.commands=השחקן הזה חסום מלהשתמש בפקודות קלאנים
the.player.is.already.member.of.another.clan=השחקן הזה כבר חבר בקלאן אחר
has.been.asked.to.join=השחקן {0} נשאל להצטרף אל {1}
you.cannot.kick.yourself=אתה לא יכול להעיף את עצמך
the.player.is.not.a.member.of.your.clan=השחקן הזה לא חבר בקלאן שלך
you.cannot.kick.another.leader=אתה לא יכול להעיף מנהיג נוסף
has.been.kicked.by=השחקן {1} העיף את {0} מהקלאן
no.clans.have.been.created=אף קלאנים נוצרו
total.clans=סך הכל קלאנים\:
legend=לג'נדה\:
kill.type.civilian=סוג הריגה\: {0} אזרח
no.player.data.found=לא נמצאו נתוני שחקן
clan.0=קלאן\: {0}
status.0=סטטוס\: {0}
rank.0=דרגה\: {0}
kdr.0=יחס הריגות/מוות\: {0}
inactive.0=לא פעיל\: {0}
clan.commands=פקודות קלאן
you.can.only.modify.the.color.and.case.of.the.tag=אתה יכול רק לשנות את הצבע והקייס של התג
locale.has.been.changed=&cהשפה שלך שונתה
locale.is.prohibited=&cבחירת שפה בשרת הזה אסורה.
tag.changed.to.0=התג שונה ל{0}
0.tag.changed.to.1=&bשינוי התג של {0} ל־{1} בוצע בהצלחה
name.0=שם\: {0}
description.0=תיאור\: {0}
leaders.0=מנהיגים\: {0}
allies.0=בני ברית\: {0}
rivals.0=יריבים\: {0}
other.player.must.be.online=&cהשחקן חייב להיות מחובר\!
the.player.does.not.have.the.permissions.to.lead.a.clan=לשחקן אין גישות להנהיג קלאן
you.cannot.promote.yourself=אתה לא יכול לקדם את עצמך
the.player.is.already.a.leader=השחקן הזה כבר מנהיג
configuration.reloaded=הגדרות נטענו מחדש
last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan=המנהיג האחרון לא יכול לפרוש. אתה צריך למנות מנהיג נוסף או לפרק את הקלאן
0.has.resigned=השחקן {0} פרש מהקלאן
you.cannot.trust.yourself=אתה לא יכול להפוך את עצנך למוסמך
leaders.are.already.trusted=מנהיגים כבר מוסמכים
this.player.is.already.trusted=השחקן הזה כבר מוסמך
has.been.given.trusted.status.by=השחקן {0} קיבל מעמד מוסמך מ־{1}
this.player.is.not.banned=השחקן הזה לא חסום
player.removed.from.the.banned.list=שחקן הוסר מרשימת חסימה
you.have.been.unbanned.from.clan.commands=ירדה לך החסימה מפקודות קלאן
you.cannot.untrust.yourself=אתה לא יכול להוריד לך סמכות
leaders.cannot.be.untrusted=מנהיגים לא יכולים להיות לא-מוסמכים
this.player.is.already.untrusted=השחקן הזה כבר לא מוסמך
has.been.given.untrusted.status.by=השחקן {1} העניק ל־{0} מעמד לא מוסמך
the.clan.does.not.exist=הקלאן לא קיים
the.clan.is.already.verified=הקלאן כבר מאומת
the.clan.has.been.verified=הקלאן אומת
clan.0.has.been.verified=קלאן {0} אומת\!
total.clan.players.0=שחקני קלאן בסה"כ\: {0}
proposing.war=קלאן {0} מציע להכריז מלחמה על {1}
you.can.only.start.war.with.rivals=אתה יכול להתחיל מלחמה עם רק עם יריבים
leaders.have.been.asked.to.accept.the.war.request=מנהיגי {0} התבקשו לקבל את בקשת המלחמה
leaders.asked.to.end.rivalry=מנהיגי {0} התבקשו לקבל את בקשת סיום המלחמה
proposing.to.end.the.war=קלאן {0} מציע להפסיק את המלחמה עם {1}
clans.already.at.war=הקלאנים שלכם כבר במלחמה
clans.not.at.war=הקלאנים שלכם לא במלחמה
you.are.at.war=קלאן {0} כרגע במלחמה עם {1}
denied.war.req=השחקן {0} סירב לבקשת המלחמה שנשלחה על ידי {1}
you.are.no.longer.at.war=קלאן {0} כבר לא במלחמה עם {1}
end.war.denied=הבקשה לסיים את המלחמה נדחתה על ידי {0}
denied.war.end=קלאן {0} דחה את בקשת הסיום של {1} במלחמה
has.initiated.a.rivalry=קלאן {0} הכריז יריבות על {1}
start=
end=
add=
remove=
allow=
block=
auto=
war=
0.s.sword.1.2.b.bow.3.4.a.arrow=
weapon.S=חר'
weapon.B=ק'
weapon.A=חצ'
materials=חומרים
armor.h=
armor.c=
armor.l=
armor.B=ק'
diamond=יהלום
gold=זהב
wood=עץ
server.announce=הכרזת שרת
clan.announce=הכזרת קלאן
leader.announce=הכזרת מנהיג
hunger=רעב
stone=אבן
iron=ברזל
the.clan.cannot.be.rivaled=לא ניתן ליצור יריבות עם הקלאן
bboff=לוח מודעות כבוי
bbon=לוח מודעות דולק
inviteon=הזמנות דולקות
inviteoff=הזמנות כבויות
tagoff=תג כבוי
tagon=תג דולק
depositon=הפקדה דולקת
depositoff=הפקדה כבויה
withdrawon=משיכה דולקת
withdrawoff=משיכה כבויה
feeoff=עמלה כבויה
feeon=עמלה דולקת
home.base.only.once=בית קלאן יכול להיות מוגדר רק פעם אחת
now.at.homebase=אתה כעת בבית הקלאן של {0}
hombase.set=בית קלאן הוגדר ב\: {0}
hombase.cleared=בית קלאן נוקה
hombase.mod.set=בית הקלאן של {0} הוגדר ב\:
hombase.not.set=בית קלאן לא הוגדר
home.set.in.different.server=
rival.limit.reached=הגעת למכסת היריבים. לא תוכל להוסיף עוד.
you.moved.teleport.cancelled=זזת, השתגרות בוטלה
waiting.for.teleport.stand.still.for.0.seconds=ממתין להשתגרות, אל תזוז למשך {0} שניות
on=דולק
off=כבוי
player.rank.changed=דרגה הוגדרה
your.clans.are.already.rivals=הקלאנים שלכם כבר יריבים
player.got.money=קיבלת {0} על ההריגה של {1} בהתחשב ביחס ההריגה-מוות שלך\: {2}
cleared.bb=ניקה את לוח המודעות
clan.balance=יתרת הקלאן\: {0}
clan.admin.balance=היתרה של {0}\: $ {1}
bb.fee.player.kicked=השחקן {0} הוצא מהקלאן בגלל שלא שילם עמלה
bb.fee.set=העמלה הינה {0}
bb.clan.deposit={0} $ הופקדו על ידי {1}
player.clan.deposit=הפקדת {0}
bb.clan.withdraw={0} $ נמשכו על ידי {1}
bb.clan.take={0} $ נלקחו על ידי {1}
bb.clan.give={0} $ ניתנו על ידי {1}
bb.clan.set=הסכום {0} $ נקבע על ידי {1}
player.clan.withdraw=משכת {0}
clan.admin.take=לקחת {0} $ מהבנק של {1}
clan.admin.give=הענקת {0} $ לבנק של {1}
clan.admin.set=הגדרת את יתרת הבנק של {0} ל־{1}$
clan.admin.bank.not.enough.money=לבנק של {0} אין מספיק כסף\!
clan.bank.not.enough.money=לבנק הקלאן אין מספיק כסף
your.clans.are.not.rivals=הקלאנים שלכם לא יריבים
the.clan.members.reached.limit=הקלאן שלך הגיע למספר החברים המקסימלי
this.clan.has.reached.the.member.limit=&bהקלאן הזה הגיע למספר החברים המקסימלי
you.have.reseted.your.kdr=איפסת את יחס ההריגות-מוות שלך
you.have.reseted.0.kdr=איפסת ל{0} את יחס ההריגות-מוות
you.have.reseted.kdr.of.all.players=איפסת את יחס ההריגות-מוות לכל השחקנים
you.have.successfully.renamed.your.clan=&bשם הקלאן שונה ל־{0} בהצלחה
you.have.successfully.renamed.the.clan=&bשם הקלאן שונה ל־{0} בהצלחה
you.have.toggled.permanent.status=הסטטוס הקבוע של {0} הוחלף על ידך
permanent.status.enabled=הסטטוס הקבוע של הקלאן שלך הופעל על ידי {0}
permanent.status.disabled=הסטטוס הקבוע של הקלאן שלך הושבת על ידי {0}
yes=כן
cancel=ביטול
resign.confirmation=האם אתה בטוח שברצונך לעזוב את הקלאן? {0}
disband.confirmation=האם אתה בטוח שברצונך לפרק את הקלאן שלך? {0}
resetkdr.confirmation=האם אתה בטוח שברצונך לאפס את יחס ההריגות-מוות שלך? {0}
resign.success=עזבת את הקלאן שלך בהצלחה
you.cannot.demote.the.last.leader=אתה לא יכול להוריד דרגה למנהיג האחרון
you.cannot.move.the.last.leader=אתה לא יכול להעביר את המנהיג האחרון
player.successfully.demoted=השחקן הורד בדרגה בהצלחה
player.successfully.promoted=השחקן קודם בהצלחה
bb.ago= \ לפני כן
bb.moments=\ רגעים
bb.seconds= \ שניות
bb.minutes= \ דקות
bb.one.minute=דקה
bb.hours= \ שעות
bb.one.hour=שעה
bb.days= \ ימים
bb.one.day=יום
the.fee.is.0.and.its.current.value.is.1=העמלה הינה {0} וערכה הוא כרגע {1}$
fee.enabled=פועל
fee.disabled=כבוי
fee.set=העמלה הוגדרה בהצלחה
max.fee.allowed.is.0=העמלה המותרת המקסימלית הינה {0}
fee.collected={0}$ נוכו לעמלת הקלאן
player.purged=השחקן טוהר בהצלחה
upkeep.collected={0}$ נוכו לתשלום תחזוקה
balance.is.not.enough.for.upkeep=יתרת הקלאן אינה מספיקה לתשלום התחזוקה ({0}$), הפקד את הסכום כדי להימנע מפירוק הקלאן
your.clan.description.must.be.longer.than=תיאור הקלאן שלך חייב להיות ארוך מ־{0} תווים
your.clan.description.cannot.be.longer.than=תיאור הקלאן שלך לא יכול להיות ארוך מ־{0} תווים
description.changed=שינית את תיאור הקלאן שלך בהצלחה
no.description=-אין תיאור-
the.player.must.wait.0.before.joining.your.clan.again=השחקן חייב להמתין {0} דקות לפני שיוכל להצטרף שוב לקלאן שלך
disabled.command=פקודה לא זמינה
rank.displayname.updated=שם תצוגת הדרגה עודכן\!
rank.setdefault=דרגת ברירת המחדל של הקלאן הוגדרה ל {0}
rank.removedefault=דרגת ברירת המחדל של הקלאן שלך הוסרה
rank.0.permissions=גישות דרגת {0}\:
available.rank.permissions=גישות זמינות לדרגות\:
rank.already.exists=דרגה כבר קיימת
rank.0.does.not.exist=דרגה {0} לא קיימת
rank.created=דרגה נוצרה
permission.0.added.to.rank.1=גישה {0} נוספה אל דרגה {1}
permission.0.removed.from.rank.1=גישה {0} הוסרה מדרגה {1}
rank.0.deleted=דרגה {0} הוסרה
clans.ranks=דרגות הקלאן\:
ranks.list.item=
no.ranks=שום דרגות נוצרו
rank.no.permissions=לדרגה הזו אין שום גישות
player.unassigned.from.rank=השחקן הוסר מהדרגה
you.must.be.0.or.have.the.permission.1.to.use.this=אתה חייב להיות {0} או שהמנהיג שלך חייב לתת לדרגה שלך את ההרשאה {1} כדי להשתמש בזה
deposit.not.allowed=הפקדת כסף אינה מותרת, השתמש ב־%clan %toggle %deposit/ כדי לאפשר אותה
withdraw.not.allowed=משיכת כסף אינה מותרת, השתמש ב־%clan %toggle %withdraw/ כדי לאפשר אותה
resign.request.cancelled=בקשת עזיבה בוטלה
disband.request.cancelled=בקשת פירוק בוטלה
resetkdr.request.cancelled=בקשת איפוס יחס הריגות-מוות בוטלה
clan.create.request.cancelled=בקשה יצירת קלאן בוטלה
rank.create.request.cancelled=בקשת יצירת דרגה בוטלה
promotion.vote.has.been.requested.from.all.leaders=הצבעת קידום נתבקשה מכל המנהיגים
rename.vote.has.been.requested.from.all.leaders=הצבעת שינוי שם נתבקשה מכל המנהיגים
allowed=מותר
blocked=אסור
chat.joined=הצטרף
chat.not.joined=לא הצטרף
chat.didnt.join=&bלא הצטרפת לערוץ זה
gui.loading=&7טוען...
gui.back.title=&fחזרה
gui.previous.page.title=&fעמוד קודם
gui.next.page.title=&fעמוד הבא
gui.lore.no.permission=&cאין לך גישה לראות את זה\!
gui.main.title={0} - תפריט קלאן
gui.main.languageselector.title=&fבחר את השפה שלך
gui.main.languageselector.lore.left.click=&7לחיצה שמאלית כדי לבחור את השפה שלך
gui.main.languageselector.lore.right.click=&7לחיצה ימנית כדי לעזור לתרגם
gui.main.other.commands.title=&fפקודות אחרות
gui.main.other.commands.lore=&7לחיצה שמאלית לראות את כל הפקודות קלאן
gui.main.clan.list.title=&fרשימת קלאנים
gui.main.clan.list.lore=&7לחיצה שמאלית לראות את רשימת הקלאנים
gui.main.reset.kdr.title=&f איפוס יחס הריגות-מוות
gui.main.reset.kdr.lore.price=&7מחיר\: &b{0}
gui.main.reset.kdr.lore=&7לחיצה שמאלית כדי לאפס את יחס ההריגות-מוות שלך
gui.main.leaderboard.title=&fלוח המובילים
gui.main.leaderboard.lore=&7לחיצה שמאלית כדי לראות את לוח המובילים
gui.main.staff.title=&fצוות
gui.main.staff.lore=&7לחיצה שמאלית כדי לפתוח את תפריט הצוות
gui.staff.title=צוות
gui.staff.clan.list.lore.left.click=&7לחיצה שמאלית כדי לראות את כל הקלאנים
gui.staff.clan.list.lore.right.click=&7לחיצה ימנית כדי לראות את כל הקלאנים הלא מאומתים
gui.player.list.title=רשימת שחקנים
gui.staff.player.list.title=&fרשימת שחקנים
gui.staff.player.list.lore.left.click=&7לחיצה שמאלית לראות את כל השחקנים
gui.staff.player.list.lore.right.click=&7לחיצה ימנית כדי לראות את כל השחקנים המחוברים
gui.staff.global.ff.title=&fאש ידידותית גלובלית
gui.staff.global.ff.lore.status=&7סטטוס\: &b{0}
gui.staff.global.ff.lore.toggle=&7לחיצה שמאלית כדי להפעיל/לכבות את סטטוס האש הידידותית
gui.staff.reload.title=&fטען מחדש
gui.staff.reload.lore=&7לחיצה שמאלית כדי לטעון מחדש את הפלאגין
gui.staff.clanlist.unverified.title=קלאנים לא מאומתים - סה"כ\: {0}
gui.staff.clanlist.toplace.title=בחר את הקלאן החדש של {0}
gui.warning.title=אזהרה
gui.warning.no.permission.title=&fאין גישה
gui.warning.no.permission.plugin.lore=&7אין לך גישה לבצע את זה\!
gui.warning.no.permission.leader.lore=&7האם אתה אחד ממנהיגי הקלאן?
gui.warning.no.permission.rank.lore=&7אתה חייב להיות {0} או שהמנהיג שלך חייב לתת לדרגה שלך את ההרשאה {1} כדי להשתמש בזה\!
gui.warning.not.verified.title=&fלא מאומת
gui.warning.not.verified.lore=&7הקלאן שלך חייב להיות מאומת\!
gui.allies.title=בני ברית
gui.allies.clan.lore=&7לחיצה ימנית כדי להסיר את בן הברית הזה
gui.allies.add.title=&fהוסף בן ברית
gui.add.ally.title=הוסף בן ברית
gui.add.ally.clan.lore=&7לחיצה שמאלית כדי לכרות ברית עם הקלאן הזה
gui.rivals.title=יריבים
gui.rivals.clan.lore=&7לחיצה ימנית כדי להסיר את היריב הזה
gui.rivals.add.title=&הוסף יריב
gui.add.rival.title=הוסף יריב
gui.add.rival.clan.lore=&7לחיצה שמאלית כדי ליצור יריבות עם הקלאן הזה
gui.clanlist.title=קלאנים - סה"כ\: {0}
gui.clanlist.clan.title=&fקלאן\: [{0}&f] {1}
gui.clanlist.clan.lore.position=
gui.clanlist.clan.lore.kdr=&7יחס הריגות-מוות\: &b{0}
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קורדינטות\: &bZ{2} Y{1} X{0}
gui.coords.player.lore.world=&7עולם\: &b{0}
gui.invite.title=הזמן שחקן
gui.invite.player.title=
gui.invite.player.price.lore=&7מחיר\: &b{0}
gui.invite.player.lore=&7לחיצה שמאלית כדי להזמין
gui.roster.title=חברי הקלאן של {0}
gui.roster.invite.title=&fהזמנה
gui.roster.invite.lore=&7הזמן שחקן לקלאן שלך
gui.leaderboard.title=לוח המובילים - שחקנים\: {0}
gui.leaderboard.player.title=
gui.ranks.title=דרגות
gui.ranks.title.set.rank=הגדר דרגה - נוכחי\: {0}
gui.ranks.create.title=&fצור דרגה
gui.ranks.create.lore=&7לחיצה שמאלית כדי ליצור דרגה
gui.ranks.rank.title=&fדרגה\: {0}
gui.ranks.rank.displayname.lore=&7שם תצוגה\: &b{0}
gui.ranks.rank.remove.lore=&7לחיצה ימנית כדי להסיר את הדרגה הזו
gui.ranks.rank.edit.permissions.lore=&7לחיצה שמאלית כדי לערוך את הגישות של הדרגה הזו
gui.ranks.rank.assign.lore=&7לחיצה שמאלית כדי להעניק את הדרגה זו אל {0}
gui.permissions.title=הגישות של {0}
gui.permissions.add.title=&fהוספת גישה
gui.permissions.permission.title=
gui.permissions.permission.lore=&7לחיצה ימנית כדי להסיר את הגישה הזו מהדרגה
gui.add.permission.title=הוספת גישה
gui.add.permission.permission.title=
gui.add.permission.permission.lore=&7לחיצה שמאלית כדי להוסיף את הגישה הזו לדרגה
gui.clandetails.title=
gui.clandetails.free.agent.title=&fסוכן חופשי
gui.clandetails.free.agent.create.clan.price.lore=&7מחיר\: &b{0}
gui.clandetails.free.agent.create.clan.lore=77לחיצה שמאלית כדי ליצור קלאן
gui.clandetails.clan.title=
gui.clandetails.clan.lore.description=77תיאור\: &b{0}
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=&7יחס הריגות-מוות\: &b{0}
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} $
start=התחל
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.allies.separator=
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.rivals.separator=
gui.clandetails.clan.lore.allies=&7בני ברית\: &b{0}
gui.clandetails.clan.lore.rivals=&7יריבים\: &b{0}
gui.clandetails.clan.lore.founded=&7תאריך הקמה\: &b{0}
gui.clandetails.clan.lore.inactive=&7חוסר פעילות\: &b{0}/{1} ימים
gui.clandetails.allies.title=&fבני ברית
gui.clandetails.allies.lore=&7לחיצה שמאלית כדי לראות את בני הברית שלך ולהוסיף עוד
gui.clandetails.rivals.title=&fיריבים
gui.clandetails.rivals.lore=&7לחיצה שמאלית כדי לראות את האויבים שלך ולהוסיף עוד
gui.clandetails.roster.title=&fחברי קלאן
gui.clandetails.roster.lore=&7לחיצה שמאלית כדי לראות את חברי הקלאן שלך או להזמין עוד
gui.staffclandetails.roster.lore=&7לחיצה שמאלית כדי לראות את חברי הקלאן
gui.clandetails.coords.title=&fקורדינטות
gui.clandetails.coords.lore=&7לחיצה שמאלית לראות את הקורדינטות של חברי הקלאן שלך
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.set.price=&7קבע מחיר\: &b{0}
gui.clandetails.home.lore.set=&7לחיצה ימנית כדי להגדיר את בית הקלאן שלך
gui.staffclandetails.home.lore.set=&7לחיצה ימנית כדי להגדיר את בית הקלאן הזה
gui.clandetails.regroup.title=&7קיבוץ
gui.clandetails.regroup.lore.price=&7מחיר\: &b{0}
gui.clandetails.regroup.lore.home=&7לחיצה שמאלית כדי לקבץ את חברי הקלאן שלך בבית הקלאן
gui.clandetails.regroup.lore.me=&7לחיצה ימנית כדי לקבץ את חברי הקלאן שלך במיקומך
gui.clandetails.ff.title=&fאש ידידותית
gui.clandetails.ff.personal.lore=&7אישי\: &b{0}
gui.clandetails.ff.clan.lore=&7קלאן\: &b
gui.clandetails.ff.personal.toggle.lore=&7לחיצה שמאלית כדי להפעיל/לכבות את האש הידידותית שלך
gui.clandetails.ff.clan.toggle.lore=&7לחיצה ימנית כדי להפעיל/לכבות את האש הידידותית של הקלאן שלך
gui.clandetails.bank.title=&fבנק
gui.clandetails.bank.balance.lore=&7יתרה\: &b{0}
gui.clandetails.bank.withdraw.status.lore=&7משיכה\: &b{0}
gui.clandetails.bank.deposit.status.lore=&7הפקדה\: &b{0}
gui.clandetails.bank.withdraw.toggle.lore=&7זרוק את הפריט כדי להפעיל/לכבות את סטטוס המשיכה
gui.clandetails.bank.deposit.toggle.lore=&7לחיצה ימנית כדי להפעיל/לכבות את סטטוס ההפקדה
gui.clandetails.fee.title=&fעמלה
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.verified.title=&fמאומת
gui.clandetails.not.verified.title=&fלא מאומת
gui.clandetails.verify.price.lore=&7מחיר\: &b{0}
gui.clandetails.not.verified.lore=&7לחיצה שמאלית כדי לאמת את הקלאן שלך
gui.staffclandetails.not.verified.lore=&7לחיצה שמאלית כדי לאמת את הקלאן הזה
gui.clandetails.resign.title=&fעזיבה
gui.clandetails.resign.lore=&7לחיצה שמאלית כדי לעזוב את הקלאן שלך
gui.clandetails.disband.title=&fפירוק
gui.clandetails.disband.lore=&7זרוק את הפריט כדי לפרק את הקלאן שלך
gui.staffclandetails.disband.lore=&7לחיצה שמאלית כדי לפרק את הקלאן הזה
gui.clandetails.chat.title=&fצ'אט
gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - &bשולח הודעה בצ'אט הקלאן
gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &bמצטרף/עוזב את צ'אט הקלאן
gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - &bשולח הודעה בצ'אט הברית
gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &bמצטרף/עוזב את צ'אט הברית
gui.clandetails.chat.clan.status.lore=&7קלאן\: &b
gui.clandetails.chat.ally.status.lore=&7ברית\: &b{0}
gui.clandetails.chat.clan.toggle.lore=&7לחיצה שמאלית כדי לשנות את סטטוס צ'אט הקלאן
gui.clandetails.chat.ally.toggle.lore=&7לחיצה ימנית כדי לשנות את סטטוס צ'אט הברית
gui.playerdetails.title={0}
gui.playerdetails.player.title=
gui.playerdetails.player.lore.noclan=&7קלאן\: &bללא
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=&7יחס הריגות-מוות\: &b{0}
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}
# suppress inspection "TrailingSpacesInProperty"
gui.playerdetails.player.lore.past.clans.separator=
gui.playerdetails.player.lore.past.clans=&7קלאנים לשעבר\: &b{0}
gui.playerdetails.player.lore.inactive=&7חוסר פעילות\: &b{0}/{1} ימים
gui.playerdetails.kick.title=&fהעף
gui.playerdetails.promote.demote.title=&fקידום/שלילה
gui.playerdetails.promote.lore.left.click=&7לחיצה שמאלית להעלאה בדרגה
gui.playerdetails.demote.lore.right.click=&7לחיצה ימנית להורדה בדרגה
gui.playerdetails.assign.unassign.title=&fהענק/שלול דרגה
gui.playerdetails.assign.lore.left.click=&7לחיצה שמאלית כדי להעניק
gui.playerdetails.unassign.lore.right.click=&7לחיצה שמאלית כדי לשלול
gui.playerdetails.trust.untrust.title=&fמוסמך/לאמוסמך
gui.playerdetails.trust.lore.left.click=&7לחיצה שמאלית כדי להעניק סטטוס מוסמך
gui.playerdetails.untrust.lore.right.click=&7לחיצה שמאלית כדי להעניק סטטוס לא מוסמך
gui.playerdetails.ban.unban.title=&fבאן/אנבאן
gui.playerdetails.ban.left.click=&7לחיצה שמאלית כדי לחסום את השחקן מקלאנים
gui.playerdetails.unban.right.click=&7לחיצה ימנית כדי לבטל חסימה לשחקן
gui.playerdetails.resetkdr.lore=&7לחיצה שמאלית כדי לאפס לשחקן הזה את יחס ההריגות-מוות
gui.playerdetails.purge.title=&fטיהור
gui.playerdetails.purge.lore=&7לחיצה שמאלית כדי לנקות את המידע על השחקן
gui.playerdetails.place.title=&fמקם
gui.playerdetails.place.lore=&7לחיצה שמאלית כדי לבחור קלאן לשחקן זה
gui.languageselector.title=שפות - נוכחות\: {0}
gui.languageselector.language.title=
gui.languageselector.language.lore.left.click=&7לחיצה שמאלית כדי להגדיר את שפה זו לשפה שלך
gui.languageselector.language.lore.translation.status=&7סטטוס תרגום\: &b{0}%
gui.languageselector.language.lore.right.click=&7לחיצה ימנית כדי לעזור לתרגם
gui.confirmation.title=אימות
gui.confirmation.confirm=&7לחץ כאן כדי לאמת
gui.confirmation.return=&7לחץ כאן כדי לחזור
gui.not.supported=&cאירעה שגיאה בעת פתיחת התפריט\! מבטל... האם הורדת את הגרסה הנכונה?
staff.member.verify.clan=&cחבר צוות חייב לאשר את הקלאן שלך\!
player.already.has.that.rank=&cלשחקן כבר יש את הדרגה הזאת\!
joined.clan.chat=&bהצטרפת לצ'אט קלאן
already.joined.clan.chat=&bאתה כבר בצ'אט קלאן
left.clan.chat=&bעזבת צ'אט קלאן
muted.clan.chat=&bהשתקת את צ'אט הקלאן
unmuted.clan.chat=&bביטלת השתקה של צ'אט הקלאן
joined.ally.chat=&bהצטרפת לצ'אט ברית
left.ally.chat=&bעזבת צ'אט ברית
muted.ally.chat=&bהשתקת את צ'אט ברית
unmuted.ally.chat=&bביטלת השתקה של צ'אט הברית
already.joined.ally.chat=&bאתה כבר בצ'אט ברית
player.already.in.this.clan=&cהשחקן כבר בקלאן הזה
your.clan.reached.max.alliances=&cהקלאן שלך הגיע למספר הבריתות המקסימלי
other.clan.reached.max.alliances=&cהקלאן האחר הגיע למספר הבריתות המקסימלי
insert.clan.tag=&b הכנס את תג הקלאן (או "{0}")\:
insert.clan.name=&bהכנס את שם הקלאן\:
insert.rank.name=&bהכנס את שם הדרגה (או "{0}")\:
click.to.help.translating=&bלחץ על הלינק הנ"ל כדי לעזור לתרגם\: \n&r{0}
your.clan.must.have.members.to.verify=&cהקלאן שלך צריך לפחות {0} חברים כדי להיות מאומת\!
you.must.hold.a.banner=&cאתה חייב באנר ביד שלך\!
you.changed.clan.banner=&bשינית את באנר הקלאן שלך\!
your.clan.already.verified=&cהקלאן שלך כבר מאומת\!
# suppress inspection "TrailingSpacesInProperty"
clan.profile=\n&b%clan_name%&7 פרופיל &8-------------------------------------------\n\n &7שם\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7תיאור\: &f%clan_description%\n &7סטטוס\: &f%clan_status%\n &7מנהיגים\: %clan_leaders%\n &7חברים מחוברים\: &f%clan_online_count%&7/&f%clan_size%\n &7יחס הריגות/מתות (Kdr)\: &e%clan_kdr%\n &7סך כל ההריגות\: &8[יריבים\:&f%clan_rival_kills% &8בעלי ברית\:&f%clan_ally_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% ימים
player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name%
# suppress inspection "TrailingSpacesInProperty"
player.lookup.killtype=&7סוג הריגה\: %player_kill_type%
player.lookup=\n&bהפרופיל של %player_name% &8-------------------------------------------\n\n &7קלאן\: &f%clan_name%\n &7דרגה\: &f%player_rank%\n &7סטטוס\: &f%player_status%\n &7יחס הריגות/מתות (Kdr)\: &e%player_kdr%\n &7סך כל ההריגות\: &8[יריבים\:&f%player_rival_kills% &8בעלי ברית\:&7%player_ally_kills% &8נייטרלים\:&f%player_neutral_kills% &8אזרחים\:&f%player_civilian_kills%&8]\n &7מתות\: &f%player_deaths%\n &7תאריך הצטרפות\: &f%player_join_date%\n &7נראה לאחרונה\: &f%player_last_seen%\n &7קלאנים קודמים\: &f%player_past_clans%\n &7חוסר פעילות\: &f%player_inactive_days%&7/&f%player_max_inactive_days% ימים\n %kill_type_line%
economy.disabled=&cכלכלה מושבתת\!
has.been.purged=הנתונים של {0} טוהרו
accepted.invitation=&bאתה אישרת את ההזמנה של {0}
denied.invitation=&cסירבת את ההזמנה של {0}
must.be.in.clan.to.pvp=&cאתה ו{0} חייבים להיות חברי קלאן כדי להילחם\!
clans.not.at.war.pvp.denied=&cהקלאן שלך לא במלחמה עם {0}\!
cannot.attack.civilians=&cאתה לא יכול לתקוף אזרחים\!
cannot.attack.clan.member=&cאתה לא יכול לתקוף חבר קלאן נוסף\!
cannot.attack.ally=&cאתה לא יכול לתקוף בן ברית\!
cannot.send.discord.message=אתה לא יכול לשלוח הודעות אל {0}. אתה לא חבר של הקלאן הזה\!
discordhook.is.disabled=&cאינטגרציה עם דיסקורד מושבתת או אינה זמינה\!
your.clan.doesnt.have.any.linked.player=לקלאן שלך אין משחקנים מקושרים
your.clan.doesnt.have.minimum.linked.player=לקלאן שלך אין מינימום שחקנים מקושרים
your.clan.is.not.on.the.whitelist=הקלאן שלך לא ברשימת המורשים
your.clan.already.has.channel=לקלאן שלך כבר יש ערוץ בדיסקורד
discord.reached.category.limit=דיסקורד הגיעו לכמות הקטגוריות המקסימלית\!
discord.reached.channels.limit=דיסקורד הגיעו לכמות הערוצים המקסימלית\!
discord.created.successfully=&bערוץ דיסקורד נוצר בהצלחה\!
you.did.not.link.your.account=אתה לא קישרת את חשבונך\!
# suppress inspection "TrailingSpacesInProperty"
cannot.change.member.fee.now=&cאין באפשרותך לשנות את עמלות חברי הקלאן קרוב למועד הגבייה
cannot.change.member.fee.hours=&cנסה שוב בעוד {0} שעות...
cannot.change.member.fee.minutes=&cנסה שוב בעוד {0} דקות...
cannot.kick.last.leader=&cאתה לא יכול להעיף את המנהיג האחרון\!
cannot.disband.permanent=&cאתה לא יכול לפרק את הקלאן הזה. הוא תחת סטטוס 'נצחי'.
you.can.only.set.base.in.your.land=&cאתה יכול להגדיר בית רק באדמה שלך\!
only.leaders.can.create.lands=&cרק מנהיגים יכולים ליצור אדמות\!
only.one.land.per.clan=&cלקלאן שלך כבר יש אדמה\!
only.clan.members.can.create.lands=&cרק חברי קלאן יכולים ליצור אדמות\!
land.allowed.all.actions=&bכל הפעולות מותרות\!
land.blocked.all.actions=&bכל הפעולות חסומות\!
land.allowed.action=&bפעולה מאושרת\!
land.blocked.action=&bפעולה חסומה\!
you.do.not.own.lands=&cאין לך אדמה עם בעלות\!
land.sharing.disabled=&cשיתוף אדמות מושבת\!
clan.chat.disabled=&cצ'אט הקלאן מושבת\!
ally.chat.disabled=&cצ'אט הברית מושבת\!
war.expired=המלחמה עם {0} הגיעה לתוקפה\!
you.cant.start.war.online.members.difference=אינך יכול להתחיל את המלחמה – לאחד הקלאנים יש יותר שחקנים מחוברים מהשני.
invitedplayer.invite.off=שחקן זה השבית הזמנות לקלאן
user.hasnt.played.before=&cהשחקן הזה לעולם לא התחבר לשרת
clan.list.balance.header=\n{0} &7דירוג קלאנים לפי יתרה &8-----------------------\n\n&8סה"כ קלאנים\: &7{1}\n\n&8\#&7. &8קלאן &7- &8יתרה
clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$
+2 -3
View File
@@ -3,8 +3,8 @@ create.command=létrehozás
delete.command=törlés
rank.command=rang
setdisplayname.command=név beállítása
setdefault.command=alap beállítás
removedefault.command=alap törlés
setdefault.command=simabeallitasa
removedefault.command=simatorlese
permissions.command=jogosultságok
list.command=lista
balance.command=egyenleg
@@ -94,7 +94,6 @@ help.command=segítség
leave.command=kilépés
join.command=belépés
mute.command=némítás
tag.completion=
acf-core.parameter.amount=darab
acf-core.parameter.member=tag
acf-core.parameter.rank=rang
@@ -94,8 +94,6 @@ help.command=aiuto
leave.command=leave
join.command=join
mute.command=mute
tag.completion=[tag]
name.completion=[nome]
acf-core.parameter.amount=importo
acf-core.parameter.member=membro
acf-core.parameter.rank=rango
@@ -418,7 +416,6 @@ inactive.0=Inattivo da\: {0}
clan.commands=clan comandi
you.can.only.modify.the.color.and.case.of.the.tag=È possibile modificare solo il colore e le maiuscole del nome clan
locale.has.been.changed=La lingua è stata cambiata con successo
locale.is.prohibited=
tag.changed.to.0=Tag cambiato in {0}
0.tag.changed.to.1=&bIl tag di {0} è stato modificato con successo in {1}
name.0=Nome\: {0}
+5 -15
View File
@@ -2,8 +2,8 @@ description.command=beschrijving
create.command=maak
delete.command=verwijderen
rank.command=rang
setdisplayname.command=Zet schermnaam
setdefault.command=Standaard instellingen
setdisplayname.command=setschermnaam
setdefault.command=standaard instellingen
removedefault.command=verwijder standaard instellingen
permissions.command=toestemmingen
list.command=lijst
@@ -11,13 +11,13 @@ balance.command=saldo
list.order.asc=oplopend
list.order.desc=aflopend
list.type.name=naam
list.type.kdr=Moord dood verhouding
list.type.kdr=kdr
list.type.size=grootte
list.type.founded=opgericht
list.type.active=actief
land.command=land
break.command=breek
interact.command=gebruik
break.command=break
interact.command=interact
place_block.command=place_block
damage.command=damage
interact_entity.command=interact_entity
@@ -45,7 +45,6 @@ rival.command=rivaal
bb.command=bb
clear.command=wissen
modtag.command=modtag
rename.command=hernoemen
toggle.command=toggle
tag.command=label
deposit.command=storten
@@ -93,7 +92,6 @@ help.command=help
leave.command=verlaten
join.command=toetreden
mute.command=dempen
name.completion=vernoemen
acf-core.parameter.amount=bedrag
acf-core.parameter.member=lid
acf-core.parameter.rank=rang
@@ -230,9 +228,6 @@ command.description.rank.permissions.available=Geeft een lijst van de beschikbar
command.description.rank.permissions.rank=Geeft een lijst van machtigingen voor een rank
command.description.rank.permissions.add=Voegt een toestemming toe aan een rank
command.description.rank.permissions.remove=Verwijdert een toestemming van een rank
command.description.rename=Hernoem je clan
command.description.mod.rename=Hernoem een clan
command.description.locale=Kies je taal
home-menu=/{0} home{1} - Teleport naar home van clan
home-set-menu=/{0} home set{1} - Stel de home van de clan' in
home-clear-menu=/{0} home clear{1} - Verwijder de home base van de clans
@@ -334,7 +329,6 @@ you.have.already.voted=Je hebt al gestemd
has.voted.to.deny={0} heeft gestemd om te weigeren
view.next.page=Typ /{0} om de volgende pagina te bekijken.
voted.to.accept={0} heeft gestemd om te accepteren
bulletin.board.header=Notitie bord
has.been.disbanded.rivalry.ended={0} is beëindigt. Rivaliteit is geëindigd.
has.been.disbanded.alliance.ended={0} is beëindigt. Alliantie is geëindigd.
clan.disbanded=Clan verwijderd
@@ -381,7 +375,6 @@ global.friendy.fire.is.now.managed.by.each.clan=Wereldwijde onderlinge pvp wordt
global.friendy.fire.is.already.being.managed.by.each.clan=Wereldwijde onderlinge pvp wordt al beheerd door elke clan
global.friendly.fire.is.set.to.allowed=Onderlinge pvp is ingesteld op toegestaan
global.friendly.fire.is.already.being.allowed=Onderlinge pvp is ingesteld op niet toegestaan
the.player.doesn.t.not.have.the.permissions.to.join.clans=De speler heeft niet de juiste rechten om de clan te joinen
you.cannot.invite.yourself=Je kunt jezelf niet uitnodigen
you.did.not.answer.in.time=Je hebt niet op tijd geantwoord, annuleren...
this.player.is.banned.from.using.clan.commands=Deze speler is verbannen van het gebruik van clan commando's
@@ -403,8 +396,6 @@ kdr.0=KDR\: {0}
inactive.0=Inactief\: {0}
clan.commands=clan commando's
you.can.only.modify.the.color.and.case.of.the.tag=Je kunt alleen de kleur en het uiterlijk van de tag aanpassen
locale.has.been.changed=Je taalkeuze is veranderd
locale.is.prohibited=Taalkeuze is verboden op deze server
tag.changed.to.0=Tag gewijzigd naar {0}
0.tag.changed.to.1=&bSuccesvol de tag van {0} gewijzigd naar {1}
name.0=Naam\: {0}
@@ -543,7 +534,6 @@ bb.minutes= \ minuten
bb.one.minute=1 minuut
bb.hours= \ uren
bb.one.hour=1 uur
bb.days= Notitie bord
bb.one.day=1 dag
the.fee.is.0.and.its.current.value.is.1=De vergoeding is {0} en de huidige waarde is {1}$
fee.enabled=ingeschakeld
+23 -34
View File
@@ -1,11 +1,11 @@
description.command=opis
create.command=Utwórz
delete.command=Usuń
rank.command=Ranga
setdisplayname.command=Ustaw wyświetlaną nazwę
setdefault.command=Ustaw domyślne
removedefault.command=Usuń jako domyślne
permissions.command=Uprawnienia
create.command=utwórz
delete.command=usuń
rank.command=ranga
setdisplayname.command=ustaw wyświetlaną nazwę
setdefault.command=ustaw domyślne
removedefault.command=usuń jako domyślne
permissions.command=uprawnienia
list.command=lista
balance.command=saldo
list.order.asc=asc
@@ -94,11 +94,9 @@ help.command=pomoc
leave.command=opuść
join.command=dołącz
mute.command=wycisz
tag.completion=
name.completion=[nazwa]
acf-core.parameter.amount=ilość
acf-core.parameter.member=Członek
acf-core.parameter.rank=Ranga
acf-core.parameter.rank=ranga
acf-core.parameter.leader=Przywódca
acf-core.parameter.displayname=Wyświetlana nazwa
acf-core.parameter.permission=Uprawnienia
@@ -234,8 +232,6 @@ command.description.rank.permissions.add=Dodaj uprawnienia do tego węzła
command.description.rank.permissions.remove=Usuwa uprawnienia z rangi
command.description.rename=Zmienia nazwę twojego klanu
command.description.mod.rename=Zmienia nazwę klanu
command.description.locale=Ustawia Twój język
command.description.mod.locale=
home-menu=/{0} home{1} - Teleportuje w miejsce zapisanej lokacji
home-set-menu=/{0} home set{1} - Ustaw teleport klanu
home-clear-menu=/{0} dom czysty{1} - wyczyść bazę klanu
@@ -264,7 +260,7 @@ seen=Widziany
leader=Przywódca
roster=lista
trusted=zaufany
untrusted=niezaufany
untrusted=niegodny
in.rank=w rankingu
deaths=Zgony
weights=Wagi
@@ -272,7 +268,7 @@ stats=statystyki
health=Zycie
armor=Zbroja
weapons=Bronie
food=Jedzenie
food=Zarcie
vitals=statystyki
verified=zweryfikowane
unverified=niezweryfikowane
@@ -298,7 +294,7 @@ signed.off.request.cancelled={0} odszedl z klanu. {1} odrzucil propozycje
clan.deletion={0} nie zgodzil sie nie usuniecie klanu.
rename.refused={0} nie zgodził się na usunięcie klanu. Nie osiągnięto porozumienia.
has.been.disbanded=Klan {0} zostal rozwiazany
denied.the.promotion={0} odrzucił awans {1}. Nie osiagnieto porozumienia.
denied.the.promotion={0} denied the promotion of {1}. Nie osiagnieto porozumienia.
demoted.back.to.member={0} zostal zdegradowany do czlonka klanu
peace.agreement.denied=Propozycja pokojnowa z klanem {0} zostala odrzucona.
denied.to.make.peace={0} Nie zgodzil sie zawrzec pokoju z {1}
@@ -318,8 +314,8 @@ asking.to.disband={0} prosi o rozwiązanie klanu
asking.to.rename={0} prosi o zmianę nazwy klanu na {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n &8[&8{0}&8] &b{1}\n %accept% &blub %deny%\n
clickable.accept=&a&[AKCEPTUJ]
clickable.deny=&c&[ODRZUC]
clickable.accept=&a&[ACCEPT]
clickable.deny=&c&[DENY]
hover.click.to.accept=&aKliknij tutaj, aby zaakceptować
hover.click.to.deny=&cKliknij tutaj, aby odrzucić
not.sufficient.money=Nie masz wystarczającej ilości pieniędzy na swoim koncie (potrzebne\: {0} $)
@@ -358,7 +354,7 @@ your.clans.are.not.allies=Wasze klany nie sa sojusznikami
has.broken.the.alliance={0} zerwal sojusz z {1}
at.least.one.leader.accept.the.alliance=Co najmniej jeden z przywodcow klanu musi byc dostepny aby przyjac propozycje sojuszu.
leaders.have.been.asked.for.an.alliance=Przywodcy {0} zostali zapytani o sojusz.
your.clans.are.already.allies=Wasze klany to już sojusznicy
your.clans.are.already.allies=Toc wasze klany to juz sojusznicy
your.clan.cannot.create.rivals=Twoj klan nie moze miec wrogow
min.players.rivalries=Musisz miec w klanie co najmniej {0} czlonkow aby moc wypowiadac wojny.
this.player.is.already.banned=Ten gracz ma juz bana
@@ -368,19 +364,14 @@ clan.wide.friendly.fire.blocked=Friendly Fire dla calego klanu jest wylaczony.
clan.wide.friendly.fire.is.allowed=Friendly Fire dla calego klanu jest wlaczony.
you.are.the.only.member.online=Jestes jedynym czlonkiem klanu online. Badz czujny.
your.clan.color.tag.cannot.be.longer.than.characters=&cKolorowy tag klanu nie może być dłuższy niż {0} znaków
your.clan.tag.cannot.be.longer.than.characters=Tag twojej gildii nie może być dłuższy niż {0} znaków
your.clan.tag.must.be.longer.than.characters=Tag twojego klanu musi być dłuższy od {0} znaków
your.tag.doesnt.meet.the.requirements=Twój tag nie osiąga potrzebnych wymagań.
your.tag.cannot.contain.color.codes=&cNazwa twojego klanu nie moze zawierac kodow kolorow
you.cannot.set.colored.ranks=Nie możesz ustawić koloru rang
your.clan.name.cannot.be.longer.than.characters=Nazwa klanu nie moze byc dluzsza niz {0} znakow
your.clan.name.must.be.longer.than.characters=Nazwa twojego klanu musi byc dluzsza niz {0} znakow
your.clan.name.cannot.contain.color.codes=Nazwa twojego klanu nie moze zawierac kodow kolorow
that.tag.name.is.disallowed=Ten tag jest niedozwolony
you.must.first.resign=Najpierw musisz odejsc z {0}
clan.with.this.tag.already.exists=Klan o takim Tagu juz istnieje
get.your.clan.verified.to.access.advanced.features=Weryfikacja twojego klanu umozliwi dostep do pozostalych opcji
clan.created=Klan {0} pomyslnie utworzony
clan.created=Clan {0} pomyslnie utworzony
not.enough.leaders.online.to.vote.on.demotion=Brak wystarczającej liczby liderów online, aby głosować na ta degradacje
demotion.vote.has.been.requested.from.all.leaders=Wszyscy przywodcy zostali poproszeni o glos w sprawie degradacji
player.is.not.a.leader.of.your.clan=Ten gracz nie jest przywodca twojego klanu
@@ -406,7 +397,7 @@ has.been.kicked.by={0} został wyrzucony przez {1}
no.clans.have.been.created=Żadne klany nie zostały utworzone
total.clans=Wszystkie klany\:
legend=Legenda\:
kill.type.civilian=Zabito\: {0} Cywili
kill.type.civilian=Zabito\: {0}Cywili
no.player.data.found=Nie znaleziono danych gracza
clan.0=Klan\: {0}
status.0=Status\: {0}
@@ -415,8 +406,6 @@ kdr.0=KDR\: {0}
inactive.0=Nieaktywny\: {0}
clan.commands=komendy klanowe
you.can.only.modify.the.color.and.case.of.the.tag=Możesz modyfikować tylko kolor i wielkość liter tagu
locale.has.been.changed=Zmieniono Twój język
locale.is.prohibited=Wybór języka na serwerze jest zabroniony.
tag.changed.to.0=Tag zmieniony na {0}
0.tag.changed.to.1=&bPomyślnie zmieniono tag {0} na {1}
name.0=Nazwa\: {0}
@@ -445,7 +434,7 @@ has.been.given.untrusted.status.by={0} otrzymal status osoby niegodnej zaufania
the.clan.does.not.exist=Ten klan nie istnieje
the.clan.is.already.verified=Ten klan jest juz zweryfikowany
the.clan.has.been.verified=Klan zostal zweryfikowany
clan.0.has.been.verified=Klan {0} zostal zweryfikowany\!
clan.0.has.been.verified=Clan {0} zostal zweryfikowany\!
total.clan.players.0=Wszystkich graczy\: {0}
proposing.war={0} proponuje rozpoczac wojne z {1}
you.can.only.start.war.with.rivals=Mozesz tylko rozpoczac wojne z rywalami
@@ -486,7 +475,7 @@ leader.announce=Ogłoszenie przywódcy
hunger=Głód
stone=kamien
iron=żelazo
the.clan.cannot.be.rivaled=Klan nie moze rywalizowac
the.clan.cannot.be.rivaled=Klan nie moze byc rywalizowal
bboff=BB wyłączony
bbon=BB włączony
inviteon=Zaproszenie włączone
@@ -625,13 +614,13 @@ gui.main.reset.kdr.lore.price=&7Cena\: &b{0}
gui.main.reset.kdr.lore=&7Kliknij lewym przyciskiem myszy, aby zresetować KDR
gui.main.leaderboard.title=&fRanking
gui.main.leaderboard.lore=&7Lewy-przycisk, zeby zobaczyc ranking
gui.main.staff.title=&fZarządzanie
gui.main.staff.title=&fStaff
gui.main.staff.lore=&7Kliknij lewym przyciskiem myszy aby otworzyć Staff menu
gui.staff.title=Zarządzanie
gui.staff.title=Staff
gui.staff.clan.list.lore.left.click=&7Kliknij lewym przyciskiem myszy, aby zobaczyć listę klanów
gui.staff.clan.list.lore.right.click=&7Kliknij prawym przyciskiem myszy, aby zobaczyć wszystkie niezweryfikowane klany
gui.player.list.title=Lista graczy
gui.staff.player.list.title=&fLista graczy
gui.staff.player.list.title=&Lista graczy
gui.staff.player.list.lore.left.click=&7Kliknij lewym przyciskiem myszy, aby zobaczyć wszystkich graczy
gui.staff.player.list.lore.right.click=&7Kliknij prawym przyciskiem myszy, aby zobaczyć wszystkich graczy online
gui.staff.global.ff.title=&fGlobalny Friendly Fire
@@ -650,7 +639,7 @@ gui.warning.not.verified.title=&fNiezweryfikowany
gui.warning.not.verified.lore=&7Twój klan musi zostać zweryfikowany\!
gui.allies.title=Sojusznicy
gui.allies.clan.lore=&7Kliknij prawym przyciskiem myszy, aby usunąć tego sojusznika
gui.allies.add.title=&fDodaj sojusznika
gui.allies.add.title=&Dodaj sojusznika
gui.add.ally.title=Dodaj sojusznika
gui.add.ally.clan.lore=&7Kliknij lewym przyciskiem myszy, aby zobaczyć listę klanów
gui.rivals.title=Wrgogowie
@@ -709,7 +698,7 @@ gui.clandetails.clan.lore.fee=&7Opłata\: &b{0}, {1}$
gui.clandetails.clan.lore.allies.separator=&b,
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.rivals.separator=&b,
gui.clandetails.clan.lore.allies=&7Sojusznicy\: {0}
gui.clandetails.clan.lore.allies=&Sojusznicy\: {0}
gui.clandetails.clan.lore.rivals=&7Wrogowie\: &b{0}
gui.clandetails.clan.lore.founded=&7Założono\: &b{0}
gui.clandetails.clan.lore.inactive=&7Nieaktywne\: &b{0}/{1} dni
+8 -11
View File
@@ -94,8 +94,6 @@ help.command=ajuda
leave.command=sair
join.command=entrar
mute.command=silenciar
tag.completion=
name.completion=[name]
acf-core.parameter.amount=quantidade
acf-core.parameter.member=membro
acf-core.parameter.rank=cargo
@@ -368,17 +366,17 @@ clan.wide.friendly.fire.blocked=Fogo amigo do clã bloqueado
clan.wide.friendly.fire.is.allowed=Fogo amigo do clã permitido
you.are.the.only.member.online=Você é o único membro online
your.clan.color.tag.cannot.be.longer.than.characters=&cA tag colorida do seu clã não pode ter mais de {0} caracteres
your.clan.tag.cannot.be.longer.than.characters=&c» A tag do seu clã não pode ser maior que {0} caracteres
your.clan.tag.must.be.longer.than.characters=&c» A tag do seu clã deve ser maior que {0} caracteres
your.tag.cannot.contain.the.following.colors=&c» Sua tag não pode conter as seguintes cores\: {0}
your.tag.doesnt.meet.the.requirements=&c» Sua tag não cumpre os requisitos.
your.tag.cannot.contain.color.codes=&c» Sua tag não pode conter códigos de cores
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&c» A tag do seu clã pode conter apenas letras, números e códigos de cores
your.clan.tag.cannot.be.longer.than.characters=&cA tag do seu clã não pode ser maior que {0} caracteres
your.clan.tag.must.be.longer.than.characters=&cA tag do seu clã deve ser maior que {0} caracteres
your.tag.cannot.contain.the.following.colors=&cSua tag não pode conter as seguintes cores\: {0}
your.tag.doesnt.meet.the.requirements=&cSua tag não cumpre os requisitos.
your.tag.cannot.contain.color.codes=&cSua tag não pode conter códigos de cores
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cA tag do seu clã pode conter apenas letras, números e códigos de cores
you.cannot.set.colored.ranks=Você não pode definir cargos coloridos
your.clan.name.cannot.be.longer.than.characters=O nome do seu clã não pode ser maior que {0} caracteres
your.clan.name.must.be.longer.than.characters=O nome do seu clã deve ser maior que {0} caracteres
your.clan.name.cannot.contain.color.codes=O nome do seu clã não pode conter códigos de cor
that.tag.name.is.disallowed=&c» A tag desejada não é permitida.
that.tag.name.is.disallowed=&cEsse nome de tag não é permitido
you.must.first.resign=Você antes precisa abandonar {0}
clan.with.this.tag.already.exists=Um clã com essa tag já existe
get.your.clan.verified.to.access.advanced.features=Verifique o seu clã para ter acesso a funções mais avançadas
@@ -417,8 +415,7 @@ kdr.0=KDR\: {0}
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
locale.has.been.changed=&c» O seu idioma foi alterado
locale.is.prohibited=&cSeleção Idioma no servidor é proibido.
locale.has.been.changed=&cO seu idioma foi alterado
tag.changed.to.0=Tag modificada para {0}
0.tag.changed.to.1=&bAlterou a tag do clã {0} para {1} com sucesso
name.0=Nome\: {0}
@@ -94,7 +94,6 @@ help.command=ajuda
leave.command=sair
join.command=entrar
mute.command=silenciar
tag.completion=
acf-core.parameter.amount=quantidade
acf-core.parameter.member=membro
acf-core.parameter.rank=cargo
+5 -8
View File
@@ -43,7 +43,7 @@ assign.command=assign
unassign.command=unassign
rival.command=rival
bb.command=bb
display.command=display
display.command=отображение
clear.command=clear
modtag.command=modtag
rename.command=rename
@@ -94,9 +94,7 @@ help.command=help
leave.command=leave
join.command=join
mute.command=mute
tag.completion=[тег]
name.completion=[название]
acf-core.parameter.amount=amount
acf-core.parameter.amount=сумма
acf-core.parameter.member=участник
acf-core.parameter.rank=rank
acf-core.parameter.leader=лидер
@@ -150,7 +148,7 @@ command.description.discord.create=Создаёт Discord канал для ва
command.description.ff.allow=Разрешить "огонь по своим" для вас
command.description.ff.auto=Установить ваш статус "огонь по своим" по умолчанию
command.description.globalff.allow=Разрешить участникам всех кланов бить друг друга
command.description.globalff.auto=Установить глобальный статус "огонь по своим" по умолчанию
command.description.globalff.auto=Установить глобальный статус "огонь по своим" по умолчанию
command.description.clanff.allow=Разрешить "огонь по своим" участникам вашего клана
command.description.clanff.block=Запретить "огонь по своим" участникам вашего клана
command.description.description=Установить описание вашего клана
@@ -364,7 +362,7 @@ min.players.rivalries=У вашего клана должно быть не ме
this.player.is.already.banned=Этот игрок уже забанен
player.added.to.banned.list=Игрок был добавлен в бан-лист
you.banned=Вам был заблокирован доступ к командам клана
clan.wide.friendly.fire.blocked="Огонь по своим" в клане запрещён\!
clan.wide.friendly.fire.blocked="Огонь по своим" в клане запрещён
clan.wide.friendly.fire.is.allowed="Огонь по своим" в клане был разрешён
you.are.the.only.member.online=Вы единственный участник онлайн
your.clan.color.tag.cannot.be.longer.than.characters=&cЦветной тег вашего клана не может быть длиннее {0} символов
@@ -374,7 +372,7 @@ your.tag.cannot.contain.the.following.colors=&cВаш тег не может с
your.tag.doesnt.meet.the.requirements=&cВаш тег не соответствует требованиям.
your.tag.cannot.contain.color.codes=&cВаш тег не может содержать цветовые коды
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cТег вашего клана может содержать только буквы, цифры и цветовые коды
you.cannot.set.colored.ranks=Вы не можете установить цвет рангом
you.cannot.set.colored.ranks=Вы не можете установить цвет рангам
your.clan.name.cannot.be.longer.than.characters=Имя вашего клана не может быть длиннее {0} символов
your.clan.name.must.be.longer.than.characters=Имя вашего клана должно быть длиннее {0} символов
your.clan.name.cannot.contain.color.codes=Имя вашего клана не может содержать цветовые коды
@@ -418,7 +416,6 @@ inactive.0=Неактивно\: {0}
clan.commands=команды клана
you.can.only.modify.the.color.and.case.of.the.tag=Вы можете изменить только цвет и регистр тега
locale.has.been.changed=&cВаш язык был изменен
locale.is.prohibited=
tag.changed.to.0=Тег изменён на {0}
0.tag.changed.to.1=&bТег {0} успешно изменён на {1}
name.0=Имя\: {0}
@@ -146,63 +146,13 @@ command.description.more=แสดงข้อมูลเพิ่มเติ
command.description.create=สร้างแคลน
command.description.discord.create=สร้างช่อง Discord สำหรับเเคลนของคุณ
command.description.ff.allow=อนุญาตให้ทําร้ายมิตรส่วนตัวของคุณได้
command.description.ff.auto=อนุญาตให้ทําร้ายมิตรส่วนตัวของคุณได้
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.home=รวมสมาชิกแคลนของคุณไปยังบ้านของแคลน
command.description.home.tp=วาร์ปไปที่บ้านของแคลน
command.description.home.clear=ล้างบ้านของแคลน
command.description.home.set=ตั้งบ้านแคลน
command.description.mod.home.set=ตั้งบ้านแคลน
command.description.mod.home.tp=กลับบ้านแคลน
command.description.rival.remove=ลบศัตรูออกจากรายการ
command.description.rival.add=เพิ่มศัตรูเข้าในรายการ
command.description.ally.remove=ลบพันธมิตรออกจากรายการ
command.description.kick=เตะสมาชิกจากแคลน
command.description.bb.display=แสดงกระดานข่าวของแคลน
command.description.bb.clear=ล้างกระดานข่าวของแคลน
command.description.bb.post=โพสต์ข้อความลงกระดานข่าวของแคลน
command.description.mod.bb.display=แสดงกระดานข่าวของแคลน (สำหรับผู้ดูแล)
command.description.mod.bb.clear=ล้างกระดานข่าวของแคลน (สำหรับผู้ดูแล)
command.description.mod.bb.post=โพสต์ข้อความลงกระดานข่าวของแคลน (สำหรับผู้ดูแล)
command.description.place=เพิ่มผู้เล่นเข้าแคลน
command.description.reload=รีโหลดปลั๊กอินและการตั้งค่าใหม่
command.description.trust=ให้ความไว้วางใจกับสมาชิก
command.description.untrust=ถอนความไว้วางใจจากสมาชิก
command.description.resign=ลาออกจากแคลน
command.description.help=แสดงความช่วยเหลือหรือค้นหาในระบบช่วยเหลือ
command.description.ally.add=เพิ่มพันธมิตรเข้าในแคลน
command.description.clan=เปิด GUI
command.description.disband=ยุบแคลน
command.description.mod.disband=ยุบแคลน
command.description.mod.kick=เตะผู้เล่นออกจากแคลน
command.description.modtag.other=แก้ไขแท็กของแคลนอื่น
command.description.modtag=แก้ไขแท็กของแคลนคุณ
command.description.purge=ลบข้อมูลบางส่วนของผู้เล่น
command.description.setbanner=ตั้งแบนเนอร์ของแคลน
command.description.verify=ยืนยันแคลนของคุณ
command.description.mod.verify=ยืนยันแคลน (สำหรับผู้ดูแล)
command.description.invite=เชิญผู้เล่นเข้าร่วมแคลนของคุณ
command.description.fee.check=ตรวจสอบค่าธรรมเนียมของแคลนและสถานะการใช้งาน
command.description.fee.set=ตั้งค่าธรรมเนียมของแคลน
command.description.bank.status=ตรวจสอบยอดเงินในธนาคารของแคลนคุณ
command.description.bank.admin.status=ตรวจสอบยอดเงินในธนาคารของแคลน (สำหรับแอดมิน)
command.description.bank.withdraw.all=ถอนเงินทั้งหมดออกจากธนาคารของแคลน
command.description.bank.withdraw.amount=ถอนเงินจำนวนหนึ่งออกจากธนาคารของแคลน
command.description.bank.admin.take=นำเงินจำนวนหนึ่งออกจากธนาคารของแคลน (สำหรับแอดมิน
command.description.bank.deposit.all=ฝากเงินทั้งหมดของคุณเข้าไปในธนาคารของแคลน
command.description.bank.deposit.amount=ฝากเงินจำนวนหนึ่งเข้าไปในธนาคารของแคลน
command.description.bank.admin.give=มอบเงินจำนวนหนึ่งให้กับธนาคารของแคลน
command.description.bank.admin.set=ตั้งค่าจำนวนเงินในธนาคารของแคลน (สำหรับแอดมิน)
command.description.war.start=เริ่มสงคราม
command.description.war.end=จบสงคราม
command.description.resetkdr.everyone=รีเซ็ตค่า KDR ของทุกคน
command.description.resetkdr.player=รีเซ็ต KDR ของผู้เล่น
command.description.resetkdr=รีเซ็ต KDR ของคุณ
command.description.admin.demote=ลดระดับ leader จากเเคลนใด ๆ
@@ -210,49 +160,8 @@ command.description.demote=ลดระดับ leader
command.description.admin.promote=เลื่อนระดับสมาชิกจากเเคลนใด ๆ
command.description.promote=เลื่อนระดับสมาชิกให้เป็น leader
command.description.admin.permanent=สลับสถานะถาวรของเเคลนใด ๆ
command.description.toggle.invite=เปิด/ปิด การให้ผู้เล่นส่งคำเชิญเข้าร่วมแคลนถึงคุณ
command.description.toggle.tag=เปิด/ปิด การแสดงแท็กของแคลนถัดจากชื่อของคุณ
command.description.toggle.deposit=เปิด/ปิด การฝากเงินในธนาคารของแคลน
command.description.toggle.withdraw=เปิด/ปิด การถอนเงินจากธนาคารของแคลน
command.description.toggle.fee=เปิด/ปิด ค่าธรรมเนียมของแคลน
command.description.alliances=แสดงรายการพันธมิตรของทุกแคลน
command.description.coords=แสดงพิกัดของสมาชิกในแคลนของคุณ
command.description.rank.assign=มอบระดับให้สมาชิก
command.description.rank.unassign=นำสมาชิกออกจากระดับที่ได้รับ
command.description.rank.create=สร้างแคลนใหม่
command.description.rank.delete=ลบแคลน\n
command.description.rank.setdisplayname=ตั้งชื่อแสดงของแคลน
command.description.rank.setdefault=ตั้งค่าระดับเริ่มต้นของแคลน
command.description.rank.removedefault=ลบระดับเริ่มต้นของแคลน
command.description.rank.permissions.available=แสดงรายการสิทธิ์ที่มีให้ใช้สำหรับระดับในแคลน
command.description.rank.permissions.rank=แสดงสิทธิ์ที่มีอยู่ของระดับในแคลน
command.description.rank.permissions.add=เพิ่มสิทธิ์ให้ระดับในแคลน
command.description.rank.permissions.remove=ลบสิทธิ์ออกจากระดับในแคลน
command.description.rename=เปลี่ยนชื่อแคลนของคุณ
command.description.mod.rename=เปลี่ยนชื่อแคลน (สำหรับผู้ดูแลระบบ)
command.description.locale=ตั้งค่าภาษาในแคลนของคุณ
command.description.mod.locale=ตั้งค่าภาษาของผู้เล่นในแคลน (สำหรับผู้ดูแลระบบ)
home-menu=วาร์ปไปยังฐานหลักของแคลน
home-set-menu=ตั้งค่าฐานหลักของแคลน
home-clear-menu=ล้างฐานหลักของแคลน
clan=ดูข้อมูลแคลน
allies=ดูพันธมิตรของแคลน
alliances=พันธมิตร
coords=พิกัด
name=ดูชื่อแคลน
distance=ดูระยะทางระหว่างแคลน
coords.upper=พิกัด
world=โลก
kdr=อัตราส่วนฆ่าตาย (Kill/Death Ratio)
members=สมาชิกแคลน
clans.lower=รายชื่อแคลน
rival=ศัตรูของแคลน
civilian=พลเรือน (ผู้เล่นที่ไม่สังกัดแคลน)
neutral=สถานะเป็นกลาง
ally=พันธมิตรของแคลน
free.agent=ผู้เล่นอิสระ (ยังไม่มีแคลน)
days=จำนวนวัน
rivals=\ รายชื่อศัตรูของแคลน
rivalries=การแข่งขัน
online=ออนไลน์
player=ผู้เล่น
@@ -261,11 +170,7 @@ leader=หัวหน้าแคลน
roster=บัญชีรายชื่อ
trusted=เชื่อถือได้ (Automatic Translation)
untrusted=ไม่น่าเชื่อถือ (Automatic Translation)
in.rank=อยู่ในระดับของแคลน
deaths=
weights=
stats=สถานะ
health=Health
vitals=พลังชีวิต
profile=ข้อมูลส่วนตัว
rank=อันดับ
@@ -280,8 +185,6 @@ allow=ยินยอม
block=บล็อก
auto=อัตโนมัติ
war=สงคราม
gui.allies.title=ดูพันธมิตรของแคลน
gui.rivals.title=\ รายชื่อศัตรูของแคลน
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
@@ -94,7 +94,6 @@ help.command=yardım
leave.command=ayrıl
join.command=katıl
mute.command=sustur
tag.completion=
acf-core.parameter.amount=Miktar
acf-core.parameter.member=üye
acf-core.parameter.rank=rütbe
@@ -233,8 +232,6 @@ command.description.rank.permissions.add=Bir rütbeye izin ekler
command.description.rank.permissions.remove=Bir rütbeden bir izni kaldırır
command.description.rename=Klanına Yeni Bir İsim Ver
command.description.mod.rename=Klana Yeni Bir İsim Ver
command.description.locale=
command.description.mod.locale=turkish
home-menu=/{0} ev{1} - Klan evine ışınlanma
home-set-menu=/{0} ev ayarla{1} - Klan evini ayarla
home-clear-menu=/{0} ev temizle{1} - Klanın evini temizle
@@ -367,7 +364,6 @@ clan.wide.friendly.fire.blocked=Klan çapında dost ateşi engellendi
clan.wide.friendly.fire.is.allowed=Klan çapında dost ateşine izin verildi
you.are.the.only.member.online=Çevrimiçi tek üye sizsiniz
your.clan.color.tag.cannot.be.longer.than.characters=&cKlanınızın renkli etiketi {0} karakterden uzun olamaz
your.clan.tag.cannot.be.longer.than.characters=&Klanınızın etiketi {0} karakterden uzun olamaz
you.cannot.set.colored.ranks=Renkli rütbeler ayarlayamazsınız
your.clan.name.cannot.be.longer.than.characters=Klanınızın adı {0} karakterden uzun olamaz
your.clan.name.must.be.longer.than.characters=Klanınızın adı {0} karakterden uzun olmalıdır
+20 -32
View File
@@ -11,7 +11,7 @@ balance.command=balance
list.order.asc=asc
list.order.desc=desc
list.type.name=name
list.type.kdr=В/С
list.type.kdr=співвідн. В/С
list.type.size=size
list.type.founded=founded
list.type.active=active
@@ -43,7 +43,7 @@ assign.command=assign
unassign.command=unassign
rival.command=rival
bb.command=bb
display.command=display
display.command=відображення
clear.command=clear
modtag.command=modtag
rename.command=перейменувати
@@ -94,12 +94,10 @@ help.command=help
leave.command=leave
join.command=join
mute.command=mute
tag.completion=[tag]
name.completion=[name]
acf-core.parameter.amount=сума
acf-core.parameter.member=учасник
acf-core.parameter.amount=кількість
acf-core.parameter.member=Учасник
acf-core.parameter.rank=rank
acf-core.parameter.leader=лідер
acf-core.parameter.leader=Лідер
acf-core.parameter.displayname=відображуване ім'я
acf-core.parameter.permission=дозвіл
acf-core.parameter.message=повідомлення
@@ -118,14 +116,14 @@ command.description.land.allow.interact=Дозволяє членам клану
command.description.land.allow.container=Дозволяє членам клану відчиняти сховища на вашій території
command.description.land.allow.place=Дозволяє членам клану розміщувати блоки на вашій території
command.description.land.allow.break=Дозволяє членам клану ламати блоки на вашій території
command.description.land.allow.damage=Дозволяє членам клану наносити та отримувати шкоду на вашій території
command.description.land.allow.damage=Дозволяє членам клану наносити та отримувати пошкодження на вашій території
command.description.land.block.all=Забороняє усі дії на вашій території
command.description.land.block.interact_entity=Забороняє членам клану взаємодіяти з сутностями на вашій території
command.description.land.block.interact=Забороняє членам клану взаємодіяти на вашій території
command.description.land.block.container=Забороняє членам клану відчиняти сховища на вашій території
command.description.land.block.place=Забороняє членам клану розміщувати блоки на вашій території
command.description.land.block.break=Забороняє членам клану ламати блоки на вашій території
command.description.land.block.damage=Забороняє учасникам клану заподіювати шкоду на вашій території
command.description.land.block.damage=Забороняє учасникам клану заподіювати шкоду на вашій землі
command.description.stats=Показує статистику учасників вашого клану
command.description.rivalries=Показує усіх супротивників клану
command.description.mostkilled=Показує спільну статистику вбивств на усьому сервері
@@ -174,7 +172,7 @@ command.description.mod.bb.display=Показує дошку оголошень
command.description.mod.bb.clear=Очищує дошку оголошень вашого клану
command.description.mod.bb.post=Публікує повідомлення для дошки оголошень вашого клану
command.description.place=Розмістити гравця в клані
command.description.reload=Перезавантаження плагіна та його конфігурації
command.description.reload=Перезапускає плаґін та його конфігурацію
command.description.trust=Довіряти учаснику
command.description.untrust=Не довіряти учаснику
command.description.resign=Вийти з вашого клану
@@ -204,9 +202,9 @@ command.description.bank.admin.give=Видати суму грошей в кла
command.description.bank.admin.set=Встановити суму грошей в клановому банку
command.description.war.start=Почати війну
command.description.war.end=Закінчити війну
command.description.resetkdr.everyone=Скидає В/С всіх гравців
command.description.resetkdr.player=Скидає В/С гравця
command.description.resetkdr=Скидає ваші В/С
command.description.resetkdr.everyone=Скидає співвідн. В/С всіх гравців
command.description.resetkdr.player=Скидає співвідн. В/С гравця
command.description.resetkdr=Скидає ваше співвідн. В/С
command.description.admin.demote=Понизити лідера з будь-якого клану
command.description.demote=Понизити лідера
command.description.admin.promote=Підвищити будь-якого учасника з будь-якого клану
@@ -235,7 +233,6 @@ command.description.rank.permissions.remove=Забирає дозвіл зі з
command.description.rename=Перейменувати ваш клан
command.description.mod.rename=Перейменовує клан
command.description.locale=Sets your language
command.description.mod.locale=Встановити мову гравця
home-menu=/{0} home{1} - Телепорт до бази клану
home-set-menu=/{0} home set{1} - Встановлює базу клану
home-clear-menu=/{0} home clear{1} - Видаляє базу клану
@@ -247,7 +244,7 @@ name=Ім'я
distance=Відстань
coords.upper=Координати
world=Світ
kdr=В/С
kdr=Співвідн. В/С
members=Учасники
clans.lower=клани
rival=Суперник
@@ -261,7 +258,7 @@ rivalries=rivalries
online=В мережі
player=Гравець
seen=Був у мережі
leader=лідер
leader=Лідер
roster=roster
trusted=довірений
untrusted=не довірений
@@ -368,17 +365,10 @@ clan.wide.friendly.fire.blocked=Дружній вогонь у клані заб
clan.wide.friendly.fire.is.allowed=Дружній вогонь у клані дозволений
you.are.the.only.member.online=Ви єдиний учасник в мережі
your.clan.color.tag.cannot.be.longer.than.characters=&cКольоровий теґ вашого клану не може бути довшим за {0} символів
your.clan.tag.cannot.be.longer.than.characters=&cТег вашого клану не може бути довшим за {0} символів
your.clan.tag.must.be.longer.than.characters=&cТег вашого клану повинен бути довшим за {0} символів
your.tag.cannot.contain.the.following.colors=&cВаш тег не може містити наступні кольори\: {0}
your.tag.doesnt.meet.the.requirements=&cВаш тег не відповідає вимогам.
your.tag.cannot.contain.color.codes=&cВаш тег не може містити коди кольорів
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cТег вашого клану може містити лише латинські літери, цифри та коди кольору
you.cannot.set.colored.ranks=Ви не можете встановлювати кольорові звання
your.clan.name.cannot.be.longer.than.characters=Теґ вашого клану не може бути довшим за {0} символів
your.clan.name.must.be.longer.than.characters=Ім'я вашого клану повинне бути довшим за {0} символів
your.clan.name.cannot.contain.color.codes=Ім'я клану не може містити коди кольору
that.tag.name.is.disallowed=&cЦей тег заборонений
you.must.first.resign=Спершу вам необхідно вийти з {0}
clan.with.this.tag.already.exists=Клан з таким теґом вже існує
get.your.clan.verified.to.access.advanced.features=Отримайте підтвердження клану, щоб отримати доступ до додаткових функцій
@@ -417,8 +407,6 @@ kdr.0=В/С\: {0}
inactive.0=Неактивно\: {0}
clan.commands=кланові команди
you.can.only.modify.the.color.and.case.of.the.tag=Ви можете змінювати колір і регістр теґу
locale.has.been.changed=&cВаша мова була змінена
locale.is.prohibited=&cВибір мови на сервері заборонений.
tag.changed.to.0=Теґ змінено на {0}
0.tag.changed.to.1=&bТеґ {0} успішно змінено на {1}
name.0=Ім'я\: {0}
@@ -548,7 +536,7 @@ yes=Так
cancel=Скасувати
resign.confirmation=Ви впевнені, що хочете піти з клану? {0}
disband.confirmation=Ви впевнені, що хочете розпустити свій клан? {0}
resetkdr.confirmation=Ви впевнені, що бажаєте скинути В/С? {0}
resetkdr.confirmation=Ви впевнені, що бажаєте скинути KDR? {0}
resign.success=Ви успішно вийшли зі свого клану
you.cannot.demote.the.last.leader=Ви не можете понизити останнього лідера
you.cannot.move.the.last.leader=Ви не можете перемістити останнього лідера
@@ -599,7 +587,7 @@ deposit.not.allowed=Депозит не дозволений, використа
withdraw.not.allowed=Зняття грошей не дозволене, використайте /%clan %toggle %withdraw, щоб дозволити
resign.request.cancelled=Запит на вихід скасовано
disband.request.cancelled=Запит на розпущення клану скасовано
resetkdr.request.cancelled=Запит на скидання В/С скасовано
resetkdr.request.cancelled=Запит на скидання KDR скасовано
clan.create.request.cancelled=Запит на створення клану скасовано
rank.create.request.cancelled=Запит на створення звання скасовано
promotion.vote.has.been.requested.from.all.leaders=Голоси за підвищення надійшли від усіх лідерів
@@ -610,12 +598,12 @@ chat.joined=приєднався
chat.not.joined=не приєднався
chat.didnt.join=&bВи не приєднались до цього каналу
gui.loading=&7Завантаження...
gui.back.title=&fПовернутися
gui.back.title=&fНазад
gui.previous.page.title=&fМинула сторінка
gui.next.page.title=&fНаступна сторінка
gui.lore.no.permission=&cУ вас немає прав, щоб бачити це\!
gui.main.title={0} - Меню клану
gui.main.languageselector.title=&fЗмінити мову
gui.main.languageselector.title=&fОберіть вашу мову
gui.main.languageselector.lore.left.click=&7ЛКМ, щоб вибрати вашу мову
gui.main.languageselector.lore.right.click=&7ПКМ, щоб допомогти з перекладом
gui.main.other.commands.title=&fІнші команди
@@ -625,9 +613,9 @@ gui.main.clan.list.lore=&7ЛКМ, щоб переглянути список к
gui.main.reset.kdr.title=&fСкинути В/С
gui.main.reset.kdr.lore.price=&7Ціна\: &b{0}
gui.main.reset.kdr.lore=&7ЛКМ, щоб скинути свої В/С
gui.main.leaderboard.title=&fТаблиця лідерів
gui.main.leaderboard.title=&f Табличка лідерів
gui.main.leaderboard.lore=&7ЛКМ, щоб переглянути таблицю лідерів
gui.main.staff.title=&fПанель адміністратора
gui.main.staff.title=&f Панель адміністратора
gui.main.staff.lore=&7ЛКМ, щоб відкрити панель адміністратора
gui.staff.title=Панель адміністратора
gui.staff.clan.list.lore.left.click=&7ЛКМ, щоб переглянути всі клани
@@ -636,7 +624,7 @@ gui.player.list.title=Список гравців
gui.staff.player.list.title=&f Список гравців
gui.staff.player.list.lore.left.click=&7ЛКМ, щоб побачити всіх гравців
gui.staff.player.list.lore.right.click=&7ПКМ, щоб побачити всіх гравців в мережі
gui.staff.global.ff.title=&fГлобальний "вогонь по своїм"
gui.staff.global.ff.title=&f Глобальний дружній вогонь
gui.staff.global.ff.lore.status=&7Статус\: &b{0}
gui.staff.global.ff.lore.toggle=&7ЛКМ, щоб змінити статус дружнього вогню
gui.staff.reload.title=&fПерезавантажити
+2 -5
View File
@@ -1,4 +1,4 @@
description.command=description
description.command=描述
create.command=创建
delete.command=删除
rank.command=排名
@@ -94,8 +94,6 @@ help.command=用户指南
leave.command=离开
join.command=加入
mute.command=禁言
tag.completion=[tag]
name.completion=[name]
acf-core.parameter.amount=数量
acf-core.parameter.member=成员
acf-core.parameter.rank=排名
@@ -106,7 +104,7 @@ acf-core.parameter.message=信息
acf-core.parameter.tag=标签
acf-core.parameter.name=名称
acf-core.parameter.fee=费用
acf-core.parameter.description=description
acf-core.parameter.description=描述
acf-core.parameter.player=玩家
acf-core.parameter.clan=帮派
acf-core.parameter.type=类型
@@ -418,7 +416,6 @@ inactive.0=不活跃\: {0}
clan.commands=帮派命令
you.can.only.modify.the.color.and.case.of.the.tag=你只能更改标签的颜色和大小写
locale.has.been.changed=&c语言已切换
locale.is.prohibited=&c服务器未开放语言选择功能.
tag.changed.to.0=标签更改为 {0}
0.tag.changed.to.1=&b成功将 {0} 的标签修改为 {1}
name.0=名称\: {0}
File diff suppressed because it is too large. Load diff
-1
View File
@@ -11,7 +11,6 @@ loadbefore:
- GriefPrevention
- PlotSquared
api-version: '1.13'
folia-supported: true
authors:
- Phaed
- RoinujNosde