Вопрос Помогите пж в Intelij Idea разработка на bukkit (paper)

Версия Minecraft
1.16.X

Tanri09YT

Пользователь
Сообщения
28
Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
(Я начинающий кодер если что)
И у меня не виден плагин на сервере, который я скомпилировал так же в консоли сервера возникает такая ошибка:

[00:38:02 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'super-ec' in plugin super-ec v1.0.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:826) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2185) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:2000) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1953) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:49) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:7) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_351]
Caused by: java.lang.IllegalArgumentException: Size for custom inventory must be a multiple of 9 between 9 and 54 slots (got 26)
at org.apache.commons.lang.Validate.isTrue(Validate.java:136) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.createInventory(CraftServer.java:1888) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.Bukkit.createInventory(Bukkit.java:1280) ~[patched_1.16.5.jar:git-Paper-794]
at yt.tanr1.superec.command.SuperEc.onCommand(SuperEc.java:26) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.5.jar:git-Paper-794]
... 19 more


Как думаете, с чем это связано и как решить?
 
Вот коды:
SuperEc:


package yt.tanr1.superec.command;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;


public class SuperEc implements CommandExecutor {

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

if (!sender.hasPermission("superec.1.slot")) return true;

if (!(sender instanceof Player)) return true;
if (args.length != 0) return false;

Player player = (Player) sender;
Inventory superec = Bukkit.createInventory(player, 26, ChatColor.DARK_GRAY + "Супер эндер сундук");





ItemStack barrier = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 1), barrier);

ItemStack barrier2 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 2), barrier2);

ItemStack barrier3= new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 3), barrier3);

ItemStack barrier4 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 4), barrier4);

ItemStack barrier5 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 5), barrier5);

ItemStack barrier6 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 6), barrier6);

ItemStack barrier7 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 7), barrier7);

ItemStack barrier8 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 8), barrier8);

ItemStack barrier9 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 9), barrier9);

ItemStack barrier10 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 10), barrier10);

ItemStack barrier12 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 12), barrier12);

ItemStack barrier13 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 13), barrier13);

ItemStack barrier14 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 14), barrier14);

player.openInventory(superec);
return true;
}

private int getIndex(int row, int column) {
return (row - 1) * 9 + column - 1;
}
}





Super_ec:
package yt.tanr1.superec;

import org.bukkit.ChatColor;
import org.bukkit.command.CommandExecutor;
import org.bukkit.plugin.java.JavaPlugin;
import yt.tanr1.superec.command.SuperEc;

public final class Super_ec extends JavaPlugin {

@Override
public void onEnable() {
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GRAY + "----------------------");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GOLD + " SuperEc Plugin ");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GREEN + " Enabled ");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GRAY + "----------------------");
getServer().getPluginCommand("super-ec").setExecutor(new SuperEc());
}

@Override
public void onDisable() {
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GRAY + "----------------------");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GOLD + " SuperEc Plugin ");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.RED + " Disable ");
getServer().getLogger().info("[JoiceMC SuperEc]" + ChatColor.GRAY + "----------------------");
}
}







plugin.yml:
name: super-ec
version: '1.0.0'
main: yt.tanr1.superec.Super_ec
api-version: '1.16'
author: JoiceMC Project (Tanr1 DEV)
commands:
super-ec:
aliaces:
- se
- super_ender_chest
description: Открывает супер эндер сундук
usage: /<command>


Объединено

Вообще сначала код в студию, и во вторых у тебя менюшка слоты

Size for custom inventory must be a multiple of 9 between 9 and 54 slots (got 26)

А тип мне нужно либо 9 слотов, либо 54 делать, или что? Просто 26 это вроде как 3 строчки ровно, т.е. здесь вроде не должно быть ошибки
 
Последнее редактирование:
И ты еще не знаешь ли, можно ли это сократить?:

ItemStack barrier = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 1), barrier);

ItemStack barrier2 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 2), barrier2);

ItemStack barrier3= new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 3), barrier3);

ItemStack barrier4 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 4), barrier4);

ItemStack barrier5 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 5), barrier5);

ItemStack barrier6 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 6), barrier6);

ItemStack barrier7 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 7), barrier7);

ItemStack barrier8 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 8), barrier8);

ItemStack barrier9 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 9), barrier9);

ItemStack barrier10 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 10), barrier10);

