Skip to content

Commit 05b1a6b

Browse files
committed
Start working on 24w09a
1 parent 8f417b6 commit 05b1a6b

File tree

12 files changed

+154
-18
lines changed

12 files changed

+154
-18
lines changed

common/src/main/java/com/viaversion/viabackwards/api/rewriters/ItemRewriter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ public ItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType)
4141
super(protocol, itemType, itemArrayType, true);
4242
}
4343

44+
public ItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType) {
45+
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType, true);
46+
}
47+
4448
@Override
4549
public @Nullable Item handleItemToClient(@Nullable Item item) {
4650
if (item == null) {

common/src/main/java/com/viaversion/viabackwards/api/rewriters/ItemRewriterBase.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,16 @@ public abstract class ItemRewriterBase<C extends ClientboundPacketType, S extend
3535
protected final String nbtTagName;
3636
protected final boolean jsonNameFormat;
3737

38-
protected ItemRewriterBase(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, boolean jsonNameFormat) {
39-
super(protocol, itemType, itemArrayType);
40-
this.jsonNameFormat = jsonNameFormat;
38+
protected ItemRewriterBase(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType, boolean jsonFormat) {
39+
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType);
40+
this.jsonNameFormat = jsonFormat;
4141
nbtTagName = "VB|" + protocol.getClass().getSimpleName();
4242
}
4343

44+
protected ItemRewriterBase(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, boolean jsonNameFormat) {
45+
this(protocol, itemType, itemArrayType, itemType, itemArrayType, jsonNameFormat);
46+
}
47+
4448
@Override
4549
public @Nullable Item handleItemToServer(@Nullable Item item) {
4650
if (item == null) return null;
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
3+
* Copyright (C) 2016-2024 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.api.rewriters;
19+
20+
import com.viaversion.viabackwards.api.BackwardsProtocol;
21+
import com.viaversion.viabackwards.api.data.MappedItem;
22+
import com.viaversion.viaversion.api.minecraft.item.Item;
23+
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
24+
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
25+
import com.viaversion.viaversion.api.type.Type;
26+
import org.checkerframework.checker.nullness.qual.Nullable;
27+
28+
public class StructuredItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
29+
T extends BackwardsProtocol<C, ?, ?, S>> extends ItemRewriter<C, S, T> {
30+
31+
public StructuredItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
32+
super(protocol, itemType, itemArrayType);
33+
}
34+
35+
public StructuredItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType) {
36+
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType);
37+
}
38+
39+
@Override
40+
public @Nullable Item handleItemToClient(@Nullable Item item) {
41+
if (item == null) {
42+
return null;
43+
}
44+
45+
// TODO Translatable rewriter on name and lore
46+
47+
MappedItem data = protocol.getMappingData() != null ? protocol.getMappingData().getMappedItem(item.identifier()) : null;
48+
if (data == null) {
49+
// Just rewrite the id
50+
if (protocol.getMappingData() != null && protocol.getMappingData().getItemMappings() != null) {
51+
item.setIdentifier(protocol.getMappingData().getNewItemId(item.identifier()));
52+
}
53+
}
54+
55+
// TODO Save original id, set remapped id
56+
if (protocol.getMappingData() != null && protocol.getMappingData().getItemMappings() != null) {
57+
item.setIdentifier(protocol.getMappingData().getNewItemId(item.identifier()));
58+
}
59+
// TODO custom model data and custom name
60+
return item;
61+
}
62+
63+
@Override
64+
public @Nullable Item handleItemToServer(@Nullable Item item) {
65+
if (item == null) return null;
66+
67+
if (protocol.getMappingData() != null && protocol.getMappingData().getItemMappings() != null) {
68+
item.setIdentifier(protocol.getMappingData().getOldItemId(item.identifier()));
69+
}
70+
71+
// TODO restore original id and display
72+
return item;
73+
}
74+
75+
@Override
76+
protected void restoreDisplayTag(final Item item) {
77+
// TODO
78+
}
79+
}

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void register() {
6161
map(Type.SHORT); // 1 - Slot ID
6262
map(Type.ITEM1_8); // 2 - Slot Value
6363

64-
handler(itemToClientHandler(Type.ITEM1_8));
64+
handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_8, 0)));
6565

