Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-28 00:50:20 +01:00
Dragon and piglin heads now animate on 1.20.2 servers
Dieser Commit ist enthalten in:
Ursprung
4e0cc92e93
Commit
13339f1ed1
@ -62,6 +62,7 @@ public final class BlockStateValues {
|
|||||||
private static final IntSet ALL_PISTON_HEADS = new IntOpenHashSet();
|
private static final IntSet ALL_PISTON_HEADS = new IntOpenHashSet();
|
||||||
private static final IntSet MOVING_PISTONS = new IntOpenHashSet();
|
private static final IntSet MOVING_PISTONS = new IntOpenHashSet();
|
||||||
private static final Int2ByteMap SKULL_VARIANTS = new FixedInt2ByteMap();
|
private static final Int2ByteMap SKULL_VARIANTS = new FixedInt2ByteMap();
|
||||||
|
private static final IntSet SKULL_POWERED = new IntOpenHashSet();
|
||||||
private static final Int2ByteMap SKULL_ROTATIONS = new Int2ByteOpenHashMap();
|
private static final Int2ByteMap SKULL_ROTATIONS = new Int2ByteOpenHashMap();
|
||||||
private static final Int2IntMap SKULL_WALL_DIRECTIONS = new Int2IntOpenHashMap();
|
private static final Int2IntMap SKULL_WALL_DIRECTIONS = new Int2IntOpenHashMap();
|
||||||
private static final Int2ByteMap SHULKERBOX_DIRECTIONS = new FixedInt2ByteMap();
|
private static final Int2ByteMap SHULKERBOX_DIRECTIONS = new FixedInt2ByteMap();
|
||||||
@ -172,6 +173,13 @@ public final class BlockStateValues {
|
|||||||
SKULL_ROTATIONS.put(javaBlockState, (byte) skullRotation.intValue());
|
SKULL_ROTATIONS.put(javaBlockState, (byte) skullRotation.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (javaId.startsWith("minecraft:dragon_head[") || javaId.startsWith("minecraft:piglin_head[")
|
||||||
|
|| javaId.startsWith("minecraft:dragon_wall_head[") || javaId.startsWith("minecraft:piglin_wall_head[")) {
|
||||||
|
if (javaId.contains("powered=true")) {
|
||||||
|
SKULL_POWERED.add(javaBlockState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (javaId.contains("wall_skull") || javaId.contains("wall_head")) {
|
if (javaId.contains("wall_skull") || javaId.contains("wall_head")) {
|
||||||
String direction = javaId.substring(javaId.lastIndexOf("facing=") + 7, javaId.lastIndexOf("powered=") - 1);
|
String direction = javaId.substring(javaId.lastIndexOf("facing=") + 7, javaId.lastIndexOf("powered=") - 1);
|
||||||
int rotation = switch (direction) {
|
int rotation = switch (direction) {
|
||||||
@ -448,6 +456,17 @@ public final class BlockStateValues {
|
|||||||
return SKULL_ROTATIONS.getOrDefault(state, (byte) -1);
|
return SKULL_ROTATIONS.getOrDefault(state, (byte) -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As of Java 1.20.2:
|
||||||
|
* Skull powered states are part of the namespaced ID in Java Edition, but part of the block entity tag in Bedrock.
|
||||||
|
*
|
||||||
|
* @param state BlockState of the block
|
||||||
|
* @return true if this skull is currently being powered.
|
||||||
|
*/
|
||||||
|
public static boolean isSkullPowered(int state) {
|
||||||
|
return SKULL_POWERED.contains(state);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skull rotations are part of the namespaced ID in Java Edition, but part of the block entity tag in Bedrock.
|
* Skull rotations are part of the namespaced ID in Java Edition, but part of the block entity tag in Bedrock.
|
||||||
* This gives a integer rotation that Bedrock can use.
|
* This gives a integer rotation that Bedrock can use.
|
||||||
|
@ -60,6 +60,9 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements
|
|||||||
}
|
}
|
||||||
builder.put("Rotation", rotation);
|
builder.put("Rotation", rotation);
|
||||||
builder.put("SkullType", skullVariant);
|
builder.put("SkullType", skullVariant);
|
||||||
|
if (BlockStateValues.isSkullPowered(blockState)) {
|
||||||
|
builder.putBoolean("MouthMoving", true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UUID getUUID(CompoundTag owner) {
|
private static UUID getUUID(CompoundTag owner) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren