Skip to content

Commit c4ac1b0

Browse files
committed
Add hashed item shortcut in 1.21.5->1.21.4
1 parent 8ee6391 commit c4ac1b0

1 file changed

Lines changed: 25 additions & 5 deletions

File tree

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/BlockItemPacketRewriter1_21_5.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
4545
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_5;
4646
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
47+
import com.viaversion.viaversion.api.minecraft.item.HashedItem;
4748
import com.viaversion.viaversion.api.minecraft.item.Item;
4849
import com.viaversion.viaversion.api.minecraft.item.data.ArmorTrimMaterial;
4950
import com.viaversion.viaversion.api.minecraft.item.data.BlocksAttacks;
@@ -65,6 +66,7 @@
6566
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_21_5;
6667
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
6768
import com.viaversion.viaversion.data.item.ItemHasherBase;
69+
import com.viaversion.viaversion.data.item.OriginalHashedItem;
6870
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
6971
import com.viaversion.viaversion.libs.fastutil.ints.IntLinkedOpenHashSet;
7072
import com.viaversion.viaversion.libs.fastutil.ints.IntList;
@@ -80,6 +82,7 @@
8082
import java.util.HashMap;
8183
import java.util.List;
8284
import java.util.Map;
85+
import org.checkerframework.checker.nullness.qual.Nullable;
8386

8487
import static com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.BlockItemPacketRewriter1_21_5.downgradeItemData;
8588
import static com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.BlockItemPacketRewriter1_21_5.updateItemData;
@@ -151,12 +154,9 @@ public void registerPackets() {
151154
final int affectedItems = Limit.max(wrapper.passthrough(Types.VAR_INT), 128);
152155
for (int i = 0; i < affectedItems; i++) {
153156
wrapper.passthrough(Types.SHORT); // Slot
154-
final Item item = handleItemToServer(wrapper.user(), wrapper.read(mappedItemType()));
155-
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), item));
157+
itemToHashedItem(wrapper, hashedItemConverter);
156158
}
157-
158-
final Item carriedItem = handleItemToServer(wrapper.user(), wrapper.read(mappedItemType()));
159-
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), carriedItem));
159+
itemToHashedItem(wrapper, hashedItemConverter);
160160
});
161161

162162
protocol.replaceClientbound(ClientboundPackets1_21_5.SET_EQUIPMENT, wrapper -> {
@@ -248,7 +248,27 @@ public void registerPackets() {
248248

249249
wrapper.read(Types.BOOLEAN); // Show advancements
250250
});
251+
}
251252

253+
private void itemToHashedItem(final PacketWrapper wrapper, final HashedItemConverterStorage hashedItemConverter) {
254+
final Item item = wrapper.read(mappedItemType());
255+
final HashedItem originalHash = originalHashedItemFromBackup(item);
256+
if (originalHash != null) {
257+
// Will be restored in a later protocol
258+
wrapper.write(Types.HASHED_ITEM, originalHash);
259+
} else {
260+
final Item serverItem = handleItemToServer(wrapper.user(), item);
261+
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), serverItem));
262+
}
263+
}
264+
265+
private @Nullable OriginalHashedItem originalHashedItemFromBackup(final Item item) {
266+
final CompoundTag customData = item.dataContainer().get(StructuredDataKey.CUSTOM_DATA);
267+
final CompoundTag originalHashes;
268+
if (customData == null || (originalHashes = customData.getCompoundTag("VV|original_hashes")) == null) {
269+
return null;
270+
}
271+
return backedUpOriginalHashes(originalHashes, item);
252272
}
253273

254274
private void convertClientAsset(final PacketWrapper wrapper) {

0 commit comments

Comments
 (0)