6666
// Handle Llama
6767
handler(wrapper -> {
@@ -147,7 +147,7 @@ public void register() {
147147
map(Type.VAR_INT); // 4 - Mode
148148
map(Type.ITEM1_8); // 5 - Clicked Item
149149

150-
handler(itemToServerHandler(Type.ITEM1_8));
150+
handler(wrapper -> handleItemToServer(wrapper.get(Type.ITEM1_8, 0)));
151151

152152
// Llama slot
153153
handler(wrapper -> {

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_12_2to1_13/packets/BlockItemPackets1_13.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ public void register() {
267267
map(Type.SHORT);
268268
map(Type.ITEM1_13, Type.ITEM1_8);
269269

270-
handler(itemToClientHandler(Type.ITEM1_8));
270+
handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_8, 0)));
271271
}
272272
});
273273

@@ -437,7 +437,7 @@ public void register() {
437437
map(Type.VAR_INT);
438438
map(Type.ITEM1_13, Type.ITEM1_8);
439439

440-
handler(itemToClientHandler(Type.ITEM1_8));
440+
handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_8, 0)));
441441
}
442442
});
443443

@@ -465,7 +465,7 @@ public void register() {
465465
map(Type.SHORT);
466466
map(Type.ITEM1_8, Type.ITEM1_13);
467467

468-
handler(itemToServerHandler(Type.ITEM1_13));
468+
handler(wrapper -> handleItemToServer(wrapper.get(Type.ITEM1_13, 0)));
469469
}
470470
});
471471

@@ -479,7 +479,7 @@ public void register() {
479479
map(Type.VAR_INT);
480480
map(Type.ITEM1_8, Type.ITEM1_13);
481481

482-
handler(itemToServerHandler(Type.ITEM1_13));
482+
handler(wrapper -> handleItemToServer(wrapper.get(Type.ITEM1_13, 0)));
483483
}
484484
});
485485
}

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void register() {
228228
map(Type.VAR_INT); // 1 - Slot ID
229229
map(Type.ITEM1_13_2); // 2 - Item
230230

231-
handler(itemToClientHandler(Type.ITEM1_13_2));
231+
handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_13_2, 0)));
232232

