From 675dd55e5c9153a78891c82a2308e1c92a39e4c1 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Sun, 25 Dec 2016 22:30:31 +0100 Subject: [PATCH 1/5] Update to latest snapshot + Minecraft 1.11 wrappers --- build.gradle | 16 ++- gradle.properties | 2 +- minecraft/.gitignore | 1 + minecraft/1.11/.gitignore | 17 +++ minecraft/1.11/build.gradle | 73 +++++++++++ minecraft/1.11/gradle.properties | 10 ++ .../wrapper/redstone/ComponentModule.java | 14 ++ .../v1_11/wrapper/redstone/NodeRedstone.java | 123 ++++++++++++++++++ .../v1_11/wrapper/redstone/RedstoneAPI.java | 40 ++++++ minecraft/1.7/build.gradle | 10 +- minecraft/1.7/gradle.properties | 2 +- .../wrapper}/redstone/ComponentModule.java | 3 +- .../v17/wrapper}/redstone/NodeRedstone.java | 3 +- .../v17/wrapper}/redstone/RedstoneAPI.java | 3 +- minecraft/1.8/build.gradle | 10 +- minecraft/1.8/gradle.properties | 4 +- .../wrapper}/redstone/ComponentModule.java | 3 +- .../v18/wrapper}/redstone/NodeRedstone.java | 3 +- .../v18/wrapper}/redstone/RedstoneAPI.java | 5 +- minecraft/build.gradle | 27 ++-- settings.gradle | 5 + 21 files changed, 341 insertions(+), 33 deletions(-) create mode 100644 minecraft/1.11/.gitignore create mode 100644 minecraft/1.11/build.gradle create mode 100644 minecraft/1.11/gradle.properties create mode 100644 minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java create mode 100644 minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java create mode 100644 minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java rename minecraft/1.7/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v17/wrapper}/redstone/ComponentModule.java (67%) rename minecraft/1.7/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v17/wrapper}/redstone/NodeRedstone.java (96%) rename minecraft/1.7/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v17/wrapper}/redstone/RedstoneAPI.java (93%) rename minecraft/1.8/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v18/wrapper}/redstone/ComponentModule.java (67%) rename minecraft/1.8/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v18/wrapper}/redstone/NodeRedstone.java (96%) mode change 100755 => 100644 rename minecraft/1.8/src/main/java/nova/minecraft/{ => wrapper/mc/forge/v18/wrapper}/redstone/RedstoneAPI.java (93%) mode change 100755 => 100644 diff --git a/build.gradle b/build.gradle index 5647551..b77ac59 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,10 @@ plugins { id "java" - id "nova.gradle" version "0.2.5" + id "nova.gradle" version "0.2.6" id "maven-publish" id "com.jfrog.artifactory" version "3.1.1" } - apply from: "https://raw.githubusercontent.com/NOVA-Team/NOVA-Gradle/master/shared-scripts/java.gradle" dependencies { @@ -15,13 +14,18 @@ dependencies { nova { wrappers { "17" { - wrapper "nova.core:NOVA-Core-Wrapper-MC1.7:$novaVersion" - runtime project(":minecraft:1.7") + wrapper "nova.core:NOVA-Core-Wrapper-MC1.7:$nova_version" + runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.7") } "18" { - wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$novaVersion" - runtime project(":minecraft:1.8") + wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$nova_version" + runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.8") + } + + "1_11" { + wrapper "nova.core:NOVA-Core-Wrapper-MC1.11:$nova_version" + runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.11") } } } diff --git a/gradle.properties b/gradle.properties index 0a47d26..1ab856d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ version = 0.0.1-SNAPSHOT group = nova.minecraft -novaVersion = 0.1.0-SNAPSHOT +nova_version = 0.1.0-SNAPSHOT packaging = jar info.inceptionYear = 2015 diff --git a/minecraft/.gitignore b/minecraft/.gitignore index a4c6e69..896c508 100644 --- a/minecraft/.gitignore +++ b/minecraft/.gitignore @@ -3,5 +3,6 @@ !/build.gradle !/.gitignore +!/1.11 !/1.8 !/1.7 diff --git a/minecraft/1.11/.gitignore b/minecraft/1.11/.gitignore new file mode 100644 index 0000000..85be317 --- /dev/null +++ b/minecraft/1.11/.gitignore @@ -0,0 +1,17 @@ +# Ignore All +/* + +# Sources +!/src + +# github +!/.gitignore +!/README.md + +# gradle +!/build.gradle +!/build.properties +!/settings.gradle +!/gradle.properties +!/gradlew* +!/gradle diff --git a/minecraft/1.11/build.gradle b/minecraft/1.11/build.gradle new file mode 100644 index 0000000..c182c23 --- /dev/null +++ b/minecraft/1.11/build.gradle @@ -0,0 +1,73 @@ +apply plugin: "maven-publish" +apply plugin: "com.jfrog.artifactory" +apply from: "https://raw.githubusercontent.com/NOVA-Team/NOVA-Gradle/master/shared-scripts/java.gradle" + +idea.module.name = "Minecraft-MC-1.11" +archivesBaseName = "NOVA-Minecraft-Wrapper-MC1.11" + +publishing { + publications { + main(MavenPublication) { + from components.java + + artifactId "NOVA-Minecraft-Wrapper-MC1.11" + + artifact sourcesJar + artifact javadocJar + + pom.withXml(writePom(project.properties)) + } + } +} + +artifactory { + publish { + defaults { + publications("main") + publishPom = true + } + } +} + +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'deobf' +} + +artifacts { + archives jar + archives deobfJar +} + +apply plugin: 'net.minecraftforge.gradle.forge' + +minecraft { + version = property("minecraft.version") + "-" + property("forge.version") + mappings = 'snapshot_20161111' + runDir = "run" +} + +dependencies { + compile rootProject + compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true + compile "nova.core:NOVA-Core-Wrapper-MC1.11:${nova_version}:deobf" +} + +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" + } +} diff --git a/minecraft/1.11/gradle.properties b/minecraft/1.11/gradle.properties new file mode 100644 index 0000000..39836aa --- /dev/null +++ b/minecraft/1.11/gradle.properties @@ -0,0 +1,10 @@ +group = nova.minecraft + +minecraft.version = 1.11 +forge.version = 13.19.1.2189 +forgeGradleVersion = 2.2-SNAPSHOT + +packaging = jar +info.inceptionYear = 2016 +info.description = The NOVA-Minecraft Minecraft 1.11 wrapper. +info.organization.name = NOVA diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java new file mode 100644 index 0000000..7abe0a2 --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java @@ -0,0 +1,14 @@ +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; + +import nova.minecraft.redstone.Redstone; +import se.jbee.inject.bind.BinderModule; + +/** + * @author Calclavia + */ +public class ComponentModule extends BinderModule { + @Override + protected void declare() { + bind(Redstone.class).to(NodeRedstone.class); + } +} diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java new file mode 100644 index 0000000..9ecc018 --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java @@ -0,0 +1,123 @@ +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import nova.core.block.Block; +import nova.core.wrapper.mc.forge.v1_11.wrapper.block.world.BWWorld; +import nova.minecraft.redstone.Redstone; + +import java.util.function.Consumer; +import java.util.stream.IntStream; + +/** + * A Minecraft implementation that wraps Redstone to a Node + * @author Calclavia + */ +//TODO: Create NodeVirtualRedstone (for MC blocks that are redstone, but don't implement NOVA) +public class NodeRedstone extends Redstone { + private boolean init = false; + private int inputStrongPower = 0; + private int inputWeakPower = 0; + private int[] inputSidedWeakPower = { 0, 0, 0, 0, 0, 0 }; + private int outputStrongPower = 0; + private int outputWeakPower = 0; + private Consumer onPowerChange = redstone -> { + }; + + private Block block() { + return (Block) getProvider(); + } + + @Override + public void onProviderChange() { + //Hook into the block's events. + getProvider().events.on(Block.NeighborChangeEvent.class).bind(evt -> recache()); + } + + @Override + public int getInputWeakPower() { + return inputWeakPower; + } + + @Override + public int getInputStrongPower() { + return inputStrongPower; + } + + @Override + public void onInputPowerChange(Consumer action) { + onPowerChange = action; + } + + @Override + public int getOutputStrongPower() { + if (!init) { + recache(); + } + return outputStrongPower; + } + + @Override + public void setOutputStrongPower(int power) { + outputStrongPower = power; + block().world().markChange(block().position()); + } + + @Override + public int getWeakPower(int side) { + if (!init) { + recache(); + } + return inputSidedWeakPower[side]; + } + + @Override + public int getOutputWeakPower() { + if (!init) { + recache(); + } + return outputWeakPower; + } + + @Override + public void setOutputWeakPower(int power) { + outputWeakPower = power; + block().world().markChange(block().position()); + } + + /** + * Recaches the Redstone state. + */ + public void recache() { + init = true; + boolean hasChanged = false; + + int newInputStrongPower = mcWorld().getStrongPower(new BlockPos(block().x(), block().y(), block().z())); + + if (inputStrongPower != newInputStrongPower) { + inputStrongPower = newInputStrongPower; + hasChanged = true; + } + + int newInputWeakPower = mcWorld().isBlockIndirectlyGettingPowered(new BlockPos(block().x(), block().y(), block().z())); + if (inputWeakPower != newInputWeakPower) { + inputWeakPower = newInputWeakPower; + hasChanged = true; + } + + int[] newInputSidedWeakPower = IntStream.range(0, 6).map(i -> mcWorld().getRedstonePower(new BlockPos(block().x(), block().y(), block().z()), EnumFacing.values()[i])).toArray(); + + if (inputSidedWeakPower != newInputSidedWeakPower) { + inputSidedWeakPower = newInputSidedWeakPower; + hasChanged = true; + } + + if (hasChanged) { + onPowerChange.accept(this); + } + } + + private net.minecraft.world.World mcWorld() { + return ((BWWorld) block().world()).world(); + } +} diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java new file mode 100644 index 0000000..d126525 --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java @@ -0,0 +1,40 @@ +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; + +import nova.core.block.Block; +import nova.core.event.bus.GlobalEvents; +import nova.core.loader.Loadable; +import nova.core.loader.Mod; +import nova.core.world.World; +import nova.core.wrapper.mc.forge.v1_11.util.WrapperEvent; +import nova.minecraft.redstone.Redstone; +import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; + +import java.util.Optional; + +/** + * The Minecraft native loader + * @author Calclavia + */ +@Mod(id = "redstone-minecraft", name = "Redstone Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class }) +public class RedstoneAPI implements Loadable { + + private final GlobalEvents events; + + public RedstoneAPI(GlobalEvents events) { + this.events = events; + } + + @Override + public void preInit() { + events.on(WrapperEvent.RedstoneConnect.class).bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position).map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); + + events.on(WrapperEvent.StrongRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); + + events.on(WrapperEvent.WeakRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); + } + + public Optional getRedstoneNode(World world, Vector3D pos) { + Optional blockOptional = world.getBlock(pos); + return blockOptional.flatMap(block -> block.components.getOp(Redstone.class)); + } +} \ No newline at end of file diff --git a/minecraft/1.7/build.gradle b/minecraft/1.7/build.gradle index 825a843..fe2b574 100644 --- a/minecraft/1.7/build.gradle +++ b/minecraft/1.7/build.gradle @@ -29,8 +29,14 @@ artifactory { } } +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'deobf' +} + artifacts { archives jar + archives deobfJar } apply plugin: "forge" @@ -42,8 +48,8 @@ minecraft { dependencies { compile rootProject - compile "nova.core:NOVA-Core:${property("nova.version")}" - compile "nova.core:NOVA-Core-Wrapper-MC1.7:${property("nova.version")}:deobf" + compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true + compile "nova.core:NOVA-Core-Wrapper-MC1.7:${nova_version}:deobf" } processResources { diff --git a/minecraft/1.7/gradle.properties b/minecraft/1.7/gradle.properties index c5f17d0..dd35b16 100644 --- a/minecraft/1.7/gradle.properties +++ b/minecraft/1.7/gradle.properties @@ -1,8 +1,8 @@ group = nova.minecraft -nova.version = 0.1.0-SNAPSHOT minecraft.version = 1.7.10 forge.version = 10.13.4.1448-1.7.10 +forgeGradleVersion = 1.2-SNAPSHOT packaging = jar info.inceptionYear = 2015 diff --git a/minecraft/1.7/src/main/java/nova/minecraft/redstone/ComponentModule.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java similarity index 67% rename from minecraft/1.7/src/main/java/nova/minecraft/redstone/ComponentModule.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java index c80b066..92dd354 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/redstone/ComponentModule.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java @@ -1,5 +1,6 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; +import nova.minecraft.redstone.Redstone; import se.jbee.inject.bind.BinderModule; /** diff --git a/minecraft/1.7/src/main/java/nova/minecraft/redstone/NodeRedstone.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java similarity index 96% rename from minecraft/1.7/src/main/java/nova/minecraft/redstone/NodeRedstone.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java index f2c6d34..ee2aaa5 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/redstone/NodeRedstone.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java @@ -1,7 +1,8 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; import nova.core.block.Block; import nova.core.wrapper.mc.forge.v17.wrapper.block.world.BWWorld; +import nova.minecraft.redstone.Redstone; import java.util.function.Consumer; import java.util.stream.IntStream; diff --git a/minecraft/1.7/src/main/java/nova/minecraft/redstone/RedstoneAPI.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java similarity index 93% rename from minecraft/1.7/src/main/java/nova/minecraft/redstone/RedstoneAPI.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java index a912298..8f4969b 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/redstone/RedstoneAPI.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java @@ -1,4 +1,4 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; @@ -6,6 +6,7 @@ import nova.core.loader.Mod; import nova.core.world.World; import nova.core.wrapper.mc.forge.v17.util.WrapperEvent; +import nova.minecraft.redstone.Redstone; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import java.util.Optional; diff --git a/minecraft/1.8/build.gradle b/minecraft/1.8/build.gradle index ffe343b..6ed6662 100644 --- a/minecraft/1.8/build.gradle +++ b/minecraft/1.8/build.gradle @@ -29,8 +29,14 @@ artifactory { } } +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'deobf' +} + artifacts { archives jar + archives deobfJar } apply plugin: "forge" @@ -43,8 +49,8 @@ minecraft { dependencies { compile rootProject - compile "nova.core:NOVA-Core:${property("nova.version")}" - compile "nova.core:NOVA-Core-Wrapper-MC1.8:${property("nova.version")}:deobf" + compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true + compile "nova.core:NOVA-Core-Wrapper-MC1.8:${nova_version}:deobf" } processResources { diff --git a/minecraft/1.8/gradle.properties b/minecraft/1.8/gradle.properties index d2e0861..41aec0a 100644 --- a/minecraft/1.8/gradle.properties +++ b/minecraft/1.8/gradle.properties @@ -1,8 +1,8 @@ group = nova.minecraft -nova.version = 0.1.0-SNAPSHOT minecraft.version = 1.8 -forge.version = 11.14.3.1446 +forge.version = 11.14.3.1491 +forgeGradleVersion = 1.2-SNAPSHOT packaging = jar info.inceptionYear = 2015 diff --git a/minecraft/1.8/src/main/java/nova/minecraft/redstone/ComponentModule.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java similarity index 67% rename from minecraft/1.8/src/main/java/nova/minecraft/redstone/ComponentModule.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java index c80b066..05eaea6 100644 --- a/minecraft/1.8/src/main/java/nova/minecraft/redstone/ComponentModule.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java @@ -1,5 +1,6 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; +import nova.minecraft.redstone.Redstone; import se.jbee.inject.bind.BinderModule; /** diff --git a/minecraft/1.8/src/main/java/nova/minecraft/redstone/NodeRedstone.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java old mode 100755 new mode 100644 similarity index 96% rename from minecraft/1.8/src/main/java/nova/minecraft/redstone/NodeRedstone.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java index 0f27f84..9fd62bc --- a/minecraft/1.8/src/main/java/nova/minecraft/redstone/NodeRedstone.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java @@ -1,9 +1,10 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import nova.core.block.Block; import nova.core.wrapper.mc.forge.v18.wrapper.block.world.BWWorld; +import nova.minecraft.redstone.Redstone; import java.util.function.Consumer; import java.util.stream.IntStream; diff --git a/minecraft/1.8/src/main/java/nova/minecraft/redstone/RedstoneAPI.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java old mode 100755 new mode 100644 similarity index 93% rename from minecraft/1.8/src/main/java/nova/minecraft/redstone/RedstoneAPI.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java index d36f9b7..84e6de2 --- a/minecraft/1.8/src/main/java/nova/minecraft/redstone/RedstoneAPI.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java @@ -1,4 +1,4 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; @@ -6,6 +6,7 @@ import nova.core.loader.Mod; import nova.core.world.World; import nova.core.wrapper.mc.forge.v18.util.WrapperEvent; +import nova.minecraft.redstone.Redstone; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import java.util.Optional; @@ -36,4 +37,4 @@ public Optional getRedstoneNode(World world, Vector3D pos) { Optional blockOptional = world.getBlock(pos); return blockOptional.flatMap(block -> block.components.getOp(Redstone.class)); } -} \ No newline at end of file +} diff --git a/minecraft/build.gradle b/minecraft/build.gradle index 2f4e064..905f27d 100644 --- a/minecraft/build.gradle +++ b/minecraft/build.gradle @@ -1,16 +1,19 @@ -buildscript{ - repositories{ - mavenCentral() - maven { - name "forge" - url "http://files.minecraftforge.net/maven" +subprojects { + buildscript { + repositories { + mavenCentral() + maven { + name "forge" + url "http://files.minecraftforge.net/maven" + } + maven { + name "sonatype" + url "https://oss.sonatype.org/content/repositories/snapshots/" + } } - maven { - name "sonatype" - url "https://oss.sonatype.org/content/repositories/snapshots/" + dependencies { + // Minecraft 1.11 requires newer ForgeGradle, while 1.7 and 1.8 require older. + classpath 'net.minecraftforge.gradle:ForgeGradle:' + property('forgeGradleVersion') } } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' - } } diff --git a/settings.gradle b/settings.gradle index 5c32951..abf5c49 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,9 @@ rootProject.name = 'NOVA-Minecraft' +include "minecraft:1.11" include "minecraft:1.8" include "minecraft:1.7" + +project(":minecraft:1.11").name = "NOVA-Minecraft-Wrapper-MC1.11" +project(":minecraft:1.8").name = "NOVA-Minecraft-Wrapper-MC1.8" +project(":minecraft:1.7").name = "NOVA-Minecraft-Wrapper-MC1.7" From c117a777d03c8dd0c3eaec85a563c926b1cf30a1 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Sun, 25 Dec 2016 22:43:21 +0100 Subject: [PATCH 2/5] Fix Travis build --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b77ac59..3b04da4 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { apply from: "https://raw.githubusercontent.com/NOVA-Team/NOVA-Gradle/master/shared-scripts/java.gradle" dependencies { - compile nova(novaVersion) + compile nova(nova_version) } nova { From fd20bffce3b493cf1f2717797f511743d2e42479 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Mon, 2 Jan 2017 18:36:56 +0100 Subject: [PATCH 3/5] Update Forge Mappings + Undo subproject display name change --- minecraft/1.11/build.gradle | 2 +- settings.gradle | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/minecraft/1.11/build.gradle b/minecraft/1.11/build.gradle index c182c23..b435c17 100644 --- a/minecraft/1.11/build.gradle +++ b/minecraft/1.11/build.gradle @@ -43,7 +43,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' minecraft { version = property("minecraft.version") + "-" + property("forge.version") - mappings = 'snapshot_20161111' + mappings = 'snapshot_20161220' runDir = "run" } diff --git a/settings.gradle b/settings.gradle index abf5c49..b719b67 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,7 +3,3 @@ rootProject.name = 'NOVA-Minecraft' include "minecraft:1.11" include "minecraft:1.8" include "minecraft:1.7" - -project(":minecraft:1.11").name = "NOVA-Minecraft-Wrapper-MC1.11" -project(":minecraft:1.8").name = "NOVA-Minecraft-Wrapper-MC1.8" -project(":minecraft:1.7").name = "NOVA-Minecraft-Wrapper-MC1.7" From 1d49bd31a8a05ad5b5ba6fdb143c5857015fa09c Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Mon, 2 Jan 2017 18:38:01 +0100 Subject: [PATCH 4/5] Fix Travis build --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 3b04da4..ece5914 100644 --- a/build.gradle +++ b/build.gradle @@ -15,17 +15,17 @@ nova { wrappers { "17" { wrapper "nova.core:NOVA-Core-Wrapper-MC1.7:$nova_version" - runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.7") + runtime project(":minecraft:1.7") } "18" { wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$nova_version" - runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.8") + runtime project(":minecraft:1.8") } "1_11" { wrapper "nova.core:NOVA-Core-Wrapper-MC1.11:$nova_version" - runtime project(":minecraft:NOVA-Minecraft-Wrapper-MC1.11") + runtime project(":minecraft:1.11") } } } From ab22d67b15f2315f6d4640f5df78aecc53323541 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Wed, 11 Jan 2017 20:14:31 +0100 Subject: [PATCH 5/5] Update wrappers --- .../v1_11/depmodules}/ComponentModule.java | 5 +- .../redstone => launch}/RedstoneAPI.java | 17 ++-- .../wrapper/redstone/backward/BWRedstone.java | 80 +++++++++++++++++++ .../FWRedstone.java} | 4 +- .../v17/depmodules}/ComponentModule.java | 5 +- .../redstone => launch}/RedstoneAPI.java | 17 ++-- .../wrapper/redstone/backward/BWRedstone.java | 74 +++++++++++++++++ .../FWRedstone.java} | 4 +- .../ComponentModule.java | 5 +- .../redstone => launch}/RedstoneAPI.java | 16 +++- .../wrapper/redstone/backward/BWRedstone.java | 79 ++++++++++++++++++ .../FWRedstone.java} | 4 +- 12 files changed, 284 insertions(+), 26 deletions(-) rename minecraft/{1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone => 1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules}/ComponentModule.java (53%) rename minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/{wrapper/redstone => launch}/RedstoneAPI.java (55%) create mode 100644 minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/backward/BWRedstone.java rename minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/{NodeRedstone.java => forward/FWRedstone.java} (96%) rename minecraft/{1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone => 1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules}/ComponentModule.java (53%) rename minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/{wrapper/redstone => launch}/RedstoneAPI.java (55%) create mode 100644 minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/backward/BWRedstone.java rename minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/{NodeRedstone.java => forward/FWRedstone.java} (96%) rename minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/{wrapper/redstone => depmodules}/ComponentModule.java (53%) rename minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/{wrapper/redstone => launch}/RedstoneAPI.java (59%) create mode 100644 minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/backward/BWRedstone.java rename minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/{NodeRedstone.java => forward/FWRedstone.java} (96%) diff --git a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules/ComponentModule.java similarity index 53% rename from minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java rename to minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules/ComponentModule.java index 92dd354..ce013f7 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/ComponentModule.java +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules/ComponentModule.java @@ -1,6 +1,7 @@ -package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v1_11.depmodules; import nova.minecraft.redstone.Redstone; +import nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.forward.FWRedstone; import se.jbee.inject.bind.BinderModule; /** @@ -9,6 +10,6 @@ public class ComponentModule extends BinderModule { @Override protected void declare() { - bind(Redstone.class).to(NodeRedstone.class); + bind(Redstone.class).to(FWRedstone.class); } } diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java similarity index 55% rename from minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java rename to minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java index d126525..8f05aa0 100644 --- a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/RedstoneAPI.java +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java @@ -1,4 +1,4 @@ -package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v1_11.launch; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; @@ -7,6 +7,7 @@ import nova.core.world.World; import nova.core.wrapper.mc.forge.v1_11.util.WrapperEvent; import nova.minecraft.redstone.Redstone; +import nova.minecraft.wrapper.mc.forge.v1_11.depmodules.ComponentModule; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import java.util.Optional; @@ -15,7 +16,7 @@ * The Minecraft native loader * @author Calclavia */ -@Mod(id = "redstone-minecraft", name = "Redstone Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class }) +@Mod(id = "nova-minecraft-wrapper", name = "NOVA Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class }) public class RedstoneAPI implements Loadable { private final GlobalEvents events; @@ -26,11 +27,17 @@ public RedstoneAPI(GlobalEvents events) { @Override public void preInit() { - events.on(WrapperEvent.RedstoneConnect.class).bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position).map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); + events.on(WrapperEvent.RedstoneConnect.class) + .bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position) + .map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); - events.on(WrapperEvent.StrongRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); + events.on(WrapperEvent.StrongRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); - events.on(WrapperEvent.WeakRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); + events.on(WrapperEvent.WeakRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); } public Optional getRedstoneNode(World world, Vector3D pos) { diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/backward/BWRedstone.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/backward/BWRedstone.java new file mode 100644 index 0000000..99c13cf --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/backward/BWRedstone.java @@ -0,0 +1,80 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.backward; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import nova.core.block.Block; +import nova.core.util.Direction; +import nova.core.wrapper.mc.forge.v1_11.wrapper.block.backward.BWBlock; +import nova.core.wrapper.mc.forge.v1_11.wrapper.block.world.BWWorld; +import nova.internal.core.Game; +import nova.minecraft.redstone.Redstone; +import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; + +import java.util.function.Consumer; +import java.util.stream.IntStream; + +/** + * + * @author ExE Boss + */ +public class BWRedstone extends Redstone { + + private BWBlock block() { + return (BWBlock) getProvider(); + } + + private net.minecraft.world.World mcWorld() { + return ((BWWorld) block().world()).world(); + } + + public BWRedstone() { + this.canConnect = (Redstone otherRedstone) -> { + Block otherBlock = ((Block)otherRedstone.getProvider()); + Vector3D otherPos = otherBlock.position(); + Vector3D thisPos = block().position(); + BlockPos pos = new BlockPos(block().x(), block().y(), block().z()); + return block().mcBlock.canConnectRedstone(mcWorld().getBlockState(pos), mcWorld(), pos, Game.natives().toNative(Direction.fromVector(thisPos.crossProduct(otherPos)))); + }; + } + + @Override + public void onInputPowerChange(Consumer action) {} + + @Override + public int getOutputStrongPower() { + BlockPos pos = new BlockPos(block().x(), block().y(), block().z()); + return IntStream.range(0, 6).map(side -> mcWorld().getBlockState(pos).getStrongPower(mcWorld(), pos, EnumFacing.values()[side])).max().orElse(0); + } + + @Override + public void setOutputStrongPower(int power) {} + + @Override + public int getWeakPower(int side) { + return mcWorld().getRedstonePower(new BlockPos(block().x(), block().y(), block().z()), EnumFacing.values()[side]); + } + + @Override + public int getInputWeakPower() { + return mcWorld().isBlockIndirectlyGettingPowered(new BlockPos(block().x(), block().y(), block().z())); + } + + @Override + public int getInputStrongPower() { + return mcWorld().getStrongPower(new BlockPos(block().x(), block().y(), block().z())); + } + + @Override + public int getOutputWeakPower() { + BlockPos pos = new BlockPos(block().x(), block().y(), block().z()); + return IntStream.range(0, 6).map(side -> mcWorld().getBlockState(pos).getWeakPower(mcWorld(), pos, EnumFacing.values()[side])).max().orElse(0); + } + + @Override + public void setOutputWeakPower(int power) {} +} diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/forward/FWRedstone.java similarity index 96% rename from minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java rename to minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/forward/FWRedstone.java index 9ecc018..08466ac 100644 --- a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/NodeRedstone.java +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/forward/FWRedstone.java @@ -1,4 +1,4 @@ -package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.forward; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -14,7 +14,7 @@ * @author Calclavia */ //TODO: Create NodeVirtualRedstone (for MC blocks that are redstone, but don't implement NOVA) -public class NodeRedstone extends Redstone { +public class FWRedstone extends Redstone { private boolean init = false; private int inputStrongPower = 0; private int inputWeakPower = 0; diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java similarity index 53% rename from minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java index 7abe0a2..23cbf8e 100644 --- a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/ComponentModule.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java @@ -1,6 +1,7 @@ -package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v17.depmodules; import nova.minecraft.redstone.Redstone; +import nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone.forward.FWRedstone; import se.jbee.inject.bind.BinderModule; /** @@ -9,6 +10,6 @@ public class ComponentModule extends BinderModule { @Override protected void declare() { - bind(Redstone.class).to(NodeRedstone.class); + bind(Redstone.class).to(FWRedstone.class); } } diff --git a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/launch/RedstoneAPI.java similarity index 55% rename from minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/launch/RedstoneAPI.java index 8f4969b..db680fa 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/RedstoneAPI.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/launch/RedstoneAPI.java @@ -1,5 +1,6 @@ -package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v17.launch; +import nova.minecraft.wrapper.mc.forge.v17.depmodules.ComponentModule; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; import nova.core.loader.Loadable; @@ -15,7 +16,7 @@ * The Minecraft native loader * @author Calclavia */ -@Mod(id = "redstone-minecraft", name = "Redstone Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class }) +@Mod(id = "nova-minecraft-wrapper", name = "NOVA Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class }) public class RedstoneAPI implements Loadable { private final GlobalEvents events; @@ -26,11 +27,17 @@ public RedstoneAPI(GlobalEvents events) { @Override public void preInit() { - events.on(WrapperEvent.RedstoneConnect.class).bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position).map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); + events.on(WrapperEvent.RedstoneConnect.class) + .bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position) + .map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); - events.on(WrapperEvent.StrongRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); + events.on(WrapperEvent.StrongRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); - events.on(WrapperEvent.WeakRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); + events.on(WrapperEvent.WeakRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); } public Optional getRedstoneNode(World world, Vector3D pos) { diff --git a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/backward/BWRedstone.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/backward/BWRedstone.java new file mode 100644 index 0000000..8f151b1 --- /dev/null +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/backward/BWRedstone.java @@ -0,0 +1,74 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone.backward; + +import nova.core.block.Block; +import nova.core.util.Direction; +import nova.core.wrapper.mc.forge.v17.wrapper.block.backward.BWBlock; +import nova.core.wrapper.mc.forge.v17.wrapper.block.world.BWWorld; +import nova.minecraft.redstone.Redstone; +import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; + +import java.util.function.Consumer; +import java.util.stream.IntStream; + +/** + * + * @author ExE Boss + */ +public class BWRedstone extends Redstone { + + private BWBlock block() { + return (BWBlock) getProvider(); + } + + private net.minecraft.world.World mcWorld() { + return ((BWWorld) block().world()).world(); + } + + public BWRedstone() { + this.canConnect = (Redstone otherRedstone) -> { + Block otherBlock = ((Block) otherRedstone.getProvider()); + Vector3D otherPos = otherBlock.position(); + Vector3D thisPos = block().position(); + return block().mcBlock.canConnectRedstone(mcWorld(), otherBlock.x(), otherBlock.y(), otherBlock.z(), Direction.fromVector(thisPos.crossProduct(otherPos)).ordinal()); + }; + } + + @Override + public void onInputPowerChange(Consumer action) {} + + @Override + public int getOutputStrongPower() { + return IntStream.range(0, 6).map(side -> block().mcBlock.isProvidingStrongPower(mcWorld(), block().x(), block().y(), block().z(), side)).max().orElse(0); + } + + @Override + public void setOutputStrongPower(int power) {} + + @Override + public int getWeakPower(int side) { + return mcWorld().getIndirectPowerLevelTo(block().x(), block().y(), block().z(), side); + } + + @Override + public int getInputWeakPower() { + return mcWorld().getStrongestIndirectPower(block().x(), block().y(), block().z()); + } + + @Override + public int getInputStrongPower() { + return mcWorld().getBlockPowerInput(block().x(), block().y(), block().z()); + } + + @Override + public int getOutputWeakPower() { + return IntStream.range(0, 6).map(side -> block().mcBlock.isProvidingWeakPower(mcWorld(), block().x(), block().y(), block().z(), side)).max().orElse(0); + } + + @Override + public void setOutputWeakPower(int power) {} +} diff --git a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/forward/FWRedstone.java similarity index 96% rename from minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java rename to minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/forward/FWRedstone.java index ee2aaa5..4c3d92d 100644 --- a/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/NodeRedstone.java +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/forward/FWRedstone.java @@ -1,4 +1,4 @@ -package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v17.wrapper.redstone.forward; import nova.core.block.Block; import nova.core.wrapper.mc.forge.v17.wrapper.block.world.BWWorld; @@ -12,7 +12,7 @@ * @author Calclavia */ //TODO: Create NodeVirtualRedstone (for MC blocks that are redstone, but don't implement NOVA) -public class NodeRedstone extends Redstone { +public class FWRedstone extends Redstone { private boolean init = false; private int inputStrongPower = 0; private int inputWeakPower = 0; diff --git a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java similarity index 53% rename from minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java index 05eaea6..f07483c 100644 --- a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/ComponentModule.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java @@ -1,5 +1,6 @@ -package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v18.depmodules; +import nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone.forward.FWRedstone; import nova.minecraft.redstone.Redstone; import se.jbee.inject.bind.BinderModule; @@ -9,6 +10,6 @@ public class ComponentModule extends BinderModule { @Override protected void declare() { - bind(Redstone.class).to(NodeRedstone.class); + bind(Redstone.class).to(FWRedstone.class); } } diff --git a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/launch/RedstoneAPI.java similarity index 59% rename from minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/launch/RedstoneAPI.java index 84e6de2..eff4001 100644 --- a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/RedstoneAPI.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/launch/RedstoneAPI.java @@ -1,4 +1,4 @@ -package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v18.launch; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; @@ -11,6 +11,8 @@ import java.util.Optional; +import nova.minecraft.wrapper.mc.forge.v18.depmodules.ComponentModule; + /** * The Minecraft native loader * @author Calclavia @@ -26,11 +28,17 @@ public RedstoneAPI(GlobalEvents events) { @Override public void preInit() { - events.on(WrapperEvent.RedstoneConnect.class).bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position).map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); + events.on(WrapperEvent.RedstoneConnect.class) + .bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position) + .map(n -> n.canConnect.apply(null)).orElseGet(() -> false)); - events.on(WrapperEvent.StrongRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); + events.on(WrapperEvent.StrongRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputStrongPower).orElseGet(() -> 0)); - events.on(WrapperEvent.WeakRedstone.class).bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position).map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); + events.on(WrapperEvent.WeakRedstone.class) + .bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position) + .map(Redstone::getOutputWeakPower).orElseGet(() -> 0)); } public Optional getRedstoneNode(World world, Vector3D pos) { diff --git a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/backward/BWRedstone.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/backward/BWRedstone.java new file mode 100644 index 0000000..cb3962f --- /dev/null +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/backward/BWRedstone.java @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone.backward; + +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import nova.core.block.Block; +import nova.core.util.Direction; +import nova.core.wrapper.mc.forge.v18.wrapper.block.backward.BWBlock; +import nova.core.wrapper.mc.forge.v18.wrapper.block.world.BWWorld; +import nova.internal.core.Game; +import nova.minecraft.redstone.Redstone; +import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; + +import java.util.function.Consumer; +import java.util.stream.IntStream; + +/** + * + * @author ExE Boss + */ +public class BWRedstone extends Redstone { + + private BWBlock block() { + return (BWBlock) getProvider(); + } + + private net.minecraft.world.World mcWorld() { + return ((BWWorld) block().world()).world(); + } + + public BWRedstone() { + this.canConnect = (Redstone otherRedstone) -> { + Block otherBlock = ((Block)otherRedstone.getProvider()); + Vector3D otherPos = otherBlock.position(); + Vector3D thisPos = block().position(); + return block().mcBlock.canConnectRedstone(mcWorld(), Game.natives().toNative(thisPos), Game.natives().toNative(Direction.fromVector(thisPos.crossProduct(otherPos)))); + }; + } + + @Override + public void onInputPowerChange(Consumer action) {} + + @Override + public int getOutputStrongPower() { + BlockPos pos = new BlockPos(block().x(), block().y(), block().z()); + return IntStream.range(0, 6).map(side -> block().mcBlock.isProvidingStrongPower(mcWorld(), pos, mcWorld().getBlockState(pos), EnumFacing.values()[side])).max().orElse(0); + } + + @Override + public void setOutputStrongPower(int power) {} + + @Override + public int getWeakPower(int side) { + return mcWorld().getRedstonePower(new BlockPos(block().x(), block().y(), block().z()), EnumFacing.values()[side]); + } + + @Override + public int getInputWeakPower() { + return mcWorld().isBlockIndirectlyGettingPowered(new BlockPos(block().x(), block().y(), block().z())); + } + + @Override + public int getInputStrongPower() { + return mcWorld().getStrongPower(new BlockPos(block().x(), block().y(), block().z())); + } + + @Override + public int getOutputWeakPower() { + BlockPos pos = new BlockPos(block().x(), block().y(), block().z()); + return IntStream.range(0, 6).map(side -> block().mcBlock.isProvidingWeakPower(mcWorld(), pos, mcWorld().getBlockState(pos), EnumFacing.values()[side])).max().orElse(0); + } + + @Override + public void setOutputWeakPower(int power) {} +} diff --git a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/forward/FWRedstone.java similarity index 96% rename from minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java rename to minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/forward/FWRedstone.java index 9fd62bc..381adcf 100644 --- a/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/NodeRedstone.java +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/forward/FWRedstone.java @@ -1,4 +1,4 @@ -package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone; +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone.forward; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; @@ -14,7 +14,7 @@ * @author Calclavia */ //TODO: Create NodeVirtualRedstone (for MC blocks that are redstone, but don't implement NOVA) -public class NodeRedstone extends Redstone { +public class FWRedstone extends Redstone { private boolean init = false; private int inputStrongPower = 0; private int inputWeakPower = 0;