Skip to content

Commit 65c42ad

Browse files
committed
Update to use Mojang's nine_slice implementation for rendering
1 parent 1413cad commit 65c42ad

36 files changed

+453
-251
lines changed

Common/src/main/java/mezz/jei/common/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
public final class Constants {
88
public static final IRecipeType<?> UNIVERSAL_RECIPE_TRANSFER_TYPE = IRecipeType.create(ModIds.JEI_ID, "universal_recipe_transfer_handler", Object.class);
99
public static final ResourceLocation LOCATION_JEI_GUI_TEXTURE_ATLAS = ResourceLocation.fromNamespaceAndPath(ModIds.JEI_ID, "textures/atlas/gui.png");
10+
public static final ResourceLocation JEI_GUI_TEXTURE_ATLAS_ID = ResourceLocation.fromNamespaceAndPath(ModIds.JEI_ID, "gui");
1011

1112
private Constants() {
1213

Common/src/main/java/mezz/jei/common/Internal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import mezz.jei.common.config.ClientToggleState;
66
import mezz.jei.common.config.IClientToggleState;
77
import mezz.jei.common.config.IJeiClientConfigs;
8-
import mezz.jei.common.gui.textures.JeiSpriteUploader;
8+
import mezz.jei.common.gui.textures.JeiGuiSpriteManager;
99
import mezz.jei.common.gui.textures.Textures;
1010
import mezz.jei.common.input.IInternalKeyMappings;
1111
import mezz.jei.common.network.IConnectionToServer;
@@ -43,7 +43,7 @@ public static Textures getTextures() {
4343
if (textures == null) {
4444
Minecraft minecraft = Minecraft.getInstance();
4545
TextureManager textureManager = minecraft.getTextureManager();
46-
JeiSpriteUploader spriteUploader = new JeiSpriteUploader(textureManager);
46+
JeiGuiSpriteManager spriteUploader = new JeiGuiSpriteManager(textureManager);
4747
textures = new Textures(spriteUploader);
4848
}
4949
return textures;

Common/src/main/java/mezz/jei/common/gui/elements/DrawableNineSliceTexture.java

Lines changed: 0 additions & 148 deletions
This file was deleted.

Common/src/main/java/mezz/jei/common/gui/elements/DrawableSprite.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.mojang.blaze3d.vertex.VertexConsumer;
44
import mezz.jei.api.gui.drawable.IDrawableStatic;
55
import mezz.jei.common.Constants;
6-
import mezz.jei.common.gui.textures.JeiSpriteUploader;
6+
import mezz.jei.common.gui.textures.JeiGuiSpriteManager;
77
import net.minecraft.client.Minecraft;
88
import net.minecraft.client.gui.GuiGraphics;
99
import net.minecraft.client.renderer.RenderType;
@@ -12,7 +12,7 @@
1212
import org.joml.Matrix4f;
1313

1414
public class DrawableSprite implements IDrawableStatic {
15-
private final JeiSpriteUploader spriteUploader;
15+
private final JeiGuiSpriteManager spriteManager;
1616
private final ResourceLocation location;
1717
private final int width;
1818
private final int height;
@@ -21,8 +21,8 @@ public class DrawableSprite implements IDrawableStatic {
2121
private int trimTop;
2222
private int trimBottom;
2323

24-
public DrawableSprite(JeiSpriteUploader spriteUploader, ResourceLocation location, int width, int height) {
25-
this.spriteUploader = spriteUploader;
24+
public DrawableSprite(JeiGuiSpriteManager spriteManager, ResourceLocation location, int width, int height) {
25+
this.spriteManager = spriteManager;
2626
this.location = location;
2727
this.width = width;
2828
this.height = height;
@@ -53,7 +53,7 @@ public void draw(GuiGraphics guiGraphics, int xOffset, int yOffset) {
5353

5454
@Override
5555
public void draw(GuiGraphics guiGraphics, int xOffset, int yOffset, int maskTop, int maskBottom, int maskLeft, int maskRight) {
56-
TextureAtlasSprite sprite = spriteUploader.getSprite(location);
56+
TextureAtlasSprite sprite = spriteManager.getSprite(location);
5757
int textureWidth = this.width;
5858
int textureHeight = this.height;
5959

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package mezz.jei.common.gui.elements;
2+
3+
import mezz.jei.api.gui.drawable.IScalableDrawable;
4+
import mezz.jei.common.gui.textures.JeiGuiSpriteManager;
5+
import mezz.jei.common.platform.IPlatformRenderHelper;
6+
import mezz.jei.common.platform.Services;
7+
import mezz.jei.common.util.ImmutableRect2i;
8+
import net.minecraft.client.gui.GuiGraphics;
9+
import net.minecraft.client.renderer.RenderType;
10+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
11+
import net.minecraft.client.resources.metadata.gui.GuiSpriteScaling;
12+
import net.minecraft.resources.ResourceLocation;
13+
14+
public class ScalableDrawable implements IScalableDrawable {
15+
private final JeiGuiSpriteManager spriteUploader;
16+
private final ResourceLocation location;
17+
18+
public ScalableDrawable(JeiGuiSpriteManager spriteUploader, ResourceLocation location) {
19+
this.spriteUploader = spriteUploader;
20+
this.location = location;
21+
}
22+
23+
public void draw(GuiGraphics guiGraphics, ImmutableRect2i area) {
24+
draw(guiGraphics, area.getX(), area.getY(), area.getWidth(), area.getHeight());
25+
}
26+
27+
@Override
28+
public void draw(GuiGraphics guiGraphics, int xOffset, int yOffset, int width, int height) {
29+
TextureAtlasSprite sprite = spriteUploader.getSprite(location);
30+
GuiSpriteScaling scaling = spriteUploader.getSpriteScaling(sprite);
31+
32+
switch (scaling) {
33+
case GuiSpriteScaling.Tile tileScaling -> {
34+
IPlatformRenderHelper renderHelper = Services.PLATFORM.getRenderHelper();
35+
renderHelper.blitTiledSprite(
36+
guiGraphics,
37+
RenderType::guiTextured,
38+
sprite,
39+
tileScaling,
40+
xOffset,
41+
yOffset,
42+
width,
43+
height
44+
);
45+
}
46+
case GuiSpriteScaling.NineSlice nineSliceScaling -> {
47+
IPlatformRenderHelper renderHelper = Services.PLATFORM.getRenderHelper();
48+
renderHelper.blitNineSlicedSprite(
49+
guiGraphics,
50+
RenderType::guiTextured,
51+
sprite,
52+
nineSliceScaling,
53+
xOffset,
54+
yOffset,
55+
width,
56+
height
57+
);
58+
}
59+
default -> guiGraphics.blitSprite(
60+
RenderType::guiTextured,
61+
location,
62+
xOffset,
63+
yOffset,
64+
width,
65+
height
66+
);
67+
}
68+
}
69+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package mezz.jei.common.gui.textures;
2+
3+
import mezz.jei.common.Constants;
4+
import net.minecraft.client.renderer.texture.SpriteContents;
5+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
6+
import net.minecraft.client.renderer.texture.TextureManager;
7+
import net.minecraft.client.resources.TextureAtlasHolder;
8+
import net.minecraft.client.resources.metadata.animation.AnimationMetadataSection;
9+
import net.minecraft.client.resources.metadata.gui.GuiMetadataSection;
10+
import net.minecraft.client.resources.metadata.gui.GuiSpriteScaling;
11+
import net.minecraft.resources.ResourceLocation;
12+
import net.minecraft.server.packs.resources.ResourceMetadata;
13+
14+
import java.util.Set;
15+
16+
public class JeiGuiSpriteManager extends TextureAtlasHolder {
17+
public JeiGuiSpriteManager(TextureManager textureManager) {
18+
super(textureManager, Constants.LOCATION_JEI_GUI_TEXTURE_ATLAS, Constants.JEI_GUI_TEXTURE_ATLAS_ID, Set.of(AnimationMetadataSection.TYPE, GuiMetadataSection.TYPE));
19+
}
20+
21+
/**
22+
* Overridden to make it public
23+
*/
24+
@Override
25+
public TextureAtlasSprite getSprite(ResourceLocation location) {
26+
return super.getSprite(location);
27+
}
28+
29+
public GuiSpriteScaling getSpriteScaling(TextureAtlasSprite sprite) {
30+
return this.getMetadata(sprite).scaling();
31+
}
32+
33+
private GuiMetadataSection getMetadata(TextureAtlasSprite sprite) {
34+
SpriteContents contents = sprite.contents();
35+
ResourceMetadata metadata = contents.metadata();
36+
return metadata.getSection(GuiMetadataSection.TYPE)
37+
.orElse(GuiMetadataSection.DEFAULT);
38+
}
39+
40+
}

Common/src/main/java/mezz/jei/common/gui/textures/JeiSpriteUploader.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)