Пропадает значение getTileData()

Версия Minecraft
1.12.2
586
32
136
Допустим есть у меня солн. генератор, он собрал 10000 энергии, записана она в NBT, при перезаходе, энергия пропадает, равно 0.
 
Решение
Добавь к себе в тайл..
После юзай tile.DE - получишь DE, юзай tile.DE_MAX - получишь DE_MAX.
Java:
public float DE, DE_MAX;

@Override
public void readFromNBT(NBTTagCompound tag) {
super.readFromNBT(tag);
DE = tag.getFloat("modid_de");
DE_MAX = tag.getFloat("modid_de_max");
}

@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
super.writeToNBT(tag);
tag.setFloat("modid_de", DE);
tag.setFloat("modid_de_max", DE_MAX);
return compound;
}
586
32
136
Ты тайл зарегистрировал?
Java:
package zarak.DarkKnowledge.init;

import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fml.common.registry.GameRegistry;
import zarak.DarkKnowledge.References;
import zarak.DarkKnowledge.tile.TileAltar0;

public class ModTileEntity {
    public static final Class<? extends TileEntity> ALTAR = TileAltar0.class;

    public static void register() {

        setRegister(ALTAR, "BLOCK_ALTAR");
    }

    private static void setRegister(Class<? extends TileEntity> tileClass, String name) {
        GameRegistry.registerTileEntity(tileClass, References.MODID + ":" + name);
    }
}
И прокси:
Java:
package zarak.DarkKnowledge.proxy;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import zarak.DarkKnowledge.api.DkCrafting;
import zarak.DarkKnowledge.generators.OreGenerator;
import zarak.DarkKnowledge.hungler.Events;
import zarak.DarkKnowledge.hungler.PotionEvents;
import zarak.DarkKnowledge.init.*;

public class CommonProxy {


    public void preInit(FMLPreInitializationEvent event) {
        ModBlock.register();
        ModItem.register();
        ModEntities.register();
        ModPotion.register();
        ModTileEntity.register();
        MinecraftForge.EVENT_BUS.register(new Events());
        MinecraftForge.EVENT_BUS.register(new PotionEvents());
    }

    public void init(FMLInitializationEvent event)
    {
        DkCrafting.crafting();
        DkCrafting.smelting();
        GameRegistry.registerWorldGenerator(new OreGenerator(), 0);
    }

    public void postInit(FMLPostInitializationEvent event) {

    }
   
}
 
Последнее редактирование модератором:
586
32
136
Какой у тебя конструктор в тайле?
Код:
 public TileAltar0(){
        checkDE(this,15000);
    }
checkDE
Код:
 public static  void  checkDE(TileEntity tileEntity,float max) {
        if(!tileEntity.getTileData().hasKey("DE")){
            NBTTagCompound tag = tileEntity.getTileData();
            tag.setFloat("DE",0);
        }
        if(!tileEntity.getTileData().hasKey("MAX_DE")){
            NBTTagCompound tag = tileEntity.getTileData();
            tag.setFloat("MAX_DE",max);
        }
    }
 
Вот пример:

Java:
    @Override
    public void readFromNBT(NBTTagCompound compound) {
        super.readFromNBT(compound);
        burntime=compound.getInteger(TileEntityConstants.burnName);
    }

    @Override
    public NBTTagCompound writeToNBT(NBTTagCompound compound) {
        super.writeToNBT(compound);
        compound.setInteger(TileEntityConstants.burnName, burntime);
        return compound;
    }
 
Мне так проще(ибо толком не могу понять , как write and read to nbt юзать
Вот пример:

Java:
    @Override
    public void readFromNBT(NBTTagCompound compound) {
        super.readFromNBT(compound);
        burntime=compound.getInteger("name");
    }

    @Override
    public NBTTagCompound writeToNBT(NBTTagCompound compound) {
        super.writeToNBT(compound);
        compound.setInteger("name", burntime);
        return compound;
    }
Чего тут непонятного?
 

Eifel

Модератор
1,623
78
608
Есть класс твоего тайла например:
Java:
class MyTile extends ... implements ...{

    private int value;

    public int getValue(){
        return this.value;
    }

    public void setValue(int v){
        this.value = v;
    }
    //там дальше код для записи и чтению из нбт что уже показывали

}
Ты хочешь что-то в нем поменять из другого класса например:
Java:
MyTile myTile = (MyTile)world.getTileEnntity(...);
myTile.setValue(10);
Или использовать public, что не есть хорошо, тогда:
Java:
public int value;
И обращение:
Java:
myTile.value = 10;
 
Последнее редактирование:
3,005
192
592
Добавь к себе в тайл..
После юзай tile.DE - получишь DE, юзай tile.DE_MAX - получишь DE_MAX.
Java:
public float DE, DE_MAX;

@Override
public void readFromNBT(NBTTagCompound tag) {
super.readFromNBT(tag);
DE = tag.getFloat("modid_de");
DE_MAX = tag.getFloat("modid_de_max");
}

@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
super.writeToNBT(tag);
tag.setFloat("modid_de", DE);
tag.setFloat("modid_de_max", DE_MAX);
return compound;
}
 
Последнее редактирование модератором:
Сверху