25
25
26
26
package org .geysermc .geyser .item .type ;
27
27
28
+ import com .github .steveice10 .mc .protocol .data .game .item .component .BannerPatternLayer ;
29
+ import com .github .steveice10 .mc .protocol .data .game .item .component .DataComponentType ;
28
30
import com .github .steveice10 .mc .protocol .data .game .item .component .DataComponents ;
29
31
import com .github .steveice10 .opennbt .tag .builtin .CompoundTag ;
30
32
import com .github .steveice10 .opennbt .tag .builtin .IntTag ;
33
35
import org .checkerframework .checker .nullness .qual .NonNull ;
34
36
import org .cloudburstmc .nbt .NbtList ;
35
37
import org .cloudburstmc .nbt .NbtMap ;
36
- import org .cloudburstmc .nbt .NbtMapBuilder ;
37
38
import org .cloudburstmc .nbt .NbtType ;
38
39
import org .geysermc .geyser .registry .type .ItemMapping ;
39
40
import org .geysermc .geyser .session .GeyserSession ;
41
+ import org .geysermc .geyser .translator .item .BedrockItemBuilder ;
40
42
41
43
import java .util .ArrayList ;
42
44
import java .util .List ;
43
45
44
- import static org .geysermc .erosion .util .BannerUtils .getJavaPatternTag ;
45
-
46
46
public class BannerItem extends BlockItem {
47
47
/**
48
48
* Holds what a Java ominous banner pattern looks like.
@@ -51,19 +51,20 @@ public class BannerItem extends BlockItem {
51
51
* ominous banners that we set instead. This variable is used to detect Java ominous banner patterns, and apply
52
52
* the correct ominous banner pattern if Bedrock pulls the item from creative.
53
53
*/
54
- public static final ListTag OMINOUS_BANNER_PATTERN ;
54
+ public static final List < BannerPatternLayer > OMINOUS_BANNER_PATTERN ;
55
55
56
56
static {
57
- OMINOUS_BANNER_PATTERN = new ListTag ("Patterns" );
58
57
// Construct what an ominous banner is supposed to look like
59
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("mr" , 9 ));
60
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("bs" , 8 ));
61
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("cs" , 7 ));
62
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("bo" , 8 ));
63
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("ms" , 15 ));
64
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("hh" , 8 ));
65
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("mc" , 8 ));
66
- OMINOUS_BANNER_PATTERN .add (getJavaPatternTag ("bo" , 15 ));
58
+ OMINOUS_BANNER_PATTERN = List .of (
59
+ new BannerPatternLayer ("mr" , 9 ),
60
+ new BannerPatternLayer ("bs" , 8 ),
61
+ new BannerPatternLayer ("cs" , 7 ),
62
+ new BannerPatternLayer ("bo" , 8 ),
63
+ new BannerPatternLayer ("ms" , 15 ),
64
+ new BannerPatternLayer ("hh" , 8 ),
65
+ new BannerPatternLayer ("mc" , 8 ),
66
+ new BannerPatternLayer ("bo" , 15 )
67
+ );
67
68
}
68
69
69
70
/**
@@ -102,7 +103,7 @@ private static NbtMap getBedrockBannerPattern(CompoundTag pattern) {
102
103
* @return The Java edition format pattern nbt
103
104
*/
104
105
public static CompoundTag getJavaBannerPattern (NbtMap pattern ) {
105
- return getJavaPatternTag (pattern .getString ("Pattern" ), 15 - pattern .getInt ("Color" ));
106
+ return new BannerPatternLayer (pattern .getString ("Pattern" ), 15 - pattern .getInt ("Color" ));
106
107
}
107
108
108
109
/**
@@ -122,14 +123,14 @@ public BannerItem(String javaIdentifier, Builder builder) {
122
123
}
123
124
124
125
@ Override
125
- public void translateComponentsToBedrock (@ NonNull GeyserSession session , @ NonNull DataComponents components , @ NonNull NbtMapBuilder builder ) {
126
+ public void translateComponentsToBedrock (@ NonNull GeyserSession session , @ NonNull DataComponents components , @ NonNull BedrockItemBuilder builder ) {
126
127
super .translateComponentsToBedrock (session , components , builder );
127
128
128
- CompoundTag blockEntityTag = tag . remove ( "BlockEntityTag" );
129
- if (blockEntityTag != null && blockEntityTag . get ( "Patterns" ) instanceof ListTag patterns ) {
129
+ List < BannerPatternLayer > patterns = components . get ( DataComponentType . BANNER_PATTERNS );
130
+ if (patterns != null ) {
130
131
if (patterns .equals (OMINOUS_BANNER_PATTERN )) {
131
132
// Remove the current patterns and set the ominous banner type
132
- tag . put ( new IntTag ( "Type" , 1 ) );
133
+ builder . putInt ( "Type" , 1 );
133
134
} else {
134
135
invertBannerColors (patterns );
135
136
tag .put (patterns );
0 commit comments