# This is the main configuration file for Spigot.
# As you can see, there's tons to configure. Some options may impact gameplay, so use
# with caution, and make sure you know what each option does before configuring.
# For a reference for any variable inside this file, check out the Spigot wiki at
# http://www.spigotmc.org/wiki/spigot-configuration/
# If you need help with the configuration or have any questions related to Spigot,
# join us at the Discord or drop by our forums and leave a post.
# Discord: https://www.spigotmc.org/go/discord
# Forums: http://www.spigotmc.org/
silent-commandblock-console: false
save-user-cache-on-stop-only: false
moved-wrongly-threshold: 0.0625
moved-too-quickly-multiplier: 10.0
restart-script: ./start.sh
log-villager-deaths: true
- minecraft:story/disabled
below-zero-generation-in-existing-chunks: true
unload-frozen-chunks: false
twistingvines-modifier: 100
weepingvines-modifier: 100
hopper-can-load-chunks: false
dragon-death-sound-radius: 0
seed-shipwreck: 165745295
jump-walk-exhaustion: 0.05
jump-sprint-exhaustion: 0.2
simulation-distance: default
tick-inactive-villagers: true
enable-zombie-pigmen-portal-spawns: true
trident-despawn-rate: 1200
wither-spawn-sound-radius: 0
hanging-tick-frequency: 100
zombie-aggressive-towards-villager: true
end-portal-sound-radius: 0
whitelist: You are not whitelisted on this server!
unknown-command: Unknown command. Type "/help" for help.
server-full: The server is full!
outdated-client: Outdated client! Please use {0}
outdated-server: Outdated server! I'm still on {0}
restart: Server is restarting
permissions-file: permissions.yml
connection-throttle: 4000
deprecated-verbose: default
shutdown-message: Server closed
use-map-color-cache: true
allow-old-keys-in-registry: false
enum-compatibility-mode: false
water-underground-creature: 5
water-underground-creature-spawns: 1
aliases: now-in-commands.yml
Clan.java (from my plugin)
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
private final Map<UUID, Rank> members = new HashMap<>();
private final Set<UUID> invitedPlayers = new HashSet<>();
private final Set<UUID> trustedMembers = new HashSet<>();
private final Set<UUID> joinRequests = new HashSet<>();
public Clan(String name, String color, UUID owner) {
members.put(owner, Rank.OWNER);
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
public UUID getOwner() { return owner; }
public void setOwner(UUID newOwner) { this.owner = newOwner; }
public String getMotto() { return motto; }
public void setMotto(String motto) { this.motto = motto; }
public Map<UUID, Rank> getMembers() { return members; }
public Set<UUID> getInvitedPlayers() { return invitedPlayers; }
public Set<UUID> getTrustedMembers() { return trustedMembers; }
public Set<UUID> getJoinRequests() { return joinRequests; }
public boolean isRepresentativeTrusted(UUID uuid) { return trustedMembers.contains(uuid); }
public Rank getRank(UUID uuid) { return members.get(uuid); }
public void addMember(UUID uuid, Rank rank) { members.put(uuid, rank); }
public void removePlayerFromAllTeams(Player player) {
team.removeEntry(player.getName());
public void unregisterAllTeams() {
public void removeMember(UUID uuid) {
trustedMembers.remove(uuid);
joinRequests.remove(uuid);
Player player = Bukkit.getPlayer(uuid);
if (team != null) team.removeEntry(player.getName());
player.setDisplayName(player.getName());
public void updateScoreboardTeam() {
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
ChatColor clanColor = ChatColor.valueOf(color.toUpperCase());
team = board.registerNewTeam(name);
team.setPrefix(clanColor + "[" + name + "] ");
team.setColor(clanColor);
for (UUID uuid : members.keySet()) {
Player player = Bukkit.getPlayer(uuid);
team.addEntry(player.getName());
updateDisplayName(player);
public void updateDisplayName(Player player) {
Rank rank = members.get(player.getUniqueId());
if (rank == null) return;
ChatColor clanColor = ChatColor.valueOf(color.toUpperCase());
String fullName = "" + ChatColor.RESET + clanColor + "[" + name + "] " + player.getName() + " " + clanColor + "[" + rank.getDisplayName() + "]" + ChatColor.RESET;
player.setDisplayName(fullName);
for (UUID uuid : members.keySet()) {
Player player = Bukkit.getPlayer(uuid);
player.setDisplayName(player.getName());
ClanManager.java (from my plugin)
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.io.IOException;
import java.util.logging.Level;
public class ClanManager {
public final Map<String, Clan> clans = new HashMap<>();
public final Map<UUID, String> playerClan = new HashMap<>();
private final File file = new File(Main.getInstance().getDataFolder(), "clans.yml");
public Clan getClan(String name) { return clans.get(name); }
public Clan getPlayerClan(UUID uuid) {
String name = playerClan.get(uuid);
return name != null ? clans.get(name) : null;
public boolean createClan(String name, String color, UUID owner) {
if (clans.containsKey(name)) return false;
if (playerClan.containsKey(owner)) return false;
Clan clan = new Clan(name, color.toUpperCase(), owner);
playerClan.put(owner, name);
clan.updateScoreboardTeam();
public boolean disbandClan(String name) {
Clan clan = clans.get(name);
if (clan == null) return false;
for (UUID uuid : clan.getMembers().keySet()) {
public boolean joinClan(String clanName, UUID uuid, Rank rank) {
Clan clan = clans.get(clanName);
if (clan == null) return false;
if (playerClan.containsKey(uuid)) return false;
clan.addMember(uuid, rank);
playerClan.put(uuid, clanName);
clan.getJoinRequests().remove(uuid);
clan.updateScoreboardTeam();
public boolean leaveClan(UUID uuid) {
String clanName = playerClan.get(uuid);
if (clanName == null) return false;
Clan clan = clans.get(clanName);
if (clan == null) return false;
if (clan.getOwner().equals(uuid)) return false;
Player player = Bukkit.getPlayer(uuid);
player.setDisplayName(player.getName());
clan.updateScoreboardTeam();
public void saveClans() {
YamlConfiguration yaml = new YamlConfiguration();
for (Map.Entry<String, Clan> entry : clans.entrySet()) {
Clan c = entry.getValue();
String key = "clans." + c.getName();
yaml.set(key + ".color", c.getColor());
yaml.set(key + ".owner", c.getOwner().toString());
yaml.set(key + ".motto", c.getMotto());
Map<String, Object> membersSerial = new LinkedHashMap<>();
for (Map.Entry<UUID, Rank> me : c.getMembers().entrySet())
membersSerial.put(me.getKey().toString(), me.getValue().name());
yaml.set(key + ".members", membersSerial);
List<String> trusted = new ArrayList<>();
for (UUID id : c.getTrustedMembers()) trusted.add(id.toString());
yaml.set(key + ".trusted", trusted);
List<String> requests = new ArrayList<>();
for (UUID id : c.getJoinRequests()) requests.add(id.toString());
yaml.set(key + ".requests", requests);
} catch (IOException e) {
Main.getInstance().getLogger().log(Level.SEVERE, "Не удалось сохранить clans.yml", e);
public void loadClans() {
try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); }
YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);
if (!yaml.contains("clans")) return;
for (String name : yaml.getConfigurationSection("clans").getKeys(false)) {
String path = "clans." + name;
String color = yaml.getString(path + ".color", "white").toUpperCase();
UUID owner = UUID.fromString(yaml.getString(path + ".owner"));
Clan clan = new Clan(name, color, owner);
clan.setMotto(yaml.getString(path + ".motto"));
if (yaml.contains(path + ".members")) {
for (String uuidStr : yaml.getConfigurationSection(path + ".members").getKeys(false)) {
UUID uuid = UUID.fromString(uuidStr);
Rank rank = Rank.valueOf(yaml.getString(path + ".members." + uuidStr));
clan.addMember(uuid, rank);
playerClan.put(uuid, name);
if (yaml.contains(path + ".trusted")) {
for (String uuidStr : yaml.getStringList(path + ".trusted"))
clan.getTrustedMembers().add(UUID.fromString(uuidStr));
if (yaml.contains(path + ".requests")) {
for (String uuidStr : yaml.getStringList(path + ".requests"))
clan.getJoinRequests().add(UUID.fromString(uuidStr));
clan.updateScoreboardTeam();
for (UUID uuid : clan.getMembers().keySet()) {
Player player = Bukkit.getPlayer(uuid);
clan.updateDisplayName(player);