Кастомный слот, удалить/добавить, скрыть/проявить.

Версия Minecraft
1.7.10
344
1
47
Утро доброе, товарисчи. У меня недавно преобразовалось три вопроса:

Как добавить/удалить определенный предмет в в определенный (кастомный слот). Именно удалить предмет из слота и добавить его туда, а так же каким образом переловить это в плагине на бакките?

Каким образом можно обновлять контейнер не выходя из него? Мне нужно в кастомном инвентаре сделать появления бакпака (остальных слотов) после нажатия определенной клавиши (i) что легко и понятно делается, но как сделать обновление контейнера, а не только гуи? Апдейт скрин и глобал пробовал, не выходило. Да и через боолеан тоже не вариант.

В
озможно ли вообще соединять баккит и клиент через нбт? Если да, то как на бакките вытащить из игрока по определенному каналу, взять тот же DataWatcher с примерами, пожалуйста.
 
344
1
47
Добавляй сразу все слоты, а потом по условию меняй их координаты. Надо скрыть - ставь координаты на -1000(чтоб за экраном были), надо показать - ставь нормальные.

Но как обновлять контейнер?
 

tox1cozZ

aka Agravaine
8,455
598
2,892
344
1
47
Когда изменяешь требуется его открыть заново, чтобы он обновился (кординаты слотов). Апдейтскрин не подходит, он обновляет лишь гуи, а не контейнер.

Проще говоря нажимаю i, обновляется лишь гуи. Слоты добавляются, но они видны только после перезапуска гуи и так же с отключением.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Я же написал тебе, ты головой можешь подумать?
ДОБАВЛЯТЬ ВСЕ СЛОТЫ СРАЗУ. ВСЕ. СЛОТЫ. СРАЗУ. ДЛЯ. ТВОЕГО. РЮКЗАКА. ТОЖЕ.
А потом просто менять им координаты. Они будут отображаться всегда и нормально.
 
344
1
47
А, это я тупанул. Да, второй пункт решен. Я пробовал не добавлять слоты изначально, но не сразу дошло, что вы просто предлагаете менять их координаты) Сорян.

Что насчет Первого и Третьего пунктов?
 
Последнее редактирование:
7,099
324
1,510
344
1
47
Я конечно приму туториал за "важное" Но он так и не закончен а так же проблемы его не решили, так что не вариант велосипедить. Я пока попробовал путь Тимахи, как он советовал, но не было времени протестить:

Java:
package Jakov;
 
import java.text.SimpleDateFormat;
import java.util.Date;

 
import Eternity.server.network.PacketDispatcher;
import Eternity.server.network.server.removestats;

import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
 
@Mod(modid = "forge-bukkit", dependencies = "required-after:eternityrpengine")
public class TestMod  {
    @SidedProxy(serverSide = "jakov.testload")
    
    @Mod.Instance("client-server")
    public static TestMod instance;
    public static void sendpacket() { PacketDispatcher.sendToServer(new removestats()); }
    //Date now = new Date();
    //SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
 

    }
Java:
package Jakov;

import java.util.HashMap;
import java.util.UUID;

import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.permissions.PermissionAttachment;

import Eternity.client.gamedata.inventory.GuiCustomPlayerInventory;
import Eternity.client.gamedata.inventory.GuiMagicBag;
import Eternity.server.EPCriminalGlory;
import Eternity.server.ServerFractionEvent;
import Eternity.server.gamedata.inventory.ContainerCustomPlayer;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;

public class testload 
{
    HashMap<UUID, PermissionAttachment> perms = new HashMap<UUID, PermissionAttachment>();
    
    @SideOnly(Side.SERVER)
    @Mod.EventHandler
      public void test(PlayerEvent event, EntityPlayer players) throws ClassNotFoundException {
        Player player = event.getPlayer();
         //Class<?> cl2 = Class.forName("Eternity.server.network.PacketDispatcher");
           PermissionAttachment pperms = perms.get(player.getUniqueId());
        
 
           if(player.hasPermission("engine.player.acceptSubscribe")){
             TestMod.sendpacket();
               pperms.setPermission("engine.player.isSubscribe", true);
               perms.get(player.getUniqueId()).unsetPermission("engine.player.acceptSubscribe");
            }
          
     }
 
 
}
 
250
12
24
Смотря что именно ты хочешь.
Может ты хочешь чтобы этот предмет можно было положить только в твой слот.
Может ты хочешь чтобы при шифт пкм попадал предмет туда(если это то я не знаю как сделать)
Может ты хочешь чтобы предмет попадал в твой слот при попадании в инвентарь.
А может что-то еще.

Конечно возможно ты спрашиваешь как именно положить любой предмет в любой слот с помощью кода.
Вот примерно так

Java:
inventory[slot] = itemstack;

inventory-твой массив слотов.
slot - id твоего слота в массиве.
itemstack - собственно твой предмет или стак предметов.
зы. Это работает и с изменением)

Удалить такое

Код:
inventory[slot] = null;

Что на счет конца вопроса, т.е как словить это на баките. Не смогу помочь. Так как никогда не работал с бакитом.
Возможно проверять игрока на модификацию инвентаря.
 
Сверху