Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
private static boolean isTrueItem, isTrueItem_last;
static {isTrueItem = isTrueItem_last = false;}
@SubscribeEvent
public void invPlayer(TickEvent.PlayerTickEvent e) {
if (e.side == Side.SERVER) {
EntityPlayer player = e.player;
if (player != null) {
for (ItemStack slot : player.inventory.mainInventory) {
isTrueItem = checkItem(slot, Items.golden_apple);
if (isTrueItem) break;
}
if (!isTrueItem_last && isTrueItem) itemTrue(player);
if (isTrueItem_last && !isTrueItem) itemFalse(player);
isTrueItem_last = isTrueItem;
}
}
}
private static boolean checkItem(ItemStack check, Item item) {
if (check != null && check.getItem() == item) return true; else return false;
}
private static void itemTrue(EntityPlayer player) {
player.addChatMessage(new ChatComponentText("You have is epic apple."));
}
private static void itemFalse(EntityPlayer player) {
player.addChatMessage(new ChatComponentText("You lost is epic apple."));
}
В принципе идея не плохая но я боюсь, что если чекать каждый тик, то лагов будит много на сервере, причем ладно если бы чекать по id и мете, но там еще в тегах предмета прописаны эффекты в которых в свою очередь дополнительные данные эффектов, которые тоже надо перебирать (получается 3 цикла перебора вложенных друг в друга), а у одного предмета(из мода) этих чар от 10 до 50(как положительные так и отрицательные), получается если весь инвентарь забит предметами из мода(маловероятно но все же) то чекать 1 инвентарь это от 350, до 1750 циклов перебора каждый тик на 1 игрока ... многовато думаю слишком.timaxa007 написал(а):craft-russia2013, может тебе не надо обязательно при закрытии окна? Если "Да, не обязательно.", то можно такой пример тебе понадобиться? Вот пример набросал (для 1.7.10):
Код:private static boolean isTrueItem, isTrueItem_last; static {isTrueItem = isTrueItem_last = false;} @SubscribeEvent public void invPlayer(TickEvent.PlayerTickEvent e) { if (e.side == Side.SERVER) { EntityPlayer player = e.player; if (player != null) { for (ItemStack slot : player.inventory.mainInventory) { isTrueItem = checkItem(slot, Items.golden_apple); if (isTrueItem) break; } if (!isTrueItem_last && isTrueItem) itemTrue(player); if (isTrueItem_last && !isTrueItem) itemFalse(player); isTrueItem_last = isTrueItem; } } } private static boolean checkItem(ItemStack check, Item item) { if (check != null && check.getItem() == item) return true; else return false; } private static void itemTrue(EntityPlayer player) { player.addChatMessage(new ChatComponentText("You have is epic apple.")); } private static void itemFalse(EntityPlayer player) { player.addChatMessage(new ChatComponentText("You lost is epic apple.")); }