Skip to content

Commit

Permalink
DisplayName及びColorはTeamの設定に合わせるようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
mc-nekoneko committed Jun 19, 2020
1 parent c8b9a12 commit 2758e8f
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 136 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.rathserver.teamchat.command;

import com.rathserver.teamchat.TeamChatPlugin;
import com.rathserver.teamchat.util.StringUtil;
import lombok.RequiredArgsConstructor;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
Expand Down Expand Up @@ -32,15 +31,9 @@ public boolean onCommand(CommandSender sender, Command cmd, String s, String[] a
sender.sendMessage(ChatColor.YELLOW + cmd.getUsage());
return true;
}
if (args[0].equalsIgnoreCase("displayname")) {
return this.displayName(sender, args);
}
if (args[0].equalsIgnoreCase("exclusion")) {
return this.exclusion(sender, args);
}
if (args[0].equalsIgnoreCase("color")) {
return this.color(sender, args);
}

boolean teamChat = bool(args[0]);
this.plugin.getYamlConfig().setTeamChat(teamChat);
Expand All @@ -52,7 +45,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String s, String[] a
@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String s, String[] args) {
if (args.length == 1) {
return Arrays.asList("on", "off", "displayname", "exclusion", "color");
return Arrays.asList("on", "off", "exclusion");
}
if (args.length == 2) {
Scoreboard board = this.plugin.getServer().getScoreboardManager().getMainScoreboard();
Expand All @@ -61,25 +54,6 @@ public List<String> onTabComplete(CommandSender sender, Command cmd, String s, S
return null;
}

private boolean displayName(CommandSender sender, String[] args) {
if (args.length <= 1) {
sender.sendMessage(ChatColor.YELLOW + "/teamchat displayname <team> <display_name>");
return true;
}

String team = args[1];
if (team.length() > 16) {
sender.sendMessage(ChatColor.RED + String.format("The name '%s' is too long for a team, it can be at most 16 characters long", team));
return true;
}

String displayName = StringUtil.join(" ", 2, args);
this.plugin.getYamlConfig().setDisplayName(team, displayName);
this.plugin.getYamlConfig().save();
sender.sendMessage(ChatColor.GREEN + String.format("The display name of '%s' team has been changed to '%s'", team, displayName));
return true;
}

private boolean exclusion(CommandSender sender, String[] args) {
if (args.length < 1) {
sender.sendMessage(ChatColor.YELLOW + "/teamchat exclusion <team>");
Expand All @@ -98,32 +72,6 @@ private boolean exclusion(CommandSender sender, String[] args) {
return true;
}

private boolean color(CommandSender sender, String[] args) {
if (args.length <= 1) {
sender.sendMessage(ChatColor.YELLOW + "/teamchat color <team> <color>");
return true;
}

String team = args[1];
if (team.length() > 16) {
sender.sendMessage(ChatColor.RED + String.format("The name '%s' is too long for a team, it can be at most 16 characters long", team));
return true;
}

ChatColor color;
try {
color = ChatColor.valueOf(args[2]);
} catch (IllegalArgumentException ex) {
sender.sendMessage(ChatColor.RED + ex.getLocalizedMessage());
return true;
}

this.plugin.getYamlConfig().setTeamColor(team, color);
this.plugin.getYamlConfig().save();
sender.sendMessage(ChatColor.GREEN + "");
return true;
}

private boolean bool(String text) {
switch (text) {
case "true":
Expand Down
76 changes: 6 additions & 70 deletions src/main/java/com/rathserver/teamchat/configure/YamlConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,20 @@
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import org.bukkit.ChatColor;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.List;

/**
* Created by Nekoneko on 2017/08/19.
*/
public class YamlConfig extends Utf8YamlConfiguration {

private final File ymlFile;
private final String displayNamesPrefix = "displaynames";
private final String teamsColorsPrefix = "teamscolor";
private final Map<String, String> displayNames = new HashMap<>();
private final Map<String, ChatColor> teamsColor = new HashMap<>();
private final List<String> exclusionTeams = new ArrayList<>();

@Getter
Expand All @@ -33,93 +29,33 @@ public YamlConfig(@NonNull JavaPlugin plugin) {
}

public void load() {
this.displayNames.clear();
try {
this.load(this.ymlFile);

this.teamChat = this.getBoolean("teamchat", true);

List<String> exclusion = this.getStringList("exclusion");
if (exclusion != null) {
this.exclusionTeams.addAll(exclusion);
}

Set<String> teams = getConfigurationSection(this.displayNamesPrefix).getKeys(false);
teams.forEach(this::put);

Set<String> colors = getConfigurationSection(this.teamsColorsPrefix).getKeys(false);
colors.forEach(this::putColor);
this.exclusionTeams.addAll(exclusion);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}

public void save() {
try {
this.displayNames.forEach((s, s2) -> this.save(this.displayNamesPrefix, s, s2));
this.teamsColor.forEach((s, color) -> this.save(this.teamsColorsPrefix, s, color.name()));
set("exclusion", this.exclusionTeams);
set("teamchat", this.teamChat);
save(this.ymlFile);
this.set("exclusion", this.exclusionTeams);
this.set("teamchat", this.teamChat);
this.save(this.ymlFile);
} catch (IOException e) {
e.printStackTrace();
}
}

public Optional<String> getDisplayName(String team) {
return Optional.ofNullable(this.displayNames.get(team));
}

public void setDisplayName(@NonNull String team, @NonNull String name) {
if (team.isEmpty() || name.isEmpty()) {
throw new IllegalArgumentException("team or name is empty");
}

this.displayNames.put(team, name);
}

public ChatColor getTeamColor(String team) {
if (!this.teamsColor.containsKey(team)) {
return ChatColor.RESET;
}
return this.teamsColor.get(team);
}

public void setTeamColor(@NonNull String team, @NonNull ChatColor color) {
if (team.isEmpty()) {
throw new IllegalArgumentException("team or name is empty");
}

this.teamsColor.put(team, color);
}

public boolean isExclusionTeam(@NonNull String team) {
return this.exclusionTeams.contains(team);
}

public void addExclusionTeam(@NonNull String name) {
this.exclusionTeams.add(name);
}

private void put(String team) {
String name = this.getString(this.displayNamesPrefix + "." + team);
if (name.isEmpty()) {
return;
}

this.displayNames.put(team, name);
}

private void putColor(String team) {
String name = this.getString(this.teamsColorsPrefix + "." + team);
if (name.isEmpty()) {
return;
}

this.teamsColor.put(team, ChatColor.valueOf(name));
}

private void save(String parted, String team, String name) {
this.set(parted + "." + team, name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void asyncPlayerChat(AsyncPlayerChatEvent event) {
} else {
Player player = event.getPlayer();
Team team = player.getScoreboard().getEntryTeam(player.getName());
ChatColor color = team != null ? this.plugin.getYamlConfig().getTeamColor(team.getName()) : ChatColor.RESET;
ChatColor color = team != null ? team.getColor() : ChatColor.RESET;
event.setFormat(StringUtil.coloring(color + "%s&7:&r %s"));
}
}
Expand Down Expand Up @@ -60,12 +60,12 @@ private boolean notEntryAndNotHavePermission(Player player, Team team) {

private Team getTeam(Player player) {
Scoreboard board = player.getScoreboard();
return board != null ? board.getEntryTeam(player.getName()) : null;
return board.getEntryTeam(player.getName());
}

private String format(Team team) {
String displayName = this.plugin.getYamlConfig().getDisplayName(team.getName()).orElse(team.getDisplayName());
ChatColor color = this.plugin.getYamlConfig().getTeamColor(team.getName());
String displayName = team.getDisplayName();
ChatColor color = team.getColor();
return StringUtil.coloring("&7[&r" + displayName + "&r&7]&r " + color + "%s&7:&r %s");
}
}
8 changes: 0 additions & 8 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
#チームチャットを有効にするかどうか <true/false>
teamchat: true

#チームの表示名を変更
displaynames:
example: ・み・

#チームチャットから除外する
exclusion:
- admin

#チームの色を設定する
teamscolor:
example: BLUE
2 changes: 1 addition & 1 deletion src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: Scoreboard TeamChat plugin.
api-version: 1.13
commands:
teamchat:
usage: /teamchat <on/off/displayname/exclusion>
usage: /teamchat <on/off/exclusion>
aliases: tc
permission: teamchat.command
description: TeamChat Toggle command.
Expand Down

0 comments on commit 2758e8f

Please sign in to comment.