diff options
author | Tec <daniel112092@gmail.com> | 2020-04-26 09:10:57 +0200 |
---|---|---|
committer | Tec <daniel112092@gmail.com> | 2020-04-26 09:10:57 +0200 |
commit | ffcba9cfeada309748e3f2ad206b141fc102cb3e (patch) | |
tree | c99282ef7b11f9cd156ab87d490047d3bd030447 | |
parent | d0cafa5c88cbbff75321e2d781bca79a9057e473 (diff) | |
download | GT5-Unofficial-ffcba9cfeada309748e3f2ad206b141fc102cb3e.tar.gz GT5-Unofficial-ffcba9cfeada309748e3f2ad206b141fc102cb3e.tar.bz2 GT5-Unofficial-ffcba9cfeada309748e3f2ad206b141fc102cb3e.zip |
Optimize navigation
4 files changed, 59 insertions, 39 deletions
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 1152713d5e..97e4fe2bad 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -73,9 +73,14 @@ public interface IStructureDefinition<T> { return false; } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate<T> navigate=(IStructureNavigate<T>)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } else { for (IStructureElement<T> element : elements) { @@ -90,9 +95,14 @@ public interface IStructureDefinition<T> { } } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate<T> navigate=(IStructureNavigate<T>)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } }else { @@ -107,9 +117,14 @@ public interface IStructureDefinition<T> { element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate<T> navigate=(IStructureNavigate<T>)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } else { for (IStructureElement<T> element : elements) { @@ -122,9 +137,14 @@ public interface IStructureDefinition<T> { element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate<T> navigate=(IStructureNavigate<T>)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index 78997648ab..2ac5c19538 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -15,28 +15,4 @@ public interface IStructureElement<T> { default boolean placeBlock(T t,World world,int x,int y,int z){ return false; } - - default int getStepA(){ - return 1; - } - - default int getStepB(){ - return 0; - } - - default int getStepC(){ - return 0; - } - - default boolean resetA(){ - return false; - } - - default boolean resetB(){ - return false; - } - - default boolean resetC(){ - return false; - } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index bba3dc5239..6382f130ee 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -5,7 +5,7 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureNavigate<T> extends IStructureElement<T> { +interface IStructureNavigate<T> extends IStructureElement<T> { @Override default boolean check(T t, World world, int x, int y, int z){ return true; @@ -20,4 +20,28 @@ public interface IStructureNavigate<T> extends IStructureElement<T> { default boolean placeBlock(T t, World world, int x, int y, int z) { return true; } + + default int getStepA(){ + return 1; + } + + default int getStepB(){ + return 0; + } + + default int getStepC(){ + return 0; + } + + default boolean resetA(){ + return false; + } + + default boolean resetB(){ + return false; + } + + default boolean resetC(){ + return false; + } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index f619c7482b..703c68221c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -363,7 +363,7 @@ public class StructureUtility { } @SuppressWarnings("unchecked") - public static <T> IStructureNavigate<T> step(Vec3Impl step){ + static <T> IStructureNavigate<T> step(Vec3Impl step){ if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ throw new IllegalArgumentException(); } @@ -378,7 +378,7 @@ public class StructureUtility { }); } - public static <T> IStructureNavigate<T> step(int a,int b, int c){ + static <T> IStructureNavigate<T> step(int a,int b, int c){ return step(new Vec3Impl(a,b,c)); } |