diff --git a/build.gradle.kts b/build.gradle.kts index 803e50bf..583ad5e3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { allprojects { group = "com.viaversion" - version = "4.8.0-23w31a-SNAPSHOT" + version = "4.8.0-23w32a-SNAPSHOT" description = "Allow older clients to join newer server versions." } diff --git a/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java b/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java index f94ef6d8..6e1f988e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java @@ -51,7 +51,7 @@ import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_ import com.viaversion.viabackwards.protocol.protocol1_19_3to1_19_4.Protocol1_19_3To1_19_4; import com.viaversion.viabackwards.protocol.protocol1_19_4to1_20.Protocol1_19_4To1_20; import com.viaversion.viabackwards.protocol.protocol1_19to1_19_1.Protocol1_19To1_19_1; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.Protocol1_20To1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.Protocol1_20To1_20_2; import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.protocol.ProtocolManager; diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/Protocol1_20To1_20_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java similarity index 94% rename from common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/Protocol1_20To1_20_2.java rename to common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java index 3784ecd8..1c28a790 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/Protocol1_20To1_20_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java @@ -15,13 +15,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2; +package com.viaversion.viabackwards.protocol.protocol1_20to1_20_2; import com.viaversion.viabackwards.api.BackwardsProtocol; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.rewriter.BlockItemPacketRewriter1_20_2; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.rewriter.EntityPacketRewriter1_20_2; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.storage.ConfigurationPacketStorage; -import com.viaversion.viaversion.api.Via; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.rewriter.BlockItemPacketRewriter1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.rewriter.EntityPacketRewriter1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.storage.ConfigurationPacketStorage; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; import com.viaversion.viaversion.api.protocol.packet.Direction; @@ -55,7 +54,6 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol { final int slot = wrapper.read(Type.VAR_INT); @@ -73,7 +71,6 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol { wrapper.cancel(); wrapper.create(ServerboundConfigurationPackets1_20_2.FINISH_CONFIGURATION).sendToServer(Protocol1_20To1_20_2.class); - wrapper.user().getProtocolInfo().setState(State.PLAY); wrapper.user().get(ConfigurationPacketStorage.class).setFinished(true); }); @@ -86,6 +83,7 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol. */ -package com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.rewriter; +package com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.rewriter; import com.viaversion.viabackwards.api.rewriters.ItemRewriter; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.Protocol1_20To1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.Protocol1_20To1_20_2; import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.EntityTracker; +import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.metadata.ChunkPosition; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap; +import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type; import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ServerboundPackets1_19_4; -import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.rewriter.RecipeRewriter1_19_4; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundPackets1_20_2; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundPackets1_20_2; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.rewriter.RecipeRewriter1_20_2; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.type.ChunkType1_20_2; import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.Protocol1_20To1_19_4; +import com.viaversion.viaversion.util.Key; import com.viaversion.viaversion.util.MathUtil; +import java.util.Arrays; +import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter { + private final Object2IntMap effects = new Object2IntOpenHashMap<>(); + public BlockItemPacketRewriter1_20_2(final Protocol1_20To1_20_2 protocol) { super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_VAR_INT_ARRAY); + + final List effects = Arrays.asList( + "speed", + "slowness", + "haste", + "mining_fatigue", + "strength", + "instant_health", + "instant_damage", + "jump_boost", + "nausea", + "regeneration", + "resistance", + "fire_resistance", + "water_breathing", + "invisibility", + "blindness", + "night_vision", + "hunger", + "weakness", + "poison", + "wither", + "health_boost", + "absorption", + "saturation", + "glowing", + "levitation", + "luck", + "unluck", + "slow_falling", + "conduit_power", + "dolphins_grace", + "bad_omen", + "hero_of_the_village", + "darkness" + ); + for (int i = 0; i < effects.size(); i++) { + final String effect = effects.get(i); + this.effects.put(effect, i + 1); // Effects start at 1 before 1.20.2 + } } @Override @@ -68,7 +119,7 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter { wrapper.passthrough(Type.POSITION1_14); // Position wrapper.passthrough(Type.VAR_INT); // Type - wrapper.write(Type.NBT, wrapper.read(Type.NAMELESS_NBT)); + wrapper.write(Type.NBT, handleBlockEntity(wrapper.read(Type.NAMELESS_NBT))); }); protocol.registerClientbound(ClientboundPackets1_20_2.CHUNK_DATA, wrapper -> { @@ -82,6 +133,17 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter { + if (wrapper.passthrough(Type.BOOLEAN)) { + // Effects start at 1 before 1.20.2 + wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_INT) - 1); + } }); // Replace the NBT type everywhere @@ -305,4 +367,23 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter. */ -package com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.rewriter; +package com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.rewriter; import com.viaversion.viabackwards.api.rewriters.EntityRewriter; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.Protocol1_20To1_20_2; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.storage.ConfigurationPacketStorage; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.Protocol1_20To1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.storage.ConfigurationPacketStorage; import com.viaversion.viaversion.api.minecraft.GlobalPosition; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; import com.viaversion.viaversion.api.minecraft.entities.EntityType; @@ -43,6 +43,15 @@ public final class EntityPacketRewriter1_20_2 extends EntityRewriter { + wrapper.passthrough(Type.VAR_INT); // Entity id + wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_INT) + 1); // Effect id + }); + protocol.registerClientbound(ClientboundPackets1_20_2.ENTITY_EFFECT, wrapper -> { + wrapper.passthrough(Type.VAR_INT); // Entity id + wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_INT) + 1); // Effect id + }); + protocol.registerClientbound(ClientboundPackets1_20_2.JOIN_GAME, new PacketHandlers() { @Override public void register() { diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/storage/ConfigurationPacketStorage.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/storage/ConfigurationPacketStorage.java similarity index 95% rename from common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/storage/ConfigurationPacketStorage.java rename to common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/storage/ConfigurationPacketStorage.java index 40cb1e2e..ffb6342a 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_4to1_20_2/storage/ConfigurationPacketStorage.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/storage/ConfigurationPacketStorage.java @@ -15,10 +15,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.storage; +package com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.storage; import com.google.common.base.Preconditions; -import com.viaversion.viabackwards.protocol.protocol1_20_4to1_20_2.Protocol1_20To1_20_2; +import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.Protocol1_20To1_20_2; import com.viaversion.viaversion.api.connection.StorableObject; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.protocol.packet.PacketType; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d03f12e5..07b06060 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # ViaVersion -viaver = "4.8.0-23w31a-SNAPSHOT" +viaver = "4.8.0-23w32a-SNAPSHOT" # Common provided netty = "4.0.20.Final"