diff --git a/build.gradle b/build.gradle index 5647551..ece5914 100644 --- a/build.gradle +++ b/build.gradle @@ -1,28 +1,32 @@ 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 { - compile nova(novaVersion) + compile nova(nova_version) } nova { wrappers { "17" { - wrapper "nova.core:NOVA-Core-Wrapper-MC1.7:$novaVersion" + wrapper "nova.core:NOVA-Core-Wrapper-MC1.7:$nova_version" runtime project(":minecraft:1.7") } "18" { - wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$novaVersion" + wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$nova_version" runtime project(":minecraft:1.8") } + + "1_11" { + wrapper "nova.core:NOVA-Core-Wrapper-MC1.11:$nova_version" + runtime project(":minecraft:1.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..b435c17 --- /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_20161220' + 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/depmodules/ComponentModule.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules/ComponentModule.java new file mode 100644 index 0000000..ce013f7 --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/depmodules/ComponentModule.java @@ -0,0 +1,15 @@ +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; + +/** + * @author Calclavia + */ +public class ComponentModule extends BinderModule { + @Override + protected void declare() { + bind(Redstone.class).to(FWRedstone.class); + } +} diff --git a/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java new file mode 100644 index 0000000..8f05aa0 --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/launch/RedstoneAPI.java @@ -0,0 +1,47 @@ +package nova.minecraft.wrapper.mc.forge.v1_11.launch; + +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 nova.minecraft.wrapper.mc.forge.v1_11.depmodules.ComponentModule; +import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; + +import java.util.Optional; + +/** + * The Minecraft native loader + * @author Calclavia + */ +@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; + + 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.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/forward/FWRedstone.java b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/forward/FWRedstone.java new file mode 100644 index 0000000..08466ac --- /dev/null +++ b/minecraft/1.11/src/main/java/nova/minecraft/wrapper/mc/forge/v1_11/wrapper/redstone/forward/FWRedstone.java @@ -0,0 +1,123 @@ +package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.forward; + +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 FWRedstone 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.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/redstone/ComponentModule.java deleted file mode 100644 index c80b066..0000000 --- a/minecraft/1.7/src/main/java/nova/minecraft/redstone/ComponentModule.java +++ /dev/null @@ -1,13 +0,0 @@ -package nova.minecraft.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.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java new file mode 100644 index 0000000..23cbf8e --- /dev/null +++ b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/depmodules/ComponentModule.java @@ -0,0 +1,15 @@ +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; + +/** + * @author Calclavia + */ +public class ComponentModule extends BinderModule { + @Override + protected void declare() { + bind(Redstone.class).to(FWRedstone.class); + } +} 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/launch/RedstoneAPI.java similarity index 53% 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/launch/RedstoneAPI.java index a912298..db680fa 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/launch/RedstoneAPI.java @@ -1,11 +1,13 @@ -package nova.minecraft.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; 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; @@ -14,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; @@ -25,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/redstone/NodeRedstone.java b/minecraft/1.7/src/main/java/nova/minecraft/wrapper/mc/forge/v17/wrapper/redstone/forward/FWRedstone.java similarity index 94% 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/forward/FWRedstone.java index f2c6d34..4c3d92d 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/forward/FWRedstone.java @@ -1,7 +1,8 @@ -package nova.minecraft.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; +import nova.minecraft.redstone.Redstone; import java.util.function.Consumer; import java.util.stream.IntStream; @@ -11,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/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/redstone/ComponentModule.java deleted file mode 100644 index c80b066..0000000 --- a/minecraft/1.8/src/main/java/nova/minecraft/redstone/ComponentModule.java +++ /dev/null @@ -1,13 +0,0 @@ -package nova.minecraft.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.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java new file mode 100644 index 0000000..f07483c --- /dev/null +++ b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/depmodules/ComponentModule.java @@ -0,0 +1,15 @@ +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; + +/** + * @author Calclavia + */ +public class ComponentModule extends BinderModule { + @Override + protected void declare() { + bind(Redstone.class).to(FWRedstone.class); + } +} 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/launch/RedstoneAPI.java old mode 100755 new mode 100644 similarity index 57% 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/launch/RedstoneAPI.java index d36f9b7..eff4001 --- 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/launch/RedstoneAPI.java @@ -1,4 +1,4 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v18.launch; import nova.core.block.Block; import nova.core.event.bus.GlobalEvents; @@ -6,10 +6,13 @@ 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; +import nova.minecraft.wrapper.mc.forge.v18.depmodules.ComponentModule; + /** * The Minecraft native loader * @author Calclavia @@ -25,15 +28,21 @@ 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) { 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.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/redstone/NodeRedstone.java b/minecraft/1.8/src/main/java/nova/minecraft/wrapper/mc/forge/v18/wrapper/redstone/forward/FWRedstone.java old mode 100755 new mode 100644 similarity index 94% 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/forward/FWRedstone.java index 0f27f84..381adcf --- 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/forward/FWRedstone.java @@ -1,9 +1,10 @@ -package nova.minecraft.redstone; +package nova.minecraft.wrapper.mc.forge.v18.wrapper.redstone.forward; 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; @@ -13,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/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..b719b67 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ rootProject.name = 'NOVA-Minecraft' +include "minecraft:1.11" include "minecraft:1.8" include "minecraft:1.7"