Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 06:50:09 +01:00
Support 1.17-pre3 and Bedrock 1.17.0.58
Dieser Commit ist enthalten in:
Ursprung
f09a32babc
Commit
f5c5d0cd39
@ -18,7 +18,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!
|
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
|
||||||
|
|
||||||
### Currently supporting Minecraft Bedrock v1.16.220.52 and Minecraft Java 21w20a.
|
### Currently supporting Minecraft Bedrock v1.17.0.58 and Minecraft Java 1.17-pre3.
|
||||||
|
|
||||||
## Setting Up
|
## Setting Up
|
||||||
Take a look [here](https://github.com/GeyserMC/Geyser/wiki#Setup) for how to set up Geyser.
|
Take a look [here](https://github.com/GeyserMC/Geyser/wiki#Setup) for how to set up Geyser.
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.CloudburstMC.Protocol</groupId>
|
<groupId>com.github.CloudburstMC.Protocol</groupId>
|
||||||
<artifactId>bedrock-v431</artifactId>
|
<artifactId>bedrock-v440</artifactId>
|
||||||
<version>530a0e3</version>
|
<version>a8f4e93</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
@ -120,9 +120,9 @@
|
|||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.steveice10</groupId>
|
<groupId>com.github.GeyserMC</groupId>
|
||||||
<artifactId>mcprotocollib</artifactId>
|
<artifactId>MCProtocolLib</artifactId>
|
||||||
<version>1.17-pre1-SNAPSHOT</version>
|
<version>9ba9d7e</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
package org.geysermc.connector.network;
|
package org.geysermc.connector.network;
|
||||||
|
|
||||||
import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
|
import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
|
||||||
import com.nukkitx.protocol.bedrock.v431.Bedrock_v431;
|
import com.nukkitx.protocol.bedrock.v440.Bedrock_v440;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -39,7 +39,7 @@ public class BedrockProtocol {
|
|||||||
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
||||||
* release of the game that Geyser supports.
|
* release of the game that Geyser supports.
|
||||||
*/
|
*/
|
||||||
public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v431.V431_CODEC;
|
public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v440.V440_CODEC;
|
||||||
/**
|
/**
|
||||||
* A list of all supported Bedrock versions that can join Geyser
|
* A list of all supported Bedrock versions that can join Geyser
|
||||||
*/
|
*/
|
||||||
|
@ -37,7 +37,7 @@ import org.geysermc.connector.network.session.GeyserSession;
|
|||||||
import org.geysermc.connector.network.session.cache.AdvancementsCache;
|
import org.geysermc.connector.network.session.cache.AdvancementsCache;
|
||||||
import org.geysermc.connector.network.translators.PacketTranslatorRegistry;
|
import org.geysermc.connector.network.translators.PacketTranslatorRegistry;
|
||||||
import org.geysermc.connector.network.translators.item.ItemRegistry;
|
import org.geysermc.connector.network.translators.item.ItemRegistry;
|
||||||
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210;
|
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_17_0;
|
||||||
import org.geysermc.connector.utils.*;
|
import org.geysermc.connector.utils.*;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@ -72,7 +72,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
|||||||
session.getUpstream().getSession().setPacketCodec(packetCodec);
|
session.getUpstream().getSession().setPacketCodec(packetCodec);
|
||||||
|
|
||||||
// Set the block translation based off of version
|
// Set the block translation based off of version
|
||||||
session.setBlockTranslator(BlockTranslator1_16_210.INSTANCE);
|
session.setBlockTranslator(BlockTranslator1_17_0.INSTANCE);
|
||||||
|
|
||||||
LoginEncryptionUtils.encryptPlayerConnection(connector, session, loginPacket);
|
LoginEncryptionUtils.encryptPlayerConnection(connector, session, loginPacket);
|
||||||
|
|
||||||
@ -137,8 +137,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
|||||||
stackPacket.getExperiments().add(new ExperimentData("data_driven_items", true));
|
stackPacket.getExperiments().add(new ExperimentData("data_driven_items", true));
|
||||||
}
|
}
|
||||||
|
|
||||||
stackPacket.getExperiments().add(new ExperimentData("caves_and_cliffs", true));
|
|
||||||
|
|
||||||
session.sendUpstreamPacket(stackPacket);
|
session.sendUpstreamPacket(stackPacket);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -512,12 +512,7 @@ public class GeyserSession implements CommandSender {
|
|||||||
upstream.sendPacket(entityPacket);
|
upstream.sendPacket(entityPacket);
|
||||||
|
|
||||||
CreativeContentPacket creativePacket = new CreativeContentPacket();
|
CreativeContentPacket creativePacket = new CreativeContentPacket();
|
||||||
if (upstream.getSession().getPacketCodec().getProtocolVersion() < Bedrock_v431.V431_CODEC.getProtocolVersion()) {
|
creativePacket.setContents(ItemRegistry.CREATIVE_ITEMS);
|
||||||
creativePacket.setContents(ItemRegistry.getPre1_16_220CreativeContents());
|
|
||||||
} else {
|
|
||||||
// No additional work required
|
|
||||||
creativePacket.setContents(ItemRegistry.CREATIVE_ITEMS);
|
|
||||||
}
|
|
||||||
upstream.sendPacket(creativePacket);
|
upstream.sendPacket(creativePacket);
|
||||||
|
|
||||||
PlayStatusPacket playStatusPacket = new PlayStatusPacket();
|
PlayStatusPacket playStatusPacket = new PlayStatusPacket();
|
||||||
@ -1048,6 +1043,7 @@ public class GeyserSession implements CommandSender {
|
|||||||
startGamePacket.setItemEntries(ItemRegistry.ITEMS);
|
startGamePacket.setItemEntries(ItemRegistry.ITEMS);
|
||||||
startGamePacket.setVanillaVersion("*");
|
startGamePacket.setVanillaVersion("*");
|
||||||
startGamePacket.setInventoriesServerAuthoritative(true);
|
startGamePacket.setInventoriesServerAuthoritative(true);
|
||||||
|
startGamePacket.setServerEngine(""); // Do we want to fill this in?
|
||||||
|
|
||||||
SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings();
|
SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings();
|
||||||
settings.setMovementMode(AuthoritativeMovementMode.CLIENT);
|
settings.setMovementMode(AuthoritativeMovementMode.CLIENT);
|
||||||
@ -1055,8 +1051,6 @@ public class GeyserSession implements CommandSender {
|
|||||||
settings.setServerAuthoritativeBlockBreaking(false);
|
settings.setServerAuthoritativeBlockBreaking(false);
|
||||||
startGamePacket.setPlayerMovementSettings(settings);
|
startGamePacket.setPlayerMovementSettings(settings);
|
||||||
|
|
||||||
startGamePacket.getExperiments().add(new ExperimentData("caves_and_cliffs", true));
|
|
||||||
|
|
||||||
upstream.sendPacket(startGamePacket);
|
upstream.sendPacket(startGamePacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ package org.geysermc.connector.network.translators.item;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210;
|
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_17_0;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@ -36,7 +36,7 @@ import org.geysermc.connector.network.translators.world.block.BlockTranslator1_1
|
|||||||
public class ItemEntry {
|
public class ItemEntry {
|
||||||
|
|
||||||
public static ItemEntry AIR = new ItemEntry("minecraft:air", "minecraft:air", 0, 0, 0,
|
public static ItemEntry AIR = new ItemEntry("minecraft:air", "minecraft:air", 0, 0, 0,
|
||||||
BlockTranslator1_16_210.INSTANCE.getBedrockAirId(), 64);
|
BlockTranslator1_17_0.INSTANCE.getBedrockAirId(), 64);
|
||||||
|
|
||||||
private final String javaIdentifier;
|
private final String javaIdentifier;
|
||||||
private final String bedrockIdentifier;
|
private final String bedrockIdentifier;
|
||||||
|
@ -45,7 +45,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
|||||||
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
import org.geysermc.connector.network.translators.world.block.BlockTranslator;
|
import org.geysermc.connector.network.translators.world.block.BlockTranslator;
|
||||||
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210;
|
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_17_0;
|
||||||
import org.geysermc.connector.utils.FileUtils;
|
import org.geysermc.connector.utils.FileUtils;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ public class ItemRegistry {
|
|||||||
throw new AssertionError(LanguageUtils.getLocaleStringLog("geyser.toolbox.fail.runtime_java"), e);
|
throw new AssertionError(LanguageUtils.getLocaleStringLog("geyser.toolbox.fail.runtime_java"), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockTranslator blockTranslator = BlockTranslator1_16_210.INSTANCE;
|
BlockTranslator blockTranslator = BlockTranslator1_17_0.INSTANCE;
|
||||||
|
|
||||||
int itemIndex = 0;
|
int itemIndex = 0;
|
||||||
int javaFurnaceMinecartId = 0;
|
int javaFurnaceMinecartId = 0;
|
||||||
@ -537,37 +537,6 @@ public class ItemRegistry {
|
|||||||
JAVA_ONLY_ITEMS = ImmutableSet.copyOf(javaOnlyItems);
|
JAVA_ONLY_ITEMS = ImmutableSet.copyOf(javaOnlyItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pre-1.16.220 support start */
|
|
||||||
|
|
||||||
private static ItemData[] LEGACY_CREATIVE_CONTENTS = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Built on the fly so extra memory isn't used if there are no 1.16.210-or-below clients joining.
|
|
||||||
*
|
|
||||||
* @return a list of creative items built for versions before 1.16.220.
|
|
||||||
*/
|
|
||||||
public static ItemData[] getPre1_16_220CreativeContents() {
|
|
||||||
if (LEGACY_CREATIVE_CONTENTS != null) {
|
|
||||||
return LEGACY_CREATIVE_CONTENTS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pre-1.16.220 relies on item damage values that the creative content packet drops
|
|
||||||
ItemData[] creativeContents = new ItemData[CREATIVE_ITEMS.length];
|
|
||||||
for (int i = 0; i < CREATIVE_ITEMS.length; i++) {
|
|
||||||
ItemData item = CREATIVE_ITEMS[i];
|
|
||||||
if (item.getBlockRuntimeId() != 0) {
|
|
||||||
creativeContents[i] = item.toBuilder().damage(getItem(item).getBedrockData()).build();
|
|
||||||
} else {
|
|
||||||
// No block runtime ID means that this item is backwards-compatible
|
|
||||||
creativeContents[i] = item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LEGACY_CREATIVE_CONTENTS = creativeContents;
|
|
||||||
return creativeContents;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* pre-1.16.220 support end */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an {@link ItemEntry} from the given {@link ItemStack}.
|
* Gets an {@link ItemEntry} from the given {@link ItemStack}.
|
||||||
*
|
*
|
||||||
|
@ -43,9 +43,7 @@ import org.geysermc.connector.utils.FileUtils;
|
|||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
public abstract class BlockTranslator {
|
public abstract class BlockTranslator {
|
||||||
@ -221,7 +219,7 @@ public abstract class BlockTranslator {
|
|||||||
|
|
||||||
BlockMapping.AIR = JAVA_RUNTIME_ID_TO_BLOCK_MAPPING.get(JAVA_AIR_ID);
|
BlockMapping.AIR = JAVA_RUNTIME_ID_TO_BLOCK_MAPPING.get(JAVA_AIR_ID);
|
||||||
|
|
||||||
BlockTranslator1_16_210.init();
|
BlockTranslator1_17_0.init();
|
||||||
BLOCKS_JSON = null; // We no longer require this so let it garbage collect away
|
BLOCKS_JSON = null; // We no longer require this so let it garbage collect away
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,11 +25,11 @@
|
|||||||
|
|
||||||
package org.geysermc.connector.network.translators.world.block;
|
package org.geysermc.connector.network.translators.world.block;
|
||||||
|
|
||||||
public class BlockTranslator1_16_210 extends BlockTranslator {
|
public class BlockTranslator1_17_0 extends BlockTranslator {
|
||||||
public static final BlockTranslator1_16_210 INSTANCE = new BlockTranslator1_16_210();
|
public static final BlockTranslator1_17_0 INSTANCE = new BlockTranslator1_17_0();
|
||||||
|
|
||||||
public BlockTranslator1_16_210() {
|
public BlockTranslator1_17_0() {
|
||||||
super("bedrock/blockpalette.1_16_210.nbt");
|
super("bedrock/block_palette.1_17_0.nbt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -74,17 +74,7 @@ public class ChunkUtils {
|
|||||||
|
|
||||||
public static ChunkData translateToBedrock(GeyserSession session, Column column) {
|
public static ChunkData translateToBedrock(GeyserSession session, Column column) {
|
||||||
Chunk[] javaSections = column.getChunks();
|
Chunk[] javaSections = column.getChunks();
|
||||||
|
ChunkSection[] sections = new ChunkSection[javaSections.length];
|
||||||
//FIXME TEMPORARY UNTIL THE CAVES AND CLIFFS EXPERIMENTAL DATA IS REMOVED UNLESS IT'S NOT REMOVED THEN HMMMM
|
|
||||||
int sectionYOffset;
|
|
||||||
if (session.getDimension().equals(DimensionUtils.OVERWORLD)) {
|
|
||||||
sectionYOffset = 4;
|
|
||||||
} else {
|
|
||||||
sectionYOffset = 0;
|
|
||||||
}
|
|
||||||
//FIXME END
|
|
||||||
|
|
||||||
ChunkSection[] sections = new ChunkSection[javaSections.length + sectionYOffset];
|
|
||||||
|
|
||||||
// Temporarily stores compound tags of Bedrock-only block entities
|
// Temporarily stores compound tags of Bedrock-only block entities
|
||||||
List<NbtMap> bedrockOnlyBlockEntities = new ArrayList<>();
|
List<NbtMap> bedrockOnlyBlockEntities = new ArrayList<>();
|
||||||
@ -197,7 +187,7 @@ public class ChunkUtils {
|
|||||||
layers = new BlockStorage[]{ layer0, new BlockStorage(BitArrayVersion.V1.createArray(BlockStorage.SIZE, layer1Data), layer1Palette) };
|
layers = new BlockStorage[]{ layer0, new BlockStorage(BitArrayVersion.V1.createArray(BlockStorage.SIZE, layer1Data), layer1Palette) };
|
||||||
}
|
}
|
||||||
|
|
||||||
sections[sectionY + sectionYOffset] = new ChunkSection(layers);
|
sections[sectionY] = new ChunkSection(layers);
|
||||||
}
|
}
|
||||||
|
|
||||||
CompoundTag[] blockEntities = column.getTileEntities();
|
CompoundTag[] blockEntities = column.getTileEntities();
|
||||||
|
Binäre Datei nicht angezeigt.
BIN
connector/src/main/resources/bedrock/block_palette.1_17_0.nbt
Normale Datei
BIN
connector/src/main/resources/bedrock/block_palette.1_17_0.nbt
Normale Datei
Binäre Datei nicht angezeigt.
Binäre Datei nicht angezeigt.
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Binäre Datei nicht angezeigt.
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -1 +1 @@
|
|||||||
Subproject commit c5925b01cf8e7d8b284cf359e927145b9b4694aa
|
Subproject commit 07bd1db239492e22214abd911696b8cb99b0fe28
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren