- 5,018
- 47
- 783
Проблема, казалось бы просторешаемая, но я уже сижу над ней в сумме семь часов. Может это я аутист, но настолько надоело, что решил обратится за помощью сюда, иначе я ** уже скоро. Он мне ночью снился, этот сраный тайл. В общем, у меня есть стейт, который в мету уже не влазит. Было решено этот стейт вместо меты сохранять в тайл, и считывать оттуда же.
Естественно при выходе из игры мой стейт будет скидываться до нуля. Моей задачей является достать значение сохраненной переменной из тайла и задать его стейту.
Написал код в итоге всех мучений, который в теории работать должен так:
Я получаю тайл, проверяю переменную, которая сохранена в тайле(te.stage), на то, что она больше нуля. Если она больше нуля(т.е имеет какое то значение), то я беру и ставлю стейт с этим числом. Иначе - присваиваю значение стейта(ноль, в данном случае). Дальше, если te.stage все таки еще меньше шести, то я делаю рост - увеличиваю переменную на единицу и перезаписываю значение переменной в стейте.
На практике же, получается так:
Все в порядке, блок вырастает до нужного. Однако при перезаходе значение te.stage вновь обнуляется! И вот почему, мне непонятно(
Естественно при выходе из игры мой стейт будет скидываться до нуля. Моей задачей является достать значение сохраненной переменной из тайла и задать его стейту.
Написал код в итоге всех мучений, который в теории работать должен так:
Я получаю тайл, проверяю переменную, которая сохранена в тайле(te.stage), на то, что она больше нуля. Если она больше нуля(т.е имеет какое то значение), то я беру и ставлю стейт с этим числом. Иначе - присваиваю значение стейта(ноль, в данном случае). Дальше, если te.stage все таки еще меньше шести, то я делаю рост - увеличиваю переменную на единицу и перезаписываю значение переменной в стейте.
На практике же, получается так:
Все в порядке, блок вырастает до нужного. Однако при перезаходе значение te.stage вновь обнуляется! И вот почему, мне непонятно(
Java:
@Override
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random random)
{
RealTreeTileEntity te = (RealTreeTileEntity)this.getTileEntity(world, pos);
world.scheduleUpdate(pos, this, 60);
if(te.stage > 0) {
world.setBlockState(pos, state.withProperty(STAGE, te.stage));
if(te.stage < 6) {
world.setBlockState(pos, state.withProperty(STAGE, te.stage+1));
te.saveStage(te.stage+1);
}
} else {
te.stage = state.getValue(STAGE);
}
// stage = te.getStage();
}
}
Java:
public class RealTreeTileEntity extends TileEntity {
public int stage;
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{
nbt.setInteger("stage", this.stage);
return super.writeToNBT(nbt);
}
public void readFromNBT(NBTTagCompound nbt)
{
this.stage = nbt.getInteger("stage");
super.readFromNBT(nbt);
}
public int getStage() {
return stage;
}
public void saveStage(int stage) {
this.stage = stage;
this.markDirty();
}
}