Почему данный код не работает
package com.gc.superslots;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent.PlayerTickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod(deleteslot.MODID)
public class deleteslot
{
public static final String MODID = "superslots";
public deleteslot()
{
MinecraftForge.EVENT_BUS.register(deleteslot.this); //Подписываем местные методы на события
}
@SubscribeEvent
public static void onTick(PlayerTickEvent event) {
Inventory inv = new Inventory(event.player); // Получаем инвентарь
ItemStack slot = inv.getItem(9); //Получаем хранящееся в слоте
if (!slot.isEmpty()) { // Проверяем не пустой ли слот
inv.setItem(9, ItemStack.EMPTY); // Очищаем слот
System.out.println(slot.getCount()); //Выводим кол-во удалённых предметов
}
}
}
Ожидаемый результат: постоянно очищаеться слот сверху справа и пишеться сколько предметов удалено
Получаемый результат: никакого
Ответы (2 шт):
Там игроку создаёться новый инвентарь вместо взаимодействия со старым, надо было написать вместо new Inventory(event.player) написать event.player.getInventory()
Во первых PlayerTickEvent относится ко всем игрокам которые неподалёку, а не только к игроку. Если ты хочешь получать только Tick своего игрока, сверяй его по
if (event.player != FMLClientHandler.instance().getClientPlayerEntity()) return; // THIS player only
// Если чит сетевой то ещё
if (!event.player.world.isRemote) return; // network only
Во вторых получение инвентаря, идёт от игрока.
for (ItemStack stack: player.inventory.mainInventory)
В третьих PlayerTickEvent происходит около 20 раз в секнду, повесишь кучу лагов на клиент. Уж лучше мониторить пакеты изменения инвентаря!
И на закуску, ты не можешь просто взять и удалить предмет. Если ты хочешь удалить предмет по сети, то это надо делать через
player.connection.sendPacket
Которые идут от интерфейса Packet
А теперь самое интересное, от версии к версии Майнкрафт и ForgeAPI очень сильно менялся. Наверняка без версий тебе некто не скажет!