diff --git a/README.md b/README.md index 50ef6c7ab47..3da04c09d72 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.50 - 1.21.72 and Minecraft Java 1.21.5. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.50 - 1.21.80 and Minecraft Java 1.21.5. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 667b4190ba1..a5c583b96b9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -210,11 +210,19 @@ public void tick() { if (isPaddlingLeft) { paddleTimeLeft += ROWING_SPEED; - sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_LEFT, paddleTimeLeft); + if (GameProtocol.is1_21_80orHigher(session)) { + dirtyMetadata.put(EntityDataTypes.ROW_TIME_LEFT, paddleTimeLeft); + } else { + sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_LEFT, paddleTimeLeft); + } } if (isPaddlingRight) { paddleTimeRight += ROWING_SPEED; - sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_RIGHT, paddleTimeRight); + if (GameProtocol.is1_21_80orHigher(session)) { + dirtyMetadata.put(EntityDataTypes.ROW_TIME_RIGHT, paddleTimeRight); + } else { + sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_RIGHT, paddleTimeRight); + } } } diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index f2ed792c7f4..b91b3c407c4 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -282,8 +282,6 @@ static BedrockCodec processCodec(BedrockCodec codec) { .updateSerializer(InventorySlotPacket.class, INVENTORY_SLOT_SERIALIZER_V748) .updateSerializer(MovePlayerPacket.class, MOVE_PLAYER_SERIALIZER) .updateSerializer(MoveEntityAbsolutePacket.class, MOVE_ENTITY_SERIALIZER) - .updateSerializer(RiderJumpPacket.class, ILLEGAL_SERIALIZER) - .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER) // Ignored only when serverbound .updateSerializer(BossEventPacket.class, bossEventSerializer) .updateSerializer(MobArmorEquipmentPacket.class, MOB_ARMOR_EQUIPMENT_SERIALIZER) @@ -303,6 +301,13 @@ static BedrockCodec processCodec(BedrockCodec codec) { .updateSerializer(SimpleEventPacket.class, IGNORED_SERIALIZER) .updateSerializer(MultiplayerSettingsPacket.class, IGNORED_SERIALIZER); + // These packets have been removed post 1.21.80. + if (codec.getProtocolVersion() < 800) { + codecBuilder + .updateSerializer(RiderJumpPacket.class, ILLEGAL_SERIALIZER) + .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER); + } + return codecBuilder.build(); } diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index a3e2ac6ac54..04f7a91533b 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -27,10 +27,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; +import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; @@ -49,8 +49,8 @@ public final class GameProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v786.CODEC.toBuilder() - .minecraftVersion("1.21.70") + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v800.CODEC.toBuilder() + .minecraftVersion("1.21.80") .build()); /** @@ -71,6 +71,9 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v776.CODEC.toBuilder() .minecraftVersion("1.21.60 - 1.21.62") .build())); + SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v786.CODEC.toBuilder() + .minecraftVersion("1.21.70 - 1.21.73") + .build())); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } @@ -90,10 +93,6 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean isPreWinterDrop(GeyserSession session) { - return session.getUpstream().getProtocolVersion() == Bedrock_v748.CODEC.getProtocolVersion(); - } - public static boolean isPreCreativeInventoryRewrite(int protocolVersion) { return protocolVersion < 776; } @@ -102,6 +101,14 @@ public static boolean is1_21_70orHigher(GeyserSession session) { return session.protocolVersion() >= Bedrock_v786.CODEC.getProtocolVersion(); } + public static boolean isTheOneVersionWithBrokenForms(GeyserSession session) { + return session.protocolVersion() == Bedrock_v786.CODEC.getProtocolVersion(); + } + + public static boolean is1_21_80orHigher(GeyserSession session) { + return session.protocolVersion() >= Bedrock_v800.CODEC.getProtocolVersion(); + } + /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index af0c9dbc0c1..26e7bc9e87e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -31,6 +31,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.protocol.bedrock.data.biome.BiomeDefinitions; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.PotionMixData; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.geysermc.geyser.GeyserImpl; @@ -98,9 +99,15 @@ public final class Registries { /** * A registry holding a NbtMap of all the known biomes. + * Remove once 1.21.80 is lowest supported version - replaced by {@link Registries#BIOMES} */ public static final SimpleDeferredRegistry BIOMES_NBT = SimpleDeferredRegistry.create("bedrock/biome_definitions.dat", RegistryLoaders.NBT); + /** + * A registry holding biome data for all known biomes. + */ + public static final SimpleDeferredRegistry BIOMES = SimpleDeferredRegistry.create("bedrock/stripped_biome_definitions.json", RegistryLoaders.BIOME_LOADER); + /** * A mapped registry which stores Java biome identifiers and their Bedrock biome identifier. */ @@ -200,6 +207,7 @@ public static void load() { BEDROCK_ENTITY_IDENTIFIERS.load(); BIOMES_NBT.load(); + BIOMES.load(); BIOME_IDENTIFIERS.load(); BLOCK_ENTITIES.load(); PARTICLES.load(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeLoader.java new file mode 100644 index 00000000000..3e6541926fb --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeLoader.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.loader; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapter; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import org.cloudburstmc.protocol.bedrock.data.biome.BiomeDefinitionData; +import org.cloudburstmc.protocol.bedrock.data.biome.BiomeDefinitions; +import org.geysermc.geyser.GeyserImpl; + +import java.awt.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.util.Map; + +public class BiomeLoader implements RegistryLoader { + private final Gson GSON = new GsonBuilder() + .registerTypeAdapter(Color.class, new ColorTypeAdapter()) + .create(); // temporary + + @Override + public BiomeDefinitions load(String input) { + Type type = new TypeToken>() {}.getType(); + Map biomes; + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input)) { + biomes = GSON.fromJson(new InputStreamReader(stream), type); + } catch (Exception e) { + throw new AssertionError("Unable to load Bedrock biomes!", e); + } + + return new BiomeDefinitions(biomes); + } + + public static class ColorTypeAdapter extends TypeAdapter { + + @Override + public void write(JsonWriter out, Color color) throws IOException { + if (color == null) { + out.nullValue(); + return; + } + + out.beginObject(); + out.name("r").value(color.getRed()); + out.name("g").value(color.getGreen()); + out.name("b").value(color.getBlue()); + out.name("a").value(color.getAlpha()); + out.endObject(); + } + + @Override + public Color read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + + int r = 0, g = 0, b = 0, a = 255; + in.beginObject(); + while (in.hasNext()) { + switch (in.nextName()) { + case "r": r = in.nextInt(); break; + case "g": g = in.nextInt(); break; + case "b": b = in.nextInt(); break; + case "a": a = in.nextInt(); break; + default: in.skipValue(); break; + } + } + in.endObject(); + return new Color(r, g, b, a); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java index eaede3b1583..0b26e0178cb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java @@ -38,6 +38,11 @@ public final class RegistryLoaders { */ public static final NbtRegistryLoader NBT = new NbtRegistryLoader(); + /** + * The {@link RegistryLoader} responsible for loading biome data. + */ + public static final BiomeLoader BIOME_LOADER = new BiomeLoader(); + /** * The {@link RegistryLoader} responsible for loading resource packs. */ @@ -69,4 +74,4 @@ public static RegistryLoader uninitialized() { private RegistryLoaders() { } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index bb7a633d258..10d9c8fe260 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -45,6 +45,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; +import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -121,6 +122,7 @@ private static void registerBedrockBlocks() { .put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), Conversion776_766::remapBlock) .put(ObjectIntPair.of("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()), Conversion786_776::remapBlock) .put(ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()), tag -> tag) + .put(ObjectIntPair.of("1_21_80", Bedrock_v800.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 09a65bf8b46..bc3c3a9d198 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -48,6 +48,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; +import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -129,6 +130,8 @@ public static void populate() { paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v766.CODEC.getProtocolVersion(), itemFallbacks, (item, mapping) -> mapping)); paletteVersions.add(new PaletteVersion("1_21_60", Bedrock_v776.CODEC.getProtocolVersion(), itemFallbacks, (item, mapping) -> mapping)); paletteVersions.add(new PaletteVersion("1_21_70", Bedrock_v786.CODEC.getProtocolVersion())); + // Not a typo; they're the same + paletteVersions.add(new PaletteVersion("1_21_70", Bedrock_v800.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index 7401981689b..c9f74eef495 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; +import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.item.type.Item; @@ -70,7 +71,9 @@ public boolean equals(int[] a, int[] b) { List> paletteVersions = List.of( ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), ObjectIntPair.of("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()) + ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()), + // Not a typo, they're the same file + ObjectIntPair.of("1_21_70", Bedrock_v800.CODEC.getProtocolVersion()) ); Type type = new TypeToken>>() {}.getType(); diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 354e640b26c..05944296230 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -786,9 +786,16 @@ public void connect() { ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false); - BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); - biomeDefinitionListPacket.setDefinitions(Registries.BIOMES_NBT.get()); - upstream.sendPacket(biomeDefinitionListPacket); + if (GameProtocol.is1_21_80orHigher(this)) { + BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); + biomeDefinitionListPacket.setBiomes(Registries.BIOMES.get()); + upstream.sendPacket(biomeDefinitionListPacket); + GeyserImpl.getInstance().getLogger().info(biomeDefinitionListPacket.toString()); + } else { + BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); + biomeDefinitionListPacket.setDefinitions(Registries.BIOMES_NBT.get()); + upstream.sendPacket(biomeDefinitionListPacket); + } AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket(); entityPacket.setIdentifiers(Registries.BEDROCK_ENTITY_IDENTIFIERS.get()); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index 2f5d5e51799..be5deece39f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -31,10 +31,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; import lombok.RequiredArgsConstructor; import org.cloudburstmc.protocol.bedrock.packet.ModalFormRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.ModalFormResponsePacket; @@ -48,6 +44,11 @@ import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + @RequiredArgsConstructor public class FormCache { private static final Gson GSON_TEMP = new Gson(); @@ -113,7 +114,7 @@ public void handleResponse(ModalFormResponsePacket response) { //todo work on a proper solution in Cumulus, but that'd require all Floodgate instances to update as well and // drops support for older Bedrock versions (because Cumulus isn't made to support multiple versions). That's // why this hotfix exists. - if (form instanceof CustomForm customForm && GameProtocol.is1_21_70orHigher(session)) { + if (form instanceof CustomForm customForm && GameProtocol.isTheOneVersionWithBrokenForms(session) && response.getCancelReason().isEmpty()) { // Labels are no longer included as a json null, so we have to manually add them for now. IntList labelIndexes = new IntArrayList(); for (int i = 0; i < customForm.content().size(); i++) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 8e09c6c98b3..7c374c73f89 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -171,7 +171,7 @@ public void translate(GeyserSession session, PlayerAuthInputPacket packet) { // Only set steering values when the vehicle is a boat and when the client is actually in it if (entity.getVehicle() instanceof BoatEntity && inputData.contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { boolean up = inputData.contains(PlayerAuthInputData.UP); - // Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase. + // Yes. These are flipped. Welcome to Bedrock edition. // Hi random stranger. I am six days into updating for 1.21.3. How's it going? session.setSteeringLeft(up || inputData.contains(PlayerAuthInputData.PADDLE_RIGHT)); session.setSteeringRight(up || inputData.contains(PlayerAuthInputData.PADDLE_LEFT)); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index 7c8d7f89616..1ca9e268aac 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -55,7 +55,7 @@ public void translate(GeyserSession session, ClientboundSetPassengersPacket pack if (passenger == session.getPlayerEntity()) { session.getPlayerEntity().setVehicle(entity); // We need to confirm teleports before entering a vehicle, or else we will likely exit right out - session.confirmTeleport(passenger.getPosition().sub(0, EntityDefinitions.PLAYER.offset(), 0).toDouble()); + session.confirmTeleport(passenger.getPosition().down(EntityDefinitions.PLAYER.offset()).toDouble()); if (entity instanceof ClientVehicle clientVehicle) { clientVehicle.getVehicleComponent().onMount(); diff --git a/core/src/main/resources/bedrock/block_palette.1_21_80.nbt b/core/src/main/resources/bedrock/block_palette.1_21_80.nbt new file mode 100644 index 00000000000..5e4978635e8 Binary files /dev/null and b/core/src/main/resources/bedrock/block_palette.1_21_80.nbt differ diff --git a/core/src/main/resources/bedrock/stripped_biome_definitions.json b/core/src/main/resources/bedrock/stripped_biome_definitions.json new file mode 100644 index 00000000000..2bb5fc15f7d --- /dev/null +++ b/core/src/main/resources/bedrock/stripped_biome_definitions.json @@ -0,0 +1,2397 @@ +{ + "pale_garden": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "monster", + "overworld", + "pale_garden" + ] + }, + "mangrove_swamp": { + "temperature": 0.8, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -0.2, + "scale": 0.1, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mangrove_swamp", + "overworld", + "monster", + "spawns_slimes_on_surface", + "spawns_warm_variant_farm_animals", + "spawns_warm_variant_frogs" + ] + }, + "snowy_slopes": { + "temperature": -0.3, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "frozen", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits", + "snowy_slopes", + "spawns_cold_variant_farm_animals" + ] + }, + "jagged_peaks": { + "temperature": -0.7, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "frozen", + "jagged_peaks", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "basalt_deltas": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 2.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 63, + "g": 118, + "b": 228 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "nether", + "basalt_deltas", + "spawn_many_magma_cubes", + "spawn_ghast", + "spawns_warm_variant_farm_animals" + ] + }, + "mesa_plateau_mutated": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 85, + "g": 128, + "b": 158 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "mutated", + "overworld", + "plateau", + "stone", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "mesa_bryce": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 20, + "g": 162, + "b": 197 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "mutated", + "overworld", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "savanna_mutated": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.3625, + "scale": 1.225, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "mutated", + "overworld", + "savanna", + "spawns_savanna_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "redwood_taiga_mutated": { + "temperature": 0.25, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 45, + "g": 109, + "b": 119 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "mega", + "monster", + "mutated", + "overworld", + "taiga", + "has_structure_trail_ruins", + "spawns_cold_variant_farm_animals" + ] + }, + "cold_taiga_mutated": { + "temperature": -0.5, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.3, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 32, + "g": 94, + "b": 131 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "cold", + "forest", + "monster", + "mutated", + "taiga", + "overworld_generation", + "spawns_cold_variant_farm_animals" + ] + }, + "birch_forest_hills_mutated": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.55, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 10, + "g": 116, + "b": 196 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "birch", + "forest", + "hills", + "monster", + "mutated", + "overworld_generation" + ] + }, + "birch_forest_mutated": { + "temperature": 0.6, + "downfall": 0.6, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 6, + "g": 119, + "b": 206 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "birch", + "forest", + "monster", + "mutated", + "bee_habitat", + "overworld_generation", + "has_structure_trail_ruins" + ] + }, + "jungle_mutated": { + "temperature": 0.95, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 27, + "g": 158, + "b": 216 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "jungle", + "monster", + "mutated", + "overworld_generation", + "spawns_warm_variant_farm_animals" + ] + }, + "flower_forest": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 32, + "g": 163, + "b": 204 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "flower_forest", + "monster", + "mutated", + "overworld", + "bee_habitat" + ] + }, + "extreme_hills_mutated": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.0, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 14, + "g": 99, + "b": 171 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "extreme_hills", + "monster", + "mutated", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "desert_mutated": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.225, + "scale": 0.25, + "mapWaterColor": { + "a": 165, + "r": 50, + "g": 165, + "b": 152 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "desert", + "monster", + "mutated", + "overworld_generation", + "spawns_gold_rabbits", + "spawns_warm_variant_farm_animals" + ] + }, + "deep_dark": { + "temperature": 0.8, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "caves", + "deep_dark", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs" + ] + }, + "redwood_taiga_hills_mutated": { + "temperature": 0.3, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.55, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 40, + "g": 99, + "b": 120 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "hills", + "mega", + "monster", + "mutated", + "taiga", + "overworld_generation", + "spawns_cold_variant_farm_animals" + ] + }, + "sunflower_plains": { + "temperature": 0.8, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.125, + "scale": 0.05, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "mutated", + "overworld", + "plains", + "bee_habitat" + ] + }, + "bamboo_jungle_hills": { + "temperature": 0.95, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 27, + "g": 158, + "b": 216 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "bamboo", + "hills", + "jungle", + "monster", + "overworld", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "bamboo_jungle": { + "temperature": 0.95, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 20, + "g": 162, + "b": 197 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "bamboo", + "jungle", + "monster", + "overworld", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "deep_frozen_ocean": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.8, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 37, + "g": 112, + "b": 181 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "deep", + "frozen", + "monster", + "ocean", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_polar_bears_on_alternate_blocks" + ] + }, + "jungle_edge_mutated": { + "temperature": 0.95, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 13, + "g": 138, + "b": 227 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "edge", + "jungle", + "monster", + "mutated", + "overworld_generation", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "taiga_mutated": { + "temperature": 0.25, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 30, + "g": 107, + "b": 130 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "monster", + "mutated", + "taiga", + "overworld_generation", + "spawns_cold_variant_farm_animals" + ] + }, + "cold_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 32, + "g": 128, + "b": 201 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "cold", + "monster", + "ocean", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "deep_lukewarm_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.8, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 13, + "g": 150, + "b": 219 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "deep", + "lukewarm", + "monster", + "ocean", + "overworld", + "spawns_warm_variant_farm_animals" + ] + }, + "lukewarm_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 13, + "g": 150, + "b": 219 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "lukewarm", + "monster", + "ocean", + "overworld", + "spawns_warm_variant_farm_animals" + ] + }, + "deep_warm_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.8, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 2, + "g": 176, + "b": 229 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "deep", + "monster", + "ocean", + "overworld", + "warm", + "spawns_warm_variant_farm_animals" + ] + }, + "mesa_plateau": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.5, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 85, + "g": 128, + "b": 158 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "overworld", + "plateau", + "rare", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "deep_cold_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.8, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 32, + "g": 128, + "b": 201 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "cold", + "deep", + "monster", + "ocean", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "crimson_forest": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.25, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 144, + "g": 89, + "b": 87 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "nether", + "netherwart_forest", + "crimson_forest", + "spawn_few_zombified_piglins", + "spawn_piglin", + "spawns_warm_variant_farm_animals" + ] + }, + "mesa": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 78, + "g": 127, + "b": 129 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "overworld", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "mega_taiga_hills": { + "temperature": 0.3, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 40, + "g": 99, + "b": 120 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "hills", + "mega", + "monster", + "overworld", + "taiga", + "spawns_cold_variant_farm_animals" + ] + }, + "stony_peaks": { + "temperature": 1.0, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "forest": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 30, + "g": 151, + "b": 242 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "monster", + "overworld", + "bee_habitat" + ] + }, + "mega_taiga": { + "temperature": 0.3, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 45, + "g": 109, + "b": 119 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "mega", + "monster", + "overworld", + "rare", + "taiga", + "has_structure_trail_ruins", + "spawns_cold_variant_farm_animals" + ] + }, + "mesa_plateau_stone": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.5, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 85, + "g": 128, + "b": 158 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "overworld", + "plateau", + "rare", + "stone", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "swampland": { + "temperature": 0.8, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -0.2, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 76, + "g": 101, + "b": 89 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "overworld", + "swamp", + "spawns_slimes_on_surface" + ] + }, + "roofed_forest": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 59, + "g": 108, + "b": 209 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "monster", + "no_legacy_worldgen", + "overworld", + "roofed" + ] + }, + "birch_forest_hills": { + "temperature": 0.6, + "downfall": 0.6, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 10, + "g": 116, + "b": 196 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "birch", + "forest", + "hills", + "monster", + "overworld", + "bee_habitat" + ] + }, + "cold_beach": { + "temperature": 0.05, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.0, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 20, + "g": 99, + "b": 165 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "beach", + "cold", + "monster", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "jungle": { + "temperature": 0.95, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 20, + "g": 162, + "b": 197 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "has_structure_trail_ruins", + "jungle", + "monster", + "overworld", + "rare", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "stone_beach": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.8, + "mapWaterColor": { + "a": 165, + "r": 13, + "g": 103, + "b": 187 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "beach", + "monster", + "overworld", + "stone" + ] + }, + "birch_forest": { + "temperature": 0.6, + "downfall": 0.6, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 6, + "g": 119, + "b": 206 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "birch", + "forest", + "monster", + "overworld", + "bee_habitat" + ] + }, + "roofed_forest_mutated": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 59, + "g": 108, + "b": 209 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "monster", + "mutated", + "roofed", + "overworld_generation" + ] + }, + "swampland_mutated": { + "temperature": 0.8, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -0.1, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 76, + "g": 101, + "b": 89 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "mutated", + "swamp", + "overworld_generation", + "spawns_slimes_on_surface" + ] + }, + "deep_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.8, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 23, + "g": 135, + "b": 212 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "deep", + "monster", + "ocean", + "overworld", + "spawns_warm_variant_farm_animals" + ] + }, + "cold_taiga_hills": { + "temperature": -0.5, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 36, + "g": 91, + "b": 120 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "cold", + "forest", + "hills", + "monster", + "overworld", + "taiga", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_white_rabbits" + ] + }, + "jungle_edge": { + "temperature": 0.95, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 13, + "g": 138, + "b": 227 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "edge", + "jungle", + "monster", + "overworld", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "savanna": { + "temperature": 1.2, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.125, + "scale": 0.05, + "mapWaterColor": { + "a": 165, + "r": 44, + "g": 139, + "b": 156 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "overworld", + "savanna", + "spawns_savanna_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "meadow": { + "temperature": 0.3, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "meadow", + "bee_habitat" + ] + }, + "jungle_hills": { + "temperature": 0.95, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 27, + "g": 158, + "b": 216 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "hills", + "jungle", + "monster", + "overworld", + "spawns_jungle_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "taiga_hills": { + "temperature": 0.25, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 35, + "g": 101, + "b": 131 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "hills", + "monster", + "overworld", + "forest", + "taiga", + "spawns_cold_variant_farm_animals" + ] + }, + "frozen_peaks": { + "temperature": -0.7, + "downfall": 0.9, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "frozen", + "frozen_peaks", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "taiga": { + "temperature": 0.25, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 40, + "g": 112, + "b": 130 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "forest", + "monster", + "overworld", + "taiga", + "has_structure_trail_ruins", + "spawns_cold_variant_farm_animals" + ] + }, + "forest_hills": { + "temperature": 0.7, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 5, + "g": 107, + "b": 209 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "hills", + "monster", + "overworld", + "forest", + "bee_habitat" + ] + }, + "ice_plains_spikes": { + "temperature": 0.0, + "downfall": 1.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.425, + "scale": 0.45, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "frozen", + "ice_plains", + "monster", + "mutated", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_white_rabbits" + ] + }, + "desert_hills": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 26, + "g": 122, + "b": 161 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "desert", + "hills", + "monster", + "overworld", + "spawns_gold_rabbits", + "spawns_warm_variant_farm_animals" + ] + }, + "beach": { + "temperature": 0.8, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.0, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 21, + "g": 124, + "b": 171 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "beach", + "monster", + "overworld", + "warm" + ] + }, + "ice_plains": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.125, + "scale": 0.05, + "mapWaterColor": { + "a": 165, + "r": 20, + "g": 85, + "b": 155 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "frozen", + "ice", + "ice_plains", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "cold_taiga": { + "temperature": -0.5, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 32, + "g": 94, + "b": 131 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "cold", + "forest", + "monster", + "overworld", + "taiga", + "has_structure_trail_ruins", + "spawns_cold_variant_farm_animals" + ] + }, + "dripstone_caves": { + "temperature": 0.2, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "caves", + "overworld", + "dripstone_caves", + "monster" + ] + }, + "river": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -0.5, + "scale": 0.0, + "mapWaterColor": { + "a": 165, + "r": 0, + "g": 132, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "overworld", + "spawns_more_frequent_drowned", + "spawns_reduced_water_ambient_mobs", + "spawns_river_mobs", + "river" + ] + }, + "savanna_plateau": { + "temperature": 1.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.5, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 37, + "g": 144, + "b": 168 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "overworld", + "plateau", + "savanna", + "spawns_savanna_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "savanna_plateau_mutated": { + "temperature": 1.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.05, + "scale": 1.2125, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "mutated", + "overworld", + "plateau", + "savanna", + "spawns_savanna_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "frozen_river": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -0.5, + "scale": 0.0, + "mapWaterColor": { + "a": 165, + "r": 24, + "g": 83, + "b": 144 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "frozen", + "overworld", + "river", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_river_mobs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "extreme_hills_edge": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.8, + "scale": 0.4, + "mapWaterColor": { + "a": 165, + "r": 4, + "g": 92, + "b": 213 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "edge", + "extreme_hills", + "monster", + "mountain", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "legacy_frozen_ocean": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "legacy", + "frozen", + "ocean", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_polar_bears_on_alternate_blocks" + ] + }, + "plains": { + "temperature": 0.8, + "downfall": 0.4, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.125, + "scale": 0.05, + "mapWaterColor": { + "a": 165, + "r": 68, + "g": 175, + "b": 245 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "monster", + "overworld", + "plains", + "bee_habitat" + ] + }, + "mushroom_island_shore": { + "temperature": 0.9, + "downfall": 1.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.0, + "scale": 0.025, + "mapWaterColor": { + "a": 165, + "r": 129, + "g": 129, + "b": 147 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mooshroom_island", + "overworld", + "shore", + "spawns_without_patrols" + ] + }, + "the_end": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 98, + "g": 82, + "b": 158 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "the_end", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs" + ] + }, + "warped_forest": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.25, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 144, + "g": 89, + "b": 87 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "nether", + "netherwart_forest", + "warped_forest", + "spawn_endermen", + "spawns_warm_variant_farm_animals" + ] + }, + "mesa_plateau_stone_mutated": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 85, + "g": 128, + "b": 158 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "mesa", + "monster", + "mutated", + "overworld", + "plateau", + "spawns_mesa_mobs", + "spawns_warm_variant_farm_animals" + ] + }, + "mushroom_island": { + "temperature": 0.9, + "downfall": 1.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.2, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 138, + "g": 137, + "b": 151 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mooshroom_island", + "overworld", + "spawns_without_patrols" + ] + }, + "grove": { + "temperature": -0.2, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "cold", + "monster", + "overworld", + "grove", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "warm_ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 2, + "g": 176, + "b": 229 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "monster", + "ocean", + "overworld", + "warm", + "spawns_warm_variant_farm_animals", + "spawns_warm_variant_frogs" + ] + }, + "hell": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 144, + "g": 89, + "b": 87 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "nether", + "nether_wastes", + "spawn_endermen", + "spawn_few_piglins", + "spawn_ghast", + "spawn_magma_cubes", + "spawns_nether_mobs", + "spawn_zombified_piglin", + "spawns_warm_variant_farm_animals" + ] + }, + "soulsand_valley": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.05, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 165, + "r": 144, + "g": 89, + "b": 87 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "nether", + "soulsand_valley", + "spawn_ghast", + "spawn_endermen", + "spawns_warm_variant_farm_animals" + ] + }, + "extreme_hills_plus_trees_mutated": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.0, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 14, + "g": 99, + "b": 171 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "extreme_hills", + "forest", + "monster", + "mutated", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "desert": { + "temperature": 2.0, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.125, + "scale": 0.05, + "mapWaterColor": { + "a": 165, + "r": 50, + "g": 165, + "b": 152 + }, + "rain": false, + "chunkGenData": null, + "id": null, + "tags": [ + "desert", + "monster", + "overworld", + "spawns_gold_rabbits", + "spawns_warm_variant_farm_animals", + "spawns_warm_variant_frogs" + ] + }, + "extreme_hills_plus_trees": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.0, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 14, + "g": 99, + "b": 171 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "extreme_hills", + "forest", + "monster", + "mountain", + "overworld", + "spawns_cold_variant_farm_animals" + ] + }, + "cherry_grove": { + "temperature": 0.3, + "downfall": 0.8, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "mountains", + "monster", + "overworld", + "cherry_grove", + "bee_habitat" + ] + }, + "ice_mountains": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.45, + "scale": 0.3, + "mapWaterColor": { + "a": 165, + "r": 17, + "g": 86, + "b": 167 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "frozen", + "ice", + "mountain", + "overworld", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "ocean": { + "temperature": 0.5, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 23, + "g": 135, + "b": 212 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "monster", + "ocean", + "overworld" + ] + }, + "lush_caves": { + "temperature": 0.9, + "downfall": 0.0, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 0.1, + "scale": 0.2, + "mapWaterColor": { + "a": 166, + "r": 96, + "g": 183, + "b": 255 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "caves", + "lush_caves", + "overworld", + "monster", + "spawns_tropical_fish_at_any_height" + ] + }, + "frozen_ocean": { + "temperature": 0.0, + "downfall": 0.5, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": -1.0, + "scale": 0.1, + "mapWaterColor": { + "a": 165, + "r": 37, + "g": 112, + "b": 181 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "frozen", + "monster", + "ocean", + "overworld", + "spawns_polar_bears_on_alternate_blocks", + "spawns_cold_variant_farm_animals", + "spawns_cold_variant_frogs", + "spawns_snow_foxes", + "spawns_white_rabbits" + ] + }, + "extreme_hills": { + "temperature": 0.2, + "downfall": 0.3, + "redSporeDensity": 0.0, + "blueSporeDensity": 0.0, + "ashDensity": 0.0, + "whiteAshDensity": 0.0, + "depth": 1.0, + "scale": 0.5, + "mapWaterColor": { + "a": 165, + "r": 0, + "g": 123, + "b": 247 + }, + "rain": true, + "chunkGenData": null, + "id": null, + "tags": [ + "animal", + "extreme_hills", + "monster", + "overworld", + "spawns_cold_variant_farm_animals" + ] + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e718a288444..ef4eac81eca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,5 @@ org.gradle.vfs.watch=false group=org.geysermc id=geyser -version=2.7.0-SNAPSHOT +version=2.7.1-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 28759540ac8..58ae9aaae57 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -base-api = "1.0.1" +base-api = "1.0.2" cumulus = "1.1.2" erosion = "1.1-20240521.000109-3" events = "1.1-SNAPSHOT" @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta6-20250415.154650-7" -protocol-common = "3.0.0.Beta6-20250415.154650-7" -protocol-codec = "3.0.0.Beta6-20250415.154650-7" +protocol-connection = "3.0.0.Beta6-20250506.012145-17" +protocol-common = "3.0.0.Beta6-20250506.012145-17" +protocol-codec = "3.0.0.Beta6-20250506.012145-17" raknet = "1.0.0.CR3-20250218.160705-18" minecraftauth = "4.1.1" mcprotocollib = "1.21.5-20250410.194555-25"