diff --git a/build.gradle b/build.gradle index 8c4200a..72ae8b2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,246 +1,246 @@ -import groovy.json.JsonOutput - -def mainVersion = "1.7" -def buildNumber = "33" - -// For those who want the bleeding edge -buildscript { - repositories { - jcenter() - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" - } - } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - } -} -apply plugin: 'net.minecraftforge.gradle.forge' - -/* -// for people who want stable - not yet functional for MC 1.8.8 - we require the forgegradle 2.1 snapshot -plugins { - id "net.minecraftforge.gradle.forge" version "2.0.2" -} -*/ -version = "${mainVersion}-${buildNumber}" -group= "malte0811" -archivesBaseName = "IndustrialWires" - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -minecraft { - version = "1.12.2-14.23.5.2768" - runDir = "run" - - replace '${version}', project.version - mappings = "stable_39" -} - -repositories { - maven { - name 'ic2' - url 'http://maven.ic2.player.to/' - } - maven { - name 'tr' - url 'http://maven.modmuss50.me' - } - maven { - name 'jared maven' - url 'http://blamejared.com/maven' - } - maven { // Albedo/Mirage Lights - url 'https://repo.elytradev.com/' - } - maven { // JEI & Tinkers - name 'DVS1 Maven FS' - url 'http://dvs1.progwml6.com/files/maven' - } - // dependencies of TR... - maven { - - url 'http://maven.mcmoddev.com' - } - maven { - // HWYLA - name "TehNut" - url "http://tehnut.info/maven/" - } - repositories {//Curseforge maven for project red - maven { - name = "CurseForge" - url = "https://minecraft.curseforge.com/api/maven/" - } - } - maven { - name = "chickenbones" - url = "http://chickenbones.net/maven" - } -} - -dependencies { - deobfCompile 'net.industrial-craft:industrialcraft-2:2.8.+' - deobfCompile "blusunrize:ImmersiveEngineering:0.12-+" - compileOnly "pl.asie.charset:charset:0.5.4.2.3:full" - //Project red and runtime dependencies - compileOnly "project-red-base:ProjectRed-1.12.2:4.9.1.92:Base" - //runtime "project-red-integration:ProjectRed-1.12.2:4.9.1.92:integration" - //runtime "forge-multipart-cbe:ForgeMultipart-1.12.2:2.5.0.69:universal" - //runtime "codechicken:CodeChickenLib:1.12.2-3.2.1.349:universal" - //runtime "codechicken:ChickenASM:1.12-1.0.2.7" - //runtime "mrtjpcore:MrTJPCore-1.12.2:2.1.3.35:universal" - //Tech Reborn - compileOnly "TechReborn:TechReborn-1.12:2.6.9.7:universal" - compileOnly "RebornCore:RebornCore-1.12:3.2.+:universal" - //Others - compileOnly 'com.elytradev:mirage:2.0.1-SNAPSHOT' - compileOnly "mezz.jei:jei_1.12:4.+" - compileOnly "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.8.460" - -} - -jar { - from 'LICENSE' - manifest { - attributes 'Maven-Artifact': group+':'+archivesBaseName+':'+version - attributes "FMLAT": "industrialwires_at.cfg" - } -} - -task signMain(type: SignJar) { - onlyIf { - project.hasProperty('keyStore') - } - dependsOn reobfJar - if (project.hasProperty('keyStore')) { - keyStore = project.keyStore - alias = project.storeAlias - storePass = project.storePass - keyPass = project.storePass - inputFile = jar.archivePath - outputFile = jar.archivePath - } -} - -build.dependsOn signMain - -processResources -{ - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version':project.version, 'mcversion':project.minecraft.version - } - - // copy everything else, thats not the mcmod.info - from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' - } -} - -//Code for automatic update JSON generation -class GenerateUpdateJSON extends DefaultTask { - static def IW_VERSION_PREFIX = "####Version " - static def MC_VERSION_PREFIX = "###Minecraft " - static def UNFINISHED_SUFFIX = " - UNFINISHED" - static def RECOMMENDED = "-recommended" - static def LATEST = "-latest" - static def CF_URL = "https://minecraft.curseforge.com/projects/industrial-wires" - - int compareVersions(String vA, String vB) { - String[] vPartsA = vA.split("[\\D]") - String[] vPartsB = vB.split("[\\D]") - if (vPartsA.length==0&&vPartsB.length==0) - return vA <=> vB - else if (vPartsA.length==0) - return -1 - else if (vPartsB.length==0) - return 1 - - int length = Math.min(vPartsA.length, vPartsB.length) - for (int i = 0;ipB - } - } - if (vPartsA.length != vPartsB.length) - return vPartsA.length <=> vPartsB.length - return vA <=> vB - } - - def addChangelog(Map> changelogForVersions, Map promos, - String currentMCVersion, String currentVersion, String currentChangelog) { - if (!changelogForVersions.containsKey(currentMCVersion)) { - promos.put(currentMCVersion+RECOMMENDED, currentVersion) - promos.put(currentMCVersion+LATEST, currentVersion) - changelogForVersions[currentMCVersion] = new TreeMap<>({String s1, String s2-> - compareVersions(s1, s2)}) - } - changelogForVersions[currentMCVersion][currentVersion] = currentChangelog - } - - @TaskAction - def generate() { - File changelog = new File("changelog.md") - if (!changelog.exists()) - println "Changelog does not exist! Aborting!" - else { - String currentMCVersion = ""; - Map> changelogForVersions = new HashMap<>() - Map promos = new TreeMap<>({String s1, String s2-> - compareVersions(s1, s2)}) - String currentVersion = null - String currentChangelog = "" - changelog.eachLine {line -> - if (line.startsWith(IW_VERSION_PREFIX)) { - if (currentVersion!=null) { - addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog) - } - if (!line.endsWith(UNFINISHED_SUFFIX)) { - currentVersion = line.substring(IW_VERSION_PREFIX.length()) - } else { - currentVersion = (String) null - } - currentChangelog = "" - } else if (line.startsWith(MC_VERSION_PREFIX)) { - if (currentVersion!=null) { - addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog) - } - currentChangelog = "" - currentVersion = (String) null - currentMCVersion = line.substring(MC_VERSION_PREFIX.length()) - } else if (!line.isEmpty()) { - if (currentChangelog.length()==0) - currentChangelog += line - else - currentChangelog += "\n"+line - } - } - Map mainMap = new TreeMap<>({String s1, String s2-> - compareVersions(s1, s2)}) - mainMap.putAll(changelogForVersions) - mainMap["homepage"] = CF_URL - mainMap["promos"] = promos - def outJson = JsonOutput.toJson(mainMap) - outJson = JsonOutput.prettyPrint(outJson) - File outF = new File("changelog.json") - outF.delete() - outF << outJson - } - } -} - -task updateJson(type: GenerateUpdateJSON) - -build.finalizedBy updateJson +import groovy.json.JsonOutput + +def mainVersion = "1.7" +def buildNumber = "34" + +// For those who want the bleeding edge +buildscript { + repositories { + jcenter() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' + } +} +apply plugin: 'net.minecraftforge.gradle.forge' + +/* +// for people who want stable - not yet functional for MC 1.8.8 - we require the forgegradle 2.1 snapshot +plugins { + id "net.minecraftforge.gradle.forge" version "2.0.2" +} +*/ +version = "${mainVersion}-${buildNumber}" +group= "malte0811" +archivesBaseName = "IndustrialWires" + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +minecraft { + version = "1.12.2-14.23.5.2768" + runDir = "run" + + replace '${version}', project.version + mappings = "stable_39" +} + +repositories { + maven { + name 'ic2' + url 'http://maven.ic2.player.to/' + } + maven { + name 'tr' + url 'http://maven.modmuss50.me' + } + maven { + name 'jared maven' + url 'http://blamejared.com/maven' + } + maven { // Albedo/Mirage Lights + url 'https://repo.elytradev.com/' + } + maven { // JEI & Tinkers + name 'DVS1 Maven FS' + url 'http://dvs1.progwml6.com/files/maven' + } + // dependencies of TR... + maven { + + url 'http://maven.mcmoddev.com' + } + maven { + // HWYLA + name "TehNut" + url "http://tehnut.info/maven/" + } + repositories {//Curseforge maven for project red + maven { + name = "CurseForge" + url = "https://minecraft.curseforge.com/api/maven/" + } + } + maven { + name = "chickenbones" + url = "http://chickenbones.net/maven" + } +} + +dependencies { + deobfCompile 'net.industrial-craft:industrialcraft-2:2.8.+' + deobfCompile "blusunrize:ImmersiveEngineering:0.12-+" + compileOnly "pl.asie.charset:charset:0.5.4.2.3:full" + //Project red and runtime dependencies + compileOnly "project-red-base:ProjectRed-1.12.2:4.9.1.92:Base" + //runtime "project-red-integration:ProjectRed-1.12.2:4.9.1.92:integration" + //runtime "forge-multipart-cbe:ForgeMultipart-1.12.2:2.5.0.69:universal" + //runtime "codechicken:CodeChickenLib:1.12.2-3.2.1.349:universal" + //runtime "codechicken:ChickenASM:1.12-1.0.2.7" + //runtime "mrtjpcore:MrTJPCore-1.12.2:2.1.3.35:universal" + //Tech Reborn + compileOnly "TechReborn:TechReborn-1.12:2.6.9.7:universal" + compileOnly "RebornCore:RebornCore-1.12:3.2.+:universal" + //Others + compileOnly 'com.elytradev:mirage:2.0.1-SNAPSHOT' + compileOnly "mezz.jei:jei_1.12:4.+" + compileOnly "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.8.460" + +} + +jar { + from 'LICENSE' + manifest { + attributes 'Maven-Artifact': group+':'+archivesBaseName+':'+version + attributes "FMLAT": "industrialwires_at.cfg" + } +} + +task signMain(type: SignJar) { + onlyIf { + project.hasProperty('keyStore') + } + dependsOn reobfJar + if (project.hasProperty('keyStore')) { + keyStore = project.keyStore + alias = project.storeAlias + storePass = project.storePass + keyPass = project.storePass + inputFile = jar.archivePath + outputFile = jar.archivePath + } +} + +build.dependsOn signMain + +processResources +{ + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } +} + +//Code for automatic update JSON generation +class GenerateUpdateJSON extends DefaultTask { + static def IW_VERSION_PREFIX = "####Version " + static def MC_VERSION_PREFIX = "###Minecraft " + static def UNFINISHED_SUFFIX = " - UNFINISHED" + static def RECOMMENDED = "-recommended" + static def LATEST = "-latest" + static def CF_URL = "https://minecraft.curseforge.com/projects/industrial-wires" + + int compareVersions(String vA, String vB) { + String[] vPartsA = vA.split("[\\D]") + String[] vPartsB = vB.split("[\\D]") + if (vPartsA.length==0&&vPartsB.length==0) + return vA <=> vB + else if (vPartsA.length==0) + return -1 + else if (vPartsB.length==0) + return 1 + + int length = Math.min(vPartsA.length, vPartsB.length) + for (int i = 0;ipB + } + } + if (vPartsA.length != vPartsB.length) + return vPartsA.length <=> vPartsB.length + return vA <=> vB + } + + def addChangelog(Map> changelogForVersions, Map promos, + String currentMCVersion, String currentVersion, String currentChangelog) { + if (!changelogForVersions.containsKey(currentMCVersion)) { + promos.put(currentMCVersion+RECOMMENDED, currentVersion) + promos.put(currentMCVersion+LATEST, currentVersion) + changelogForVersions[currentMCVersion] = new TreeMap<>({String s1, String s2-> + compareVersions(s1, s2)}) + } + changelogForVersions[currentMCVersion][currentVersion] = currentChangelog + } + + @TaskAction + def generate() { + File changelog = new File("changelog.md") + if (!changelog.exists()) + println "Changelog does not exist! Aborting!" + else { + String currentMCVersion = ""; + Map> changelogForVersions = new HashMap<>() + Map promos = new TreeMap<>({String s1, String s2-> + compareVersions(s1, s2)}) + String currentVersion = null + String currentChangelog = "" + changelog.eachLine {line -> + if (line.startsWith(IW_VERSION_PREFIX)) { + if (currentVersion!=null) { + addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog) + } + if (!line.endsWith(UNFINISHED_SUFFIX)) { + currentVersion = line.substring(IW_VERSION_PREFIX.length()) + } else { + currentVersion = (String) null + } + currentChangelog = "" + } else if (line.startsWith(MC_VERSION_PREFIX)) { + if (currentVersion!=null) { + addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog) + } + currentChangelog = "" + currentVersion = (String) null + currentMCVersion = line.substring(MC_VERSION_PREFIX.length()) + } else if (!line.isEmpty()) { + if (currentChangelog.length()==0) + currentChangelog += line + else + currentChangelog += "\n"+line + } + } + Map mainMap = new TreeMap<>({String s1, String s2-> + compareVersions(s1, s2)}) + mainMap.putAll(changelogForVersions) + mainMap["homepage"] = CF_URL + mainMap["promos"] = promos + def outJson = JsonOutput.toJson(mainMap) + outJson = JsonOutput.prettyPrint(outJson) + File outF = new File("changelog.json") + outF.delete() + outF << outJson + } + } +} + +task updateJson(type: GenerateUpdateJSON) + +build.finalizedBy updateJson diff --git a/changelog.json b/changelog.json index 97b1764..df57049 100644 --- a/changelog.json +++ b/changelog.json @@ -5,8 +5,8 @@ "1.10.2-recommended": "1.4-18", "1.11.2-latest": "1.5-19", "1.11.2-recommended": "1.5-19", - "1.12.2-latest": "1.7-33", - "1.12.2-recommended": "1.7-33" + "1.12.2-latest": "1.7-34", + "1.12.2-recommended": "1.7-34" }, "1.10.2": { "1.1-3": " - fixed incompatibility with IE build 48\n - reduced the amount of calls to core IE classes to make such incompatibilities less likely\n - fixed localization of the creative tab", @@ -43,6 +43,7 @@ "1.7-30": " - Fixed crashes when IC2 isn't installed\n - Fixed connectors allowing too much power output\n - Added a config option for some of the wires' properties\n - Updated chinese translation (thanks @DepletedPrism)", "1.7-31": " - Fixed accidental conversion from FE to EU\n - Fixed connectors not blowing up as intended\n ", "1.7-32": " - Fixed connectors not rendering properly without IC2\n - Fixed parts of the mechanical multiblocks not rendering when Optifine is installed\n - Changed some values for the mechanical multiblock sound", - "1.7-33": " - Fixed the Marx generator not processing ores\n - Fixed control panels and the Marx generator not working when connected directly\n - Added Russian translation (thanks @StolenSoda)" + "1.7-33": " - Fixed the Marx generator not processing ores\n - Fixed control panels and the Marx generator not working when connected directly\n - Added Russian translation (thanks @StolenSoda)", + "1.7-34": " - Control panels can use the texture of any block now\n - Added a recipe to copy the settings of an unfinished control panel\n - The Marx generator now returns the wires used in its construction when disassembled\n - Fixed the RS controller for non-IE wires not keeping its IO state on world reload\n - Fixed control panels not working correctly with multiple controllers" } } \ No newline at end of file diff --git a/changelog.md b/changelog.md index 1151620..83d43b0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ ###Minecraft 1.12.2 +####Version 1.7-34 + - Control panels can use the texture of any block now + - Added a recipe to copy the settings of an unfinished control panel + - The Marx generator now returns the wires used in its construction when disassembled + - Fixed the RS controller for non-IE wires not keeping its IO state on world reload + - Fixed control panels not working correctly with multiple controllers + ####Version 1.7-33 - Fixed the Marx generator not processing ores - Fixed control panels and the Marx generator not working when connected directly diff --git a/src/main/java/malte0811/industrialwires/client/ClientProxy.java b/src/main/java/malte0811/industrialwires/client/ClientProxy.java index ad65169..c552f81 100644 --- a/src/main/java/malte0811/industrialwires/client/ClientProxy.java +++ b/src/main/java/malte0811/industrialwires/client/ClientProxy.java @@ -42,6 +42,7 @@ import malte0811.industrialwires.client.manual.TextSplitter; import malte0811.industrialwires.client.multiblock_io_model.MBIOModelLoader; import malte0811.industrialwires.client.panelmodel.PanelModelLoader; import malte0811.industrialwires.client.render.*; +import malte0811.industrialwires.compat.Compat; import malte0811.industrialwires.controlpanel.PanelComponent; import malte0811.industrialwires.crafting.IC2TRHelper; import malte0811.industrialwires.entities.EntityBrokenPart; @@ -190,22 +191,24 @@ public class ClientProxy extends CommonProxy { new ManualPages.Text(m, "industrialwires.jacobs1")); + String text = I18n.format("ie.manual.entry.industrialwires.intro"); + splitter = new TextSplitter(m); + splitter.addSpecialPage(0, 0, 9, s -> new ManualPages.Crafting(m, s, + new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.DUMMY.ordinal()))); + splitter.addSpecialPage(1, 0, 9, s -> new ManualPages.Crafting(m, s, + new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.UNFINISHED.ordinal()))); + splitter.split(text); m.addEntry("industrialwires.intro", "control_panels", - new ManualPages.Text(m, "industrialwires.intro0"), - new ManualPages.Text(m, "industrialwires.intro1"), - new ManualPages.Crafting(m, "industrialwires.intro2", new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.DUMMY.ordinal())), - new ManualPages.Text(m, "industrialwires.intro3"), - new ManualPages.Crafting(m, "industrialwires.intro4", new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.UNFINISHED.ordinal())), - new ManualPages.Text(m, "industrialwires.intro5") + splitter.toManualEntry().toArray(new IManualPage[0]) ); m.addEntry("industrialwires.panel_creator", "control_panels", new ManualPages.Crafting(m, "industrialwires.panel_creator0", new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.CREATOR.ordinal())), new ManualPages.Text(m, "industrialwires.panel_creator1"), new ManualPages.Text(m, "industrialwires.panel_creator2") ); - String text = I18n.format("ie.manual.entry.industrialwires.redstone"); + text = I18n.format("ie.manual.entry.industrialwires.redstone"); splitter = new TextSplitter(m); - splitter.addSpecialPage(-1, 0, 10, s -> new ManualPages.CraftingMulti(m, s, + splitter.addSpecialPage(-1, 0, Compat.enableOtherRS ? 9 : 12, s -> new ManualPages.CraftingMulti(m, s, new ResourceLocation(IndustrialWires.MODID, "control_panel_rs_other"), new ResourceLocation(IndustrialWires.MODID, "control_panel_rs_wire"))); splitter.split(text); diff --git a/src/main/resources/assets/industrialwires/lang/en_US.lang b/src/main/resources/assets/industrialwires/lang/en_US.lang index cc469cc..89472cf 100644 --- a/src/main/resources/assets/industrialwires/lang/en_US.lang +++ b/src/main/resources/assets/industrialwires/lang/en_US.lang @@ -167,12 +167,7 @@ ie.manual.entry.industrialwires.mech_mb_parts.commutator=<&4>The commutator ie.manual.entry.industrialwires.intro.name=Introduction ie.manual.entry.industrialwires.intro.subtext= -ie.manual.entry.industrialwires.intro0=Control Panels allow you to monitor and control a large amount of redstone signals using only a few blocks. Those signals can currently be connected using redstone wires and connectors.
Buttons, switches, indicator lights and other things that can be placed on a control panel are called §l(Panel) Components§r
To create a control panel you will need a Panel Creator, the individual components and an Unfinished Panel (which determines the shape of the -ie.manual.entry.industrialwires.intro1=panel). Each component is described in the entry "Panel Components". Right-clicking with a panel component opens up a GUI in which the properties of the component, like the redstone channel and ID or the color, can be configured. -ie.manual.entry.industrialwires.intro2=A §l(panel) network§r is formed by panel blocks connected to each other, directly or through other panel blocks. Panel blocks include the control panel itself, the panel connector and the Redstone Wire Controller. If multiple components in one network are configured to modify the same -ie.manual.entry.industrialwires.intro3=redstone signal, the resulting signal will be the highest of the individual signals. Having multiple components accepting the same signal on a network is valid as well. -ie.manual.entry.industrialwires.intro4=The §lUnfinished Control Panel§r is used as the casing of a control panel. It can be configured by putting it into an Engineer's Workbench. The slider labeled "Height" changes the height in the middle of the panel. The "Angle" slider changes the angle of the panel relative to the surface it is -ie.manual.entry.industrialwires.intro5=placed on, creating tilted panels. The sliders will automatically clamp to the highest/lowest angle/height the panel can have without being partially outside the block. The values might not visually clamp due to the way the Workbench works, closing and re-opening the GUI should fix this. +ie.manual.entry.industrialwires.intro=Control Panels allow you to monitor and control a large amount of redstone signals using only a few blocks. Those signals can currently be connected using redstone wires and connectors.
Buttons, switches, indicator lights and other things that can be placed on a control panel are called §l(Panel) Components§r
To create a control panel you will need a Panel Creator, the individual components and an Unfinished Panel (which determines the shape of the panel). Each component is described in the entry "Panel Components". Right-clicking with a panel component opens up a GUI in which the properties of the component, like the redstone channel and ID or the color, can be configured.<&0>A §l(panel) network§r is formed by panel blocks connected to each other, directly or through other panel blocks. Panel blocks include the control panel itself, the panel connector and the Redstone Wire Controller. If multiple components in one network are configured to modify the same redstone signal, the resulting signal will be the highest of the individual signals. Having multiple components accepting the same signal on a network is valid as well.<&1>The §lUnfinished Control Panel§r is used as the casing of a control panel. It can be configured by putting it into an Engineer's Workbench. The slider labeled "Height" changes the height in the middle of the panel. The "Angle" slider changes the angle of the panel relative to the surface it is placed on, creating tilted panels. The sliders will automatically clamp to the highest/lowest angle/height the panel can have without being partially outside the block. The values might not visually clamp due to the way the Workbench works, closing and re-opening the GUI should fix this.
The texture of the panel can be changed to the texture of most blocks by placing the unfinished panel in a crafting table with the block.
All settings (height, angle and texture) of an unfinished panel can be copied by placing it in a crafting table above another unfinished control panel. ie.manual.entry.industrialwires.panel_creator.name=Panel Creator ie.manual.entry.industrialwires.panel_creator.subtext=