[РЕШЕНО]Как вывести List<String> с серверной части TileEntity в GuiContainer

Версия Minecraft
1.12.2
API
Forge
30
2
0
WLGUI.png
Есть такой интерфейс. После ввода имени игрока и нажатия "+" или "-" отправляется пакет который редактирует String List внутри TileEntity, а ниже поля для ввода должен выводиться список имён в листе. Однако информация о листе на клиенте и сервере отличается. На сервере данные правильные на клиенте нет(возможно это происходит из-за ошибки в методе добавления имён в лист). ну вот собственно вопрос: Как вывести List<String> с серверной части TileEntity в GuiContainer?


UPD:

Итоговый вариант:
WhiteListGui:
@Override
protected void actionPerformed(GuiButton B) {
    if(B.id == 1) {
        this.tileentity.addToWhiteListNames(this.gtf.getText());
    }
    if(B.id == 2) {
        this.tileentity.removeFromWhiteListNames(this.gtf.getText());
    }
}

TileEntity:
public void addToWhiteList(String name) {
    if(this.world != null && name != "" && name != null && !this.whitelist.contains(name)) {
        WhiteList WhiteList = new WhiteList(this.pos, name, 1);
        CommonProxy.simpleNetworkWrapper.sendToServer(WhiteList);
    }
}
public void removeFromWhiteList(String name) {
    if(this.world != null && name != "" && name != null && this.whitelist.contains(name)) {
        WhiteList WhiteList = new WhiteList(this.pos, name, 0);
        CommonProxy.simpleNetworkWrapper.sendToServer(WhiteList);
    }
}

public void setWhiteList(List<String> newwhitelist) {
    this.whitelist = newwhitelist;
    this.markDirty();
    if (this.world != null) {
        IBlockState state = this.world.getBlockState(this.getPos());
        this.world.notifyBlockUpdate(this.getPos(), state, state, 3);
    }
}

SWhiteList:
@Override
public IMessage onMessage(final WhiteList message, MessageContext ctx) {
    if(message.getAction() == 1) {
        tileentity.whitelist.add(message.getName());
        CWhiteList CWhiteList = new CWhiteList(message.getPosition(), cmte.coreminerwhitelistnames, 1);
        CommonProxy.simpleNetworkWrapper.sendToAll(CWhiteList);
    }

    if(message.getAction() == 0) {
        tileentity.whitelist.remove(message.getName());
        CWhiteList CWhiteList = new CWhiteList(message.getPosition(), cmte.getCoreMinerWhiteListNames(), 0);
        CommonProxy.simpleNetworkWrapper.sendToAll(CWhiteList);
    }
    return null;
}

CWhiteList:
public class CWhiteList implements IMessage, IMessageHandler<CWhiteList, IMessage> {
    private List<String> whitelist;

    public CWhiteList(List<String> whitelist) {
        this.whitelist = whitelist;
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeShort(this.whitelist.size());
        for (String name : this.whitelist) {
            ByteBufUtils.writeUTF8String(buf, name);
        }
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        short size = buf.readShort();
        this.whitelist = new ArrayList<>();
        for(int index = 0; index < size; index++) {
            this.whitelist.add(ByteBufUtils.readUTF8String(buf));
        }
    }

    @Override
    public IMessage onMessage(final CWhiteList message, MessageContext ctx) {
        tileentity.setWhiteList(message.whitelist);
        return null;
    }
}
 
Последнее редактирование:
Решение
То есть в методе addToWhiteList нужно отправить Client side пакет, который содержит данные листа с сервера?
Тебе нужно отправлять клиентский пакет с данными клиента. При обработке пакеты ты заменяешь данные на сервере клиентскими данными (которые ты получил из пакета). После того, как данные на сервере обновились, кидаешь серверный пакет клиенту. Уже в этом пакете ты обновляешь данные клиента (взяв данные с сервера, естественно).
Назад
Сверху