- 1,417
- 44
- 594
Добрый день, в общем, начну с кода:
Пакет:
Ну и эвенты:
Проблема. После смотри данные сохраняются, отправляется пакет на клиент, все хорошо. Но при возражении, после отправки всех пакетов вызывается еще что-то и оно очищает nbt под ноль. Подскажите, пожалуйста, почему не сохраняется?
Java:
public class QuestsProperties implements IExtendedEntityProperties {
private final EntityPlayer player;
NBTTagCompound QuestsLvls = new NBTTagCompound();
NBTTagCompound QuestsProces = new NBTTagCompound();
@Override
public void init(Entity entity, World world) {
System.out.println("Test1");
}
public QuestsProperties(EntityPlayer player)
{
System.out.println("Test2");
this.player = player;
}
public static final void register(EntityPlayer player)
{
System.out.println("Test3");
player.registerExtendedProperties(Constants.QuestsOptions, new QuestsProperties(player));
}
public static final QuestsProperties get(EntityPlayer player)
{
System.out.println("Test4");
return (QuestsProperties) player.getExtendedProperties(Constants.QuestsOptions);
}
@Override
public void saveNBTData(NBTTagCompound compound)
{
NBTTagCompound properties = new NBTTagCompound();
for(int i = 0; i<ConfigCore.ids; i++) {
properties.setInteger(QuestReg.getName(i), QuestsLvls.getInteger(QuestReg.getName(i)));
properties.setInteger(QuestReg.getName(i)+"process", QuestsProces.getInteger(QuestReg.getName(i)+"process"));
}
compound.setTag(Constants.QuestsOptions, properties);
}
@Override
public void loadNBTData(NBTTagCompound compound)
{
NBTTagCompound properties = (NBTTagCompound) compound.getTag(Constants.QuestsOptions);
for(int i = 0; i<ConfigCore.ids; i++) {
QuestsLvls.setInteger(QuestReg.getName(i), properties.getInteger(QuestReg.getName(i)));
QuestsProces.setInteger(QuestReg.getName(i)+"process", properties.getInteger(QuestReg.getName(i)+"process"));
}
}
public void addProcess(int i) {
String research = QuestReg.getName(i);
System.out.println(research);
QuestsProces.setInteger(research, 1);
ProxyServer.attainmentsnetwork.sendTo(new SetQe(research, 1, 1), (EntityPlayerMP) this.player);
}
public void OpenQe(int i)
{
String research = QuestReg.getName(i);
System.out.println(research);
QuestsLvls.setInteger(research, 1);
ProxyServer.attainmentsnetwork.sendTo(new SetQe(research, 1, 0), (EntityPlayerMP) this.player);
// if(server)
// ProxyServer.attainmentsnetwork.sendTo(new SetAttainments(research, lvl+1), (EntityPlayerMP) this.player);
}
public void CloseQe(int i)
{
String research = QuestReg.getName(i);
QuestsLvls.setInteger(research, 0);
ProxyServer.attainmentsnetwork.sendTo(new SetQe(research, 2, 0), (EntityPlayerMP) this.player);
}
public int GiveQe(int i)
{
String research = QuestReg.getName(i);
return QuestsLvls.getInteger(research);
}
public int getQel(int lvl) {
int a=0;
for(int i = 0; i<ConfigCore.ids; i++) {
System.out.println(i+" номер "+QuestReg.getName(i)+" с lvl: " + QuestsLvls.getInteger(QuestReg.getName(i)));
if(QuestsLvls.getInteger(QuestReg.getName(i))==lvl) {
a++;
}
}
return a;
}
public int[] GiveQeAll()
{
int[] arr = new int[getQel(1)];
int a=0;
for(int i = 0; i<ConfigCore.ids; i++) {
if(QuestsLvls.getInteger(QuestReg.getName(i))==1) {
arr[a]=i;
a++;
}
}
return arr;
}
public void copy(QuestsProperties questsProperties) {
QuestsLvls = questsProperties.QuestsLvls;
QuestsProces = questsProperties.QuestsProces;
System.out.println("Send" + QuestsLvls.getInteger(QuestReg.getName(4)));
ProxyServer.attainmentsnetwork.sendTo(new SetQe(QuestsLvls, 3), (EntityPlayerMP) this.player);
ProxyServer.attainmentsnetwork.sendTo(new SetQe(QuestsProces, 2), (EntityPlayerMP) this.player);
}
public void ClientSet(String key, int value) {
QuestsLvls.setInteger(key, value);
}
public void ClientNBT(NBTTagCompound nbt, int type) {
if(type==2) {
QuestsProces = nbt;
}
if(type==3) {
System.out.println("Get" + nbt.getInteger(QuestReg.getName(4)));
this.QuestsLvls = nbt;
System.out.println("Get" + QuestsLvls.getInteger(QuestReg.getName(4)));
}
}
public void ClientSetProcess(String key, int value) {
QuestsProces.setInteger(key, value);
}
}
Код:
public class SetQe implements IMessage {
String key;
int value, type;
NBTTagCompound nbt;
public SetQe() {
}
public SetQe(String key, int value, int type) {
this.type = type;
this.key = key;
this.value = value;
}
public SetQe(NBTTagCompound nbt, int type) {
this.type = type;
this.nbt = nbt;
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(type);
if(type>=2) {
ByteBufUtils.writeTag(buf, nbt);
} else {
ByteBufUtils.writeUTF8String(buf, key);
buf.writeInt(value);
}
}
@Override
public void fromBytes(ByteBuf buf) {
type = buf.readInt();
if(type>=2) {
nbt = ByteBufUtils.readTag(buf);
} else {
key = ByteBufUtils.readUTF8String(buf);
value = buf.readInt();
}
}
public static class Handler implements IMessageHandler<SetQe, IMessage> {
@Override
public IMessage onMessage(SetQe packet, MessageContext message) {
//NBTTagCompound AttainmentsLvls = packet.AttainmentsLvls;
int type = packet.type;
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
if(type>=2) {
NBTTagCompound nbt = packet.nbt;
if(type==3) {
System.out.println("Packet"+nbt.getInteger(QuestReg.getName(4)));
}
QuestsProperties.get(player).ClientNBT(nbt, type);
} else {
String key = packet.key;
int value = packet.value;
if(type==0) {
QuestsProperties.get(player).ClientSet(key, value);
} else {
QuestsProperties.get(player).ClientSetProcess(key, value);
}
}
return null;
}
}
}
Код:
@SubscribeEvent
public void onEntityConstructing(EntityConstructing e) {
if (e.entity instanceof EntityPlayer && e.entity.getExtendedProperties(Constants.QuestsOptions) == null)
QuestsProperties.register((EntityPlayer) e.entity);
}
@SubscribeEvent
public void onClonePlayer(PlayerEvent.Clone e) {
QuestsProperties.get(e.entityPlayer).copy(QuestsProperties.get(e.original));
}
@SubscribeEvent
public void onLivingUpdate(LivingUpdateEvent event) {
if (event.entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) event.entity;
//QuestsProperties.get(player).onUpdate();
}
}
Проблема. После смотри данные сохраняются, отправляется пакет на клиент, все хорошо. Но при возражении, после отправки всех пакетов вызывается еще что-то и оно очищает nbt под ноль. Подскажите, пожалуйста, почему не сохраняется?