Skip to content

Commit cf4eea4

Browse files
committed
NOVA-Minecraft 1.11 Wrappers
1 parent 7e1f9a2 commit cf4eea4

9 files changed

Lines changed: 370 additions & 0 deletions

File tree

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ nova {
2121
wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$nova_version"
2222
runtime project(":minecraft:1.8")
2323
}
24+
"1_11" {
25+
wrapper "nova.core:NOVA-Core-Wrapper-MC1.11:$nova_version"
26+
runtime project(":minecraft:1.11")
27+
}
2428
}
2529
}
2630

minecraft/1.11/.gitignore

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Ignore All
2+
/*
3+
4+
# Sources
5+
!/src
6+
7+
# github
8+
!/.gitignore
9+
!/README.md
10+
11+
# gradle
12+
!/build.gradle
13+
!/build.properties
14+
!/settings.gradle
15+
!/gradle.properties
16+
!/gradlew*
17+
!/gradle

minecraft/1.11/build.gradle

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
apply plugin: "maven-publish"
2+
apply plugin: "com.jfrog.artifactory"
3+
apply from: "https://raw.githubusercontent.com/NOVA-Team/NOVA-Gradle/master/shared-scripts/java.gradle"
4+
5+
idea.module.name = "Minecraft-MC-1.11"
6+
archivesBaseName = "NOVA-Minecraft-Wrapper-MC1.11"
7+
8+
publishing {
9+
publications {
10+
main(MavenPublication) {
11+
from components.java
12+
13+
artifactId "NOVA-Minecraft-Wrapper-MC1.11"
14+
15+
artifact sourcesJar
16+
artifact javadocJar
17+
18+
pom.withXml(writePom(project.properties))
19+
}
20+
}
21+
}
22+
23+
artifactory {
24+
publish {
25+
defaults {
26+
publications("main")
27+
publishPom = true
28+
}
29+
}
30+
}
31+
32+
task deobfJar(type: Jar) {
33+
from sourceSets.main.output
34+
classifier = 'deobf'
35+
}
36+
37+
artifacts {
38+
archives jar
39+
archives deobfJar
40+
}
41+
42+
apply plugin: 'net.minecraftforge.gradle.forge'
43+
44+
minecraft {
45+
version = property("minecraft.version") + "-" + property("forge.version")
46+
mappings = 'snapshot_20161220'
47+
runDir = "run"
48+
}
49+
50+
dependencies {
51+
compile rootProject
52+
compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true
53+
compile group: "nova.core", name: "NOVA-Core-Wrapper-MC1.11", version: property("nova_version"), classifier: "deobf", changing: true
54+
}
55+
56+
processResources {
57+
// this will ensure that this task is redone when the versions change.
58+
inputs.property "version", project.version
59+
inputs.property "mcversion", project.minecraft.version
60+
61+
// replace stuff in mcmod.info, nothing else
62+
from(sourceSets.main.resources.srcDirs) {
63+
include "mcmod.info"
64+
65+
// replace version and mcversion
66+
expand "version": project.version, "mcversion": project.minecraft.version
67+
}
68+
69+
// copy everything else, thats not the mcmod.info
70+
from(sourceSets.main.resources.srcDirs) {
71+
exclude "mcmod.info"
72+
}
73+
}

minecraft/1.11/gradle.properties

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
group = nova.minecraft
2+
3+
minecraft.version = 1.11
4+
forge.version = 13.19.1.2189
5+
forgeGradleVersion = 2.2-SNAPSHOT
6+
7+
packaging = jar
8+
info.inceptionYear = 2016
9+
info.description = The NOVA-Minecraft Minecraft 1.11 wrapper.
10+
info.organization.name = NOVA
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package nova.minecraft.wrapper.mc.forge.v1_11.depmodules;
2+
3+
import nova.minecraft.redstone.Redstone;
4+
import nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.forward.FWRedstone;
5+
import se.jbee.inject.bind.BinderModule;
6+
7+
/**
8+
* @author Calclavia
9+
*/
10+
public class ComponentModule extends BinderModule {
11+
@Override
12+
protected void declare() {
13+
bind(Redstone.class).to(FWRedstone.class);
14+
}
15+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package nova.minecraft.wrapper.mc.forge.v1_11.launch;
2+
3+
import nova.core.block.Block;
4+
import nova.core.event.bus.GlobalEvents;
5+
import nova.core.loader.Loadable;
6+
import nova.core.loader.Mod;
7+
import nova.core.world.World;
8+
import nova.core.wrapper.mc.forge.v1_11.util.WrapperEvent;
9+
import nova.minecraft.redstone.Redstone;
10+
import nova.minecraft.wrapper.mc.forge.v1_11.depmodules.ComponentModule;
11+
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
12+
13+
import java.util.Optional;
14+
15+
/**
16+
* The Minecraft native loader
17+
* @author Calclavia
18+
*/
19+
@Mod(id = "nova-minecraft-wrapper", name = "NOVA Minecraft", version = "0.0.1", novaVersion = "0.0.1", priority = 1, modules = { ComponentModule.class })
20+
public class RedstoneAPI implements Loadable {
21+
22+
private final GlobalEvents events;
23+
24+
public RedstoneAPI(GlobalEvents events) {
25+
this.events = events;
26+
}
27+
28+
@Override
29+
public void preInit() {
30+
events.on(WrapperEvent.RedstoneConnect.class)
31+
.bind(evt -> evt.canConnect = getRedstoneNode(evt.world, evt.position)
32+
.map(n -> n.canConnect.apply(null)).orElseGet(() -> false));
33+
34+
events.on(WrapperEvent.StrongRedstone.class)
35+
.bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position)
36+
.map(Redstone::getOutputStrongPower).orElseGet(() -> 0));
37+
38+
events.on(WrapperEvent.WeakRedstone.class)
39+
.bind(evt -> evt.power = getRedstoneNode(evt.world, evt.position)
40+
.map(Redstone::getOutputWeakPower).orElseGet(() -> 0));
41+
}
42+
43+
public Optional<Redstone> getRedstoneNode(World world, Vector3D pos) {
44+
Optional<Block> blockOptional = world.getBlock(pos);
45+
return blockOptional.flatMap(block -> block.components.getOp(Redstone.class));
46+
}
47+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.backward;
7+
8+
import net.minecraft.util.EnumFacing;
9+
import net.minecraft.util.math.BlockPos;
10+
import nova.core.block.Block;
11+
import nova.core.util.Direction;
12+
import nova.core.wrapper.mc.forge.v1_11.wrapper.block.backward.BWBlock;
13+
import nova.core.wrapper.mc.forge.v1_11.wrapper.block.world.BWWorld;
14+
import nova.internal.core.Game;
15+
import nova.minecraft.redstone.Redstone;
16+
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
17+
18+
import java.util.function.Consumer;
19+
import java.util.stream.IntStream;
20+
21+
/**
22+
*
23+
* @author ExE Boss
24+
*/
25+
public class BWRedstone extends Redstone {
26+
27+
private BWBlock block() {
28+
return (BWBlock) getProvider();
29+
}
30+
31+
private net.minecraft.world.World mcWorld() {
32+
return ((BWWorld) block().world()).world();
33+
}
34+
35+
public BWRedstone() {
36+
this.canConnect = (Redstone otherRedstone) -> {
37+
Block otherBlock = ((Block)otherRedstone.getProvider());
38+
Vector3D otherPos = otherBlock.position();
39+
Vector3D thisPos = block().position();
40+
BlockPos pos = new BlockPos(block().x(), block().y(), block().z());
41+
return block().mcBlock.canConnectRedstone(mcWorld().getBlockState(pos), mcWorld(), pos, Game.natives().toNative(Direction.fromVector(thisPos.crossProduct(otherPos))));
42+
};
43+
}
44+
45+
@Override
46+
public void onInputPowerChange(Consumer<Redstone> action) {}
47+
48+
@Override
49+
public int getOutputStrongPower() {
50+
BlockPos pos = new BlockPos(block().x(), block().y(), block().z());
51+
return IntStream.range(0, 6).map(side -> mcWorld().getBlockState(pos).getStrongPower(mcWorld(), pos, EnumFacing.values()[side])).max().orElse(0);
52+
}
53+
54+
@Override
55+
public void setOutputStrongPower(int power) {}
56+
57+
@Override
58+
public int getWeakPower(int side) {
59+
return mcWorld().getRedstonePower(new BlockPos(block().x(), block().y(), block().z()), EnumFacing.values()[side]);
60+
}
61+
62+
@Override
63+
public int getInputWeakPower() {
64+
return mcWorld().isBlockIndirectlyGettingPowered(new BlockPos(block().x(), block().y(), block().z()));
65+
}
66+
67+
@Override
68+
public int getInputStrongPower() {
69+
return mcWorld().getStrongPower(new BlockPos(block().x(), block().y(), block().z()));
70+
}
71+
72+
@Override
73+
public int getOutputWeakPower() {
74+
BlockPos pos = new BlockPos(block().x(), block().y(), block().z());
75+
return IntStream.range(0, 6).map(side -> mcWorld().getBlockState(pos).getWeakPower(mcWorld(), pos, EnumFacing.values()[side])).max().orElse(0);
76+
}
77+
78+
@Override
79+
public void setOutputWeakPower(int power) {}
80+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package nova.minecraft.wrapper.mc.forge.v1_11.wrapper.redstone.forward;
2+
3+
import net.minecraft.util.EnumFacing;
4+
import net.minecraft.util.math.BlockPos;
5+
import nova.core.block.Block;
6+
import nova.core.wrapper.mc.forge.v1_11.wrapper.block.world.BWWorld;
7+
import nova.minecraft.redstone.Redstone;
8+
9+
import java.util.function.Consumer;
10+
import java.util.stream.IntStream;
11+
12+
/**
13+
* A Minecraft implementation that wraps Redstone to a Node
14+
* @author Calclavia
15+
*/
16+
//TODO: Create NodeVirtualRedstone (for MC blocks that are redstone, but don't implement NOVA)
17+
public class FWRedstone extends Redstone {
18+
private boolean init = false;
19+
private int inputStrongPower = 0;
20+
private int inputWeakPower = 0;
21+
private int[] inputSidedWeakPower = { 0, 0, 0, 0, 0, 0 };
22+
private int outputStrongPower = 0;
23+
private int outputWeakPower = 0;
24+
private Consumer<Redstone> onPowerChange = redstone -> {
25+
};
26+
27+
private Block block() {
28+
return (Block) getProvider();
29+
}
30+
31+
@Override
32+
public void onProviderChange() {
33+
//Hook into the block's events.
34+
getProvider().events.on(Block.NeighborChangeEvent.class).bind(evt -> recache());
35+
}
36+
37+
@Override
38+
public int getInputWeakPower() {
39+
return inputWeakPower;
40+
}
41+
42+
@Override
43+
public int getInputStrongPower() {
44+
return inputStrongPower;
45+
}
46+
47+
@Override
48+
public void onInputPowerChange(Consumer<Redstone> action) {
49+
onPowerChange = action;
50+
}
51+
52+
@Override
53+
public int getOutputStrongPower() {
54+
if (!init) {
55+
recache();
56+
}
57+
return outputStrongPower;
58+
}
59+
60+
@Override
61+
public void setOutputStrongPower(int power) {
62+
outputStrongPower = power;
63+
block().world().markChange(block().position());
64+
}
65+
66+
@Override
67+
public int getWeakPower(int side) {
68+
if (!init) {
69+
recache();
70+
}
71+
return inputSidedWeakPower[side];
72+
}
73+
74+
@Override
75+
public int getOutputWeakPower() {
76+
if (!init) {
77+
recache();
78+
}
79+
return outputWeakPower;
80+
}
81+
82+
@Override
83+
public void setOutputWeakPower(int power) {
84+
outputWeakPower = power;
85+
block().world().markChange(block().position());
86+
}
87+
88+
/**
89+
* Recaches the Redstone state.
90+
*/
91+
public void recache() {
92+
init = true;
93+
boolean hasChanged = false;
94+
95+
int newInputStrongPower = mcWorld().getStrongPower(new BlockPos(block().x(), block().y(), block().z()));
96+
97+
if (inputStrongPower != newInputStrongPower) {
98+
inputStrongPower = newInputStrongPower;
99+
hasChanged = true;
100+
}
101+
102+
int newInputWeakPower = mcWorld().isBlockIndirectlyGettingPowered(new BlockPos(block().x(), block().y(), block().z()));
103+
if (inputWeakPower != newInputWeakPower) {
104+
inputWeakPower = newInputWeakPower;
105+
hasChanged = true;
106+
}
107+
108+
int[] newInputSidedWeakPower = IntStream.range(0, 6).map(i -> mcWorld().getRedstonePower(new BlockPos(block().x(), block().y(), block().z()), EnumFacing.values()[i])).toArray();
109+
110+
if (inputSidedWeakPower != newInputSidedWeakPower) {
111+
inputSidedWeakPower = newInputSidedWeakPower;
112+
hasChanged = true;
113+
}
114+
115+
if (hasChanged) {
116+
onPowerChange.accept(this);
117+
}
118+
}
119+
120+
private net.minecraft.world.World mcWorld() {
121+
return ((BWWorld) block().world()).world();
122+
}
123+
}

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
rootProject.name = 'NOVA-Minecraft'
22

3+
include "minecraft:1.11"
34
include "minecraft:1.8"
45
include "minecraft:1.7"

0 commit comments

Comments
 (0)