[1.7.10]Вопрос по гуи, подскажите как взаимодействовать со слотами.

Oldestkon написал(а):
Да, я не очень вник в твою задачу, потому что стены текста, где половина буковок - агр на других людей, меня не очень привлекает. Поэтому, если что непонятно - опиши свою задачу максимально подробно, и попробуй сделать это грамотно и по пунктам.
Если кого обил я или кто-то посчитал, что я на него агрюсь, то прошу прощения.
Нужная мне задача.
1 сделать гуи с двумя слотами и кнопка
2 по нажатию этой кнопки проверять что лежит в этих двух слотах
3 если там лежит например яблоко и топор то выдать ну допустим золотое ябоко
4 отчистить слоты от яблока и кирки
5 заурыть гуи.
По поводу добавления характеристик персонажу. Я в джава не настолько силен, что бы открыть клас и все в нем понять, так же не особо силен в английском, гугл переводчик переводит не шикарно, так что чтобы все что мне надо прочитать и понять выполнить придется потратить ну не 1 и не 3 месяца. А вот на примере, было бы куда быстрее разобраться, на практики уже знаю, что на примерах быстрее, php в 12 лет учил примерами, искал решения поставленных мною задач в чужом коде и разбирал способы решения, помогло значитльно быстрее все освоить. Но тут труднее, нету исходников с решением моей задачи, да и модов я таких не видел, а если он где-то и есть, то явно без сорцев. По этому я и обратился за помощью. Вот тут парень спрашивал как отрендерить модель obj, ему сразу дали код, теперь в код смотришь и разбираешься, а тут мне говорят делай велосипед, но блин, я не шарю. если бы я понимал как его сделать, хотя бы в теории, то я сначала пробовал бы его сделать прежде чем задать вопрос.
 
Agravaine написал(а):
Ему дали код, ибо это есть в туториале.
слушай ну ты реально како-то странный, покажи мне этот туториал. гле по нажатию кнопки гуи выдается предмет взаимозависимости от того какие предметы лежат в слотал и причем это не должно работать как крафтер. Нет его если есть то будь добр дай ссылку, а не набивай посты. Ни в одном сообщении нет ссылки на данный тутуриал. И на похожий нет. А ты во всех темах пытаешься засветиться, типа авторы задающие вопросы тупые идиоты, а ты все знаешь все умеешь но помогать не собираешься. Oldestkon реально пытается помочь, но не понимает меня, а я не понимаю его, от сюда не можем найти решение. от тебя только тебе дали, тебе показали, ты тупой. Тупой тут ты.
Если ты об этом то ты реально бревно.
Код:
@Override
        public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
                ItemStack stack = null;
                Slot slotObject = (Slot) inventorySlots.get(slot);

                //null checks and checks if the item can be stacked (maxStackSize > 1)
                if (slotObject != null && slotObject.getHasStack()) {
                        ItemStack stackInSlot = slotObject.getStack();
                        stack = stackInSlot.copy();

                        //merges the item into player inventory since its in the tileEntity
                        if (slot < 9) {
                                if (!this.mergeItemStack(stackInSlot, 0, 35, true)) {
                                        return null;
                                }
                        }
                        //places it into the tileEntity is possible since its in the player inventory
                        else if (!this.mergeItemStack(stackInSlot, 0, 9, false)) {
                                return null;
                        }

                        if (stackInSlot.stackSize == 0) {
                                slotObject.putStack(null);
                        } else {
                                slotObject.onSlotChanged();
                        }

                        if (stackInSlot.stackSize == stack.stackSize) {
                                return null;
                        }
                        slotObject.onPickupFromSlot(player, stackInSlot);
                }
                return stack;
        }
так как там не описано как заставить чекать слоты по нажатию кнопки, а я блин именно спрашиваю как проверить эти слоты на предмет нажатием кнопки в гуи.
UPD Понял что мне про ntb говорили. но теперь у меня другая проблема. 
Код:
    public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_)
    {
        NBTTagCompound d = p_82846_1_.getEntityData();
        if(this.craftMatrix.getStackInSlot(1) != null)
        {
            d.setInteger("UpWeapons", 1);
        } else {
            d.setInteger("UpWeapons", 0);
        }
        return null;
    }
Я так понял тут идет проверка на предмет в слоте, точнее когда его предмет кладут в слот. Внимание вопрос, где я нарукожопил с проверкой занятости слота? Так как данные не записываются в ntbteg игрока
 
Agravaine написал(а):
Сука, у тебя в гуи есть контейнер! inventorySlots называется!
В actionPerformed проверяй.
Тебе впадлу полазить по ванильным классам?
Спасибо разобрался с этим. Мог бы сразу это написать, а не делать мозги.
Но теперь у меня другая проблема. Решил я это реализовывать через запись в нтб теги
Код:
Понял что мне про ntb говорили. но теперь у меня другая проблема. 
    public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_)
    {
        NBTTagCompound d = p_82846_1_.getEntityData();
        if(this.craftMatrix.getStackInSlot(1) != null)
        {
            d.setInteger("UpWeapons", 1);
        } else {
            d.setInteger("UpWeapons", 0);
        }
        return null;
    }
Я так понял тут идет проверка на предмет в слоте, точнее когда его предмет кладут в слот. Внимание вопрос, где я нарукожопил с проверкой занятости слота? Так как данные не записываются в ntbteg игрока
Но тут проблема, когда предмет попадает в слот то его не не видит проверка и лиж после перекладывания предмета из одного слота в другой все срабатывает. Как заставить это работать с перетаскиванием предмета из инвентаря в слот 0?
 
