From 35a0e130fc8bba31de01ca6b56167e605d863f30 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 1/7] fix(players): read spawn identity fields once Read device identity after passenger data and reuse it in the Java profile. The 26.60 update consumed both fields a second time and disconnected clients as soon as another player spawned. Exercise the registered ADD_PLAYER handler with real wire data, both passenger states, and empty and populated device IDs. Add the test runtime without duplicating compile-only dependency versions. --- build.gradle | 13 ++ .../protocol/packet/OtherPlayerPackets.java | 8 +- .../packet/OtherPlayerPacketsTest.java | 144 ++++++++++++++++++ 3 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPacketsTest.java diff --git a/build.gradle b/build.gradle index 8a16054d7..fa5d53e9a 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,10 @@ repositories { } } +configurations { + testImplementation.extendsFrom compileOnly +} + dependencies { compileOnly "com.viaversion:viaversion-common:5.12.0" compileOnly "org.yaml:snakeyaml:2.7" @@ -98,11 +102,20 @@ dependencies { transitive = false } + testImplementation "org.junit.jupiter:junit-jupiter:6.1.3" + testImplementation "org.mockito:mockito-core:5.24.0" + testImplementation sourceSets.tool.output + testRuntimeOnly "org.junit.platform:junit-platform-launcher:6.1.3" + toolImplementation "org.jsoup:jsoup:1.23.2" toolImplementation "org.ow2.asm:asm-tree:9.11.1" toolImplementation "net.lenni0451.commons:asm:1.9.2" } +test { + useJUnitPlatform() +} + def registerToolTask(String name, String toolMainClass, String toolDescription) { tasks.register(name, JavaExec) { group = "viabedrock tools" diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPackets.java index 5c11ed0fb..c7ab885fa 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPackets.java @@ -77,8 +77,8 @@ public static void register(final BedrockProtocol protocol) { final PlayerAbilities abilities = wrapper.read(BedrockTypes.PLAYER_ABILITIES); // abilities wrapper.read(BedrockTypes.ENTITY_LINK_ARRAY); // entity links wrapper.read(BedrockTypes.OPTIONAL_PASSENGER_OF_BLOCKS); // passenger of blocks - wrapper.read(BedrockTypes.STRING); // device id - wrapper.read(BedrockTypes.INT_LE); // build platform + final String deviceId = wrapper.read(BedrockTypes.STRING); // device id + final int buildPlatform = wrapper.read(BedrockTypes.INT_LE); // build platform final PlayerEntity entity = entityTracker.addEntity(new PlayerEntity(wrapper.user(), entityRuntimeId, entityTracker.getNextJavaEntityId(), uuid, abilities)); entity.setPosition(position); @@ -92,8 +92,8 @@ public static void register(final BedrockProtocol protocol) { playerInfoUpdate.write(Types.STRING, StringUtil.encodeUuid(uuid)); // username playerInfoUpdate.write(Types.PROFILE_PROPERTY_ARRAY, new GameProfile.Property[]{ new GameProfile.Property("platform_online_id", platformOnlineId), - new GameProfile.Property("device_id", wrapper.read(BedrockTypes.STRING)), // device id - new GameProfile.Property("device_os", wrapper.read(BedrockTypes.INT_LE).toString()) // device os + new GameProfile.Property("device_id", deviceId), + new GameProfile.Property("device_os", Integer.toString(buildPlatform)) }); // properties playerInfoUpdate.write(Types.VAR_INT, GameTypeRewriter.getEffectiveGameMode(gameType, gameSession.getLevelGameType()).ordinal()); // game mode playerInfoUpdate.send(BedrockProtocol.class); diff --git a/src/test/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPacketsTest.java b/src/test/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPacketsTest.java new file mode 100644 index 000000000..18c4c1c58 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/packet/OtherPlayerPacketsTest.java @@ -0,0 +1,144 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package net.raphimc.viabedrock.protocol.packet; + +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.data.MappingData; +import com.viaversion.viaversion.api.data.FullMappings; +import com.viaversion.viaversion.api.minecraft.entities.EntityTypes26_3; +import com.viaversion.viaversion.api.protocol.Protocol; +import com.viaversion.viaversion.api.connection.ProtocolInfo; +import com.viaversion.viaversion.api.minecraft.BlockPosition; +import com.viaversion.viaversion.api.minecraft.GameProfile; +import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; +import com.viaversion.viaversion.api.minecraft.item.StructuredItem; +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import com.viaversion.viaversion.api.type.Types; +import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap; +import com.viaversion.viaversion.protocol.packet.PacketWrapperImpl; +import com.viaversion.viaversion.protocols.v26_2to26_3.packet.ClientboundPackets26_3; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.raphimc.viabedrock.api.model.entity.PlayerEntity; +import net.raphimc.viabedrock.protocol.BedrockProtocol; +import net.raphimc.viabedrock.protocol.ClientboundBedrockPackets; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.GameType; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.PassengerOfBlockArguments_EmoteType; +import net.raphimc.viabedrock.protocol.model.BedrockItem; +import net.raphimc.viabedrock.protocol.model.PassengerOfBlocks; +import net.raphimc.viabedrock.protocol.model.Position3f; +import net.raphimc.viabedrock.protocol.rewriter.ItemRewriter; +import net.raphimc.viabedrock.protocol.storage.EntityTracker; +import net.raphimc.viabedrock.protocol.storage.GameSessionStorage; +import net.raphimc.viabedrock.protocol.types.BedrockTypes; +import net.raphimc.viabedrock.protocol.types.item.NetworkItemStackDescriptorType; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +final class OtherPlayerPacketsTest { + + @Test + void preservesDeviceIdentityAndConsumesThePayloadOnce() throws Exception { + // Initialize the component keys before VersionedTypes enters its dependent initializers. + Class.forName(StructuredDataKey.class.getName()); + final var typeProtocol = mock(Protocol.class); + final var mappingData = mock(MappingData.class); + final var entityMappings = mock(FullMappings.class); + when(typeProtocol.getMappingData()).thenReturn(mappingData); + when(mappingData.getEntityMappings()).thenReturn(entityMappings); + int nextId = 0; + for (final var type : EntityTypes26_3.values()) { + if (!type.isAbstractType()) { + when(entityMappings.mappedId(type.identifier())).thenReturn(nextId++); + } + } + when(entityMappings.mappedSize()).thenReturn(nextId); + EntityTypes26_3.initialize(typeProtocol); + for (final boolean seated : new boolean[]{false, true}) { + check(seated, "", 0); + check(seated, "5fa30b41-7d50-4b40-945b-977899244996", 7); + } + } + + private static void check(final boolean seated, final String deviceId, final int platform) throws Exception { + final var protocol = mock(BedrockProtocol.class); + OtherPlayerPackets.register(protocol); + final var handler = ArgumentCaptor.forClass(PacketHandler.class); + verify(protocol).registerClientbound(eq(ClientboundBedrockPackets.ADD_PLAYER), eq(ClientboundPackets26_3.ADD_ENTITY), handler.capture()); + + final var user = mock(UserConnection.class); + final var info = mock(ProtocolInfo.class); + when(user.getProtocolInfo()).thenReturn(info); + when(info.protocolVersion()).thenReturn(ProtocolVersion.v1_21); + when(info.serverProtocolVersion()).thenReturn(ProtocolVersion.v1_21); + final var session = mock(GameSessionStorage.class); + final var items = mock(ItemRewriter.class); + final var entities = mock(EntityTracker.class); + final var player = mock(PlayerEntity.class); + final var itemType = new NetworkItemStackDescriptorType(-1, new Int2ObjectOpenHashMap<>(), false); + when(user.get(GameSessionStorage.class)).thenReturn(session); + when(user.get(ItemRewriter.class)).thenReturn(items); + when(user.get(EntityTracker.class)).thenReturn(entities); + when(session.getLevelGameType()).thenReturn(GameType.Survival); + when(items.newItemType()).thenReturn(itemType); + when(items.javaItem(any(BedrockItem.class))).thenReturn(StructuredItem.empty()); + when(entities.addEntity(any(PlayerEntity.class))).thenReturn(player); + + final ByteBuf buffer = Unpooled.buffer(); + try { + BedrockTypes.UUID.write(buffer, UUID.fromString("8695b182-22a8-4c88-b4ba-07d33e903c28")); + BedrockTypes.STRING.write(buffer, "OtherPlayer"); + BedrockTypes.UNSIGNED_VAR_LONG.write(buffer, 42L); + BedrockTypes.STRING.write(buffer, "platform-chat"); + BedrockTypes.POSITION_3F.write(buffer, new Position3f(1F, 65F, -2F)); + BedrockTypes.POSITION_3F.write(buffer, Position3f.ZERO); + BedrockTypes.POSITION_3F.write(buffer, Position3f.ZERO); + itemType.write(buffer, new BedrockItem((short) 0)); + BedrockTypes.VAR_INT.write(buffer, GameType.Survival.getValue()); + buffer.writeByte(0); // metadata count + buffer.writeByte(0); // integer property count + buffer.writeByte(0); // float property count + buffer.writeLongLE(42L).writeByte(0).writeByte(0).writeByte(0); // abilities, no layers + buffer.writeByte(0); // actor link count + BedrockTypes.OPTIONAL_PASSENGER_OF_BLOCKS.write(buffer, seated + ? new PassengerOfBlocks(new BlockPosition(-2, 64, 3), new Position3f(0F, 0.5F, 0F), 90F, 45F, PassengerOfBlockArguments_EmoteType.Riding) + : null); + BedrockTypes.STRING.write(buffer, deviceId); + buffer.writeIntLE(platform); + + final var input = spy(new PacketWrapperImpl(ClientboundPackets26_3.ADD_ENTITY, buffer, user)); + doNothing().when(input).send(any()); + final var profile = spy(new PacketWrapperImpl(ClientboundPackets26_3.PLAYER_INFO_UPDATE, null, user)); + doNothing().when(profile).send(any()); + try (var packets = mockStatic(PacketWrapper.class)) { + packets.when(() -> PacketWrapper.create(ClientboundPackets26_3.PLAYER_INFO_UPDATE, user)).thenReturn(profile); + packets.when(() -> PacketWrapper.create(ClientboundPackets26_3.SET_EQUIPMENT, user)).thenReturn(mock(PacketWrapper.class)); + handler.getValue().handle(input); + } + + assertFalse(buffer.isReadable()); + final GameProfile.Property[] expected = { + new GameProfile.Property("platform_online_id", "platform-chat"), + new GameProfile.Property("device_id", deviceId), + new GameProfile.Property("device_os", Integer.toString(platform)) + }; + assertArrayEquals(expected, profile.get(Types.PROFILE_PROPERTY_ARRAY, 0)); + verify(input).send(BedrockProtocol.class); + verify(profile).send(BedrockProtocol.class); + verify(player).sendInitialEntityData(); + } finally { + buffer.release(); + } + } + +} From 55a768b49c83ee13a961adfc88167fee9b1b25ec Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 2/7] fix(network): consume uncompressed Bedrock frames NetworkSettings uses the uint16 no-compression value 65535, while frame headers use uint8 value 255. Preserve the generated enum value and translate only the frame header. Consume a retained payload slice so Netty does not decode the same payload again as a compression header. Separate regressions cover negotiation and frame consumption. --- .../viabedrock/netty/CompressionCodec.java | 5 +- .../generated/PacketCompressionAlgorithm.java | 2 +- .../netty/CompressionCodecTest.java | 77 +++++++++++++++++++ 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 src/test/java/net/raphimc/viabedrock/netty/CompressionCodecTest.java diff --git a/src/main/java/net/raphimc/viabedrock/netty/CompressionCodec.java b/src/main/java/net/raphimc/viabedrock/netty/CompressionCodec.java index 45f7a6f5a..4ef6cf68d 100644 --- a/src/main/java/net/raphimc/viabedrock/netty/CompressionCodec.java +++ b/src/main/java/net/raphimc/viabedrock/netty/CompressionCodec.java @@ -86,7 +86,8 @@ protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final L } final int rawAlgorithm = in.readUnsignedByte(); - final PacketCompressionAlgorithm algorithm = PacketCompressionAlgorithm.getByValue(rawAlgorithm); + // NetworkSettings uses a uint16 sentinel; a compressed frame has only a uint8 header. + final PacketCompressionAlgorithm algorithm = rawAlgorithm == 0xFF ? PacketCompressionAlgorithm.None : PacketCompressionAlgorithm.getByValue(rawAlgorithm); if (algorithm == null) { // Bedrock client drops the packet if the algorithm is unknown ViaBedrock.getPlatform().getLogger().log(Level.WARNING, "Dropping packet with unknown PacketCompressionAlgorithm: " + rawAlgorithm); in.skipBytes(in.readableBytes()); @@ -95,7 +96,7 @@ protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final L final CompressionAlgorithm compressionAlgorithm = this.getCompressionAlgorithm(algorithm); if (compressionAlgorithm instanceof NoopCompression) { - out.add(in.retain()); + out.add(in.readRetainedSlice(in.readableBytes())); } else { final ByteBuf uncompressedData = ctx.alloc().buffer(); compressionAlgorithm.decompress(in, uncompressedData); // Bedrock client would drop packets with invalid data, but this would be too insane to do diff --git a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/PacketCompressionAlgorithm.java b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/PacketCompressionAlgorithm.java index cb4008658..b076111e0 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/PacketCompressionAlgorithm.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/PacketCompressionAlgorithm.java @@ -8,7 +8,7 @@ public enum PacketCompressionAlgorithm { ZLib(0), Snappy(1), - None(255), + None(65535), ; private static final Int2ObjectMap BY_VALUE = new Int2ObjectOpenHashMap<>(); diff --git a/src/test/java/net/raphimc/viabedrock/netty/CompressionCodecTest.java b/src/test/java/net/raphimc/viabedrock/netty/CompressionCodecTest.java new file mode 100644 index 000000000..3893779b5 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/netty/CompressionCodecTest.java @@ -0,0 +1,77 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.embedded.EmbeddedChannel; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.PacketCompressionAlgorithm; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +final class CompressionCodecTest { + + @Test + void consumesAnUncompressedFrameWithoutDecodingItsPayloadAgain() { + final var channel = new EmbeddedChannel(new CompressionCodec(PacketCompressionAlgorithm.None, 0)); + try { + assertTrue(channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{(byte) 0xFF, 1, 3, 5, 7}))); + final ByteBuf decoded = channel.readInbound(); + try { + assertEquals(4, decoded.readableBytes()); + assertEquals(0x01030507, decoded.readInt()); + } finally { + decoded.release(); + } + assertNull(channel.readInbound()); + } finally { + channel.finishAndReleaseAll(); + } + } + + @Test + void readsTheByteFrameSentinelAfterNegotiatingTheUnsignedShortSentinel() { + final ByteBuf settings = Unpooled.wrappedBuffer(new byte[]{(byte) 0xFF, (byte) 0xFF}); + final PacketCompressionAlgorithm negotiated = PacketCompressionAlgorithm.getByValue(settings.readUnsignedShortLE()); + settings.release(); + final var channel = new EmbeddedChannel(new CompressionCodec(negotiated, 0)); + try { + assertTrue(channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{(byte) 0xFF, 1, 3, 5, 7}))); + final ByteBuf decoded = channel.readInbound(); + try { + assertEquals(4, decoded.readableBytes()); + assertEquals(0x01030507, decoded.readInt()); + } finally { + decoded.release(); + } + assertTrue(channel.writeOutbound(Unpooled.wrappedBuffer(new byte[]{2, 4, 6, 8}))); + final ByteBuf encoded = channel.readOutbound(); + try { + assertEquals(5, encoded.readableBytes()); + assertEquals(0xFF, encoded.readUnsignedByte()); + assertEquals(0x02040608, encoded.readInt()); + } finally { + encoded.release(); + } + } finally { + channel.finishAndReleaseAll(); + } + } + +} From 591672dabf70a313d562af982c17fc9a2ffef691 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 3/7] fix(blocks): preserve explicit connection states during upgrades The 26.60 palette keeps block-state version 1.21.60.33. Its added-properties schema therefore also runs on current redstone, fire, and chorus states. Add missing properties without replacing supplied values. Verify equal-version states, legacy defaults, distinct fire and chorus domains, and repeated upgrades. --- .../JsonBlockStateUpgradeSchema.java | 4 +- .../JsonBlockStateUpgradeSchemaTest.java | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/test/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchemaTest.java diff --git a/src/main/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchema.java b/src/main/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchema.java index 943e631d0..5d12c68f7 100644 --- a/src/main/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchema.java +++ b/src/main/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchema.java @@ -212,7 +212,9 @@ public JsonBlockStateUpgradeSchema(final JsonObject jsonObject) { if (tag.get("states") instanceof CompoundTag states) { for (Pair property : toAdd) { - states.put(property.key(), NbtUtil.createTag(property.value())); + if (!states.contains(property.key())) { + states.put(property.key(), NbtUtil.createTag(property.value())); + } } } }); diff --git a/src/test/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchemaTest.java b/src/test/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchemaTest.java new file mode 100644 index 000000000..29133c2bf --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/api/chunk/blockstate/JsonBlockStateUpgradeSchemaTest.java @@ -0,0 +1,54 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package net.raphimc.viabedrock.api.chunk.blockstate; + +import com.viaversion.nbt.tag.CompoundTag; +import com.viaversion.viaversion.libs.gson.JsonParser; +import org.junit.jupiter.api.Test; + +import java.nio.charset.StandardCharsets; + +import static org.junit.jupiter.api.Assertions.*; + +final class JsonBlockStateUpgradeSchemaTest { + + @Test + void addsLegacyConnectionsWithoutReplacingCurrentConnections() throws Exception { + final JsonBlockStateUpgradeSchema schema; + try (var input = getClass().getResourceAsStream("/assets/viabedrock/block_state_upgrade_schema/0361_1.26.50_to_1.26.60.json")) { + assertNotNull(input); + schema = new JsonBlockStateUpgradeSchema(JsonParser.parseString(new String(input.readAllBytes(), StandardCharsets.UTF_8)).getAsJsonObject()); + } + for (final String name : new String[]{"minecraft:redstone_wire", "minecraft:fire", "minecraft:chorus_plant"}) { + final var tag = new CompoundTag(); + tag.putString("name", name); + tag.putInt("version", 1 << 24 | 21 << 16 | 60 << 8 | 33); + final var states = new CompoundTag(); + final boolean redstone = name.equals("minecraft:redstone_wire"); + if (redstone) { + states.putString("redstone_north", "up"); + states.putInt("redstone_signal", 12); + } else { + states.putByte("minecraft:connection_north", (byte) 1); + } + tag.put("states", states); + schema.upgrade(tag); + if (redstone) { + assertEquals("up", states.getStringTag("redstone_north").getValue()); + assertEquals("none", states.getStringTag("redstone_east").getValue()); + assertEquals(12, states.getIntTag("redstone_signal").asInt()); + } else { + assertEquals(1, states.getByteTag("minecraft:connection_north").asByte()); + assertEquals(0, states.getByteTag("minecraft:connection_east").asByte()); + assertEquals(name.equals("minecraft:chorus_plant"), states.contains("minecraft:connection_down")); + } + final var once = tag.copy(); + schema.upgrade(tag); + assertEquals(once, tag); + } + } + +} From 4e8953385cf1d0d16b9f962105190bacffa81b26 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 4/7] fix(resources): restore bundled biome and rendering definitions The 26.60 regeneration left the bundled packs without biome, fog, or render-controller definitions. Restore the 37 affected archives from the validated 26.60 source snapshot in PR #465. These archives restore 344 biome files, 249 fog files, and 214 controller files. Their source is the official 1.26.60.5 GDK package recorded in that draft. Preserve the manifests, licenses, and language data. Exercise the actual definition loaders against bundled archives. --- .../resource_packs/chemistry.mcpack | Bin 3607 -> 4089 bytes .../viabedrock/resource_packs/editor.mcpack | Bin 47761 -> 48206 bytes .../experimental_y_2026_drop_4.mcpack | Bin 1222 -> 4142 bytes .../viabedrock/resource_packs/vanilla.mcpack | Bin 206937 -> 272865 bytes .../resource_packs/vanilla_1.14.mcpack | Bin 675 -> 1203 bytes .../resource_packs/vanilla_1.16.100.mcpack | Bin 676 -> 25100 bytes .../resource_packs/vanilla_1.16.210.mcpack | Bin 676 -> 2531 bytes .../resource_packs/vanilla_1.16.mcpack | Bin 675 -> 5164 bytes .../resource_packs/vanilla_1.17.0.mcpack | Bin 675 -> 3464 bytes .../resource_packs/vanilla_1.18.0.mcpack | Bin 675 -> 21151 bytes .../resource_packs/vanilla_1.18.10.mcpack | Bin 676 -> 1224 bytes .../resource_packs/vanilla_1.19.0.mcpack | Bin 675 -> 37448 bytes .../resource_packs/vanilla_1.19.10.mcpack | Bin 676 -> 1485 bytes .../resource_packs/vanilla_1.19.20.mcpack | Bin 676 -> 1652 bytes .../resource_packs/vanilla_1.19.50.mcpack | Bin 676 -> 3514 bytes .../resource_packs/vanilla_1.19.60.mcpack | Bin 676 -> 1198 bytes .../resource_packs/vanilla_1.19.80.mcpack | Bin 676 -> 1288 bytes .../resource_packs/vanilla_1.20.0.mcpack | Bin 675 -> 6312 bytes .../resource_packs/vanilla_1.20.20.mcpack | Bin 676 -> 1423 bytes .../resource_packs/vanilla_1.20.30.mcpack | Bin 676 -> 1181 bytes .../resource_packs/vanilla_1.20.80.mcpack | Bin 676 -> 2176 bytes .../resource_packs/vanilla_1.21.0.mcpack | Bin 675 -> 5647 bytes .../resource_packs/vanilla_1.21.10.mcpack | Bin 676 -> 2609 bytes .../resource_packs/vanilla_1.21.100.mcpack | Bin 676 -> 3971 bytes .../resource_packs/vanilla_1.21.110.mcpack | Bin 676 -> 9660 bytes .../resource_packs/vanilla_1.21.120.mcpack | Bin 676 -> 42954 bytes .../resource_packs/vanilla_1.21.130.mcpack | Bin 677 -> 3071 bytes .../resource_packs/vanilla_1.21.30.mcpack | Bin 676 -> 2642 bytes .../resource_packs/vanilla_1.21.40.mcpack | Bin 676 -> 31567 bytes .../resource_packs/vanilla_1.21.50.mcpack | Bin 676 -> 2285 bytes .../resource_packs/vanilla_1.21.60.mcpack | Bin 676 -> 2217 bytes .../resource_packs/vanilla_1.21.70.mcpack | Bin 676 -> 5379 bytes .../resource_packs/vanilla_1.21.80.mcpack | Bin 676 -> 1317 bytes .../resource_packs/vanilla_1.21.90.mcpack | Bin 689 -> 63851 bytes .../resource_packs/vanilla_1.26.10.mcpack | Bin 676 -> 19427 bytes .../resource_packs/vanilla_1.26.30.mcpack | Bin 676 -> 2606 bytes .../resource_packs/vanilla_1.26.50.mcpack | Bin 676 -> 2292 bytes .../resourcepack/VanillaResourcePackTest.java | 38 ++++++++++++++++++ 38 files changed, 38 insertions(+) create mode 100644 src/test/java/net/raphimc/viabedrock/api/resourcepack/VanillaResourcePackTest.java diff --git a/src/main/resources/assets/viabedrock/resource_packs/chemistry.mcpack b/src/main/resources/assets/viabedrock/resource_packs/chemistry.mcpack index 25865ecb3757a642284c3b6b20a61c16aae4a7e9..77fb599972dfc841ad25891d9bdcbb0d3134d1a7 100644 GIT binary patch delta 429 zcmbO(^HYAqUmjg%7A^(|P=wMDN|-^Ap(r&kCABC%IX|zYC_g7BwP{VuRZD!6e{+E2Cp`icF zrg>>Lo@qvZcRky4+~9(QxS9Ab`AeFcs`Dh(+x31wYw!v`_#(OclGnpsPZz)U(zFlo zX6Gp1lO<3CbkP=u%|Cg#7$?{BN+}C7a3ZEj|zr0C4(=jQ{`u delta 33 jcmewj5-Cb diff --git a/src/main/resources/assets/viabedrock/resource_packs/editor.mcpack b/src/main/resources/assets/viabedrock/resource_packs/editor.mcpack index 7199d4b5f396e461cef133268219b35ccf64adbf..a7006e428e32662352e994e324d9eeede167b08e 100644 GIT binary patch delta 376 zcmbREmFe6MrVZsgCo3~ahzc_ZG8CoerKA?cC+Fvt6y@jSq!vwfX40)!!X{I!pPN_^ zpPN{eom!-qRh*v}8p6xK&VU45doOYwGT?Fjui9_awC`kHYL8Hi+Tm>zXLJVrdY|U8 zeS38=pE+yVMHjJqYu39OeJMDoJ#QiNQ=5%#vr~dQFIs+K?dz&%6t=Z-R;t~Q_vhTC z8(&^K>pnVSy!K+vW&4eKBDGl>1w|`k%U1TuO4R3s-di)R-0oUbeSkMR$KIs|;^jcM zY@2MjOL%hY&L5M1?vzp%X5d6}U+GQ;EFRX}B^?jf4OFd!qGvlcJy?Q*6%rHy-mGjO Q8`*$xB_jhv|1J;@0AWRetpET3 delta 35 mcmX^2gK6SdrVZsgH&5Kf#wfzd#sCB?K*+|(z)-pq!~+1`<_MAi diff --git a/src/main/resources/assets/viabedrock/resource_packs/experimental_y_2026_drop_4.mcpack b/src/main/resources/assets/viabedrock/resource_packs/experimental_y_2026_drop_4.mcpack index b9ccd255bd5541a35d36eb6bfeccbdf12e7cee04..2300de982301b9267feb3fbc36e850d4a7a87b72 100644 GIT binary patch delta 2528 zcmb7`c{r5o8^>puX^{MA?B!?dS;7ceO2e^KBgZaVlV%1}%xGpTM=_S-6pER#Or*gi zKaN32mN*f|K{X`XQOVM=C0i$Ek~4IjE3V^@e(!s|&-FgnbKm#-KKJK&?(fqk%!ZZ! zB1lsakQIgiBmn1dgkUV~2Z4hW<$ro4JscW~Li>ebNxJAD92QSTZCdG`ClT;&u6qCw zz?Li2c@TdECb=fVHG>b4Z}r|$67^YD4+7>`WPQ1mc3uh+^?10lB8PE&#wcl7*n(-q z((qmSGFUZkYbZaG`}+Xt>RII|=1T;H%McP8E=cm!he`_DTpOWX_E3U!3_=A~YbEg2 zmFf%4`2#0<#OS7wu0t)As|K|pU7YUF#70jLg(yPH49fGy$`sVhjYY3V(ygSc_uxVQ zv6;5ljTr(?9g|tbp-i*Ia)k|BG~ddXBuFkB*u2$m>yMd!IQz#dCNSrpK6&U7K*===RLvcN~Hh4%Etk6ZTX0x9k zuPE`s72k_F@`<>bHzgU^x5nD5X}VfUoZ^8Ukr1KC{zAq5Kmg#7AWczVKLpIrvp*qV zGv|t5-?wBO#UDbEuw*h0AFy-6Z#%!o$Lot;&Yab=0`@sfxD{%hgbHSybXGg#;l40O zI`F=z_mo!}Y-Mb2b|9d8g>%8#PDtVrwEDo}{r1Don0z~k`eed%TaA_gMWW95I#)-> z8aj`Fj_PpYRD#3>#y&U&BIKg39B8vYoy@u&d!<{p2M(u+sh(%Z3}WId^L2?oRV2UR zJ>fYwu-&s2`lU>Oadr1K<;Cnx>uJw40;fj^(Tt{}&&#HO^*-fg6HT3jc~C}+WK~iY z+Z`TVcP5d%w(gczI;u%&y(nL0hR{FKYVFFVb}l|i3D1C7{EuxwnDXFkaB1yzuVCpDwu=X1@s@egEqo{UT$4Hgx`F)$UR0L??y^IDL=>8UCld)lL0IA@G{c=nNP7N60*QPMN5<;@%Z;=%Nt+Z) zk$8lt%?Bzrjp?n&aSNZj-d^R8Ih%t>zH89+YM;~W-1_I=kh`86m@8PQB1b?64F`HX zPX7S5!l}x=&T%!d6=Xi0FN*+7UX_Ug-;K)sIly_)o_tK@#`r7wm-N4`sXh!W3`oef zytzcQyjzBtDkZ_<+o~c7ooOTTyXMS<8&{y0lp{~^K7WsyEo8vmq2a#&)LtU9zof)KP zxJ0lmjTMNn4_(7u_XiELZ(Z{vn=bnQdAq#EUD!X`ApB6hxB-%F-G_b=Vfvei+}VUN zhTe+y!Lik~BTUZ$nhObQp@;H(Z~nRbODZq^MT5#i%Ptk2dy7C4!bQ2)akQBSlkid+ z7yz+Vmg-Bh+j||7{?h4CKh4niz4|-D3 zAcEW5VLu^>cSXO9Cs7xR!(?r8MEveV80R*(Pa&LBa(1P&PFBYU&kw7nKsefNE$8g0 zagjf_s)6JtM9iLgl!v+A>_m|bCjyy6Cl0%J@|s*51&l7wy6K;5?x=|AyYB7zY3&Jp z@`9wr^y?>t6z$lVC27%8ht{&Q&wQCY5W?_I~` zGwl0A;VXV?N}nM2PS|ar&2U*om~vc&jOY*NEsk4jgZ5?r8j6Xo357DaUHM1D$Dhd} z$?Y&rF-Z_*SWM-#_!zGsNl<7pPJ*TEVJkCkCQ_w_Bqq=IQ9Bh9#Nl>WH58rhQO&l# z;i5DPect9GYpQU(IPC>T?SDP59~(#DsfiE{YG_ZA!U>U&D$<$a7`pbPA?opv(@|YY zcQ?Htb{biCv8G`i`G*HH;pQU|TYFbiX^t0srqTUQ*50U;W;_+~v+af~SWS{n5 zkd_p9n~yITuqk2u$R^*)CIFzg%_{Ay)t0zh#cd<33Ur$Tf`731SM8+nKjOT#P8n|V ziQCENJBl&wEJ)6C>jp937M3Wq!>^F^zPA!?L=XMO2mmnI79At9WAyLbiQumXFh?YK R*9LD<{@u!l=pwq&`x}Qe1+@SG delta 33 jcmZ3daEx=q8s^QRJZy|2tZWQGzygG9j0_B`m_a-Meia1s diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla.mcpack index 67d9a53c7ec9f8f5f25b543f925dcc164e62c8aa..d2f4eb7a2e79b4bfefe056ffa731df2886e6609d 100644 GIT binary patch delta 63808 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 z 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 delta 42 tcmaEOS>Waco`x327N#xC_UhYtelxQ%imon`2!8+o diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.14.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.14.mcpack index c058684efe1215fa9bd21c06f9b3408f2c90e6d1..673ba971aa4891dbeb86df5211dcfae93e96739c 100644 GIT binary patch delta 498 zcmZ3?x|wqWFOvf^3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ|T{rAeu&dYC5YWfkY=VVDxz@5t9=AmFWv@CURHk!G=^=A~ zH# YF6_ZPxt>XkkA;DS!4POp4l~Gd08z1)&Hw-a delta 30 kcmdnYxtMhWFVo~a=BCN>S=jiP7?>EE7#JA1nScZX0D1lehX4Qo diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.100.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.100.mcpack index dc2d7795e32e1f3c57b5ea50a9e55c91ebbca1bd..25fda0de2a5151cf6ac137282f5386ebcb3b604d 100644 GIT binary patch literal 25100 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 delta 33 icmeAAkD)B;sF4Gt_2JL diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.210.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.210.mcpack index e34eb70d465b98a8a8f90d9d8c376821e56001cf..ff992c486fed122d30f07026d43567e6467b6bc4 100644 GIT binary patch literal 2531 zcmWIWW@Zs#;Nak3U|>)LVgz7k5M=Q2bawR%b`1^TWnf3hFff?*ZOl7tAmChH&w89C z3r_=o%9dJ`rdc&yC-SMd6u4y#4htR0HQ~B? zmx6m=loc%d^**tv{#N+yb+4tKl`CuPU0SDit;q9ZM+C2(>;1Fe_6c$)o_>4q-uJ+j z@8_m&yYPoGz?+?;ajM|O6+p+|2jT#nzU2k_Ha9UZGcC2aL@%p2KM%vtbNe0hnhgY8 z-y3C1-(=%Cr@3jpz^ogOuW3o7C|)H%H{jZ_j;w)-goF+kG@3EfLQ-aaZfdbUM!4V(Q*~gNLUknCGlWM?4e!S@6C1CfXC(iqEZ82^VXPS7Tb85Zg5Sz?0e$wY75@K4ttFD zTue@DJ)ycYYkowF#bJiMJHJ0GY~~Y6{c`lE)sIetaBCs;mc-VEN8D$(#;$R2)O0f^AxED>sxrusl1*RH^z$a%pBx)I-(wV=){h9uIlXu0J=2^J1Ow=bE`WA?^n4 zuLBm}{(fcK#bvH1wr~4=oULcd`LzGcU-tr25<5rUxvSR~0K>~28g|(8ks2Zt$`gwU zQd39?1V^sJ3ZNwSS^*RYZav0_97dw24mGuqr8ijhv(efcIfxw zi89AG-?@LHN*@#uZJ#-oEdmCF58i-4N(@Pf#fdp3@hPb}C5gpE1Vbq>7!DcmIQ&fhZc(T^Kq?w?l9+>q%Rah+XU`0R!QZ`N(z9h=akGSm6s zT0KRs=ew#d9@$``uq_~Eee&YQfaRMwr|)}z(cs!ti!c)lHI7+jXYX#9{<}Nr)8eeE z^Cl8PCwFtozxbE+PCH`1-l})YA2s}C4z(&}v-xEME>`=0Y;W%d`j-{2e`OI7pOKoA zL!>uRV>_jp+cRv_M%#}6_avr%do)k%-Wh|8FXIuTX%7J~N(5;*r z$s7eA*Zw1di4g}E-tZ~T>=Qi^>NU?G{C|t$foqLVEs9q;l%3Q+ePm-Rr~XOPv^k5F zx%^fLP2=4BPeN1Um5_(7=#1yliOpLrHt)V_vg7ai?9C-HEjg=q+22~YyyU8t+11}n zpvdmmPTRE*=y?OM=NXwq7!Y|MxxQg%-~_5d2Jjk{6;h)Hc%$k@E{}OpbiV@{gH}T! znZd#@0S^-ctV9kCLDG%ve&kY39mNGs2;GFsa~!54mltX%rh72M-A1sS#9=sc z9@IcF+=m5jI1vR94&#xNJgVD6S>eVL%+|OJM@mw%C~kLUgBy-355di31*&CW-~hsI KU}QOg8*KnbgEzwf delta 30 kcmaDXyo7ZFAJb$P_NK|_IobG_7?>EE7#J9Mn1BQW0D)))(*OVf diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.16.mcpack index 382a8a1c841c47ecf2a5302bb0cc566594ec1fa1..155919b543e91421f3df8ed74c037899afda9adb 100644 GIT binary patch literal 5164 zcmb_gc{tQ-8=kU^Wkw`Rmh8JQjjddDESZdb&A!Z-k%=+Pj9ny$aI$MVrO=@q)JG^u z*&>x$AU3ywloIc^LfWT zY?rIoGSlyK9HuvP7go2<>i9I+?)I<5el?*|@h zrf8u6T0ANM=Yu7Y)ee&g0Y6~QNiztD)8I9p-sLCSa}+wft;dnW;$4uR0Hj>XmOp4g z*IBcuE8x~LVRO{azP*`PV>)9$)F%#4ArQo|tEsm!EkX9>>zrgMT&@s23LLy%~( zvM^&|*7I-G-)F#{YZKto_LokaO1)Hmf5L7k>=~{#=eko!KECpHXMfEr*{olaF4PY< z>JRpTMWT_X7l~))F0^{i+!^PLRm4bnJrTIxhcNv#C6PMu?EUze3zolAf+yPpRYlt- zGPe;XlvNHQ^osP}&CE9
^U7rsELFx!RueTqi6p|IP1%+%8XF~4# z7EyX5yulAFi+B%C>v`EFsUiFVA?ewU0%^}x7Rw&rCYO%Mf5QCUBS7GdcF5}-igc9N z77jP9U5-FE8yb#Q-PMY=q7s#LuSzHdAZLEfDw1D?9Eu_aVlf*>>_9~n*x?ADxzpoEuTD&l>VL>nsN;WZH}t|BH8g8fOT0E}k{%HJOw zzM)g@05C(0SLB`;Kdprr05w2CD?d85sdnN{l3;$|YO`DlD! zaSK%5r0H!r)S<@Yez&SDr-9CllUrdW&!tVDER}diri6OXW$)Soyqgrn_;r!RflspG zOGTBq?X~Wx7#Lr_-Yfkja#3vBG}b#4=_;kOI0xIo0&|~OUYL*kDi^!c#LLnF$O~)2 zra5RdiiGkfdt$KuWE5!wpdC&aaIr{1jHfgIkj$Z+Je_fcZ}VYxi<*q;$WlASr56kR zqUpa0*e~QibyjwI-gZPMP1N7|rmgRpu7pSS-QlMUy}N7ut#R(qB`q3p5K%N9RlE%6;Iu-b+<7E0tVZf;Hc%^llw+DEvlK%E@n+|=Uz zCi;wZjUNC?#0FrnL{D!*0GUVt>X!JAG!Di%0uhBq%F@zGW#JO_rPOT2EF-onNN!A4@$ z!7|x{Ptl=^*K`IkwPf%(96O_Zd{e1@ttuO2_`udX&9)K?HVYLkN+Mi|rAg4<`EH0+ z$9(vqXbUrUjDzyWUllJ1n}{5jDVjWp57`mt-*qmc$xPb5sJyrPR%mnBOJvRk*Jz;O zf;qOj#EtX5T~{LG01zWR!P$WFB){Esu%Ylx3+_`!hL4IfI@-{4+}YEfwWS z82Qd?X)iw{vZSC;b9+||MOeN(+S}M#;B!~Zc1&60^Yi=)m-c{91MW(1zP5^kTr3Bp z0G#Fj2J4?E{J&yVWC^nUhgi2Oq~fsrt>%TE64jG@V3Ed#k;vtEP4*9GBNMXB+M;*= zMse_(FEhqf=Jvg>ud#iwg?g^UkfQ_ZW8KBLnn`3L4p5s7gT-6d^Be<&L4a~e>X%m# zp`q3+9m3D)50cd^1#3{UKgZnQ;Igrrcom87_v0=YQb|~}e3w!z8GF*DSgxtg9{2io zpo7<;(wX!MjU(NX*8BdGaYG?v`?=Gq?J`~F*CJkA8c)0+i5%3>FttmngqFWe3G3?3 zOi70N79YP+X6sm$r}pF+0+6_UKB4(KvwE`oqZ zdZ8!~8K70w4LUb~eYWYm{~dFT^Yl71Y&b-o7Q&3J**Wt*k8|fDdUAWU za_65SeG3Q5hw4tG=cs9IM!%YNQi0N~o&v)BZFHlF z!3AR6`{{SUy&3dvR&lVWSxvit+7Up3ZU+XdtJj}&m_(67Yvsi0_WpS_I5VG06O&mX@YBT{Vh1s{ zgfx+8i-OkNz~~~$0dGuxG=S>sSwkjyXzhd!T^<7P>V`p{jTt8<*=QR&Jt{14Zy97; z&#*AbL)%R0^Vk5lmO-BN%mR}UOB&CLYj0RV1=1a1HT diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.17.0.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.17.0.mcpack index ea280114c6781f0980565eb3851dfa67aa346867..4bda5952c2dbdddd554ddb44fd7e25afee924550 100644 GIT binary patch literal 3464 zcmb7{c|2768^@<%jKPpBC3DLXx4DXuB}?|DG+DAWs*AbIjLDc`3}dX>mr#~;DQhC` zZI_B0;%1GKb?icAkfmLOIaX*cZcz{~FE0oL zk_PUt7ZfB6I$~yIVqs%qXA1{Gzdiwh)DmxzYfzhw=pm3gZnv?A7r9)~wH7AO$M{M9 zQJWm?x|zXaiszE5Mr4JSg}atwwDPneG-PhQ#)I5v7)OL*+a+}YMn~$1l-Rr2`{+D_ z5*{X#pgw!DREWedK=8w!etiAZE;T5YUgrP}JhoTyxlO`rU(bTYX)HCQ=UDIciR~}x zvb!H%30CZ+n$5;w;JPM*&F?FO`LRt?j|S$C7ENd3N}nxlvO+_7L(dDhUIi9E2;5fd z?iLR0)&ol>;&I+I#Z%rC@;7_VJZnG>M{PEl-sdjKJPjWeWgg=-pY(DU6SysHE#ft= z;hJ7LC$--^S3Xblu62m~W; z`I&6vzVupYE=jptouVRRdpSNW@$&8Z37ZkWE@DIG9gJ_D$K5~L2FnL_rNBjW!W*JP ztILH{my#71#!#kX^26!7HD|NQ(J9Vh4Z+j%lB;kMA^(|d1;E5?`Wp`4=dZk03J?Geo90k~n$eXfz_3z!|b#Vk=)YO2Fi!Tt#B*f>ci(Y{eAmp#{D! zLG*0wuIz>LWZW~NK5Yia;@+_wcSmZ3M_!*&^dJbRqO5DBbc@Un+z%^GjRyOM#>nxS zmmL((iE%&*9~N6Gl+TilQ%EOZBx7vbU!6X|qT6{*TPg8%mJ~20ytxB(ch98Ui)x!{ zou7AKwqhCBA?ypYi;AUNC1rp2saQqDT=}W{0)S`uvyM2U5&^bN#gSKc>_Q>as1yx#n9J8SX0SW4~H*oqH%mW%kbg7|QC@y5dr z#-o)1RmS2!rl-s6elWf<-%szF2)dG&qz=1B;*!6hb%j71&h*#yDGF8PuCdp;YpM_# z>~G&H)HVTfEbxoXK9tdSTL243o47oKVQgeZntjJ3H_sY6?5az3-gT^g0n;kN-S0v7 zw|Yn`iX@!a=4SOS_r!cKjnL;jw(mly?enzhlfrX`Q}*rkm~Mp>spT@z9x0wC=b!8M zgr76xhoKo@l|i{Pnh)+vB^o(8HH3CY5Co^%`V>yXm#FfP*7pbQP$H7YX$Mj+Uygxg zMYUWyg4(@xi>-@u>_}`>QVlIdu^7^L=^FQb<%l1KgPlawdOZ=L`UbD|P@Rb?S%)j6 zhLS(P-9)`D#Iy9W=bKrSu}Y_r<>Q@ix_U|tGiE4my%~AuOF@y0q;fsSdo?|A<@%6i zM4us|Np;5yu|ETM*izjazzfDH}nEA<77Te>Svlm&CG z3Jz91lvN3wODN#Y>z}iIoaKV`qmU>x(uVcoaaM=FT3;aQBia-hO@8rmbo8Zt+@I=c zHSYx5%1W5Q^v(At<^1mG`Mo$~74O2M zwh$HeZt=q#wT!ryZJKV57n3lf<1-+B_>|K{OSdPsIjTi2y_b5JsE&{$NpkSFCD`DE zd?ngdudQ+84YQw&USeqUNhNSNai6`6b6Zp6%!@z*?8)29hv>RtWF{6(f?@gsOBZ&) znM2JpTv>lGRH8(Y3TC;-#Zx!0^e6W_3k5a1;>F#JwFSnEwMw2FZ8}J&YP#mMcjb>6 zE#_2{G(`EAEVsg1?gTat>y-W#6_A`5)*?@{`0cl%M@iwt3=!fPlJz}^plMnDQ;Xx% z65NYXM~N5Z(=aD%)DE#@u&9E89chpKbfnB!^|swiPKDSvW)0pL02VYWmfVq z8$h!7*|Rt!QCbHH1xwp7jG(gyf?=P!Bid+tzl7pYW2UxCh76Y~vi%4&kLXV?)UP^U zP8^*0*v6YsIB+xTT-aY+sh-vZp9nB-^ma47<*Lz45kXwU@>Owzy91u`dlz@4>u&LK zIB4hMVp^B{e%~%R_3lQkCYgTOa~|5AnT02{C2ki`HC~Oka4(132tUHUJvc!07nRa8 zR6hA@fZ*JVvH_9;E@8G=7F#-0`b07$KlPK3Ur(5vEC6`y_^wR$b7n%M;XIsNad@l` zY2$3n6U_MlFOIw+b7#*MR;Rg;^{)JvOrBrBBfG^K`X!OXvVf4l=^W%7$(S|1)5*<=_KxZl{nnIrzb# zFLMZ6Ec@!&o3!+rSiLW?-=9a=@~*cgku`bMxj>v7K3gXC6|%d!@|sM3oHPAf<6ox^ zyBqFXQ>PHZamD}IG1e)>?lEd>3U%>tEVL1;U8ffN*;QIoiv|3jd^;N{5x(nT>r`Ps j9{bl+SpixxhbkL$g@39+04^Xv@O&UI;FE9qr2PK^JUWyq delta 32 gcmeB>Ud+0ImuWIHSCa@U8v_t90bvu6=4Jx%0AHp9-v9sr diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.18.0.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.18.0.mcpack index c1546522fe5d4f7925f2744a2dd36228204a4672..86cfa3ac0c095fc283d9bab892ab4c3df895d8d6 100644 GIT binary patch literal 21151 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 delta 33 icmbQglyNcZ241Gg2{uh4tZWQGzyyR%K$@Eg!~+0<)&&p% diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.18.10.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.18.10.mcpack index 23a0747e7d876ce9e4fd9523e2e1dbc26d0e0004..3a6129f075214433bd76d9b77a3cc4d3cf92b2f1 100644 GIT binary patch delta 518 zcmZ3&dV+HUACm(!3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ|#7rI|(fdGYD_IjOmNm{&jZ(~du|TXE@{ zn^rl}y>qRO-MgC??DFy5lhd4*p4_Y(gB|ZpSYIz%dE<~%&JmfQgfCK&&z>+(-nxg3Eo9XpEjv<`#oFp>2gBwnN^Y@2i#XkvhRJpvSPQ9MbF-e3#Kj8^1bt?TlSUx zl}ms5zdjM{i=FP&`NW_=*#Fl4B^M%A+-kG<-Z{1Q=&47>Jtx){JwLhhm_>5H&4fvj zn_`xqwDAqQoGiG1K{Zo=H#-M^kKVo=z_78N%*oVl&&b5ZfGcP@kwTD%i2++cPj+OI l^n;to$iQIAfUL_8yDq$8KDmKOjE{wZg~0-7Top6O4FHAjso4Mk delta 32 hcmX@XxrB8CAJgO-<|YwVHU=PI0>UOB&BFxZ0RV7r1cCqn diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.0.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.0.mcpack index ffdffdc09e952f0051a635c39e814bcf6835a415..77a1ab01e8ee0957e1564a6c8c5af36477b40c62 100644 GIT binary patch literal 37448 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 QWa+<9>DKr`s_9?<0qs52!~g&Q delta 33 icmX@HglRGB241GgU-FtnSlJkWfC&hjfHXG~hz9_fdoS#=xl%JE6T2!nb8p6xKj;wHk zRJ|c~r3E>Om8nH~n1<+O73b$+81#1PLBGQWJZ^gY2*TfEZYI=fGWMcn;j_bY*~@4N^-H*L~w z376A%b64*@rrq~eFe{_il}~4FbolCUk(f!Dx>8qSCPW&{_1RT_sdWCU{Z;o@-dptP zdp@K3RMF!bS?B1^QdMwFj!7xMo_&9V+T&}1&euh^3mn(#{awZTk+0DB9sBC+FIx?x zD_bh=vD*dQ{<1OBj@Ns;-Ma(1b*&;&8;`9`$(g@p%7ph0xl&<8Ibri0>sS9}`MB|W z{UHv=-OMrVU4|B#7Uz$DGMCkC?7p|B;CpGstj~*9ttt=jX6Lwe;N^y+j0_Bh9Fw`2 z+UyybxEOFHGft$`#KXjZEzwPOWRmnk7zs3%0a=$Hc3n8r-{b}+F+LUs76ucb3!7O$ G_5%Q|I4KSQ delta 32 hcmX@hy@YiGAJgPkmL?HaHU=PI0>UOB&BFxZ0RVD41d{*& diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.20.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.20.mcpack index 355d89c67f4319ae21fced98e3eafb7249ee8c33..630dc73819e0d895b1c3929b420624c352993d19 100644 GIT binary patch delta 924 zcmZ3&`h{l$ACn0)3l{?fC_-rn#m*qekd&F9n_8?N8p6xKjx0Grs$LBtos?Ldm{Ss; zlA2SJSge1S#AC|29 z5cK;f+Z*Yp2SRTB?djSW<-c*!A-jgjTRigG?C$z&EZez!)tZ~-ZTCKF3*Wo&XURk{yVnyJ41jsJIDJk2fr);`q_z* z0m#P)BzV^><9pOdDCX$1D5^X=Wub;v=$ zwLW#Gm#WS!PbqJ0YirI#!_A5t_~-as+3;q+wW8szvoouAm^b!5;l1v^WM4Om=pg@BofqLHWnNJ|ax>jlTIes&yD;nE#w{n=g3{+qxg+$( zWtYzU&{Ls|J^6AR>fCb7Uar@#t8Fn^HF?*$h4XfX%)XlNc;ioFHL-`?rw@s(n)8_* z6llMc_FtL>44KbB9N^8!B*GxVz`?-*B14y VlN*@C_}CcO7|sHd+C&zR_W{=b91#Ej delta 30 kcmeyuvxId6AJgQ?EKQRW*x2}(7?>EE7#J9Mn1BQW0D&b1w*UYD diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.50.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.50.mcpack index fca8539c97d44689d9f101d38c8b65de5cb6bcae..f2c643e404ef9a49b1af9fc9c28cc4ac57aebc19 100644 GIT binary patch literal 3514 zcma)92{e@Z8y?9zgBd%?PPWEalYK4jSeuNcWEo?N!AwYKNY?CYLS&4{Fupj@gn=I7oX7coa@jbtj=nv zDUGt$Wanlr1Zdr{+%U0a^nj3#uISk#F@#f41|&jy^NG$+5|81b(b5p3b+N`c+M#h* zpiVef%r7ygN2_51VPGwS|ma>g3U9 z=x~0;54M1^c0)sdwR~^}^b9+lnqZ*oOeP_HQQ)B_D@M-=$I3VDF#SwW0LrKI9CKgI zZi0MII{)JC6KM@DZ#SDqttmGCQfUjrJ8U9WpyQ=3C~(w-DD4L}&hBdP!uvPbIUZCd zM^I96ghF6;t&?LptUMq479zU+Qttl8Y%{`z3j<6-Oetw5E9l@8XkX{}M$=jm@Lpo9 z$uppDQmucuKua|>+Nm{O*DLvx#5S7|j)N|C+0Ob&G*<3-=SpYI?JpA?o+f$Lku7&h zm&2ZnWZ!DB!kk*;f;+XRPrQA)z**WLF#e4BN zvrJ6LwLg+`aHC2bOs$)EbntULngj6iv7&)X*BlL&i^9c7 zr$d}zmvsjcX6n2^W{tm@X_gr!Y8XT)P5Q2Vys8U-T0(}qLQ#Rt<@d5>z=tx>Lx5=7 zB)i-zLk^MGu)}fFlAHkdoKa4di=$(`)Yf-%1diyEbgjg$cBn<*rV4v$+j<2|o29W| zo!bpuoI5E1o1#F%5knGRSs)(}HwqYEo{Xo^G_L z%bpVB`r%7(FiylQC1i1m+~x8E)m<`jMS`o7cjIEG)$3_vJ*l=rf8QykqBUf}@up2} z8BlvJx%tk}-~!zdW%4kJPMeiLy|lt%)cnh=9n0sqhn35j!+HMk?X$xYWN9utJltwo zmhU5N1+TzU9B=$-dUT@WAHGV|>&Ce&uG?j+pYBbs6I!1yZdMj z(y^l)9Ota}F5~FtG|qDbA8v}0S@#5c&%xvw2JBazo#nYwCysskfN^$x(Fbib-*tMa z9tW&;Kl2oXY@ir`;^{z{R;e^=J3rVmX)OvX`oH&P$_3X{ z7-LHv^-PA2$P4WPN8>Wg!llhpB^Ottpfoo?0XYJdY3EYA8`UYWPLB=LFSr_dV|Df0 zZB!TGMOWZF4g#5ns%9s&%)a0lPp&|j=lYM3zU}fBBeMtXcD4mpVaBQg(yi#C!{9dI z>Qhz9DS^v~*xybO5YtCrNw(KCQY%$$3(RpC8i#|#qyU@&jPSI^t#^IbGsAG_Xw;~h z)cPsbKzev)FA)UJ1C>I*f)-5J9N0^@ROwgGx=HDaxzopnJ`aWKaLrhw-zGSM+b=^h zlAnRxWJ$DHRwVE6=c@~7Vsv>~<&z{h*-T7cT3IP7vn!09;b*&@m}&{KB0273GsV&^ z^%|A$er;^YvEFZzMrVoU%u6cT-!!OoW!%C$qZarUSM)y_jm6}yDDv|H#94fw8$_~0 zDQl^u$i3~8ZX7E}PVH53_}J{0V3gHqk8)PXGGZ!pGTyl=(*k@Vd|~c2vMTC{u9}VV z=?YXz;th61lyq&5`{P;v)$&=sB2a`>Q;7;Y11W=I8Q%)cMo_mLi&hNlMnj_Xk+Lt+ zr6P$kHogHyaF51lW$7(Z?rdD6TY28LA@g+%QuH#*ghkqj`QRcr~Tw;%OZ zs}JyfdA(SAsb0@R?2f8aWVbkBwO_W9dbFa|xP4=30as!_jBhOFbxfTz?pP%Koa2=u znce6UXkk|(^dMCbmaK^lP`MzQR^+N5LCRW*R&lypvtDfZ8629dl7xYnT?X75h%3hX ze(<_@Ch2M3us&=K{cg{nyMFSuhYxuJVtVJ+uCL&ou$J)rFyHCDwnF=n2^@Qijzh%9 z&&!@ce7u7>foxkzrqYj%aWFcbHyk%(xb3w|WuQXi0a&vNg_ye}@d`qm%nma(yiG%+ zHT^WDyfTQ6;KlrC+T&cG*$Tz&7vVROqx{~c`nVKa5Zs$}@yH9EtRNwkb;F_viT|OOgmK%r5K;gjga7-KBssze_-iTeSDF+6sy~#}|8IY4X|mt7 z^xwbUuf%A6`g(gB9F9OZ#KlFFnM6@<#t)OaH9o4nf(! zb0mI3c|hd&S6wLnZ=&W9oc+@p`V$T_`GGk9xX%s&*UOB&BFxZ0RU^n1W*6~ diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.60.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.60.mcpack index d2508f28b82627a8a6de26439c6b24a16e720431..f0eb957b6ab63107322f79e0dd223c54ec06f6cd 100644 GIT binary patch delta 493 zcmZ3&x{h-LACm(!3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ|T{rDdrVdYC5YWfkY=VVDx?cbco&K;X}GTQSbJYb#!_Tz;=gnA7pPL>2ZogUi<_u5oQa=kjg|DZiPCPvJ?hTiuz^rUOB&BFxZ0RU@e1XTb4 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.80.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.19.80.mcpack index 386b09a043d63f79fec8b694c2fd1a959b712308..e5d740c7739ac97b64e91aa80b1d351323032b47 100644 GIT binary patch delta 582 zcmZ3&+QGGfkI8|Vg^K|K6rnVP5@rx&C`!#sNiB*`&d)0;%FoG3Eh^Rz4dG>AM^-pN zs$L(v(&WT~R6R^1^s91=~T;iF2VDH&yU2`;eE*z-$-2XyKD?!F8etY?Mdftl33#W*lK$jmk3Z!6o> z1NY=lU9_Vh&fK$ zTdPCQXYCJf55IfWYxA|m%Tn}?XwKGXZg;$!_sU*eb&B=P!-XGhbN2Q=OOlnE$Di>b4j*9Ut%te$dy*Mp^--tf+fy1r>H?`__UOB&BFxZ0RV3u1c?9u diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.20.0.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.20.0.mcpack index c07c8d9c581215ee4e9c17968b906d134ce788d5..2e3a62f02fe72d9048d0477fd759dcb3361a42af 100644 GIT binary patch literal 6312 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 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.20.20.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.20.20.mcpack index 36640f74e2e521e5e844a6e0b5b2ebfa7644d5fe..6627730bbddb4cf27c253b2c53eaecff0b53dc1a 100644 GIT binary patch delta 719 zcmZ3&+Rwd#kI8|Vg^K|K6rnVP5@rx&C`!#sNiB*`&d)0;%FoG3Eh^Rz4dG>AM^-pN zs@@j6(yIL2q|DU#vdo;E#B`uBWk!0K2I^%M=jUMb6bS5>8&wa!9Q zM=6i!6kfMidF-X?OSW?tsm{H$m8*h7_wk9K_m_W5`TM`#ues?#_MP5Y4U&D&1D_pg zu9Cc{a$Tvu=;8{)1#`tW7N_^iC_PwQI`tsOhYO9x0?K{Ae%x-(T~yBy+c?QnU641p zv(Dz2ljrLiUFMSl#c7;56O$c&+n%zGy_479+t6*(yzqv;QSUj)l<$RUj4~^dGNxT| z3R~OFAs~8$+pGV=gwuPjCd&JJrPMW4{&wbe5?G?XPJ9P{(31c?&y60-o!7gocZmLb zz5Tpc>%zSfX7=mmg>U~CotyUJ(Sm6AW5;g#ebp(LTlze;E#z;}wYQctq4KqV=dbnz+lUO dtjiC(E}|060%G2_f7u8A9Wg$4er zWm}v5`@-~(M{brsznnXPOMdST;i9FJ4jwY``)nb}%q*jsoG|~$vQ0a>lmrYAa$mx8 zdx=xwneX)5e|+royu8t9!riMEPNs&2dz2hok)1eSduxl|SKCyzo&V;?g_!(({pjBB zBJH9JMzb!yUf8=xOx&yQ)@}WLi_chn6n!rJ`0Sgve;ES2**Us+Jxb35!)N+rPNsH4 zMkX!>Tmj076pB1d43OZR?8qc(4L5_4fkBA@S)Bt+9j=g`+`uHp$HKtEAP&@9zznhi E08opXYybcN delta 32 hcmbQsxrB8CAJgO_<|YwVHU=PI0>UOB&BFxZ0RUAM^-pN zs@@d4((?SAwD`oL-25UvOoQ~Yiu3a@49gAJz3z|!&tK6ef}w&r;jse3!qU;9t~-0V z1wD0UimX`m&pMBrRncs|dr{3DM_(DAOW{wt>lbrauDLot%8{+-qSEWGq@+)AB`2&a zoJ}RK^wzB9Wq;&oerB2MT+a6^6J?&iJ+P|Fw^S_VK;k7ewzYjCflB)`{kO~KIJ}to!gW8 z{!_7Aaxdy>n01H$;`nSnC)v(h{4=}oHNU)a{r247>;c~F9Q)KX=AHqDR|_Kp12Cxc zaR(Lgfi&6H|FD5T+kdYT;RPp}cvBsHd~)tCT4i*0Yj45Z2Qg8rwEoMgr^oE5*gXIH z)ThVg!*5vDU)f^0@O^ZB`obpluWRHMvh;6r+<()``<|q5(Ta5iv$gbAY&PDldGX%s z({~jAEIatvrf%+vtb*n2&H-09JPIhi_2Aj`>71|sHJBZ?@3~i(_TyWF?afA`iSkvu zQY!NATAsFcZ}HVrykBihH-uisW(A9=%Q>bgmrRxUXi%$B36X{}eEVG{G< zg}UW!L*Kk5{W}6?FEkOJaFoR-u4(hMh8)$zDU&R$IL~+)$Mh$2R+qRhdAaFFlDQMcRE*rLCi{7e7dRLe0 zny$1vJMC@#e9t4_C!hbp42p^O>$90S41v*bff*bXCfK6_m|zoAGIMhBiH?t{eTIC% zMC*FK$vwn%LlL8znOV!CDLal%x~*`1twZR$zUY9P0y%#FexH|H=yi$ZE3=pT%2wI> zoV#U@%>o({qyzt`Zq@3%$#A3hL**{<2ThzxhRZeA8Je#6WN`7H?XHf{7m>c1vja3X z%=A-U!)vvtUQA;?cfg)(eT%??nzP<{A9XuqePpK|S<-(qbeYB57~X?9s*7J+fB8K3 z;&=1=OFDRVN;ooq^jAn;`p+x(OV3w--i5z@rAww-{T7aRTK#xVaUByVeE1d~oOlqJ zQa4ZLWNNo(Wa47LRWNWO<$oR~25iN|WJe~+VC1xK%7CoP54$eHB?ib`UrLs delta 32 gcmZn=T*A76k7;r;TaySY8v_t90bvu6=3xTy0A^DJEC2ui diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.0.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.0.mcpack index 3f31dd90b6002a5f0997d518a62094436e19912d..5b41b29816bdec87bbac010943800e97e37ae258 100644 GIT binary patch literal 5647 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 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.10.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.10.mcpack index a83e09891cba06a4e365ac3ec4d2ddb550c01e4c..49f3674c8a178a6ab0858aa423197b9f150a7f40 100644 GIT binary patch delta 1826 zcmZ3&x=~~UACm(!3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ|E?rRAA;b2yafk0cl>$4@%(k0xs9JjOm_kP`` zqjDolsP-jam%n&?Y{r! zLe=QI9cTI?``*|3Y`znWqXy} ze(x5i^OH*{?K?BtQPO3Eb8sEwa}=k zcx6}2wbZi*18=iRF8sWv`eloo`-y<5uPS4&%LjO~bFlAQTkr!IxOI#S48U+T#vZO2 z`9;O4@nyzD2kO$vhWWP*1X}-h6*x~2Ynosp%cbwiEi!Y{mb)y@7Bka3Ib657pIWK- zWB+#-tv(&~$Tf}v`^#(UYgGK1b7adUR>^L>e(n%gUbp^H-X{lAL<_eTnr$$4D~aI! zV5Ae|c+u)x$eVX=U->shWUkN7ExB=cmCOTityGVm|KE=McKUtFebIvn{2yZ5`}4Eb z+@JY#@|Lgb&z@bkZqt#dFHIHb@*TJbY5it z{@yJsE_zQ9s#90(TfIDtebQ#DMrpM--_p0J%IC;W+mrS^<@|z!XCDih2_>Ht`IKBV z;fH31y2tHf=MUR$K4oQnzWT}O-Z@;+zHWP0YKi~JPP*eF(tmS;_3_UMf;z#f863{q z;oG0gnrqwKYt1=h!KE9Ps}pK1o?MvlTBCl$7nM8y^II3`eoNaU^pmw?>leqIn;Tcl zsTJu+Nk3Vtdnz(|%F5ei8eh%UBvuMfw&Pp9d6C4{o*icAPcARj%AYgk)FJ8gW6jbI zaUc8&zm;bFRXLg&xZ~fPbaVMlp<+?C_ri)B&%ZsheBXiRm(Q^4f7ogLOXkT>eo#ut zkUm|=u?Cn7F0+7>f)(DRU>KhW%xYyuB%}z(Zb*u_n0QmqEoYnUl$dE^r{ZRL-=58x zCghv5anqH)Cppb0>)%Iws*+W&*PZesVaa>j-g#>Z)yw*%IG)O#%uYWVr1QkRQoqPC zLo{e-so4bMw$hDnj@%AWYhEK;IpudN%jzfp7MlNMdDM05b+4I~%#lqmj?86W%5(1{ z-~Om2%~$sMcyuP;>wI6hrzm&D{;Y2CoSSETr$zAYQ#m_3KI-RN`)TWIL2$XCL-ld(oVG zcuxL_y*G?A5`NpXiyoh0%=%@HR>2>UEs0BVpDs^~kIbAq_nGX^KMKna`7I8t51q>W zZ;}MR;88>AfX5k9I!%?USa_XQ{CxE+X7c9r4fRFpjKU#OQt4A8+s-(x{e64Yx)qye zT)7z&_&hO)eVy2f&vk2xpF9Vrjl!HqJGKIo#xs`5Tug2Dj7(e%xQcL2q>`G4i2+-I zKG~5;G6cEcF=Ig1<%eAt5oJ5b;6PA1h9zTT6oYp&V|5Op!VP3>QwQ0|3!9??M0o delta 32 hcmdlevV?U5AJb$`jwTUSHU=PI0>UOB&BFxZ0RUu<1PA~C diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.100.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.100.mcpack index c1ca6108ea67f6f3d25caf28582b4e885488a4a5..102fbd83033301f2edc8fa2da1c53f2d9cb8d93f 100644 GIT binary patch literal 3971 zcmb7H2{@E_93I4w`z9>o%CUweL{vyQCdV)#4F=;j!x&9U+1$wyp=`M#M~U1^A<3QG z$58Hbk(5vd``ImxjdpkD`JQ=Z=J~z<@BhBP|NDDCBYmoU93Wa+S`Y{X0j_T^Fo+cd z)78>8FwsVsGJ?S0{sDm$Bl9seax7W|KkE8@P7@V(sOV&jqz|UO8pqn61>F1)a2f5nTSj2F?kJ42 z1KJA@b@9StzT0zRlm;e1jzxPx-j$C?!|+P7Adls@zOf!D9(y4;yXVSbi$mF6nDPzm z28lp@>^^Jn2F#hxBrw4CoyN38^~nB6t~<}49%a)hf>{>ePpnzo{UsRnY?Kql;+bC6 zaH`H`z`r>(>rTJRj7krakGG4O@=5)-6(9RfG!N4AGmKc!oNbOJNHT_@?X8 zsnYdW<%kjg6|^D42?#yKC1}EHrM4K^&5^PzEqO`Joe!bj2%jQ;M4He2tVwr-LraH? zY_Uc_rl6HSo%oZA0qhn#=joPaI{;?FDgI_>{}-9R?*&_DtUKCE_B&qo=2RHq^h=c& z0p;%DhQioG?cAKv7`*jgzwb_TM9iB=e>s+*A@p(&3zCx!x}yDCKFpKt^UV?$hLJbi z=0?|V&mk42?qXFtOHy)rd1~W)ZCq0Vk;@g$VKQ#V3n4ScwQwbvco@6oX`>P&;~Pmx zes&p;?uR+IeUq7$yK*&5G)gI)iwiT%YKAXS#yz4|JvH6lz^Y=(X5eCwWjGTYP4ee} zTBV9Y-0i?^W|h(gpHc;#&g5t{E;3ChHAm4I5`*(Is6B;GgHzjEyuu_wNdIj0;CFrv zPS!$Fe#s-k5lkYS$LiNNZoH*TE2&OwG%0A{I!Y_sUVpx}rdd9HwaRtH>``CWb*ALv zZt-jC^Bo?SBNrIYG(VgpmMt5?Coj!=ucyE3IPuGGpEGC5t+$jSapEM|0hOewe$>ZO zyKrvp?u|#`(f^Tq%yT)0prP6)+O#wr*|#o5H>4ZncabD?LyWo!*8S~qvBLAvg4R#` z$>~(+iaLqPMsNv@ULW?@%D@LEr4-_gr7T-XK5_Qiphw~oN3tYzTA`7VOuy?P&%lm; zs$nd4Z8Oy@WfeiRVUM4k&(VD#H|_Yip!oO{t@;6#dm(yt&9x7gEO7c_RYJi%(y^lH z?sFiL#PXEBCyd@eVAcrtRI6-&D>FRPt;W35e^p4GNi*%vG8Z$|5^u&b&+|=4n(x&t z(q;eauT^vK8>#|K^=kCt{WJtILyHuFr_O2?Q?Z*xKWjy9R-7+)sm-v0T^O&%*{HeHUFzq%jj^ph>f=0aW&_QC|J zDDcz=FpRPjZx*&4_r8+zs(XU+AWy?RTW8I*i<*2dz-1Jv2^wi;Fgu+XUY%3143JX+ zr)yvFb_t(MVSeXDIT74WZ1{NHMdU#5ew9cGi?eZ*@w(OCSD9Y%k;JIpziKgbOV><2 zx4=~x^7-@oWvdCzmZA2?2Z^~ac+b?%ek{vP#sx71e6R}%Ct5m6fbQq9N+-v*ioh$K zEL;laq4&c%1LSp+x=aRw>>A#9wr@sV#)_3KcrN>KI*oUMqjk#6e4ng5`8en>9<-2t zlJWE~odQBCmq*-CN)cNYdRsFdBM^*C8~sGRMZ2&I z$8y!hp}(X-M1PK=F*cv0={`uc}n0&AAsp=Zb9zx1q|bHt(K_UhRG1lm8%5$oxG- zIR z9+kCuXBWkko9<(W&&GHecR%R3Q~c62pV%eV`v9u!ZwAjs#^-|xSM`tV6H29PXdKb4 z&qGw6ZT++cOlUCeLpbrd4WM`x<&T{1;P>i%@wxw?BAke+5n>^6e|FL4&ley`BZ4Gy z660(`fBngM+;3r2-2H5^>_;lwC}M(uuY(<|P-c=BUdPk-?8V8jh{+t30*yywB${W; zUOv_z)#P?qfte_#7SHMFFb(10XJs4lOR<{sRqGpWA(^^Sw8jVfysV`GbFOJNn##Ho z^0Oab#a<|^V^QPl67yJOk*-cOgwNzzlVUoI59Wg9BO$L8l*3xvtiGhU1g$>i13Tp1xC z$4&FN%u1yu74*ZL-|?kiXh~2XE;>jl);odeuev4G%kYzo4E$3Wt6 zqUj&0O?_I2s~cf-I!+WgTzUJVYaF&je|_+;^fi(8f!_hpvi^&fyPsZmKua7NV~@sJ z+hH+y9M;VZjr(6`S!s6!CzOYWkF}!{3NYaB7ue&7M^!KZGceHl{)H2W6TQ%In424| zw&ZPFNzqzeRzx?Uem(W^vuE+E219R(J(hhHjfbMCe84L9QkL1A>CdJO8a_`W?Xiz| zgs>y)h%^l(453*5^ft>St!o=$(R>>28JVgh#4e@%rUf?|%~A7~=3&l9kPapU9muFi zPk04AMsdHtKNQw3I%}`&;-XVD-XxlgO-AlB;f;6Z$P&`ePf*}ixcOShGPV!8USUv} zC+9nGILuGRw^)$%*u|j;kMucHjFf20lectR$0_@Gr^ZVl)-?e#80k|`a)7=Ce)4b( z2GM;9e_ubg<3IJ^@&BLIVY==&=YV!Lh4@JT| z?m+Wf^|rn5HiP#7CLi`vJAg}oIrPs|`=f-l#{%SIO?<}!%GBEn{A+?B1K*2O>K)*@ zG@!3@lB|}TQgZhd+)+FFwRW4(U7U6gRB|6UxC1o>c=Y^ha(_eJ+sDb!_u4P}4s8Hh>YJ+ z{d9aj@u~0eI)8Yb*ZX>&_x0TO^<4LTE6X9H5Fub-U?3nM(7?XGKIjPe2=cNwq!d-9 z)YY&N(0~1cfWRA42x;WNyW#K{wH3v5t|kuINUlXu3ccBQ1#4FIrEu%|N*R?pWS3`Md+|)tXdSwn3=uhMy+( zb*ahj?OJ>+Q0J%miJd!{YYE`e-hD)6Idly7DEz(**ybl;U*$9378~}qRv?I(G1%@t zo4K7egxnDujF-#?%({T70>Ads+%ST;n}9VZoAc@ zKjzWtmk~E=z9=||mSPw zBKdr09UT;5)nIOa;>|FSH%>RxB12bzYupRrqcsZL>Mi{3*pE87+ zS;0uvGq#2v6KrT{28P_%`~Kta*?yqf4PzVN8oi=Tli`)N$#o}|%-p{zjBpTnw2Ixx zke*0D>hO@FwJV9Sl(~a_%5C;0W9-tXnu2OzV8McT@seTsEfmr@%65+hV-U5eG*z(? zi77#VC=#P*a6lg#lnX5GH~sAjkCqZ!SmPCEPG|Cz&C5hA>2?h&f`z&-9hONC)$kvh zkTR@Bp=Fw-G=G}WC@b48CSrDeGX&rfj1X39nOdW7rqYaRALzg^1JZ_xnHcjlqWU)p? zmSWmXw(9HggILIJYYWV4Yq@vN7lFgE3(5d@)FcR<$`i!VNj)b$GS#*tu_GGDFi~sr zz9dml2M!oGtYLAtQ!=v}+==K1;dp=Hxi`VKmT!e$jKu_$&4|(cP-mKFY8z9$r&OfK zTFsU%+gtEr^=m88Bnh+Z61NgeebzcCH}&#%;#oKDEKiwdfCru=kB4iLc1>fq<1XLr zEb6rqo;;>;yLEAP4i^7mNPkG90|;vM7c|Np>xa)8*L!JYgCrA$&zt zVk2V#MuM0`V@GtknJjx4L=Ac2^TnvP|-OHi)Cd3wI zsccK+85_CnsV74YwVCeV}p{rY*9$Za9^vwDwik(RaV?Qw>znWe9kI^&*9D%Aj(O_EAKUp;3*# z^icS?rUPrc%+T%+4ekh@PWlRCHsf4o8GZ#Qj9DA7(cj2L-?3cmldhFWDq||lnI!RW zz9aBYrnAJ&II0Z|jv|_3+Duqu3yDcIu{I*oTR<-K#`&Qaji>-EHQ;ukDs5u$w4xvne8~%Y#)cE#SPihIRiZI zIR){EOal)Ks?CbYR1FIILx2@T<3l)5W0lM~5oRdSTxHLWtt9?9m+->U(kRK7eL@Uw zR29d-Xiu3R(bzL{+cNN6_QF zq7~@S5R6LYLaJ&9zeyp~w-QV;s_wx3e^w>K1?E1F-)jU4c{1TMOIHPTb>KLb@-14- zUcy==N1h@$6O(;=CSNhS*DBe}c8oV{knT5M8@TGa5ab%vn_F9}`pY6)? zuit>!Hfgs9kwqPbHajLF`5}kVV|&rO8|pt;t)?OL>9TJD^o31m;pQ%gmo4ri9kcrJ zK*aeIjMeyaS-tuXR{u8hPr|ew=l%>hagrvjzwL6t<)B$((B@j--?zk1o7a5=_BLyUq#g5NVS#oLfA>f-PYmHqJi>WTfDr;clFOJ2;J7^_|z3RN|zF<`KkIn=~u?YvnwH~u~GwRsNsR$-*ZolEM! z6CY}34~G7c{~Gz}zxK$b64g@&#XPS9dSs0I5Hi(RU`iT|(mKDv_VG#+fUiJR3m8g> zii_+wQ!H@7)&p5!Gec`cWWm4JWLKh|2Ea`wAImha5#uiZpq&7UITW{E)A?#0cG>trc5g+c-}O&-1#k&J!?fW zz{F_9$7GmuH4815S@r3WY=5S28CbB0Yqpj6@#He1w0*m)e$qxf)kxfCOZO2}$9ja2 zss#HU)>h88T?&i;7Z0Wh>LXa%ccJEQxgZ}0D3rxWbKyVJ{_?K?{RIv!v@cA|7yp|Y8;9XIV}I$1D_8 z>m3ugxJfiQ3nS3?++h4?h8tR28vVsZBn$C6E`(J^O0|2ly{vEy)K|D7z0ji+io_r7 z=$nYIqOl*X*Gd5E(QKa$Fv?C(f!q$Amh&G?)}tQZ?0mRR#+zD?Y-~^(FZhI$gj8r~ z=oeR5#uy>5u-+hw!YRIUToLGfuL$}xziekoZu zyjmWuvol)rx^@V!E=E|FVb{?GJ= zW7N+2fu$V?Vx(seva|#{{y~O6Qq_fJIG`5GIXB5jg_k#4f=$4mz79hsJ#+N^t>L0b zKC9=Uuf+`Gv&jTBWi~x%2!#6r^BmV=^DLSrG@%(tfXur-z4VR@rC0Z|d&$(PUj)oD z%a}x>HH2dGsn3qww9y9Ek?j*qq9+bJ*~d_lzL%za7&#>>iI9G~NyTxxN?ds2(g#8U zAK}*mzKBG(n|(;D%2b_2D80p`Q=CXnf?MJw?%$ zqgQa@-cHoDTVkL(bB2nVM^n4BZI4kiHGL!7+c@1A_$TH>S|I=)9F90T7H9&Ii z0J1AR&oLJ=cYDnF)989(>01+;0pRtQSClXZ2YdwlYpq5NrC7u~UfI#9Z$A`lvy_AA zKJ`85`cdr4ZPYmYRk8b*!Tqb)y&{}FIOd8G+o1o%h|HqyQ$xq=q4FnQO~#H?FttTG zHd!x@O&0p6-TvoerS60%Ax6ZHR#)1Hig)!fQQjkkgsVT_)X;K!zXUT`#5P0WeHRP8 z@bef82pIe=IHEdO=Ti9v6ubiZAm3|Ubwle3QsaJfwb+5=)c!C@rwX3@?r%D}O%!wr z$V}?RSQKOq>bEX`{LoLeb#Ru_U4(`9`33K_UutU!HUSwr>ixCN z`o(EdnMe;u|2blXJvzn;H1`N)|sh+gA7t z5I)noj=+2ttQgpOmsmrVzbV`2M;~PK-aU##CjL_9{h{*co+%DInA7SannSG8RAl!q z3!r)?Yfbjk!CshNw0S6eS#SBuJhhoXm`VwMJ@Sm+Kv-+xn|bzjzJYb{$o+s2Lx;x4 zD+357Sw^D0b`BjoD+-P?^RFv%%X0j8M$sUc137b(&o~%LQMsjW?RD?<6@}bSctd)u z#DUMK?KWZLhMud$a5b+1$PQ$AU(X0^c^_o=2deQvweMIp_DQ$3r4;zBR9w+2^aooY3@eNC|;{04Ddiej)ATRTgk zRA0BGp_;o3Gixz*!W}Lz8Z42@JUo!R%FHwBfVBu^OVO&XV7Vbr)AH!=q7hK9BB-qU zl5`H;#n%gzOp>lIo~S0Wd1ZSWQhR+P8G_=>8XY7esEdY@ySNiDjcds~V@%&fG1#_( z>yO%H+_e{~TIZBxB)Er&tf4hqzwMs9Femon9Yb!o-wLuR^q^&q%$cCqRKG)!xMG_u zld3;^AF`X-4eB85j4IvfD4DXbGU<`bDsd5)dQOnD>_T-l(M!N@wLhK(vWuLOa3!;- zp_3-vvMo2RNUMAQ;CszWHtH>PT=Rm@t$E>`#UIjkj(<|7?Go7=4TcSWigw{=`XaAGKH5@Dp**Eve#)R=PIF(@ zCA19VEgE^U!G+8`OK~Bkc04HBHfvf}!zYxEu_@ivrv3@6mN$|XBl!xS%AO=T+v@2-5 zOq7<-!mQIfcV{-WNI9!Qr^O`)4l#tKOPE65zC4V`QN`AKs?I)Kxc1`fw~3aUFd4qK zbHlaSy5rL9>+wN{!KS;pLI|GC#wA|ngV5U@QB6)QM3Z46ny?T>T9g zx5+=n;`eQMLYNXm!4M-bRL{^Favy39^B2&+YRU8e9>LJs#s&szVr>bwV*B?Bzi-j! zs)$;{8kz^}WhuF#Q8|_gLJyWnXl8vpbtGDtRdrE?4 z_9>JfNDr>t$E*8PK!ORIFV^RkVjGjTA(o6?(F2tx2VFDIKRzPj9SvLN>r*^KV>rmRg-mwg}3E?*)1XCeiFV=?f8BPm*~~E zapdg|#)p!bpDgSm;^OFvNG$6w%k<%pvrW1eE%-jEX`m7(98E*=n<9I@8D6#<X6zyuW z-{wjWmu0uUA?B^_Be&Zcb;nfW@k7Kc9x5^I@NQ`nYxRkI5$-#s!4mOVQ~a z0AR9pG9QF{8h-!qLn_8oJCOYK^ncF@&p?Nt-O!#w?}O#r&%K>L_BsO@es*yhnGE#= z`TQ2y8OZQ$c!pDZhN8hEpFasX1022`eVT4W*sT92A^&|jpMehFo~1vvbq!c#{zU(; zGT{tt_$DRuDeM$jEW#h<|F{5r!|v*-1@^E`FYrGdD|`>@G&f4vC-6VFex}JhgB$qv z&gD~EkHa~^KC>rw1}J=o<1`=RxF?|BbLae0`V4sZg8ei+8~zFWA2dzQfQK()Pv>VX z!3q5Tv~lKMTV%z~K%1>0sF+IRXFM2!wa4 zr%B-_I|2Pe=MT5-JQ}M(%l`>4bt6>bcvKwQX-wwEg>LXqJVIIH$Hpo`|b0w zea>MF{sP9}zUEq2%sH>6EC&gN2?hrT2L=X427Leif(1hZlb02jR8*7HP)7oT{rwX# zFwVF)4!ta>;+_G}{ZLlh9odj(avv2XVf!o&5Vq6``1?=Rw3reSyEZ9Mexl9YzT_+7 zhjybY9N=jwoX|EP6#JCJh3GYtvPp_{5&2H8NVE}VVZoB?RIeGu&P$XK0e<{`cU&XI zFVeGL2i8}Mk!eaTcGttH^!nJ?C16o&sdgX#izfwbM~Oevtc&dFOKl_}$+gjM@6iy9 zhY!0~uT(0IbIqG4Zo!r1VBvyN(I(4*e|`=4R{p5ZO!sD!jqS;}Dk)&s=4CpGoo~PiZj&IHSG+6uuarwrXD9A`6l7&epZI&S?0x)gv_Qig*{AQXmCKw@cP{Wku4# zO>Lq!n3=p6Zp|EIy`i@K7AZFBx7g z8-n6AcLaOSB~JLqS-cr3on*r;hSRTq9-ePDVMbZeAqu{rJ)`k}z|34V+5I7mvF%Wm zGs4e|+3K(p5Jx0|xy9CNG}mu=(|a0pKE%&AHg)Rtja0dy&x(A!cm;lmON)MDSDi`B zJH*gIo=&fgN-Qu#4@b0VvN9E0Rm=R|vwQBVZdm~=yEq5oKD(-2D#F+yuJRX$F%p5F z(5>bq9`h|1w-6v4(~;#2XaEeKK|XfMX?`PO>SApV9CJepM;FkM|KGvzQ(JQAB}M#+ z^G#P$w#3FJ07k_LT@IW={B1<#y^zr!{*;+l6b}x`k`s>L8x0kIa9BzjrXt%o{ZB;C zol&ugtTg@Fcj3Dwy(H^NnLLe2t)xhzx0og5)e; z_^|rm7oQPhJ}r|A^Q||{F7({TxvL>R8Dd&~r-ff!8d<;8-y)c+l;5PhU~A1jF`AjA zj2ALatpSIc>}J8~9{NQV$=b>Lwq}XTe$Kt(qr}!#3ABRf%Mqc90@%bP@NuF$j3db< zq;KUTn(#Q+!PBl$X~85xg}N%w-XI+q!2h5TA^M7MuHs^3K7mxlb~E48CGy%qEd{Hk zmi05sN6(wl&9D(s!t)Oni?iERNNeL$H@eBY@(*v1m<#4aA-1(Yr$YJMM1A)|SS974pfr5K>gh`!GNInCtpj zVewLyUCJKZf;N=W`}YI0y47c5Y*(x7p_w|k->{2rMM+-f?nXl^@HxlfoI*57=HLr?R4tx3zuFu0HUBKAc5vI2z)LQIhT^)uw z6=RXSU|rQm|tM3&Cv?UJ1M@8VV7=M;;< zkLQ{nize@T-n!O+oyZs`gtZ*7stSKlx;6f>ehP$~Uv9(l5G-AxjimW)J6F)L;?86l z!B1Bc-A}E;s1P3|{9r0aHEWs^zNsMHL)KQc%Eqo5QJlNwj1N)dJ{<1XI>sSzK#=z# z9y{EWzk}@R=ICH=d=55Trh4rLSI}?X=Wj9}#x@6T8UaTvld|bqJK5GSg z${}j+IAp2xP<0Z)j@sqYSCe?}SMEb)X2fOSw<82RA_W9Jk>>kj?m^*-@Q{%5 zPFA=#S~wb7Wv!J;((cM}0$E@R?HPF!(tZ>k{Uy>c>eR?I5%#-q4_3HCB@IsRHjy4 z1zgML^4C21owal0s&JEU5Q$(I>}Z-ky-3ovGdg&6mrqGSCBVPW6-c%A{^ZIBI?yLc z5vR9ATFD+~?KFEkcALcYdA|<&nk~UQfeV+OqqGJ}0q^W%;SN>?ZVN_1F=%pJ40km3 zeeFx!WK7jhKlM-E@XZeH!q2j!EL|_tH4hCcqG7S|CY?tp28jAENFRps3U-2WO(>;L z2{V9=NhqPE{@*j4u($V#*a%3nrGa*O1-usedJy zZ~qAe_p^}c=}$2)TJ%U2ms@=XOYR z@5Ky@n@M*LF4(O9!i*#hh0D-g+A)3D(AH#9Go&0jgc zGUZh~C4d9nqd5FgYdwu!?EgirodoqpK;rMvR8gg4_R48I7GdIvED1zQP*9r=ASoQx zol22j^NB}#fhOn!sp9_%<%6bMQN@_TOpdKHdN>0;ir>Msgw?BdR07Nuat@g7!9GGA zsJ&uUrCp5m#A|Rz%BN6IYiSDSd71}tX9s#`&PgBAk@>Z*SBPE-`pq&^(OO~8fsZmR zmQs6?(ARUzpEISy_D}egF#{yEwCtaskm4gdNW}MXM8BXoa8NW(xmQ#zB;-P&ghk0Z zsN3wEL)OLoQr|Dpi)(lqu?>0lh2MKS>ASAa6RQK`yrPlPq|__fEZziN)`po~$7&zO zYrJ7$*7Wwse~PdDQ+P5XdDmsgnO;r%=7eUE*tZH5pt_J}gweo1X1Sd;MgqDJIV|Ev zphi{bQ6TcNT?`%CHbVwEf;F0J;nm-^&THoQ68PBv_WvcL}UW4 zB~RioSeu++Z1i`O;s_TdKYe}t?#n~Sb)x)3!DiqsJV=)%v8-4#Kiucinj$fe`of77 z5)gmy*M%kxao$R8Ibz|7*~9DPU**01y3{t7^<7}88|zaq(vqA`l}xglIo26T&tYFm zk9(&?Oaj{_wiVa&hDDQAE#5mpr=>=Hrq&QV^3HtbAhLx1hwF(r(kuFit{4_y98S^DA+|4)l=Yv zz`spH3X)jc1fuS}dzeQ|Y4jotcW^|JD>Y4zoLdLnPfv0bDgo|K-RwaY zJSXE#&m@hR_%V@9fyy2KbZb=0XDsQvzh<}jr_W)R6pm_j$!K2R_fY(EGf>~vU?G5; z6x9Y(R^@DB4xt5Qr9`r&!mn*8+O6SSI*Mp_cXquB7auewe?Su^4+twpxYa-lv)J+V!CODc$2J*>#9xMdKnOE;4GBPt=xE7?LayMz zt7*4NTmql#K6RHIuQ2Bq0m>4$#8CeXBKYo-L5p^yU3gc(ak=3mF{AU zd#$ATj!MdNvOr4ygYW$v&pt@Ck4|vJ>=79@Zj?A6DDOM3gMVdVgc|kdsBAPG_Xa&OCdi6e!3E%nU2cz|3Hl zOjCWdQed^UP8baPlLdy6=Py`rTfr8(WQHqO@qvYiVjP&up~TT2 z!*byqRU)4_xNb3*VHbw(SO|G1EXKj!wP;q*j+pmX_tW`rRBb--I-kjFp!6T3e`m+n zUWa$K0M)9Ksg-}Xn@^Ce>UaeSl;LU1f(83g3xqx5zKhQFX6rWf3z+OkJ;D4`pKD^! zF$S-Iv48>s{P=YC2Z8qwb7yX5Y5p%$KfpnRu03!N7dmE^-|S2e-V5 zD`!SdTOWnqZP}G|t*B{TK#HlHOdd@-uqpA5{Z#`m+Lr^HbVU`exGsT)_UVyi$Zrft zgGOYvoB4Vh+$jm|W`wk!i=zqg!`u7bKdVC+@NqtZ3#i9p@S;{KIMtVIe;pG?W8 zT0+z;p2RohMh)qCTB(cs_8-T24n#X1^V)9Q98i&p)E84QmX0E1Kj$r4Pr@?4{DE@U z!b;}ULX8daLEaB0Yi5?AIpK9ON&tdGcJr_#Gt1%fJD>(r{Hnna3>~s~(uHvNO32@jxO13P zqTl#HrLH`0hM;g4Q@U{OUXcxS;#c6c&sH$*JDOEMQ*uzN(EAPUae}Qj$9-3T16mUA zGC}x+>duu~EkJr$Dq_(szgncH^Y(cP{BXdAqL(+&iwcBw>9#te0)zAFCU&{zbN9Dl zjn@T;KqhPMt3teb~k(= zEdFL{PF?}ALSbuR9riI#v7wM7%gb^k8kEe)gl9S-j>zG-no%dwXgrA&0-sI!2sTak z5)K1t5})!4(paJE; z#hq_w`Y>S{=u*{1ui;1ueP}6OMWB9zNdLA>q3ydN?-6>fZOAn!COc+t z?M=oss@;9nlx4^>4D&4R?f1b|hPnANYg<*SqlRzT>$FCyi56<^b=O&*ob!Vx?IwG1 zcW)4LhIgh)gN)^;r3-ZIM?YatDRnvApW9_O%K@~}knURm5<&e3NRS0Aa_9g^j2?xA z_ctW}IUYFKxw{$y^MbkSzsORtN!>Ppnk8{B*#To(HX-i7c)=e^UULX7`?S$Tm*vOR zkd3NzB;;jZ9s9YI41aW9k(z8CDO(Z_>?G$+?cTSVdH4uoH+4TgtLXJ)0dii{2pwD_ zBGzK`Oz5m?lXz5iBZY3ysCAJzE5>0XnlvvkhLsd`2#PWO!a?XW-Z2EL(Qh0wSP(8By`HruTN!*pGqzR>7Dic{?D}`p42N@`E z4GPoP)P63}K~}-L=q0*u(F7kLkFRH&Bf^eg72M$NCy400Zmw;h78>Jn>T~n#JqFnud2BeMc0LQ1@K14s_C0GRP5!NjiWf8z`FB9rzykwlf6pF^`V|b zkmf2*$V-edsD#&t8d14}8EP(|^0CWc8Nw%W_kWoo*<{V59lb6R4MoC0@-pPcHHamcH9SC6wmSXE{m<%xDe0mYRtX0?03R@2L3d9 zS?*}We7`DLHm|&rk}vqH7}Z%?3&}3_iY{N;4x4^zi_gL2Nkj`($t@x{@-cqW>lbcy z#w;ne7TtJd@^YHBAj78!`{Y(KXzmH zyP8zb&K5^nKeQ~HJ^0#j>aBbx%5KGB55G@?o(az6titxYtHo&1qTn|u0+CT6Gjl1@ zj?xrr$lBz>&%`W)z8oR#DZ@e9CETvw5H93p)*Fa#3GYJc^zzNB+pBTfk2=UF zi+&dEQ;Z3vKI7MktZ+ka;2w1R&xnJ(jm8NuH2H0lSQ!#WOYFu$ zY?PGQwQ7q9lWOEjBdo*)ta?T}M3CG^rsDYKyB?78qq4LPbD`asyAW0v{Y;%DHu0Wc zHWWRN|9mxs@)ODTxkcxwum(F8K!@=BX8mJpyXx33jq0?+BY3#9_r;~4p;BFPqSueT z_`4=1I%`1+IB?UV_Yl9t9!t9L&cj)am0~IWd8-=!am($@_lBTA=Vv(T!2*Fkd$iAD z{LiER-!=YUaO24#%eJ*B2&shCzcOZ zHDm-PWCPTBZZ&y?L4Oo^9(KNLN@KLwmqSQ|AJMu)uv*5^7lN4S_5!e1@oyCwef!{& zwMY{X%2tA3?A^qVkI$)==TPI;C9P5gPLLF)AQFqsW3<0@)Mu6hm)PuiAsXM8XVIKo zu5@M~MV_*?oK_Y@xlkBA!>(uQDEXXQVeG18;w7q>*cui<^SQIT5;XQ0{kBbRTZ13w+ zVX`6R`Ucix8QR7b1*pBa0cdpJD35C%8wb;=>*?+YgFH*lGeKTbor-X=NWbYh zN|CkTzfGH|-S<+JT-CV4qjN4M9ur*Myel=iy;*6k%*J&KRQNbwFYKOo`b)fXC>)qW0>b_{1xWixesXuUa&dID zH?(&B%l69ePbYwjbXkbUO)jS^D8Eh_1a}l_%iZBBXM z`z(wIR{Xzc+V<9j8jCm?X;fy=z_v6rCU@W;p-$MJ-R|N80>za;zn}iPONajsDO9ij z?u7BIU?k+{@0Q!bqC-1WdkALxBFXmLg8hpTm54)a-ZpI~1`Ygo6LsIO;&_$(^E<%s z32<*nldWCPzNBf6oLjl;#(kH%YL~6CUf?_-7MJ&f=(Bl>ogLp+)!G@&99Ij(imY5WIrPv%Rv?mCHMRB}E!?RR4QRdFbzJ{cGfbFyr2(804Dr%qN>`65`?#lZaCYde%T z-ecMR`zU%S(bG6lHslokLyKv-o6~Q1KXeIn*qE-tA=Fzic=6OTyNw8UJJG$WKT~B^ zc0uVjZRU?7lhZrr7OEia;RU?&6)|v^?$^P{pCd+upd@fFl5FHRc72K!<&Nc8;FrE};7Sx2&pYJZSj7NAR(a;aZ7)+i~HD z`Xod#7!lkKFlG29*4Q@f_L;5vtWmH4E;3lOA4I+)_0{GI?hch-^cpY-CW0@3td9>x z@B_&jY*tZTG=Ug!3Pct@qql*|2eYM*(IoH=+!=#w3=&k5pIRTF_Q?pT(o*XWb0uxB zWAg;)rxS+M^{P!W6V>Lf|FV#+&TXH$cKADnkRxO2p%8OzWALM{7CmXiRRHV)DQ#-o z7OP%`6CV6`Z#2v2Gu{%xvuL(qF^CkA<5<6d>&2kB0q!O49$v zcmxpH688^!52nV@8{uHCIuA{@>ZWzg%G3a6YFSglY=C!q4#i#p;+@t&yi+iJrKFnkKGi8JORsu0}lv3?W4i}qssm#zX9T3|0)4Zf~qW_N56N7acE_}Lo_y?kPT!Fw8v<;Hz>B% z*SqL5JL=d$&j_rfM!ci_(;aLsSj0xqdBftxr7$XHyNR-2f029F{h6A4cw0;uyg`Nng zr6lhhxQfbiwoT-(l_Y0QRnr^i+S0t=244Z+q?vOLlFyiANQwV)vwyymMexZvBTFE% zarUg6(xZ6Ki;XsR6X1nl-7*;YdSy*5W9@`ugML1AncvJiHj~@}*7L8PP_Q`*nHKxQ z9e+1z0ZMR*+(6`U69iKva)9=V>T-K#qkLo}&}I6hCCx57|LQXB>upkhWSFuFm;yvM z2JE5HE7s-%rCe#>JHYe~3pWI>_X3o5C>}lgEWgjbtFec%gTrsK`(F&gNuwYf{zLO= zdNWstewS#U^q~1Dn~1%`eb9UaSrOwk;t4$C#=sw*-fx#-9$1+f z`14IN6C@|iazle;H!5ZOW}Bw43n|I_x9dQ+uYLhRQ0?CTTky}?%Jl@{aQ`S9@kh7+ zkc0lE?DMDHVp=XP^_tKM($d(U%0F4 zyB=g6%~yuFY)!IU?3q!EmCICYSO9_u#{YdR+@^ z9vt0m*;M^rVKG8fJO&PNHRYxIS$JEm$9(oW1pJRk8ulwA|Q( zTCV_=z658Lx=fqSKy}8#^DTmXAvpolpEO5$Lo{U3+k;TEQ?J5EgXz{b9jv%?&J$!E zn(!P`tpMds^xjAf&Uwv{YtHvqA@H?F`UH}FSRcI%e-wiM=Cc3Ap!@v_ENR`f^&;|X(>Nb{ciJh?=9|A!&p+C;)RrO@~mD(1)gMxHs zQxb2fmpq$}Py&rs+WTh?RxSiZBznW|ikB}eApCQy8t8YGXgy|vzcFO5D`doQ@ zz9f{m1A;s2pc~A41_C*(f;NTl@%MH~5_uMTg>B(iP&%$@9ki~lNo;HOuMg8139dz6 zS$(pc`5<^|F+o1YeOHn#tpcZw4MU;gbBj<#dWXuq_Q zs>ZUe9y*FZ?Xp|J3xo+*LCS__-+w-=Jsf`4VKM=rBzlzC{zFCmXOR0B>FoCo3hs*9 z{u}H3kh=faK`COw8T1W+Tl>J_^_09b1VtvUsk)+8VMfo^!x)=LhS|-oMARv9ErFrV z!{kZu1BQ?L+TK29(TuG=te}WA92TX# z`LT&f@7~T&1IGtFyG;pQRCrk{23c2c$K&TzX^To&F4hZQ=FMXi3|wG~kKbp~id*L; zd+mgY%^lw6o6?{`w~VmNU!Gb8@Ci8^cv;Tr@DW?0KtSupP@l;IS*&B592!4&h)Blp zWEkkAY+p$L%M<(LMc@@-7TCnDhFUBQ zNT?P-M=Kbt6v&u5k4jFWvfq{GNj=C@KZu_;vC8fAnGlY-dgRvJ1)k_TUVB9+d9ZMI z&z28akla*box|mvXIYl1vV?ed?D}VAfd&L)9F2)+S?N2EB7t0b?(=ShFb|&7*G*!5 z-M$ACJTa#jhJ-i+Rj=K0r8jn}1BXjLA!Rc$s}u}YwuA4X++CVH``oHP4)rqf`iXjW zjjlbJeHr0B2`Kznhelcd%x@3U0S$^WD~Qp4+&S=PsDD|CU93IKUH)o#_zW5zfKcCc z;C7VC?hm6PYpzIWHyCA4FSp^eG(?r%E@%Eo>yj@bYo;G?G>YGnV65EG#hPit#4(-> zvX}|gy@F#JAV`8%QR)etixHPelr4y)=Yk^yx2-h3hNi)z&|hX2OC}nStjZTBAZb!X zf}{o6i3NB=q^wa4W=OCCJz0cZUUA4M2#!|2{d&InvuY%SUi(ZO7I9%iHU|!nKBZ#) z67ChJg(AvE>&?w4n)vTp(ja3-a()C8FEO>(qx8da8~RE+W?~px!oD*b(y8DDoWYkd zc)8&Ib$Jb46k8-FjuozXMGMDbL%4cFW$h8D$ES#xRW;gnLTNgl@j^ff>XRhUR^lMs zNp^|fc?kVUFiQl;wDI`#_DAS#j4dqzzux~(H+Op?ZlCd|P{7TtgNFqD+s(aNNh;jU zo`lg<9_6Z`zN4BGDhaz-MLpdr?IgOI!0^%=9Y))SP^?}aLgBz9WSzpuy`!obngUjt zgu!3&A^vpZr5ba}PiIig4R~|EyKaN=y^Xog^RhjagFYdEiGQyGEL!DRd>Gz7^XPd0 zMGA}IbRsCiZj}-lA4L-~7XOCyKDC@TqHM7Ka;U(T`*za+rhvF5Ig=-U(sU`z^47u2 z@`vPG&m7*-g=5Bhh`I&5*huJh;^m#-~K+w_q_<>%6U*u7|#>NoHN6heO!uf+d`h%|i z>;1z&$!dqi##8eFxDdsjcyK%Bk@r4{wU?HO1WB2$@5RFbL*A;$*4i#4?=aBFUX|J$ zakc@5JWwMG81lA=ctfglK{8q_>vO=6=l;;hw&bJ?TUIKPE4bmrs^}`7`*@btU& zUMl3GuQ!_34-|-2q`vrCV0FrQoPDdR^;XZn^ZdWaX`aZC-skG3kihoBu zQd;O0XVD2CG~394+}@A6wuwip`TWhiuU_3(;$&J7PwiNj=QTfGHY_M~4;tIRTX1PH zfOr!l|BJ}G0J}c1;;{aJ_t%BVr@uWf+H0lpzKGNiqSS_{yJK8Jx~0FZcmsBui`V64hkB>kI#|!{#xKK$no5%YT2pr zKVC$w5gqH@6)xT6a-O<3hdeFH(x5M1VKCDiIbi$<8Wx;CUMnoOq$u(HZ^HtH>-<&v zDCe&<(}Dlm7^I5*^{ilRYW@#9ZRqM`ZEOBF)?dH>$TO`tm*#Li1<6mu!QSFn0BXTp zYb!lBCHoG4L_S_7wIkq)J^>%B&(i2?qOY_aWCDcAy|B2Z12nrWq$F_7_+J$Dz<_cI z6F^ZTVn3mBnnP#|f{j>1o!{)C#FOUQ>y=}{b7)>H@7tYwbAxhJ&x#u z7W`n4&~~F_!tg?eOp}R8nqX2sUQG}qL#zW|0PReT7nxg<4lsk#jg-2iK9+`lRK$ZK zCjJTrP{g9=3#=?aikPWPnodHTz760uI$#PR8UULP`tAkSXJJMV=KtoPGL0X8^CggR zBn;`f2TD>+uU5IC+-Oqr^$?zvYy{yIXq(N`YV4WC1Zbcr$yuGg5Pr(kKBvthhGZBpoYzq~EOa?l^e3sCuIS($0wZ_0NiA`_v7F(Jk2$87308 zJLm;>66YA*f2QOyb#+S;0D#BMk$?0$rdH-IE?$O~E{-05!%?Ru|G6_|ojaW`3MFqs zw?2@dsn!@kVyy6d>cZHIto~S#%gDkwGB@fBf-s?-C%Tl6OT)FgPn74PKxg5_EM#ze zy`&52SOW_x$0lxrIkuH5HX{U0S8^5X7smxweUV$jP-^ZZrK!3MVm`TC^-Z{_)Va(~ ziB*yGY3$np0}ZIvuAUE?)(KfKy4oc9r9UB_<1-?a^UZ4?r+qV9R8!OC(t)@ zV-MHstz3I*M?>(f&Zw1ibb}n#j1g-wvK^33idGS4#5HT`6AS{6?wOiFt-g0KlEmhF zVaur6vxY>6C*|ks%))Gk5I<{3RFK{N;j!z?;}AFjU@{*q3V&=+0cx?ue=m*v3kt*i zkBxr?=B(+rhlQO%v>DT?U5RAbrB?SsJ&UD{RLqeFuB_k9(9`BCXgdQTL9R%y>}G3j z+c)UQf>xSb#BTBHuLQ^dSEMX1T$c08Og4CqifHVhi{ErML`S-({7kIj z38}d8@x}eJh)$iiwtXur~PVIUPDyl-_Ww}ejZz)lV+dTRftpbhBRz;Kr~>l1YTrNXAZRp;?&ZX z$(-A{PpHmz&yG3z0Bjs`3VQ-hmiVMIT;-k6aT2y%h@a-fDzXmVzc|-p)l(jR0H>5k zar)x|{c^JWi;?&bKTD7@aC9h(pn?f)Tg zW<7I-W32NB4W*ZMB_g(XVBUdK*V@$>2EDzY*e8}!_Mi2>Fpl+A4b?$Ax{_)vdz4YT zPVHYb&@orcZd`u;h&Ar0eP71-43(l(ULR?c$(BoJWHM#*_^?@F_`D#1{bUH!gLwW6-S{{!RgvOL<24@CcQarqCS!QR~1%+d3&YDYI{J`M-= z*|?>+m!jVqeB*=znOI`L4~PMEU!;kN$-8^x_MRK#JI-w4OwYMv9r9ouU?c)54Wmr* zufVM(cb@Z-Aqh?e0qpRvdX1KhklENqi8rX|V(kuQw%wcJAEfw{o1{qVht)0l!O(%hi}B z7H7W|?p~|NjaNY7O9$2yh2Pr32mg}?ZDG}|WPjuzZGpR*gpN1P;?>k<1jfNNKu2Jc zeJ1=aqK`DgRK=BvkeJfD205p(5-Q4EmuN+Qqeintzn!taP$=&eBh0F6HS0Hzy>jx4 zm0JZL-3Ae?l#ibLKkOACE4|mhnv#K*6#ziLingLv&av%+6BU}~4YpILY#H4mXs<1W zV>E2w?tUEZzQJnnIo1}E00plzwt~A|RNdcZqg{qm9T|j3kT!2ijtBoQ=6t`Ii)hS6fJ!#+l@-of;1JxWk#A# zOCY`@MbNC#BdLB8fj{@)^V4HGE>VG&6Zp1Xn86#36KhiXcA(={tLO`Q9?kIB(~#Pw z6T>SHDa;L*kAeCmd8cjLL}&VMuX3nPTfP}-r;#^Uo%ejp+U(`vO-?6KIvM^L)9n+7 z$sQ`Bk2phLb;K6eGW~Ncc)!wNqX2eZgyZPOwd|b+azi7=t1&NmVLIL2w40aYou@a@ zp!uOb?QVw}0D|dJApW=nzv$7wx&;3?Og8|BsdAgK)+MP5wR4w-zcTtF^w$*vRay*~ z`M`sn)59E4IgCaw(Pg*w1QioU=%CC&^o z`f2@w;nw6k7UbPGbvd7lR9<+C8yf*rabc*X<*X0W;5XPi_u~&msOiL6 z*JMJQO2af;3Z5Rhpvbe3s+`J7r%6T-a9t7RtW!TdKl()Qvz3+3S`HNju$k6Ef^LD1 zOeALSL-3O(A?5kG^Bx>^gr*jyBINzfKaBR62WoeM7%ldGJVf7ZEJq*YnSWe#`(t`@ zb#%9L1uXN19>#Wd=3ajR!=I1x3>JeP>SX}l39ydB%Y@!jrxM>yHY#C&Nszv;Qr24yGvR+D z*Ih?yJ9I*7oP{dDlX^Hj816!sy4ds$63wsViKXL%HNeDs>59bA&oDS#IvD)vMI2a< zKP(m73pith-KBAd*K%M*+bp>grl+Yy-3#GpDNJ&lvk6FKAc*0} z*=V@gcCP6NGf=3U7R(m}!$->Lr*$oF)%F=_!~1^VW>9k>6`&7Ov)5c~ZG@YA`Gmu^ zx}{G{*W3L%-x4s3*<6qkWR}hO*6K~2!-Db_wSV(7DgXxMNAuPnrtSY&Q2!U=4xm;4 zw^5JgQ*4{V7f!&a*AaOO<|1KzeD6c^7y9f+bn8U&5HwIlXUWp>x< zbg+HD1dp}>JHs?D3Y4t^W9@?=Jg7yK0n2eBcsW@w4=2?bt{VhWa~Uf!)MtprjAtKEK+Lb*^0gIPtK+!`|o5hI*(C{QI4c@&X9d`tg<$lnvLfBKfVtT)C{v0-wda3SV} zGVXj5ZS?goBzu>An0j(EON}Hq3{lCGOo8oOpEio=L zTF7g426pk(vT`&rn1fmx7~ZoSFxFGF*vNyOkCZw}OavPyD>GRzOzp5}p~+O{IxQm1 zulW4ue50X0hsLN)h(V;AS&{iSZk&^mNWYRvDG)k83grkKFJoeb88|WOZ2)&Aj5vS@${clF3!CP3rLY0}=|g zXyTx%BK;^5e^!-$tQ`ODS^y5dUoSQ^t5;msC;<+>W-T^hh@1xpLG1pz5t9r*`UX4EnpZmgzpDE}7~K>t;YA?^Mj`U;Gbyrt>|g6x13fZQsosE>#%HJ(sS&33 z3m7<+kKV&Z){6h=;p{3RVYQ@Ffn=pN4b8F!eVu2oVBB)h4q(z2VHz>hT$aB1p?~kY zEeZ!*hoatUA7dJ^**(l3pd}K(q@DF((nbc}vr&m5rUj?sN%|w=coVJi2{_SNXdswF$Q>s zf5lyRVr~LtAA8)o@yFP0|DQ%}Lsu(6^8A~c4zPj1He49+%2Exg8#fU%MoA>N9Ho@U zJd^U8AKBAajT6ffXQ!Tu{sI-@^V#K{LC|#Nx*87;`cxAj2r+muzPvJwgycYZoK|AGYE%snit@)--a$Vb3#*|N8{{gX33djeOFII$6O zEntdQ@5|Ur5&2rr0_~-!5``(krK96bfTB{J2+>jEH~=1P`$u4=$&6h=2g3h&Ge!E_ z!Q^ITZfO2j>xb^D4_W6n{cyjpTsC_;pNx>9wIUGQ?$blkK^xzcT+YoTGQw7#wI-gY z;ZvFwfmN8{()cv%1PPdxHtF3=C^>>w25mwez=4H?EU_X65jGE5v{u>#9b=Jjsh)A9 z(3xaTv~4Zl@bB@C)CX28x
Ia=EiZqgLiVAIsodHl-*jY_|t5n%tcd2n+=Z`1igq z&@r*Z2iO`ec``%_SnZdA6JfLCyqMxqeg*$6p8T`iXO7g%I61bTvNvAGq(J-Xg;))i z&Mx&e;)FIpM+k3?RclVWQgD_@o_b=>;!+TLWNBdlGx59R+m4i!Mw(ckc(O`|Q2O3V zqA#W{eJ59Sz@CWngs5GkN9&g|#n1G8xqA!AG8OvV40*vLUtm?6H?AL=+LHZzd(eWe z%%kb&4_@})su7?^Fn)Q5$0{zHNPZ=r>b{L{M%!!AvU(98KEGo>$L?mR+*~L9N`feM zpi!0ebyv;xkM`MHwP$BZ-oU3iR%wWZ=ZA0=lCx-BtUt zcpexxW+|NYZG103wddSo1-5SMhUU%(^oSnYZjas(ZUxE4(>o_$ryrx97r;>G z?g2>sNvYAV{*fZW0VyKd_~V(z-3;%d5=06@?{foro4s=6d54$-Ijxkvto3(o( zsG%xl;2*)75k7e`tJdHIEL&x`z7KJ-m`!9SKVfzv9;^@7cwof=M#)N)Z!$~@@L0Tv zHVforS6eUXWu+V*QSPJjfMbI2(0VE__d%Fu$<|01g?cc??A0uDt^T~qcpp!&Q_m1) zUG=hZ`ebB#e5WLsXTgs_ccAzdTL*QhzdpX~f9`@hT3nzfN?&kqHImQki{ta2qY5MU0Q`&XFbGiM0Da8qFgTm*Zf3?=%1B}$FEODlKLOa) z^Pj7U9VGW)kx);1-!i{3l`M#aaG!ec{hX4i==`90h%v5wNe_oVFs3Si18^t{C_=M> zDmb$%01KlzWwyORmPU$tFtjVxoGs-Thw7Qu7==43;D*8jCzmJqU=v~VVp0gv*Q?|~ zlhr)UFRk@TxLx+$#IEtv5H`w7@E-0Ych_8#lzxGG^KID!HO`ZwbK+y;ABUHmto+S| zNyKjS`m26TpSkj(tJXYq?P6q4A1BCf__2MQTpq64q6QWg2_S z$m@q_$Hv-or_e?Z+Jd*OT-aoLZ9Dw@8`tZ9_zf36tN`~BkN;uK--TH7X9}x({>yK8 z;Y7t7tSP{n-=un3#>&vC{zLVekWf`oGBdZUOc`MI9f%8fYXxXV#|7M~1g7kg8J=XQ zNh=zT)SMv~E%-zAa?u5s{Xiz-B(m-}!I;W;j|Rv@#6JPg)P#%uZ?DFLwG|Qg;Bd=Q zxUx;EboDy~;)JRU;-?EP4>m;CmOxyiW?*SZ_gKe*sYGMZiyG33_#SE{d265BCSRbL zCs1Z28K)@hH9b!~662wzUAk#C{4}P3w&h!^@fxzr z@T6YsIk2E+WB2-p8`g#`$h7S@6Oq{7~vbZM(R%Al?qwg zBDqwXeTuuV1#=zDc*sx5J;~Bx9QGm1?|tCxbDWG)Jb1tF3=Xj(KT)x1gIV*O5JJ9m8>q`bP}cHmv!bmppnBF^F2|R?o%8&!LyCRM?y&75OsazZy+=17o{wK|>Y4}FcsMLX0DlDAI73^wi3GXp{?uZF3I{eyml-dr;4hZ!$z6|fqZMfNrz5& zNqwFVTTAqt%jT6Ttd1ly{q^ko>vj2bg?QIA!DEl2`-g6|zVkw9P;P`=UC;*uIJe~h z9{UqYAvGv}JT|tmr+7rdZuvSC+?qbIO^QItTD${>9m+wgQ!Kfc;sp-!$}d(8>wH$Y zMwxhamLwvg5*QI51V+T2Um59dw5vNk`ao5~?keTL*rR~5*0>Uf7vEdIm&vsHtM3$L zjSqdhPE1W0mm{{8-d?FF;_pSFX4PLuv+i-?sj0hODjaHw@-AO6Xi8l>NAwlH)o3Cb z|50;CtH&dW0sR4qPT9NkR}V1OTHaO=wdmE}bIr0?;r9`ByN8_3h2bp^rUci9tM+?y z%`#s6>U6W-Q$BpTZ}!c!U|+vuUSN31K|OLC{jS6ohhw4r(Kbzjb>rbQer4Pmt-y%S zGK)&vDe7v!j@X)~Js{NVt?<)M&7a~;R1}whPSuM-XZ4^<3i2&S0%pYb-v%^0xz7U% z2@qUuI*jGLzwuEy&xegqNPdmTKBuLnFW6!q!4)?n*P*H@LsL`c+>d0Vf~$;=nQ%wr zjXqv$jG@0BgC9pgPVkU5UcRlvlJ%vM5dKg`aQAVFW{r!G70rcvf2?TIZv>4-MUDIL zq&KZWNFXJDt6)?5O~C{_M$i}y<_cND13I)r76O6tWI_)aZZ zdZuvUM$_}o+^y2iD{y(+nSQp{YO=Xny*i!wb?Vra1z}!`{HQOknH_Y$Y-oh;E!imJ z0+qVpnWC2XXI$x%X7|=zOO-!mJYbJ4?6mpmI2@mZ8Y7t^0@~wXjI_5LBUspl_*%B{ zi9lf&7?zFG_M5|z;bP!A1Nb8nY2iJ6WIPClMX%8d@~K?GuL)Dq$Y-9hBP4GwK;I{| zrsC50t2`DUg|ZqIXA#FcVJ%x?OztmDllb_wT# z)qy~9iP6`-kWwj%VvKdNDR_;HsP-n+tp@>kJk9NRKeNU^4S%#bNZEXDUJOs`MEHdC z^p(n(?mG{!$-pmWO+GOX3@~T^w?{Rg}+@+SK^_9tm>u!)xLT?_QU;4L@LA2TL z4f;oY&M`Jo(i=9qSxSGLjic*0_Kssu_E8r)3veH# zzB9T0Q+c*6``ZZ9C~t@q{d@J2*KVJRr`$?3l5pY)FP);5I}j;O;dZ`JTbq)?LP_TM z(ZX`YgNCi%n)~1C$39k(6dUnLpqR|WBYM2rf8?d-_d9nB`7UTTR^7ZReVa_FK$nwO zG$!T&yO>haZs*BMg&OXX&6FZQ#VDdLZ+GkE@aVicF_UY|)#}@KCv)`$exy^0#Oif; zMH#2xq&Dl5%coo=_&u(_>$2SO5zD8G_U}o7Yp8a=*6)*LP6;Of3Df838B+F%w!`YR z8u^32=jgsIG~{OJ7E9u3Jk;Oy`c!9c1FPHzk{8sKc8fMAEBu6quId_``f%a!fN-kR zLurSV_7z?Zy(RT^*;5jzk3%9z>yQ8#CiN{p4w#ReHDKu&xf=X`RCOB`qJr)CR0PfW zoxZvm7k*d8vO3w*hXFHtvI$m_0zZxy5q^hxb>5!;`OtE)q>IQ*j1!+i_k-@ddJ>l~ zBe!cT;;p0R(QI?@HD&B`b7!iyy?|H|2Lt%GK@VE+x1MW&Rp`&vF-54tgE{@;D za?_+r!?wtwSFO4?CCDN!hVT^vs-U_m|JQH!%cl+j>riPqLm?KUw}OF!wHoKsde+#`Y;jU|^z0bgm?x{7WwyRw_ou4MZ z={)U9Lq!{NxR&Q_k-<>n=vKr1IFBcd78vnDMh`7XmULy`;!fARF#JjUJ+L}SWe4nJ z>pus?l~)XNP+-Qk2@lhG zzNw8~pk-c{VrZiMqbs#I&LNuB6&%PdtTb?u@h3PH$v%C;dFv;n4l~sk?E6BkF5Cy9e$gIDs zvf}0%00$GuNSFA`-Sh8(k#5*~iYj{7cr2zuU?gcw-)+3dYGm4i_No0|f9eaSzbhQD zFJDO5K@V=<^rfpgbL_eyb*$jX&knjCLpr-@L@xsw-wL@`=l;)+Jf{ax)b|5+a!)703 z2+Q40Uus$w@LpvzIZiu|bN@EvVR_|Zc}H(6wh7PRYRx-?2Yrh#TM9FVQASsWTIX9J zdFj??6IhmTQ|Gv?u7~Lw9V~@Ul3uZyIFSqKOXt03f1I%8h{d8#PmHr;ol;TKe!?_M zuqxRJV|}1Zl`fEMnkps6ZkQ@jY?>-{p7$m=fIH!82#FaT0=i%5{3B)zNn&TO)b8QC z_yzF553+~o`$+OkTsCWMTv%NB<#g1KtYlA~T)50|or-_zJFDGd>n@Rmz_obp4e(R~ zXYroXkZUpi*y?ha1UVdbwNpY#0jZwV@SjZ?pqwZXCKUEVZJ2aRnvHGzgJ$>*d zSZyE`O3q^)Yo@;Rk##DRi@?eJ8XXr<-+|xb1r)mWXqPw>gPxw+a)bWQJmB_yTKj<9 z2Xa%YN<5JGt9;r-J|LA&Tg@*LugeU2ft(2~~5ngGe@myBg8h!V( z%Rf#ugp@)HO^|w8XyrTOJ0*~l(np@5rq*Jm>P=xy z)=#GAg@9hbYv5s4#1;6YghKD+K|s297xMwkg4uTrzZ@@}8(RoLbu`I_+$S;P!0%FB za0I8Fyvz~-8CXSZ7+A5&1sng}zzWvUe;CNyn$@SF;8SM9b@+AabCO!VE*5M*?_%Pk zF1!z~9;Cm&r(fYH)ho`VHKmpYBIoWWyuv{Qi?>Z?nAv>|hqXfp_^M-xu3Znrg%i}qkJ9V5shRY)1nhO+(RYN?*^^` zJ8p+G>R6`P#+6jj*$u+Ro-3{*L|{&D?G*+K^*7x}cA!!JN5uxJmQ)DZ-FGFcl}t+{ zw83)OYYK83A2ioyQd4rCOJxOGILPAt-t&eSCZbu~y$z_5-|4}B*qWV39^bjt*GW_i2U{qQi~B4Ahe8^Tlez^x?!BrX z*2U}r*`Di$&z{zAuHr|+H)XV+sB+)@{j>$^bp)k&8_SG`Ml)mz@ax{_2`Q#)5ke1t zk-jQuCm2uQGmQc~4ua2jDMJJ1T@luKbwqhV;lFe> ztA=*d+!($^MN@Q%T?@O@GxX`K!ip&KVDQZhwoknoxkfps<5*S4vMgR2HNBh3UJv*+ zA@4BI*gdKKAi{`Rnt4$Fs>{?=*pdJXulvyxmRY#rv5(GOm65n{?vd-LkX~4Kxj>S}5PMA}gyVt9s*mC1pQ#eE7$+C7JbQ^`#-F1x*tjUpjh7 zh0Uy>9Ox+@dnC(&FQjnGC?7UfR}38ut*;pvn^<2n+?E;z(7wU_^RIgoB~tCm_v_lE zZNGXSzMaOJOA0t;OlfH;d`W6=>KmOMC~p2D+$d#Ij4oxu0_uh-S$~j(N|}Un^nk10 zXb|LoXOm}-CIOVPoG~2in;a+hlKVbQ_W$~}K)IJM=R)ci709YMw`JE*6z)fw8&~ze z9F?A@E8}y;h2#-tMP)8?3xNz7WDSb8$ES^*_7dv6OOt^JWjwjr@@itSOv=g&FH8U_ zGM?@3f!My3<9?PWl^&=-l%?tY;wj5hDe(<(Bnsfj6!Uph_8BDr_CmT~4NswBnOkS$&m|n1E zH)Ff2|0a!Dj{K0~^F>N^sSz2syfNSV3>oy9lAJHHSJ;)i?_A2e-BlSg{|iM%4yqqM zp$f)qdCM__?cu=2*xbO#(0N<(Ay6g}oiVqmptf@xwSp|JY7MZS5fn{5uO8#<1bpNr ze*Wp#(mGGH(^aRjA2W%KZkXEZ-Im4e<)?AWBU4HzEvA*1puqNVyH+4?>dTzMLGFIM z>%8S|mca=kpEW(gGH@!p&7^oTrWn`c4fb5?^w*@Lc3k}DKiPH(27e~KU^p9j^+7M^ z{X}uwvL`=(6;Txe4{4U`U>pCwCqHWU9qV%uzxg8=9&#p*evXsmr(YW|`k8!=wez04#+Q3 zNR9W5YoRK@op=Vh;ocH=mLiXDdIFqJY)vKs<+OAx&~f>H zcoYA9ucB?yqVs1cbY*dp;&W`Q=k&nuj zRf`L)ulY`$f+}YakZ3t2bq7xG)66oYjaqhzgo0Qq4=kC|ftj`v+6U5uxpW~QP4_>7 z*w>FI)LM-+On$F4Ow->xSIk3Ecl%EeI|%srAc!3-2i4%Ny8j^2gJ< zG%>o!-Q7XR<>@RHMc2%J#Oz)6c-B2j`qR4xoxTjW(3#uPjJ!8CGR+IUA4HZUBpRRs zR6$%Ot&KCwPU2pjvilFt2uXTd4srDh9LjygJZlgbZ*@J6>*oWK)!%{Z&o2Upbkf3o zANjc!L5WGb7{Qnq?rL#R+03#(ihjVAD@lSxPQQ@+30ukTd5ZlEMr)i8%BGFQ`z1?oJqbd zSACc{$)*5kCqzAXMy^z_f5FrMvL|81F|D?t1)L4F$1<1f`1sA9zif+(1D>{@RT;xk zp0*oO6qKj!Ey&Y$8s%vlhr>(Mct_6kCa1GHiyEG_hWakbr*Xc754x5D6o5iKtt+!Y z`O&3Dz}a9lG;x-{OWpPU-2C0^x- z%1hfg_lrn-}1)x`=OL<9Wp23-f|#d=JhDoC1XPet8Fd%$__vd1a8$zHDXkh zPyQ&3vr;1w=-Iz=q}teU@CSD4Rr~hP3rlVWWz$s5p&DH6fHxD$_GkZ<+S7ZC=7u=a zh$MqK4`@Vqm8%T;F`nR+>_uDxIR-X+sP60J?#dh9j7 zsHV#8M~5W~U3UkT3qIGza{0X6tnMPnth@L)A-0_SF$p;k+)@+dwM!b1ry z%jFKW2^j}n_Ioj=4iwam=mK|Jx+Hamg@y6CpA~zgis^4260==Z`3lk)mez&>>c2%4 zCLgvWnhb;DtIlhVHn^A1q}-#ME4`J1avGbhnGT*B5eD^>dO*EfXI^VN*8rSwmEm2G zQA4dcxS!EWMcCtoUe4yOj*zRf2g7>rh7Vl z2#@F}|8-6A_Re=vPhWX4;~eBLWCMxoTW2U8EBgB*WRx3`AvXsnh zN>+(RSxVjk*=OAKxs9r;8`)x2Ri6C!c;Q3V4bsLgZj!gSO#U++yocHniN`^zPq{ z8esjsU6nLc#reO*hJKLPuy<2znD>v^(ClF|4f!%ff*i`f)+T#Mr-&G0<)xfCN`ObV zjN6Q5W%jUI@s?3jOk7IPrT2i9ck<%!2oa<;jEk^-zntEW2a2CJko!|yFtyK4Xg{au zL-meqpQDv~FqUoOOw>EDybGw+y7$@|Ed4aIfH-+>_G+yO-3s68E4XUc?{at$wE_Dn zf2mIp3k*jRcQuK6L+I8IvA_l|_PvFCJi*)!b{4cgBrKG~mNWaUk)n4N=ndl;zlfn^ zZfrRh;=%)?f1&h-bwHfpV=lTltWuyEc1$ozE^aQ?^IS1V8s#4@-;}xi79MM30<)cY z%jE@j3yE6a|3yJ1Sa|P{bv{h9|7A}Xac+=T@kV@~kp7;?9#|vc*R-ZOS~Io~J20Bb z9E~6AI{&(Wiomcb^~%VV99b#4!MKFeZ{J86sVRZE&n3@(_mq^1_lXShD*8-@N*uaT zO5gouerj*7n`tm}b${qD*Y{l_B)KpcKUnxuKmFiu%L*xJPs5vmB5E9W>H2)vvQ!O{ zGp9gd?Wdm!jJa0L3Rox;tvN_$+Y~rKfY0TIuUzW&Wy*>U3h*I*s)*-YuXAR?$~C_?;_(@gGCKjR9l6^`JNi@y^UQK2;HDFE~q|V za;zu48*sEK|Di*Id#~&qtxL(R39k|iFB|U>X2Ds<9**G3(bm+PYj*LH$nUsK$>~m3?*tYqlJYt~G%sFGr$wKtOxF zxat?&AnX@EQ(Ck3~mS69*Smzy9_s$~q&l;f9InGj}=< zso68TZ@M!Soi4o_`}IKAWYYRuwbfqX$(v;=9L1Aw*62SS;4rUyfZNvON*ZcIEj~&5 zimtmdG{E`VfWynSp3`rnTdF#&zM4*Ryn6=XpYLgjWv}~}#5_?~HRgWbdxgN5WNkSn zu#>N`gN6M@Iqq$zAR^nK;b{Q(H78~7|ET|@ze?+0n-xWP0RNL;w~N7p3aa(%Z(H5x ze#$Phb!ue>46EAvcjlu#On@eORQj7$Hw(~2o1e(Pab>ssDSCHW;FQ;1k6*K^`c#Im zf8~kljO#cB1H@4mNK-D0)|YGcbj1W4Vtw(CXlA~k^0Xl10lCo>i=$1YKS9}-_7Pg9 zm%B^L$mg7%{py_>Sa~qr)6wqZ*XnqMJ+v*^oflfJj@)85>pzv!UQGAfb*dULh!2UC zCJuZfeMRtH#^qXq@Kpnm>cek`{1;ecZcmt>uUMPL7aRcOVPgd{AJX@(4Wkq zhPJ4!!T{w#xs4AcH0lq@Yd^aUi%ECz1EP?`h}Lj#)}Y+pD(}e(p{ts9lC70fKCbh* z$3TsRi`SAuOyw?Id{&X|qPtN{Nm(c;3=~rWFL!XGn3AzVn|uT334b0O)4Mo*ryON| z*gfFdtfzF}Bl2}(sD&`9p3=mf3m5Vq&4(n73lfe{33*-J1JV%J*xvRp+Iy>V1cZ(f z>gdVKH46p4IXU@odN?goY`6Y+_0RQoe0f^~#`I^Z_WEbvG3_;A`1#Atl@Mrs++=Un zua9@1HC%YU9PaJUD|WN0@z>do$y(E@(jVu|&*p^nI9_*lEw8lYE4ep8ZcHJrKE61MnywL^ZYLGKfy0GMdVM*)=MUKfIklb=z9=9{R8|d7;_6#6US>jmX3C| z2#noWyCFF6i)rH@o4+HUfCQZUuUOatb_Xxwr{T|kZ?B?0WS@2xyc-wd38en~G(tdt znYxbQC8dvZyj1~BKw4UML=*2pqni(C`NuDG2gva1 zW!#9Ton%BKBL;ToOEJ7q7xF_*WJb4vxhfil31bVZLxr4@RIF&!KYj8qrU<;~5(lDh zLJy-`_z%(a4!Ry*O$fQe;;^IPVT-~Jpy3sBjv$`=HU}DdJH?4G^gX;N403Z_KZ3^p z8)X^;HoWQya$MbyqOp++0j44|7+Qdr^x#DF&Jq{81ym&VFJA#(yaGAl-FeUrVCG<9 zcx-qn20p}N&+(#BcTffcLo@JV1IStLb`0GNs(1cXgabFgM|M6IKN=pr?*5Cf7H;g0 z+z4L@pc~lytaiSZ!M)6pGynWaH2TKS?)dxxH|s`XzYzR`{TFX^45JEnpGIPz5=LYH z&HNh!Hr!+xx!Tm9LSw^LVvM&W81Uhy!pM;9lqed1r-vrEPcCwrXN#dhQPUjt1wP+$j*bv=7Rnu`xR{VnBu4-XTK)LwPjn zUpxmfK*K%VkPkejfQH^!4tFp|;I?DPug6>wjk*nYI1CRBx6?vSZaQT&JSr;1=wyZg z8Ey-OjCWI2(8!3h@6PuKxZx2pf)P;r-)-!4MTA@XAiMv$I=Y2_LV=yX0NlC;`IVm3 zK*Rq>;EUNU2*XIgeOVY0;Y`VSbR%1M;$VP?7v#l;Vv4;WJcLVG%_Ls zxq}Z1?i7LCLnXD*;D46$9mf`M4+P|zSgwP{-;9cOIve5geB|mSp@+u)i>CsH(S+;G zk0B-rmOdI9c^LSU71%-d!!^^$lvt1fx*fzZcq8?>^KT2T6GqM=9z%3Xh&S57Yrxg5 z0*LNPzk&uwW>!&y{Vz6IxONkn(o!@=H?>XiEQY~{YZH-kw#x+F1bk3-&{J^T9THpD z42=!n2X=rBSDGPLwom40>@9SB7`g+lt3s}9GL~pq)XKKg^dwwHghbA>LL>hPR(H@9 zaCHoFw$s?4k^d@6!q6db5eO1I!4?hvSGf%aaJXs#3BJ!B4UULZchD_xdOZ^S`BgOd zUu6&&o*d2_M~0eJkZb>DSQ|};jAensD>9B6eCX!11OyTgWSj7dZR&6d4PX? zc><@iAa4Zpe9=u{q7`9yY&b6i`6*8Op)t2Xi@^X7XA&T1v|9ig{_j)|H2N-l=;B`o P{1w6os?pto{_Fn$0s%2X delta 33 icmX?go@oi|20o_ATJ23DtZWQGzyyR%K$?dM!~+11tOb4m diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.130.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.130.mcpack index a16d1759feb3f3cd4fc73e7d93df5b3f79744e92..ef03586ee4e0fd675a43968113ae2dcb47dfad19 100644 GIT binary patch literal 3071 zcmbVOc{r5o8y>?LVKkH_6f&}uU5E&S$XFvg8B5U^F@s1{)+1{fm8F_87+c5^LPa83 zQVoL;VeFwqG=AfpekV?xb2{I5z1R20cfHSY-_P^hkBI?2!%hGb6B7Uc5TczQ4;a7> zKIAAbOVgKw{qaudYz`o8t^u0NRac>Zx0RbYL+mP$)^-& z?aH>J0yOzqwzaKN+ANYT{O14M8XROPDb;a2mg09d^XrV0Pe`|APr(H5h`+E{H6d7v z2F!6VP|n_o_f;v#gsUc?poHqLT6$CX1au9f0a!OzMpnXw#*hn%huBg z?e6A^!Af~xywE@8oF1=<4wZrG%*dVLBQvtLiWlF9rgROFBzRl|&31TyQMOhfzCl+~ zy{Iexpd$qKPAbBE+wrha<~IGi~X~d6`0Z z>);W}Xnf=m!w!Vs`SN}m9AGAgd%T&iY0$*b{Q(d2cb+#E!wwoeKCWmNS06`bFErN2 z3x#s^!ASoE($)aWZ*BqYvJ(V_m_SJ3BEojT0zuh_>Z|P)bxB zsPQViS(CMH)#2;AhB5kG0kD~Kq6hbWPJ)|oXLOtsMHXGF%I}TVgQ~=4#PxyZNOKpX z_==KzcoNuhPNLrW8&fc>=JIV7S~&!93!r{=0Qpg@B)N0e>7y>6JS@sGw)H^JT8apy0U^ln43ajNagO)Vd2vaJS|Uh1tnI4$Fn=06~4YxJSd z8RD=0>4am<^k^94dv64e6bTpY3kI$ceRP-olY=yped+(M4^%d%DbULk>F(-y+RF#y z>gXr`uh}9bsu|M;Ma1ecEIn|iwWOK($Wmxw@j;=p{%KJ&nJ8vTRlOcxhL^NY z5i0IKKU1;YvarNlPvCxHS~25Zo-1J4%TOl6=$+Devo570%G#Wh_wUL_3E0AzhkCEV zi*6}o;$ZtEvN#C1ehr1(0sBm%?nnquj}LD*X(JM@k~d(z)Dz;I(dtrzmzy?6pY`R$ z+DO^IWX)g`l`oSf_;uN35gNGlRo(Y!MU-h6_bNSFIGQ+UmfSt>aL!gQx_ZjWaM=C+ zBm$z%(PUU97vEn4L$w*lO29aim3OOGnuyjn@O}V>=)`u6_I|||L^)2Fyv#F-uQzXc zn&N!H$uf7x$xuVJVfGQ<-E5WpUfBkYTE zZo=NP&NOZd{+8PW<4a_FwcGeKnNavNIX z3@h1Rg!C5)C24dUC=0Gs&(1$k!y=ut>8?*D{+Fi z@1XOIPau8IMr3i-{5V%seg>|>ykqK_#8mzMB!ZSAwP)|t4tIGzJ#jW~(LID^Dp7at z%1vppQZ*%|%F5`#6QM0#^u+Se=w_um2fn_?+XRzJS|Ab5=2u^ZAVj9F%o7Xn6zf!R>I7E7hkt1%9bU!*Zi zI*H?D1DjYLyt^e!qIAxW7OL|jP4VvS>`Fz8YC-!%(044TY)iM_+o03hhiV|V!E#(n zabGF-upLL;`){cZ1Wu8V!M>r>k>tB#VTSarZ)KMYjofhW%^V)eyts`OT@5el0)_eqTA1(>enS)2 zkUIJ|8{9FZcXrJKo+&Dp9c+C1$wAl3Oicv^xDqHgc+;zTajfc@UtSL8*zJBf$k9WN zi&rZqm1f5X1(c=7RUGQFXoMXCfBNWA+b8`((yejyS#cz?)(~>!PIpno$mQ_kN`W)m z3?78+8q;c=Dq6_4FwcFJsJF84dQXTZn9b2RL5nx=vKVfaBQ)Jx`S-;m#U{0No~EX9 zz%{JtfI9&{7OnM52^g^LyXOA?^XJ+H`eW_->+SWL4cTyenr7lJYs@+u%z&-beSHKF zTD(82F-_~&Sz4dVdSQ{@5RLKXmj1bbw(zum%&Bbfv_Knto5cLDWorwE>)T~xY8|u& r+Qi{M&(bYCtuL01sV&ns?@c^?Pwf}51Tn7F7nt^5rtxy>cgp_<*;0T$ delta 32 hcmew_zLa$XKhxw)&L$C7HU=PI0>UOB&C3Mh0RVUb1ib(N diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.30.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.30.mcpack index 0b9f395bfdca1a486eaf2de9c442b27c1fdf611e..738b03603a601e0ebbd601b7474fb69dba793942 100644 GIT binary patch delta 1903 zcmZ3&dP!shACm(!3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ|c~r3E>Om8nH~n1<+O73b$+81y#GH-E8#z+dfk{Hl?PE?cIDUJbjo_svq<()`sY zj11Vad6yk?IUDrvcb}qah?mC1MWKAQhTry7ey)G`aYh?gZc*M%HXqee$NU#sKg3$D zENAOt;pr|-><#1k`eoU|->Davn}R;-*0q>SO;tT4#_OPh8_+dq9Rq? zrzfa{pZK|ZVZ6YX9k(SN-ria+7MGKIVBw4PadKZ)=$49q1a07%mmN86f~!g~+%?P9N86ICUAU@JV;Qw$UTggnXZ)^GvcU6CpZQ|<;khTC>G(|a+h#F!i=^>U$&llZ+&|>}x$QDPSDiO=_B zVXiX@ce^jfJ<(`8818s`<*J7Q`#KiS4PTJAH}Cd0`2cTrjz(GY>t7fd7@l!5FaQ&j z5sm}}On~`$iNvRdeqB-Mgmm&GEk-9iqt0o^&-K%je3P zv*q^>##D21a=zTw)vjS?_pe^Q_{>ks_B*fb#1$ug6LN8?Typ-)%F4{BT?@H8Yy`HQ zR@Ssgwpe%m-Pc{&&)Cv>lx>vEIyJZ&(|;dfy}Vp$Vwv5vv%(LSOsQ-Yt=ja_J3u@j zv`d7?mO-vbL_6lt_C=X?myVdG$~tl$_WWG^m&dnWBwQ=Fwl?>L(7O~ZqqjTj|7qvj zUvyeLgJVzrtbleSt?;Ew`af+jD>!KqaY9>g(e&FQ1*VK1(s{vB$5%M1wv@RzNkq4q z&CQr^m$`W2w+{>6W=Kz}SQ4IBXVjo7b5odk|Bm^E?JIA+%-p?P@Oy2wqf)-fMZbce zO$!ce;?vuBH?TPE@?B3mZ^=tX%EVn*9@IZ=((g~*e9XJazv-}oypQmP#cv*_eKD7+ zxwhuaimT5So0+aXxr8fhtG4r=TaR0BPSFd^OW)bI+Q%WuE^=Awi>Xd#Hxo^EEes4O zcKChi!^9A_TQk#UzTY~tjdP!Y^Sj>A!|8Lnl{|WWC3s6Q-Kv`*G1aSAB0k}Y(9{o; z%ilhhtQQcPZgA(V<-IA5^Iw0xb)&Uh{5cTSGW&OabKMh@<8W`nA?8nU%$2qV-b-_& zx2&3TZ*tV-&!?^bd^x+;X`6o0)FS5HZ80)8zRusU+T)g4mFcG{|GJf0!Fnq`#4S9f zW2U-svP6uhiujMsTMtFn7A|{xaEI>K6?LEP?5=tu?y#r+&$f{M6K?DgGjcQkKDOSU zWW4FntT@Yq3#NB|mTh9FFE)QG$T9b62Xg}`{dz-NTu@T?o0Evh1 z&X%<@E0y}N^L-Di$VgcK@Ib7?B}0xCg)4k2735bvW|(a4b6-DBuQM^YZ|}ubW{0&; zm$7X3*!zBSO-o#WdHvj7o*Ob}itoF(QtX}N>Dk#27Z+7VU$tqdWcbYRte*Ew{q}Em zYSE{=_NMRJ7W&5h>FaN|>J;8M+-Tg8KVbv=KE)T4H)+MBc{~!@F;h#hY0Z`YcUi48 zSKJFNyL%+ND?`-V_Je1ab!tx4@&$2OCK@rX&#Znieb4hleXK1eyl+{uBideH|988Z zecP&kepfGUzP0?fwEVHX>F)Qu*`p5cvrT!Lm)jK)oKd`|ui{>bb%fO%h1kBXd*@pI zJ-FZbDYo$5%-eq%q~;&`TJ@J5l)1yD{>j%cGcdF(Pv&B3vu9-DV!&190JA?F@Gvo8 ztAHjuGD-R)mluW%$h!Qn>%w0bfz0$qIFo_F2*u1zELdGqfU`K7+`uHp$I8IUFc(;+ J&F27l2>`tQGm!uQ delta 30 kcmca4vV?U5AJgQ898Ht$xY+oZ7?>EE7#J9Mn1BQW0DXA{kpKVy diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.40.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.40.mcpack index cd44b7a79401a62fe5ca1b6de61fd115c5dd5787..0a68ff3c1e7d4bac61fbfcef2ca5f8de1a1c9bf4 100644 GIT binary patch literal 31567 zcmcJ2cRbep_kZ?QX146?l@+pOlNHIha2eTqWrU3E86lA!vLYlqJ1Uu>gj7aCvVZUE z(tWwE@8>4&$K%)i@W=hQb6)S)d7amJJyviss6i)hS$?HK1oiCH*d45ZCK{;^zw_YvIq8v!$xgM@KCM zS8i6Hwe^ys!olj_pYPX6^bPmu(8suaos;XWR@A(^W8T&>$k~7F`grMgia8I4iw(Jc zTtm)^D`9$gSLCMpe!V2X0rf04Pi|Z*T+RSj59}amC}UvWNg{Yt0DSxu@S}0$Zt;NK z+JWq?Ex<0WT(?{t?Eh!a88K4!K|JT=micTbM@?{Nh)1tusxCO$kl31E&?Iu&5Z1p` zIA~wD=dicqfp-2~@OQ_&s^4TEHTZsCs7n0kh^8E&=x0QW#du>n8JGIaZBk2IKdN$1 zIWpArdG4Qayd#1R{Pf@Q1aDl9ekNC{7WLUMpULC3>1cTM`=4t5%iamai7Md_n`c@j zKTTjz_(go#aSii&GsEpUwVoqMTyd`KOSDx@T=MPTXM5Id{GQ!>sOy%Sr1unYJ9 z=;dggasWF0^IN7MJ5vV-<6Ca_mbPGHD{EU@7cMhfYp}hmG4yZzyUN{Sr0`oVKvZt8 zYBo_|NFk1q4WiuLR zgn)?WD@r7o53BO|RL| z++Cvq$ExXgjTT3K|3SM?=-nOssfRrOQLc2>h~qW;vDL5MBBjkY)JIt3i-eLx$utrk ztG}C?`1t~AYxD_{FG>InUj3uZf4^BQhk7w{wzdO|&Dg@h8De-RP)V%Ry;dGvx#eto zWh)FNMJ_XK1FpakzT|iM!L{4M4_Vt;*Oh+zi!1u0af_Jnp6%`?1O=}CaHA<@5tja_ zAo!R&AtTk4S14JMr{tr8-JJG~4(x@Z?uV?ydu*slR%|I%P5lJL!HnfMT=^RdjF!-~ z=zGcRKHE!B7Yj8$Hr^5#x;6hEy&+# zp5?51=uo0X+}h~q;AOQoUqOLq21QJEE!nmP76u?Huju~1U;2X^I1me5DI^(t4d|@z zSe-E(>dYJrb~JV{1B2{OpfAJTX6zsyT=b6~U8VFcnE3rZG4buLsJ2>f?M1_uUw)Ij z8NIo`Z_xAvjbo`bS&kuc;8{)S;?n`i*iQ5L9)(IrjwMzKvR7!#ug&ATU+PKbJ-Bzi zx-K&%LCZ9{{uRZS63;LrV|*>sOOaJ+<6lrSdMtl+zSJApE7%c?X^VCpQmu1s z_4QmU8`_2%N!*5Me+;nUpTN)2mxtzX!>%A}OVEk-`UbLBv;qGvBROq!BL6&dfusOC zr7^p+?f%B=py{8UF3YSRWyLL4nN>NEnCHi{9G0mseH4k+arLTT*Xo?>n#RgQ=4X0B zwOW3$$z`{~>}_3tCr-;y00}MAp!%37%bYnc8AFz78Ac7u`Oi1@!Yy~2RkreT?q9Al zFD|ZNr~%z}{d~rtfg5tLl{LS^B7i;4AG=S+!+pBAI@p7aO~D{DtJCh*H4<+pHU5<= z&PZO)#IFl`+k@wwyk699^qw1}*WCcIXJetykK0U5UbecRWXgx@_DE4!=ZhReD^F|Z zT@~kv^ZcF9{g^Pv>$r7@MEe!E^(ZbxdEset8mwLjxS>GiAftjDei&+Oa$4I^3}{*xbXx!Q2>n!p3%Pt{_*i z`3d&!7SoK~!h;(!#bg97Pzj!R@tcCF`YUE}pMt0d*~|Jxu}G{r;`p7ZOn)S93ZAs{ z)~4YD&9$}ZY2#SY=Y->R)@mzJw0h^d2r=u>sF+KUxG9(5R;yxyH*os6n!KUa z4H7iN4UTv^dn&fWjkmNog?|c7HOl5*ftZ7ETJ5(oKrs@>-gBlyHBn9TDp^ZmZ(n&2jU(cnVuJ>Kc__`;+y}v7 zBC6)Ns|;g#lPbYi3PsCh=FgMyQe?#znITcECUaz&H6r|Hzgq2z~>ryT?A-@^H^=bc|8x1v)#$PUd$VaeaP)Iy^OvV>NEQIqemi{ z7S>3f`Fpxn{~F596t5RwCQ(x93gkHU+6C`1lYJa<@Ax(I=+4FPE}q0YG%ba{pIDib zSv+4+V6H8WAfM4KLsd+CXZM#IQ=2M0Gv0^A zhoQI*40Tjr5z@GmA0S`Vm*Esl_XMN->OAv2FL_qVa69VYeZVFX#r-NCU0tXD68}?X zh}YdKZnqdMVL%kZ$Y55V2`FSA_&NG% zWIj{~a4Q_a=BI&AZ|))ULN3NOTM$>6u!NRrnv%&_VpZi8+|_0GB6_!S^{kD#8D<>M zHv#QCaTdv#3{)Xgt&U@@_{di)?!An3H@(+>QxCcMdB9`aBrR)doU$iuKFlS%LW8oe zwYg@IzvDyD)8(IYzA_Cr@$zH~$n07H^z=k%pP_MAk93c0C%DLm)tE9M~({nC^CaKmhObE3K4>Iob6NQV9u z5}cu}C5Xa2#~mN^0?Mj8)`Dmc73OFQvbH~wJMD#93)(>ab9U+6Y#f90r3AIF3OVA0 zo!>&t4({OKzb(AD$Ioo z5oqQ`#w#tl8`kpS;az1XQA4Bu}}B*SA^oJ>xSb=kZSvlDT5F{aC5RbfHF zaw1WAO5)WDzD)xyWUEhpz0HpTw)*W@+kk^jrvMW8fl$~~_%t}|P09~`W!4Nq(D%2h zz87}tgD|jut^Atg54w({_aTilLViBWhTG6bTn0soJ|T-+T(zbAxzr_|HU7x-F2*D~ z-k`{JcB7GRekM6A9C)!IIpuyo$3}Udo(*N?rH~(cE+9hI@l*Z7=d*yHWNPeXC}+rU zl~bEoR1~W*>C(pQp^}5=X(*He1>6dqG36N@@BKkg^YpZYod7?gAwgSk?dsMmz_97 z%aPN@D!@uf{@ftV6unr)&fc<&q7W+cAY{m4LIrF$DTG^BxUPn13uLo3GQu% z96Jyh6keBUA|n!^m^3TQ<&Us6tfRwdsTX~IuBu~if4|Q}4#3MGRW;FqlbF2ddaos?9|vnH+IU?r zd4ccXTe{MrdG+dpGPkcGG-1n2KOQyD ztM!d78#je}_s+>b&_iAuSQxkPFU~^lzf+vu(~yxOEqI+&eSn)sqoSL)u?<-)kyDhJ zb5cv1h^05UQc)kd`7tv4m1N$TszCM8E-M~+>2?$2#dS-{4^;cF{q2{)kBz%7J&{p< z)y-(*)soJ4C23ng*Le5 z^M?O^)JNGM*58bM90ZrGJht6EY)x?PFz5@Ex(@NT2Li$NK-7R%b$8+IaDwMgjonpl zczK`CmHch8%+D-gUW^3BmEpbXolkwn(#S0&t)QTxp%IcH{6@- z(emW>(kdo~<8&(hnAiZvLggl@8*VEy1Is-^XH||1X4l%WJL1)aTtV^@ExTuOxC*#$ z-SFjp^uEgkGm=1DXU5xFxTH4gWe%l9w5VpCEO1X;he+0bNqu?u^@-S;_N5Dodv~&y zqw!vU;}BlKe}1RBT^P4tsE;(jCn%LZZ_Quf+48w(w?1AxOfZ>sWPBAF2y-!A^3eVkaQsxBL`SeG;#n;?gp2*fy-`z!1~CB*x!y`curImi@plF zs(Vj>xDR4=5!5_12%I=R3&V+M1u!>zicmea`5p=#Bvkj|%+<AIYPfut6la}S9=3oM@IG70?cRU~&HH=}0NlS8d_@mn{Ln<2pk zX8;*py*sLlkjHi-@tR!dUB_#Ftj~CUG@@``Q7QqwLSq&UcDSNZ0Z5jmUXO^zyVHkunXAvB$-Xa!JOx*Gt~c;6$VNukH}eY(ZVEkMVD$EMWT= zj@>@o<9v8YPVws4MfL%n?`W$Qwx@t@0Y=Pw4;F*Gv#eNv3o|c&>FMKy|YM96$Y?hcYRSMcckB zrK@Q&@qPP8oa7?MWV;mNR|*&B*WZ-(FnQkH|DtZenXtq7j-FINM`&=`ZvNp~U8~U& zG-#(2{j?Vk>>c^oyWqa&JGTC#?~$;d~EFCP>FO~3g(Mm&8zvUBXzDQXM;UF z9O=k>Z1??eAYP(3C!9(0tg5fgw`~%(A5@)ebsxs#Sj|_>S5SA6Q6L%2z49|>XS<^n zdm1y}8pyr)bjg&=q@?Ly453m&^_EEnfXEaI$QJM&(kk8W?T=jj0VFa%=PFX);M0{K zeXbl~H!N<#xe7&Oe=q!WkS^I*Y}N%F3^?U8w#ovdG%c||^YhB}hRH9xC<%@I`@pF}x9UVx~M@!5BT`!&T?Qg}-a~c({MbbUFbkF9f zJ%}Xu=$7@IKnx_h6volbG|u%2`KPHwuEfzXEvd?AG1BoDId@R z_pv6xdT0VJZuSV8nhQKolm5?)oih%!Az zsdrA(;f2qJu46V*#AZAYprg1hKDOBwy#z^Yx`N9dvXZV^V4=2R6M>(kcdzK($*%(* z(XDq~A$7~L)|ivr1Lr>baFQ_<3`%GzHj@GA!s)XfbE_~Km0q{4b%$Cqt+ul)lMZai<2 zB~Q{CjY9J*f*@?)E#h3sx#mernRhB>Mo183-IL~+n9=(xPgd8it)YQ4|0DTcrbJ2& zXO2YIj<#hS?!EgZp4Qt)`A9?F#t>ZnVA4xJ0oeHQ4v+27+M$)HKWXceo;u+2AgB=t z#DD^o7BfnWPuxERs-W=YE9>;pvne~9%+OOW2Too5lH2&;eSYn8jC|xh)-Qkxxa}F+5Co;AtxjZJ#*|;hkNKxT*5Srk-`D| z-Q9iV7tx>G$(Ks~9}jXQH33Pucdb7f$JHEr)1@bUXua5luQ^nD#WMq`2UokPXRYKE zKd3O@*NIK{5?9nh(BR#0Lbi?DUiqb{RqP&c`8IWzH`Fr#a zp6kv5RDGh(jg7Xy1JT{BiA>B8>?@|I#(=l?5L9?H!85P3UD0 zak%>=3)ubf4?WM}*}H(;LH72Cf%wT0qG41yK9GrlIK0ONg>RV*?(d*GhZn}4VLAxl$3!xQViHIy?$SG5+Twpwjz6kJtiSw@@kQmg zsHS!BPP=M)_42n@h7Xn|#q7(H4=#a+=*tff4{-d>;XD8=vOWdci;6>turW5tA9p#Q zYfCPlNFv-?cKMJPKM=a9sIWove3)NYl_p|yHc<`*cfcdlcf&Ur#S=>f%MkGX`0YDk z-XS3Lp49lZw^aOLCD)x=3b$5CeA9XKK69ht7(Ay97`%$7lXQL;XTkLn8G~7iBwmB9 z;ER&qoV!f5Lpoywt4tz{f;kCXO)=b;H}YNZe!sAijdu5aa~hoZ^CP4#}&iQv_%og^>?(oHfbV_A(f8bqZN}JT_+1n$evu7oJy~ z`Ir?{EmGb0^^A|>0+!tP;HRdU1aC)2)Ct@WdhD1&W($)9oobc%)&8yx6jmXojLs&@ zvt%F0ZdbRN8WjkxDa9~YzoB8Txv5+B%qzlZ&ErZJEti_9Kzs{Nu=Mz|;htT0BMh6u z-pI)HhKh?a$>RH4b`-M*rZn?o>?VYUBz&wk;L!t=5^`d$j3Io!UgH_{a~1QzchE<) zC*Zjc3J!A29+0h1w`wx=%SmNwIpgcI3<xBRTGv=$T{#MUBz(I6t(t zfH!o5B>(vy6i=%60X5J27m{aZ#Q4IT)k{Y*I=^w1fP?f-AM5J zkht;Z!PXng&>Zf*6&|!4emr=9-||7l*V)<~?0f>)VAu;yxS#>t4tqIQiLy<;+=#E3 z5C#A``^)Vjq3qgTkuU5YWgGhDWPl7N?m*3#mksU%0be8whGvmi@?!fE+KF({KQT2F{3(V{)RshC13xpGaKGbgt$Rn6$tD+OJ0qXOI-`d zt${?0%=*Pz{*8t-)V=F_5LelX%T^0v0GxQsw?LMbKmqIIMQ(A3#ot{v9V*H$z$~Ox zeoBzqR*2gd6A#1+^$EdQx5V{-`DE_u4semFOsmpWRPsm;8`b@C4?)K@h(~gxnCUf7 z@GRp8@bSHD+yyPS;wCl+eg3-({?nJ@2p|3+`7|Ej`bsnnsB#PCxhF_wf{{v!2l+;` zewoTq+!rC4tNv}0?f9{c$tsaCC(W=qeQWPZ^l(GD1%X94$9LmgR+f>U5<_$frBD~J z`MBll6F?ouSGnQh1-Nkeq$Dvo@JPTGRzz|?T*a{j`44y`Q8^c?-=Ii{ zarOX9kWe@-DB?U2yVWyO`9N40z!ItPq|shNx*uzAkMbz4xRq6Qcj6SW7^IolbkCXo zKvN=-sAJ~9He)1S^X49&O%!e2pT<~eR{2S!!p&Py_#o>S*REsQ(%F%2UudLMO5*Ge zi5ZU%7T~H?C&h~pLK9#CK-nVvI=LEpLWXY)VWl>*jn>bd3Q$0GZMCY$9sWOcIjoLp8lWzh0-6Epa<&oV=Ecyu8~_xP`47ug>c^I=?EJqk zQ**3CYuFX9qY5H{jULbP`M=-*dd?@^vR&jqN%*0nTLdVsvlrr=sLTt)A2T*-tS>Pd z7SW6OHExhPJ`f{aode!R6`o&T${TS9?%Z!m97qbc_@vP*Gsv%kqxU+IF}Y7q(suVA zk=py3-Z!zYhb{tj8qo{u*JQxXk2i|nf4j_a>+9@wXN3<` zcD3)kp5t#&79Z@pIpcLq9I)>bLj!9w@Sh;q*u~M>27HntEM(_EaBxtv#}08$?L^J5 zfCNV4bUooqeibW8iPAqfL+l_Q@^CU)YZ-UHgtild|EoH0!yxE=F-HX&x1j{? z2G*arXs^n-1Y+CAhX!z&Vmq)U=z!yN60aVkjNJ-6>Hx!0#;U^V!hPN%P7J9XDfcnC z`3al)h>y3JF7co3!x9W@EjD5d4+ThD zQZv!gu2#|f87-(y?j`dZ_fb$p^LY`S&vI2DEr81QXgErrTfBgOV?^16K_H-Ap53Z5%76F-~gi+Ve>+=)~jg*~4L32BW8y$>0j z5zJPPE~gi@&SLt6#i!uPSQngEYk!s=}_Q7xYCce3Zwa?DosXx6?Ad`quJsU2cjn$pViA@6I&`D%^Xe%ZWTowQq0 zcV2GpF|n;f--YOl&w@_Hf;-5cpBx6pC_^FfvT1bzy)D~1Uz`(AuFOm)CMEG;!HXzb zXZzVJW~u9_h@!h~!5L4lViHnM{)+M@or1Zhs~bHx)e~O@Y}|L){O2{hp0Vi0))r0& zKbuW^bz@Qa1^15zvB4jT0NG3DXO*8>4& z>X#p>20cu_xh)^=k`UdMP`eojlvsKg(OkZ5Zwnj6ym}yA%T!V7pOlww(my5H zh*^6D;z2|OiX-v>9nc-C1GuCzq_XdI3ZMv4#5vi0a6__bF8$hEZXS$n)pc2{Hi#m$hK-^J0vKZCtD=HZv3#|KOhb8Wc|bhU${gW% zR!VI8(u$ksMjPJ;ZV`NZ7XYd$Q}^zCO>Mndx)yJn-M~8VqEO+Pm-Lfi5sNvl7p}6K zpM!OZ1q*Qd(|JQ*Hb#H0#ZPAIF1e$!dEIY@Xy)s1(Nf$Tw6qY=(u5CTL$V*M3^;>0 z2o+Cc5Qj|2Pa*URsynfo^{%o*c{v$ZaQ7#w1I^}GXC{3*4Vx>3GX{y62z|&N*=(0K zP-P)qrHQgiL+2;j%2{f|2kC*@tb!rAb*o-L4PBcZ)A{6|CIUd`M=V)M-^o{su~H-7 zdNZkQRJ(A&XEo%*5_g8i9*+|Ng!jjPzB^0QaC_W~wwNi=fIf9gSAQ@pSjawcjfH8VTLTofok}>ajclhirWW_9 zaa>0(&oondxl7fVr7T{I)GaSj9~rl7(S6*$@s5Beeh$$XpH&C(y~`DzfgofVeU|84 zHIFOiCfA!JLi+_JNo&4KcLgg$RteyR@k_iVg_L#jmU z=cPg_z{;s+QU4zFj&^Ief?&5itk%#*()PCs&`1H)H7os?jZWP?p(n(hq z4*Vji`zCiNT7@n(x}B(se~q~0XX2GtxF4P-QYVzY%n!?Zcb`cw+5{*`>QdEwdOB~; zBdi*Hui5XxILle^XR&QFb(NfY?H5pT%teE*8bbFC-pynu#5q06*wTqDy8_u?Gi8=&vX1&-&zkQ=0XtS;cn*$7n9lc!w%?ak#<6)3A_SX|?|?J@36M%2s7 zxY;PNk1ZJXPElNu9^wWrhaiOkA{UgbFj0SV2z#Z-bJzeBA}Q(3DhTx zY4v|(@gX?7XqS16SHVLWaa)_OB(O*HhjC>ggd%Q}7d0(InoKujt5jpsq&s~5*| z2(B~VA8eZ>j1=u9z9yWbw9w?T2X19d&D3+ermxIfcz0N!Dw`mMKn+N=+l`J>y2fNMJS)H%)yB!D^^AKvf# zc^hgi_P1C3A;~D&V>JTrZvJGqPi`o7k&wCuxln(H%w@XIV9-6-Bx-%CrL;%P&>QEF=#fNqrbX{;?YbR}Jpxm}=^3kG-O%w{^i zIydl})hrKb2)p?A#Vj7{$7f3tYM`u-iFN~*ii}SZODMk+mHcm8YlbFACS4Pp$gLND z@P&FP9!mc4yWCs-_lzzaIJHA8VjH_y0eQI-xLdargK{=bERsMnaQMfw&MzF6He9X1#^4i?#SGQo01bP%JNLKh zIK~MDmMk%)-@HOn22oW0UPiuBHkx1UG5o#6M9hG^ok%3sgGYJ_-`8j95fY?~O>|X& zpzdPnK^gl|%A6iCd#u_;a%r_K&#QOTTJw=+7Z(g$q%GdNd|DyxR)4ta&EJ&8p7boq zZb!A#OTO!Ep=qX&Xur7EsuY?LAN~FW77k@$*;r=CXUFD-vS3notQ@6#A26drsCIwK ztSGHROZyfAq=S%#J=J3`0^AdFs>FpMT=a&5@EKh0+yz)qUdF^9b2TAJS>2)bFecnGH-XKI zS<{2}Lf>@tm_!2a$I|OxBH^!RD}R|7Ls?I{p~++N55Dr@)qHXa{X?t83&jeF2KM_C z_&J)&07tM#Xxu!3*@J=N9+0sBihJ%PsTI6G1b@jW6&IS1$dA=goA3MDd7Lv;qg!r> zc|j8C8F8(l6N40k8dA}$;ny}9jr(O~n$N;~UZ>v_tBwR6du)|T*%XZ?zB{BV|8`9E z`D^{{QAEx8$eiw^_o?W7gbL!WeG((`cC9m61$T_4?RTc_yi(Yc#EB3pP_#~EY*p)< zoxD=IZBm%CK&W?r`DZpd-@@I=> zY}ZwI(=e1T%v+LO)SqQ_h#>d82q|v=x+8yyy!Hc&Po_y>lTr#J>BW-YOKyA=>CDpY zRzj;|RBjl*GjFq8Nm29<{+bKT&FfATF52Js!BFmk?)~%3Of00ldwhNpE;s+DICIk1 z(C~jtGj|7BeoWvB3_KS!eu0e|y7ZB!;Sjj`Vv=mDok`=mI$mt-{#~ z>5@K!AK8Ac(xXk&jJiNXPJMo;w83bpX7#cj4y%M5-+FCD0SzbGmdAKi*D5q$Q7)UM z0wJ{=AC2-J`a?vH!y&Ku1lPki>d+jJ1h_`5r$rvz$h)jKZk>mwis?~PM)%w?*?-dC zAGrs}STHEj;}1v~(2j3?kVJckOz}q0;}tv1NV6wY5$BL`&9CjBj-+LT zjwI;-3afNL7x>3s3Am1=|0SQFE`bw$P`|rLkX=w8IQbml`Y2{VxIWQ6G)21}n)ng- zs$P1%a*#K=5XO9I<3b4sIr=<){?ZTMU~$IRGbBNHSNOm#9?7yi96Xxq-R(vI5nb>; zN`l~(YjW4=DLyR}DKg);u=$SJ=<_39DWT#$$!#IjRH|g@f|T7SW;)f)X`kbeU%wgZ ztyy_@YmFiQHN`-}Dj_&(bbWW-eS0iWivF`K?L2K@@Ge$OXO7-?|E5{brLA9%X)KTc z1drV8(F;IZX2)s^&YL1w&I!x~+zZWxq7Kv-j1$IdVw#W2Jq6vAvq!52n{S}dc|1)} zRd|wXF{cX9&pGGh9_Z8K4hZCziqtp;H^pg`u%meA>Gei2ox>%HOuQzNBLKiC zH}%YH;!d%VZQNA?4e5A2O0Tc>1qt=#tZ_P&PT>3fugC81&v5#UOK&}%&4-k^UT}F~-RHo8Kc$SLf^S6vj6)M|*(zlMexJQ#J?MwZ#B zNt5up8n#UPgkrZw5|VoIRKEiT@D-I%~N#cUVbW%)(K3 zQKKt#Xu6A20u1Fw`K{lx*WM4~N85~^Yo;?N>Il3`^`gdv2|u1qLTHxo)2zKC874_W zhRhgv_64)(PvMZaV&^~Vn5}iN#C&@bUrv}aY8&0rv+jKZ=gY12{$BUJC!CytME(YQ z%Q|16j%A1P;e$#*OUlQZ2V5tQEs!TS^D;gqg9xGW3+vR9O1>b^Ty=}U!=WXx;OhSV z6t~T`_1{wS;5L zn$zT3Pctho`Uv&~Y8Jdgp)c)HK8w_9M2|s_sQWV$Jh?m;oXAZDV?IX3E%v9LhcL)6 z`g(IqY3+PMIVYgO*L>gT9Y~Mk@umXz(7=0?6I>C)m_A6RJQ!$&&aINZ=CdJ^oMOQ= zuuE6}US?%tqBQjF95Ek1Z7Q0rM(F4Z{RGsrD6W0EHl>{D&Eb}sRbG!2M=VzpKaz!@ z$*biMy8LNQu;~(2vziW0bqZM~zxbT&HgC@RI$k?Z^2oSrZ?tkt?~C8Eyb>t1u4V5X zkgLy0NQtebr=S0_@!19dym82dShBW0)TP9gcy4-#R)0(3~_)Gt3s*_&gLcLm-EK!P?l+K z^kBIO8aIb-m8Y&DD?foa3er*inkAsW@-mtY-RI#pz0C3R{0X0%_U-Qrf}vcZT+O?K z*?-jnT=4OSS9KBvz%wAw+^ooZr09i&lb8VFC^ibDT$bp)w!hB_nSa0^2cYc(+{ykY z;;j4=an>C~oW4NB$ppAcaHeC+xpN1>rn$8Zb^1TSX7i$p=IdG7RZI&2Y^!Y*KsuQ& zQo2}gZ?C>-y>Y;pK4Wk<0D`s`fS;q$_WzA8PTaS6z?zf=Sd#>7oQr`yvaf_on1043 zyhWQ{QXRSQZQ^&|3lfOga}+BEh9cGd8hW-16uzfZiS1~tNPmq+5>mC6wX}t6n@*l* z@6;~P19AFbubRutd$$fH&HzR4{2OACg3#8rd25fMennTV%x4(erWU(exiL2wOVcz| z@0a>dt{@rILeu&^xO3ruZ>fOW?qNyvB*zOEOeH~Up=9|LvXELRlG6q{sjT=`!@e$r zCb?Y(&?FiDAq7Kdl6-IJsUp$K)R4mWi9@MB zMCcRqBms64v=F*4XDFlaHY>JdMkew}r`$P%X7>klYg0D$GLBCa=a*>eP$E5_Job(| z%YhH=1aP3fWHL(NZ8sf;lMwN(*%a#)iUsz(R}_=enSMoZ>x|YUM@7Q*aAmrddL-id zd&<$V4J?D5T3_9m7N4~S_T9gy14L5!FTSTFJ|GozxD+p~&)CW(I1WIs>~xRI4yn zrYIZ27O5;JUqDOY7H``K9|h&vr)|04#fElPdAOTn1HNBOszy@13!scjkbZnw3{XaQ z_l0GQIBmalvnE{ zXgQ0Sj3M}sk^fr{q!51m+XlC7gi7ZLY~DAf*&YBsAye%DK)$dz@cE-SeS&ZX6XA7t z?9h82#&2ngcU{_r)Z<$lpjMm65~Ts14d?f2*Yozb>~5dXBb1Vm zxv<)8rq99eSip9bxg?-3mp(4=34uA95rB>5yWEB!*ce3e2~%B_ZeO?`Ah;PcmSa4l z>Ss#l`*<{mKwN~|!@6u@bM>?Hq94WmFE<}V?m8RV+xyW{l zB+^zkQNt}?C9rXUxPt*fy)*wz(v5{iUdtkf+O;Kc#x0<8l% zOm}J{-;6jDj3k$feKnn*`0hj*NHm@F!+$G&58X(q?N+IFB2zPN$5+>Mu4Tu7&Tv~P zV@t{uO#vKb#uOpPoNC9?1~U|QRdB!djs3uTSrk{ZvRnF*irY8}3F<06w78AYU6?si zY-=X`(Vr6dIlt_g(km2u{`H0!&^HpeVBtW!=bYDHPVo7yx|V*zcO0Ol--B!?;vJ7? z9nu&*HvJ~kNV}j)TZ4I>u0^jPn$rRxor)k1VgzP_GS@sq#FMswdiDC+`P$p*c zpJmQG$I_^w6WIVI7sa)IF)IXA!FsGJ{v}WSrycqPSM2{|p1O^I{}ZYWnl8`-pHlTE zbf|0mAWt`4A~O2=2ki#ZZKZsPmzN5m&>?Nz>(0<5)DGLDNvS(?IC*~7jdCFa-j+*p?J{u~()9keR;ar5mH_#Meb3O72qs870{r>P}ah#E~H6$>ZHA z971-ncku8scCmGEJfZ2s$N^v&Uj))(81Ifx4&{q*=Ev>;Ii_u4EFc51?$;wN*z<4f8`KarAb ztP~n>qe>|02D9j(ky!To)kJI;1CGmCRKiZAkfJcr`QF0sG_8)~ls2TZa|(HTIuD!! z#dgi81826Ne&AfzveMtllW_d$KU9&E*J!|Soo5GZQey_}=pYUO2?&9D5<;M+OGv8U zUNC?VsGqPXPJaabL!f~YsDWOLnaVmBN7T>QA%xf+9|+mYSlJAiSvRxe%x9B}`N=(L zksy34<)XQ$Tdgu*$$&cE$n$kejPW#}j@MhuC-g~Y2&m(6LhE>;_e5}8?H+J#o7iYA zsYEW8ULGV_*fdyps^kU5mt*JSBOnUlJ=Pn*^|?d)5X?c&HYe}{|K=A{+oVVjy71}~ z60?ZalQX9*8_{e5DycYxN(wZd720rLwQ4G7;j~(P1k^R(M+GsEk@6%~Ircs=LlTq& z_b|3Qgk|$xJnJb0C7ubqZ@{x^H3Zso1C5?`ULJM&)f2+;TC22I)f2?L`8h`)!ah^U zGR61xr|wvte2#w2Uac51N=v=$i$mTN@xdr9gUptPki<31v5J7>jvT4mA70!3qhia7Zno>(<>^KiB$Jm1Dm{A!GcRui+486z#Fr4VN~9Uh`AWe{q9`6p+UJdi*!M=&QoF zW8&Yt29M_DxY4wE7_ZagCx6ad-nM{M=QuCD&n+w!NCyVsJeha4!8qt20Qen=#m>EH zyeJ#9J<*C0Q$%w7kq!?u8VHohOhkf!!HL9NC9fX3|Kx)XPBge}h~Lhzliw&qWbroB zf&$WM3XT=aAMsDG=O@n2H+-CSb=SAPvGO+V&SG=Vbj0vPaMg! zd1R;b?oDX3e~p$$tbUm~6J+`ozb7lflUl87$*92etIr_eWe`Rj(P-eyXhELbTcsRv zCV)+hwbcHKCLa+<64$cc6~ab(C|X8XnZrD9x>@#OhoU#N%%mctT3axz#0$-@=xnj} zo|G#a4G=_0k-q8&``4wv9+!_Cei_!Cc(ecR>lGio-$bFZ>q9@z4k}$PMz_PjqThT{ z9$}Xfw*BqvH1joy!tjKOMavskUd4T>dgc9eY7$BuyN=`G1;NV2$7%`=AeuW{J08rL zJSkuXAI=qoQ3`nhN@4ZmgNw7ylP7X_XR~o;s_C~0Z())Q@v=!kX@l$HA}*eulM0e5 zg%zQ@qIjD@2neMwF0i-ovf#N49o`nYZ8uWWpV1@$WS#^dvkT30;+|j80)HTL(MLX! zf#{wGcwAa+y@sBk=^w4($~+32XcC)&BI~=pR8Oy(MLk|1y!#E(bJ5l%H0qyx6Z%RP z%@@WM11jM^RwZz-0T_D>bt1;l=Cu=;Q4}!f1ZY@<3_76(OO#0&%kxnxKcWb?ufOQC zp@03Nox_|C&y>itP$1EIN?*jKa#X8NA8x+x+XZO1&`$laJ3wXIWCe8*lN#vMcVUwM zSZWLO-h2`dF`AWQZg_L`H&rvFQJ+!uQ~S3ZA?U?3Rga!UsY0;<}}?sP8$OJ2|x5Vz1tJ_%6AzBUS1n~80F7g{jA)Yhgt-G z=gIBs&LU8}`DDI-zYWk-4^&e~$i!z3=k>x*jm9{G1^g}eKd`yjXa{q#HIxy58-A)X z9>Q-g0b>5ooM|{2*k`c+EJFvs9Iy!d7vLhF`Dd=OjyBwH!+$^gBw`MP-2?35+1b!YV6T%|y zn6O3uHj(uR+3?do5sxw$FzY`XIKEx@2+8mRG!a!32wbE;k`aoo$5kDVSOk73B|m~{ z!f{}Wz!z%{Zqk2P34WR*Gr~#_aA7L}iaLJexTp| z>F|Zlqv!S=u>$-S4MxobY4Es1XG3 z6T<`_HG%C2<-pJOLUcH!q%fI>t){2=TKMr-oCsfwb{-}f;b2eiis5HWAzoB5GT0hN zkJUOtC-Bpo5KU5)947TpC;!1j;Kw9gM9_^81#E@?L#I83>fvV(A-=FYlrZsdPT>@y z;V1jBB7FH}Dwyb#j50bx_wZA65Fb||YMA`Lu|AHF4L_s?@m$$yV6qV%!BJCrj#vSH z5)2!Hb}rJwR)8Y0|F{MCSu2PJ&vXH{z|m#XBR(5`Y6%a*XEOre`VTfZ#nhG~mVqA; zf@t+T^sr^1+WAii2Y!eKqVm}oVB%qZ_dncP__-8_51}O^Y=J-5>h!)0egp)f<-0M# zq#qpZspAj$Sqq4=t(XsG|7E1a5vK}2xByYM0Sip_-)1))Asc=)0HU|KbrB{T&J!P* zwmm{Vd`CVaBr|7)$vAzkE{4*DY& zfN$7FganctumukJ-KTgw;M<)MO+|(iCi!pe-$#5ke77)Sd}GW7lZ`+s_zxZcz8e>D z1Gl+hi~Ow(`G^g`cex_E_B%W<*++Nx9w8OJT@(=t+~tKy{Y$^>5u)K6F%dsFo)0Ga zz#X2#M&LUY5pPcdKTPTgS~`#TX!zzoMC0zf1QQQMrAIbD9w8aNbq*2l4hp~|BgDR^ zewe+lP`7GLWaZQ1I<5h;JySIP9|z z-TA4p1$<8kqEAG<0+as-6`j@^;d?B25l-@~1WYy}Vm}PsPoX3D?gYfV6{RF>9fVl* zAU}Ef3jp5^fOyo3Qm~Z}c65quz_aKtA*f4Q8YUbu{Rush|L_vRbJY>^PF6CorA|oF zKjOZ@v%nDz%T5-y1pJ|#LR0YEYDC%YaxmHO&iWLx;i=4s?&r2VO!hHc?IY9yPZ>sZ zKh{@aVxjKmv^hk0dM=`5Jq4KLLqvHBRlt*75v^Tb5hnSsWZxqc0#7ML6t1ZR6aH8B z>=DA@$(V@36_sJa5#Z!0)B;aiL=YxxxWYyg*FbXI+OaaTG1(h|h*+ yE+AgT9zB@M6A(C#5D#DON3`fkeVF*alObTz(SXA4nKSypKfFMi64L)LVgz7k5M=Q2bawR%b`1^TWnf3hFff?*ZOl7tAmChH&w89C z3r_=o%9dJ`rdc&yC-SMd6u4y#4htR0HQ~B? zmx6m=loc%d^**tv{#N+yb+4tKl`CuPU0SDit;q9ZM+C2(>;1Fe_6c$)o_>4q-uJ+j z@8_m&yYPoGz?+?;ajM|O6+p+|2jT#nzU2k_Ha9UZGcC2aL@%p2KM%vtbNe0hnhgY8 z-y3C1-)!K0B62gF!}m>LwrEa@LXdFbcZ*1ql~?k1{mcLNr<_&%a?9(2Wm|qoJP0uQ zp|EAjg929XZqK?nc}|t6N7Hy@FV={q^VG>~tZ$X&*l5O@2P031}{oC_-PPO@x8I_{v%6!*`zp=pWOG#Z8Zg2 zby(i)RKAtFL{BS? zeE+wO85BAdm^P$uOO*{Lj4eNavc?2A<5VUBBK-TbTGR zX`TH1p`^Y6%f}gKn^g*DENFhcbLYI<+;a|mb_pvuF}Ktw*sPpy-h$`_%TrpD*Y&aP zh>w(;k@D5OB*krtX!CW>oDYUR+Vi`LqG#6C_44X@G}^QM*meJu{yksYmWv5JElrcx zigIl_eYcxm*X&d0%qJVP&l)XQy0$56>%Q9eydqLhj(%(z2P0SBvVkpXw`I z;(W#0N&D{VGI>L;WnbnyYTjMJ7Weu$IGinw7Cbx;4BKsZ!jA4WAi~ltbZ?C)baDxXQlQmiUmeX#FUbA=Pvs5oiTfB&fR61 zdm8xf&wU!5z*BN<&Af?=xaHU;OnsxJ$@1pG8yl%h%KXVQLR`|GFXuSSB(_-5ym+C` z1D&d}#m-(#^CLIgEu3YtlrN$@AvWbLZ`!o7DeD)Voh88*DEoak(}L{=C%pEAtIctm zR%dZy-}}!QQ=}$b@%8)odXCBZ0<$W|v;GzN8`hh%Eqb+I!emih&MbS$jDK!%IajO; z&FgQM9Y3u9x&K|0S*>xVd~Do$uRoiT-v9Xa@1kMor}(~X&gioqYO0anuB4q-|bKO{{FHaXQ7R$EF2PJ#XJwXY-fzc7dgfH0(1B13GH7_N#C_XtqucRnHCnvRt zq{uPGZbEWVYGO7hZZJ*99$iZ(IOZJ!7e3x1ksF>et=aXOPx15t^`2KZu2u*My6&@f z?zj}X`(@sn|6iWn7QVZw#PKhK<{aU-na|6jw=ZpDdCB#0`kauW9<~d0i{>w`W`3u{ z5kKcv_${UK0Lin(5pLy2b-x6j&FEH;S=8AloXhhoA}?&kJgFd?E#iALe$|}Mu3L3h zUev~IO8wUvtox_Va6Y}mH}Zk<_VT&%>n<%`_+H`L#F!svCYHuLbvF2FdFZb5#}_+9 zH1~h!s)?1$d+CMlQj4 zQFOlp8i7`(BbmX)fUB%Sb^#ACfxt^XB;CmFN6yC`m|i4DVJR|@%*EvUOB&BFxZ0RVNo1gro6 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.60.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.60.mcpack index 3270bd625f437deae8fbf7fca9f03a22063325fe..4a341624779a75c751fe3374187101b7f39e9272 100644 GIT binary patch delta 1431 zcmZ3&x>9fhACnO?3l{?fC_-rn#mXSakd~ibtREV}%fOB-H9@Lg1tyuBn3rCZUzQqQ zT%MR)5D(N4Uz}P}l9`vTmsOmfhoN_F!0D_b20VYnze+V-&JF%>ULyIlVY+2)&ysgZkk8G9`}laMI2ymC%YBV$++&!fq=rih0J)K9I@OepV& zXu7a$?j~l}l%*~jp%2WnzwYs{TdXaO4mNx8Q}dwYya|;OUM8F@9$bxZz;D| zfBV9gC^zA%|2c~zy18d2zkS;m@AoXm>f`n2M^DPU{mT&G&Cc;9!GFf%MeY(Y#go-Fm6wwqK232hQ(ZZ?e!aob zBWHYighf^rO?vZSwZgo}QlIEQ{maZ}Gz-l2v`g~*=i(^m6eYT>fq!o4Vffrk#oS?{_Q2dKRq?y)f^jNX~0z9WjB~ z6)fk~U8c90xYsJDg-?xq$MS5hRg-GV;?>HEtxJ9vS;}PD%benC>^dtF|LYzooUa_a zQ*sIz&L4r{3`~T^I72Bh8F}sZ@gumzuGIoddmsr0gfwAIf+hSUYtGQ>&4wC?nNm& zm>zz*(yYnKXcm9b-KMe^{t}f!bEkh^A(eABVX;P+ppm4uQ@f;G>zAr~ZeR1yyUf1JtSFur82#$kjymrrjPI{q z>ylko(ge}DmN#59?Usm+j)iHiYO zp}>h$67VoFK#GXTj!csE$hkm;0a={`OdY|}f)!HI1bE|if-s8FMa&G)OvQ_mt3WOa zKu#}4DB8BbwV~)DkikHP`XIuJfx#HX(Dy7bx1bw}D?LtbU=rhF2m09z7(%gZpr8c+ Dcs=>= delta 32 hcmZ1}xP)~BAJgP`wk8o)HU=PI0>UOB&BFxZ0RU?g1W^D0 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.70.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.70.mcpack index a9906f9579383404e44e20d46738cda877f21061..bd59034efcdbfe58e1cbe503e1367b63e93043b0 100644 GIT binary patch literal 5379 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 X;D-@LAb>z1cHpJY2m)oZufF>q!&ev_ delta 30 kcmZqHTEe=4k7@F9{-(+AMcDY57?>EE7#J9Mn1BQW0EFlUAOHXW diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.80.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.80.mcpack index 9f3c0390700b9e65140a945de90c0758924d39a8..d4aaec2679199592b361e5646711ed11aa934dae 100644 GIT binary patch delta 631 zcmZ3&x|C}JACm(!3l{?fC_-rnCCnhmP?VaNl3Em>oS#=xl%JE6T2!nb8p6xKj;wHk zRJ{durO8F9sRcmoiAA~jMS7TK>17q?=V6$)HNY|Jhyl-^u8WzQdDS#UPQ_KdS-Jh* zsiZqDo;=&8YMtBWed4}${-JNIwl^l(9?o#%t}i)qP_5W;o{X!7|kItQ4f5zkfi5p_CTxE}3SYYjc#QI%qyV}l%S1aVSV?|#%=6W1ATd=WCCP#5W z!d9!NN}m4%W6TUpuPshFq4{)<>Z0<$6ShsAVetEj+xq~q;FrsVV&pq7-m%a-HB0FH zj&-l~1H9QemQLLIn4gh>fr*KMA;6oFNrXX!frEns7!QgJjgw`WitQPhxEOFnBqvgQ t@c>Q0j0*k9j!cq)$hKH8AnWqOu8U9%Pi|lm<6~i9VXy|e{R%V4835(a)>r@l delta 32 hcmZ3=wS;v8AJgP(%uOP!Yz#oa1cXgMnuiI*0|0cL1iAnK diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.90.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.21.90.mcpack index 686a8660fcd901048f829bcac26c8bbb01688b5c..e6e2d2bb51e18e3cd5a7c38b39d23491f71d19ff 100644 GIT binary patch literal 63851 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 delta 33 icmaF;iFqUI25F|rla4isu(B}#0TU250clAl5Dx&V2nLY= diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.26.10.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.26.10.mcpack index 86cbc5fce7599b6d6bda64a6ea87ea9eb921e3b6..1553db886a68b4f9be74a68bfe76569aade62a96 100644 GIT binary patch literal 19427 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

bhM9N{JEn{GYt=iV+ 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 delta 31 lcmaDnopA~420o_AMpjLe&wI1+F)=VPG%+wR@Gt=h1^}4(2D<)LVgz7k5M=Q2bawR%b`1^TWnf3hFff?*ZOl7tAmChH&w89C z3r_=o%9dJ`rdc&yC-SMd6u4y#4htR0HQ~B? zmx6m=loc%d^**tv{#N+yb+4tKl`CuPU0SDit;q9ZM+C2(>;1Fe_6c$)o_>4q-uJ+j z@8_m&yYPoGz?+?;ajM|O6+p+|2jT#nzU2k_Ha9UZGcC2aL@%p2KM%vtbNe0hnhgY8 z-y3C1-(=%Cr@3jpz^ogOuW3o7C|)H%H{jZ_j)cf(RMwaz_W4r4>_f;`;Qja-SV%zD4|zz|LYP5 zkxc>{p7)*1W!C-qL4Mln>wmI#+N^yQ6h77cbfD?1@UE2JEUBsg;KJUEc;qF5N^?HhDc(>kR3`%=k( zATRy3fBxPm+{br_tw`&Xwm|ZSM+#yziv+U)8{QL&9j-+R4yuFRQHQVHZPpE>b1kfPgcMCrbJ0(`7G%nwYy z(hyoJ{j|BWs;uWu&`b9lkOe~|9$k+p%3NvF8%X9e*IQc ztlC+#H+q((GFACSDVL;QlpQ_xz_#w?GX=HlvlqNl9j2I`(Ls8+03(WqAHhe@cWQknjXCcHeZBq@{N z9hkCmPvkM#m?L$!XZ%$=zr*}I=Yy*(%U4(%J$upTGJnC!#_A?lJLL&4f0Z)%@;`XW zQ>*&^*ZFIwzu&QGU;lwgwf$taw86XZ!oM4myG{Pur>1CEcW#uw66XG)ZK=$+Ej{Zd zrJA3cw&qvH`Jk{j7pLFviTP&BJooOyD@>Ip+gA&*zf7w-K1*J|{ESddWBFu%(}vQ+ zEI*SZ@}~VW7ugx55%_sSKxoE<-(1Fv5==I_)nvMEochv8@_ww+7ds34d-vZOtnu0W za(DL$-Wz;Yq16d_OmTj;&2+AnwOFa%!B!P zB}Mr;IjKb?r2sSRCcx4|X;P{lrUlrO#nvF-d|>YWtF6e+BHVQ<@zRykeb#Tc-ELXL za>r~|=C+yzp{oCD^E6X0GZa1)I{EE$wf?r~xQOkcj_(dsCTGw4ytG0{GQNQQE8Coy z+g29c9;NfP{}Jh8cKFfZsuFYM0;AW4XpVJ?%hq$O6FlaQ)Ox)_LVD z2oPjmIZ3?0O|f(D_CJjgaqVX~yjHXFe~?|&%=gv*+1mi=&@^k;zfz7Nr@WW$EtN7e zy7EwbNB1W~sU^?mEU}xq_@hMr7DwS(7q90O%?n=~TfgDu6koUGW$%6qKFiskF8=n5 z{pKy4A-rd0*S==+;+K!^SmW?iJ9v6Zou-kItk&bqqNlwUwaR|6$5J1C?C{Pk{HwO4 zcgz0YamO5$Vk583jJ;FiZoAvY>i6WQtEXJz2gUKU&dFzVfpP2tj$=k95e7t+javJmMKTH5g~+MG481A_!YyM38p6Q90fgzmh}Z~j{{a9CCTk4< delta 32 hcmZ1{vV?U5AJgQ`>`fx9Yz#oa1cXgMnuiI*0|0af1g-!8 diff --git a/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.26.50.mcpack b/src/main/resources/assets/viabedrock/resource_packs/vanilla_1.26.50.mcpack index f8df445cdbe26be1d065b98ef09be583684bbe3a..f69190e4dcbe9f0efde15d355965cd47067dc3a2 100644 GIT binary patch literal 2292 zcmWIWW@Zs#;Nak3U|>)LVgz7k5M=Q2bawR%b`1^TWnf3hFff?*ZOl7tAmChH&w89C z3r_=o%9dJ`rdc&yC-SMd6u4y#4htR0HQ~B? zmx6m=loc%d^**tv{#N+yb+4tKl`CuPU0SDit;q9ZM+C2(>;1Fe_6c$)o_>4q-uJ+j z@8_m&yYPoGz?+?;ajM|O6+p+|2jT#nzU2k_Ha9UZGcC2aL@%p2KM%vtbNe0hnhgY8 z-y3C1-)!K0B62gF!}m>LwrEa@LXdFbcZ*1ql~?k1{mcLNr<_&%a?9(2Wm|qoJP0uQ zp|EAjg929XZqK?nc}|t6N7Hy@FV={q^VG>~tZ$X&*l5O@2O~;1}{oC_-PPO@x8I_{v%6!*`zp=pWOG#Z8Zg2 zby(i)RKAtFL{BS? zeE+wO85BB~&zyO92^cb6jF8abf<`lDT1d*w&rL1X#|RhPVX6)cQ>d<##DapH)Rg$N z{31{QC+B3Q=9R>QC9#Kg>4fMkUQ>(dio- zu4ZQSrh5L%%AB*TajTc8j8e_~#y=L7(;rOOI`s{!a{y<$NXeI13idzdlwVqwm+yPc z{G!qF8wZolzY@PAp*uCA=1s5tFJI2!wamIg^+PCw-N=2RCo0t82blQIuh&LZu z9btBL>#y&d|1Eer-Q4=@;>U59e}Yrtu6wuko&kpK3B2LV3JkHd{B)8+Sp}vCHH?8l zogQDDT2hjkmySJ%=LVe4Vm9RYBmQ-l&hF?*LicaqH#jy;+%ZWya*5{Yf7PjzzZAY$ zYFDXpw)v()+CGbo;ZM9Q8yhQQo_#bq$RO_Z;-;&i;reZhIF@d0x~Y)x)yLH;nVD-w zi;|-De{<~}LFXja+)5C=!OjtKRJFhN$GatkW-r(tMI7*XY*Nyr*%<=q!QfBD`$bx?YKSE9vp5g5)h@P@N6FwBZl^HNfa;*<09 zN{aGxa#D*(3UwpwCM1^@XJqE*>0ug4gw1mp1LP2muiQSj?ABWImI>T> z9R{4no{~;~elxw@cH!QidGqgYzQ-f3F8k|~mytyJLk{+@%i%o@P z%3t3cGiKip593|C@wMfgJnho7HMd^;?QVU=lBu|f)2>^(d zT-w+F#;9zA`L?@rOIAK~Ig?kjspiLGXWwhdhb$ad2cNtl;UA#mJ#EXB<+@Mf8LhD4ssdI&cF#RgJ2ZA7Gj0eLIK{Wx{=E; zUKHK$fJUH|>PTjAG2klgkX^vT!~iSBLPL;rBfB3tcdMhgzzLxnHGg6&1CdO}pY@k%c0fZUAm?#7D08CfWGXMYp delta 30 kcmew&xP)~BAJgOtwx-DsIN11@7?>EE7#J9Mn1BQW0En;#B>(^b diff --git a/src/test/java/net/raphimc/viabedrock/api/resourcepack/VanillaResourcePackTest.java b/src/test/java/net/raphimc/viabedrock/api/resourcepack/VanillaResourcePackTest.java new file mode 100644 index 000000000..6cc9e1305 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/api/resourcepack/VanillaResourcePackTest.java @@ -0,0 +1,38 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package net.raphimc.viabedrock.api.resourcepack; + +import net.raphimc.viabedrock.api.resourcepack.content.ZipContent; +import net.raphimc.viabedrock.api.resourcepack.definition.BiomeDefinitions; +import net.raphimc.viabedrock.api.resourcepack.definition.FogDefinitions; +import net.raphimc.viabedrock.api.resourcepack.definition.RenderControllerDefinitions; +import net.raphimc.viabedrock.protocol.storage.ResourcePackStorage; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +final class VanillaResourcePackTest { + + @Test + void loadsBiomeFogAndControllerDefinitionsFromBundledPacks() throws Exception { + final var packs = new ArrayList(); + for (final String name : new String[]{"vanilla", "vanilla_1.16.100", "vanilla_1.19.0"}) { + try (var input = getClass().getResourceAsStream("/assets/viabedrock/resource_packs/" + name + ".mcpack")) { + assertNotNull(input); + packs.add(new ResourcePack(new ZipContent(input.readAllBytes()))); + } + } + final var storage = mock(ResourcePackStorage.class); + when(storage.getPackStackBottomToTop()).thenReturn(packs); + assertFalse(new BiomeDefinitions(storage).biomes().isEmpty()); + assertNotNull(new FogDefinitions(storage).get("minecraft:fog_stone_beach")); + assertFalse(new RenderControllerDefinitions(storage).renderControllers().isEmpty()); + } + +} From a77174e90ef348f9f7a7bee186d061cf6b1dd12d Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 5/7] fix(dimensions): apply synchronized cloud settings The 26.60 dimension packet supplies cloud height and visibility, but the update discarded both fields. Retain them with validated minimum-Y and height-range values and project them through Java environment attributes. Keep the existing Overworld override boundary and preserve other dimension attributes. Transparent cloud color survives the Java day timeline multiplier. Six regressions cover packet boundaries, invalid ranges, overflow, and projection. --- .../protocol/data/JavaRegistries.java | 27 ++++-- .../protocol/model/DimensionDefinition.java | 33 +++++++ .../protocol/packet/JoinPackets.java | 27 +++--- .../protocol/storage/GameSessionStorage.java | 11 +-- .../data/JavaDimensionRegistryTest.java | 55 +++++++++++ .../packet/DimensionDataPacketTest.java | 96 +++++++++++++++++++ 6 files changed, 224 insertions(+), 25 deletions(-) create mode 100644 src/main/java/net/raphimc/viabedrock/protocol/model/DimensionDefinition.java create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/data/JavaDimensionRegistryTest.java create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/packet/DimensionDataPacketTest.java diff --git a/src/main/java/net/raphimc/viabedrock/protocol/data/JavaRegistries.java b/src/main/java/net/raphimc/viabedrock/protocol/data/JavaRegistries.java index ea3cd9011..d850863cf 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/data/JavaRegistries.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/data/JavaRegistries.java @@ -20,7 +20,6 @@ import com.viaversion.nbt.tag.CompoundTag; import com.viaversion.nbt.tag.ListTag; import com.viaversion.nbt.tag.StringTag; -import com.viaversion.viaversion.libs.fastutil.ints.IntIntPair; import com.viaversion.viaversion.util.Key; import net.raphimc.viabedrock.ViaBedrock; import net.raphimc.viabedrock.api.resourcepack.definition.BiomeDefinitions; @@ -29,6 +28,7 @@ import net.raphimc.viabedrock.protocol.BedrockProtocol; import net.raphimc.viabedrock.protocol.data.enums.Dimension; import net.raphimc.viabedrock.protocol.data.generated.java.RegistryKeys; +import net.raphimc.viabedrock.protocol.model.DimensionDefinition; import net.raphimc.viabedrock.protocol.storage.GameSessionStorage; import net.raphimc.viabedrock.protocol.storage.ResourcePackStorage; @@ -62,13 +62,24 @@ private static void modifyDimensionRegistry(final GameSessionStorage gameSession dimensionRegistry.getCompoundTag(Dimension.OVERWORLD.getKey()).putInt("height", 256); dimensionRegistry.getCompoundTag(Dimension.OVERWORLD.getKey()).putInt("logical_height", 256); } - for (Map.Entry entry : gameSession.getBedrockDimensionDefinitions().entrySet()) { - final CompoundTag dimensionTag = new CompoundTag(); - final int height = entry.getValue().rightInt() - entry.getValue().leftInt(); - dimensionTag.putInt("min_y", entry.getValue().leftInt()); - dimensionTag.putInt("height", height); - dimensionTag.putInt("logical_height", height); - dimensionRegistry.getCompoundTag(entry.getKey()).putAll(dimensionTag); + for (Map.Entry entry : gameSession.getBedrockDimensionDefinitions().entrySet()) { + applyDimensionDefinition(dimensionRegistry.getCompoundTag(entry.getKey()), entry.getValue()); + } + } + + static void applyDimensionDefinition(final CompoundTag dimensionTag, final DimensionDefinition definition) { + dimensionTag.putInt("min_y", definition.minimumY()); + dimensionTag.putInt("height", definition.height()); + dimensionTag.putInt("logical_height", definition.height()); + CompoundTag attributes = dimensionTag.getCompoundTag("attributes"); + if (attributes == null) { + attributes = new CompoundTag(); + dimensionTag.put("attributes", attributes); + } + attributes.putFloat("minecraft:visual/cloud_height", definition.cloudHeight()); + if (!definition.renderClouds()) { + // Java's day timeline multiplies cloud color, preserving zero alpha. + attributes.putString("minecraft:visual/cloud_color", "#00ffffff"); } } diff --git a/src/main/java/net/raphimc/viabedrock/protocol/model/DimensionDefinition.java b/src/main/java/net/raphimc/viabedrock/protocol/model/DimensionDefinition.java new file mode 100644 index 000000000..351421c8f --- /dev/null +++ b/src/main/java/net/raphimc/viabedrock/protocol/model/DimensionDefinition.java @@ -0,0 +1,33 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.protocol.model; + +public record DimensionDefinition(int minimumY, int height, int cloudHeight, boolean renderClouds) { + + public DimensionDefinition { + if (height <= 0) { + throw new IllegalArgumentException("Dimension height range must be positive"); + } + Math.addExact(minimumY, height); + } + + public int maximumY() { + return this.minimumY + this.height; + } + +} diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/JoinPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/JoinPackets.java index 4f9cc6a83..2e456cd7d 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/packet/JoinPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/JoinPackets.java @@ -31,7 +31,6 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.api.type.Types; -import com.viaversion.viaversion.libs.fastutil.ints.IntIntImmutablePair; import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; import com.viaversion.viaversion.protocols.base.v1_7.ClientboundBaseProtocol1_7; import com.viaversion.viaversion.protocols.v26_2to26_3.packet.ClientboundConfigurationPackets26_3; @@ -55,6 +54,7 @@ import net.raphimc.viabedrock.protocol.data.enums.java.Relative; import net.raphimc.viabedrock.protocol.data.enums.java.generated.PlayerInfoUpdateAction; import net.raphimc.viabedrock.protocol.data.generated.java.Attributes; +import net.raphimc.viabedrock.protocol.model.DimensionDefinition; import net.raphimc.viabedrock.protocol.model.*; import net.raphimc.viabedrock.protocol.rewriter.BlockStateRewriter; import net.raphimc.viabedrock.protocol.rewriter.ItemRewriter; @@ -434,16 +434,9 @@ protected void register() { final int count = wrapper.read(BedrockTypes.UNSIGNED_VAR_INT); // entry count for (int i = 0; i < count; i++) { final String dimensionIdentifier = wrapper.read(BedrockTypes.STRING); // dimension identifier - final int minimumHeight = wrapper.read(BedrockTypes.VAR_INT); // minimum height - final int maximumHeight = minimumHeight + wrapper.read(BedrockTypes.VAR_INT); // maximum height - wrapper.read(BedrockTypes.VAR_INT); // generator type - wrapper.read(BedrockTypes.VAR_INT); // dimension type - wrapper.read(BedrockTypes.UUID); // pack id - wrapper.read(BedrockTypes.STRING); // default biome - wrapper.read(BedrockTypes.VAR_INT); // cloud height - wrapper.read(Types.BOOLEAN); // render clouds - if (dimensionIdentifier.equals(Dimension.OVERWORLD.getKey())) { // Bedrock client currently only supports overworld - gameSession.putBedrockDimensionDefinition(dimensionIdentifier, new IntIntImmutablePair(minimumHeight, maximumHeight)); + final DimensionDefinition definition = readDimensionDefinition(wrapper); + if (dimensionIdentifier.equals(Dimension.OVERWORLD.getKey())) { // Only Overworld overrides currently map to Java + gameSession.putBedrockDimensionDefinition(dimensionIdentifier, definition); } } }, State.PLAY, (PacketHandler) PacketWrapper::cancel // Bedrock client ignores dimension data after start game @@ -636,6 +629,18 @@ private static void handleJavaClientGameJoin(final UserConnection user) { setTime.send(BedrockProtocol.class, false); } + static DimensionDefinition readDimensionDefinition(final PacketWrapper wrapper) { + final int minimumY = wrapper.read(BedrockTypes.VAR_INT); + final int heightRange = wrapper.read(BedrockTypes.VAR_INT); + wrapper.read(BedrockTypes.VAR_INT); // generator type + wrapper.read(BedrockTypes.VAR_INT); // dimension type + wrapper.read(BedrockTypes.UUID); // pack id + wrapper.read(BedrockTypes.STRING); // default biome + final int cloudHeight = wrapper.read(BedrockTypes.VAR_INT); + final boolean renderClouds = wrapper.read(Types.BOOLEAN); + return new DimensionDefinition(minimumY, heightRange, cloudHeight, renderClouds); + } + private JoinPackets() { } diff --git a/src/main/java/net/raphimc/viabedrock/protocol/storage/GameSessionStorage.java b/src/main/java/net/raphimc/viabedrock/protocol/storage/GameSessionStorage.java index 7589ed5ef..b86fa9903 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/storage/GameSessionStorage.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/storage/GameSessionStorage.java @@ -21,10 +21,9 @@ import com.viaversion.nbt.tag.CompoundTag; import com.viaversion.viaversion.api.connection.StoredObject; import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.libs.fastutil.ints.IntIntImmutablePair; -import com.viaversion.viaversion.libs.fastutil.ints.IntIntPair; import com.viaversion.viaversion.libs.mcstructs.text.TextComponent; import net.raphimc.viabedrock.protocol.BedrockProtocol; +import net.raphimc.viabedrock.protocol.model.DimensionDefinition; import net.raphimc.viabedrock.protocol.data.JavaRegistries; import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.ChatRestrictionLevel; import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.GameType; @@ -38,7 +37,7 @@ public class GameSessionStorage extends StoredObject { private CompoundTag javaRegistries; private CompoundTag bedrockBiomeDefinitions = BedrockProtocol.MAPPINGS.getBedrockBiomeDefinitions(); - private final Map bedrockDimensionDefinitions = new HashMap<>(); + private final Map bedrockDimensionDefinitions = new HashMap<>(); private final Set availableEntityIdentifiers = new HashSet<>(BedrockProtocol.MAPPINGS.getBedrockEntities().keySet()); private Semver bedrockVanillaVersion; private boolean flatGenerator; @@ -57,7 +56,7 @@ public class GameSessionStorage extends StoredObject { public GameSessionStorage(final UserConnection user) { super(user); - this.bedrockDimensionDefinitions.put("minecraft:the_nether", new IntIntImmutablePair(0, 128)); + this.bedrockDimensionDefinitions.put("minecraft:the_nether", new DimensionDefinition(0, 128, 0, false)); } public CompoundTag getJavaRegistries() { @@ -76,11 +75,11 @@ public void setBedrockBiomeDefinitions(final CompoundTag bedrockBiomeDefinitions this.javaRegistries = null; } - public Map getBedrockDimensionDefinitions() { + public Map getBedrockDimensionDefinitions() { return this.bedrockDimensionDefinitions; } - public void putBedrockDimensionDefinition(final String dimensionIdentifier, final IntIntPair dimensionDefinition) { + public void putBedrockDimensionDefinition(final String dimensionIdentifier, final DimensionDefinition dimensionDefinition) { this.bedrockDimensionDefinitions.put(dimensionIdentifier, dimensionDefinition); this.javaRegistries = null; } diff --git a/src/test/java/net/raphimc/viabedrock/protocol/data/JavaDimensionRegistryTest.java b/src/test/java/net/raphimc/viabedrock/protocol/data/JavaDimensionRegistryTest.java new file mode 100644 index 000000000..06add2ea7 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/data/JavaDimensionRegistryTest.java @@ -0,0 +1,55 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package net.raphimc.viabedrock.protocol.data; + +import com.viaversion.nbt.tag.CompoundTag; +import net.raphimc.viabedrock.protocol.model.DimensionDefinition; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class JavaDimensionRegistryTest { + + @Test + void projectsServerBoundsAndCloudHeightWithoutReplacingOtherAttributes() { + final var registry = registry(); + final var dimension = registry.getCompoundTag("minecraft:overworld"); + JavaRegistries.applyDimensionDefinition(dimension, new DimensionDefinition(-64, 384, 96, true)); + assertEquals(-64, dimension.getInt("min_y")); + assertEquals(384, dimension.getInt("height")); + assertEquals(384, dimension.getInt("logical_height")); + final var attributes = dimension.getCompoundTag("attributes"); + assertEquals(96F, attributes.getFloat("minecraft:visual/cloud_height")); + assertEquals("#ccffffff", attributes.getString("minecraft:visual/cloud_color")); + assertEquals("#123456", attributes.getString("minecraft:visual/fog_color")); + } + + @Test + void suppressesCloudsWithTransparentColorAndAcceptsAnAbsentAttributeMap() { + for (final boolean attributesPresent : new boolean[]{false, true}) { + final var registry = registry(); + final var dimension = registry.getCompoundTag("minecraft:overworld"); + if (!attributesPresent) { + dimension.remove("attributes"); + } + JavaRegistries.applyDimensionDefinition(dimension, new DimensionDefinition(0, 256, 128, false)); + assertEquals("#00ffffff", dimension.getCompoundTag("attributes").getString("minecraft:visual/cloud_color")); + assertEquals(128F, dimension.getCompoundTag("attributes").getFloat("minecraft:visual/cloud_height")); + } + } + + private static CompoundTag registry() { + final var registry = new CompoundTag(); + final var dimension = new CompoundTag(); + final var attributes = new CompoundTag(); + attributes.putString("minecraft:visual/cloud_color", "#ccffffff"); + attributes.putString("minecraft:visual/fog_color", "#123456"); + dimension.put("attributes", attributes); + registry.put("minecraft:overworld", dimension); + return registry; + } + +} diff --git a/src/test/java/net/raphimc/viabedrock/protocol/packet/DimensionDataPacketTest.java b/src/test/java/net/raphimc/viabedrock/protocol/packet/DimensionDataPacketTest.java new file mode 100644 index 000000000..bc354000a --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/packet/DimensionDataPacketTest.java @@ -0,0 +1,96 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package net.raphimc.viabedrock.protocol.packet; + +import com.viaversion.viaversion.protocol.packet.PacketWrapperImpl; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.raphimc.viabedrock.protocol.ClientboundBedrockPackets; +import net.raphimc.viabedrock.protocol.types.BedrockTypes; +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +class DimensionDataPacketTest { + + @Test + void retainsBoundsAndCloudSettingsWithoutConsumingTheNextDefinition() { + for (final int[] range : new int[][]{{0, 256}, {-64, 384}, {32, 64}}) { + for (final boolean clouds : new boolean[]{false, true}) { + final ByteBuf buffer = definition(range[0], range[1], -32, clouds); + try { + buffer.writeByte(77); + final var wrapper = new PacketWrapperImpl(ClientboundBedrockPackets.DIMENSION_DATA, buffer, null); + final var decoded = JoinPackets.readDimensionDefinition(wrapper); + assertEquals(range[0], decoded.minimumY()); + assertEquals(range[1], decoded.height()); + assertEquals(range[0] + range[1], decoded.maximumY()); + assertEquals(-32, decoded.cloudHeight()); + assertEquals(clouds, decoded.renderClouds()); + assertEquals(77, buffer.readUnsignedByte()); + assertFalse(buffer.isReadable()); + } finally { + buffer.release(); + } + } + } + } + + @Test + void rejectsEmptyAndNegativeHeightRanges() { + for (final int range : new int[]{0, -16, Integer.MIN_VALUE}) { + final ByteBuf buffer = definition(-64, range, 192, true); + try { + final var wrapper = new PacketWrapperImpl(ClientboundBedrockPackets.DIMENSION_DATA, buffer, null); + assertThrows(IllegalArgumentException.class, () -> JoinPackets.readDimensionDefinition(wrapper)); + } finally { + buffer.release(); + } + } + } + + @Test + void rejectsUpperBoundOverflowInsteadOfWrappingTheDimension() { + final ByteBuf buffer = definition(Integer.MAX_VALUE - 15, 16, 0, false); + try { + final var wrapper = new PacketWrapperImpl(ClientboundBedrockPackets.DIMENSION_DATA, buffer, null); + assertThrows(ArithmeticException.class, () -> JoinPackets.readDimensionDefinition(wrapper)); + } finally { + buffer.release(); + } + } + + @Test + void retainsRepresentableBoundsAtTheSignedIntegerLimits() { + for (final int minimum : new int[]{Integer.MIN_VALUE, Integer.MAX_VALUE - 16}) { + final ByteBuf buffer = definition(minimum, 16, 128, true); + try { + final var wrapper = new PacketWrapperImpl(ClientboundBedrockPackets.DIMENSION_DATA, buffer, null); + final var decoded = JoinPackets.readDimensionDefinition(wrapper); + assertEquals(minimum, decoded.minimumY()); + assertEquals(minimum + 16, decoded.maximumY()); + } finally { + buffer.release(); + } + } + } + + private static ByteBuf definition(final int minimum, final int range, final int cloudHeight, final boolean clouds) { + final ByteBuf buffer = Unpooled.buffer(); + BedrockTypes.VAR_INT.writePrimitive(buffer, minimum); + BedrockTypes.VAR_INT.writePrimitive(buffer, range); + BedrockTypes.VAR_INT.writePrimitive(buffer, 1); // generator + BedrockTypes.VAR_INT.writePrimitive(buffer, 0); // dimension type + BedrockTypes.UUID.write(buffer, UUID.randomUUID()); + BedrockTypes.STRING.write(buffer, "minecraft:plains"); + BedrockTypes.VAR_INT.writePrimitive(buffer, cloudHeight); + buffer.writeBoolean(clouds); + return buffer; + } + +} From 3fceabf859d18db3a0a9685f105f12c4483d3e01 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 6/7] fix(protocol): preserve generated enum values and packet IDs Protocol 2225 omits declared packets from its packet-ID summary enum. Supplement it from same-protocol packet schemas and reject conflicting IDs or mixed protocol input. Keep unsupported seating and signed audio explicitly canceled. Resource-pack responses carry a Cereal variant index, distinct from the enum value. Move that conversion into a shared codec so enum regeneration preserves the response layout. Restore focused wire and generator regressions from the version draft. --- .../protocol/ClientboundBedrockPackets.java | 7 +- .../bedrock/generated/MinecraftPacketIds.java | 24 +++++- .../generated/ResourcePackResponse.java | 2 +- .../packet/ResourcePackClientResponse.java | 52 +++++++++++++ .../protocol/packet/ResourcePackPackets.java | 18 ++--- .../protocol/packet/UnhandledPackets.java | 2 + .../storage/ResourcePackLoadStateTracker.java | 7 +- .../ResourcePackClientResponseTest.java | 74 +++++++++++++++++++ .../types/entitydata/EntityDataTypeTest.java | 55 ++++++++++++++ .../model/FullContainerNameTypeTest.java | 49 ++++++++++++ .../BedrockDataEnumGeneratorTest.java | 73 ++++++++++++++++++ .../generator/BedrockDataEnumGenerator.java | 55 +++++++++++++- 12 files changed, 395 insertions(+), 23 deletions(-) create mode 100644 src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponse.java create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponseTest.java create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/types/entitydata/EntityDataTypeTest.java create mode 100644 src/test/java/net/raphimc/viabedrock/protocol/types/model/FullContainerNameTypeTest.java create mode 100644 src/test/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGeneratorTest.java diff --git a/src/main/java/net/raphimc/viabedrock/protocol/ClientboundBedrockPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/ClientboundBedrockPackets.java index 1b6df8e3f..2768b1dbc 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/ClientboundBedrockPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/ClientboundBedrockPackets.java @@ -186,10 +186,11 @@ public enum ClientboundBedrockPackets implements ClientboundPacketType { PLAYER_LOCATION(MinecraftPacketIds.PlayerLocation.getValue()), //CAMERA_SPLINE(MinecraftPacketIds.CameraSplinePacket.getValue()), SYNC_WORLD_CLOCKS(MinecraftPacketIds.SyncWorldClocks.getValue()), - VOXEL_SHAPES(MinecraftPacketIds.VoxelShapes.getValue()), + VOXEL_SHAPES(MinecraftPacketIds.VoxelShapesPacket.getValue()), SET_PLAYER_FURNACE_OPTIONS(MinecraftPacketIds.SetPlayerFurnaceOptions.getValue()), - RECORD_STARTED(MinecraftPacketIds.RecordStarted.getValue()); - //STONECUTTER_SET_RECIPE(MinecraftPacketIds.ClientboundStonecutterSetRecipePacket.getValue()); + RECORD_STARTED(MinecraftPacketIds.RecordStarted.getValue()), + SET_PASSENGER_OF_BLOCK(MinecraftPacketIds.SetPassengerOfBlockPacket.getValue()), + PLAY_AUDIO_CONTENT(MinecraftPacketIds.ClientboundPlayAudioContent.getValue()); // UPDATE_SOUND_DATA(MinecraftPacketIds.ClientboundUpdateSoundDataPacket.getValue()); // CONTROL_SCHEME_SET(MinecraftPacketIds.ClientboundControlSchemeSetPacket.getValue()), // PRIMITIVE_SHAPES(MinecraftPacketIds.PrimitiveShapesPacket.getValue()), diff --git a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/MinecraftPacketIds.java b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/MinecraftPacketIds.java index c5bcb0fd3..3d467009c 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/MinecraftPacketIds.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/MinecraftPacketIds.java @@ -217,7 +217,6 @@ public enum MinecraftPacketIds { PlayerVideoCapturePacket(324), PlayerUpdateEntityOverridesPacket(325), PlayerLocation(326), - VoxelShapes(337), SyncWorldClocks(344), SendPartyDestinationCookie(349), PartyDestinationCookieResponse(350), @@ -227,6 +226,29 @@ public enum MinecraftPacketIds { ServerboundMatchmakingCancel(356), ClientboundPlayAudioContent(359), ServerboundRegisterAudioContent(360), + ClientboundControlSchemeSetPacket(327), + PrimitiveShapesPacket(328), + ServerboundPackSettingChangePacket(329), + ClientboundDataStorePacket(330), + GraphicsOverrideParameterPacket(331), + ServerboundDataStorePacket(332), + ClientboundDataDrivenUIShowScreenPacket(333), + ClientboundDataDrivenUICloseScreenPacket(334), + ClientboundDataDrivenUIReloadPacket(335), + ClientboundTextureShiftPacket(336), + VoxelShapesPacket(337), + CameraSplinePacket(338), + ResourcePacksReadyForValidationPacket(340), + LocatorBarPacket(341), + PartyChangedPacket(342), + ServerboundDataDrivenScreenClosedPacket(343), + ClientboundAttributeLayerSyncPacket(345), + ServerStoreInfoPacket(346), + ServerPresenceInfoPacket(347), + ClientboundUpdateSoundDataPacket(348), + ServerboundStonecutterSetRecipePacket(354), + ClientboundStonecutterSetRecipePacket(355), + SetPassengerOfBlockPacket(357), ; private static final Int2ObjectMap BY_VALUE = new Int2ObjectOpenHashMap<>(); diff --git a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/ResourcePackResponse.java b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/ResourcePackResponse.java index 6a4076ea6..c2f6964a6 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/ResourcePackResponse.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/data/enums/bedrock/generated/ResourcePackResponse.java @@ -59,7 +59,7 @@ public static ResourcePackResponse getByName(final String name, final ResourcePa } public int getValue() { - return this.value - 1; // TODO + return this.value; } } diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponse.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponse.java new file mode 100644 index 000000000..33b4cbde6 --- /dev/null +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponse.java @@ -0,0 +1,52 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.protocol.packet; + +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.ResourcePackResponse; +import net.raphimc.viabedrock.protocol.types.BedrockTypes; + +public final class ResourcePackClientResponse { + + private ResourcePackClientResponse() { + } + + public static void write(final PacketWrapper wrapper, final ResourcePackResponse status) { + if (status == ResourcePackResponse.Downloading) { + throw new IllegalArgumentException("Downloading requires a pack list"); + } + writeStatus(wrapper, status); + } + + public static void writeDownloading(final PacketWrapper wrapper, final String[] packIds) { + writeStatus(wrapper, ResourcePackResponse.Downloading); + wrapper.write(BedrockTypes.STRING_ARRAY, packIds); + } + + private static void writeStatus(final PacketWrapper wrapper, final ResourcePackResponse status) { + final String name = switch (status) { + case Cancel -> "cancel"; + case Downloading -> "downloading"; + case DownloadingFinished -> "downloadingfinished"; + case ResourcePackStackFinished -> "resourcepackstackfinished"; + }; + wrapper.write(BedrockTypes.UNSIGNED_VAR_INT, status.getValue() - 1); // Cereal variant indexes start at zero, enum values at one. + wrapper.write(BedrockTypes.STRING, name); + } + +} diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackPackets.java index dca2f9e71..35b7902bc 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/ResourcePackPackets.java @@ -155,8 +155,7 @@ public static void register(final BedrockProtocol protocol) { if (loadStateTracker == null || !loadStateTracker.hasJavaClientAccepted()) { final PacketWrapper resourcePackClientResponse = wrapper.create(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE); - resourcePackClientResponse.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.ResourcePackStackFinished.getValue()); // status - resourcePackClientResponse.write(BedrockTypes.STRING, "resourcepackstackfinished"); // #blameMojang + ResourcePackClientResponse.write(resourcePackClientResponse, ResourcePackResponse.ResourcePackStackFinished); resourcePackClientResponse.sendToServer(BedrockProtocol.class); } }); @@ -213,17 +212,14 @@ public static void register(final BedrockProtocol protocol) { if (resourcePackStorage != null) { resourcePackStorage.setLoadedOnJavaClient(); } - wrapper.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.ResourcePackStackFinished.getValue()); // status - wrapper.write(BedrockTypes.STRING, "resourcepackstackfinished"); // #blameMojang + ResourcePackClientResponse.write(wrapper, ResourcePackResponse.ResourcePackStackFinished); } case FAILED_DOWNLOAD, FAILED_RELOAD, DISCARDED -> { ViaBedrock.getPlatform().getLogger().log(Level.WARNING, "Client resource pack download/load failed"); - wrapper.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.ResourcePackStackFinished.getValue()); // status - wrapper.write(BedrockTypes.STRING, "resourcepackstackfinished"); // #blameMojang + ResourcePackClientResponse.write(wrapper, ResourcePackResponse.ResourcePackStackFinished); } case DECLINED, INVALID_URL -> { - wrapper.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.DownloadingFinished.getValue()); // status - wrapper.write(BedrockTypes.STRING, "downloadingfinished"); // #blameMojang + ResourcePackClientResponse.write(wrapper, ResourcePackResponse.DownloadingFinished); } case ACCEPTED -> { final ResourcePackLoadStateTracker loadStateTracker = wrapper.user().get(ResourcePackLoadStateTracker.class); @@ -232,16 +228,14 @@ public static void register(final BedrockProtocol protocol) { loadStateTracker.setJavaClientAccepted(); loadStateTracker.loadRequestedResourcePacks().thenAccept(v -> { final PacketWrapper resourcePackClientResponse = PacketWrapper.create(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE, wrapper.user()); - resourcePackClientResponse.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.DownloadingFinished.getValue()); // status - resourcePackClientResponse.write(BedrockTypes.STRING, "downloadingfinished"); // #blameMojang + ResourcePackClientResponse.write(resourcePackClientResponse, ResourcePackResponse.DownloadingFinished); resourcePackClientResponse.scheduleSendToServer(BedrockProtocol.class); }).exceptionally(e -> { BedrockProtocol.kickForIllegalState(wrapper.user(), "One of the server resource packs failed to load. Try again later or decline the resource packs.", e); return null; }); } else { - wrapper.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.DownloadingFinished.getValue()); // status - wrapper.write(BedrockTypes.STRING, "downloadingfinished"); // #blameMojang + ResourcePackClientResponse.write(wrapper, ResourcePackResponse.DownloadingFinished); } } case DOWNLOADED -> wrapper.cancel(); diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/UnhandledPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/UnhandledPackets.java index 8da27cab0..4159ddcbd 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/packet/UnhandledPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/UnhandledPackets.java @@ -26,6 +26,8 @@ public final class UnhandledPackets { public static void register(final BedrockProtocol protocol) { + protocol.cancelClientbound(ClientboundBedrockPackets.SET_PASSENGER_OF_BLOCK); // Block seating has no Java counterpart yet + protocol.cancelClientbound(ClientboundBedrockPackets.PLAY_AUDIO_CONTENT); // Signed audio content requires the Bedrock content service protocol.cancelClientbound(ClientboundBedrockPackets.SET_HEALTH); // Seems to do nothing meaningful protocol.cancelClientbound(ClientboundBedrockPackets.CAMERA); // Not relevant (Education Edition) protocol.cancelClientbound(ClientboundBedrockPackets.PHOTO_TRANSFER); // Not relevant (Education Edition) diff --git a/src/main/java/net/raphimc/viabedrock/protocol/storage/ResourcePackLoadStateTracker.java b/src/main/java/net/raphimc/viabedrock/protocol/storage/ResourcePackLoadStateTracker.java index b0357f63f..fc9bec736 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/storage/ResourcePackLoadStateTracker.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/storage/ResourcePackLoadStateTracker.java @@ -27,9 +27,8 @@ import net.raphimc.viabedrock.api.resourcepack.http.BedrockPackDownloader; import net.raphimc.viabedrock.protocol.BedrockProtocol; import net.raphimc.viabedrock.protocol.ServerboundBedrockPackets; -import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.ResourcePackResponse; +import net.raphimc.viabedrock.protocol.packet.ResourcePackClientResponse; import net.raphimc.viabedrock.protocol.provider.ResourcePackProvider; -import net.raphimc.viabedrock.protocol.types.BedrockTypes; import java.net.URL; import java.util.*; @@ -132,9 +131,7 @@ public CompletableFuture loadRequestedResourcePacks() { if (!downloadList.isEmpty()) { ViaBedrock.getPlatform().getLogger().log(Level.INFO, "Downloading " + downloadList.size() + " resource packs over the game protocol"); final PacketWrapper resourcePackClientResponse = PacketWrapper.create(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE, this.user()); - resourcePackClientResponse.write(BedrockTypes.UNSIGNED_VAR_INT, ResourcePackResponse.Downloading.getValue()); // status - resourcePackClientResponse.write(BedrockTypes.STRING, "downloading"); // #blameMojang - resourcePackClientResponse.write(BedrockTypes.STRING_ARRAY, downloadList.stream().map(ResourcePack.Key::toString).toArray(String[]::new)); // downloading packs + ResourcePackClientResponse.writeDownloading(resourcePackClientResponse, downloadList.stream().map(ResourcePack.Key::toString).toArray(String[]::new)); resourcePackClientResponse.scheduleSendToServer(BedrockProtocol.class); } else { this.loadFuture.complete(null); diff --git a/src/test/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponseTest.java b/src/test/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponseTest.java new file mode 100644 index 000000000..e00a7083a --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/packet/ResourcePackClientResponseTest.java @@ -0,0 +1,74 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.protocol.packet; + +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.protocol.packet.PacketWrapperImpl; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.raphimc.viabedrock.protocol.ServerboundBedrockPackets; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.ResourcePackResponse; +import net.raphimc.viabedrock.protocol.types.BedrockTypes; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ResourcePackClientResponseTest { + + @Test + void downloadingUsesTheStringDiscriminatorAndVarintPackCount() throws Exception { + final String[] packIds = {"97e3f100-930a-4b47-b7ae-b8bbd38b1c19_1.0.0"}; + final PacketWrapper wrapper = new PacketWrapperImpl(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE, null, null); + ResourcePackClientResponse.writeDownloading(wrapper, packIds); + + final ByteBuf buffer = Unpooled.buffer(); + try { + wrapper.writeToBuffer(buffer); + assertEquals(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE.getId(), BedrockTypes.UNSIGNED_VAR_INT.read(buffer)); + assertEquals(1, BedrockTypes.UNSIGNED_VAR_INT.read(buffer)); + assertEquals("downloading", BedrockTypes.STRING.read(buffer)); + assertArrayEquals(packIds, BedrockTypes.STRING_ARRAY.read(buffer)); + assertEquals(0, buffer.readableBytes()); + } finally { + buffer.release(); + } + } + + @Test + void finishedResponsesContainTheStatusAndStringDiscriminator() throws Exception { + for (final ResourcePackResponse status : new ResourcePackResponse[]{ + ResourcePackResponse.DownloadingFinished, ResourcePackResponse.ResourcePackStackFinished}) { + final PacketWrapper wrapper = new PacketWrapperImpl(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE, null, null); + ResourcePackClientResponse.write(wrapper, status); + + final ByteBuf buffer = Unpooled.buffer(); + try { + wrapper.writeToBuffer(buffer); + assertEquals(ServerboundBedrockPackets.RESOURCE_PACK_CLIENT_RESPONSE.getId(), BedrockTypes.UNSIGNED_VAR_INT.read(buffer)); + assertEquals(status == ResourcePackResponse.DownloadingFinished ? 2 : 3, BedrockTypes.UNSIGNED_VAR_INT.read(buffer)); + assertEquals(status == ResourcePackResponse.DownloadingFinished + ? "downloadingfinished" : "resourcepackstackfinished", BedrockTypes.STRING.read(buffer)); + assertEquals(0, buffer.readableBytes()); + } finally { + buffer.release(); + } + } + } + +} diff --git a/src/test/java/net/raphimc/viabedrock/protocol/types/entitydata/EntityDataTypeTest.java b/src/test/java/net/raphimc/viabedrock/protocol/types/entitydata/EntityDataTypeTest.java new file mode 100644 index 000000000..fa10411d6 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/types/entitydata/EntityDataTypeTest.java @@ -0,0 +1,55 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.protocol.types.entitydata; + +import io.netty.buffer.Unpooled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +final class EntityDataTypeTest { + + @Test + void readsBothDiscriminatorsAndLeavesTheFollowingFieldIntact() { + final var buffer = Unpooled.wrappedBuffer(new byte[]{18, 0, 0, 42, 99}); + try { + final var value = new EntityDataType().read(buffer); + assertEquals(18, value.id()); + assertEquals(EntityDataTypesBedrock.BYTE, value.dataType()); + assertEquals(Byte.valueOf((byte) 42), value.value()); + assertEquals(99, buffer.readUnsignedByte()); + assertFalse(buffer.isReadable()); + } finally { + buffer.release(); + } + } + + @Test + void rejectsUnknownAndMismatchedTypesBeforeReadingTheValue() { + for (final byte[] frame : new byte[][]{{18, 9, 9, 42}, {18, 1, 0, 42}}) { + final var buffer = Unpooled.wrappedBuffer(frame); + try { + assertThrows(IllegalStateException.class, () -> new EntityDataType().read(buffer)); + assertEquals(42, buffer.readUnsignedByte()); + } finally { + buffer.release(); + } + } + } + +} diff --git a/src/test/java/net/raphimc/viabedrock/protocol/types/model/FullContainerNameTypeTest.java b/src/test/java/net/raphimc/viabedrock/protocol/types/model/FullContainerNameTypeTest.java new file mode 100644 index 000000000..ab3f69e18 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/protocol/types/model/FullContainerNameTypeTest.java @@ -0,0 +1,49 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +package net.raphimc.viabedrock.protocol.types.model; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.ContainerEnumName; +import net.raphimc.viabedrock.protocol.model.FullContainerName; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +class FullContainerNameTypeTest { + + @Test + void containerNamesUseProtocol2225SlotIds() { + final FullContainerNameType type = new FullContainerNameType(); + final Map ids = Map.of( + ContainerEnumName.InventoryContainer, 29, + ContainerEnumName.CursorContainer, 59, + ContainerEnumName.CreatedOutputContainer, 60, + ContainerEnumName.RecipeFoodContainer, 64, + ContainerEnumName.RecipeBlocksContainer, 65, + ContainerEnumName.RecipeFurnaceItemsContainer, 66); + + ids.forEach((name, id) -> { + final ByteBuf buffer = Unpooled.buffer(); + try { + type.write(buffer, new FullContainerName(name, null)); + assertArrayEquals(new byte[] {id.byteValue(), 0}, ByteBufUtil.getBytes(buffer)); + assertSame(name, ContainerEnumName.getByValue(id)); + } finally { + buffer.release(); + } + }); + } + +} diff --git a/src/test/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGeneratorTest.java b/src/test/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGeneratorTest.java new file mode 100644 index 000000000..de11610e3 --- /dev/null +++ b/src/test/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGeneratorTest.java @@ -0,0 +1,73 @@ +/* + * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock + * Copyright (C) 2023-2026 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viabedrock.tool.generator; + +import com.viaversion.viaversion.libs.gson.JsonObject; +import com.viaversion.viaversion.libs.gson.JsonParser; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +final class BedrockDataEnumGeneratorTest { + + @Test + void fillsOmittedPacketIdsInNumericOrderWithoutReplacingEnumAliases() { + final JsonObject packetEnum = packetEnum(); + final var missing = BedrockDataEnumGenerator.missingPacketIds(packetEnum, List.of( + packet("LastPacket", 357, 2225), packet("LoginPacket", 1, 2225), + packet("FirstPacket", 327, 2225))); + assertEquals(List.of("FirstPacket", "LastPacket"), List.copyOf(missing.keySet())); + assertEquals(Map.of("FirstPacket", 327, "LastPacket", 357), missing); + assertEquals(packetEnum(), packetEnum); + } + + @Test + void rejectsConflictingSchemaIdsAndEnumNames() { + assertThrows(IllegalStateException.class, () -> BedrockDataEnumGenerator.missingPacketIds( + packetEnum(), List.of(packet("OnePacket", 327, 2225), packet("TwoPacket", 327, 2225)))); + assertThrows(IllegalStateException.class, () -> BedrockDataEnumGenerator.missingPacketIds( + packetEnum(), List.of(packet("Login", 327, 2225)))); + } + + @Test + void rejectsMixedProtocolSnapshotsAndMissingExplicitValues() { + assertThrows(IllegalStateException.class, () -> BedrockDataEnumGenerator.missingPacketIds( + packetEnum(), List.of(packet("NewPacket", 327, 2193)))); + final JsonObject packetEnum = packetEnum(); + packetEnum.remove("x-enum-binary-value"); + assertThrows(IllegalStateException.class, () -> BedrockDataEnumGenerator.missingPacketIds(packetEnum, List.of())); + } + + private static JsonObject packetEnum() { + return JsonParser.parseString("{\"enum\":[\"Login\"],\"x-enum-binary-value\":[1],\"x-protocol-version\":2225}").getAsJsonObject(); + } + + private static JsonObject packet(final String name, final int id, final int protocol) { + final JsonObject packet = new JsonObject(); + packet.addProperty("title", name); + packet.addProperty("x-protocol-version", protocol); + final JsonObject properties = new JsonObject(); + properties.addProperty("[cereal:packet]", id); + packet.add("$metaProperties", properties); + return packet; + } + +} diff --git a/src/tool/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGenerator.java b/src/tool/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGenerator.java index 8a0954a15..c8cd4e7f9 100644 --- a/src/tool/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGenerator.java +++ b/src/tool/java/net/raphimc/viabedrock/tool/generator/BedrockDataEnumGenerator.java @@ -30,7 +30,13 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.stream.Stream; public final class BedrockDataEnumGenerator { @@ -50,8 +56,11 @@ public static void main(final String[] args) throws Throwable { throw new IllegalStateException("No enum definitions found in " + jsonDir); } + final List definitions = new ArrayList<>(); for (Path file : jsonFiles) { - final JsonObject jsonObject = gson.fromJson(Files.readString(file), JsonObject.class); + definitions.add(gson.fromJson(Files.readString(file), JsonObject.class)); + } + for (JsonObject jsonObject : definitions) { if (!jsonObject.has("enum")) { continue; @@ -135,6 +144,10 @@ public static void main(final String[] args) throws Throwable { genEnum.enumFields().add(new Field(name, null, null, value, new Javadoc())); } + if (enumName.equals("MinecraftPacketIds")) { + missingPacketIds(jsonObject, definitions).forEach((name, value) -> + genEnum.enumFields().add(new Field(name, null, null, Integer.toString(value), new Javadoc()))); + } codeGen.addType(genEnum); } @@ -142,6 +155,46 @@ public static void main(final String[] args) throws Throwable { System.out.println("Generated " + jsonFiles.size() + " enums from " + jsonDir); } + static Map missingPacketIds(final JsonObject packetEnum, final List definitions) { + final JsonArray names = packetEnum.getAsJsonArray("enum"); + final JsonArray values = packetEnum.getAsJsonArray("x-enum-binary-value"); + if (values == null || values.size() != names.size()) { + throw new IllegalStateException("Packet IDs require an explicit value for every enum entry"); + } + final Map namedIds = new LinkedHashMap<>(); + final Set enumIds = new HashSet<>(); + for (int i = 0; i < names.size(); i++) { + namedIds.put(names.get(i).getAsString(), values.get(i).getAsInt()); + enumIds.add(values.get(i).getAsInt()); + } + final Map schemaIds = new TreeMap<>(); + for (JsonObject definition : definitions) { + final JsonObject properties = definition.getAsJsonObject("$metaProperties"); + if (properties == null || !properties.has("[cereal:packet]")) { + continue; + } + if (!packetEnum.get("x-protocol-version").equals(definition.get("x-protocol-version"))) { + throw new IllegalStateException("Packet schemas and enum must target the same protocol"); + } + final String name = definition.get("title").getAsString(); + final int id = properties.get("[cereal:packet]").getAsInt(); + final String previous = schemaIds.putIfAbsent(id, name); + if (previous != null && !previous.equals(name)) { + throw new IllegalStateException("Conflicting packet schemas for ID " + id); + } + if (namedIds.containsKey(name) && namedIds.get(name) != id) { + throw new IllegalStateException("Conflicting packet ID for " + name); + } + } + final Map missing = new LinkedHashMap<>(); + schemaIds.forEach((id, name) -> { + if (!enumIds.contains(id)) { + missing.put(name, id); + } + }); + return missing; + } + private BedrockDataEnumGenerator() { } From 8273804b4a2b3df0d78cb92d74976914bc585a21 Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Wed, 28 Oct 2026 20:07:56 +0100 Subject: [PATCH 7/7] fix(players): retain PlayFab identity from player lists Protocol 2225 moves PlayFab identity out of serialized skin data and into player-list entries. Retain the received identity in the Java profile instead of discarding the only remaining source of that property. --- .../net/raphimc/viabedrock/protocol/packet/HudPackets.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/raphimc/viabedrock/protocol/packet/HudPackets.java b/src/main/java/net/raphimc/viabedrock/protocol/packet/HudPackets.java index 74b333318..a15e4a66a 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/packet/HudPackets.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/packet/HudPackets.java @@ -79,7 +79,7 @@ public static void register(final BedrockProtocol protocol) { final long entityUniqueId = wrapper.read(BedrockTypes.VAR_LONG); // actorUniqueId final String name = wrapper.read(BedrockTypes.STRING); // name final String xuid = wrapper.read(BedrockTypes.STRING); // xuid - wrapper.read(BedrockTypes.STRING); // skin playfab id + final String playFabId = wrapper.read(BedrockTypes.STRING); // PlayFab id final String platformOnlineId = wrapper.read(BedrockTypes.STRING); // platform online id final int deviceOs = wrapper.read(BedrockTypes.INT_LE); // device os final SkinData skin = wrapper.read(BedrockTypes.SKIN); // skin @@ -90,6 +90,7 @@ public static void register(final BedrockProtocol protocol) { profiles.add(new GameProfile(name, uuid, new GameProfile.Property[]{ new GameProfile.Property("xuid", xuid), + new GameProfile.Property("playfab_id", playFabId), new GameProfile.Property("platform_online_id", platformOnlineId), new GameProfile.Property("device_os", String.valueOf(deviceOs)), new GameProfile.Property("is_teacher", String.valueOf(isTeacher)), @@ -98,7 +99,6 @@ public static void register(final BedrockProtocol protocol) { })); Via.getManager().getProviders().get(SkinProvider.class).setSkin(wrapper.user(), uuid, skin); - // TODO: Update skin playFabId final Pair entry = playerListStorage.addPlayer(uuid, entityUniqueId, name); if (entry != null) {