ItemStack barrier12 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 12), barrier12);

ItemStack barrier13 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 13), barrier13);

ItemStack barrier14 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 14), barrier14);

Т.е. что бы не писать много переменных, что бы одну сделать, которая будет отвечать за много слотов сразу (как в deluxemenus плагине в конфиге менюшек допустим сделать)
Объединено

И ты еще не знаешь ли, можно ли это сократить?:

ItemStack barrier = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 1), barrier);

ItemStack barrier2 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 2), barrier2);

ItemStack barrier3= new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 3), barrier3);

ItemStack barrier4 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 4), barrier4);

ItemStack barrier5 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 5), barrier5);

ItemStack barrier6 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 6), barrier6);

ItemStack barrier7 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 7), barrier7);

ItemStack barrier8 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 8), barrier8);

ItemStack barrier9 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 9), barrier9);

ItemStack barrier10 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 10), barrier10);

ItemStack barrier12 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 12), barrier12);

ItemStack barrier13 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 13), barrier13);

ItemStack barrier14 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 14), barrier14);

Т.е. что бы не писать много переменных, что бы одну сделать, которая будет отвечать за много слотов сразу (как в deluxemenus плагине в конфиге менюшек допустим сделать)
Вообще сначала код в студию, и во вторых у тебя менюшка слоты

Size for custom inventory must be a multiple of 9 between 9 and 54 slots (got 26)

И еще, ты не знаешь ли, как сделать так, что бы данные предметы нельзя было забрать? (т.е. что бы они оставались в default положении в менюшке всегда, и можно что бы было изменить только с помощью config.yml)
 
Последнее редактирование:
Вообще сначала код в студию, и во вторых у тебя менюшка слоты

Size for custom inventory must be a multiple of 9 between 9 and 54 slots (got 26)

И еще, можешь подсказать, правильно ли я написал?:


if (!sender.hasPermission("superec.1.slot")) return true; {
} else {
sender.sendMessage(ChatColor.RED + "У вас недостаточно прав для выполнении данной команды!")
return true;
}

Или что то не так написал?
Мне если что нужно сделать так, что бы если не было у игрока пермишиона superec.1.slot, то ему писало в чат: У вас недостаточно прав для выполнении данной команды! (разумеется отображается данное сообщение только у самого игрока будет, который написал данную команду.
 
Вообще сначала код в студию, и во вторых у тебя менюшка слоты

Size for custom inventory must be a multiple of 9 between 9 and 54 slots (got 26)
И так же ты не знаешь ли, как сделать названия и описания для предметов, которые я создаю внутри данной менюшки?
 
1) Размер инвентаря должен быть кратен 9, например 54, 45, 27
2) Для сокращения используй циклы
3) Условие !sender.hasPermission("superec.1.slot") выполняется уже когда у игрока НЕТ прав, просто во внутрь помести нужное себе сообщение и прерви выполнение кода с помощью return
 
1) Размер инвентаря должен быть кратен 9, например 54, 45, 27
2) Для сокращения используй циклы
3) Условие !sender.hasPermission("superec.1.slot") выполняется уже когда у игрока НЕТ прав, просто во внутрь помести нужное себе сообщение и прерви выполнение кода с помощью return
Хорошо, спасибо
 
1) Размер инвентаря должен быть кратен 9, например 54, 45, 27
2) Для сокращения используй циклы
3) Условие !sender.hasPermission("superec.1.slot") выполняется уже когда у игрока НЕТ прав, просто во внутрь помести нужное себе сообщение и прерви выполнение кода с помощью return
А не мог бы сказать, как использовать циклы? И если знаешь, то еще как допустим сделать предмет в менюшке которой я делаю, и ему дать новое название и описание?
Объединено

