- 83
- 4
- 23
Суть такова: у меня есть существо, текстура которого зависит от его типа (не EntityType!).
При перезапуске мира текстура меняется, т.к. меняется тип существа, хотя тип должен сохранятся. Я переопределил writeCustomDataTag и readCustomDataTag, и при чтении тега, если тип равен null, он выбирается случайно.
Почему тип существа не сохраняется?
Сначала я пришел к одному выводу - я инициализирую тип в конструкторе. Но в таком случае тип все равно должен считываться, ибо методы
Я поменял кое-что, но игра теперь бросает NPE при рендере существа (т.к. текстуры нет, ведь типа тоже нет)
В итоге это выглядит вот так:
При перезапуске мира текстура меняется, т.к. меняется тип существа, хотя тип должен сохранятся. Я переопределил writeCustomDataTag и readCustomDataTag, и при чтении тега, если тип равен null, он выбирается случайно.
Почему тип существа не сохраняется?
Сначала я пришел к одному выводу - я инициализирую тип в конструкторе. Но в таком случае тип все равно должен считываться, ибо методы
writeCustomDataTag
и readCustomDataTag
вызываются после конструктора
Я поменял кое-что, но игра теперь бросает NPE при рендере существа (т.к. текстуры нет, ведь типа тоже нет)
В итоге это выглядит вот так:
Java:
public class HumanEntity extends PassiveEntity implements Npc {
private Type type;
public HumanEntity(World world) {
super(Entities.ENTITY_HUMAN, world);
//this.type = initType();
initGoals();
}
public HumanEntity(EntityType<Entity> entityEntityType, World world) {
super(Entities.ENTITY_HUMAN, world);
//this.type = initType();
initGoals();
}
private Type initType() {
return Type.values()[random.nextInt(Type.values().length)];
}
public Type getHumanType() {
return this.type;
}
@Override
public void writeCustomDataToTag(CompoundTag tag) {
super.writeCustomDataToTag(tag);
if (type == null)
this.type = initType();
tag.putString("HumanType", this.type.toString());
}
@Override
public void readCustomDataFromTag(CompoundTag tag) {
super.readCustomDataFromTag(tag);
String type = tag.getString("HumanType");
if (type == null)
this.type = initType();
}
public enum Type {
ALEX("textures/entity/alex.png"),
STEVE("textures/entity/steve.png");
private final Identifier identifier;
Type(String texture) {
this.identifier = new Identifier(MOD_ID, texture);
}
public Identifier getTexture() {
return this.identifier;
}
}
}
Последнее редактирование: