Вопрос как перекрасить ник

Версия Minecraft
1.20.X

yurosing

Пользователь
Сообщения
1
3.4 Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
я вот сделал код для плагина перекраску ников.
но он не работает
package com.yurosing.colorchange;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import org.jetbrains.annotations.NotNull;

public final class ColorChange extends JavaPlugin implements Listener {

@Override
public void onEnable() {
saveDefaultConfig();
getCommand("color").setExecutor(this);
getServer().getPluginManager().registerEvents(this, this);
}

@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {

if (args.length == 1 && args[0].equalsIgnoreCase("reload")) {
reloadConfig();
sender.sendMessage(ChatColor.GREEN + "Config reloaded");
return true;
}

if (!(sender instanceof Player player)) return true;

Inventory inv = Bukkit.createInventory(null, 27, ChatColor.GOLD + "Выбор цвета");

ItemStack blue = new ItemStack(Material.BLUE_DYE);
ItemMeta blueMeta = blue.getItemMeta();
blueMeta.setDisplayName(ChatColor.BLUE + player.getName());
blue.setItemMeta(blueMeta);
inv.setItem(10, blue);

ItemStack yellow = new ItemStack(Material.YELLOW_DYE);
ItemMeta yellowMeta = yellow.getItemMeta();
yellowMeta.setDisplayName(ChatColor.YELLOW + player.getName());
yellow.setItemMeta(yellowMeta);
inv.setItem(12, yellow);

player.openInventory(inv);
return true;
}

@EventHandler
public void onClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) return;
if (!event.getView().getTitle().equals(ChatColor.GOLD + "Выбор цвета")) return;

event.setCancelled(true);

if (event.getSlot() == 10) setColor(player, ChatColor.BLUE);
if (event.getSlot() == 12) setColor(player, ChatColor.YELLOW);

player.closeInventory();
}

private void setColor(Player player, ChatColor color) {
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
String teamName = "cc_" + color.name();

Team team = board.getTeam(teamName);
if (team == null) {
team = board.registerNewTeam(teamName);
team.setColor(color);
}

for (Team t : board.getTeams()) {
t.removeEntry(player.getName());
}

team.addEntry(player.getName());
}
}
 
как минимум не писать плагин в один класс, где есть конфигурация либо ивент на клик. плюсом не стоит проверят gui на title заголовок. знаю сам проходил такое уже.

по поводу работоспособности не могу ничего сказать т.к. с gui имел мало дел. лучше дождись ответа от проф. разрабов, ну а так я тебе рекомендации накинул хорошие
 
я вот сделал код для плагина перекраску ников.
но он не работает
package com.yurosing.colorchange;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import org.jetbrains.annotations.NotNull;

public final class ColorChange extends JavaPlugin implements Listener {

@Override
public void onEnable() {
saveDefaultConfig();
getCommand("color").setExecutor(this);
getServer().getPluginManager().registerEvents(this, this);
}

@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {

if (args.length == 1 && args[0].equalsIgnoreCase("reload")) {
reloadConfig();
sender.sendMessage(ChatColor.GREEN + "Config reloaded");
return true;
}

if (!(sender instanceof Player player)) return true;

Inventory inv = Bukkit.createInventory(null, 27, ChatColor.GOLD + "Выбор цвета");

ItemStack blue = new ItemStack(Material.BLUE_DYE);
ItemMeta blueMeta = blue.getItemMeta();
blueMeta.setDisplayName(ChatColor.BLUE + player.getName());
blue.setItemMeta(blueMeta);
inv.setItem(10, blue);

ItemStack yellow = new ItemStack(Material.YELLOW_DYE);
ItemMeta yellowMeta = yellow.getItemMeta();
yellowMeta.setDisplayName(ChatColor.YELLOW + player.getName());
yellow.setItemMeta(yellowMeta);
inv.setItem(12, yellow);

player.openInventory(inv);
return true;
}

@EventHandler
public void onClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) return;
if (!event.getView().getTitle().equals(ChatColor.GOLD + "Выбор цвета")) return;

event.setCancelled(true);

if (event.getSlot() == 10) setColor(player, ChatColor.BLUE);
if (event.getSlot() == 12) setColor(player, ChatColor.YELLOW);

player.closeInventory();
}

private void setColor(Player player, ChatColor color) {
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
String teamName = "cc_" + color.name();

Team team = board.getTeam(teamName);
if (team == null) {
team = board.registerNewTeam(teamName);
team.setColor(color);
}

for (Team t : board.getTeams()) {
t.removeEntry(player.getName());
}

team.addEntry(player.getName());
}
}
Я посмотрел, в коде ОЧЕНЬ много ошибок.
Я прикрепил небольшой макет в стиле твоего кода, для перезагрузки надо иметь право color.reload если что, и не забудь переименовать расширение с .txt в .java
 

Вложения

  • color.txt
    18 KB · Просмотры: 5
Последнее редактирование:
Назад
Сверху Снизу