From 8a675923d1ba627559945ab84296ed4ebd6fe120 Mon Sep 17 00:00:00 2001 From: EnZaXD Date: Mon, 3 Jun 2024 09:49:39 +0200 Subject: [PATCH] Emulate recovery compass using lodestone compass in 1.19->1.18.2 (#770) --- .../rewriter/BlockItemPacketRewriter1_19.java | 52 ++++++++++++++++++- .../rewriter/EntityPacketRewriter1_19.java | 22 ++++++-- .../storage/LastDeathPosition.java | 25 +++++++++ 3 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/LastDeathPosition.java diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/BlockItemPacketRewriter1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/BlockItemPacketRewriter1_19.java index f975eb02..7db59bf2 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/BlockItemPacketRewriter1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/BlockItemPacketRewriter1_19.java @@ -17,10 +17,14 @@ */ package com.viaversion.viabackwards.protocol.v1_19to1_18_2.rewriter; +import com.viaversion.nbt.tag.CompoundTag; import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter; import com.viaversion.viabackwards.protocol.v1_19to1_18_2.Protocol1_19To1_18_2; +import com.viaversion.viabackwards.protocol.v1_19to1_18_2.storage.LastDeathPosition; +import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.EntityTracker; +import com.viaversion.viaversion.api.minecraft.GlobalBlockPosition; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; @@ -28,7 +32,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.minecraft.item.Item; 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.api.type.Types; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_18; import com.viaversion.viaversion.protocols.v1_16_4to1_17.packet.ServerboundPackets1_17; @@ -204,4 +207,51 @@ public final class BlockItemPacketRewriter1_19 extends BackwardsItemRewriter { + final GlobalBlockPosition lastDeathPosition = wrapper.read(Types.OPTIONAL_GLOBAL_POSITION); + if (lastDeathPosition != null) { + wrapper.user().put(new LastDeathPosition(lastDeathPosition)); + } else { + wrapper.user().remove(LastDeathPosition.class); + } + }); handler(worldDataTrackerHandler(1)); handler(playerTrackerHandler()); } @@ -196,7 +203,14 @@ public final class EntityPacketRewriter1_19 extends EntityRewriter { + final GlobalBlockPosition lastDeathPosition = wrapper.read(Types.OPTIONAL_GLOBAL_POSITION); + if (lastDeathPosition != null) { + wrapper.user().put(new LastDeathPosition(lastDeathPosition)); + } else { + wrapper.user().remove(LastDeathPosition.class); + } + }); handler(worldDataTrackerHandler(0)); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/LastDeathPosition.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/LastDeathPosition.java new file mode 100644 index 00000000..33e6fcdc --- /dev/null +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/LastDeathPosition.java @@ -0,0 +1,25 @@ +/* + * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards + * Copyright (C) 2016-2024 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.viabackwards.protocol.v1_19to1_18_2.storage; + +import com.viaversion.viaversion.api.connection.StorableObject; +import com.viaversion.viaversion.api.minecraft.GlobalBlockPosition; + +public record LastDeathPosition(GlobalBlockPosition position) implements StorableObject { + +}