Skip to content

Commit 9aeb96e

Browse files
8s2ekulxam
authored andcommitted
Add getDataOrDefault method to FabricRenderState (#4917)
1 parent a147057 commit 9aeb96e

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/FabricRenderState.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ default <T> T getData(RenderStateDataKey<T> key) {
4646
throw new UnsupportedOperationException("Implemented via mixin");
4747
}
4848

49+
/**
50+
* Get extra render data from the render state, or a default value if it cannot be found.
51+
* @param key the key of the data
52+
* @param defaultValue the default value
53+
* @param <T> the type of the data
54+
* @return the data, or the default value if it cannot be found.
55+
*/
56+
default <T> T getDataOrDefault(RenderStateDataKey<T> key, T defaultValue) {
57+
throw new UnsupportedOperationException("Implemented via mixin");
58+
}
59+
4960
/**
5061
* Set extra render data to the render state.
5162
* @param key the key of the data

fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/RenderStateMixin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public abstract class RenderStateMixin implements FabricRenderState {
4848
return renderStateData == null ? null : (T) renderStateData.get(key);
4949
}
5050

51+
@Override
52+
@SuppressWarnings("unchecked")
53+
public <T> T getDataOrDefault(RenderStateDataKey<T> key, T defaultValue) {
54+
return renderStateData == null ? defaultValue : (T) renderStateData.getOrDefault(key, defaultValue);
55+
}
56+
5157
@Override
5258
public <T> void setData(RenderStateDataKey<T> key, T value) {
5359
if (renderStateData == null) {

fabric-rendering-v1/src/test/java/net/fabricmc/fabric/impl/client/rendering/state/RenderStateDataTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,13 @@ itemRenderState.new LayerRenderState(),
6565

6666
for (FabricRenderState state : states) {
6767
Assertions.assertNull(state.getData(DEBUG));
68+
Assertions.assertEquals("pass", state.getDataOrDefault(DEBUG, "pass"));
6869
state.setData(DEBUG, "test");
6970
Assertions.assertEquals("test", state.getData(DEBUG));
71+
Assertions.assertEquals("test", state.getDataOrDefault(DEBUG, "fail"));
7072
state.clearExtraData();
7173
Assertions.assertNull(state.getData(DEBUG));
74+
Assertions.assertEquals("pass", state.getDataOrDefault(DEBUG, "pass"));
7275
}
7376
}
7477
}

0 commit comments

Comments
 (0)