233233
handler(wrapper -> {
234234
int entityId = wrapper.get(Type.VAR_INT, 0);

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/Protocol1_20_2To1_20_3.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import java.util.BitSet;
5858
import java.util.UUID;
5959

60+
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
61+
6062
public final class Protocol1_20_2To1_20_3 extends BackwardsProtocol<ClientboundPacket1_20_3, ClientboundPacket1_20_2, ServerboundPacket1_20_3, ServerboundPacket1_20_2> {
6163

6264
public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.20.3", "1.20.2", Protocol1_20_3To1_20_2.class);

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/Protocol1_20_3To1_20_5.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
5858
import com.viaversion.viaversion.rewriter.TagRewriter;
5959

60+
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
61+
6062
public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol<ClientboundPacket1_20_5, ClientboundPacket1_20_3, ServerboundPacket1_20_5, ServerboundPacket1_20_3> {
6163

6264
public static final BackwardsMappings MAPPINGS = new BackwardsMappings();

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/BlockItemPacketRewriter1_20_5.java

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
package com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.rewriter;
1919

2020
import com.viaversion.viabackwards.api.rewriters.ItemRewriter;
21+
import com.viaversion.viabackwards.api.rewriters.StructuredItemRewriter;
2122
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.Protocol1_20_3To1_20_5;
2223
import com.viaversion.viaversion.api.minecraft.Particle;
24+
import com.viaversion.viaversion.api.minecraft.item.Item;
2325
import com.viaversion.viaversion.api.type.Type;
2426
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
2527
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
@@ -31,11 +33,12 @@
3133
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5;
3234
import com.viaversion.viaversion.rewriter.BlockRewriter;
3335
import com.viaversion.viaversion.util.Key;
36+
import org.checkerframework.checker.nullness.qual.Nullable;
3437

35-
public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<ClientboundPacket1_20_5, ServerboundPacket1_20_3, Protocol1_20_3To1_20_5> {
38+
public final class BlockItemPacketRewriter1_20_5 extends StructuredItemRewriter<ClientboundPacket1_20_5, ServerboundPacket1_20_3, Protocol1_20_3To1_20_5> {
3639

3740
public BlockItemPacketRewriter1_20_5(final Protocol1_20_3To1_20_5 protocol) {
38-
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
41+
super(protocol, Types1_20_5.ITEM, Types1_20_5.ITEM_ARRAY, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
3942
}
4043

4144
@Override
@@ -72,7 +75,7 @@ public void registerPackets() {
7275
// Move it to the beginning, move out arguments here
7376
final Particle particle = wrapper.read(Types1_20_5.PARTICLE);
7477
rewriteParticle(particle);
75-
wrapper.set(Type.VAR_INT, 0, particle.getId());
78+
wrapper.set(Type.VAR_INT, 0, particle.id());
7679
for (final Particle.ParticleData<?> argument : particle.getArguments()) {
7780
argument.write(wrapper);
7881
}
@@ -113,9 +116,13 @@ public void registerPackets() {
113116
wrapper.passthrough(Type.VAR_INT); // Container id
114117
final int size = wrapper.passthrough(Type.VAR_INT);
115118
for (int i = 0; i < size; i++) {
116-
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Input
117-
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Output
118-
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Second Item
119+
final Item input = handleItemToClient(wrapper.read(Types1_20_5.ITEM));
120+
wrapper.write(Type.ITEM1_20_2, input);
121+
final Item output = handleItemToClient(wrapper.read(Types1_20_5.ITEM));
122+
wrapper.write(Type.ITEM1_20_2, output);
123+
final Item secondItem = handleItemToClient(wrapper.read(Types1_20_5.ITEM));
124+
wrapper.write(Type.ITEM1_20_2, secondItem);
125+
119126
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
120127
wrapper.passthrough(Type.INT); // Number of tools uses
121128
wrapper.passthrough(Type.INT); // Maximum number of trade uses
@@ -128,7 +135,27 @@ public void registerPackets() {
128135
}
129136
});
130137

131-
final RecipeRewriter1_20_3<ClientboundPacket1_20_5> recipeRewriter = new RecipeRewriter1_20_3<>(protocol);
138+
final RecipeRewriter1_20_3<ClientboundPacket1_20_5> recipeRewriter = new RecipeRewriter1_20_3<ClientboundPacket1_20_5>(protocol) {
139+
@Override
140+
protected Type<Item> itemType() {
141+
return Types1_20_5.ITEM;
142+
}
143+
144+
@Override
145+
protected Type<Item[]> itemArrayType() {
146+
return Types1_20_5.ITEM_ARRAY;
147+
}
148+
149+
@Override
150+
protected Type<Item> mappedItemType() {
151+
return Type.ITEM1_20_2;
152+
}
153+
154+
@Override
155+
protected Type<Item[]> mappedItemArrayType() {
156+
return Type.ITEM1_20_2_ARRAY;
157+
}
158+
};
132159
protocol.registerClientbound(ClientboundPackets1_20_5.DECLARE_RECIPES, wrapper -> {
133160
final int size = wrapper.passthrough(Type.VAR_INT);
134161
for (int i = 0; i < size; i++) {
@@ -142,4 +169,21 @@ public void registerPackets() {
142169
}
143170
});
144171
}
172+
173+
@Override
174+
public @Nullable Item handleItemToClient(@Nullable final Item item) {
175+
if (item == null) return null;
176+
177+
super.handleItemToClient(item);
178+
return com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5.toOldItem(item);
179+
}
180+
181+
@Override
182+
public @Nullable Item handleItemToServer(@Nullable final Item item) {
183+
if (item == null) return null;
184+
185+
// Convert to structured item first
186+
final Item structuredItem = com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5.toStructuredItem(item);
187+
return super.handleItemToServer(structuredItem);
188+
}
145189
}

common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/EntityPacketRewriter1_20_5.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ public void register() {
144144
map(Type.BOOLEAN); // Debug
145145
map(Type.BOOLEAN); // Flat
146146
map(Type.OPTIONAL_GLOBAL_POSITION); // Last death location
147+
map(Type.VAR_INT); // Portal cooldown
147148
handler(wrapper -> {
148149
// Moved to server data
149150
final boolean enforcesSecureChat = wrapper.read(Type.BOOLEAN);

0 commit comments

Comments
 (0)