42
42
public record TextureProvider (@ Nullable Material front , @ Nullable Material back ,
43
43
@ Nullable Material left , @ Nullable Material right ,
44
44
@ Nullable Material top , @ Nullable Material bottom ,
45
- @ Nullable Material particle ) {
45
+ @ Nullable Material particle , @ Nullable Material topOverride ) {
46
46
public static final Codec <Material > MATERIAL_CODEC = Codec .withAlternative (
47
47
ResourceLocation .CODEC .flatComapMap (tex -> new Material (TextureAtlas .LOCATION_BLOCKS , tex ), mat -> mat .atlasLocation ().equals (TextureAtlas .LOCATION_BLOCKS ) ? DataResult .success (mat .texture ()) : DataResult .error (() -> "not block" , mat .texture ())),
48
48
RecordCodecBuilder .create (instance -> instance .group (
@@ -57,15 +57,17 @@ public record TextureProvider(@Nullable Material front, @Nullable Material back,
57
57
MATERIAL_CODEC .optionalFieldOf ("right" ).forGetter (t -> Optional .ofNullable (t .right )),
58
58
MATERIAL_CODEC .optionalFieldOf ("top" ).forGetter (t -> Optional .ofNullable (t .top )),
59
59
MATERIAL_CODEC .optionalFieldOf ("bottom" ).forGetter (t -> Optional .ofNullable (t .bottom )),
60
- MATERIAL_CODEC .optionalFieldOf ("particle" ).forGetter (t -> Optional .ofNullable (t .particle ))
61
- ).apply (instance , (a , b , c , d , e , f , g ) -> new TextureProvider (
60
+ MATERIAL_CODEC .optionalFieldOf ("particle" ).forGetter (t -> Optional .ofNullable (t .particle )),
61
+ MATERIAL_CODEC .optionalFieldOf ("top_item_override" ).forGetter (t -> Optional .ofNullable (t .topOverride ))
62
+ ).apply (instance , (a , b , c , d , e , f , g , h ) -> new TextureProvider (
62
63
a .orElse (null ),
63
64
b .orElse (null ),
64
65
c .orElse (null ),
65
66
d .orElse (null ),
66
67
e .orElse (null ),
67
68
f .orElse (null ),
68
- g .orElse (null )
69
+ g .orElse (null ),
70
+ h .orElse (null )
69
71
)));
70
72
71
73
public BoundTextureProvider bind (Function <Material , TextureAtlasSprite > atlas ) {
@@ -76,7 +78,8 @@ public BoundTextureProvider bind(Function<Material, TextureAtlasSprite> atlas) {
76
78
this .right != null ? atlas .apply (this .right ) : null ,
77
79
this .top != null ? atlas .apply (this .top ) : null ,
78
80
this .bottom != null ? atlas .apply (this .bottom ) : null ,
79
- this .particle != null ? atlas .apply (this .particle ) : null
81
+ this .particle != null ? atlas .apply (this .particle ) : null ,
82
+ this .topOverride != null ? atlas .apply (this .topOverride ) : null
80
83
);
81
84
}
82
85
@@ -89,11 +92,11 @@ public static TextureProvider.Builder builder(String modId) {
89
92
}
90
93
91
94
public static TextureProvider none () {
92
- return new TextureProvider (null , null , null , null , null , null , null );
95
+ return new TextureProvider (null , null , null , null , null , null , null , null );
93
96
}
94
97
95
98
public static TextureProvider all (Material material ) {
96
- return new TextureProvider (material , material , material , material , material , material , material );
99
+ return new TextureProvider (material , material , material , material , material , material , material , null );
97
100
}
98
101
99
102
public static TextureProvider all (ResourceLocation material ) {
@@ -113,6 +116,7 @@ public static class Builder {
113
116
private @ Nullable Material top = null ;
114
117
private @ Nullable Material bottom = null ;
115
118
private @ Nullable Material particle = null ;
119
+ private @ Nullable Material topOverride = null ;
116
120
117
121
private Builder (@ Nullable String modId ) {
118
122
this .modId = modId ;
@@ -153,6 +157,11 @@ public Builder particle(String texture) {
153
157
return this .particle (ResourceLocation .fromNamespaceAndPath (this .modId , texture ));
154
158
}
155
159
160
+ public Builder topOverride (String texture ) {
161
+ Preconditions .checkNotNull (this .modId );
162
+ return this .topOverride (ResourceLocation .fromNamespaceAndPath (this .modId , texture ));
163
+ }
164
+
156
165
public Builder all (String texture ) {
157
166
Preconditions .checkNotNull (this .modId );
158
167
return this .all (ResourceLocation .fromNamespaceAndPath (this .modId , texture ));
@@ -191,6 +200,10 @@ public Builder particle(ResourceLocation texture) {
191
200
return this .particle (new Material (TextureAtlas .LOCATION_BLOCKS , texture ));
192
201
}
193
202
203
+ public Builder topOverride (ResourceLocation texture ) {
204
+ return this .topOverride (new Material (TextureAtlas .LOCATION_BLOCKS , texture ));
205
+ }
206
+
194
207
public Builder all (ResourceLocation texture ) {
195
208
return this .all (new Material (TextureAtlas .LOCATION_BLOCKS , texture ));
196
209
}
@@ -227,6 +240,10 @@ public Builder particle(Block texture) {
227
240
return this .particle (TextureMapping .getBlockTexture (texture ));
228
241
}
229
242
243
+ public Builder topOverride (Block texture ) {
244
+ return this .topOverride (TextureMapping .getBlockTexture (texture ));
245
+ }
246
+
230
247
public Builder all (Block texture ) {
231
248
return this .all (TextureMapping .getBlockTexture (texture ));
232
249
}
@@ -270,6 +287,11 @@ public Builder particle(Material material) {
270
287
return this ;
271
288
}
272
289
290
+ public Builder topOverride (Material material ) {
291
+ this .topOverride = material ;
292
+ return this ;
293
+ }
294
+
273
295
public Builder all (Material material ) {
274
296
this .front = material ;
275
297
this .back = material ;
@@ -290,14 +312,14 @@ public Builder sides(Material material) {
290
312
}
291
313
292
314
public TextureProvider build () {
293
- return new TextureProvider (this .front , this .back , this .left , this .right , this .top , this .bottom , this .particle );
315
+ return new TextureProvider (this .front , this .back , this .left , this .right , this .top , this .bottom , this .particle , this . topOverride );
294
316
}
295
317
}
296
318
297
319
public record BoundTextureProvider (@ Nullable TextureAtlasSprite front , @ Nullable TextureAtlasSprite back ,
298
320
@ Nullable TextureAtlasSprite left , @ Nullable TextureAtlasSprite right ,
299
321
@ Nullable TextureAtlasSprite top , @ Nullable TextureAtlasSprite bottom ,
300
- @ Nullable TextureAtlasSprite particle ) {
322
+ @ Nullable TextureAtlasSprite particle , @ Nullable TextureAtlasSprite topOverride ) {
301
323
@ Nullable
302
324
public TextureAtlasSprite getSprite (@ NotNull BlockFace face ) {
303
325
return switch (face ) {
@@ -314,5 +336,17 @@ public TextureAtlasSprite getSprite(@NotNull BlockFace face) {
314
336
public TextureAtlasSprite getParticle () {
315
337
return this .particle ;
316
338
}
339
+
340
+ @ Nullable
341
+ public TextureAtlasSprite getItemOverride (@ NotNull BlockFace face ) {
342
+ return switch (face ) {
343
+ case FRONT -> null ;
344
+ case BACK -> null ;
345
+ case LEFT -> null ;
346
+ case RIGHT -> null ;
347
+ case TOP -> this .topOverride ;
348
+ case BOTTOM -> null ;
349
+ };
350
+ }
317
351
}
318
352
}
0 commit comments