Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-25 15:50:14 +01:00
Proper trial spawner block entity data
Dieser Commit ist enthalten in:
Ursprung
21ccafc40c
Commit
e6bf3ffdf0
@ -47,6 +47,7 @@ import java.util.function.BiConsumer;
|
|||||||
* metadata translators needed to translate the properties sent from the server. The translators are structured in such
|
* metadata translators needed to translate the properties sent from the server. The translators are structured in such
|
||||||
* a way that inserting a new one (for example in version updates) is convenient.
|
* a way that inserting a new one (for example in version updates) is convenient.
|
||||||
*
|
*
|
||||||
|
* @param identifier the Bedrock identifier of this entity
|
||||||
* @param <T> the entity type this definition represents
|
* @param <T> the entity type this definition represents
|
||||||
*/
|
*/
|
||||||
public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, EntityType entityType, String identifier,
|
public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, EntityType entityType, String identifier,
|
||||||
|
@ -107,7 +107,7 @@ public class SpawnerBlockEntityTranslator extends BlockEntityTranslator {
|
|||||||
bedrockNbt.put("isMovable", (byte) 1);
|
bedrockNbt.put("isMovable", (byte) 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void translateSpawnData(@NonNull NbtMapBuilder builder, @Nullable NbtMap spawnData) {
|
private static void translateSpawnData(@NonNull NbtMapBuilder builder, @Nullable NbtMap spawnData) {
|
||||||
if (spawnData == null) {
|
if (spawnData == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -27,22 +27,31 @@ package org.geysermc.geyser.translator.level.block.entity;
|
|||||||
|
|
||||||
import org.cloudburstmc.nbt.NbtMap;
|
import org.cloudburstmc.nbt.NbtMap;
|
||||||
import org.cloudburstmc.nbt.NbtMapBuilder;
|
import org.cloudburstmc.nbt.NbtMapBuilder;
|
||||||
|
import org.geysermc.geyser.entity.EntityDefinition;
|
||||||
import org.geysermc.geyser.level.block.type.BlockState;
|
import org.geysermc.geyser.level.block.type.BlockState;
|
||||||
|
import org.geysermc.geyser.registry.Registries;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType;
|
import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType;
|
||||||
|
|
||||||
@BlockEntity(type = BlockEntityType.TRIAL_SPAWNER)
|
@BlockEntity(type = BlockEntityType.TRIAL_SPAWNER)
|
||||||
public class TrialSpawnerBlockEntityTranslator extends BlockEntityTranslator {
|
public class TrialSpawnerBlockEntityTranslator extends BlockEntityTranslator {
|
||||||
|
// Note that it would appear block entity updates don't include the NBT, but we do need it on chunk load.
|
||||||
@Override
|
@Override
|
||||||
public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) {
|
public void translateTag(GeyserSession session, NbtMapBuilder bedrockNbt, NbtMap javaNbt, BlockState blockState) {
|
||||||
if (javaNbt == null) {
|
if (javaNbt == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// trial spawners have "spawn_data" instead of "SpawnData"
|
NbtMap entityData = javaNbt.getCompound("spawn_data").getCompound("entity");
|
||||||
SpawnerBlockEntityTranslator.translateSpawnData(bedrockNbt, javaNbt.getCompound("spawn_data", null));
|
if (entityData.isEmpty()) {
|
||||||
|
return;
|
||||||
// Because trial spawners don't exist on bedrock yet
|
}
|
||||||
bedrockNbt.put("id", "MobSpawner");
|
NbtMapBuilder spawnData = NbtMap.builder();
|
||||||
|
EntityDefinition<?> definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityData.getString("id"));
|
||||||
|
if (definition != null) {
|
||||||
|
spawnData.putString("TypeId", definition.identifier());
|
||||||
|
}
|
||||||
|
spawnData.putInt("Weight", entityData.getInt("Size", 1)); // ??? presumably since these are the only other two extra attributes
|
||||||
|
bedrockNbt.putCompound("spawn_data", spawnData.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren