3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-10-02 16:10:10 +02:00

Fix custom blocks in 1.19.50

Dieser Commit ist enthalten in:
Joshua Castle 2022-12-20 22:22:09 -08:00
Ursprung f2d4176054
Commit 3257f3cef3
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: F674F38216C35D5D
4 geänderte Dateien mit 14 neuen und 44 gelöschten Zeilen

Datei anzeigen

@ -28,7 +28,7 @@ package org.geysermc.geyser.api.event.lifecycle;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockData;
import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.CustomBlockState;
import org.geysermc.geyser.api.event.Event; import org.geysermc.event.Event;
public abstract class GeyserDefineCustomBlocksEvent implements Event { public abstract class GeyserDefineCustomBlocksEvent implements Event {

Datei anzeigen

@ -144,7 +144,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(),
resourcePack.getContentKey(), "", header.getUuid().toString(), false, false)); resourcePack.getContentKey(), "", header.getUuid().toString(), false, false));
} }
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks() || GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()); resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
session.sendUpstreamPacket(resourcePacksInfo); session.sendUpstreamPacket(resourcePacksInfo);
GeyserLocale.loadGeyserLocale(session.locale()); GeyserLocale.loadGeyserLocale(session.locale());

Datei anzeigen

@ -30,7 +30,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.nukkitx.nbt.*; import com.nukkitx.nbt.*;
import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.data.BlockPropertyData;
import com.nukkitx.protocol.bedrock.v527.Bedrock_v527;
import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544;
import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
@ -180,7 +179,12 @@ public final class BlockRegistryPopulator {
NbtMap propertyTag = NbtMap.builder() NbtMap propertyTag = NbtMap.builder()
.putCompound("components", convertComponents(customBlock.components(), protocolVersion)) .putCompound("components", convertComponents(customBlock.components(), protocolVersion))
.putInt("molangVersion", 0) .putCompound("menu_category", NbtMap.builder()
.putString("category", "none")
.putString("group", "")
.putBoolean("is_hidden_in_commands", false)
.build())
.putInt("molangVersion", 1)
.putList("permutations", NbtType.COMPOUND, permutations) .putList("permutations", NbtType.COMPOUND, permutations)
.putList("properties", NbtType.COMPOUND, properties) .putList("properties", NbtType.COMPOUND, properties)
.build(); .build();
@ -199,7 +203,7 @@ public final class BlockRegistryPopulator {
NbtList<NbtMap> blocksTag; NbtList<NbtMap> blocksTag;
List<NbtMap> blockStates; List<NbtMap> blockStates;
try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key())); try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key()));
NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) {
NbtMap blockPalette = (NbtMap) nbtInputStream.readTag(); NbtMap blockPalette = (NbtMap) nbtInputStream.readTag();
blocksTag = (NbtList<NbtMap>) blockPalette.getList("blocks", NbtType.COMPOUND); blocksTag = (NbtList<NbtMap>) blockPalette.getList("blocks", NbtType.COMPOUND);
blockStates = new ArrayList<>(blocksTag); blockStates = new ArrayList<>(blocksTag);
@ -366,14 +370,10 @@ public final class BlockRegistryPopulator {
} }
NbtMapBuilder builder = NbtMap.builder(); NbtMapBuilder builder = NbtMap.builder();
if (components.selectionBox() != null) { if (components.selectionBox() != null) {
builder.putCompound("minecraft:aim_collision", convertBox(components.selectionBox())); builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox()));
} }
if (components.collisionBox() != null) { if (components.collisionBox() != null) {
String tagName = "minecraft:block_collision"; builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox()));
if (protocolVersion >= Bedrock_v534.V534_CODEC.getProtocolVersion()) {
tagName = "minecraft:collision_box";
}
builder.putCompound(tagName, convertBox(components.collisionBox()));
} }
if (components.geometry() != null) { if (components.geometry() != null) {
builder.putCompound("minecraft:geometry", NbtMap.builder() builder.putCompound("minecraft:geometry", NbtMap.builder()
@ -397,7 +397,7 @@ public final class BlockRegistryPopulator {
.build()); .build());
} }
if (components.destroyTime() != null) { if (components.destroyTime() != null) {
builder.putCompound("minecraft:destroy_time", NbtMap.builder() builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder()
.putFloat("value", components.destroyTime()) .putFloat("value", components.destroyTime())
.build()); .build());
} }
@ -407,8 +407,8 @@ public final class BlockRegistryPopulator {
.build()); .build());
} }
if (components.lightEmission() != null) { if (components.lightEmission() != null) {
builder.putCompound("minecraft:block_light_emission", NbtMap.builder() builder.putCompound("minecraft:light_emission", NbtMap.builder()
.putFloat("value", ((float) components.lightEmission()) / 15f) .putInt("value", components.lightEmission())
.build()); .build());
} }
if (components.lightDampening() != null) { if (components.lightDampening() != null) {

Datei anzeigen

@ -560,34 +560,4 @@ public abstract class ItemTranslator {
} }
} }
private static CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) {
if (nbt != null && nbt.contains("SkullOwner")) {
if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) {
// It's a username give up d:
return null;
}
SkinManager.GameProfileData data = SkinManager.GameProfileData.from(skullOwner);
if (data == null) {
session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt);
return null;
}
String skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1);
return BlockRegistries.CUSTOM_SKULLS.get(skinHash);
}
return null;
}
private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder) {
CustomSkull customSkull = getCustomSkull(session, nbt);
if (customSkull != null) {
CustomBlockData customBlockData = customSkull.getCustomBlockData();
int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customBlockData);
int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customBlockData.defaultBlockState());
builder.id(itemId);
builder.blockRuntimeId(blockRuntimeId);
}
}
} }