1) Размер инвентаря должен быть кратен 9, например 54, 45, 27
2) Для сокращения используй циклы
3) Условие !sender.hasPermission("superec.1.slot") выполняется уже когда у игрока НЕТ прав, просто во внутрь помести нужное себе сообщение и прерви выполнение кода с помощью return
И если знаешь, то не мог бы еще сказать как создавать параметры для своих конфигах? Или хотя бы скинуть ссылку на документацию про это, если знаешь/есть ссылка?
(Например есть конфиг у меня:


gui-menu:
barrier:
slots:
- 0
- 1

И как сделать так, что бы если менялись параметры, то менялась и менюшка?
 
Последнее редактирование:
Используй ChatGPT, на этом этапе поможет. Насчет изменения предмета под свой вкус, если используешь Paper API или его форки, то в этом случае у ItemStack есть метод editMeta, удобен тем что не нужно после изменения меты её еще и устанавливать.
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Используй ChatGPT, на этом этапе поможет
категорически нет. ChatGPT только запутает. Для обучения нужны документации и вдруг если не понятно просить уже !!!ОБЬЯСНИТЬ!!! ChatGPT.
Объединено

И как сделать так, что бы если менялись параметры, то менялась и менюшка?
 
Последнее редактирование:
ItemStack barrier = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 1), barrier);

ItemStack barrier2 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 2), barrier2);

ItemStack barrier3= new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 3), barrier3);

ItemStack barrier4 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 4), barrier4);

ItemStack barrier5 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 5), barrier5);

ItemStack barrier6 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 6), barrier6);

ItemStack barrier7 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 7), barrier7);

ItemStack barrier8 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 8), barrier8);

ItemStack barrier9 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(1, 9), barrier9);

ItemStack barrier10 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 10), barrier10);

ItemStack barrier12 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 12), barrier12);

ItemStack barrier13 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 13), barrier13);

ItemStack barrier14 = new ItemStack(Material.BARRIER, 1);
superec.setItem(getIndex(2, 14), barrier14);
Java:
int index = 1; // первое значение в индексе
for(int i =0; i>14; i++) { // перебор всех вторых значений в индексе
ItemStack item = new ItemStack(Material.BARRIER);
if(i>=10) { // если 2 значение в индексе больше или равно 10
index = 2; // меняем первое значение
}
superec.setItem(getIndex(index,i),item);
}
Объединено

зач вообще использовать собственное GUI? вроде обычного делюкс хватает
зачем вообще пытаться кодить если и так есть другие разработчики
 
Java:
int index = 1; // первое значение в индексе
for(int i =0; i>14; i++) { // перебор всех вторых значений в индексе
ItemStack item = new ItemStack(Material.BARRIER);
if(i>=10) { // если 2 значение в индексе больше или равно 10
index = 2; // меняем первое значение
}
superec.setItem(getIndex(index,i),item);
}
Объединено


зачем вообще пытаться кодить если и так есть другие разработчики
по прикольчику так, ибо в их исходники лезть лень и зач, если можно как дополнение свой плагин поставить. менюшки ваще смысла делать нету, если ими можно взаимодействовать через deluxemenus. тупо свой плуг + deluxemenus норм такая связочка
 
а что не так, пусть кфг настраивают менюшки, а плагин уже дальше будет с ними взаимодействовать. всё отображение можно настроить через плейсы если требуется
Объединено

а дизайн весь от них будет зависить
 
зач вообще использовать собственное GUI? вроде обычного делюкс хватает
Потому что я использую данное GUI как ender chest (т.е. в скором времени поставлю бд если получится), хочу сделать super-ec (супер эндер сундук), в котором предметы будут защищаться от вайпов и.т.д (т.е. предметы будут храниться всегда там) ну и так же ради опыта, и данный сундук будет разных лвлов (т.е. самый последний лвл будет 6-9 слотов где то, а самый первый: 1 слот и.т.д), а в deluxemenus вроде как нельзя бд делать (ну или свой ec)
 
Последнее редактирование:
Потому что я использую данное GUI как ender chest (т.е. в скором времени поставлю бд если получится), хочу сделать super-ec (супер эндер сундук), в котором предметы будут защищаться от вайпов и.т.д (т.е. предметы будут храниться всегда там) ну и так же ради опыта, и данный сундук будет разных лвлов (т.е. самый последний лвл будет 6-9 слотов где то, а самый первый: 1 слот и.т.д)
А оке
 
а что не так, пусть кфг настраивают менюшки, а плагин уже дальше будет с ними взаимодействовать. всё отображение можно настроить через плейсы если требуется
Объединено

а дизайн весь от них будет зависить
Ты это пишешь от лица студии? Теперь ваши плагины вызывают огромные сомнения в качестве.
 
категорически нет. ChatGPT только запутает. Для обучения нужны документации и вдруг если не понятно просить уже !!!ОБЬЯСНИТЬ!!! ChatGPT.
Объединено


Ок, спасибо
 
Назад
Сверху Снизу