diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java index 87004507f..bc8c63960 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java @@ -77,6 +77,7 @@ public class ProtocolVersion { public static final ProtocolVersion v1_16_3 = register(753, "1.16.3"); public static final ProtocolVersion v1_16_4 = register(754, "1.16.4/5", new VersionRange("1.16", 4, 5)); public static final ProtocolVersion v1_17 = register(755, "1.17"); + public static final ProtocolVersion v1_17_1 = register(756, 36, "1.17.1"); public static final ProtocolVersion unknown = register(-1, "UNKNOWN"); public static ProtocolVersion register(int version, String name) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java index 96d820ced..a138b700c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java @@ -57,6 +57,7 @@ import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.Protocol1_16_2 import com.viaversion.viaversion.protocols.protocol1_16_3to1_16_2.Protocol1_16_3To1_16_2; import com.viaversion.viaversion.protocols.protocol1_16_4to1_16_3.Protocol1_16_4To1_16_3; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.Protocol1_16To1_15_2; +import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.Protocol1_17_1To1_17; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4; import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4; import com.viaversion.viaversion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9; @@ -160,6 +161,7 @@ public class ProtocolManagerImpl implements ProtocolManager { registerProtocol(new Protocol1_16_4To1_16_3(), ProtocolVersion.v1_16_4, ProtocolVersion.v1_16_3); registerProtocol(new Protocol1_17To1_16_4(), ProtocolVersion.v1_17, ProtocolVersion.v1_16_4); + registerProtocol(new Protocol1_17_1To1_17(), ProtocolVersion.v1_17_1, ProtocolVersion.v1_17); } @Override diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java new file mode 100644 index 000000000..f3d029361 --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java @@ -0,0 +1,112 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2021 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.viaversion.viaversion.protocols.protocol1_17_1to1_17; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.viaversion.viaversion.api.minecraft.item.DataItem; +import com.viaversion.viaversion.api.minecraft.item.Item; +import com.viaversion.viaversion.api.protocol.AbstractProtocol; +import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.StringType; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; + +public class Protocol1_17_1To1_17 extends AbstractProtocol { + + private static final StringType PAGE_STRING_TYPE = new StringType(8192); + private static final StringType TITLE_STRING_TYPE = new StringType(128); + + public Protocol1_17_1To1_17() { + super(ClientboundPackets1_17.class, ClientboundPackets1_17.class, ServerboundPackets1_17.class, ServerboundPackets1_17.class); + } + + @Override + protected void registerPackets() { + registerClientbound(ClientboundPackets1_17.SET_SLOT, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.BYTE); // Container id + create(Type.VAR_INT, 0); // Add arbitrary state id + } + }); + registerClientbound(ClientboundPackets1_17.WINDOW_ITEMS, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.UNSIGNED_BYTE); // Container id + create(Type.VAR_INT, 0); // Add arbitrary state id + handler(wrapper -> { + // Length encoded as var int now + wrapper.write(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY)); + + // Carried item - should work like this + wrapper.write(Type.FLAT_VAR_INT_ITEM, null); + }); + } + }); + + registerServerbound(ServerboundPackets1_17.CLICK_WINDOW, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.UNSIGNED_BYTE); // Container id + read(Type.VAR_INT); // Remove state id + } + }); + + registerServerbound(ServerboundPackets1_17.EDIT_BOOK, new PacketRemapper() { + @Override + public void registerMap() { + handler(wrapper -> { + CompoundTag tag = new CompoundTag(); + Item item = new DataItem(825, (byte) 1, (short) 0, tag); // Magic value for writable books + + // Write the item, edit the tag down the line + wrapper.write(Type.FLAT_VAR_INT_ITEM, item); + + int slot = wrapper.read(Type.VAR_INT); + + // Save pages to tag + int pages = wrapper.read(Type.VAR_INT); + ListTag pagesTag = new ListTag(StringTag.class); + for (int i = 0; i < pages; i++) { + String page = wrapper.read(PAGE_STRING_TYPE); + pagesTag.add(new StringTag(page)); + } + + tag.put("pages", pagesTag); + + if (wrapper.read(Type.BOOLEAN)) { + // Save the title to tag + String title = wrapper.read(TITLE_STRING_TYPE); + tag.put("title", new StringTag(title)); + + // Write signing + wrapper.write(Type.BOOLEAN, true); + } else { + wrapper.write(Type.BOOLEAN, false); + } + + // Write the slot + wrapper.write(Type.VAR_INT, slot); + }); + } + }); + } +} diff --git a/gradle.properties b/gradle.properties index 80e721bc3..70d031711 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project properties - we put these here so they can be modified without causing a recompile of the build scripts -projectVersion=4.0.1-SNAPSHOT +projectVersion=4.0.1-1.17.1-pre1-SNAPSHOT # Gradle properties org.gradle.daemon=true