Skip to content

Commit

Permalink
embed images
Browse files Browse the repository at this point in the history
  • Loading branch information
Glease committed Jan 29, 2024
1 parent 09a60c0 commit caf22f8
Show file tree
Hide file tree
Showing 6 changed files with 359 additions and 38 deletions.
29 changes: 24 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//version: 1704751096
//version: 1706545953
/*
DO NOT CHANGE THIS FILE!
Also, you may replace this file at any time if there is an update available.
Expand Down Expand Up @@ -122,6 +122,7 @@ propertyDefaultIfUnset("modrinthProjectId", "")
propertyDefaultIfUnset("modrinthRelations", "")
propertyDefaultIfUnset("curseForgeProjectId", "")
propertyDefaultIfUnset("curseForgeRelations", "")
propertyDefaultIfUnset("versionPattern", "")
propertyDefaultIfUnset("minimizeShadowedDependencies", true)
propertyDefaultIfUnset("relocateShadowedDependencies", true)
// Deprecated properties (kept for backwards compat)
Expand Down Expand Up @@ -370,6 +371,7 @@ catch (Exception ignored) {
// Pulls version first from the VERSION env and then git tag
String identifiedVersion
String versionOverride = System.getenv("VERSION") ?: null
boolean checkVersion = false
try {
// Produce a version based on the tag, or for branches something like 0.2.2-configurable-maven-and-extras.38+43090270b6-dirty
if (versionOverride == null) {
Expand All @@ -388,6 +390,8 @@ try {
}
} else if (isDirty) {
identifiedVersion += "-${branchName}+${gitDetails.gitHash}-dirty"
} else {
checkVersion = true
}
} else {
identifiedVersion = versionOverride
Expand All @@ -409,6 +413,8 @@ ext {

if (identifiedVersion == versionOverride) {
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
} else if (checkVersion && versionPattern && !(identifiedVersion ==~ versionPattern)) {
throw new GradleException("Invalid version: '$identifiedVersion' does not match version pattern '$versionPattern'")
}

group = "com.github.GTNewHorizons"
Expand All @@ -428,18 +434,31 @@ minecraft {
for (f in replaceGradleTokenInFile.split(',')) {
tagReplacementFiles.add f
}
out.style(Style.Info).text('replaceGradleTokenInFile is deprecated! Consider using generateGradleTokenClass.').println()
}
if (gradleTokenModId) {
injectedTags.put gradleTokenModId, modId
if (replaceGradleTokenInFile) {
injectedTags.put gradleTokenModId, modId
} else {
out.style(Style.Failure).text('gradleTokenModId is deprecated! The field will no longer be generated.').println()
}
}
if (gradleTokenModName) {
injectedTags.put gradleTokenModName, modName
if (replaceGradleTokenInFile) {
injectedTags.put gradleTokenModName, modName
} else {
out.style(Style.Failure).text('gradleTokenModName is deprecated! The field will no longer be generated.').println()
}
}
if (gradleTokenVersion) {
injectedTags.put gradleTokenVersion, modVersion
}
if (gradleTokenGroupName) {
injectedTags.put gradleTokenGroupName, modGroup
if (replaceGradleTokenInFile) {
injectedTags.put gradleTokenGroupName, modGroup
} else {
out.style(Style.Failure).text('gradleTokenGroupName is deprecated! The field will no longer be generated.').println()
}
}
if (enableGenericInjection.toBoolean()) {
injectMissingGenerics.set(true)
Expand Down Expand Up @@ -632,7 +651,7 @@ repositories {

def mixinProviderGroup = "io.github.legacymoddingmc"
def mixinProviderModule = "unimixins"
def mixinProviderVersion = "0.1.13"
def mixinProviderVersion = "0.1.15"
def mixinProviderSpecNoClassifer = "${mixinProviderGroup}:${mixinProviderModule}:${mixinProviderVersion}"
def mixinProviderSpec = "${mixinProviderSpecNoClassifer}:dev"
ext.mixinProviderSpec = mixinProviderSpec
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package betterquesting.api2.client.gui.misc;

import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.IReloadableResourceManager;
import net.minecraft.client.resources.IResource;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.client.resources.IResourceManagerReloadListener;
import net.minecraft.util.ResourceLocation;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class TextureSizeHelper
{
private static final Map<ResourceLocation, GuiRectangle> dimensions = new HashMap<>();

static
{
//noinspection Convert2Lambda
((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new IResourceManagerReloadListener()
{
@Override
public void onResourceManagerReload(IResourceManager p_110549_1_)
{
dimensions.clear();
}
});
}

public static IGuiRect getDimension(ResourceLocation texture)
{
if(!dimensions.containsKey(texture))
{
try
{
dimensions.put(texture, loadDimension(texture));
} catch(Exception e)
{
// ignore
}
}
GuiRectangle dimension = dimensions.get(texture);
if(dimension == null)
{
return new GuiRectangle(0, 0, 1, 1); // will default to err texture, which is 1:1
}
return dimension;
}

private static GuiRectangle loadDimension(ResourceLocation texture) throws IOException
{
IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(texture);
try(
InputStream is = resource.getInputStream();
ImageInputStream iis = ImageIO.createImageInputStream(is);
)
{
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
if(!readers.hasNext())
return null;
ImageReader reader = readers.next();
reader.setInput(iis);
try
{
return new GuiRectangle(0, 0, reader.getWidth(0), reader.getHeight(0));
} finally
{
reader.dispose();
}
}
}

public static final class ResourceDimension
{
public final int height, width;

public ResourceDimension(int height, int width)
{
this.height = height;
this.width = width;
}
}
}
86 changes: 86 additions & 0 deletions src/main/java/betterquesting/api2/client/gui/misc/URIHandlers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package betterquesting.api2.client.gui.misc;

import betterquesting.core.BetterQuesting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiConfirmOpenLink;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraftforge.event.terraingen.OreGenEvent.Pre;

import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;

public class URIHandlers
{
private URIHandlers()
{
}

private static final Map<String, Predicate<URI>> handlers = new ConcurrentHashMap<>();

static
{
register("http", new HTTPHandler());
register("https", new HTTPHandler());
}

public static synchronized void register(String scheme, Predicate<URI> handler)
{
if(handlers.containsKey(scheme))
throw new IllegalArgumentException("duplicate handler");
handlers.put(scheme, handler);
}

public static Predicate<URI> get(String scheme)
{
return handlers.get(scheme);
}

private static class HTTPHandler implements Predicate<URI>
{

@Override
public boolean test(URI uri)
{
if(Minecraft.getMinecraft().gameSettings.chatLinksPrompt)
{
GuiScreen oldScreen = Minecraft.getMinecraft().currentScreen;
// must be anonymous class. lambda doesn't work with reobf
//noinspection Convert2Lambda
Minecraft.getMinecraft().displayGuiScreen(new GuiConfirmOpenLink(new GuiYesNoCallback()
{
@Override
public void confirmClicked(boolean result, int id)
{
if(result)
{
openURL(uri);
}

Minecraft.getMinecraft().displayGuiScreen(oldScreen);
}
}, uri.toString(), 0, false));
} else
{
openURL(uri);
}
return true;
}

private static void openURL(URI p_146407_1_)
{
try
{
Class<?> oclass = Class.forName("java.awt.Desktop");
Object object = oclass.getMethod("getDesktop").invoke(null);
oclass.getMethod("browse", URI.class).invoke(object, p_146407_1_);
} catch(Throwable throwable)
{
BetterQuesting.logger.error("Couldn't open link", throwable);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import betterquesting.api2.client.gui.misc.GuiAlign;
import betterquesting.api2.client.gui.misc.GuiTransform;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.misc.URIHandlers;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.client.gui.resources.colors.GuiColorStatic;
import betterquesting.api2.client.gui.resources.colors.IGuiColor;
Expand All @@ -24,6 +25,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -295,36 +297,15 @@ public boolean onMouseClick(int mx, int my, int click)
} catch(URISyntaxException ex) {
return false;
}
if (!supportedUrlProtocol.contains(uri.getScheme()))
return false;
if (Minecraft.getMinecraft().gameSettings.chatLinksPrompt) {
// must be anonymous class. lambda doesn't work with reobf
GuiScreen oldScreen = Minecraft.getMinecraft().currentScreen;
//noinspection Convert2Lambda
Minecraft.getMinecraft().displayGuiScreen(new GuiConfirmOpenLink(new GuiYesNoCallback()
{
@Override
public void confirmClicked(boolean result, int id)
{
if (result)
{
openURL(uri);
}

Minecraft.getMinecraft().displayGuiScreen(oldScreen);
}
}, hotZone.url, 0, false));
} else {
openURL(uri);
}

return true;
Predicate<URI> handler = URIHandlers.get(uri.getScheme());
if (handler == null) return false;
return handler.test(uri);
}
}
return false;
}

private void openURL(URI p_146407_1_)
private static void openURL(URI p_146407_1_)
{
try
{
Expand Down
Loading

0 comments on commit caf22f8

Please sign in to comment.