mirror of
https://github.com/TeamMidnightDust/PictureSign.git
synced 2025-12-11 12:05:09 +01:00
Further improvements
This commit is contained in:
@@ -22,7 +22,6 @@ import net.minecraft.client.render.Tessellator;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormats;
|
||||
import net.minecraft.client.texture.TextureManager;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.text.OrderedText;
|
||||
@@ -32,6 +31,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RotationAxis;
|
||||
import net.minecraft.world.World;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
@@ -42,12 +42,12 @@ import static eu.midnightdust.picturesign.PictureSignClient.hasWaterMedia;
|
||||
import static eu.midnightdust.picturesign.PictureSignClient.id;
|
||||
import static eu.midnightdust.picturesign.util.PictureSignType.GIF;
|
||||
import static eu.midnightdust.picturesign.util.PictureSignType.PICTURE;
|
||||
import static net.minecraft.client.texture.TextureManager.MISSING_IDENTIFIER;
|
||||
|
||||
public class PictureRenderer {
|
||||
private boolean isSafeUrl;
|
||||
private boolean isSafeJsonUrl;
|
||||
|
||||
@Nullable private Text errorMessage;
|
||||
public static final Text ERROR = Text.translatable("picturesign.error");
|
||||
public static final Text MISSING_VLC = ERROR.copy().append(Text.translatable("picturesign.error.missingVLC"));
|
||||
public static final Text MISSING_WATERMEDIA = ERROR.copy().append(Text.translatable("picturesign.error.missingWatermedia"));
|
||||
@@ -60,7 +60,7 @@ public class PictureRenderer {
|
||||
public static final Identifier RAW_TEXTURE = id("internal_raw_texture");
|
||||
|
||||
public void render(BlockEntity blockEntity, PictureSignType type, String url, PictureDimensions dimensions, PictureOffset offset, boolean front, MatrixStack matrixStack, VertexConsumerProvider vertices, int light, int overlay) {
|
||||
errorMessage = null;
|
||||
Text errorMessage = null;
|
||||
MediaJsonInfo info = null;
|
||||
if (!url.contains("://") && !url.startsWith("file:") && !url.startsWith("rp:")) {
|
||||
url = "https://" + url;
|
||||
@@ -123,7 +123,7 @@ public class PictureRenderer {
|
||||
else if (mediaHandler != null) {
|
||||
if (!mediaHandler.isReady()) errorMessage = MISSING_VLC;
|
||||
else {
|
||||
if (!mediaHandler.hasMedia() && !mediaHandler.playbackStarted) {
|
||||
if (!mediaHandler.playbackStarted && !mediaHandler.hasMedia()) {
|
||||
mediaHandler.play(url, type.isVideo);
|
||||
if (info != null && info.start() > 0) mediaHandler.setTime(info.start());
|
||||
if (type.isLooped && !mediaHandler.hasMedia() && !mediaHandler.playbackStarted)
|
||||
@@ -204,32 +204,35 @@ public class PictureRenderer {
|
||||
|
||||
BufferRenderer.drawWithGlobalProgram(buffer.end());
|
||||
|
||||
if (errorMessage != null) renderErrorMessage(client.textRenderer, matrixStack, vertices, dimensions.width(), dimensions.height());
|
||||
if (errorMessage != null) renderErrorMessage(errorMessage, client.textRenderer, matrixStack, vertices, dimensions.width(), dimensions.height());
|
||||
matrixStack.pop();
|
||||
RenderSystem.disableBlend();
|
||||
RenderSystem.disableDepthTest();
|
||||
}
|
||||
private void renderErrorMessage(TextRenderer textRenderer, MatrixStack matrices, VertexConsumerProvider vertices, float width, float height) {
|
||||
private static void renderErrorMessage(Text error, @NotNull TextRenderer textRenderer, @NotNull MatrixStack matrices, VertexConsumerProvider vertices, float width, float height) {
|
||||
float scale = Math.min(width, height) / 100;
|
||||
matrices.translate(0, height, 1.005f);
|
||||
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(180));
|
||||
matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(180));
|
||||
matrices.scale(scale,scale,scale);
|
||||
int wrappedY = 0;
|
||||
for(Iterator<OrderedText> textIterator = textRenderer.wrapLines(errorMessage, MathHelper.floor(width/scale)).iterator(); textIterator.hasNext(); wrappedY += 9) {
|
||||
for(Iterator<OrderedText> textIterator = textRenderer.wrapLines(error, MathHelper.floor(width/scale)).iterator(); textIterator.hasNext(); wrappedY += 9) {
|
||||
renderTextWithShadow(textIterator.next(), wrappedY, textRenderer, matrices.peek().getPositionMatrix(), vertices);
|
||||
}
|
||||
}
|
||||
private void renderTextWithShadow(OrderedText text, int wrappedY, TextRenderer textRenderer, Matrix4f matrix, VertexConsumerProvider vertices) {
|
||||
private static void renderTextWithShadow(OrderedText text, int wrappedY, @NotNull TextRenderer textRenderer, Matrix4f matrix, VertexConsumerProvider vertices) {
|
||||
textRenderer.draw(text, 0, wrappedY, 0xFFFFFF, false, matrix, vertices, TextRenderer.TextLayerType.POLYGON_OFFSET, 0, 15728880);
|
||||
matrix.translate(0, 0, 0.025f);
|
||||
textRenderer.draw(text, 1, wrappedY + 1, 0x555555, false, matrix, vertices, TextRenderer.TextLayerType.POLYGON_OFFSET, 0, 15728880);
|
||||
matrix.translate(0, 0, -0.025f);
|
||||
}
|
||||
public static Identifier getMissingTexture() {
|
||||
if (PictureSignConfig.missingImageMode.equals(PictureSignConfig.MissingImageMode.TRANSPARENT)) return null;
|
||||
return PictureSignConfig.missingImageMode.equals(PictureSignConfig.MissingImageMode.BLACK) ?
|
||||
(id("textures/black.png")) : (TextureManager.MISSING_IDENTIFIER);
|
||||
private static final Identifier BLACK_TEXTURE = id("textures/black.png");
|
||||
public @Nullable Identifier getMissingTexture() {
|
||||
return switch (PictureSignConfig.missingImageMode) {
|
||||
case BLACK -> BLACK_TEXTURE;
|
||||
case MISSING_TEXTURE -> MISSING_IDENTIFIER;
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
public void checkJsonUrlSafety(String jsonUrl) {
|
||||
isSafeJsonUrl = false;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class PictureSignRenderer extends PictureRenderer {
|
||||
PictureSignType type = getType(signBlockEntity, front);
|
||||
super.render(signBlockEntity, type, PictureURLUtils.getLink(signBlockEntity, front), dimensions, getOffset(signBlockEntity, front, type), front, matrixStack, vertices, light, overlay);
|
||||
}
|
||||
private PictureDimensions getDimensions(String thirdLine, String forthLine) {
|
||||
private static PictureDimensions getDimensions(String thirdLine, String forthLine) {
|
||||
String[] scale = forthLine.split(":");
|
||||
float width = 0;
|
||||
float height = 0;
|
||||
@@ -54,7 +54,7 @@ public class PictureSignRenderer extends PictureRenderer {
|
||||
}
|
||||
return new PictureDimensions(width, height, x, y, z, xRot, yRot, zRot);
|
||||
}
|
||||
private PictureOffset getOffset(BlockEntity blockEntity, boolean front, PictureSignType type) {
|
||||
private static PictureOffset getOffset(BlockEntity blockEntity, boolean front, PictureSignType type) {
|
||||
if (type.isAudio) return null;
|
||||
float xOffset = 0.0F;
|
||||
float zOffset = 0.0F;
|
||||
|
||||
@@ -314,7 +314,7 @@ public class PictureSignHelperScreen extends Screen {
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
matrices.push();
|
||||
VertexConsumerProvider.Immediate immediate = this.client.getBufferBuilders().getEntityVertexConsumers();
|
||||
translateForRender(context, sign.getCachedState());
|
||||
translateForRender(context);
|
||||
renderSignBackground(context, sign.getCachedState());
|
||||
|
||||
int i = this.sign.getText(front).getColor().getSignColor();
|
||||
@@ -347,7 +347,7 @@ public class PictureSignHelperScreen extends Screen {
|
||||
matrices.pop();
|
||||
DiffuseLighting.enableGuiDepthLighting();
|
||||
}
|
||||
protected void translateForRender(DrawContext context, BlockState state) {
|
||||
protected void translateForRender(DrawContext context) {
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
if (isHanging) {
|
||||
matrices.translate((float)this.width / 2.0F + 100, this.height / 5f + 50, 50.0F);
|
||||
@@ -361,19 +361,18 @@ public class PictureSignHelperScreen extends Screen {
|
||||
}
|
||||
|
||||
protected void renderSignBackground(DrawContext context, BlockState state) {
|
||||
if (!isHanging) {
|
||||
if (!isHanging && this.client != null) {
|
||||
VertexConsumerProvider.Immediate immediate = this.client.getBufferBuilders().getEntityVertexConsumers();
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
|
||||
BlockState blockState = this.sign.getCachedState();
|
||||
boolean bl = blockState.getBlock() instanceof SignBlock;
|
||||
boolean bl = state.getBlock() instanceof SignBlock;
|
||||
if (!bl) {
|
||||
matrices.translate(0.0, -0.15625, 0.0);
|
||||
}
|
||||
matrices.push();
|
||||
matrices.scale(0.6666667F, -0.6666667F, -0.6666667F);
|
||||
|
||||
SpriteIdentifier spriteIdentifier = TexturedRenderLayers.getSignTextureId(AbstractSignBlock.getWoodType(sign.getCachedState().getBlock()));
|
||||
SpriteIdentifier spriteIdentifier = TexturedRenderLayers.getSignTextureId(AbstractSignBlock.getWoodType(state.getBlock()));
|
||||
SignBlockEntityRenderer.SignModel var10002 = this.model;
|
||||
Objects.requireNonNull(var10002);
|
||||
VertexConsumer vertexConsumer = spriteIdentifier.getVertexConsumer(immediate, var10002::getLayer);
|
||||
|
||||
Reference in New Issue
Block a user