|
17 | 17 | */ |
18 | 18 | package com.viaversion.viabackwards.api.rewriters; |
19 | 19 |
|
| 20 | +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; |
20 | 21 | import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; |
21 | | -import com.viaversion.viaversion.api.type.Type; |
22 | 22 | import com.viaversion.viaversion.api.type.Types; |
23 | 23 | import com.viaversion.viaversion.rewriter.IdRewriteFunction; |
24 | 24 |
|
25 | 25 | public final class MapColorRewriter { |
26 | 26 |
|
| 27 | + /** |
| 28 | + * Rewrite map colors using the provided id rewriter. |
| 29 | + * |
| 30 | + * @param wrapper packet wrapper |
| 31 | + * @param rewriter id rewriter returning mapped colors, or -1 if unmapped |
| 32 | + * @param iconCount number of icons to read |
| 33 | + */ |
| 34 | + public static void rewriteMapColors(PacketWrapper wrapper, IdRewriteFunction rewriter, int iconCount) { |
| 35 | + for (int i = 0; i < iconCount; i++) { |
| 36 | + wrapper.passthrough(Types.VAR_INT); // Type |
| 37 | + wrapper.passthrough(Types.BYTE); // X |
| 38 | + wrapper.passthrough(Types.BYTE); // Z |
| 39 | + wrapper.passthrough(Types.BYTE); // Direction |
| 40 | + wrapper.passthrough(Types.OPTIONAL_COMPONENT); // Display Name |
| 41 | + } |
| 42 | + |
| 43 | + short columns = wrapper.passthrough(Types.UNSIGNED_BYTE); |
| 44 | + if (columns < 1) { |
| 45 | + return; |
| 46 | + } |
| 47 | + |
| 48 | + wrapper.passthrough(Types.UNSIGNED_BYTE); // Rows |
| 49 | + wrapper.passthrough(Types.UNSIGNED_BYTE); // X |
| 50 | + wrapper.passthrough(Types.UNSIGNED_BYTE); // Z |
| 51 | + byte[] data = wrapper.passthrough(Types.BYTE_ARRAY_PRIMITIVE); |
| 52 | + for (int i = 0; i < data.length; i++) { |
| 53 | + int color = data[i] & 0xFF; |
| 54 | + int mappedColor = rewriter.rewrite(color); |
| 55 | + if (mappedColor != -1) { |
| 56 | + data[i] = (byte) mappedColor; |
| 57 | + } |
| 58 | + } |
| 59 | + } |
| 60 | + |
27 | 61 | /** |
28 | 62 | * Returns a packethandler to rewrite map data color ids. Reading starts from the icon count. |
29 | 63 | * |
30 | 64 | * @param rewriter id rewriter returning mapped colors, or -1 if unmapped |
31 | 65 | * @return packethandler to rewrite map data color ids |
32 | 66 | */ |
33 | 67 | public static PacketHandler getRewriteHandler(IdRewriteFunction rewriter) { |
34 | | - return wrapper -> { |
35 | | - int iconCount = wrapper.passthrough(Types.VAR_INT); |
36 | | - for (int i = 0; i < iconCount; i++) { |
37 | | - wrapper.passthrough(Types.VAR_INT); // Type |
38 | | - wrapper.passthrough(Types.BYTE); // X |
39 | | - wrapper.passthrough(Types.BYTE); // Z |
40 | | - wrapper.passthrough(Types.BYTE); // Direction |
41 | | - wrapper.passthrough(Types.OPTIONAL_COMPONENT); // Display Name |
42 | | - } |
43 | | - |
44 | | - short columns = wrapper.passthrough(Types.UNSIGNED_BYTE); |
45 | | - if (columns < 1) return; |
46 | | - |
47 | | - wrapper.passthrough(Types.UNSIGNED_BYTE); // Rows |
48 | | - wrapper.passthrough(Types.UNSIGNED_BYTE); // X |
49 | | - wrapper.passthrough(Types.UNSIGNED_BYTE); // Z |
50 | | - byte[] data = wrapper.passthrough(Types.BYTE_ARRAY_PRIMITIVE); |
51 | | - for (int i = 0; i < data.length; i++) { |
52 | | - int color = data[i] & 0xFF; |
53 | | - int mappedColor = rewriter.rewrite(color); |
54 | | - if (mappedColor != -1) { |
55 | | - data[i] = (byte) mappedColor; |
56 | | - } |
57 | | - } |
58 | | - }; |
| 68 | + return wrapper -> rewriteMapColors(wrapper, rewriter, wrapper.passthrough(Types.VAR_INT)); |
59 | 69 | } |
60 | 70 | } |
0 commit comments