diff options
Diffstat (limited to 'src/Java/binnie/craftgui/resource')
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(); + } +} |