mirror of
https://github.com/TeamMidnightDust/PictureSign.git
synced 2025-12-15 21:55:09 +01:00
port: 1.21.4
- Also features some cleanup work
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id "architectury-plugin" version "3.4-SNAPSHOT"
|
id "architectury-plugin" version "3.4-SNAPSHOT"
|
||||||
id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false
|
id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false
|
||||||
id "me.shedaniel.unified-publishing" version "0.1.+" apply false
|
id "me.shedaniel.unified-publishing" version "0.1.+" apply false
|
||||||
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
|
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ subprojects {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
|
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
|
||||||
implementation "com.github.SrRapero720.watermedia:build:${rootProject.watermedia_version}"
|
implementation "maven.modrinth:watermedia:${rootProject.watermedia_version}"
|
||||||
// The following line declares the mojmap mappings, you may use other mappings as well
|
// The following line declares the mojmap mappings, you may use other mappings as well
|
||||||
//mappings loom.officialMojangMappings()
|
//mappings loom.officialMojangMappings()
|
||||||
// The following line declares the yarn mappings you may select this one as well.
|
// The following line declares the yarn mappings you may select this one as well.
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ public class PictureSignClient {
|
|||||||
public static final String MOD_ID = "picturesign";
|
public static final String MOD_ID = "picturesign";
|
||||||
public static String[] clipboard = new String[4];
|
public static String[] clipboard = new String[4];
|
||||||
public static final MinecraftClient client = MinecraftClient.getInstance();
|
public static final MinecraftClient client = MinecraftClient.getInstance();
|
||||||
public static final KeyBinding BINDING_COPY_SIGN = new KeyBinding("key."+MOD_ID+".copy_sign",
|
public static final KeyBinding BINDING_COPY_SIGN = new KeyBinding("key.%s.copy_sign".formatted(MOD_ID),
|
||||||
InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.categories."+MOD_ID);
|
InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.categories.%s".formatted(MOD_ID));
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
PictureSignConfig.init(MOD_ID, PictureSignConfig.class);
|
PictureSignConfig.init(MOD_ID, PictureSignConfig.class);
|
||||||
|
|||||||
@@ -2,47 +2,58 @@ package eu.midnightdust.picturesign.config;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import eu.midnightdust.lib.config.MidnightConfig;
|
import eu.midnightdust.lib.config.MidnightConfig;
|
||||||
import net.minecraft.client.gl.ShaderProgram;
|
import net.minecraft.client.gl.ShaderProgramKey;
|
||||||
import net.minecraft.client.render.GameRenderer;
|
import net.minecraft.client.gl.ShaderProgramKeys;
|
||||||
|
import net.minecraft.client.texture.TextureManager;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
import static eu.midnightdust.picturesign.PictureSignClient.id;
|
||||||
|
|
||||||
public class PictureSignConfig extends MidnightConfig {
|
public class PictureSignConfig extends MidnightConfig {
|
||||||
private static final String general = "1general";
|
private static final String GENERAL = "general";
|
||||||
private static final String advanced = "advanced";
|
private static final String ADVANCED = "advanced";
|
||||||
|
|
||||||
@Entry(category = general) public static boolean enabled = true;
|
@Entry(category = GENERAL) public static boolean enabled = true;
|
||||||
@Entry(category = general) public static boolean enableMultimediaSigns = true;
|
@Entry(category = GENERAL) public static boolean enableMultimediaSigns = true;
|
||||||
@Entry(min = 0, max = 1000, isSlider = true, category = general) public static int audioDistanceMultiplier = 30;
|
@Entry(min = 0, max = 1000, isSlider = true, category = GENERAL) public static int audioDistanceMultiplier = 30;
|
||||||
@Entry(category = general) public static boolean translucency = false;
|
@Entry(category = GENERAL) public static boolean translucency = false;
|
||||||
@Entry(category = general) public static boolean fullBrightPicture = false;
|
@Entry(category = GENERAL) public static boolean fullBrightPicture = false;
|
||||||
@Entry(category = general) public static boolean helperUi = true;
|
@Entry(category = GENERAL) public static boolean helperUi = true;
|
||||||
@Entry(category = general) public static boolean exceedVanillaLineLength = true;
|
@Entry(category = GENERAL) public static boolean exceedVanillaLineLength = true;
|
||||||
@Entry(category = advanced) public static boolean debug = false;
|
@Entry(category = ADVANCED) public static boolean debug = false;
|
||||||
@Entry(min = 1, max = 10, isSlider = true, category = advanced) public static int maxThreads = 4;
|
@Entry(min = 1, max = 10, isSlider = true, category = ADVANCED) public static int maxThreads = 4;
|
||||||
@Entry(min = 0, max = 2048, isSlider = true, category = general) public static int signRenderDistance = 64;
|
@Entry(min = 0, max = 2048, isSlider = true, category = GENERAL) public static int signRenderDistance = 64;
|
||||||
@Entry(category = advanced) public static boolean safeMode = true;
|
@Entry(category = ADVANCED) public static boolean safeMode = true;
|
||||||
@Entry(category = advanced) public static List<String> safeProviders = Lists.newArrayList("https://i.imgur.com/", "https://i.ibb.co/", "https://pictshare.net/", "https://iili.io/");
|
@Entry(category = ADVANCED) public static List<String> safeProviders = Lists.newArrayList("https://i.imgur.com/", "https://i.ibb.co/", "https://pictshare.net/", "https://iili.io/");
|
||||||
@Entry(category = advanced) public static List<String> safeGifProviders = Lists.newArrayList("https://i.imgur.com/", "https://media1.tenor.com/");
|
@Entry(category = ADVANCED) public static List<String> safeGifProviders = Lists.newArrayList("https://i.imgur.com/", "https://media1.tenor.com/");
|
||||||
@Entry(category = advanced) public static List<String> safeMultimediaProviders = Lists.newArrayList("https://youtube.com/", "https://www.youtube.com/", "https://youtu.be/","https://vimeo.com/");
|
@Entry(category = ADVANCED) public static List<String> safeMultimediaProviders = Lists.newArrayList("https://youtube.com/", "https://www.youtube.com/", "https://youtu.be/","https://vimeo.com/");
|
||||||
@Entry(category = advanced) public static List<String> safeJsonProviders = Lists.newArrayList("https://github.com/", "https://gist.github.com/", "https://www.jsonkeeper.com/", "https://api.npoint.io/", "https://api.jsonsilo.com/");
|
@Entry(category = ADVANCED) public static List<String> safeJsonProviders = Lists.newArrayList("https://github.com/", "https://gist.github.com/", "https://www.jsonkeeper.com/", "https://api.npoint.io/", "https://api.jsonsilo.com/");
|
||||||
@Comment(category = general) public static Comment ebeWarning;
|
@Comment(category = GENERAL) @Condition(requiredModId = "enhancedblockentities") public static Comment ebeWarning;
|
||||||
@Entry(category = advanced) public static MissingImageMode missingImageMode = MissingImageMode.BLACK;
|
@Entry(category = ADVANCED) public static MissingImageMode missingImageMode = MissingImageMode.BLACK;
|
||||||
@Entry(category = advanced) public static PictureShader pictureShader = PictureShader.PosColTexLight;
|
@Entry(category = ADVANCED) public static PictureShader pictureShader = PictureShader.PosColTexLight;
|
||||||
|
|
||||||
public enum MissingImageMode {
|
public enum MissingImageMode {
|
||||||
BLACK, MISSING_TEXTURE, TRANSPARENT
|
BLACK(id("textures/black.png")),
|
||||||
|
MISSING_TEXTURE(TextureManager.MISSING_IDENTIFIER),
|
||||||
|
TRANSPARENT(null);
|
||||||
|
|
||||||
|
MissingImageMode(@Nullable Identifier missingTextureId) {
|
||||||
|
this.missingTextureId = missingTextureId;
|
||||||
|
}
|
||||||
|
@Nullable public final Identifier missingTextureId;
|
||||||
}
|
}
|
||||||
public enum PictureShader {
|
public enum PictureShader {
|
||||||
PosColTexLight(GameRenderer::getPositionColorTexLightmapProgram),
|
PosColTexLight(ShaderProgramKeys.POSITION_COLOR_TEX_LIGHTMAP),
|
||||||
RenderTypeCutout(GameRenderer::getRenderTypeCutoutProgram),
|
RenderTypeCutout(ShaderProgramKeys.RENDERTYPE_CUTOUT),
|
||||||
PosTex(GameRenderer::getPositionTexProgram),
|
PosTex(ShaderProgramKeys.POSITION_TEX),
|
||||||
PosTexCol(GameRenderer::getPositionTexColorProgram);
|
PosTexCol(ShaderProgramKeys.POSITION_TEX_COLOR);
|
||||||
|
|
||||||
PictureShader(Supplier<ShaderProgram> program) {
|
PictureShader(ShaderProgramKey program) {
|
||||||
this.program = program;
|
this.program = program;
|
||||||
}
|
}
|
||||||
public final Supplier<ShaderProgram> program;
|
public final ShaderProgramKey program;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import eu.midnightdust.picturesign.render.PictureSignRenderer;
|
|||||||
import eu.midnightdust.picturesign.util.PictureSignType;
|
import eu.midnightdust.picturesign.util.PictureSignType;
|
||||||
import net.minecraft.block.entity.SignBlockEntity;
|
import net.minecraft.block.entity.SignBlockEntity;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
import net.minecraft.client.render.VertexConsumerProvider;
|
||||||
|
import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer;
|
||||||
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
|
||||||
import net.minecraft.client.render.block.entity.HangingSignBlockEntityRenderer;
|
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
@@ -17,15 +17,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
import static eu.midnightdust.picturesign.util.PictureSignType.isCandidate;
|
import static eu.midnightdust.picturesign.util.PictureSignType.isCandidate;
|
||||||
import static eu.midnightdust.picturesign.util.PictureSignType.isNotOfType;
|
import static eu.midnightdust.picturesign.util.PictureSignType.isNotOfType;
|
||||||
|
|
||||||
@Mixin(HangingSignBlockEntityRenderer.class)
|
@Mixin(AbstractSignBlockEntityRenderer.class)
|
||||||
public abstract class MixinHangingSignBlockEntityRenderer implements BlockEntityRenderer<SignBlockEntity> {
|
public abstract class MixinAbstractSignBlockEntityRenderer implements BlockEntityRenderer<SignBlockEntity> {
|
||||||
@Unique PictureSignRenderer psRenderer = new PictureSignRenderer();
|
@Unique PictureSignRenderer picturesign$psRenderer = new PictureSignRenderer();
|
||||||
|
|
||||||
@Inject(at = @At("HEAD"), method = "render")
|
@Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/block/entity/SignBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;II)V")
|
||||||
public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) {
|
public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) {
|
||||||
if (PictureSignConfig.enabled) {
|
if (PictureSignConfig.enabled) {
|
||||||
if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true);
|
if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) picturesign$psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true);
|
||||||
if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false);
|
if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) picturesign$psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Unique
|
@Unique
|
||||||
@@ -31,17 +31,17 @@ public abstract class MixinSignBlockEntityRenderer implements BlockEntityRendere
|
|||||||
psRenderer = new PictureSignRenderer();
|
psRenderer = new PictureSignRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(at = @At("HEAD"), method = "render")
|
// @Inject(at = @At("HEAD"), method = "render")
|
||||||
public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) {
|
// public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) {
|
||||||
if (PictureSignConfig.enabled && psRenderer != null) {
|
// if (PictureSignConfig.enabled && psRenderer != null) {
|
||||||
if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true);
|
// if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true);
|
||||||
if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false);
|
// if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@Inject(at = @At("HEAD"), method = "shouldRender", cancellable = true)
|
// @Inject(at = @At("HEAD"), method = "shouldRender", cancellable = true)
|
||||||
private static void shouldRender(BlockPos pos, int signColor, CallbackInfoReturnable<Boolean> cir) {
|
// private static void shouldRender(BlockPos pos, int signColor, CallbackInfoReturnable<Boolean> cir) {
|
||||||
if (PictureSignConfig.enabled && client.world != null && hasPicture((SignBlockEntity) client.world.getBlockEntity(pos))) cir.setReturnValue(true);
|
// if (PictureSignConfig.enabled && client.world != null && hasPicture((SignBlockEntity) client.world.getBlockEntity(pos))) cir.setReturnValue(true);
|
||||||
}
|
// }
|
||||||
@Unique
|
@Unique
|
||||||
@Override
|
@Override
|
||||||
public int getRenderDistance() {
|
public int getRenderDistance() {
|
||||||
|
|||||||
@@ -23,14 +23,14 @@ import static eu.midnightdust.picturesign.PictureSignClient.id;
|
|||||||
|
|
||||||
@Mixin(AbstractSignEditScreen.class)
|
@Mixin(AbstractSignEditScreen.class)
|
||||||
public abstract class MixinSignEditScreen extends Screen {
|
public abstract class MixinSignEditScreen extends Screen {
|
||||||
@Shadow @Final private SignBlockEntity blockEntity;
|
@Shadow @Final protected SignBlockEntity blockEntity;
|
||||||
@Shadow @Final private String[] messages;
|
@Shadow @Final private String[] messages;
|
||||||
@Shadow @Final private boolean front;
|
@Shadow @Final private boolean front;
|
||||||
|
|
||||||
@Unique private static final Identifier PICTURESIGN_ICON_TEXTURE = id("icon/picturesign");
|
@Unique private static final Identifier PICTURESIGN_ICON_TEXTURE = id("icon/picturesign");
|
||||||
@Unique private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard");
|
@Unique private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard");
|
||||||
@Unique private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin");
|
@Unique private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin");
|
||||||
@Unique private static boolean switchScreen = false;
|
@Unique private static boolean picturesign$switchScreen = false;
|
||||||
|
|
||||||
protected MixinSignEditScreen(Text title) {
|
protected MixinSignEditScreen(Text title) {
|
||||||
super(title);
|
super(title);
|
||||||
@@ -61,7 +61,7 @@ public abstract class MixinSignEditScreen extends Screen {
|
|||||||
this.addDrawableChild(trashbinBuilder);
|
this.addDrawableChild(trashbinBuilder);
|
||||||
|
|
||||||
TextIconButtonWidget picturesignBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> {
|
TextIconButtonWidget picturesignBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> {
|
||||||
switchScreen = true;
|
picturesign$switchScreen = true;
|
||||||
Objects.requireNonNull(client).setScreen(new PictureSignHelperScreen(this.blockEntity, front, false));
|
Objects.requireNonNull(client).setScreen(new PictureSignHelperScreen(this.blockEntity, front, false));
|
||||||
}, true).texture(PICTURESIGN_ICON_TEXTURE, 16, 16).dimension(20, 20).build();
|
}, true).texture(PICTURESIGN_ICON_TEXTURE, 16, 16).dimension(20, 20).build();
|
||||||
picturesignBuilder.setPosition(this.width - 40, this.height - 40);
|
picturesignBuilder.setPosition(this.width - 40, this.height - 40);
|
||||||
@@ -70,8 +70,8 @@ public abstract class MixinSignEditScreen extends Screen {
|
|||||||
}
|
}
|
||||||
@Inject(at = @At("HEAD"), method = "removed", cancellable = true)
|
@Inject(at = @At("HEAD"), method = "removed", cancellable = true)
|
||||||
private void picturesign$removed(CallbackInfo ci) {
|
private void picturesign$removed(CallbackInfo ci) {
|
||||||
if (switchScreen) {
|
if (picturesign$switchScreen) {
|
||||||
switchScreen = false;
|
picturesign$switchScreen = false;
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ import eu.midnightdust.picturesign.util.records.PictureOffset;
|
|||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.entity.BlockEntity;
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gl.ShaderProgramKeys;
|
||||||
import net.minecraft.client.render.BufferBuilder;
|
import net.minecraft.client.render.BufferBuilder;
|
||||||
import net.minecraft.client.render.BufferRenderer;
|
import net.minecraft.client.render.BufferRenderer;
|
||||||
import net.minecraft.client.render.GameRenderer;
|
|
||||||
import net.minecraft.client.render.Tessellator;
|
import net.minecraft.client.render.Tessellator;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
import net.minecraft.client.render.VertexConsumerProvider;
|
||||||
import net.minecraft.client.render.VertexFormat;
|
import net.minecraft.client.render.VertexFormat;
|
||||||
@@ -32,7 +32,6 @@ import net.minecraft.util.math.MathHelper;
|
|||||||
import net.minecraft.util.math.RotationAxis;
|
import net.minecraft.util.math.RotationAxis;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@@ -41,7 +40,6 @@ import static eu.midnightdust.picturesign.PictureSignClient.client;
|
|||||||
import static eu.midnightdust.picturesign.PictureSignClient.id;
|
import static eu.midnightdust.picturesign.PictureSignClient.id;
|
||||||
import static eu.midnightdust.picturesign.util.PictureSignType.GIF;
|
import static eu.midnightdust.picturesign.util.PictureSignType.GIF;
|
||||||
import static eu.midnightdust.picturesign.util.PictureSignType.PICTURE;
|
import static eu.midnightdust.picturesign.util.PictureSignType.PICTURE;
|
||||||
import static net.minecraft.client.texture.TextureManager.MISSING_IDENTIFIER;
|
|
||||||
|
|
||||||
public class PictureRenderer {
|
public class PictureRenderer {
|
||||||
private boolean isSafeUrl;
|
private boolean isSafeUrl;
|
||||||
@@ -150,9 +148,9 @@ public class PictureRenderer {
|
|||||||
int l = PictureSignConfig.fullBrightPicture ? 15728880 : light;
|
int l = PictureSignConfig.fullBrightPicture ? 15728880 : light;
|
||||||
if (PlatformFunctions.isModLoaded("iris") && IrisCompat.isShaderPackInUse())
|
if (PlatformFunctions.isModLoaded("iris") && IrisCompat.isShaderPackInUse())
|
||||||
RenderSystem.setShader(PictureSignConfig.pictureShader.program);
|
RenderSystem.setShader(PictureSignConfig.pictureShader.program);
|
||||||
else RenderSystem.setShader(GameRenderer::getPositionColorTexLightmapProgram);
|
else RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR_TEX_LIGHTMAP);
|
||||||
|
|
||||||
Identifier texture = getMissingTexture();
|
Identifier texture = PictureSignConfig.missingImageMode.missingTextureId;
|
||||||
if (errorMessage == null) {
|
if (errorMessage == null) {
|
||||||
if (type == PICTURE) {
|
if (type == PICTURE) {
|
||||||
assert data != null;
|
assert data != null;
|
||||||
@@ -223,14 +221,6 @@ public class PictureRenderer {
|
|||||||
textRenderer.draw(text, 1, wrappedY + 1, 0x555555, false, matrix, vertices, TextRenderer.TextLayerType.POLYGON_OFFSET, 0, 15728880);
|
textRenderer.draw(text, 1, wrappedY + 1, 0x555555, false, matrix, vertices, TextRenderer.TextLayerType.POLYGON_OFFSET, 0, 15728880);
|
||||||
matrix.translate(0, 0, -0.025f);
|
matrix.translate(0, 0, -0.025f);
|
||||||
}
|
}
|
||||||
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) {
|
public void checkJsonUrlSafety(String jsonUrl) {
|
||||||
isSafeJsonUrl = false;
|
isSafeJsonUrl = false;
|
||||||
PictureSignConfig.safeJsonProviders.forEach(safe -> {
|
PictureSignConfig.safeJsonProviders.forEach(safe -> {
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ import net.minecraft.client.gui.widget.ClickableWidget;
|
|||||||
import net.minecraft.client.gui.widget.SliderWidget;
|
import net.minecraft.client.gui.widget.SliderWidget;
|
||||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||||
import net.minecraft.client.gui.widget.TextIconButtonWidget;
|
import net.minecraft.client.gui.widget.TextIconButtonWidget;
|
||||||
import net.minecraft.client.render.DiffuseLighting;
|
import net.minecraft.client.model.Model;
|
||||||
import net.minecraft.client.render.OverlayTexture;
|
import net.minecraft.client.render.*;
|
||||||
import net.minecraft.client.render.TexturedRenderLayers;
|
import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer;
|
||||||
import net.minecraft.client.render.VertexConsumer;
|
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
|
||||||
import net.minecraft.client.render.block.entity.SignBlockEntityRenderer;
|
import net.minecraft.client.render.block.entity.SignBlockEntityRenderer;
|
||||||
import net.minecraft.client.util.SpriteIdentifier;
|
import net.minecraft.client.util.SpriteIdentifier;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
@@ -51,7 +49,7 @@ public class PictureSignHelperScreen extends Screen {
|
|||||||
private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard");
|
private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard");
|
||||||
private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin");
|
private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin");
|
||||||
private final SignBlockEntity sign;
|
private final SignBlockEntity sign;
|
||||||
private SignBlockEntityRenderer.SignModel model;
|
private Model model;
|
||||||
protected String[] text;
|
protected String[] text;
|
||||||
private final boolean front;
|
private final boolean front;
|
||||||
private final boolean isHanging;
|
private final boolean isHanging;
|
||||||
@@ -166,7 +164,7 @@ public class PictureSignHelperScreen extends Screen {
|
|||||||
pictureWidgets.add(posYWidget);
|
pictureWidgets.add(posYWidget);
|
||||||
pictureWidgets.add(posZWidget);
|
pictureWidgets.add(posZWidget);
|
||||||
if (text[2].matches("(.*\\d:.*\\d:.*\\d)")) addRotationWidgets();
|
if (text[2].matches("(.*\\d:.*\\d:.*\\d)")) addRotationWidgets();
|
||||||
this.model = SignBlockEntityRenderer.createSignModel(this.client.getEntityModelLoader(), AbstractSignBlock.getWoodType(sign.getCachedState().getBlock()));
|
this.model = SignBlockEntityRenderer.createSignModel(this.client.getLoadedEntityModels(), this.signType, !isHanging);
|
||||||
}
|
}
|
||||||
public void applyPosition(String position, int index) {
|
public void applyPosition(String position, int index) {
|
||||||
String[] dimensions = new String[5];
|
String[] dimensions = new String[5];
|
||||||
@@ -338,7 +336,7 @@ public class PictureSignHelperScreen extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float n = (float)(-this.client.textRenderer.getWidth(string) / 2);
|
float n = (float)(-this.client.textRenderer.getWidth(string) / 2);
|
||||||
this.client.textRenderer.draw(string, n, (float)(m * 10 - this.text.length * 5), i, false, matrix4f, immediate, TextRenderer.TextLayerType.NORMAL, 0, 15728880, false);
|
this.client.textRenderer.draw(Text.of(string), n, (float)(m * 10 - this.text.length * 5), i, false, matrix4f, immediate, TextRenderer.TextLayerType.NORMAL, 0, 15728880, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,11 +371,9 @@ public class PictureSignHelperScreen extends Screen {
|
|||||||
matrices.scale(0.6666667F, -0.6666667F, -0.6666667F);
|
matrices.scale(0.6666667F, -0.6666667F, -0.6666667F);
|
||||||
|
|
||||||
SpriteIdentifier spriteIdentifier = TexturedRenderLayers.getSignTextureId(AbstractSignBlock.getWoodType(state.getBlock()));
|
SpriteIdentifier spriteIdentifier = TexturedRenderLayers.getSignTextureId(AbstractSignBlock.getWoodType(state.getBlock()));
|
||||||
SignBlockEntityRenderer.SignModel var10002 = this.model;
|
Objects.requireNonNull(model);
|
||||||
Objects.requireNonNull(var10002);
|
VertexConsumer vertexConsumer = spriteIdentifier.getVertexConsumer(immediate, model::getLayer);
|
||||||
VertexConsumer vertexConsumer = spriteIdentifier.getVertexConsumer(immediate, var10002::getLayer);
|
this.model.render(matrices, vertexConsumer, 15728880, OverlayTexture.DEFAULT_UV);
|
||||||
this.model.stick.visible = bl;
|
|
||||||
this.model.root.render(matrices, vertexConsumer, 15728880, OverlayTexture.DEFAULT_UV);
|
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
matrices.translate(0.0, 0.3333333432674408, 0.046666666865348816);
|
matrices.translate(0.0, 0.3333333432674408, 0.046666666865348816);
|
||||||
matrices.scale(0.010416667F, -0.010416667F, 0.010416667F);
|
matrices.scale(0.010416667F, -0.010416667F, 0.010416667F);
|
||||||
@@ -385,7 +381,7 @@ public class PictureSignHelperScreen extends Screen {
|
|||||||
else {
|
else {
|
||||||
MatrixStack matrices = context.getMatrices();
|
MatrixStack matrices = context.getMatrices();
|
||||||
matrices.scale(4.5F, 4.5F, 1.0F);
|
matrices.scale(4.5F, 4.5F, 1.0F);
|
||||||
context.drawTexture(Identifier.ofVanilla("textures/gui/hanging_signs/" + this.signType.name() + ".png"), -8, -8, 0.0F, 0.0F, 16, 16, 16, 16);
|
context.drawTexture(RenderLayer::getGuiTextured, Identifier.ofVanilla("textures/gui/hanging_signs/" + this.signType.name() + ".png"), -8, -8, 0.0F, 0.0F, 16, 16, 16, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package eu.midnightdust.picturesign.util;
|
|||||||
|
|
||||||
import eu.midnightdust.picturesign.PictureSignClient;
|
import eu.midnightdust.picturesign.PictureSignClient;
|
||||||
import eu.midnightdust.picturesign.config.PictureSignConfig;
|
import eu.midnightdust.picturesign.config.PictureSignConfig;
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.texture.NativeImage;
|
import net.minecraft.client.texture.NativeImage;
|
||||||
import net.minecraft.client.texture.NativeImageBackedTexture;
|
import net.minecraft.client.texture.NativeImageBackedTexture;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
@@ -10,11 +9,12 @@ import net.minecraft.util.Identifier;
|
|||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.URL;
|
import java.net.URI;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID;
|
import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID;
|
||||||
|
import static eu.midnightdust.picturesign.PictureSignClient.client;
|
||||||
import static java.util.concurrent.Executors.newFixedThreadPool;
|
import static java.util.concurrent.Executors.newFixedThreadPool;
|
||||||
|
|
||||||
public class PictureDownloader {
|
public class PictureDownloader {
|
||||||
@@ -71,8 +71,8 @@ public class PictureDownloader {
|
|||||||
|
|
||||||
service.submit(() -> {
|
service.submit(() -> {
|
||||||
try {
|
try {
|
||||||
BufferedInputStream in = new BufferedInputStream(new URL(url).openStream());
|
BufferedInputStream in = new BufferedInputStream(URI.create(url).toURL().openStream());
|
||||||
File file = File.createTempFile("."+MOD_ID, "temp");
|
File file = File.createTempFile(".%s".formatted(MOD_ID), "temp");
|
||||||
file.deleteOnExit();
|
file.deleteOnExit();
|
||||||
|
|
||||||
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
|
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
|
||||||
@@ -93,7 +93,7 @@ public class PictureDownloader {
|
|||||||
data.identifier = texture;
|
data.identifier = texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished downloading picture: " + url);
|
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished downloading picture: {}", url);
|
||||||
|
|
||||||
} catch (IOException error) {
|
} catch (IOException error) {
|
||||||
PictureSignClient.LOGGER.error("Error downloading picture: " + error);
|
PictureSignClient.LOGGER.error("Error downloading picture: " + error);
|
||||||
@@ -102,7 +102,7 @@ public class PictureDownloader {
|
|||||||
}
|
}
|
||||||
private void loadLocalPicture(String url) {
|
private void loadLocalPicture(String url) {
|
||||||
String realPath = url.replace("file:", "");
|
String realPath = url.replace("file:", "");
|
||||||
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading local picture: " + url);
|
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading local picture: {}", url);
|
||||||
|
|
||||||
this.cache.put(url, new PictureData(url));
|
this.cache.put(url, new PictureData(url));
|
||||||
service.submit(() -> {
|
service.submit(() -> {
|
||||||
@@ -115,11 +115,11 @@ public class PictureDownloader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException error) {
|
} catch (IOException error) {
|
||||||
PictureSignClient.LOGGER.error("Error loading local picture: " + error);
|
PictureSignClient.LOGGER.error("Error loading local picture: {}", String.valueOf(error));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading local picture: " + url);
|
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading local picture: {}", url);
|
||||||
}
|
}
|
||||||
private void loadResourcePackTexture(String url) {
|
private void loadResourcePackTexture(String url) {
|
||||||
String realIdentifierPath = url.replace("rp:", "");
|
String realIdentifierPath = url.replace("rp:", "");
|
||||||
@@ -128,7 +128,7 @@ public class PictureDownloader {
|
|||||||
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading resource pack picture: " + url);
|
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading resource pack picture: " + url);
|
||||||
Identifier id = Identifier.tryParse(realIdentifierPath);
|
Identifier id = Identifier.tryParse(realIdentifierPath);
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
PictureSignClient.LOGGER.error("Unable to locate resource texture: " + url);
|
PictureSignClient.LOGGER.error("Unable to locate resource texture: {}", url);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ public class PictureDownloader {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading resource pack picture: " + url);
|
if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading resource pack picture: {}", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Identifier convert2png(File file) throws IOException {
|
private static Identifier convert2png(File file) throws IOException {
|
||||||
@@ -154,8 +154,9 @@ public class PictureDownloader {
|
|||||||
NativeImage nativeImage = NativeImage.read(inputStream);
|
NativeImage nativeImage = NativeImage.read(inputStream);
|
||||||
NativeImageBackedTexture nativeImageBackedTexture = new NativeImageBackedTexture(nativeImage);
|
NativeImageBackedTexture nativeImageBackedTexture = new NativeImageBackedTexture(nativeImage);
|
||||||
|
|
||||||
return MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("picturesign/image",
|
Identifier textureId = PictureSignClient.id("picturesign/image_%s".formatted(file.hashCode()));
|
||||||
nativeImageBackedTexture);
|
client.getTextureManager().registerTexture(textureId, nativeImageBackedTexture);
|
||||||
|
return textureId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"picturesign.midnightconfig.signRenderDistance":"Schildsichtweite",
|
"picturesign.midnightconfig.signRenderDistance":"Schildsichtweite",
|
||||||
"picturesign.midnightconfig.safeMode":"Sicherer Modus",
|
"picturesign.midnightconfig.safeMode":"Sicherer Modus",
|
||||||
"picturesign.midnightconfig.safeMode.tooltip":"Lädt nur Bilder von vertrauten Seiten",
|
"picturesign.midnightconfig.safeMode.tooltip":"Lädt nur Bilder von vertrauten Seiten",
|
||||||
"picturesign.midnightconfig.ebeWarning":"§cWenn du die Mod 'Enhanced Block Entities' benutzt, stelle sicher, dass du alles in Relation zu Schildern in der EBE Config deaktiviert hast!",
|
"picturesign.midnightconfig.ebeWarning":"§cDu benutzt die Mod 'Enhanced Block Entities' – stelle sicher, dass du alles in Relation zu Schildern in der EBE Config deaktiviert hast!",
|
||||||
"picturesign.midnightconfig.safeProviders":"Sichere Bildanbieter",
|
"picturesign.midnightconfig.safeProviders":"Sichere Bildanbieter",
|
||||||
"picturesign.midnightconfig.safeGifProviders":"Sichere GIF-Anbieter",
|
"picturesign.midnightconfig.safeGifProviders":"Sichere GIF-Anbieter",
|
||||||
"picturesign.midnightconfig.safeMultimediaProviders":"Sichere Multimedia-Anbieter",
|
"picturesign.midnightconfig.safeMultimediaProviders":"Sichere Multimedia-Anbieter",
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
"key.picturesign.copy_sign": "Text eines Schildes kopieren",
|
"key.picturesign.copy_sign": "Text eines Schildes kopieren",
|
||||||
"key.picturesign.edit_sign":"Schild bearbeiten",
|
"key.picturesign.edit_sign":"Schild bearbeiten",
|
||||||
|
|
||||||
"picturesign.midnightconfig.category.1general": "Generell",
|
"picturesign.midnightconfig.category.general": "Generell",
|
||||||
"picturesign.midnightconfig.category.advanced": "Fortgeschritten",
|
"picturesign.midnightconfig.category.advanced": "Fortgeschritten",
|
||||||
"picturesign.midnightconfig.fullBrightPicture": "Höchste Helligkeit",
|
"picturesign.midnightconfig.fullBrightPicture": "Höchste Helligkeit",
|
||||||
"picturesign.midnightconfig.fullBrightPicture.tooltip": "Sorgt dafür, dass Bilder immer vollkommen beleuchtet dargestellt werden",
|
"picturesign.midnightconfig.fullBrightPicture.tooltip": "Sorgt dafür, dass Bilder immer vollkommen beleuchtet dargestellt werden",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"picturesign.midnightconfig.title":"PictureSign Config",
|
"picturesign.midnightconfig.title":"PictureSign Config",
|
||||||
"picturesign.midnightconfig.category.1general":"General",
|
"picturesign.midnightconfig.category.general":"General",
|
||||||
"picturesign.midnightconfig.category.advanced":"Advanced",
|
"picturesign.midnightconfig.category.advanced":"Advanced",
|
||||||
|
|
||||||
"picturesign.midnightconfig.enabled":"Enable Pictures",
|
"picturesign.midnightconfig.enabled":"Enable Pictures",
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"picturesign.midnightconfig.signRenderDistance":"Sign render distance",
|
"picturesign.midnightconfig.signRenderDistance":"Sign render distance",
|
||||||
"picturesign.midnightconfig.safeMode":"Safe mode",
|
"picturesign.midnightconfig.safeMode":"Safe mode",
|
||||||
"picturesign.midnightconfig.safeMode.tooltip":"Only load images from trusted providers",
|
"picturesign.midnightconfig.safeMode.tooltip":"Only load images from trusted providers",
|
||||||
"picturesign.midnightconfig.ebeWarning":"§cIf you are using the mod 'Enhanced Block Entities' make sure to disable anything sign-related in it's config!",
|
"picturesign.midnightconfig.ebeWarning":"§cYou are using the mod 'Enhanced Block Entities' – make sure to disable anything sign-related in it's config!",
|
||||||
"picturesign.midnightconfig.safeProviders":"Safe Image Providers",
|
"picturesign.midnightconfig.safeProviders":"Safe Image Providers",
|
||||||
"picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers",
|
"picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers",
|
||||||
"picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers",
|
"picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"client": [
|
"client": [
|
||||||
"MixinSignBlockEntityRenderer",
|
"MixinSignBlockEntityRenderer",
|
||||||
"MixinHangingSignBlockEntityRenderer",
|
"MixinAbstractSignBlockEntityRenderer",
|
||||||
"MixinSignEditScreen",
|
"MixinSignEditScreen",
|
||||||
"MixinSignBlockEntity"
|
"MixinSignBlockEntity"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
org.gradle.jvmargs=-Xmx2048M
|
org.gradle.jvmargs=-Xmx2048M
|
||||||
|
|
||||||
minecraft_version=1.21
|
minecraft_version=1.21.4
|
||||||
yarn_mappings=1.21+build.2
|
yarn_mappings=1.21.4+build.1
|
||||||
enabled_platforms=fabric,neoforge
|
enabled_platforms=fabric,neoforge
|
||||||
|
|
||||||
archives_base_name=picturesign
|
archives_base_name=picturesign
|
||||||
mod_version=2.0.1
|
mod_version=2.1.0
|
||||||
maven_group=eu.midnightdust
|
maven_group=eu.midnightdust
|
||||||
release_type=release
|
release_type=release
|
||||||
curseforge_id=533897
|
curseforge_id=533897
|
||||||
modrinth_id=9WP2dmkk
|
modrinth_id=9WP2dmkk
|
||||||
|
|
||||||
midnightlib_version=1.6.3
|
midnightlib_version=1.7.2+1.21.4
|
||||||
watermedia_version=2.1.2
|
watermedia_version=2.1.24
|
||||||
|
|
||||||
iris_version=1.6.17+1.20.4
|
iris_version=1.6.17+1.20.4
|
||||||
# The latest Iris version causes the build to fail, but we don't need that anyway
|
# The latest Iris version causes the build to fail, but we don't need that anyway
|
||||||
|
|
||||||
fabric_loader_version=0.15.11
|
fabric_loader_version=0.16.9
|
||||||
fabric_api_version=0.100.1+1.21
|
fabric_api_version=0.111.0+1.21.4
|
||||||
|
|
||||||
neoforge_version=21.0.14-beta
|
neoforge_version=21.4.10-beta
|
||||||
yarn_mappings_patch_neoforge_version = 1.21+build.4
|
yarn_mappings_patch_neoforge_version = 1.21+build.4
|
||||||
|
|
||||||
quilt_loader_version=0.19.0-beta.18
|
quilt_loader_version=0.19.0-beta.18
|
||||||
|
|||||||
Reference in New Issue
Block a user