- 48
- 2
- 9
В общем ситуация следующая - мне на сервере каждый тик нужно проверять у каждого игрока инвентарь на наличие конкретного предмета и если этот предмет находиться в инвентаре, то нужно взять его в руку и не позволять отпускать пока предмет не уберется из инвентаря. На клиенте я пробовал делать следующим образом (предмет уже находится в хотбаре):
И это работало. Но я бы не хотел, чтобы эта логика лежала на клиенте, мне она нужна на сервере. Поэтому я переместил код на тик сервера:
Проблема теперь в том, что предмет вообще не берется в руку. Такая же история была когда я пытался удалять предметы из инвентаря. Синхронизации с клиентом не было, его можно было использовать, хотя выкидывать на Q все же не позволяло (только если мышкой из инвентаря).
Что я делаю не так? Данные манипуляции вообще можно делать на сервере, или только на клиенте? Почему инвентарь на сервере не синхронизируется с клиентским?
Java:
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
for (int i = 0; i < event.player.inventory.mainInventory.length; i += 1) {
ItemStack itemStack = event.player.inventory.mainInventory[i];
if (itemStack == null || !(itemStack.getItem() instanceof CustomItem)) {
continue;
}
event.player.inventory.currentItem = i;
break;
}
}
Java:
@SubscribeEvent
public void onServerTick(TickEvent.ServerTickEvent event) {
for (EntityPlayerMP player : (List<EntityPlayerMP>)MinecraftServer.getServer().getConfigurationManager().playerEntityList) {
for (int i = 0; i < player.inventory.mainInventory.length; i += 1) {
ItemStack itemStack = player.inventory.mainInventory[i];
if (itemStack == null || !(itemStack.getItem() instanceof CustomItem)) {
continue;
}
event.player.inventory.currentItem = i;
break;
}
}
}
Что я делаю не так? Данные манипуляции вообще можно делать на сервере, или только на клиенте? Почему инвентарь на сервере не синхронизируется с клиентским?
Последнее редактирование: