From 99f29e25979fc2b8433672c73d271ff5f43d6f33 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 9 Apr 2024 12:37:36 +0200 Subject: [PATCH] Prepare proper banner id tracking, small other fixes --- .../storage/ReceivedMessagesStorage.java | 7 ++++ .../rewriter/EntityPacketRewriter1_20_5.java | 3 ++ .../rewriter/StructuredDataConverter.java | 17 ++++++---- .../storage/BannerPatternStorage.java | 33 +++++++++++++++++++ .../viaversion/rewriter/ItemRewriter.java | 8 ++++- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/storage/BannerPatternStorage.java diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/storage/ReceivedMessagesStorage.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/storage/ReceivedMessagesStorage.java index f8bc915eb..3ad6d14d4 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/storage/ReceivedMessagesStorage.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/storage/ReceivedMessagesStorage.java @@ -60,4 +60,11 @@ public final class ReceivedMessagesStorage implements StorableObject { public void resetUnacknowledgedCount() { unacknowledged = 0; } + + public void clear() { + this.size = 0; + this.unacknowledged = 0; + this.lastSignature = null; + Arrays.fill(this.signatures, null); + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java index e18b704ca..02e7e8da3 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java @@ -32,6 +32,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.version.Types1_20_3; import com.viaversion.viaversion.api.type.types.version.Types1_20_5; +import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.storage.ReceivedMessagesStorage; import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3; import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3; import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3; @@ -167,6 +168,8 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter { - final ListTag originalPatterns = new ListTag<>(CompoundTag.class); if (backupInconvertibleData) { // Backup whole data if one of the entries is inconvertible // Since we don't want to break the order of the entries - if (Arrays.stream(data).anyMatch(layer -> layer.pattern().isDirect())) { + if (Arrays.stream(data).anyMatch(layer -> layer.pattern().isDirect() || BannerPatterns1_20_5.idToKey(layer.pattern().id()) == null)) { + final ListTag originalPatterns = new ListTag<>(CompoundTag.class); for (final BannerPatternLayer layer : data) { final CompoundTag layerTag = new CompoundTag(); final CompoundTag patternTag = new CompoundTag(); @@ -428,18 +428,23 @@ public final class StructuredDataConverter { originalPatterns.add(layerTag); } getBackupTag(tag).put("banner_patterns", originalPatterns); - return; } } final ListTag patternsTag = new ListTag<>(CompoundTag.class); for (final BannerPatternLayer layer : data) { - final String pattern = BannerPatterns1_20_5.fullIdToCompact(BannerPatterns1_20_5.idToKey(layer.pattern().id())); - if (pattern == null) { + if (layer.pattern().isDirect()) { continue; } + + final String key = BannerPatterns1_20_5.idToKey(layer.pattern().id()); + if (key == null) { + continue; + } + + final String compactKey = BannerPatterns1_20_5.fullIdToCompact(key); final CompoundTag patternTag = new CompoundTag(); - patternTag.putString("Pattern", pattern); + patternTag.putString("Pattern", compactKey); patternTag.putInt("Color", layer.dyeColor()); patternsTag.add(patternTag); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/storage/BannerPatternStorage.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/storage/BannerPatternStorage.java new file mode 100644 index 000000000..37bda6690 --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/storage/BannerPatternStorage.java @@ -0,0 +1,33 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * 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.viaversion.protocols.protocol1_20_5to1_20_3.storage; + +import com.viaversion.viaversion.api.connection.StorableObject; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + +//TODO Item rewriting doesn't have user connection context yet. That's a fairly disruptive change, so it'll be done later +// Replace BannerPatterns1_20_5.idToKey +public final class BannerPatternStorage implements StorableObject { + + private final Int2ObjectMap bannerPatterns = new Int2ObjectOpenHashMap<>(); + + public Int2ObjectMap bannerPatterns() { + return bannerPatterns; + } +} diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java index 0f3261a63..b310dedaa 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java @@ -536,7 +536,13 @@ public class ItemRewriter data = particle.getArgument(0); - data.setValue(handleItemToClient(data.getValue())); + Item item = handleItemToClient(data.getValue()); + if (mappedItemType() != null && itemType() != mappedItemType()) { + // Replace the type + particle.set(0, mappedItemType(), item); + } else { + data.setValue(item); + } } particle.setId(protocol.getMappingData().getNewParticleId(id));