├── .gitignore ├── LICENSE.txt ├── README.md ├── res ├── exeicon.ico ├── icon.png └── s.png └── src └── main ├── java ├── META-INF │ └── MANIFEST.MF └── com │ └── miningmark48 │ └── jsongen │ ├── Main.java │ ├── generate │ ├── GenerateItem.java │ ├── GenerateModInfo.java │ ├── GenerateRecipes.java │ └── block │ │ ├── GenerateBlock.java │ │ ├── GenerateBlockFence.java │ │ ├── GenerateBlockOriented.java │ │ ├── GenerateBlockPressurePlate.java │ │ └── GenerateBlockSlab.java │ ├── javafx │ └── controllers │ │ ├── AdvancedBlockController.java │ │ ├── BlockController.java │ │ ├── ItemController.java │ │ ├── MainController.java │ │ ├── ModInfoController.java │ │ └── blocks_advanced │ │ ├── FenceController.java │ │ ├── OrientedController.java │ │ ├── PressurePlateController.java │ │ └── SlabController.java │ ├── reference │ ├── FXMLFiles.java │ └── Reference.java │ ├── util │ ├── MyClassLoader.java │ └── VersionCheck.java │ └── versioninfo.json └── resources ├── bootstrap2.css └── fxml ├── blocks.fxml ├── blocks_advanced.fxml ├── blocks_advanced ├── fence.fxml ├── oriented.fxml ├── pressure_plate.fxml └── slab.fxml ├── items.fxml ├── main.fxml └── modinfo.fxml /.gitignore: -------------------------------------------------------------------------------- 1 | #ant stuff 2 | /bin/ 3 | /download/ 4 | #Remove OS generated garbage 5 | */.DS_Store 6 | .DS_Store 7 | .DS_Store? 8 | .Spotlight-V100 9 | .Trashes 10 | Icon? 11 | ehthumbs.db 12 | Thumbs.db 13 | #gradle stuff 14 | /.gradle 15 | /build/ 16 | /run*/ 17 | /ui/ 18 | gradle-app.setting 19 | #IDEA files from Gradle 20 | .idea/ 21 | /*.iml 22 | /*.ipr 23 | /*.iws 24 | #Vim backups 25 | *~ 26 | #manual version override 27 | version.properties 28 | #eclipse stuffs 29 | /.classpath 30 | /.project 31 | /.settings/ 32 | /eclipse/ 33 | /debug/ 34 | *.lock 35 | /.metadata/ 36 | /config/ 37 | /logs/ 38 | options.txt 39 | /saves/ 40 | /out 41 | *.log 42 | *.mca 43 | /export 44 | *.ifp 45 | /PACK 46 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 MiningMark48 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Minecraft JSON Generator 2 | 3 | Generates the Minecraft JSON files for items and blocks (and now mcmod.info) in Minecraft version 1.9.4+. 4 | 5 | Download available [here](https://github.com/MiningMark48/Minecraft-JSON-Generator/releases). 6 | 7 | More information can be found [here](http://miningmark48.xyz/projects/mcjsongen/) on the website. 8 | 9 | ![Screenshot1](http://miningmark48.xyz/img/projects/mcjsongen/screenshot1.png "Main window.") 10 | -------------------------------------------------------------------------------- /res/exeicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MiningMark48/Minecraft-JSON-Generator/9ba3101ed471a9ea66c142ef64fe13fa8669315a/res/exeicon.ico -------------------------------------------------------------------------------- /res/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MiningMark48/Minecraft-JSON-Generator/9ba3101ed471a9ea66c142ef64fe13fa8669315a/res/icon.png -------------------------------------------------------------------------------- /res/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MiningMark48/Minecraft-JSON-Generator/9ba3101ed471a9ea66c142ef64fe13fa8669315a/res/s.png -------------------------------------------------------------------------------- /src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.miningmark48.jsongen.Main 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/Main.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen; 2 | 3 | import com.miningmark48.jsongen.reference.FXMLFiles; 4 | import com.miningmark48.jsongen.reference.Reference; 5 | import com.miningmark48.jsongen.util.MyClassLoader; 6 | import javafx.application.Application; 7 | import javafx.fxml.FXMLLoader; 8 | import javafx.stage.Stage; 9 | 10 | public class Main extends Application { 11 | 12 | public static Main INSTANCE = new Main(); 13 | public static ClassLoader cachingClassLoader = new MyClassLoader(FXMLLoader.getDefaultClassLoader()); 14 | public static FXMLLoader LOADER_INSTANCE = new FXMLLoader(); 15 | 16 | public static Stage mainStage; 17 | 18 | public static void main(String[] args) { 19 | launch(args); 20 | } 21 | 22 | @Override 23 | public void start(Stage stage) throws Exception { 24 | LOADER_INSTANCE.setClassLoader(cachingClassLoader); 25 | FXMLFiles.initFXML(); 26 | Reference.init(); 27 | 28 | stage = Reference.getDefaultStage(); 29 | stage.show(); 30 | 31 | mainStage = stage; 32 | } 33 | 34 | public static Stage getMainStage() { 35 | return mainStage; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/GenerateItem.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateItem { 10 | 11 | public static void genItem(String modId, String itemName, String textureName, String path){ 12 | 13 | File fileDir = new File(path + "\\models\\item\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + itemName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("parent").value("item/generated"); 27 | jw.name("textures"); 28 | jw.beginObject(); 29 | jw.name("layer0").value(modId + ":items/" + textureName); 30 | jw.endObject(); 31 | jw.endObject(); 32 | 33 | writer.close(); 34 | 35 | } catch (UnsupportedEncodingException e) { 36 | e.printStackTrace(); 37 | } catch (FileNotFoundException e) { 38 | e.printStackTrace(); 39 | } catch (IOException e) { 40 | e.printStackTrace(); 41 | } 42 | } 43 | 44 | public static void genTool(String modId, String itemName, String textureName, String path){ 45 | 46 | File fileDir = new File(path + "\\models\\item\\"); 47 | if(!fileDir.exists()){ 48 | fileDir.mkdirs(); 49 | } 50 | 51 | try { 52 | 53 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + itemName + ".json"), "UTF-8"); 54 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 55 | JsonWriter jw = gson.newJsonWriter(writer); 56 | 57 | jw.beginObject(); 58 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 59 | jw.name("parent").value("item/handheld"); 60 | jw.name("textures"); 61 | jw.beginObject(); 62 | jw.name("layer0").value(modId + ":items/" + textureName); 63 | jw.endObject(); 64 | jw.endObject(); 65 | 66 | writer.close(); 67 | 68 | } catch (UnsupportedEncodingException e) { 69 | e.printStackTrace(); 70 | } catch (FileNotFoundException e) { 71 | e.printStackTrace(); 72 | } catch (IOException e) { 73 | e.printStackTrace(); 74 | } 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/GenerateModInfo.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateModInfo { 10 | 11 | public static void genModInfo(String modId, String modName, String version, String gameVersion, String author, String url, String description, String credits, String path){ 12 | 13 | File fileDir = new File(path); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\mcmod.info"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginArray(); 25 | jw.beginObject(); 26 | 27 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 28 | jw.name("modid").value(modId); 29 | jw.name("name").value(modName); 30 | jw.name("description").value(description); 31 | jw.name("version").value(version); 32 | jw.name("credits").value(credits); 33 | jw.name("logoFile").value(""); 34 | jw.name("mcversion").value(gameVersion); 35 | jw.name("url").value(url); 36 | jw.name("updateUrl").value(""); 37 | jw.name("authorList"); 38 | jw.beginArray(); 39 | jw.value(author); 40 | jw.endArray(); 41 | jw.name("parent").value(""); 42 | jw.name("screenshots"); 43 | jw.beginArray(); 44 | jw.endArray(); 45 | jw.name("dependencies"); 46 | jw.beginArray(); 47 | jw.value("mod_MinecraftForge"); 48 | jw.endArray(); 49 | 50 | jw.endObject(); 51 | jw.endArray(); 52 | 53 | writer.close(); 54 | 55 | } catch (UnsupportedEncodingException e) { 56 | e.printStackTrace(); 57 | } catch (FileNotFoundException e) { 58 | e.printStackTrace(); 59 | } catch (IOException e) { 60 | e.printStackTrace(); 61 | } 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/GenerateRecipes.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | import java.util.*; 9 | 10 | public class GenerateRecipes { 11 | 12 | public static void genShaped(String path, String name, String row1, String row2, String row3, String[] keys, String[] values, String result, int resultCount){ 13 | 14 | File fileDir = new File(path); 15 | if(!fileDir.exists()){ 16 | fileDir.mkdirs(); 17 | } 18 | 19 | try { 20 | 21 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\ " + name + ".json"), "UTF-8"); 22 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 23 | JsonWriter jw = gson.newJsonWriter(writer); 24 | 25 | jw.beginObject(); 26 | 27 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 28 | jw.name("type").value("crafting_shaped"); 29 | jw.name("pattern"); 30 | jw.beginArray(); 31 | jw.value(row1); 32 | jw.value(row2); 33 | jw.value(row3); 34 | jw.endArray(); 35 | jw.name("key"); 36 | jw.beginObject(); 37 | 38 | for (int i = 0; i <= keys.length - 1; i++){ 39 | if (!values[i].equalsIgnoreCase("")) { 40 | jw.name(keys[i]); 41 | jw.beginObject(); 42 | jw.name("item").value(values[i]); 43 | jw.endObject(); 44 | } 45 | } 46 | 47 | jw.endObject(); 48 | 49 | jw.name("result"); 50 | jw.beginObject(); 51 | 52 | jw.name("item").value(result); 53 | if (resultCount > 1) jw.name("count").value(resultCount); 54 | 55 | jw.endObject(); 56 | 57 | writer.close(); 58 | 59 | } catch (UnsupportedEncodingException e) { 60 | e.printStackTrace(); 61 | } catch (FileNotFoundException e) { 62 | e.printStackTrace(); 63 | } catch (IOException e) { 64 | e.printStackTrace(); 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/block/GenerateBlock.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate.block; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateBlock { 10 | 11 | public static void genBlock(String modId, String blockName, String textureName, String path){ 12 | 13 | File fileDir = new File(path + "\\blockstates\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("variants"); 27 | jw.beginObject(); 28 | jw.name("normal"); 29 | jw.beginObject(); 30 | jw.name("model").value(modId + ":" + blockName); 31 | jw.endObject(); 32 | jw.endObject(); 33 | jw.endObject(); 34 | 35 | writer.close(); 36 | 37 | } catch (UnsupportedEncodingException e) { 38 | e.printStackTrace(); 39 | } catch (FileNotFoundException e) { 40 | e.printStackTrace(); 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | } 44 | 45 | genBlockModel(modId, blockName, textureName, path); 46 | genBlockItemModel(modId, blockName, path); 47 | 48 | } 49 | 50 | private static void genBlockModel(String modId, String blockName, String textureName, String path){ 51 | 52 | File fileDir = new File(path + "\\models\\block\\"); 53 | if(!fileDir.exists()){ 54 | fileDir.mkdirs(); 55 | } 56 | 57 | try { 58 | 59 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 60 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 61 | JsonWriter jw = gson.newJsonWriter(writer); 62 | 63 | jw.beginObject(); 64 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 65 | jw.name("parent").value("block/cube_all"); 66 | jw.name("textures"); 67 | jw.beginObject(); 68 | jw.name("all").value(modId + ":blocks/" + textureName); 69 | jw.endObject(); 70 | jw.endObject(); 71 | 72 | writer.close(); 73 | 74 | } catch (UnsupportedEncodingException e) { 75 | e.printStackTrace(); 76 | } catch (FileNotFoundException e) { 77 | e.printStackTrace(); 78 | } catch (IOException e) { 79 | e.printStackTrace(); 80 | } 81 | 82 | } 83 | 84 | private static void genBlockItemModel(String modId, String blockName, String path){ 85 | 86 | File fileDir = new File(path + "\\models\\item\\"); 87 | if(!fileDir.exists()){ 88 | fileDir.mkdirs(); 89 | } 90 | 91 | try { 92 | 93 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 94 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 95 | JsonWriter jw = gson.newJsonWriter(writer); 96 | 97 | jw.beginObject(); 98 | 99 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 100 | jw.name("parent").value(modId + ":block/" + blockName); 101 | 102 | jw.endObject(); 103 | 104 | writer.close(); 105 | 106 | } catch (UnsupportedEncodingException e) { 107 | e.printStackTrace(); 108 | } catch (FileNotFoundException e) { 109 | e.printStackTrace(); 110 | } catch (IOException e) { 111 | e.printStackTrace(); 112 | } 113 | 114 | 115 | } 116 | 117 | 118 | } 119 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/block/GenerateBlockFence.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate.block; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateBlockFence { 10 | 11 | public static void genBlock(String modId, String blockName, String textureName, String path){ 12 | 13 | File fileDir = new File(path + "\\blockstates\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("multipart"); 27 | jw.beginArray(); 28 | jw.beginObject(); 29 | jw.name("apply"); 30 | jw.beginObject(); 31 | jw.name("model").value(modId + ":" + blockName + "_post"); 32 | jw.endObject(); 33 | jw.endObject(); 34 | jw.beginObject(); 35 | jw.name("when"); 36 | jw.beginObject(); 37 | jw.name("north").value("true"); 38 | jw.endObject(); 39 | jw.name("apply"); 40 | jw.beginObject(); 41 | jw.name("model").value(modId + ":" + blockName + "_side"); 42 | jw.name("uvlock").value(true); 43 | jw.endObject(); 44 | jw.endObject(); 45 | jw.beginObject(); 46 | jw.name("when"); 47 | jw.beginObject(); 48 | jw.name("east").value("true"); 49 | jw.endObject(); 50 | jw.name("apply"); 51 | jw.beginObject(); 52 | jw.name("model").value(modId + ":" + blockName + "_side"); 53 | jw.name("y").value(90); 54 | jw.name("uvlock").value(true); 55 | jw.endObject(); 56 | jw.endObject(); 57 | jw.beginObject(); 58 | jw.name("when"); 59 | jw.beginObject(); 60 | jw.name("south").value("true"); 61 | jw.endObject(); 62 | jw.name("apply"); 63 | jw.beginObject(); 64 | jw.name("model").value(modId + ":" + blockName + "_side"); 65 | jw.name("y").value(180); 66 | jw.name("uvlock").value(true); 67 | jw.endObject(); 68 | jw.endObject(); 69 | jw.beginObject(); 70 | jw.name("when"); 71 | jw.beginObject(); 72 | jw.name("west").value("true"); 73 | jw.endObject(); 74 | jw.name("apply"); 75 | jw.beginObject(); 76 | jw.name("model").value(modId + ":" + blockName + "_side"); 77 | jw.name("y").value(270); 78 | jw.name("uvlock").value(true); 79 | jw.endObject(); 80 | jw.endObject(); 81 | jw.endArray(); 82 | jw.endObject(); 83 | 84 | writer.close(); 85 | 86 | } catch (UnsupportedEncodingException e) { 87 | e.printStackTrace(); 88 | } catch (FileNotFoundException e) { 89 | e.printStackTrace(); 90 | } catch (IOException e) { 91 | e.printStackTrace(); 92 | } 93 | 94 | genBlockModel(modId, blockName, textureName, path); 95 | genBlockItemModel(modId, blockName, path); 96 | 97 | } 98 | 99 | private static void genBlockModel(String modId, String blockName, String textureName, String path){ 100 | 101 | File fileDir = new File(path + "\\models\\block\\"); 102 | if(!fileDir.exists()){ 103 | fileDir.mkdirs(); 104 | } 105 | 106 | try { 107 | 108 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_post" + ".json"), "UTF-8"); 109 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 110 | JsonWriter jw = gson.newJsonWriter(writer); 111 | 112 | jw.beginObject(); 113 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 114 | jw.name("parent").value("block/fence_post"); 115 | jw.name("textures"); 116 | jw.beginObject(); 117 | jw.name("texture").value(modId + ":blocks/" + textureName); 118 | jw.endObject(); 119 | jw.endObject(); 120 | 121 | writer.close(); 122 | 123 | Writer writer2 = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_side" + ".json"), "UTF-8"); 124 | JsonWriter jw2 = gson.newJsonWriter(writer2); 125 | 126 | jw2.beginObject(); 127 | jw2.name("_comment").value("Generated using MiningMark48's JSON Generator."); 128 | jw2.name("parent").value("block/fence_side"); 129 | jw2.name("textures"); 130 | jw2.beginObject(); 131 | jw2.name("texture").value(modId + ":blocks/" + textureName); 132 | jw2.endObject(); 133 | jw2.endObject(); 134 | 135 | writer2.close(); 136 | 137 | Writer writer3 = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_inventory" + ".json"), "UTF-8"); 138 | JsonWriter jw3 = gson.newJsonWriter(writer3); 139 | 140 | jw3.beginObject(); 141 | jw3.name("_comment").value("Generated using MiningMark48's JSON Generator."); 142 | jw3.name("parent").value("block/fence_inventory"); 143 | jw3.name("textures"); 144 | jw3.beginObject(); 145 | jw3.name("texture").value(modId + ":blocks/" + textureName); 146 | jw3.endObject(); 147 | jw3.endObject(); 148 | 149 | writer3.close(); 150 | 151 | } catch (UnsupportedEncodingException e) { 152 | e.printStackTrace(); 153 | } catch (FileNotFoundException e) { 154 | e.printStackTrace(); 155 | } catch (IOException e) { 156 | e.printStackTrace(); 157 | } 158 | 159 | } 160 | 161 | private static void genBlockItemModel(String modId, String blockName, String path){ 162 | 163 | File fileDir = new File(path + "\\models\\item\\"); 164 | if(!fileDir.exists()){ 165 | fileDir.mkdirs(); 166 | } 167 | 168 | try { 169 | 170 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 171 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 172 | JsonWriter jw = gson.newJsonWriter(writer); 173 | 174 | jw.beginObject(); 175 | 176 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 177 | jw.name("parent").value(modId + ":block/" + blockName + "_inventory"); 178 | 179 | jw.endObject(); 180 | 181 | writer.close(); 182 | 183 | } catch (UnsupportedEncodingException e) { 184 | e.printStackTrace(); 185 | } catch (FileNotFoundException e) { 186 | e.printStackTrace(); 187 | } catch (IOException e) { 188 | e.printStackTrace(); 189 | } 190 | 191 | 192 | } 193 | 194 | } 195 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/block/GenerateBlockOriented.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate.block; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateBlockOriented { 10 | 11 | public static void genBlock(String modId, String blockName, String topTextureName, String bottomTextureName, String frontTextureName, String sidesTextureName, String path){ 12 | 13 | File fileDir = new File(path + "\\blockstates\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("variants"); 27 | jw.beginObject(); 28 | 29 | jw.name("facing=north"); 30 | jw.beginObject(); 31 | jw.name("model").value(blockName); 32 | jw.endObject(); 33 | 34 | jw.name("facing=south"); 35 | jw.beginObject(); 36 | jw.name("model").value(blockName); 37 | jw.name("y").value(180); 38 | jw.endObject(); 39 | 40 | jw.name("facing=west"); 41 | jw.beginObject(); 42 | jw.name("model").value(blockName); 43 | jw.name("y").value(270); 44 | jw.endObject(); 45 | 46 | jw.name("facing=east"); 47 | jw.beginObject(); 48 | jw.name("model").value(blockName); 49 | jw.name("y").value(90); 50 | jw.endObject(); 51 | 52 | jw.endObject(); 53 | jw.endObject(); 54 | 55 | writer.close(); 56 | 57 | } catch (UnsupportedEncodingException e) { 58 | e.printStackTrace(); 59 | } catch (FileNotFoundException e) { 60 | e.printStackTrace(); 61 | } catch (IOException e) { 62 | e.printStackTrace(); 63 | } 64 | 65 | genBlockModel(modId, blockName, topTextureName, bottomTextureName, frontTextureName, sidesTextureName, path); 66 | genBlockItemModel(modId, blockName, path); 67 | 68 | } 69 | 70 | private static void genBlockModel(String modId, String blockName, String topTextureName, String bottomTextureName, String frontTextureName, String sidesTextureName, String path){ 71 | 72 | File fileDir = new File(path + "\\models\\block\\"); 73 | if(!fileDir.exists()){ 74 | fileDir.mkdirs(); 75 | } 76 | 77 | try { 78 | 79 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 80 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 81 | JsonWriter jw = gson.newJsonWriter(writer); 82 | 83 | jw.beginObject(); 84 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 85 | jw.name("parent").value("block/orientable"); 86 | jw.name("textures"); 87 | jw.beginObject(); 88 | jw.name("top").value(modId + ":blocks/" + topTextureName); 89 | jw.name("front").value(modId + ":blocks/" + frontTextureName); 90 | jw.name("side").value(modId + ":blocks/" + sidesTextureName); 91 | jw.endObject(); 92 | jw.endObject(); 93 | 94 | writer.close(); 95 | 96 | } catch (UnsupportedEncodingException e) { 97 | e.printStackTrace(); 98 | } catch (FileNotFoundException e) { 99 | e.printStackTrace(); 100 | } catch (IOException e) { 101 | e.printStackTrace(); 102 | } 103 | 104 | } 105 | 106 | private static void genBlockItemModel(String modId, String blockName, String path){ 107 | 108 | File fileDir = new File(path + "\\models\\item\\"); 109 | if(!fileDir.exists()){ 110 | fileDir.mkdirs(); 111 | } 112 | 113 | try { 114 | 115 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 116 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 117 | JsonWriter jw = gson.newJsonWriter(writer); 118 | 119 | jw.beginObject(); 120 | 121 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 122 | jw.name("parent").value(modId + ":block/" + blockName); 123 | 124 | jw.endObject(); 125 | 126 | writer.close(); 127 | 128 | } catch (UnsupportedEncodingException e) { 129 | e.printStackTrace(); 130 | } catch (FileNotFoundException e) { 131 | e.printStackTrace(); 132 | } catch (IOException e) { 133 | e.printStackTrace(); 134 | } 135 | 136 | 137 | } 138 | 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/block/GenerateBlockPressurePlate.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate.block; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateBlockPressurePlate { 10 | 11 | public static void genBlock(String modId, String blockName, String textureName, String path){ 12 | 13 | File fileDir = new File(path + "\\blockstates\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("variants"); 27 | jw.beginObject(); 28 | 29 | jw.name("powered=false"); 30 | jw.beginObject(); 31 | jw.name("model").value(modId + ":" + blockName + "_up"); 32 | jw.endObject(); 33 | 34 | jw.name("powered=true"); 35 | jw.beginObject(); 36 | jw.name("model").value(modId + ":" + blockName + "_down"); 37 | jw.endObject(); 38 | 39 | jw.endObject(); 40 | jw.endObject(); 41 | 42 | writer.close(); 43 | 44 | } catch (UnsupportedEncodingException e) { 45 | e.printStackTrace(); 46 | } catch (FileNotFoundException e) { 47 | e.printStackTrace(); 48 | } catch (IOException e) { 49 | e.printStackTrace(); 50 | } 51 | 52 | genBlockModel(modId, blockName, textureName, path); 53 | genBlockItemModel(modId, blockName, path); 54 | 55 | } 56 | 57 | private static void genBlockModel(String modId, String blockName, String textureName, String path){ 58 | 59 | File fileDir = new File(path + "\\models\\block\\"); 60 | if(!fileDir.exists()){ 61 | fileDir.mkdirs(); 62 | } 63 | 64 | try { 65 | 66 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_up" + ".json"), "UTF-8"); 67 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 68 | JsonWriter jw = gson.newJsonWriter(writer); 69 | 70 | jw.beginObject(); 71 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 72 | jw.name("parent").value("block/pressure_plate_up"); 73 | jw.name("textures"); 74 | jw.beginObject(); 75 | jw.name("texture").value(modId + ":blocks/" + textureName); 76 | jw.endObject(); 77 | jw.endObject(); 78 | 79 | writer.close(); 80 | 81 | Writer writer2 = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_down" + ".json"), "UTF-8"); 82 | JsonWriter jw2 = gson.newJsonWriter(writer2); 83 | 84 | jw2.beginObject(); 85 | jw2.name("_comment").value("Generated using MiningMark48's JSON Generator."); 86 | jw2.name("parent").value("block/pressure_plate_down"); 87 | jw2.name("textures"); 88 | jw2.beginObject(); 89 | jw2.name("texture").value(modId + ":blocks/" + textureName); 90 | jw2.endObject(); 91 | jw2.endObject(); 92 | 93 | writer2.close(); 94 | 95 | } catch (UnsupportedEncodingException e) { 96 | e.printStackTrace(); 97 | } catch (FileNotFoundException e) { 98 | e.printStackTrace(); 99 | } catch (IOException e) { 100 | e.printStackTrace(); 101 | } 102 | 103 | } 104 | 105 | private static void genBlockItemModel(String modId, String blockName, String path){ 106 | 107 | File fileDir = new File(path + "\\models\\item\\"); 108 | if(!fileDir.exists()){ 109 | fileDir.mkdirs(); 110 | } 111 | 112 | try { 113 | 114 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 115 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 116 | JsonWriter jw = gson.newJsonWriter(writer); 117 | 118 | jw.beginObject(); 119 | 120 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 121 | jw.name("parent").value(modId + ":block/" + blockName + "_up"); 122 | 123 | jw.endObject(); 124 | 125 | writer.close(); 126 | 127 | } catch (UnsupportedEncodingException e) { 128 | e.printStackTrace(); 129 | } catch (FileNotFoundException e) { 130 | e.printStackTrace(); 131 | } catch (IOException e) { 132 | e.printStackTrace(); 133 | } 134 | 135 | 136 | } 137 | 138 | } 139 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/generate/block/GenerateBlockSlab.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.generate.block; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.*; 8 | 9 | public class GenerateBlockSlab { 10 | 11 | public static void genBlock(String modId, String blockName, String textureName, String blockMockName, String path){ 12 | 13 | File fileDir = new File(path + "\\blockstates\\"); 14 | if(!fileDir.exists()){ 15 | fileDir.mkdirs(); 16 | } 17 | 18 | try { 19 | 20 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 21 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 22 | JsonWriter jw = gson.newJsonWriter(writer); 23 | 24 | jw.beginObject(); 25 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 26 | jw.name("variants"); 27 | jw.beginObject(); 28 | 29 | jw.name("half=bottom"); 30 | jw.beginObject(); 31 | jw.name("model").value("half_" + blockName); 32 | jw.endObject(); 33 | 34 | jw.name("half=top"); 35 | jw.beginObject(); 36 | jw.name("model").value("upper_" + blockName); 37 | jw.endObject(); 38 | 39 | jw.endObject(); 40 | jw.endObject(); 41 | 42 | writer.close(); 43 | 44 | Writer writer2 = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + "_double" + ".json"), "UTF-8"); 45 | Gson gson2 = new GsonBuilder().setPrettyPrinting().create(); 46 | JsonWriter jw2 = gson2.newJsonWriter(writer2); 47 | 48 | jw2.beginObject(); 49 | jw2.name("_comment").value("Generated using MiningMark48's JSON Generator."); 50 | jw2.name("variants"); 51 | jw2.beginObject(); 52 | 53 | jw2.name("normal"); 54 | jw2.beginObject(); 55 | jw2.name("model").value(blockMockName); 56 | jw2.endObject(); 57 | 58 | jw2.name("all"); 59 | jw2.beginObject(); 60 | jw2.name("model").value(blockMockName); 61 | jw2.endObject(); 62 | 63 | jw2.endObject(); 64 | jw2.endObject(); 65 | 66 | writer2.close(); 67 | 68 | } catch (UnsupportedEncodingException e) { 69 | e.printStackTrace(); 70 | } catch (FileNotFoundException e) { 71 | e.printStackTrace(); 72 | } catch (IOException e) { 73 | e.printStackTrace(); 74 | } 75 | 76 | genBlockModel(modId, blockName, textureName, path); 77 | genBlockItemModel(modId, blockName, path); 78 | 79 | } 80 | 81 | private static void genBlockModel(String modId, String blockName, String textureName, String path){ 82 | 83 | File fileDir = new File(path + "\\models\\block\\"); 84 | if(!fileDir.exists()){ 85 | fileDir.mkdirs(); 86 | } 87 | 88 | try { 89 | 90 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + "half_" + blockName + ".json"), "UTF-8"); 91 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 92 | JsonWriter jw = gson.newJsonWriter(writer); 93 | 94 | jw.beginObject(); 95 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 96 | jw.name("parent").value("block/half_slab"); 97 | jw.name("textures"); 98 | jw.beginObject(); 99 | jw.name("bottom").value(modId + ":blocks/" + textureName); 100 | jw.name("top").value(modId + ":blocks/" + textureName); 101 | jw.name("side").value(modId + ":blocks/" + textureName); 102 | jw.endObject(); 103 | jw.endObject(); 104 | 105 | writer.close(); 106 | 107 | Writer writer2 = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + "upper_" + blockName + ".json"), "UTF-8"); 108 | JsonWriter jw2 = gson.newJsonWriter(writer2); 109 | 110 | jw2.beginObject(); 111 | jw2.name("_comment").value("Generated using MiningMark48's JSON Generator."); 112 | jw2.name("parent").value("block/upper_slab"); 113 | jw2.name("textures"); 114 | jw2.beginObject(); 115 | jw2.name("bottom").value(modId + ":blocks/" + textureName); 116 | jw2.name("top").value(modId + ":blocks/" + textureName); 117 | jw2.name("side").value(modId + ":blocks/" + textureName); 118 | jw2.endObject(); 119 | jw2.endObject(); 120 | 121 | writer2.close(); 122 | 123 | } catch (UnsupportedEncodingException e) { 124 | e.printStackTrace(); 125 | } catch (FileNotFoundException e) { 126 | e.printStackTrace(); 127 | } catch (IOException e) { 128 | e.printStackTrace(); 129 | } 130 | 131 | } 132 | 133 | private static void genBlockItemModel(String modId, String blockName, String path){ 134 | 135 | File fileDir = new File(path + "\\models\\item\\"); 136 | if(!fileDir.exists()){ 137 | fileDir.mkdirs(); 138 | } 139 | 140 | try { 141 | 142 | Writer writer = new OutputStreamWriter(new FileOutputStream(fileDir + "\\" + blockName + ".json"), "UTF-8"); 143 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 144 | JsonWriter jw = gson.newJsonWriter(writer); 145 | 146 | jw.beginObject(); 147 | 148 | jw.name("_comment").value("Generated using MiningMark48's JSON Generator."); 149 | jw.name("parent").value(modId + ":block/" + "half_" + blockName); 150 | 151 | jw.endObject(); 152 | 153 | writer.close(); 154 | 155 | } catch (UnsupportedEncodingException e) { 156 | e.printStackTrace(); 157 | } catch (FileNotFoundException e) { 158 | e.printStackTrace(); 159 | } catch (IOException e) { 160 | e.printStackTrace(); 161 | } 162 | 163 | 164 | } 165 | 166 | } 167 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/AdvancedBlockController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.Main; 4 | import com.miningmark48.jsongen.reference.FXMLFiles; 5 | import com.miningmark48.jsongen.reference.Reference; 6 | import javafx.application.Platform; 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.fxml.FXMLLoader; 10 | import javafx.scene.Parent; 11 | import javafx.scene.Scene; 12 | import javafx.scene.control.MenuBar; 13 | import javafx.scene.image.Image; 14 | import javafx.stage.Stage; 15 | 16 | import java.io.IOException; 17 | import java.sql.Ref; 18 | 19 | public class AdvancedBlockController { 20 | 21 | @FXML private MenuBar menu_bar; 22 | 23 | @FXML private void handleCloseButtonAction(ActionEvent event){ 24 | Platform.exit(); 25 | } 26 | 27 | @FXML private void handleAboutButtonAction(ActionEvent event){ 28 | Reference.aboutAlert.showAndWait(); 29 | } 30 | 31 | @FXML private void handleMenuButtonAction(ActionEvent event) { 32 | Reference.setRoot(FXMLFiles.FXML_MAIN); 33 | } 34 | 35 | @FXML private void handleOrientedButtonAction(ActionEvent event) throws IOException { 36 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS_ORIENTED); 37 | } 38 | 39 | @FXML private void handleFenceButtonAction(ActionEvent event) throws IOException { 40 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS_FENCE); 41 | } 42 | 43 | @FXML private void handlePressurePlateButtonAction(ActionEvent event) throws IOException { 44 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS_PRESSUREPLATE); 45 | } 46 | 47 | @FXML private void handleSlabButtonAction(ActionEvent event) throws IOException { 48 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS_SLAB); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/BlockController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.Main; 4 | import com.miningmark48.jsongen.generate.block.GenerateBlock; 5 | import com.miningmark48.jsongen.reference.FXMLFiles; 6 | import com.miningmark48.jsongen.reference.Reference; 7 | import com.sun.org.apache.regexp.internal.RE; 8 | import javafx.application.Platform; 9 | import javafx.event.ActionEvent; 10 | import javafx.fxml.FXML; 11 | import javafx.fxml.FXMLLoader; 12 | import javafx.scene.Parent; 13 | import javafx.scene.Scene; 14 | import javafx.scene.control.MenuBar; 15 | import javafx.scene.control.TextField; 16 | import javafx.scene.image.Image; 17 | import javafx.stage.DirectoryChooser; 18 | import javafx.stage.Stage; 19 | 20 | import java.io.File; 21 | import java.io.IOException; 22 | 23 | public class BlockController { 24 | 25 | @FXML private MenuBar menu_bar; 26 | @FXML private TextField fieldModId; 27 | @FXML private TextField fieldBlockName; 28 | @FXML private TextField fieldTextureName; 29 | @FXML private TextField fieldExportPath; 30 | 31 | @FXML private void handleCloseButtonAction(ActionEvent event){ 32 | Platform.exit(); 33 | } 34 | 35 | @FXML private void handleAboutButtonAction(ActionEvent event){ 36 | Reference.aboutAlert.showAndWait(); 37 | } 38 | 39 | @FXML private void handleMenuButtonAction(ActionEvent event) { 40 | Reference.setRoot(FXMLFiles.FXML_MAIN); 41 | } 42 | 43 | @FXML private void handlePathButtonAction(ActionEvent event) { 44 | DirectoryChooser chooser = new DirectoryChooser(); 45 | chooser.setTitle("Choose resource directory"); 46 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 47 | File selectedDirectory = chooser.showDialog(new Stage()); 48 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 49 | } 50 | 51 | @FXML private void handleAdvancedButtonAction(ActionEvent event) throws IOException { 52 | Reference.setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS); 53 | } 54 | 55 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 56 | GenerateBlock.genBlock(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldExportPath.getText()); 57 | 58 | fieldBlockName.clear(); 59 | fieldTextureName.clear(); 60 | Reference.generatedAlert.showAndWait(); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/ItemController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.Main; 4 | import com.miningmark48.jsongen.generate.GenerateItem; 5 | import com.miningmark48.jsongen.reference.FXMLFiles; 6 | import com.miningmark48.jsongen.reference.Reference; 7 | import javafx.application.Platform; 8 | import javafx.event.ActionEvent; 9 | import javafx.fxml.FXML; 10 | import javafx.scene.control.CheckBox; 11 | import javafx.scene.control.MenuBar; 12 | import javafx.scene.control.TextField; 13 | import javafx.stage.DirectoryChooser; 14 | import javafx.stage.Stage; 15 | 16 | import java.io.File; 17 | 18 | public class ItemController { 19 | 20 | @FXML private MenuBar menu_bar; 21 | @FXML private TextField fieldModId; 22 | @FXML private TextField fieldBlockName; 23 | @FXML private TextField fieldTextureName; 24 | @FXML private TextField fieldExportPath; 25 | @FXML private CheckBox checkBoxTool; 26 | 27 | @FXML private void handleCloseButtonAction(ActionEvent event){ 28 | Platform.exit(); 29 | } 30 | 31 | @FXML private void handleAboutButtonAction(ActionEvent event){ 32 | Reference.aboutAlert.showAndWait(); 33 | } 34 | 35 | @FXML private void handleMenuButtonAction(ActionEvent event) { 36 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_MAIN); 37 | } 38 | 39 | @FXML private void handlePathButtonAction(ActionEvent event) { 40 | DirectoryChooser chooser = new DirectoryChooser(); 41 | chooser.setTitle("Choose resource directory"); 42 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 43 | File selectedDirectory = chooser.showDialog(new Stage()); 44 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 45 | } 46 | 47 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 48 | if (checkBoxTool.isSelected()) { 49 | GenerateItem.genTool(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldExportPath.getText()); 50 | checkBoxTool.setSelected(false); 51 | } else { 52 | GenerateItem.genItem(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldExportPath.getText()); 53 | } 54 | 55 | fieldBlockName.clear(); 56 | fieldTextureName.clear(); 57 | Reference.generatedAlert.showAndWait(); 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/MainController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.reference.FXMLFiles; 4 | import com.miningmark48.jsongen.reference.Reference; 5 | import javafx.application.Platform; 6 | import javafx.event.ActionEvent; 7 | import javafx.fxml.FXML; 8 | import javafx.scene.control.MenuBar; 9 | 10 | import java.io.IOException; 11 | 12 | public class MainController { 13 | 14 | @FXML private MenuBar menu_bar; 15 | 16 | @FXML private void handleCloseButtonAction(ActionEvent event){ 17 | Platform.exit(); 18 | } 19 | 20 | @FXML private void handleAboutButtonAction(ActionEvent event){ 21 | Reference.aboutAlert.showAndWait(); 22 | } 23 | 24 | @FXML private void handleBlockButtonAction(ActionEvent event) throws IOException { 25 | Reference.setRoot(FXMLFiles.FXML_BLOCKS); 26 | } 27 | 28 | @FXML private void handleItemButtonAction(ActionEvent event) throws IOException { 29 | Reference.setRoot(FXMLFiles.FXML_ITEMS); 30 | } 31 | 32 | @FXML private void handleModInfoButtonAction(ActionEvent event) throws IOException { 33 | Reference.setRoot(FXMLFiles.FXML_MODINFO); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/ModInfoController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.google.gson.JsonArray; 4 | import com.google.gson.JsonElement; 5 | import com.google.gson.JsonObject; 6 | import com.google.gson.JsonParser; 7 | import com.miningmark48.jsongen.Main; 8 | import com.miningmark48.jsongen.generate.GenerateModInfo; 9 | import com.miningmark48.jsongen.reference.FXMLFiles; 10 | import com.miningmark48.jsongen.reference.Reference; 11 | import javafx.application.Platform; 12 | import javafx.event.ActionEvent; 13 | import javafx.fxml.FXML; 14 | import javafx.scene.control.MenuBar; 15 | import javafx.scene.control.TextArea; 16 | import javafx.scene.control.TextField; 17 | import javafx.stage.DirectoryChooser; 18 | import javafx.stage.FileChooser; 19 | import javafx.stage.Stage; 20 | 21 | import java.io.File; 22 | import java.io.FileNotFoundException; 23 | import java.io.FileReader; 24 | 25 | public class ModInfoController { 26 | 27 | @FXML private MenuBar menu_bar; 28 | @FXML private TextField fieldModID; 29 | @FXML private TextField fieldModName; 30 | @FXML private TextField fieldModVersion; 31 | @FXML private TextField fieldGameVersion; 32 | @FXML private TextField fieldAuthor; 33 | @FXML private TextField fieldURL; 34 | @FXML private TextArea fieldDesc; 35 | @FXML private TextArea fieldCredit; 36 | @FXML private TextField fieldExportPath; 37 | 38 | @FXML private void handleCloseButtonAction(ActionEvent event){ 39 | Platform.exit(); 40 | } 41 | 42 | @FXML private void handleMenuButtonAction(ActionEvent event) { 43 | Main.getMainStage().getScene().setRoot(FXMLFiles.FXML_MAIN); 44 | } 45 | 46 | @FXML private void handleImportButtonAction(ActionEvent event){ 47 | FileChooser fileChooser = new FileChooser(); 48 | fileChooser.setTitle("Open Resource File"); 49 | fileChooser.getExtensionFilters().addAll( 50 | new FileChooser.ExtensionFilter("All Files", "*.*"), 51 | new FileChooser.ExtensionFilter("Mod Info", "*.info"), 52 | new FileChooser.ExtensionFilter("JSON", "*.json") 53 | ); 54 | File file = fileChooser.showOpenDialog(new Stage()); 55 | 56 | try { 57 | 58 | if (file != null && file.exists()) { 59 | JsonParser jp = new JsonParser(); 60 | JsonElement root = jp.parse(new FileReader(file.getPath())); 61 | JsonArray rootArray = root.getAsJsonArray(); 62 | JsonObject rootObj = rootArray.get(0).getAsJsonObject(); 63 | 64 | fieldModID.setText(rootObj.get("modid").getAsString()); 65 | fieldModName.setText(rootObj.get("name").getAsString()); 66 | fieldModVersion.setText(rootObj.get("version").getAsString()); 67 | fieldGameVersion.setText(rootObj.get("mcversion").getAsString()); 68 | fieldAuthor.setText(rootObj.get("authorList").getAsJsonArray().get(0).getAsString()); 69 | fieldURL.setText(rootObj.get("url").getAsString()); 70 | fieldDesc.setText(rootObj.get("description").getAsString()); 71 | fieldCredit.setText(rootObj.get("credits").getAsString()); 72 | } 73 | 74 | } catch (FileNotFoundException e1) { 75 | e1.printStackTrace(); 76 | } 77 | 78 | } 79 | 80 | @FXML private void handleAboutButtonAction(ActionEvent event){ 81 | Reference.aboutAlert.showAndWait(); 82 | } 83 | 84 | @FXML private void handlePathButtonAction(ActionEvent event) { 85 | DirectoryChooser chooser = new DirectoryChooser(); 86 | chooser.setTitle("Choose resource directory"); 87 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 88 | File selectedDirectory = chooser.showDialog(new Stage()); 89 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 90 | } 91 | 92 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 93 | GenerateModInfo.genModInfo(fieldModID.getText(), fieldModName.getText(), fieldModVersion.getText(), fieldGameVersion.getText(), fieldAuthor.getText(), fieldURL.getText(), fieldDesc.getText(), fieldCredit.getText(), fieldExportPath.getText()); 94 | 95 | fieldModID.clear(); 96 | fieldModName.clear(); 97 | fieldModVersion.clear(); 98 | fieldGameVersion.clear(); 99 | fieldAuthor.clear(); 100 | fieldURL.clear(); 101 | fieldDesc.clear(); 102 | fieldCredit.clear(); 103 | Reference.generatedAlert.showAndWait(); 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/blocks_advanced/FenceController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.generate.block.GenerateBlockFence; 4 | import com.miningmark48.jsongen.reference.FXMLFiles; 5 | import com.miningmark48.jsongen.reference.Reference; 6 | import javafx.application.Platform; 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.scene.control.MenuBar; 10 | import javafx.scene.control.TextField; 11 | import javafx.stage.DirectoryChooser; 12 | import javafx.stage.Stage; 13 | 14 | import java.io.File; 15 | 16 | public class FenceController { 17 | 18 | @FXML private MenuBar menu_bar; 19 | @FXML private TextField fieldModId; 20 | @FXML private TextField fieldBlockName; 21 | @FXML private TextField fieldTextureName; 22 | @FXML private TextField fieldExportPath; 23 | 24 | @FXML private void handleCloseButtonAction(ActionEvent event){ 25 | Platform.exit(); 26 | } 27 | 28 | @FXML private void handleAboutButtonAction(ActionEvent event){ 29 | Reference.aboutAlert.showAndWait(); 30 | } 31 | 32 | @FXML private void handleMenuButtonAction(ActionEvent event) { 33 | Reference.setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS); 34 | } 35 | 36 | @FXML private void handlePathButtonAction(ActionEvent event) { 37 | DirectoryChooser chooser = new DirectoryChooser(); 38 | chooser.setTitle("Choose resource directory"); 39 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 40 | File selectedDirectory = chooser.showDialog(new Stage()); 41 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 42 | } 43 | 44 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 45 | GenerateBlockFence.genBlock(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldExportPath.getText()); 46 | 47 | fieldBlockName.clear(); 48 | fieldTextureName.clear(); 49 | Reference.generatedAlert.showAndWait(); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/blocks_advanced/OrientedController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.generate.block.GenerateBlockOriented; 4 | import com.miningmark48.jsongen.reference.FXMLFiles; 5 | import com.miningmark48.jsongen.reference.Reference; 6 | import javafx.application.Platform; 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.scene.control.MenuBar; 10 | import javafx.scene.control.TextField; 11 | import javafx.stage.DirectoryChooser; 12 | import javafx.stage.Stage; 13 | 14 | import java.io.File; 15 | 16 | public class OrientedController { 17 | 18 | @FXML private MenuBar menu_bar; 19 | @FXML private TextField fieldModId; 20 | @FXML private TextField fieldBlockName; 21 | @FXML private TextField fieldTopTexture; 22 | @FXML private TextField fieldBottomTexture; 23 | @FXML private TextField fieldFrontTexture; 24 | @FXML private TextField fieldSideTexture; 25 | @FXML private TextField fieldExportPath; 26 | 27 | @FXML private void handleCloseButtonAction(ActionEvent event){ 28 | Platform.exit(); 29 | } 30 | 31 | @FXML private void handleAboutButtonAction(ActionEvent event){ 32 | Reference.aboutAlert.showAndWait(); 33 | } 34 | 35 | @FXML private void handleMenuButtonAction(ActionEvent event) { 36 | Reference.setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS); 37 | } 38 | 39 | @FXML private void handlePathButtonAction(ActionEvent event) { 40 | DirectoryChooser chooser = new DirectoryChooser(); 41 | chooser.setTitle("Choose resource directory"); 42 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 43 | File selectedDirectory = chooser.showDialog(new Stage()); 44 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 45 | } 46 | 47 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 48 | GenerateBlockOriented.genBlock(fieldModId.getText(), fieldBlockName.getText(), fieldTopTexture.getText(), fieldBottomTexture.getText(), fieldFrontTexture.getText(), fieldSideTexture.getText(), fieldExportPath.getText()); 49 | 50 | fieldBlockName.clear(); 51 | fieldTopTexture.clear(); 52 | fieldBottomTexture.clear(); 53 | fieldFrontTexture.clear(); 54 | fieldSideTexture.clear(); 55 | Reference.generatedAlert.showAndWait(); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/blocks_advanced/PressurePlateController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.generate.block.GenerateBlockPressurePlate; 4 | import com.miningmark48.jsongen.reference.FXMLFiles; 5 | import com.miningmark48.jsongen.reference.Reference; 6 | import javafx.application.Platform; 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.scene.control.MenuBar; 10 | import javafx.scene.control.TextField; 11 | import javafx.stage.DirectoryChooser; 12 | import javafx.stage.Stage; 13 | 14 | import java.io.File; 15 | 16 | public class PressurePlateController { 17 | 18 | @FXML private MenuBar menu_bar; 19 | @FXML private TextField fieldModId; 20 | @FXML private TextField fieldBlockName; 21 | @FXML private TextField fieldTextureName; 22 | @FXML private TextField fieldExportPath; 23 | 24 | @FXML private void handleCloseButtonAction(ActionEvent event){ 25 | Platform.exit(); 26 | } 27 | 28 | @FXML private void handleAboutButtonAction(ActionEvent event){ 29 | Reference.aboutAlert.showAndWait(); 30 | } 31 | 32 | @FXML private void handleMenuButtonAction(ActionEvent event) { 33 | Reference.setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS); 34 | } 35 | 36 | @FXML private void handlePathButtonAction(ActionEvent event) { 37 | DirectoryChooser chooser = new DirectoryChooser(); 38 | chooser.setTitle("Choose resource directory"); 39 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 40 | File selectedDirectory = chooser.showDialog(new Stage()); 41 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 42 | } 43 | 44 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 45 | GenerateBlockPressurePlate.genBlock(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldExportPath.getText()); 46 | 47 | fieldBlockName.clear(); 48 | fieldTextureName.clear(); 49 | Reference.generatedAlert.showAndWait(); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/javafx/controllers/blocks_advanced/SlabController.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.javafx.controllers; 2 | 3 | import com.miningmark48.jsongen.generate.block.GenerateBlockSlab; 4 | import com.miningmark48.jsongen.reference.FXMLFiles; 5 | import com.miningmark48.jsongen.reference.Reference; 6 | import javafx.application.Platform; 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.scene.control.MenuBar; 10 | import javafx.scene.control.TextField; 11 | import javafx.stage.DirectoryChooser; 12 | import javafx.stage.Stage; 13 | 14 | import java.io.File; 15 | 16 | public class SlabController { 17 | 18 | @FXML private MenuBar menu_bar; 19 | @FXML private TextField fieldModId; 20 | @FXML private TextField fieldBlockName; 21 | @FXML private TextField fieldTextureName; 22 | @FXML private TextField fieldExportPath; 23 | @FXML private TextField fieldMockName; 24 | 25 | @FXML private void handleCloseButtonAction(ActionEvent event){ 26 | Platform.exit(); 27 | } 28 | 29 | @FXML private void handleAboutButtonAction(ActionEvent event){ 30 | Reference.aboutAlert.showAndWait(); 31 | } 32 | 33 | @FXML private void handleMenuButtonAction(ActionEvent event) { 34 | Reference.setRoot(FXMLFiles.FXML_ADVANCEDBLOCKS); 35 | } 36 | 37 | @FXML private void handlePathButtonAction(ActionEvent event) { 38 | DirectoryChooser chooser = new DirectoryChooser(); 39 | chooser.setTitle("Choose resource directory"); 40 | chooser.setInitialDirectory(new File(System.getProperty("user.home"), "Desktop")); 41 | File selectedDirectory = chooser.showDialog(new Stage()); 42 | if (selectedDirectory != null) fieldExportPath.setText(selectedDirectory.getPath()); 43 | } 44 | 45 | @FXML private void handleGenerateButtonAction(ActionEvent event) { 46 | GenerateBlockSlab.genBlock(fieldModId.getText(), fieldBlockName.getText(), fieldTextureName.getText(), fieldMockName.getText(), fieldExportPath.getText()); 47 | 48 | fieldBlockName.clear(); 49 | fieldTextureName.clear(); 50 | fieldMockName.clear(); 51 | Reference.generatedAlert.showAndWait(); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/reference/FXMLFiles.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.reference; 2 | 3 | import com.miningmark48.jsongen.Main; 4 | import javafx.scene.Parent; 5 | 6 | import java.io.IOException; 7 | 8 | import static com.miningmark48.jsongen.Main.LOADER_INSTANCE; 9 | 10 | public class FXMLFiles { 11 | 12 | public static Parent FXML_MAIN; 13 | public static Parent FXML_BLOCKS; 14 | public static Parent FXML_ITEMS; 15 | public static Parent FXML_MODINFO; 16 | public static Parent FXML_ADVANCEDBLOCKS; 17 | public static Parent FXML_ADVANCEDBLOCKS_FENCE; 18 | public static Parent FXML_ADVANCEDBLOCKS_ORIENTED; 19 | public static Parent FXML_ADVANCEDBLOCKS_PRESSUREPLATE; 20 | public static Parent FXML_ADVANCEDBLOCKS_SLAB; 21 | 22 | public static void initFXML() { 23 | try { 24 | FXML_MAIN = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/main.fxml")); 25 | FXML_BLOCKS = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks.fxml")); 26 | FXML_ITEMS = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/items.fxml")); 27 | FXML_MODINFO = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/modinfo.fxml")); 28 | FXML_ADVANCEDBLOCKS = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks_advanced.fxml")); 29 | FXML_ADVANCEDBLOCKS_FENCE = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks_advanced/fence.fxml")); 30 | FXML_ADVANCEDBLOCKS_ORIENTED = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks_advanced/oriented.fxml")); 31 | FXML_ADVANCEDBLOCKS_PRESSUREPLATE = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks_advanced/pressure_plate.fxml")); 32 | FXML_ADVANCEDBLOCKS_SLAB = LOADER_INSTANCE.load(Main.INSTANCE.getClass().getResource("/fxml/blocks_advanced/slab.fxml")); 33 | } catch (IOException e) { 34 | e.printStackTrace(); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/reference/Reference.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.reference; 2 | 3 | import com.miningmark48.jsongen.Main; 4 | import javafx.scene.Parent; 5 | import javafx.scene.Scene; 6 | import javafx.scene.control.Alert; 7 | import javafx.scene.image.Image; 8 | import javafx.scene.text.Text; 9 | import javafx.stage.Stage; 10 | 11 | public class Reference { 12 | 13 | public static String author = "MiningMark48"; 14 | public static String version = "1.0.0"; 15 | public static String gameVersion = "1.9.4+"; 16 | public static String iconURL = "http://miningmark48.xyz/img/projects/mcjsongen/icon.png"; 17 | public static String styleSheetResource = Main.INSTANCE.getClass().getResource("/bootstrap2.css").toString(); 18 | 19 | public static Alert aboutAlert = new Alert(Alert.AlertType.INFORMATION); 20 | public static Alert generatedAlert = new Alert(Alert.AlertType.INFORMATION); 21 | 22 | 23 | public static void init() { 24 | aboutAlert.setTitle("About"); 25 | aboutAlert.setHeaderText("About Minecraft JSON Generator"); 26 | aboutAlert.setContentText("Minecraft JSON Generator v" + Reference.version + " by " + Reference.author); 27 | Stage aboutStage = (Stage) aboutAlert.getDialogPane().getScene().getWindow(); 28 | aboutStage.getIcons().add(new Image(Reference.iconURL)); 29 | 30 | generatedAlert.setTitle("Generated"); 31 | generatedAlert.setHeaderText("Generation Successful"); 32 | generatedAlert.setContentText("JSON was successfully generated."); 33 | Stage generatedStage = (Stage) generatedAlert.getDialogPane().getScene().getWindow(); 34 | generatedStage.getIcons().add(new Image(Reference.iconURL)); 35 | } 36 | 37 | public static Scene getDefaultScene(Parent root) { 38 | Scene scene = new Scene(root, 800, 400); 39 | scene.getStylesheets().add(styleSheetResource); 40 | return scene; 41 | } 42 | 43 | public static Scene getMainScene() { 44 | return getDefaultScene(FXMLFiles.FXML_MAIN); 45 | } 46 | 47 | public static Stage getDefaultStage() { 48 | Scene scene = getMainScene(); 49 | Stage stage = new Stage(); 50 | stage.setTitle("Minecraft JSON Generator for Minecraft " + Reference.gameVersion + " by " + Reference.author); 51 | stage.setScene(scene); 52 | stage.getIcons().add(new Image(Reference.iconURL)); 53 | 54 | Text textVersion = (Text) scene.lookup("#textInfo"); 55 | if (textVersion != null) { 56 | textVersion.setText("v" + Reference.version + " by " + Reference.author); 57 | } 58 | 59 | return stage; 60 | } 61 | 62 | public static void setRoot(Parent root) { 63 | Main.getMainStage().getScene().setRoot(root); 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/util/MyClassLoader.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.util; 2 | 3 | import java.io.IOException; 4 | import java.net.URL; 5 | import java.util.Enumeration; 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class MyClassLoader extends ClassLoader{ 10 | private final Map classes = new HashMap<>(); 11 | private final ClassLoader parent; 12 | 13 | public MyClassLoader(ClassLoader parent) { 14 | this.parent = parent; 15 | } 16 | 17 | @Override 18 | public Class loadClass(String name) throws ClassNotFoundException { 19 | Class c = findClass(name); 20 | if ( c == null ) { 21 | throw new ClassNotFoundException( name ); 22 | } 23 | return c; 24 | } 25 | 26 | @Override 27 | protected Class findClass( String className ) throws ClassNotFoundException { 28 | if (classes.containsKey(className)) { 29 | Class result = classes.get(className); 30 | return result; 31 | } else { 32 | try { 33 | Class result = parent.loadClass(className); 34 | classes.put(className, result); 35 | return result; 36 | } catch (ClassNotFoundException ignore) { 37 | classes.put(className, null); 38 | return null; 39 | } 40 | } 41 | } 42 | 43 | // ========= delegating methods ============= 44 | @Override 45 | public URL getResource( String name ) { 46 | return parent.getResource(name); 47 | } 48 | 49 | @Override 50 | public Enumeration getResources( String name ) throws IOException { 51 | return parent.getResources(name); 52 | } 53 | 54 | @Override 55 | public String toString() { 56 | return parent.toString(); 57 | } 58 | 59 | @Override 60 | public void setDefaultAssertionStatus(boolean enabled) { 61 | parent.setDefaultAssertionStatus(enabled); 62 | } 63 | 64 | @Override 65 | public void setPackageAssertionStatus(String packageName, boolean enabled) { 66 | parent.setPackageAssertionStatus(packageName, enabled); 67 | } 68 | 69 | @Override 70 | public void setClassAssertionStatus(String className, boolean enabled) { 71 | parent.setClassAssertionStatus(className, enabled); 72 | } 73 | 74 | @Override 75 | public void clearAssertionStatus() { 76 | parent.clearAssertionStatus(); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/util/VersionCheck.java: -------------------------------------------------------------------------------- 1 | package com.miningmark48.jsongen.util; 2 | 3 | import com.google.gson.JsonElement; 4 | import com.google.gson.JsonObject; 5 | import com.google.gson.JsonParser; 6 | import com.miningmark48.jsongen.reference.Reference; 7 | 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.io.InputStreamReader; 11 | import java.net.HttpURLConnection; 12 | import java.net.MalformedURLException; 13 | import java.net.URL; 14 | 15 | public class VersionCheck implements Runnable{ 16 | 17 | private static boolean isLatestVersion = false; 18 | private static String latestVersion = ""; 19 | 20 | private static String version = Reference.version; 21 | 22 | @Override 23 | public void run() { 24 | try { 25 | 26 | URL url = new URL("https://raw.githubusercontent.com/MiningMark48/Minecraft-JSON-Generator/master/src/com/miningmark48/jsongen/versioninfo.json"); 27 | HttpURLConnection request = (HttpURLConnection) url.openConnection(); 28 | request.connect(); 29 | 30 | JsonParser jp = new JsonParser(); 31 | JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); 32 | JsonObject rootObj = root.getAsJsonObject(); 33 | 34 | latestVersion = rootObj.get("version").getAsString(); 35 | isLatestVersion = version.equals(latestVersion); 36 | 37 | System.out.println(latestVersion); 38 | System.out.println(isLatestVersion); 39 | 40 | }catch (MalformedURLException e){ 41 | e.printStackTrace(); 42 | }catch (IOException e){ 43 | e.printStackTrace(); 44 | } 45 | } 46 | 47 | public boolean isLatestVersion(){ 48 | return isLatestVersion; 49 | } 50 | 51 | public String getLatestVersion(){ 52 | return latestVersion; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/miningmark48/jsongen/versioninfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.9" 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/bootstrap2.css: -------------------------------------------------------------------------------- 1 | .root { 2 | -fx-body-color : #F5F5F5; 3 | -fx-outer-border : #cecece; 4 | } 5 | .button:focused, .toggle-button:focused, 6 | .split-menu-button:focused, .menu-button:focused, 7 | .number-button:focused, 8 | .combo-box:focused .text-field, .choice-box:focused, .color-picker:focused, .date-picker:focused .text-field 9 | { 10 | -fx-effect: dropshadow(gaussian, #b4d1f3, 3, 3, 0, 0); 11 | } 12 | .button,.menu-button,.toggle-button,.split-menu-button { 13 | -fx-font-size: 14; 14 | -fx-background-radius: 4; 15 | -fx-border-radius: 4; 16 | -fx-pref-height: 30; 17 | -fx-min-width: 30; 18 | } 19 | .button,.menu-button,.split-menu-button,.toggle-button,.number-button { 20 | -fx-background-insets: 0, 0, -1, 0; 21 | } 22 | 23 | .split-menu-button > .label { 24 | -fx-border-radius: 4 0 0 4; 25 | -fx-background-radius: 3 0 0 3; 26 | } 27 | 28 | .split-menu-button > .arrow-button { 29 | -fx-border-radius: 0 4 4 0; 30 | -fx-background-radius: 0 3 3 0; 31 | } 32 | 33 | .lg { 34 | -fx-min-height: 46; 35 | -fx-max-height: 46; 36 | -fx-font-size: 18; 37 | } 38 | 39 | .sm { 40 | -fx-min-height: 30; 41 | -fx-max-height: 30; 42 | } 43 | 44 | .xs { 45 | -fx-min-height: 22; 46 | -fx-max-height: 22; 47 | -fx-font-size: 10; 48 | } 49 | 50 | .primary .arrow, 51 | .success .arrow, 52 | .info .arrow, 53 | .warning .arrow, 54 | .danger .arrow { 55 | -fx-background-color: transparent, white; 56 | } 57 | 58 | .primary > .label, 59 | .success > .label, 60 | .info > .label, 61 | .warning > .label, 62 | .danger > .label { 63 | -fx-text-fill: white; 64 | } 65 | 66 | .action-btn { 67 | -fx-min-width: 80; 68 | } 69 | 70 | /*positions*/ 71 | /*first*/ 72 | .button.first, .menu-button.first, .toggle-button.first, .text-field.first, .text-area.first { 73 | -fx-border-radius: 4 0 0 4; 74 | -fx-background-radius: 4 0 0 4; 75 | } 76 | 77 | .split-menu-button.first > .arrow-button, .split-menu-button.middle > .arrow-button { 78 | -fx-border-radius: 0; 79 | -fx-background-radius: 0; 80 | } 81 | 82 | VBox > .button.first, 83 | VBox > .menu-button.first, 84 | VBox > .toggle-button.first, 85 | VBox > .split-menu-button.first, 86 | VBox > .text-field.first, 87 | VBox > .text-area.first { 88 | -fx-border-radius: 4 4 0 0; 89 | -fx-background-radius: 4 4 0 0; 90 | } 91 | 92 | VBox > .split-menu-button.first > .label { 93 | -fx-border-radius: 4 0 0 0; 94 | -fx-background-radius: 3 0 0 0; 95 | } 96 | VBox > .split-menu-button.first > .arrow-button { 97 | -fx-border-radius: 0 4 0 0; 98 | -fx-background-radius: 0 3 0 0; 99 | } 100 | /*middle*/ 101 | .middle { 102 | -fx-border-radius: 0; 103 | -fx-background-radius: 0; 104 | } 105 | 106 | /*last*/ 107 | .split-menu-button.middle > .label, .split-menu-button.last > .label { 108 | -fx-border-radius: 0; 109 | -fx-background-radius: 0; 110 | } 111 | 112 | .split-menu-button.last { 113 | -fx-border-radius: 0 4 4 0; 114 | -fx-background-radius: 0 4 4 0; 115 | } 116 | 117 | .button.middle, .text-field.middle, .text-area.middle, .split-menu-button.middle, .toggle-button.middle { 118 | -fx-border-radius: 0; 119 | -fx-background-radius: 0; 120 | } 121 | 122 | .button.last, .text-field.last, .text-area.last, .split-menu-button.last, .toggle-button.last, .menu-button.last { 123 | -fx-border-radius: 0 4 4 0; 124 | -fx-background-radius: 0 4 4 0; 125 | } 126 | VBox > .button.last, 127 | VBox > .menu-button.last, 128 | VBox > .toggle-button.last, 129 | VBox > .split-menu-button.last, 130 | VBox > .text-field.last, 131 | VBox > .text-area.last { 132 | -fx-border-radius: 0 0 4 4; 133 | -fx-background-radius: 0 0 4 4; 134 | } 135 | 136 | VBox > .split-menu-button.last > .label { 137 | -fx-border-radius: 0 0 0 4; 138 | -fx-background-radius: 0 0 0 3; 139 | } 140 | VBox > .split-menu-button.last > .arrow-button { 141 | -fx-border-radius: 0 0 4 0; 142 | -fx-background-radius: 0 0 3 0; 143 | } 144 | 145 | /*button styles*/ 146 | /*highlight line on the top*/ 147 | .button,.split-menu-button,.toggle-button,.menu-button, 148 | .split-menu-button > .label, .split-menu-button > .arrow-button { 149 | -fx-background-insets: 0,2 0 0 0; 150 | } 151 | 152 | /*bgcolor setting*/ 153 | .color-picker,.date-picker > .arrow-button, 154 | .number-button,.left-arrow-button,.right-arrow-button, 155 | .button,.split-menu-button,.toggle-button,.menu-button, 156 | .combo-box,.choice-box, 157 | .font-menu-button, .split-menu-button > .label, .split-menu-button > .arrow-button { 158 | -fx-background-color: white,linear-gradient(to bottom,#fff,#e6e6e6); 159 | } 160 | 161 | .color-picker,.date-picker > .arrow-button, 162 | .button,.menu-button,.toggle-button,.number-button,.left-arrow-button,.right-arrow-button, 163 | .font-menu-button, 164 | .split-menu-button > .label,.split-menu-button > .arrow-button { 165 | -fx-border-color: #dddddd #dddddd #b3b3b3 #dddddd ; 166 | -fx-text-fill: #333333; 167 | } 168 | /*just for the special split menu button*/ 169 | .split-menu-button > .label { 170 | -fx-border-width: 1 0 1 1; 171 | } 172 | /*for date picker arrow button*/ 173 | .date-picker > .arrow-button { 174 | -fx-border-radius: 0 4 4 0; 175 | } 176 | .combo-box > .arrow-button, .choice-box > .arrow-button { 177 | -fx-border-width: 0; 178 | } 179 | /*hover state*/ 180 | .color-picker:hover, 181 | .date-picker:hover > .arrow-button, 182 | .combo-box:hover,.choice-box:hover, 183 | .number-button:hover,.left-arrow-button:hover,.right-arrow-button:hover, 184 | .button:hover,.menu-button:hover,.toggle-button:hover, 185 | .font-menu-button:hover, 186 | .split-menu-button > .label:hover, .split-menu-button > .arrow-button:hover { 187 | -fx-background-color: linear-gradient(to bottom, #f0f0f0, #e6e6e6); 188 | -fx-border-color: #dadada #dadada #b3b3b3 #dadada; 189 | } 190 | /*pressed selected*/ 191 | .color-picker:pressed,.color-picker:selected, 192 | .number-button:pressed,.number-button:selected, 193 | .date-picker:pressed > .arrow-button, 194 | .combo-box:pressed > .arrow-button,.combo-box:selected > .arrow-button, 195 | .choice-box:pressed > .arrow-button,.choice-box:selected > .arrow-button, 196 | .font-menu-button:pressed,.font-menu-button:selected, 197 | .left-arrow-button:pressed,.left-arrow-button:selected, 198 | .right-arrow-button:pressed,.right-arrow-button:selected, 199 | .button:pressed, .button:selected,.menu-button:pressed,.menu-button:selected 200 | ,.toggle-button:pressed,.toggle-button:selected, 201 | .split-menu-button:pressed > .label, .split-menu-button > .arrow-button:pressed { 202 | -fx-background-color: #e6e6e6; 203 | -fx-border-color: #cfcfcf #cfcfcf #b3b3b3 #cfcfcf; 204 | -fx-effect: innershadow(gaussian, #b3b3b3, 10, 0, 0, 3); 205 | } 206 | 207 | /*primary*/ 208 | .button.primary,.split-menu-button.primary,.toggle-button.primary,.menu-button.primary, 209 | .split-menu-button.primary > .label, .split-menu-button.primary > .arrow-button { 210 | -fx-background-color: #339fd6,linear-gradient(to bottom,#08c,#04c); 211 | } 212 | 213 | .button.primary,.menu-button.primary,.toggle-button.primary, 214 | .split-menu-button.primary > .label,.split-menu-button.primary > .arrow-button { 215 | -fx-border-color: #0062b8 #0062b8 #005299 #0062b8; 216 | -fx-text-fill: white; 217 | } 218 | /*hover state*/ 219 | .button.primary:hover,.menu-button.primary:hover,.toggle-button.primary:hover, 220 | .split-menu-button.primary > .label:hover, .split-menu-button.primary > .arrow-button:hover { 221 | -fx-border-color: #005bb8 #005bb8 #003399 #005bb8; 222 | -fx-background-color: #3381d6,linear-gradient(to bottom, #0060cc, #0044cc); 223 | } 224 | /*pressed selected*/ 225 | .button.primary:pressed, .button.primary:selected, 226 | .menu-button.primary:pressed,.menu-button.primary:selected 227 | ,.toggle-button.primary:pressed,.toggle-button.primary:selected, 228 | .split-menu-button.primary:pressed > .label, .split-menu-button.primary > .arrow-button:pressed { 229 | -fx-background-color: #0044cc; 230 | -fx-border-color: #003db8 #003db8 #003399 #003db8; 231 | -fx-effect: innershadow(gaussian, #003db8, 10, 0, 0, 3); 232 | } 233 | 234 | /*success*/ 235 | 236 | .button.success,.split-menu-button.success,.toggle-button.success,.menu-button.success, 237 | .split-menu-button.success > .label, .split-menu-button.success > .arrow-button { 238 | -fx-background-color: #81cf81,linear-gradient(to bottom,#62c462,#51a351); 239 | } 240 | 241 | .button.success,.menu-button.success,.toggle-button.success, 242 | .split-menu-button.success > .label,.split-menu-button.success > .arrow-button { 243 | -fx-border-color: #52a552 #52a552 #448944 #52a552; 244 | -fx-text-fill: white; 245 | } 246 | /*hover state*/ 247 | .button.success:hover,.menu-button.success:hover,.toggle-button.success:hover, 248 | .split-menu-button.success > .label:hover, .split-menu-button.success > .arrow-button:hover { 249 | -fx-border-color: #50a150 #50a150 #3d7a3d #50a150; 250 | -fx-background-color: #79c279,linear-gradient(to bottom, #5ab25a, #3d7a3d); 251 | } 252 | /*pressed selected*/ 253 | .button.success:pressed, .button.success:selected, 254 | .menu-button.success:pressed,.menu-button.success:selected 255 | ,.toggle-button.success:pressed,.toggle-button.success:selected, 256 | .split-menu-button.success:pressed > .label, .split-menu-button.success > .arrow-button:pressed { 257 | -fx-background-color: #51a351; 258 | -fx-border-color: #499349 #499349 #3d7a3d #499349; 259 | -fx-effect: innershadow(gaussian, #3d7a3d, 10, 0, 0, 3); 260 | } 261 | 262 | /*info*/ 263 | 264 | .button.info,.split-menu-button.info,.toggle-button.info,.menu-button.info, 265 | .split-menu-button.info > .label, .split-menu-button.info > .arrow-button { 266 | -fx-background-color: #7ccde5,linear-gradient(to bottom,#5bc0de,#2f96b4); 267 | } 268 | 269 | .button.info,.menu-button.info,.toggle-button.info, 270 | .split-menu-button.info > .label,.split-menu-button.info > .arrow-button { 271 | -fx-border-color: #419db8 #419db8 #37839a #419db8; 272 | -fx-text-fill: white; 273 | } 274 | /*hover state*/ 275 | .button.info:hover,.menu-button.info:hover,.toggle-button.info:hover, 276 | .split-menu-button.info > .label:hover, .split-menu-button.info > .arrow-button:hover { 277 | -fx-border-color: #3d99b4 #3d99b4 #237187 #3d99b4; 278 | -fx-background-color: #69bad2,linear-gradient(to bottom, #41a8c6, #2f96b4); 279 | } 280 | /*pressed selected*/ 281 | .button.info:pressed, .button.info:selected, 282 | .menu-button.info:pressed,.menu-button.info:selected 283 | ,.toggle-button.info:pressed,.toggle-button.info:selected, 284 | .split-menu-button.info:pressed > .label, .split-menu-button.info > .arrow-button:pressed { 285 | -fx-background-color: #2f96b4; 286 | -fx-border-color: #2a87a2 #2a87a2 #237187 #2a87a2; 287 | -fx-effect: innershadow(gaussian, #2a87a2, 10, 0, 0, 3); 288 | } 289 | 290 | /*warning*/ 291 | 292 | .button.warning,.split-menu-button.warning,.toggle-button.warning,.menu-button.warning, 293 | .split-menu-button.warning > .label, .split-menu-button.warning > .arrow-button { 294 | -fx-background-color: #fcc272,linear-gradient(to bottom,#fbb450,#f89406); 295 | } 296 | 297 | .button.warning,.menu-button.warning,.toggle-button.warning, 298 | .split-menu-button.warning > .label,.split-menu-button.warning > .arrow-button { 299 | -fx-border-color: #e1962d #e1962d #bc7d25 #e1962d; 300 | -fx-text-fill: white; 301 | } 302 | /*hover state*/ 303 | .button.warning:hover,.menu-button.warning:hover,.toggle-button.warning:hover, 304 | .split-menu-button.warning > .label:hover, .split-menu-button.warning > .arrow-button:hover { 305 | -fx-border-color: #e09325 #e09325 #ba6f04 #e09325; 306 | -fx-background-color: #fab552,linear-gradient(to bottom, #f9a123, #f89406); 307 | } 308 | /*pressed selected*/ 309 | .button.warning:pressed, .button.warning:selected, 310 | .menu-button.warning:pressed,.menu-button.warning:selected 311 | ,.toggle-button.warning:pressed,.toggle-button.warning:selected, 312 | .split-menu-button.warning:pressed > .label, .split-menu-button.warning > .arrow-button:pressed { 313 | -fx-background-color: #f89406; 314 | -fx-border-color: #df8505 #df8505 #ba6f04 #df8505; 315 | -fx-effect: innershadow(gaussian, #df8505, 10, 0, 0, 3); 316 | } 317 | 318 | /*danger*/ 319 | 320 | .button.danger,.split-menu-button.danger,.toggle-button.danger,.menu-button.danger, 321 | .split-menu-button.danger > .label, .split-menu-button.danger > .arrow-button { 322 | -fx-background-color: #f17e7b,linear-gradient(to bottom,#ee5f5b,#bd362f); 323 | } 324 | 325 | .button.danger,.menu-button.danger,.toggle-button.danger, 326 | .split-menu-button.danger > .label,.split-menu-button.danger > .arrow-button { 327 | -fx-border-color: #c44741 #c44741 #a43b37 #c44741; 328 | -fx-text-fill: white; 329 | } 330 | /*hover state*/ 331 | .button.danger:hover,.menu-button.danger:hover,.toggle-button.danger:hover, 332 | .split-menu-button.danger > .label:hover, .split-menu-button.danger > .arrow-button:hover { 333 | -fx-border-color: #bf423d #bf423d #8e2823 #bf423d; 334 | -fx-background-color: #dc6d69,linear-gradient(to bottom, #d14741, #bd362f); 335 | } 336 | /*pressed selected*/ 337 | .button.danger:pressed, .button.danger:selected, 338 | .menu-button.danger:pressed,.menu-button.danger:selected 339 | ,.toggle-button.danger:pressed,.toggle-button.danger:selected, 340 | .split-menu-button.danger:pressed > .label, .split-menu-button.danger > .arrow-button:pressed { 341 | -fx-border-color: #aa302a #aa302a #8e2823 #aa302a; 342 | -fx-background-color: #bd362f; 343 | -fx-effect: innershadow(gaussian, #aa302a, 10, 0, 0, 3); 344 | } 345 | 346 | .menu-item { 347 | -fx-min-width: 200; 348 | } 349 | 350 | .menu-item:focused { 351 | -fx-background-color: linear-gradient(to bottom, #0087cb, #0077b3); 352 | } 353 | 354 | .menu-item:focused > * { 355 | -fx-text-fill: white; 356 | } 357 | .menu-item:focused .arrow { 358 | -fx-background-color: white; 359 | } 360 | 361 | .check-menu-item:checked:hover > .left-container > .check, 362 | .check-menu-item:checked:focused > .left-container > .check, 363 | .radio-menu-item:checked:hover > .left-container > .radio, 364 | .radio-menu-item:checked:focused > .left-container > .radio { 365 | -fx-background-color: white; 366 | } 367 | 368 | .context-menu { 369 | -fx-border-radius: 4; 370 | -fx-background-radius: 4; 371 | -fx-border-color: #b4b4b4; 372 | } 373 | .context-menu > * { 374 | -fx-padding: 5 0 5 0; 375 | } 376 | 377 | .separator { 378 | -fx-padding: 5 0 5 0; 379 | } 380 | 381 | .text-field { 382 | -fx-pref-height: 30; 383 | } 384 | 385 | .combo-box, .choice-box { 386 | -fx-background-insets: 0; 387 | -fx-border-color: #cecece; 388 | -fx-padding: -1; 389 | -fx-border-width: 1; 390 | } 391 | .combo-box, .choice-box, .color-picker, .date-picker { 392 | -fx-border-radius: 4; 393 | -fx-background-radius: 4; 394 | -fx-pref-height: 30; 395 | } 396 | 397 | .combo-box:editable > .arrow-button { 398 | -fx-background-color: white; 399 | } 400 | 401 | .combo-box:editable > .arrow-button:hover { 402 | -fx-background-color: #e6e6e6; 403 | } 404 | 405 | .combo-box:editable > .arrow-button:pressed { 406 | -fx-effect: innershadow(gaussian, #adadad, 10, 0, 0, 3); 407 | } 408 | 409 | .combo-box > .text-input, .date-picker > .text-input { 410 | -fx-background-radius: 4 0 0 4; 411 | -fx-border-width: 0; 412 | } 413 | 414 | .text-field, .text-area { 415 | -fx-border-color: #cccccc; 416 | -fx-background-color: white; 417 | -fx-border-radius: 4; 418 | -fx-background-radius: 4; 419 | -fx-effect: innershadow(gaussian, transparent, 0, 0, 0, 0); 420 | } 421 | 422 | .text-field:focused, .text-area:focused { 423 | -fx-border-color: #66afe9; 424 | -fx-effect: dropshadow(gaussian, #66afe9, 10, 0, 0, 0); 425 | } 426 | 427 | .text-area .scroll-pane, .text-area .scroll-pane .content { 428 | -fx-background-color: white; 429 | -fx-background-radius: 4; 430 | } 431 | 432 | .tab-pane .tab-header-background { 433 | -fx-background-color: #f4f4f4; 434 | } 435 | .tab-pane.plain .tab-header-background { 436 | -fx-background-color: transparent; 437 | } 438 | 439 | .tab-pane .tab-header-area .tab { 440 | -fx-border-radius: 4 4 0 0; 441 | -fx-background-radius: 5 5 0 0; 442 | -fx-background-color: transparent; 443 | -fx-border-color: transparent; 444 | -fx-padding: 3 10 5 10; 445 | -fx-background-insets: 0; 446 | } 447 | 448 | .tab-pane .tab-header-area .tab .tab-label { 449 | -fx-text-fill: #0088cc; 450 | } 451 | 452 | .tab-pane .tab-header-area .tab:hover { 453 | -fx-background-color: #eeeeee; 454 | } 455 | 456 | .tab-pane .tab-header-area .tab:disabled:hover { 457 | -fx-background-color: transparent; 458 | } 459 | 460 | .tab-pane .tab-header-area .tab:selected { 461 | -fx-focus-color: transparent; 462 | -fx-border-color: #dddddd #dddddd white #dddddd; 463 | -fx-background-color: white; 464 | } 465 | .tab-pane .tab-header-area .tab:selected .tab-label { 466 | -fx-text-fill: #333333; 467 | } 468 | .tab-pane > .tab-content-area { 469 | -fx-background-color: white; 470 | } 471 | 472 | .tab-pane .tab-header-area .tab .tab-label { 473 | -fx-focus-color: transparent; 474 | } 475 | 476 | .tab-pane:focused > .tab-header-area > .headers-region > .tab:selected .focus-indicator { 477 | -fx-border-color: transparent; 478 | } 479 | 480 | .tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { 481 | -fx-background-color: #337ab7; 482 | } 483 | .tab-pane > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-close-button { 484 | -fx-background-color: #333333; 485 | } 486 | .tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button:hover { 487 | -fx-background-color: red; 488 | -fx-cursor: hand; 489 | } 490 | 491 | .scroll-bar { 492 | -fx-background-color: #fafafa; 493 | -fx-background-radius: 0; 494 | -fx-block-increment: 50; 495 | } 496 | 497 | .corner { 498 | -fx-background-color: transparent; 499 | } 500 | 501 | .scroll-bar .decrement-button, .scroll-bar .decrement-arrow { 502 | visibility: hidden; 503 | -fx-pref-height: 1; 504 | -fx-pref-width: 1; 505 | } 506 | 507 | .scroll-bar .increment-button, .scroll-bar .increment-arrow { 508 | visibility: hidden; 509 | -fx-pref-height: 1; 510 | -fx-pref-width: 1; 511 | } 512 | 513 | .scroll-bar:vertical { 514 | -fx-pref-width: 10; 515 | } 516 | 517 | .scroll-bar:horizontal { 518 | -fx-pref-height: 10; 519 | } 520 | 521 | .scroll-bar:horizontal .track, 522 | .scroll-bar:vertical .track { 523 | -fx-background-color: transparent; 524 | -fx-border-color: transparent; 525 | -fx-background-radius: 5; 526 | } 527 | 528 | .scroll-bar:vertical .track-background, 529 | .scroll-bar:horizontal .track-background { 530 | -fx-background-color: transparent; 531 | -fx-background-insets: 0; 532 | -fx-background-radius: 5; 533 | } 534 | 535 | .scroll-bar:horizontal .thumb { 536 | -fx-background-color: #c9c9c9; 537 | -fx-background-insets: 2 0 2 0; 538 | -fx-background-radius: 5; 539 | } 540 | 541 | .scroll-bar:vertical .thumb { 542 | -fx-background-color: #c9c9c9; 543 | -fx-background-insets: 0 2 0 2; 544 | -fx-background-radius: 5; 545 | } 546 | 547 | .scroll-bar:horizontal .thumb:hover, 548 | .scroll-bar:vertical .thumb:hover { 549 | -fx-background-color: #b5b5b5; 550 | } 551 | 552 | .scroll-bar:horizontal .thumb:pressed, 553 | .scroll-bar:vertical .thumb:pressed { 554 | -fx-background-color: #a0a0a0; 555 | } 556 | 557 | .scroll-bar:vertical .increment-button, .scroll-bar:vertical .decrement-button { 558 | -fx-background-color: transparent; 559 | -fx-background-radius: 5; 560 | -fx-padding: 5; 561 | } 562 | 563 | .scroll-bar:horizontal .increment-button, .scroll-bar:horizontal .decrement-button { 564 | -fx-background-color: transparent; 565 | -fx-background-radius: 5; 566 | -fx-padding: 5; 567 | } 568 | 569 | .scroll-bar:vertical:focused, 570 | .scroll-bar:horizontal:focused { 571 | -fx-background-color: transparent, rgb(96, 96, 96), rgb(96, 96, 96); 572 | } 573 | 574 | .menu-bar { 575 | -fx-background-color: white; 576 | } 577 | .menu-bar > .container > .menu-button { 578 | -fx-background-radius: 0; 579 | -fx-background-insets: 0; 580 | -fx-border-width: 0; 581 | -fx-border-radius: 0; 582 | -fx-background-color: white; 583 | } 584 | .menu-bar > .container > .menu-button:hover, 585 | .menu-bar > .container > .menu-button:showing { 586 | -fx-background-color: linear-gradient(to bottom, #0087cb, #0077b3); 587 | } 588 | 589 | .color-palette { 590 | -fx-background-color: white; 591 | } 592 | 593 | .pagination > .pagination-control > .control-box { 594 | -fx-spacing: -1; 595 | } 596 | .pagination > .pagination-control > .control-box > .left-arrow-button { 597 | -fx-border-radius: 3 0 0 3; 598 | -fx-border-insets: 0 0 0 7; 599 | -fx-background-insets: 0 0 0 7, 0 0 0 5, 1 1 1 6, 2 2 2 7; 600 | } 601 | .pagination > .pagination-control > .control-box > .right-arrow-button { 602 | -fx-border-radius: 0 3 3 0; 603 | -fx-border-insets: 0 7 0 0; 604 | -fx-background-insets: 0 7 -1 0, 0 5 0 0, 1 6 1 1, 2 7 2 2; 605 | } 606 | .pagination > .pagination-control > .control-box > .number-button { 607 | -fx-background-radius: 0; 608 | -fx-border-radius: 0; 609 | } 610 | 611 | .progress-bar > .track { 612 | -fx-pref-height: 10; 613 | -fx-background-radius: 3; 614 | -fx-border-radius: 3; 615 | -fx-effect: innershadow(gaussian, #e4e4e4, 4, 0, 0, 1); 616 | -fx-background-color: #f5f5f5; 617 | -fx-border-color: #f5f5f5; 618 | } 619 | 620 | .progress-bar > .bar { 621 | -fx-background-insets: 0; 622 | -fx-background-color: linear-gradient(to bottom, #149ade, #0582c0); 623 | -fx-border-color: transparent transparent #046ea3 transparent; 624 | -fx-border-radius: 3; 625 | } 626 | 627 | .progress-bar.success > .bar { 628 | -fx-background-insets: 0; 629 | -fx-background-color: linear-gradient(to bottom, #61c361, #58ab58); 630 | -fx-border-color: transparent transparent #4a904a transparent; 631 | } 632 | 633 | .progress-bar.info > .bar { 634 | -fx-background-insets: 0; 635 | -fx-background-color: linear-gradient(to bottom, #5ac0de, #369ebc); 636 | -fx-border-color: transparent transparent #2c859e transparent; 637 | } 638 | 639 | .progress-bar.warning > .bar { 640 | -fx-background-insets: 0; 641 | -fx-background-color: linear-gradient(to bottom, #fbb34e, #f8960a); 642 | -fx-border-color: transparent transparent #d37f07 transparent; 643 | } 644 | 645 | .progress-bar.danger > .bar { 646 | -fx-background-insets: 0; 647 | -fx-background-color: linear-gradient(to bottom, #ed5e5a, #c73e38); 648 | -fx-border-color: transparent transparent #a7332d transparent; 649 | } 650 | 651 | .tooltip { 652 | -fx-background: white; 653 | -fx-text-fill: #333333; 654 | -fx-background-color: white; 655 | -fx-background-radius: 4px; 656 | -fx-border-radius: 4px; 657 | -fx-border-color: #C0C0C0; 658 | -fx-background-insets: 0; 659 | -fx-padding: 0.667em 0.75em 0.667em 0.75em; /* 10px */ 660 | -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.5), 10, 0.0, 0, 3); 661 | -fx-font-size: 0.85em; 662 | } 663 | 664 | .tooltip.success { 665 | -fx-background: #dff0d8; 666 | -fx-background-color: #dff0d8; 667 | -fx-text-fill: #99bb96; 668 | -fx-border-color: #d6e9c6; 669 | } 670 | 671 | .tooltip.info { 672 | -fx-background: #d8ecf6; 673 | -fx-background-color: #d8ecf6; 674 | -fx-text-fill: #31708f; 675 | -fx-border-color: #bce8f1; 676 | } 677 | 678 | .tooltip.warning { 679 | -fx-background: #fcf8e3; 680 | -fx-background-color: #fcf8e3; 681 | -fx-text-fill: #8a6e3c; 682 | -fx-border-color: #faebcc; 683 | } 684 | 685 | .tooltip.danger { 686 | -fx-background: #f2dede; 687 | -fx-background-color: #f2dede; 688 | -fx-text-fill: #a94442; 689 | -fx-border-color: #ebccd1; 690 | } 691 | 692 | .titled-pane > .title { 693 | -fx-background-color: #f5f5f5; 694 | -fx-border-color: #dddddd; 695 | /*-fx-background-insets: 5, 1, 5;*/ 696 | -fx-background-radius: 3 3 0 0, 2 2 0 0, 1 1 0 0; 697 | -fx-border-radius: 3 3 0 0, 2 2 0 0, 1 1 0 0; 698 | -fx-padding: 11 699 | } 700 | 701 | .titled-pane > .content { 702 | -fx-background-color: white; 703 | -fx-background-radius: 0 0 4 4; 704 | -fx-border-radius: 0 0 4 4; 705 | -fx-border-color: #dddddd; 706 | /*-fx-padding: -11;*/ 707 | } 708 | 709 | .titled-pane.primary { 710 | -fx-text-fill: white; 711 | } 712 | 713 | .titled-pane.primary > .title { 714 | -fx-background-color: #337ab7; 715 | -fx-border-color: #337ab7; 716 | } 717 | 718 | .titled-pane.primary > .content { 719 | -fx-border-color: #337ab7; 720 | } 721 | 722 | .titled-pane.success .arrow, 723 | .titled-pane.info .arrow, 724 | .titled-pane.warning .arrow, 725 | .titled-pane.danger .arrow { 726 | -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; 727 | } 728 | 729 | .titled-pane.success { 730 | -fx-text-fill: #3c763d; 731 | } 732 | 733 | .titled-pane.success > .title { 734 | -fx-background-color: #dff0d8; 735 | -fx-border-color: #d6e9c6; 736 | } 737 | 738 | .titled-pane.success > .content { 739 | -fx-border-color: #d6e9c6; 740 | } 741 | 742 | .titled-pane.info { 743 | -fx-text-fill: #31708f; 744 | } 745 | 746 | .titled-pane.info > .title { 747 | -fx-background-color: #d9edf7; 748 | -fx-border-color: #bce8f1; 749 | } 750 | 751 | .titled-pane.info > .content { 752 | -fx-border-color: #bce8f1; 753 | } 754 | 755 | .titled-pane.warning { 756 | -fx-text-fill: #8a6d3b; 757 | } 758 | 759 | .titled-pane.warning > .title { 760 | -fx-background-color: #fcf8e3; 761 | -fx-border-color: #faebcc; 762 | } 763 | 764 | .titled-pane.warning > .content { 765 | -fx-border-color: #faebcc; 766 | } 767 | 768 | .titled-pane.danger { 769 | -fx-text-fill: #a94442; 770 | } 771 | 772 | .titled-pane.danger > .title { 773 | -fx-background-color: #f2dede; 774 | -fx-border-color: #eacbd0; 775 | } 776 | 777 | .titled-pane.danger > .content { 778 | -fx-border-color: #eacbd0; 779 | } 780 | 781 | .accordion > .titled-pane > .title, 782 | .accordion > .titled-pane > .content { 783 | -fx-background-radius: 0; 784 | -fx-border-radius: 0; 785 | } 786 | 787 | .tool-bar:vertical { /* left */ 788 | -fx-border-color: transparent #dddddd transparent transparent; 789 | } 790 | 791 | .tool-bar { /* top */ 792 | -fx-background-color: linear-gradient(to bottom,#fff,#e6e6e6); 793 | -fx-border-color: transparent transparent #dddddd transparent; 794 | } 795 | 796 | .tool-bar:vertical { 797 | -fx-background-color: linear-gradient(to right,#fff,#e6e6e6); 798 | -fx-background-insets: 0, 0 1 0 0; 799 | } 800 | 801 | /*table view columns*/ 802 | .filler,.column-header,.show-hide-columns-button { 803 | -fx-background-color: #dddddd, white, white; 804 | } 805 | .show-hide-columns-button { 806 | -fx-border-width: 0; 807 | -fx-background-insets: 0 0 1 1; 808 | } 809 | .column-header:hover,.show-hide-columns-button:hover { 810 | -fx-background-color: #dddddd, white, #f8f8f8; 811 | } 812 | .column-header-background > .filler { 813 | -fx-border-color: transparent #dddddd transparent transparent; 814 | -fx-border-insets: 0 1 0 0; 815 | } 816 | .column-drag-header { 817 | -fx-background-color: #2fb254; 818 | } 819 | 820 | /*split pane*/ 821 | .split-pane > .split-pane-divider { 822 | -fx-background-color: white; 823 | -fx-border-color: #eeeeee; 824 | -fx-pref-width: 8; 825 | } 826 | .split-pane:horizontal > .split-pane-divider { 827 | -fx-background-insets: 0, 0 1 0 1; 828 | -fx-border-width: 0 1 0 1; 829 | } 830 | /* vertical the two nodes are placed on top of each other. */ 831 | .split-pane:vertical > .split-pane-divider { 832 | -fx-background-insets: 0, 1 0 1 0; 833 | -fx-border-width: 1 0 1 0; 834 | } 835 | .split-pane > .split-pane-divider:hover { 836 | -fx-background-color: #E0E0E0; 837 | } 838 | 839 | /******************************************************************************* 840 | * * 841 | * CheckBox * 842 | * * 843 | ******************************************************************************/ 844 | .check-box > .box { 845 | -fx-background-radius: 3; 846 | /*-fx-padding: 0.166667em 0.166667em 0.25em 0.25em; !* 2 2 3 3 *!*/ 847 | -fx-padding:0; 848 | -fx-border-color: #0087cb; 849 | -fx-border-radius: 3; 850 | -fx-background-color: linear-gradient(to bottom, white, #e6e6e6); 851 | } 852 | .check-box > .box > .mark { 853 | -fx-background-color: null; 854 | -fx-padding: 0.416667em 0.416667em 0.5em 0.5em; /* 5 5 6 6 */ 855 | -fx-shape: "M927.936 272.992l-68.288-68.288c-12.608-12.576-32.96-12.576-45.536 0l-409.44 409.44-194.752-196.16c-12.576-12.576-32.928-12.576-45.536 0l-68.288 68.288c-12.576 12.608-12.576 32.96 0 45.536l285.568 287.488c12.576 12.576 32.96 12.576 45.536 0l500.736-500.768c12.576-12.544 12.576-32.96 0-45.536z"; 856 | -fx-background-insets: -3 -3 1 0; 857 | } 858 | .check-box { 859 | -fx-label-padding: 0.2em 0.0em 0.3em 0.416667em; /* 0 0 0 5 */ 860 | -fx-text-fill: -fx-text-background-color; 861 | -fx-padding: 0 0 2 0; 862 | } 863 | .check-box:indeterminate > .box { 864 | -fx-padding: 0; 865 | } 866 | .check-box:selected > .box > .mark { 867 | -fx-background-color: linear-gradient(to bottom, #0087cb, #0077b3); 868 | } 869 | 870 | /******************************************************************************* 871 | * * 872 | * RadioButton * 873 | * * 874 | ******************************************************************************/ 875 | 876 | .radio-button { 877 | -fx-label-padding: 0.0em 0.0em 0.1em 0.416667em; /* 0 0 0 5 */ 878 | -fx-text-fill: -fx-text-background-color; 879 | -fx-padding: 0 0 .5 0; 880 | } 881 | .radio-button > .radio, 882 | .radio-button:focused > .radio { 883 | -fx-border-color: #0087cb; 884 | -fx-border-radius: 1em; 885 | -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ 886 | -fx-padding: 1 2 3 2; 887 | -fx-background-color: linear-gradient(to bottom, white, #e6e6e6); 888 | } 889 | .radio-button > .radio > .dot { 890 | -fx-background-color: transparent; 891 | -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ 892 | -fx-padding: 0.333333em; /* 4 -- radius of the inner black dot when selected */ 893 | -fx-background-insets: 3 2 1 2; 894 | } 895 | .radio-button:selected > .radio,.radio-button:hover > .radio { 896 | -fx-fill-color: #0087cb; 897 | } 898 | .radio-button:pressed > .radio { 899 | -fx-background-color: #0087cb; 900 | } 901 | .radio-button:selected > .radio > .dot { 902 | -fx-background-color: #0087cb; 903 | } 904 | 905 | /*common things*/ 906 | .check-box:hover > .box, 907 | .check-box:selected > .box, 908 | .radio-button:hover > .radio, 909 | .radio-button:selected > .radio { 910 | -fx-background-color: linear-gradient(to bottom, white, #e6e6e6); 911 | } 912 | 913 | .check-box:pressed > .box, 914 | .radio-button:pressed > .radio { 915 | -fx-background-color: #0087cb; 916 | } 917 | 918 | /******************************************************************************* 919 | * * 920 | * Slider * 921 | * * 922 | ******************************************************************************/ 923 | 924 | .slider .thumb { 925 | -fx-background-color: #dad9da, white, #3fbadf; 926 | -fx-background-insets: 0, 1, 5; 927 | -fx-effect: dropshadow(two-pass-box , rgba(0, 0, 0, 0.2), 5, 0.0 , 0, 0); 928 | } 929 | .slider .thumb:hover { 930 | -fx-effect: dropshadow(two-pass-box , rgba(0, 0, 0, 0.4), 5, 0.0 , 0, 0); 931 | } 932 | .slider .track { 933 | -fx-background-color: #dad9da, white; 934 | -fx-background-insets: -1, 0, 1; 935 | -fx-pref-height: 5; 936 | } 937 | .slider:vertical .track { 938 | -fx-pref-width: 5; 939 | } 940 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 92 | 97 | 98 | 99 | 104 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks_advanced.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 63 | 68 | 73 | 78 | 83 | 88 | 93 | 98 | 103 | 108 | 113 | 118 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks_advanced/fence.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 92 | 93 | 94 | 99 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks_advanced/oriented.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 59 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 94 | 95 | 96 | 101 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 140 | 145 | 150 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks_advanced/pressure_plate.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 92 | 93 | 94 | 99 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /src/main/resources/fxml/blocks_advanced/slab.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 62 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 97 | 98 | 99 | 104 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /src/main/resources/fxml/items.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 95 | 96 | 97 | 102 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /src/main/resources/fxml/main.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 54 | 65 | 66 | 67 | 68 | 69 | 70 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /src/main/resources/fxml/modinfo.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 70 | 75 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 92 | 97 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 130 | 135 | 140 | 145 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 162 | 163 | 164 | 169 | 170 | 171 | 172 | 173 | 174 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | --------------------------------------------------------------------------------