aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/craftgui/resource
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/craftgui/resource')
-rw-r--r--src/Java/binnie/craftgui/resource/IStyleSheet.java6
-rw-r--r--src/Java/binnie/craftgui/resource/StyleSheet.java18
-rw-r--r--src/Java/binnie/craftgui/resource/StyleSheetManager.java28
-rw-r--r--src/Java/binnie/craftgui/resource/Texture.java128
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java155
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/CraftGUITexture.java18
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java33
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/PaddedTexture.java21
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java25
-rw-r--r--src/Java/binnie/craftgui/resource/minecraft/StandardTexture.java36
10 files changed, 468 insertions, 0 deletions
diff --git a/src/Java/binnie/craftgui/resource/IStyleSheet.java b/src/Java/binnie/craftgui/resource/IStyleSheet.java
new file mode 100644
index 0000000000..1ce8e7da2c
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/IStyleSheet.java
@@ -0,0 +1,6 @@
+package binnie.craftgui.resource;
+
+public abstract interface IStyleSheet
+{
+ public abstract Texture getTexture(Object paramObject);
+}
diff --git a/src/Java/binnie/craftgui/resource/StyleSheet.java b/src/Java/binnie/craftgui/resource/StyleSheet.java
new file mode 100644
index 0000000000..8685abd5be
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/StyleSheet.java
@@ -0,0 +1,18 @@
+package binnie.craftgui.resource;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class StyleSheet
+ implements IStyleSheet
+{
+ protected Map<Object, Texture> textures = new HashMap();
+
+ public Texture getTexture(Object key)
+ {
+ if (!this.textures.containsKey(key)) {
+ return StyleSheetManager.getTexture(key);
+ }
+ return (Texture)this.textures.get(key);
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/StyleSheetManager.java b/src/Java/binnie/craftgui/resource/StyleSheetManager.java
new file mode 100644
index 0000000000..b1bbd50272
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/StyleSheetManager.java
@@ -0,0 +1,28 @@
+package binnie.craftgui.resource;
+
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.resource.minecraft.CraftGUIResourceManager;
+
+public class StyleSheetManager
+{
+ static IStyleSheet defaultSS = new DefaultStyleSheet(null);
+
+ public static Texture getTexture(Object key)
+ {
+ return defaultSS.getTexture(key);
+ }
+
+ private static class DefaultStyleSheet
+ implements IStyleSheet
+ {
+ public Texture getTexture(Object key)
+ {
+ return CraftGUI.ResourceManager.getTexture(key.toString());
+ }
+ }
+
+ public static IStyleSheet getDefault()
+ {
+ return defaultSS;
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/Texture.java b/src/Java/binnie/craftgui/resource/Texture.java
new file mode 100644
index 0000000000..249be8f257
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/Texture.java
@@ -0,0 +1,128 @@
+package binnie.craftgui.resource;
+
+import binnie.core.resource.BinnieResource;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IBorder;
+import binnie.craftgui.core.geometry.Position;
+
+public class Texture
+{
+ public static final Texture NULL = null;
+ IArea area;
+ IBorder padding = IBorder.ZERO;
+ IBorder border = IBorder.ZERO;
+ BinnieResource filename;
+
+ public Texture(IArea area, BinnieResource filename)
+ {
+ this(area, IBorder.ZERO, IBorder.ZERO, filename);
+ }
+
+ public Texture(IArea area, IBorder padding, BinnieResource filename)
+ {
+ this(area, padding, IBorder.ZERO, filename);
+ }
+
+ public Texture(IArea area, IBorder padding, IBorder border, BinnieResource filename)
+ {
+ this.area = new IArea(area);
+ this.padding = new IBorder(padding);
+ this.border = new IBorder(border);
+ this.filename = filename;
+ }
+
+ public IArea getArea()
+ {
+ return this.area;
+ }
+
+ public IBorder getPadding()
+ {
+ return this.padding;
+ }
+
+ public IBorder getBorder()
+ {
+ return this.border;
+ }
+
+ public BinnieResource getFilename()
+ {
+ return this.filename;
+ }
+
+ public IBorder getTotalPadding()
+ {
+ return this.padding.add(this.border);
+ }
+
+ public float w()
+ {
+ return getArea().w();
+ }
+
+ public float h()
+ {
+ return getArea().h();
+ }
+
+ public float u()
+ {
+ return getArea().x();
+ }
+
+ public float v()
+ {
+ return getArea().y();
+ }
+
+ public Texture crop(Position anchor, float dist)
+ {
+ return crop(new IBorder(anchor.opposite(), dist));
+ }
+
+ public Texture crop(IBorder crop)
+ {
+ Texture copy = new Texture(this.area, this.padding, this.border, this.filename);
+ if (crop.b() > 0.0F)
+ {
+ copy.border.b(0.0F);
+ copy.padding.b(copy.padding.b() - Math.min(crop.b(), copy.padding.b()));
+ copy.area.h(copy.area.h() - crop.b());
+ }
+ if (crop.t() > 0.0F)
+ {
+ copy.border.t(0.0F);
+ copy.padding.t(copy.padding.t() - Math.min(crop.t(), copy.padding.t()));
+ copy.area.h(copy.area.h() - crop.t());
+ copy.area.y(copy.area.y() + crop.t());
+ }
+ if (crop.r() > 0.0F)
+ {
+ copy.border.r(0.0F);
+ copy.padding.r(copy.padding.r() - Math.min(crop.r(), copy.padding.r()));
+ copy.area.w(copy.area.w() - crop.r());
+ }
+ if (crop.l() > 0.0F)
+ {
+ copy.border.l(0.0F);
+ copy.padding.l(copy.padding.l() - Math.min(crop.l(), copy.padding.l()));
+ copy.area.w(copy.area.w() - crop.l());
+ copy.area.x(copy.area.x() + crop.l());
+ }
+ return copy;
+ }
+
+ public String toString()
+ {
+ String out = "Texture[";
+ out = out + this.area.toString();
+ if (!this.padding.isNonZero()) {
+ out = out + " padding:" + this.padding.toString();
+ }
+ if (!this.border.isNonZero()) {
+ out = out + " border:" + this.border.toString();
+ }
+ return out + "]";
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java b/src/Java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java
new file mode 100644
index 0000000000..42ff445f92
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/CraftGUIResourceManager.java
@@ -0,0 +1,155 @@
+package binnie.craftgui.resource.minecraft;
+
+import binnie.core.resource.IBinnieTexture;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IBorder;
+import binnie.craftgui.resource.Texture;
+import com.google.common.base.Charsets;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonParser;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import net.minecraft.client.resources.IResource;
+import net.minecraft.client.resources.IResourceManager;
+import net.minecraft.client.resources.IResourceManagerReloadListener;
+import net.minecraft.util.ResourceLocation;
+import org.apache.commons.io.IOUtils;
+
+@SideOnly(Side.CLIENT)
+public class CraftGUIResourceManager
+ implements IResourceManagerReloadListener
+{
+ private Map<String, ParsedTextureSheet> textureSheets = new HashMap();
+ private Map<String, Texture> textures = new HashMap();
+
+ public CraftGUIResourceManager()
+ {
+ binnie.craftgui.core.CraftGUI.ResourceManager = this;
+ }
+
+ public void onResourceManagerReload(IResourceManager manager)
+ {
+ this.textureSheets.clear();
+ try
+ {
+ IResource res = manager.getResource(new ResourceLocation("binniecore", "gui/stylesheet.json"));
+
+ JsonObject jsonobject = null;
+ BufferedReader bufferedreader = null;
+ try
+ {
+ bufferedreader = new BufferedReader(new InputStreamReader(res.getInputStream(), Charsets.UTF_8));
+ jsonobject = new JsonParser().parse(bufferedreader).getAsJsonObject();
+ for (JsonElement el : jsonobject.get("texture-sheets").getAsJsonArray()) {
+ if ((el instanceof JsonObject))
+ {
+ JsonObject sheet = (JsonObject)el;
+ String name = sheet.get("name").getAsString();
+ String modid = sheet.get("modid").getAsString();
+ String path = sheet.get("path").getAsString();
+ this.textureSheets.put(name, new ParsedTextureSheet(name, modid, path));
+ }
+ }
+ for (JsonElement el : jsonobject.get("textures").getAsJsonArray()) {
+ if ((el instanceof JsonObject))
+ {
+ JsonObject sheet = (JsonObject)el;
+ String name = sheet.get("name").getAsString();
+ IBinnieTexture textureSheet = getTextureSheet(sheet.get("sheet").getAsString());
+ IArea uv = getArea(sheet.get("uv").getAsString());
+ IBorder border = IBorder.ZERO;
+ IBorder padding = IBorder.ZERO;
+ if (sheet.has("border")) {
+ border = getBorder(sheet.get("border").getAsString());
+ }
+ if (sheet.has("padding")) {
+ padding = getBorder(sheet.get("padding").getAsString());
+ }
+ this.textures.put(name, new Texture(uv, padding, border, textureSheet.getTexture()));
+ }
+ }
+ }
+ catch (RuntimeException runtimeexception)
+ {
+ throw new JsonParseException("Failed to parse stylesheet for Binnie's Mods", runtimeexception);
+ }
+ finally
+ {
+ IOUtils.closeQuietly(bufferedreader);
+ }
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Failed to load default stylesheet for Binnie's Mods.", e);
+ }
+ }
+
+ public IArea getArea(String name)
+ {
+ String[] split = name.split(" ");
+ if ((split.length < 1) || (split.length > 4)) {
+ throw new RuntimeException("Parameter must have between one and four numbers");
+ }
+ List<Float> f = new ArrayList();
+ for (String string : split) {
+ f.add(Float.valueOf(Float.parseFloat(string)));
+ }
+ if (f.size() == 1) {
+ return new IArea(((Float)f.get(0)).floatValue());
+ }
+ if (f.size() == 2) {
+ return new IArea(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue());
+ }
+ if (f.size() == 3) {
+ return new IArea(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue(), ((Float)f.get(2)).floatValue());
+ }
+ return new IArea(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue(), ((Float)f.get(2)).floatValue(), ((Float)f.get(3)).floatValue());
+ }
+
+ public IBorder getBorder(String name)
+ {
+ String[] split = name.split(" ");
+ if ((split.length < 1) || (split.length > 4)) {
+ throw new RuntimeException("Parameter must have between one and four numbers");
+ }
+ List<Float> f = new ArrayList();
+ for (String string : split) {
+ f.add(Float.valueOf(Float.parseFloat(string)));
+ }
+ if (f.size() == 1) {
+ return new IBorder(((Float)f.get(0)).floatValue());
+ }
+ if (f.size() == 2) {
+ return new IBorder(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue());
+ }
+ if (f.size() == 3) {
+ return new IBorder(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue(), ((Float)f.get(2)).floatValue());
+ }
+ return new IBorder(((Float)f.get(0)).floatValue(), ((Float)f.get(1)).floatValue(), ((Float)f.get(2)).floatValue(), ((Float)f.get(3)).floatValue());
+ }
+
+ public IBinnieTexture getTextureSheet(String name)
+ {
+ if (!this.textureSheets.containsKey(name)) {
+ throw new RuntimeException("Missing GUI texture sheet for Binnie Mods: " + name);
+ }
+ return (IBinnieTexture)this.textureSheets.get(name);
+ }
+
+ public Texture getTexture(String name)
+ {
+ if (!this.textures.containsKey(name)) {
+ throw new RuntimeException("Missing GUI texture Binnie Mods: " + name);
+ }
+ return (Texture)this.textures.get(name);
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/CraftGUITexture.java b/src/Java/binnie/craftgui/resource/minecraft/CraftGUITexture.java
new file mode 100644
index 0000000000..cb1ca27bd5
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/CraftGUITexture.java
@@ -0,0 +1,18 @@
+package binnie.craftgui.resource.minecraft;
+
+public enum CraftGUITexture
+{
+ Window("window"), PanelGray("panel.gray"), PanelBlack("panel.black"), PanelTinted("panel.tinted"), ButtonDisabled("button.disabled"), Button("button"), ButtonHighlighted("button.highlighted"), Slot("slot"), SlotBorder("slot.border"), SlotOverlay("slot.overlay"), SlotCharge("slot.charge"), LiquidTank("liquidtank"), LiquidTankOverlay("liquidtank.overlay"), StateError("errorstate.error"), StateWarning("errorstate.warning"), StateNone("errorstate.none"), EnergyBarBack("energybar.back"), EnergyBarGlow("energybar.glow"), EnergyBarGlass("energybar.glass"), TabDisabled("tab.disabled"), Tab("tab"), TabHighlighted("tab.highlighted"), TabOutline("tab.outline"), TabSolid("tab.solid"), ScrollDisabled("scroll.disabled"), Scroll("scroll"), ScrollHighlighted("scroll.highlighted"), Outline("outline"), HelpButton("button.help"), InfoButton("button.info"), UserButton("button.user"), PowerButton("button.power"), HorizontalLiquidTank("horizontalliquidtank"), HorizontalLiquidTankOverlay("horizontalliquidtank.overlay"), SlideUp("slide.up"), SlideDown("slide.down"), SlideLeft("slide.left"), SlideRight("slide.right"), Checkbox("checkbox"), CheckboxHighlighted("checkbox.highlighted"), CheckboxChecked("checkbox.checked"), CheckboxCheckedHighlighted("checkbox.checked.highlighted");
+
+ String name;
+
+ private CraftGUITexture(String name)
+ {
+ this.name = name;
+ }
+
+ public String toString()
+ {
+ return this.name;
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java b/src/Java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java
new file mode 100644
index 0000000000..816a422749
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/CraftGUITextureSheet.java
@@ -0,0 +1,33 @@
+package binnie.craftgui.resource.minecraft;
+
+import binnie.core.BinnieCore;
+import binnie.core.proxy.BinnieProxy;
+import binnie.core.resource.BinnieResource;
+import binnie.core.resource.IBinnieTexture;
+import binnie.craftgui.core.CraftGUI;
+
+public enum CraftGUITextureSheet
+ implements IBinnieTexture
+{
+ Controls2("controls"), Panel2("panels"), Slots("slots");
+
+ String name;
+
+ private CraftGUITextureSheet(String name)
+ {
+ this.name = name;
+ }
+
+ public String toString()
+ {
+ return this.name;
+ }
+
+ public BinnieResource getTexture()
+ {
+ if (BinnieCore.proxy.isServer()) {
+ return null;
+ }
+ return CraftGUI.ResourceManager.getTextureSheet(this.name).getTexture();
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/PaddedTexture.java b/src/Java/binnie/craftgui/resource/minecraft/PaddedTexture.java
new file mode 100644
index 0000000000..a682d0b37d
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/PaddedTexture.java
@@ -0,0 +1,21 @@
+package binnie.craftgui.resource.minecraft;
+
+import binnie.core.resource.BinnieResource;
+import binnie.core.resource.IBinnieTexture;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IBorder;
+import binnie.craftgui.resource.Texture;
+
+public class PaddedTexture
+ extends Texture
+{
+ public PaddedTexture(int u, int v, int w, int h, int offset, IBinnieTexture textureFile, int leftPadding, int rightPadding, int topPadding, int bottomPadding)
+ {
+ this(u, v, w, h, offset, textureFile.getTexture(), leftPadding, rightPadding, topPadding, bottomPadding);
+ }
+
+ public PaddedTexture(int u, int v, int w, int h, int offset, BinnieResource textureFile, int leftPadding, int rightPadding, int topPadding, int bottomPadding)
+ {
+ super(new IArea(u, v, w, h), new IBorder(topPadding, rightPadding, bottomPadding, leftPadding), new IBorder(offset), textureFile);
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java b/src/Java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java
new file mode 100644
index 0000000000..4a10017b7c
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/ParsedTextureSheet.java
@@ -0,0 +1,25 @@
+package binnie.craftgui.resource.minecraft;
+
+import binnie.core.resource.BinnieResource;
+import binnie.core.resource.IBinnieTexture;
+import binnie.core.resource.ResourceType;
+
+class ParsedTextureSheet
+ implements IBinnieTexture
+{
+ private String name;
+ private String modid;
+ private String path;
+
+ public ParsedTextureSheet(String name, String modid, String path)
+ {
+ this.name = name;
+ this.modid = modid;
+ this.path = path;
+ }
+
+ public BinnieResource getTexture()
+ {
+ return new BinnieResource(this.modid, ResourceType.GUI, this.path);
+ }
+}
diff --git a/src/Java/binnie/craftgui/resource/minecraft/StandardTexture.java b/src/Java/binnie/craftgui/resource/minecraft/StandardTexture.java
new file mode 100644
index 0000000000..b98facb505
--- /dev/null
+++ b/src/Java/binnie/craftgui/resource/minecraft/StandardTexture.java
@@ -0,0 +1,36 @@
+package binnie.craftgui.resource.minecraft;
+
+import binnie.core.resource.BinnieResource;
+import binnie.core.resource.IBinnieTexture;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IBorder;
+import binnie.craftgui.resource.Texture;
+
+public class StandardTexture
+ extends Texture
+{
+ public StandardTexture(int u, int v, int w, int h, IBinnieTexture textureFile)
+ {
+ this(u, v, w, h, 0, textureFile.getTexture());
+ }
+
+ public StandardTexture(int u, int v, int w, int h, int offset, IBinnieTexture textureFile)
+ {
+ this(u, v, w, h, offset, textureFile.getTexture());
+ }
+
+ public StandardTexture(int u, int v, int w, int h, BinnieResource textureFile)
+ {
+ this(u, v, w, h, 0, textureFile);
+ }
+
+ public StandardTexture(int u, int v, int w, int h, int padding, BinnieResource textureFile)
+ {
+ super(new IArea(u, v, w, h), IBorder.ZERO, new IBorder(padding), textureFile);
+ }
+
+ public BinnieResource getTexture()
+ {
+ return getFilename();
+ }
+}