Check if spawner contains entity type
@@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.level.block.entity;
import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
+import com.github.steveice10.opennbt.tag.builtin.StringTag;
import com.github.steveice10.opennbt.tag.builtin.Tag;
import com.nukkitx.nbt.NbtMapBuilder;
import org.geysermc.geyser.entity.EntityDefinition;
@@ -68,18 +69,20 @@ public class SpawnerBlockEntityTranslator extends BlockEntityTranslator {
CompoundTag spawnData = tag.get("SpawnData");
if (spawnData != null) {
- String entityID = (String) ((CompoundTag) spawnData.get("entity"))
- .get("id")
- .getValue();
- builder.put("EntityIdentifier", entityID);
+ StringTag idTag = ((CompoundTag) spawnData.get("entity")).get("id");
+ if (idTag != null) {
+ // As of 1.19.3, spawners can be empty
+ String entityId = idTag.getValue();
+ builder.put("EntityIdentifier", entityId);
- EntityDefinition<?> definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityID);
+ EntityDefinition<?> definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityId);
if (definition != null) {
builder.put("DisplayEntityWidth", definition.width());
builder.put("DisplayEntityHeight", definition.height());
builder.put("DisplayEntityScale", 1.0f);
}
}
+ }
builder.put("id", "MobSpawner");
builder.put("isMovable", (byte) 1);