Agravaine написал(а):
сори, не подумал посмотреть, что эта функция есть в контейнере. Спасибо большое. Но появляются другие проблемы.
Код:
protected void actionPerformed(GuiButton button)
{
    NBTTagCompound d = this.entity.getEntityData();
    if (button.id == 0){
        if (this.inventorySlots.getSlot(0) != null){
            this.entity.inventory.addItemStackToInventory(new ItemStack(Items.golden_apple, 1));
        }
    }

}
как заставить это выполняться на стороне сервера? Так как предмет выдается и все в роде бы хорошо, но как только закрываешь гуи или кликаешь на выданный предмет, он исчезает.
 
Agravaine написал(а):
Почитай про пакеты, то будет опять куча вопросов:
http://www.minecraftforge.net/forum/index.php?topic=20135.0
XD мои познания Английского не позволят почитать мне данную статью. В этом заключается главная проблема. Если бы все могли читать инглиш, то на форуме не было бы тем с вопросами.
 
Agravaine написал(а):
Ну гугл переводит хреновенько, но суть понятна.
Почитал, но понял похоже не полностью все. В общем я зарегистрировал пакет
Main.class
Код:
    @EventHandler
    public void PreLoad(FMLPreInitializationEvent PreEvent){
           network = NetworkRegistry.INSTANCE.newSimpleChannel("MyChannel");
           network.registerMessage(MyMessage.Handler.class, MyMessage.class, 0, Side.SERVER);
        new CreativeTabsRegistry();
        ItemRegister.mainRegistry();
        BlockRegister.mainRegistry();
        WeaponsRegister.mainRegistry();
        proxy.registerRenderThings();
    }
MyMessage.class
Код:
package spellflex.kuroi.rpg;

import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;

public class MyMessage implements IMessage {
    
    private String text;

    public MyMessage() { }

    public MyMessage(String text) {
        this.text = text;
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
    }

    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, text);
    }

    public static class Handler implements IMessageHandler<MyMessage, IMessage> {
        
        @Override
        public IMessage onMessage(MyMessage message, MessageContext ctx) {
            System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
            return null; // no response in this case
        }
    }
}
Отправляю пакет через гуи по нажатию кнопки
Код:
protected void actionPerformed(GuiButton button)
{
    if (button.id == 0){
        if (this.inventorySlots.getSlot(0) != null){
            Main.network.sendToServer(new MyMessage("foobar"));
        }
    }

}
И как только я нажимаю эту кнопку то выкидывает с сервера с крашем
Код:
[22:10:13] [Server thread/ERROR] [FML]: FMLIndexedMessageCodec exception caught
io.netty.handler.codec.DecoderException: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
    at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
    at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
    at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
    at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Caused by: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
Caused by: java.lang.NoSuchMethodException: spellflex.kuroi.rpg.MyMessage.<init>()
    at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_25]
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
[22:10:13] [Server thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception
io.netty.handler.codec.DecoderException: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
    at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
    at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
    at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
    at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Caused by: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
Caused by: java.lang.NoSuchMethodException: spellflex.kuroi.rpg.MyMessage.<init>()
    at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_25]
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
[22:10:13] [Server thread/ERROR] [FML]: There was a critical exception handling a packet on channel MyChannel
io.netty.handler.codec.DecoderException: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?]
    at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
    at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
    at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Caused by: java.lang.InstantiationException: spellflex.kuroi.rpg.MyMessage
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
Caused by: java.lang.NoSuchMethodException: spellflex.kuroi.rpg.MyMessage.<init>()
    at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_25]
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_25]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:75) ~[FMLIndexedMessageToMessageCodec.class:?]
    at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
    at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
    ... 13 more
[22:10:13] [Server thread/INFO]: Player218 lost connection: TextComponent{text='A fatal error has occured, this connection is terminated', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}
Что за трабла? я не пойму этого. Все сделал как в том гайде ниже, даже ничего под себя не стал редачить.
 
Это при заходе в мир, да?
У меня тоже такое было, хз как решать, само прошло...
Он, по-моему, не видит пустой конструктор...

Код:
Caused by: java.lang.NoSuchMethodException: spellflex.kuroi.rpg.MyMessage.<init>()
 
Agravaine написал(а):
Это при заходе в мир, да?
У меня тоже такое было, хз как решать, само прошло...
Он, по-моему, не видит пустой конструктор...

Код:
Caused by: java.lang.NoSuchMethodException: spellflex.kuroi.rpg.MyMessage.<init>()
хо, отлично. как решить сей проблему не известно. Что ты сделал, что у тебя прошло?
 
Agravaine написал(а):
Обновил фордж...
вообще беда. у меня последний билд.
UPD Оказалось что есть билд новее поставил его и все прошло. До этого у меня был рекомендуемый билд фордж.
Теперь все выдается как положено и не пропадает. Вообще доволен до жути. 
Agravaine Большое тебе спасибо, сразу бы так тыкал меня я бы меньше глупых вопросов задавал. Нет слов, ппц как благодарен.
 
весь день бьюсь с проблемой не могу решить сам. Нужно выполнить команду на стороне сервера
Код:
this.inventorySlots.putStackInSlot(0, null);
но передать через пакет не получается, так как он не умеет записывать объекты, пробовал передавать
this.inventorySlots и в 
Код:
    public UpWeaponsPackages(ItemStack itemStack, String string, Container inventorySlots) {
        this.text = string;
        this.item = itemStack;
        inventorySlots.putStackInSlot(0, null);
    }
Но так не работает. Он как бы уничтожает предмет в слоте, но это лишь видимость, стоит туда клатснуть и предмет берется в руки или закрыть гуи и предмет выпадает.
 
Назад
Сверху