Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 15:00:11 +01:00
Fix some block entity inconsistencies
Dieser Commit ist enthalten in:
Ursprung
6249292903
Commit
61f20217a9
@ -61,7 +61,7 @@ public class JavaBlockEntityDataTranslator extends PacketTranslator<ClientboundB
|
|||||||
packet.getNbt(), blockState), packet.getPosition());
|
packet.getNbt(), blockState), packet.getPosition());
|
||||||
// Check for custom skulls.
|
// Check for custom skulls.
|
||||||
if (session.getPreferencesCache().showCustomSkulls() && packet.getNbt() != null && packet.getNbt().contains("SkullOwner")) {
|
if (session.getPreferencesCache().showCustomSkulls() && packet.getNbt() != null && packet.getNbt().contains("SkullOwner")) {
|
||||||
SkullBlockEntityTranslator.spawnPlayer(session, packet.getNbt(), blockState);
|
SkullBlockEntityTranslator.spawnPlayer(session, packet.getNbt(), position.getX(), position.getY(), position.getZ(), blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If block entity is command block, OP permission level is appropriate, player is in creative mode and the NBT is not empty
|
// If block entity is command block, OP permission level is appropriate, player is in creative mode and the NBT is not empty
|
||||||
|
@ -222,32 +222,33 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator<Clientbo
|
|||||||
BlockEntityInfo[] blockEntities = packet.getBlockEntities();
|
BlockEntityInfo[] blockEntities = packet.getBlockEntities();
|
||||||
NbtMap[] bedrockBlockEntities = new NbtMap[blockEntities.length + bedrockOnlyBlockEntities.size()];
|
NbtMap[] bedrockBlockEntities = new NbtMap[blockEntities.length + bedrockOnlyBlockEntities.size()];
|
||||||
int blockEntityCount = 0;
|
int blockEntityCount = 0;
|
||||||
|
final int chunkBlockX = packet.getX() << 4;
|
||||||
|
final int chunkBlockZ = packet.getZ() << 4;
|
||||||
while (blockEntityCount < blockEntities.length) {
|
while (blockEntityCount < blockEntities.length) {
|
||||||
BlockEntityInfo blockEntity = blockEntities[blockEntityCount];
|
BlockEntityInfo blockEntity = blockEntities[blockEntityCount];
|
||||||
CompoundTag tag = blockEntity.getNbt();
|
CompoundTag tag = blockEntity.getNbt();
|
||||||
BlockEntityType type = blockEntity.getType();
|
BlockEntityType type = blockEntity.getType();
|
||||||
int x = blockEntity.getX();
|
int x = blockEntity.getX(); // Relative to chunk
|
||||||
int y = blockEntity.getY();
|
int y = blockEntity.getY();
|
||||||
int z = blockEntity.getZ();
|
int z = blockEntity.getZ(); // Relative to chunk
|
||||||
|
|
||||||
// Get the Java block state ID from block entity position
|
// Get the Java block state ID from block entity position
|
||||||
DataPalette section = javaChunks[(y >> 4) - yOffset];
|
DataPalette section = javaChunks[(y >> 4) - yOffset];
|
||||||
int blockState = section.get(x & 0xF, y & 0xF, z & 0xF);
|
int blockState = section.get(x, y & 0xF, z);
|
||||||
|
|
||||||
if (type == BlockEntityType.LECTERN && BlockStateValues.getLecternBookStates().get(blockState)) {
|
if (type == BlockEntityType.LECTERN && BlockStateValues.getLecternBookStates().get(blockState)) {
|
||||||
// If getLecternBookStates is false, let's just treat it like a normal block entity
|
// If getLecternBookStates is false, let's just treat it like a normal block entity
|
||||||
bedrockBlockEntities[blockEntityCount] = session.getConnector().getWorldManager().getLecternDataAt(
|
bedrockBlockEntities[blockEntityCount++] = session.getConnector().getWorldManager().getLecternDataAt(
|
||||||
session, blockEntity.getX(), blockEntity.getY(), blockEntity.getZ(), true);
|
session, x + chunkBlockX, y, z + chunkBlockZ, true);
|
||||||
blockEntityCount++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockEntityTranslator blockEntityTranslator = BlockEntityUtils.getBlockEntityTranslator(type);
|
BlockEntityTranslator blockEntityTranslator = BlockEntityUtils.getBlockEntityTranslator(type);
|
||||||
bedrockBlockEntities[blockEntityCount] = blockEntityTranslator.getBlockEntityTag(type, x, y, z, tag, blockState);
|
bedrockBlockEntities[blockEntityCount] = blockEntityTranslator.getBlockEntityTag(type, x + chunkBlockX, y, z + chunkBlockZ, tag, blockState);
|
||||||
|
|
||||||
// Check for custom skulls
|
// Check for custom skulls
|
||||||
if (session.getPreferencesCache().showCustomSkulls() && tag != null && tag.contains("SkullOwner")) {
|
if (session.getPreferencesCache().showCustomSkulls() && tag != null && tag.contains("SkullOwner")) {
|
||||||
SkullBlockEntityTranslator.spawnPlayer(session, tag, blockState);
|
SkullBlockEntityTranslator.spawnPlayer(session, tag, x + chunkBlockX, y, z + chunkBlockZ, blockState);
|
||||||
}
|
}
|
||||||
blockEntityCount++;
|
blockEntityCount++;
|
||||||
}
|
}
|
||||||
|
@ -85,10 +85,7 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements
|
|||||||
return CompletableFuture.completedFuture(null);
|
return CompletableFuture.completedFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void spawnPlayer(GeyserSession session, CompoundTag tag, int blockState) {
|
public static void spawnPlayer(GeyserSession session, CompoundTag tag, int posX, int posY, int posZ, int blockState) {
|
||||||
int posX = (int) tag.get("x").getValue();
|
|
||||||
int posY = (int) tag.get("y").getValue();
|
|
||||||
int posZ = (int) tag.get("z").getValue();
|
|
||||||
float x = posX + .5f;
|
float x = posX + .5f;
|
||||||
float y = posY - .01f;
|
float y = posY - .01f;
|
||||||
float z = posZ + .5f;
|
float z = posZ + .5f;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren