forked from Funwayguy/BetterQuesting
-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
359 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
src/main/java/betterquesting/api2/client/gui/misc/TextureSizeHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
86
src/main/java/betterquesting/api2/client/gui/misc/URIHandlers.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.