Как запускать код на стороне сервера?

Версия Minecraft
1.16.5
API
Forge
87
4
11
У меня есть код, который выдает предмет игроку, но это происходит только на стороне клиента. Этот код находится в классе, который расширяет ContainerScreen, if (!level.isClientSide) не помогает. В коде команды give не нашел ничего полезного. Как решить эту проблему?
Вот код:
Java:
protected void giveButtonPressed(){
    if (!inventory.player.level.isClientSide) {
        inventory.add(new ItemStack(getItemByStrID(menu.nbtData.getString("itemID")), quantity));
    }
}
Заранее спасибо :)
 
Решение
Ну, ты ещё можешь просто через пакет выполнить то, что тебе нужно. Если через гуи, то так обычно и делается, например жмёшь кнопку - отправляешь пакет с клиента на сервер, где уже выполняется.
1,082
72
374
Спасибо) По UUID вообще проблем нет. Только игрок с таким же UUID сможет выдать себе предмет.
Тогда убирай эти данные из пакета чтобы не допускать спуфинг. Сервер и так прекрасно знает от кого пришёл пакет.

У Gui инвентарей имеется серверная часть, которая называется просто "Container". С ней надо работать, либо с тайлом. Контейнер хранится у игрока в поле openContainer, либо передавай координаты тайла.
 
87
4
11
У Gui инвентарей имеется серверная часть, которая называется просто "Container". С ней надо работать, либо с тайлом. Контейнер хранится у игрока в поле openContainer, либо передавай координаты тайла.
Хорошо, но в любом случае ID предмета находится в NBT TileEntity, так что в данный момент это не нужно. Но я думаю в будущем поможет.
Тогда убирай эти данные из пакета чтобы не допускать спуфинг. Сервер и так прекрасно знает от кого пришёл пакет.
Да, я уже понял это, спасибо)
 
87
4
11
Про nbt забудь - это формат хранения данных в файлах, больше он нигде не используется.
Хорошо, в TIleEntity есть метод Load, в котором выгружаются данные из NBT и сохраняются в классе TileEntity, получается мне использовать их?
 
Сверху