diff --git a/build.gradle.kts b/build.gradle.kts index cc4890d9..23e6b3c8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { allprojects { group = "com.viaversion" - version = "4.3.0-22w13a-SNAPSHOT" + version = "4.3.0-22w14a-SNAPSHOT" description = "Allow older clients to join newer server versions." } diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java index 98a9311b..157c1299 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java @@ -67,6 +67,17 @@ public abstract class EntityRewriter extends Entity }; } + public PacketHandler getSpawnTrackerWithDataHandler1_19(EntityType fallingBlockType) { + return wrapper -> { + // Check against the UNMAPPED entity type + EntityType entityType = setOldEntityId(wrapper); + if (entityType == fallingBlockType) { + int blockState = wrapper.get(Type.VAR_INT, 2); + wrapper.set(Type.VAR_INT, 2, protocol.getMappingData().getNewBlockStateId(blockState)); + } + }; + } + public void registerSpawnTracker(ClientboundPacketType packetType) { protocol.registerClientbound(packetType, new PacketRemapper() { @Override @@ -79,7 +90,13 @@ public abstract class EntityRewriter extends Entity }); } - private EntityType setOldEntityId(PacketWrapper wrapper) throws Exception { + /** + * Sets the mapped entity id and returns the unmapped entity type. + * + * @param wrapper packet wrapper + * @return unmapped (!) entity type + */ + protected EntityType setOldEntityId(PacketWrapper wrapper) throws Exception { int typeId = wrapper.get(Type.VAR_INT, 1); EntityType entityType = typeFromId(typeId); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java index 8ef5eff5..415ded6f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java @@ -71,10 +71,47 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { @@ -43,14 +44,42 @@ public final class EntityPackets1_19 extends EntityRewriter { + final byte headYaw = wrapper.read(Type.BYTE); + int data = wrapper.read(Type.VAR_INT); + final EntityType entityType = setOldEntityId(wrapper); + // Hope this is right + if (entityType.isOrHasParent(Entity1_19Types.LIVINGENTITY)) { + wrapper.write(Type.BYTE, headYaw); + wrapper.setPacketType(ClientboundPackets1_18.SPAWN_MOB); + return; + } + + if (entityType == Entity1_19Types.FALLING_BLOCK) { + data = protocol.getMappingData().getNewBlockStateId(data); + } + wrapper.write(Type.INT, data); + }); + } + }); + protocol.registerClientbound(ClientboundPackets1_19.ENTITY_EFFECT, new PacketRemapper() { @Override public void registerMap() { @@ -84,6 +113,7 @@ public final class EntityPackets1_19 extends EntityRewriter { final CompoundTag registry = wrapper.get(Type.NBT, 0); final CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome"); @@ -112,7 +142,9 @@ public final class EntityPackets1_19 extends EntityRewriter { - meta.setMetaType(Types1_18.META_TYPES.byId(meta.metaType().typeId())); + if (meta.metaType().typeId() <= Types1_18.META_TYPES.poseType.typeId()) { + meta.setMetaType(Types1_18.META_TYPES.byId(meta.metaType().typeId())); + } final MetaType type = meta.metaType(); if (type == Types1_18.META_TYPES.particleType) { @@ -151,6 +183,9 @@ public final class EntityPackets1_19 extends EntityRewriter meta.setMetaType(Types1_18.META_TYPES.varIntType)); + filter().type(Entity1_19Types.FROG).cancel(16); // Age filter().type(Entity1_19Types.FROG).cancel(17); // Variant filter().type(Entity1_19Types.FROG).cancel(18); // Tongue target diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cc62f0c4..a484fa44 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # ViaVersion -viaver = "4.3.0-22w13a-SNAPSHOT" +viaver = "4.3.0-22w14a-SNAPSHOT" # Common provided netty = "4.0.20.Final" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f..41d9927a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00e33ede..aa991fce 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index c53aefaa..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,10 +32,10 @@ # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: #