aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java24
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java39
2 files changed, 59 insertions, 4 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 542d13a7cd..c8488d5cea 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
@@ -1,9 +1,14 @@
package com.github.technus.tectech.mechanics.structure;
+import com.github.technus.tectech.TecTech;
import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
+import java.util.Arrays;
+
+import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE;
+
public interface IStructureDefinition<T> {
/**
* Used internally
@@ -73,9 +78,17 @@ public interface IStructureDefinition<T> {
if (world.blockExists(xyz[0], xyz[1], xyz[2])) {
if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){
+ if(DEBUG_MODE){
+ TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+
+ Arrays.toString(xyz)+" "+Arrays.toString(abc));
+ }
return false;
}
- }else {
+ } else {
+ if(DEBUG_MODE){
+ TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+
+ Arrays.toString(xyz)+" "+Arrays.toString(abc));
+ }
return false;
}
abc[0]+=1;
@@ -95,8 +108,17 @@ public interface IStructureDefinition<T> {
if (world.blockExists(xyz[0], xyz[1], xyz[2])) {
if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){
+ if(DEBUG_MODE){
+ TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+
+ Arrays.toString(xyz)+" "+Arrays.toString(abc));
+ }
return false;
}
+ } else {
+ if(DEBUG_MODE){
+ TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+
+ Arrays.toString(xyz)+" "+Arrays.toString(abc));
+ }
}
abc[0]+=1;
}
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 00bdcdb1ad..1c2fd18326 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
@@ -112,6 +112,8 @@ public class StructureUtility {
return ERROR;
}
+ //region hint only
+
/**
* Check always returns: true.
*
@@ -180,6 +182,10 @@ public class StructureUtility {
};
}
+ //endregion
+
+ //region block
+
/**
* Does not allow Block duplicates (with different meta)
*/
@@ -354,6 +360,10 @@ public class StructureUtility {
return ofBlock(block, meta, block, meta);
}
+ //endregion
+
+ //region adders
+
public static <T> IStructureElement<T> ofBlockAdder(IBlockAdder<T> iBlockAdder, Block defaultBlock, int defaultMeta) {
if (iBlockAdder == null || defaultBlock == null) {
throw new IllegalArgumentException();
@@ -436,9 +446,9 @@ public class StructureUtility {
@Override
public boolean check(T t, World world, int x, int y, int z) {
TileEntity tileEntity = world.getTileEntity(x, y, z);
- return tileEntity instanceof IGregTechTileEntity &&
- (iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex) ||
- (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta));
+ return (tileEntity instanceof IGregTechTileEntity &&
+ iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) ||
+ (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta);
}
@Override
@@ -455,6 +465,10 @@ public class StructureUtility {
};
}
+ //endregion
+
+ //region side effects
+
public static <B extends IStructureElement<T>, T> IStructureElement<T> onElementPass(Consumer<T> onCheckPass, B element) {
return new IStructureElement<T>() {
@Override
@@ -501,6 +515,7 @@ public class StructureUtility {
};
}
+ //endregion
/**
* Take care while chaining, as it will try to call every structure element until it returns true.
@@ -536,6 +551,8 @@ public class StructureUtility {
return ofChain(elementChain.toArray(new IStructureElement[0]));
}
+ //region defer
+
public static <T> IStructureElementDeferred<T> defer(Supplier<IStructureElement<T>> to) {
if (to == null) {
throw new IllegalArgumentException();
@@ -840,10 +857,26 @@ public class StructureUtility {
return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0]));
}
+ //endregion
+
+ /**
+ * Used internally, to generate skips for structure definitions
+ * @param a
+ * @param b
+ * @param c
+ * @param <T>
+ * @return
+ */
public static <T> IStructureNavigate<T> step(int a, int b, int c) {
return step(new Vec3Impl(a, b, c));
}
+ /**
+ * Used internally, to generate skips for structure definitions
+ * @param step
+ * @param <T>
+ * @return
+ */
@SuppressWarnings("unchecked")
public static <T> IStructureNavigate<T> step(Vec3Impl step) {
if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) {