Skip to content

Commit 4fd1c42

Browse files
Allow drawing non-living entities with EntityDrawable (and port f61dc8e) (#4065)
Co-authored-by: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com>
1 parent b20ddfb commit 4fd1c42

9 files changed

Lines changed: 421 additions & 273 deletions

File tree

gradle/scripts/repositories.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
repositories {
22
mavenLocal()
33
mavenCentral()
4+
// force gradle to download FastUtil and LWJGL from the central maven so we can get source artifacts
5+
exclusiveContent { // Force
6+
forRepository { mavenCentral() }
7+
filter {
8+
includeGroup("it.unimi.dsi")
9+
includeGroup("org.lwjgl")
10+
includeGroupAndSubgroups("io.netty")
11+
}
12+
}
413

514
maven { // JEI
615
name = "Jared's Maven"

src/main/java/com/gregtechceu/gtceu/api/mui/base/drawable/IKey.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ default StyledText alignment(Alignment alignment) {
292292
return withStyle().alignment(alignment);
293293
}
294294

295-
default StyledText color(int color) {
295+
default @NotNull StyledText color(int color) {
296296
return color(() -> color);
297297
}
298298

@@ -322,7 +322,7 @@ default void loadFromJson(JsonObject json) {
322322
}
323323
styledText.shadow(JsonHelper.getBoolean(json, false, "shadow"));
324324
styledText.alignment(
325-
JsonHelper.deserialize(json, Alignment.class, styledText.getAlignment(), "align", "alignment"));
325+
JsonHelper.deserialize(json, Alignment.class, styledText.alignment(), "align", "alignment"));
326326
styledText.scale(JsonHelper.getFloat(json, 1, "scale"));
327327
}
328328
}

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/EntityDrawable.java

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,64 @@
44
import com.gregtechceu.gtceu.api.mui.theme.WidgetTheme;
55
import com.gregtechceu.gtceu.client.mui.screen.viewport.GuiContext;
66

7-
import net.minecraft.world.entity.LivingEntity;
7+
import net.minecraft.client.gui.GuiGraphics;
8+
import net.minecraft.world.entity.Entity;
89

9-
public class EntityDrawable implements IDrawable {
10+
import lombok.Getter;
11+
import lombok.Setter;
12+
import lombok.experimental.Accessors;
13+
import org.jetbrains.annotations.Nullable;
1014

11-
private LivingEntity entity;
15+
import java.util.function.BiConsumer;
1216

13-
public EntityDrawable(LivingEntity entity) {
17+
@Accessors(fluent = true, chain = true)
18+
public class EntityDrawable<T extends Entity> implements IDrawable {
19+
20+
@Getter
21+
protected final T entity;
22+
@Setter
23+
protected @Nullable BiConsumer<GuiGraphics, T> preDraw;
24+
@Setter
25+
protected @Nullable BiConsumer<GuiGraphics, T> postDraw;
26+
27+
@Setter
28+
private boolean followMouse;
29+
private float lookTargetX = 0.0f;
30+
private float lookTargetY = 0.0f;
31+
32+
public EntityDrawable(T entity) {
33+
this(entity, null, null);
34+
}
35+
36+
public EntityDrawable(T entity, @Nullable BiConsumer<GuiGraphics, T> preDraw,
37+
@Nullable BiConsumer<GuiGraphics, T> postDraw) {
1438
this.entity = entity;
39+
this.preDraw = preDraw;
40+
this.postDraw = postDraw;
41+
}
42+
43+
public EntityDrawable<T> followMouse() {
44+
return followMouse(true);
45+
}
46+
47+
public EntityDrawable<T> lookTowardAngle(float xAngle, float yAngle) {
48+
this.followMouse = false;
49+
this.lookTargetX = xAngle;
50+
this.lookTargetY = yAngle;
51+
52+
return this;
1553
}
1654

1755
@Override
1856
public void draw(GuiContext context, int x, int y, int width, int height, WidgetTheme widgetTheme) {
19-
GuiDraw.drawLivingEntity(context.getGraphics(), this.entity, x, y, width, height, context.getCurrentDrawingZ());
57+
if (this.followMouse) {
58+
GuiDraw.drawEntityLookingAtMouse(context.getGraphics(), this.entity, x, y, width, height,
59+
context.getCurrentDrawingZ(), context.getMouseX(), context.getMouseY(),
60+
this.preDraw, this.postDraw);
61+
} else {
62+
GuiDraw.drawEntityLookingAtAngle(context.getGraphics(), this.entity, x, y, width, height,
63+
context.getCurrentDrawingZ(), this.lookTargetX, this.lookTargetY,
64+
this.preDraw, this.postDraw);
65+
}
2066
}
2167
}

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/GuiDraw.java

Lines changed: 277 additions & 127 deletions
Large diffs are not rendered by default.

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/IconRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ public List<IIcon> measureLines(List<IDrawable> lines) {
110110
float scale = this.scale;
111111
Alignment alignment1 = this.alignment;
112112
if (element instanceof StyledText styledText) {
113-
scale = styledText.getScale();
114-
alignment1 = styledText.getAlignment();
113+
scale = styledText.scale();
114+
alignment1 = styledText.alignment();
115115
}
116116
Component text = key.get();
117117
int width = (int) (getFont().width(text) * scale);

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/text/AnimatedText.java

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,27 @@
1212
import net.minecraftforge.api.distmarker.Dist;
1313
import net.minecraftforge.api.distmarker.OnlyIn;
1414

15+
import lombok.Setter;
16+
import lombok.experimental.Accessors;
17+
import org.jetbrains.annotations.NotNull;
1518
import org.jetbrains.annotations.Nullable;
1619

1720
import java.util.function.IntSupplier;
1821

22+
@Accessors(fluent = true, chain = true)
1923
public class AnimatedText extends StyledText {
2024

2125
private MutableComponent full;
2226
private String fullString;
2327
private String currentString = "";
2428
private int currentIndex;
29+
/**
30+
* How fast the characters appear
31+
*/
32+
@Setter
2533
private int speed = 40; // ms per char
2634
private long timeLastDraw;
35+
@Setter
2736
private boolean forward = true;
2837

2938
private boolean isAnimating = false;
@@ -104,48 +113,33 @@ public AnimatedText stopAnimation() {
104113
return this;
105114
}
106115

107-
public AnimatedText forward(boolean forward) {
108-
this.forward = forward;
109-
return this;
110-
}
111-
112116
@Override
113-
public AnimatedText style(ChatFormatting formatting) {
117+
public @NotNull AnimatedText style(ChatFormatting formatting) {
114118
return (AnimatedText) super.style(formatting);
115119
}
116120

117121
@Override
118-
public AnimatedText alignment(Alignment alignment) {
122+
public @NotNull AnimatedText alignment(Alignment alignment) {
119123
return (AnimatedText) super.alignment(alignment);
120124
}
121125

122126
@Override
123-
public AnimatedText color(int color) {
127+
public @NotNull AnimatedText color(int color) {
124128
return color(() -> color);
125129
}
126130

127131
@Override
128-
public AnimatedText color(@Nullable IntSupplier color) {
132+
public @NotNull AnimatedText color(@Nullable IntSupplier color) {
129133
return (AnimatedText) super.color(color);
130134
}
131135

132136
@Override
133-
public AnimatedText scale(float scale) {
137+
public @NotNull AnimatedText scale(float scale) {
134138
return (AnimatedText) super.scale(scale);
135139
}
136140

137141
@Override
138-
public AnimatedText shadow(@Nullable Boolean shadow) {
142+
public @NotNull AnimatedText shadow(@Nullable Boolean shadow) {
139143
return (AnimatedText) super.shadow(shadow);
140144
}
141-
142-
/**
143-
* How fast the characters appear
144-
*
145-
* @param speed in ms per character
146-
*/
147-
public AnimatedText speed(int speed) {
148-
this.speed = speed;
149-
return this;
150-
}
151145
}

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/text/StyledText.java

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,27 @@
1212
import net.minecraftforge.api.distmarker.OnlyIn;
1313

1414
import lombok.Getter;
15+
import lombok.Setter;
16+
import lombok.experimental.Accessors;
17+
import org.jetbrains.annotations.NotNull;
1518
import org.jetbrains.annotations.Nullable;
1619

1720
import java.util.function.IntSupplier;
1821

22+
@Accessors(fluent = true, chain = true)
1923
public class StyledText extends BaseKey {
2024

2125
private final IKey key;
2226
@Getter
27+
@Setter
2328
private Alignment alignment = Alignment.Center;
2429
@Getter
30+
@Setter
2531
private IntSupplier color = null;
32+
@Setter
2633
private @Nullable Boolean shadow = null;
2734
@Getter
35+
@Setter
2836
private float scale = 1f;
2937

3038
public StyledText(IKey key) {
@@ -57,40 +65,11 @@ public void draw(GuiContext context, int x, int y, int width, int height, Widget
5765
}
5866

5967
@Override
60-
public BaseKey style(ChatFormatting formatting) {
68+
public @NotNull BaseKey style(ChatFormatting formatting) {
6169
this.key.style(formatting);
6270
return this;
6371
}
6472

65-
@Override
66-
public StyledText alignment(Alignment alignment) {
67-
this.alignment = alignment;
68-
return this;
69-
}
70-
71-
@Override
72-
public StyledText color(int color) {
73-
return color(() -> color);
74-
}
75-
76-
@Override
77-
public StyledText color(@Nullable IntSupplier color) {
78-
this.color = color;
79-
return this;
80-
}
81-
82-
@Override
83-
public StyledText scale(float scale) {
84-
this.scale = scale;
85-
return this;
86-
}
87-
88-
@Override
89-
public StyledText shadow(@Nullable Boolean shadow) {
90-
this.shadow = shadow;
91-
return this;
92-
}
93-
9473
@Override
9574
public TextWidget<?> asWidget() {
9675
return new TextWidget<>(this.key)

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/text/TextRenderer.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import net.minecraftforge.api.distmarker.Dist;
1717
import net.minecraftforge.api.distmarker.OnlyIn;
1818

19-
import com.mojang.blaze3d.systems.RenderSystem;
2019
import lombok.Getter;
2120
import lombok.Setter;
2221

@@ -263,12 +262,10 @@ protected int getStartX(float maxWidth, float lineWidth) {
263262

264263
protected void draw(GuiGraphics graphics, FormattedCharSequence text, float x, float y) {
265264
if (this.simulate || graphics == null) return;
266-
RenderSystem.disableBlend();
267265
graphics.pose().pushPose();
268266
graphics.pose().scale(this.scale, this.scale, 0f);
269267
graphics.drawString(getFont(), text, (int) (x / this.scale), (int) (y / this.scale), this.color, this.shadow);
270268
graphics.pose().popPose();
271-
RenderSystem.enableBlend();
272269
}
273270

274271
public float getFontHeight() {

0 commit comments

Comments
 (0)