translate trial spawners, cleanup

This commit is contained in:
Konicai 2023-12-13 00:48:03 -05:00
parent 22009054ab
commit 21a2c2332f
5 changed files with 38 additions and 34 deletions

View file

@ -29,6 +29,8 @@ 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 org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3i;
import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.nbt.NbtMapBuilder;
@ -99,24 +101,28 @@ public class SpawnerBlockEntityTranslator extends BlockEntityTranslator {
builder.put("MinSpawnDelay", current.getValue());
}
CompoundTag spawnData = tag.get("SpawnData");
if (spawnData != null) {
CompoundTag entityTag = spawnData.get("entity");
if (entityTag.get("id") instanceof StringTag idTag) {
// As of 1.19.3, spawners can be empty
String entityId = idTag.getValue();
builder.put("EntityIdentifier", entityId);
translateSpawnData(builder, tag.get("SpawnData"));
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);
}
static void translateSpawnData(@NonNull NbtMapBuilder builder, @Nullable CompoundTag spawnData) {
if (spawnData == null) {
return;
}
CompoundTag entityTag = spawnData.get("entity");
if (entityTag.get("id") instanceof StringTag idTag) {
// 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);
if (definition != null) {
builder.put("DisplayEntityWidth", definition.width());
builder.put("DisplayEntityHeight", definition.height());
builder.put("DisplayEntityScale", 1.0f);
}
}
}
}

View file

@ -30,13 +30,18 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import org.cloudburstmc.nbt.NbtMapBuilder;
@BlockEntity(type = BlockEntityType.TRIAL_SPAWNER)
public class TrialSpawnerBlockEntityTranslator extends SpawnerBlockEntityTranslator {
public class TrialSpawnerBlockEntityTranslator extends BlockEntityTranslator {
@Override
public void translateTag(NbtMapBuilder builder, CompoundTag tag, int blockState) {
if (tag != null) {
// todo 1.20.3 doesn't seem to work
super.translateTag(builder, tag, blockState);
if (tag == null) {
return;
}
// trial spawners have "spawn_data" instead of "SpawnData"
SpawnerBlockEntityTranslator.translateSpawnData(builder, tag.get("spawn_data"));
// Because trial spawners don't exist on bedrock yet
builder.put("id", "MobSpawner");
}
}

View file

@ -33,7 +33,6 @@ import org.cloudburstmc.nbt.NbtMapBuilder;
import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket;
import org.cloudburstmc.protocol.bedrock.packet.BlockEventPacket;
import it.unimi.dsi.fastutil.objects.Object2IntMaps;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.api.util.PlatformType;
import org.geysermc.geyser.level.block.BlockStateValues;
import org.geysermc.geyser.level.physics.Direction;
@ -128,14 +127,6 @@ public class JavaBlockEventTranslator extends PacketTranslator<ClientboundBlockE
blockEntityPacket.setData(builder.build());
session.sendUpstreamPacket(blockEntityPacket);
} else if (value instanceof DecoratedPotValue) {
// todo 1.20.3
} else if (value instanceof GenericBlockValue genericValue) {
if (genericValue.getValue() != 0) {
GeyserImpl.getInstance().getLogger().warning("Nonzero generic block value: " + packet);
}
} else {
GeyserImpl.getInstance().getLogger().warning("Unhandled non-generic block event: " + packet);
}
}
}

View file

@ -142,7 +142,8 @@ public class JavaGameEventTranslator extends PacketTranslator<ClientboundGameEve
}
break;
case AFFECTED_BY_ELDER_GUARDIAN:
// todo 1.20.3 does this play a sound? this game event has a value for audible or not
// note: There is a ElderGuardianEffectValue that determines if a sound should be made or not,
// but that doesn't seem to be controllable on Bedrock Edition
EntityEventPacket eventPacket = new EntityEventPacket();
eventPacket.setType(EntityEventType.ELDER_GUARDIAN_CURSE);
eventPacket.setData(0);
@ -168,9 +169,10 @@ public class JavaGameEventTranslator extends PacketTranslator<ClientboundGameEve
arrowSoundPacket.setPosition(entity.getPosition());
session.sendUpstreamPacket(arrowSoundPacket);
break;
case PUFFERFISH_STING_SOUND:
// todo 1.20.3 was this accidentally not implemented?
default:
// DEMO_MESSAGE - for JE game demo
// LEVEL_CHUNKS_LOAD_START - ???
// PUFFERFISH_STING_SOUND - doesn't exist on bedrock
break;
}
}

View file

@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231107.190703-112"
raknet = "1.0.0.CR1-20230703.195238-9"
blockstateupdater="1.20.50-20231106.161340-1"
mcauthlib = "d9d773e"
mcprotocollib = "11105ca"
mcprotocollib = "7123bf9"
adventure = "4.14.0"
adventure-platform = "4.3.0"
junit = "5.9.2"