- 30
- 2
- 0
Есть такой интерфейс. После ввода имени игрока и нажатия "+" или "-" отправляется пакет который редактирует 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;
}
}
Последнее редактирование: