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

Initial 1.19.40.24 Bedrock support

Dieser Commit ist enthalten in:
Camotoy 2022-10-18 19:04:02 -04:00
Ursprung 730b0beb01
Commit 94a810b683
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 7EEFB66FE798081F
7 geänderte Dateien mit 37 neuen und 30 gelöschten Zeilen

Datei anzeigen

@ -27,7 +27,7 @@ package org.geysermc.geyser.level;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.IntTag;
import org.geysermc.geyser.util.JavaCodecEntry; import org.geysermc.geyser.util.JavaCodecUtil;
import java.util.Map; import java.util.Map;
@ -39,7 +39,7 @@ import java.util.Map;
public record JavaDimension(int minY, int maxY, boolean piglinSafe, double worldCoordinateScale) { public record JavaDimension(int minY, int maxY, boolean piglinSafe, double worldCoordinateScale) {
public static void load(CompoundTag tag, Map<String, JavaDimension> map) { public static void load(CompoundTag tag, Map<String, JavaDimension> map) {
for (CompoundTag dimension : JavaCodecEntry.iterateAsTag(tag.get("minecraft:dimension_type"))) { for (CompoundTag dimension : JavaCodecUtil.iterateAsTag(tag.get("minecraft:dimension_type"))) {
CompoundTag elements = dimension.get("element"); CompoundTag elements = dimension.get("element");
int minY = ((IntTag) elements.get("min_y")).getValue(); int minY = ((IntTag) elements.get("min_y")).getValue();
int maxY = ((IntTag) elements.get("height")).getValue(); int maxY = ((IntTag) elements.get("height")).getValue();

Datei anzeigen

@ -33,6 +33,7 @@ import com.nukkitx.protocol.bedrock.v534.Bedrock_v534;
import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544;
import com.nukkitx.protocol.bedrock.v545.Bedrock_v545; import com.nukkitx.protocol.bedrock.v545.Bedrock_v545;
import com.nukkitx.protocol.bedrock.v554.Bedrock_v554; import com.nukkitx.protocol.bedrock.v554.Bedrock_v554;
import com.nukkitx.protocol.bedrock.v557.Bedrock_v557;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import java.util.ArrayList; import java.util.ArrayList;
@ -75,6 +76,7 @@ public final class GameProtocol {
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder()
.minecraftVersion("1.19.30/1.19.31") .minecraftVersion("1.19.30/1.19.31")
.build()); .build());
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.V557_CODEC);
} }
/** /**

Datei anzeigen

@ -45,7 +45,7 @@ import org.geysermc.geyser.level.chunk.bitarray.BitArrayVersion;
import org.geysermc.geyser.level.chunk.bitarray.SingletonBitArray; import org.geysermc.geyser.level.chunk.bitarray.SingletonBitArray;
import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.Registries;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.util.JavaCodecEntry; import org.geysermc.geyser.util.JavaCodecUtil;
import org.geysermc.geyser.util.MathUtils; import org.geysermc.geyser.util.MathUtils;
// Array index formula by https://wiki.vg/Chunk_Format // Array index formula by https://wiki.vg/Chunk_Format
@ -59,7 +59,7 @@ public class BiomeTranslator {
ListTag serverBiomes = worldGen.get("value"); ListTag serverBiomes = worldGen.get("value");
session.setBiomeGlobalPalette(MathUtils.getGlobalPaletteForSize(serverBiomes.size())); session.setBiomeGlobalPalette(MathUtils.getGlobalPaletteForSize(serverBiomes.size()));
for (CompoundTag biomeTag : JavaCodecEntry.iterateAsTag(worldGen)) { for (CompoundTag biomeTag : JavaCodecUtil.iterateAsTag(worldGen)) {
String javaIdentifier = ((StringTag) biomeTag.get("name")).getValue(); String javaIdentifier = ((StringTag) biomeTag.get("name")).getValue();
int bedrockId = Registries.BIOME_IDENTIFIERS.get().getOrDefault(javaIdentifier, 0); int bedrockId = Registries.BIOME_IDENTIFIERS.get().getOrDefault(javaIdentifier, 0);
int javaId = ((IntTag) biomeTag.get("id")).getValue(); int javaId = ((IntTag) biomeTag.get("id")).getValue();

Datei anzeigen

@ -46,7 +46,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator;
import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.Translator;
import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.ChunkUtils;
import org.geysermc.geyser.util.DimensionUtils; import org.geysermc.geyser.util.DimensionUtils;
import org.geysermc.geyser.util.JavaCodecEntry; import org.geysermc.geyser.util.JavaCodecUtil;
import org.geysermc.geyser.util.PluginMessageUtils; import org.geysermc.geyser.util.PluginMessageUtils;
import java.util.Map; import java.util.Map;
@ -66,7 +66,7 @@ public class JavaLoginTranslator extends PacketTranslator<ClientboundLoginPacket
Int2ObjectMap<TextDecoration> chatTypes = session.getChatTypes(); Int2ObjectMap<TextDecoration> chatTypes = session.getChatTypes();
chatTypes.clear(); chatTypes.clear();
for (CompoundTag tag : JavaCodecEntry.iterateAsTag(packet.getRegistry().get("minecraft:chat_type"))) { for (CompoundTag tag : JavaCodecUtil.iterateAsTag(packet.getRegistry().get("minecraft:chat_type"))) {
// The ID is NOT ALWAYS THE SAME! ViaVersion as of 1.19 adds two registry entries that do NOT match vanilla. // The ID is NOT ALWAYS THE SAME! ViaVersion as of 1.19 adds two registry entries that do NOT match vanilla.
int id = ((IntTag) tag.get("id")).getValue(); int id = ((IntTag) tag.get("id")).getValue();
CompoundTag element = tag.get("element"); CompoundTag element = tag.get("element");

Datei anzeigen

@ -32,7 +32,7 @@ import com.github.steveice10.opennbt.tag.builtin.Tag;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.Iterator; import java.util.Iterator;
public record JavaCodecEntry() { public final class JavaCodecUtil {
/** /**
* Iterate over a Java Edition codec and return each entry as a CompoundTag * Iterate over a Java Edition codec and return each entry as a CompoundTag
@ -58,4 +58,7 @@ public record JavaCodecEntry() {
} }
}; };
} }
private JavaCodecUtil() {
}
} }

Datei anzeigen

@ -26,17 +26,17 @@
package org.geysermc.geyser.util; package org.geysermc.geyser.util;
import com.github.steveice10.mc.protocol.data.game.statistic.StatisticFormat; import com.github.steveice10.mc.protocol.data.game.statistic.StatisticFormat;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.EnumMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.IntFunction; import java.util.function.IntFunction;
public class StatisticFormatters { public final class StatisticFormatters {
private static final Map<StatisticFormat, IntFunction<String>> FORMATTERS = new Object2ObjectOpenHashMap<>(); private static final Map<StatisticFormat, IntFunction<String>> FORMATTERS = new EnumMap<>(StatisticFormat.class);
private static final DecimalFormat FORMAT = new DecimalFormat("###,###,##0.00"); private static final DecimalFormat FORMAT = new DecimalFormat("###,###,##0.00");
public static final IntFunction<String> INTEGER = NumberFormat.getIntegerInstance(Locale.US)::format; public static final IntFunction<String> INTEGER = NumberFormat.getIntegerInstance(Locale.US)::format;
@ -78,4 +78,7 @@ public class StatisticFormatters {
public static IntFunction<String> get(StatisticFormat format) { public static IntFunction<String> get(StatisticFormat format) {
return FORMATTERS.getOrDefault(format, INTEGER); return FORMATTERS.getOrDefault(format, INTEGER);
} }
private StatisticFormatters() {
}
} }

Datei anzeigen

@ -26,6 +26,7 @@
package org.geysermc.geyser.util; package org.geysermc.geyser.util;
import com.github.steveice10.mc.protocol.data.game.statistic.*; import com.github.steveice10.mc.protocol.data.game.statistic.*;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import org.geysermc.cumulus.form.SimpleForm; import org.geysermc.cumulus.form.SimpleForm;
import org.geysermc.cumulus.util.FormImage; import org.geysermc.cumulus.util.FormImage;
import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.BlockRegistries;
@ -37,7 +38,6 @@ import org.geysermc.geyser.text.MinecraftLocale;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.function.IntFunction; import java.util.function.IntFunction;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -79,23 +79,23 @@ public class StatisticsUtils {
case 0: case 0:
builder.title("stat.generalButton"); builder.title("stat.generalButton");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof CustomStatistic statistic) { if (entry.getKey() instanceof CustomStatistic statistic) {
String statName = statistic.name().toLowerCase(Locale.ROOT); String statName = statistic.name().toLowerCase(Locale.ROOT);
IntFunction<String> formatter = StatisticFormatters.get(statistic.getFormat()); IntFunction<String> formatter = StatisticFormatters.get(statistic.getFormat());
content.add("stat.minecraft." + statName + ": " + formatter.apply(entry.getValue())); content.add("stat.minecraft." + statName + ": " + formatter.apply(entry.getIntValue()));
} }
} }
break; break;
case 1: case 1:
builder.title("stat.itemsButton - stat_type.minecraft.mined"); builder.title("stat.itemsButton - stat_type.minecraft.mined");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof BreakBlockStatistic statistic) { if (entry.getKey() instanceof BreakBlockStatistic statistic) {
String identifier = BlockRegistries.CLEAN_JAVA_IDENTIFIERS.get(statistic.getId()); String identifier = BlockRegistries.CLEAN_JAVA_IDENTIFIERS.get(statistic.getId());
if (identifier != null) { if (identifier != null) {
String block = identifier.replace("minecraft:", "block.minecraft."); String block = identifier.replace("minecraft:", "block.minecraft.");
content.add(block + ": " + entry.getValue()); content.add(block + ": " + entry.getIntValue());
} }
} }
} }
@ -103,71 +103,70 @@ public class StatisticsUtils {
case 2: case 2:
builder.title("stat.itemsButton - stat_type.minecraft.broken"); builder.title("stat.itemsButton - stat_type.minecraft.broken");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof BreakItemStatistic statistic) { if (entry.getKey() instanceof BreakItemStatistic statistic) {
String item = mappings.getMapping(statistic.getId()).getJavaIdentifier(); String item = mappings.getMapping(statistic.getId()).getJavaIdentifier();
content.add(getItemTranslateKey(item, language) + ": " + entry.getValue()); content.add(getItemTranslateKey(item, language) + ": " + entry.getIntValue());
} }
} }
break; break;
case 3: case 3:
builder.title("stat.itemsButton - stat_type.minecraft.crafted"); builder.title("stat.itemsButton - stat_type.minecraft.crafted");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof CraftItemStatistic statistic) { if (entry.getKey() instanceof CraftItemStatistic statistic) {
String item = mappings.getMapping(statistic.getId()).getJavaIdentifier(); String item = mappings.getMapping(statistic.getId()).getJavaIdentifier();
content.add(getItemTranslateKey(item, language) + ": " + entry.getValue()); content.add(getItemTranslateKey(item, language) + ": " + entry.getIntValue());
} }
} }
break; break;
case 4: case 4:
builder.title("stat.itemsButton - stat_type.minecraft.used"); builder.title("stat.itemsButton - stat_type.minecraft.used");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof UseItemStatistic statistic) { if (entry.getKey() instanceof UseItemStatistic statistic) {
String item = mappings.getMapping(statistic.getId()).getJavaIdentifier(); String item = mappings.getMapping(statistic.getId()).getJavaIdentifier();
content.add(getItemTranslateKey(item, language) + ": " + entry.getValue()); content.add(getItemTranslateKey(item, language) + ": " + entry.getIntValue());
} }
} }
break; break;
case 5: case 5:
builder.title("stat.itemsButton - stat_type.minecraft.picked_up"); builder.title("stat.itemsButton - stat_type.minecraft.picked_up");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof PickupItemStatistic statistic) { if (entry.getKey() instanceof PickupItemStatistic statistic) {
String item = mappings.getMapping(statistic.getId()).getJavaIdentifier(); String item = mappings.getMapping(statistic.getId()).getJavaIdentifier();
content.add(getItemTranslateKey(item, language) + ": " + entry.getValue()); content.add(getItemTranslateKey(item, language) + ": " + entry.getIntValue());
} }
} }
break; break;
case 6: case 6:
builder.title("stat.itemsButton - stat_type.minecraft.dropped"); builder.title("stat.itemsButton - stat_type.minecraft.dropped");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof DropItemStatistic statistic) { if (entry.getKey() instanceof DropItemStatistic statistic) {
String item = mappings.getMapping(statistic.getId()).getJavaIdentifier(); String item = mappings.getMapping(statistic.getId()).getJavaIdentifier();
content.add(getItemTranslateKey(item, language) + ": " + entry.getValue()); content.add(getItemTranslateKey(item, language) + ": " + entry.getIntValue());
} }
} }
break; break;
case 7: case 7:
builder.title("stat.mobsButton - geyser.statistics.killed"); builder.title("stat.mobsButton - geyser.statistics.killed");
for (Map.Entry<Statistic, Integer> entry : session.getStatistics().entrySet()) { for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
if (entry.getKey() instanceof KillEntityStatistic statistic) { if (entry.getKey() instanceof KillEntityStatistic statistic) {
String entityName = statistic.getEntity().name().toLowerCase(Locale.ROOT); String entityName = statistic.getEntity().name().toLowerCase(Locale.ROOT);
content.add("entity.minecraft." + entityName + ": " + entry.getValue()); content.add("entity.minecraft." + entityName + ": " + entry.getIntValue());
} }
} }
break; break;
case 8: case 8:
builder.title("stat.mobsButton - geyser.statistics.killed_by"); builder.title("stat.mobsButton - geyser.statistics.killed_by");
for (Map.Entry<Statistic, Integer> entry : session for (Object2IntMap.Entry<Statistic> entry : session.getStatistics().object2IntEntrySet()) {
.getStatistics().entrySet()) {
if (entry.getKey() instanceof KilledByEntityStatistic statistic) { if (entry.getKey() instanceof KilledByEntityStatistic statistic) {
String entityName = statistic.getEntity().name().toLowerCase(Locale.ROOT); String entityName = statistic.getEntity().name().toLowerCase(Locale.ROOT);
content.add("entity.minecraft." + entityName + ": " + entry.getValue()); content.add("entity.minecraft." + entityName + ": " + entry.getIntValue());
} }
} }
break; break;