aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbasdxz <tudurap.com@gmail.com>2020-11-04 09:06:13 +0000
committerbasdxz <tudurap.com@gmail.com>2020-11-04 09:06:13 +0000
commit95993fb3d937b8dcfc9c945c18a754ce4ac11f88 (patch)
tree843c584565d2cf01ec0927d5f944a41df2253207
parent8bed7d36a5e0574015395b64e8f9d3d59d3cb9f8 (diff)
parentf14ea1f84ab07a7fd32fa520ca4fc1e18a1333d5 (diff)
downloadGT5-Unofficial-95993fb3d937b8dcfc9c945c18a754ce4ac11f88.tar.gz
GT5-Unofficial-95993fb3d937b8dcfc9c945c18a754ce4ac11f88.tar.bz2
GT5-Unofficial-95993fb3d937b8dcfc9c945c18a754ce4ac11f88.zip
Merge branch 'master' into BassAddons
-rw-r--r--src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java12
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java146
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java8
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java22
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java6
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java2
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java4
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java8
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java50
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java8
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java646
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java4
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java6
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java4
-rw-r--r--src/main/java/com/github/technus/tectech/util/Util.java1
15 files changed, 474 insertions, 453 deletions
diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java
index df5c11e67b..d58a6e7686 100644
--- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java
+++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java
@@ -933,6 +933,8 @@ public class DreamCraftRecipeLoader implements Runnable {
48000, 64, 200000, 8, new Object[]{
GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L),
GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L),
+ ItemList.Gravistar.get(4L),
+ ItemList.Emitter_UHV.get(4L),
new Object[]{OrePrefixes.circuit.get(Materials.Bio), 4L},
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L),
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L),
@@ -952,7 +954,9 @@ public class DreamCraftRecipeLoader implements Runnable {
96000, 128, 400000, 16, new Object[]{
GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L),
GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L),
- new Object[]{OrePrefixes.circuit.get(Materials.Bio), 8L},
+ ItemList.Gravistar.get(8L),
+ ItemList.Emitter_UEV.get(4L),
+ new Object[]{OrePrefixes.circuit.get(Materials.Nano), 4},
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L),
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L),
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L),
@@ -1084,7 +1088,7 @@ public class DreamCraftRecipeLoader implements Runnable {
GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 64),
GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64)
}, new FluidStack[]{
- Materials.SolderingAlloy.getMolten(3760L),
+ Materials.SolderingAlloy.getMolten(3744L),
Materials.Naquadria.getMolten(4032L),
new FluidStack(FluidRegistry.getFluid("ic2coolant"), 20000)
}, getItemContainer("NanoCircuit").get(1L), 8000, 8000000);
@@ -1105,7 +1109,7 @@ public class DreamCraftRecipeLoader implements Runnable {
GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Neutronium, 16),
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64)
}, new FluidStack[]{
- Materials.SolderingAlloy.getMolten(3760L),
+ Materials.SolderingAlloy.getMolten(4032L),
Materials.UUMatter.getFluid(8000L),
Materials.Osmium.getMolten(1152L)
}, getItemContainer("PikoCircuit").get(1L), 10000, 8000000);
@@ -1124,7 +1128,7 @@ public class DreamCraftRecipeLoader implements Runnable {
GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 8),
GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64)
}, new FluidStack[]{
- Materials.SolderingAlloy.getMolten(3760L),
+ Materials.SolderingAlloy.getMolten(4608L),
Materials.UUMatter.getFluid(24000L),
Materials.Osmium.getMolten(2304L)
}, getItemContainer("QuantumCircuit").get(1L), 20000, 32000000);
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 c8488d5cea..ca9712df04 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,167 +1,47 @@
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.mechanics.structure.StructureIterationType.*;
+import static com.github.technus.tectech.mechanics.structure.StructureUtility.iterate;
-import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE;
-
-public interface IStructureDefinition<T> {
+public interface IStructureDefinition<MultiBlock> {
/**
* Used internally
* @param name same name as for other methods here
* @return the array of elements to process
*/
- IStructureElement<T>[] getStructureFor(String name);
+ IStructureElement<MultiBlock>[] getStructureFor(String name);
- default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing,
+ default boolean check(MultiBlock object, String piece, World world, ExtendedFacing extendedFacing,
int basePositionX, int basePositionY, int basePositionZ,
int basePositionA, int basePositionB, int basePositionC,
boolean forceCheckAllBlocks){
return iterate(object, null, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ,
- basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks);
+ basePositionA, basePositionB, basePositionC,forceCheckAllBlocks? CHECK_FULLY:CHECK);
}
- default boolean hints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing,
+ default boolean hints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing,
int basePositionX, int basePositionY, int basePositionZ,
int basePositionA, int basePositionB, int basePositionC) {
return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ,
- basePositionA, basePositionB, basePositionC,true,null);
+ basePositionA, basePositionB, basePositionC,SPAWN_HINTS);
}
- default boolean build(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing,
+ default boolean build(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing,
int basePositionX, int basePositionY, int basePositionZ,
int basePositionA, int basePositionB, int basePositionC) {
return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ,
- basePositionA, basePositionB, basePositionC,false,null);
+ basePositionA, basePositionB, basePositionC,BUILD_TEMPLATE);
}
- default boolean buildOrHints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing,
+ default boolean buildOrHints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing,
int basePositionX, int basePositionY, int basePositionZ,
int basePositionA, int basePositionB, int basePositionC,
- boolean hintsOnly){
+ boolean hints){
return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ,
- basePositionA, basePositionB, basePositionC,hintsOnly,null);
- }
-
- static <T> boolean iterate(T object, ItemStack trigger, IStructureElement<T>[] elements, World world, ExtendedFacing extendedFacing,
- int basePositionX, int basePositionY, int basePositionZ,
- int basePositionA, int basePositionB, int basePositionC,
- boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){
- if(world.isRemote ^ hintsOnly){
- return false;
- }
-
- //change base position to base offset
- basePositionA=-basePositionA;
- basePositionB=-basePositionB;
- basePositionC=-basePositionC;
-
- int[] abc = new int[]{basePositionA,basePositionB,basePositionC};
- int[] xyz = new int[3];
-
- if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){
- if(checkBlocksIfNotNullForceCheckAllIfTrue){
- for (IStructureElement<T> element : elements) {
- if(element.isNavigating()) {
- abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
- abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
- abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
- }else {
- extendedFacing.getWorldOffset(abc, xyz);
- xyz[0] += basePositionX;
- xyz[1] += basePositionY;
- xyz[2] += basePositionZ;
-
- 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));
- }
- return false;
- }
- abc[0]+=1;
- }
- }
- } else {
- for (IStructureElement<T> element : elements) {
- if(element.isNavigating()) {
- abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
- abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
- abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
- }else {
- extendedFacing.getWorldOffset(abc, xyz);
- xyz[0] += basePositionX;
- xyz[1] += basePositionY;
- xyz[2] += basePositionZ;
-
- 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;
- }
- }
- }
- }else {
- if(hintsOnly) {
- for (IStructureElement<T> element : elements) {
- if(element.isNavigating()) {
- abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
- abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
- abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
- }else {
- extendedFacing.getWorldOffset(abc, xyz);
- xyz[0] += basePositionX;
- xyz[1] += basePositionY;
- xyz[2] += basePositionZ;
-
- element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger);
-
- abc[0]+=1;
- }
- }
- } else {
- for (IStructureElement<T> element : elements) {
- if(element.isNavigating()) {
- abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
- abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
- abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
- }else {
- extendedFacing.getWorldOffset(abc, xyz);
- xyz[0] += basePositionX;
- xyz[1] += basePositionY;
- xyz[2] += basePositionZ;
-
- if (world.blockExists(xyz[0], xyz[1], xyz[2])) {
- element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger);
- }
- abc[0]+=1;
- }
- }
- }
- }
- return true;
+ basePositionA, basePositionB, basePositionC,hints?SPAWN_HINTS:BUILD_TEMPLATE);
}
}
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 f946e71f91..436c7ce203 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
@@ -6,12 +6,12 @@ import net.minecraft.world.World;
/**
* Use StructureUtility to instantiate
*/
-public interface IStructureElement<T> {
- boolean check(T t,World world,int x,int y,int z);
+public interface IStructureElement<MultiBlock> {
+ boolean check(MultiBlock multiBlock, World world, int x, int y, int z);
- boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger);
+ boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger);
- boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger);
+ boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger);
default int getStepA(){
return 1;
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java
index f9593ee1c5..4c7059dd81 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java
@@ -6,13 +6,13 @@ import net.minecraft.world.World;
/**
* Use StructureUtility to instantiate
*/
-public interface IStructureElementChain<T> extends IStructureElement<T> {
- IStructureElement<T>[] fallbacks();
+public interface IStructureElementChain<MultiBlock> extends IStructureElement<MultiBlock> {
+ IStructureElement<MultiBlock>[] fallbacks();
@Override
- default boolean check(T t, World world, int x, int y, int z){
- for (IStructureElement<T> fallback : fallbacks()) {
- if (fallback.check(t, world, x, y, z)) {
+ default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){
+ for (IStructureElement<MultiBlock> fallback : fallbacks()) {
+ if (fallback.check(multiBlock, world, x, y, z)) {
return true;
}
}
@@ -20,9 +20,9 @@ public interface IStructureElementChain<T> extends IStructureElement<T> {
}
@Override
- default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- for (IStructureElement<T> fallback : fallbacks()) {
- if (fallback.spawnHint(t, world, x, y, z, trigger)) {
+ default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ for (IStructureElement<MultiBlock> fallback : fallbacks()) {
+ if (fallback.spawnHint(multiBlock, world, x, y, z, trigger)) {
return true;
}
}
@@ -30,9 +30,9 @@ public interface IStructureElementChain<T> extends IStructureElement<T> {
}
@Override
- default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- for (IStructureElement<T> fallback : fallbacks()) {
- if (fallback.placeBlock(t, world, x, y, z, trigger)) {
+ default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ for (IStructureElement<MultiBlock> fallback : fallbacks()) {
+ if (fallback.placeBlock(multiBlock, world, x, y, z, trigger)) {
return true;
}
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java
index ec15aea53b..c6492a5ed6 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java
@@ -3,14 +3,14 @@ package com.github.technus.tectech.mechanics.structure;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
-public interface IStructureElementCheckOnly<T> extends IStructureElement<T> {
+public interface IStructureElementCheckOnly<MultiBlock> extends IStructureElement<MultiBlock> {
@Override
- default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){
+ default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){
return false;
}
@Override
- default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){
+ default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){
return false;
}
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java
index dbb74312a8..c0e39bb2ad 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java
@@ -3,5 +3,5 @@ package com.github.technus.tectech.mechanics.structure;
/**
* Use StructureUtility to instantiate
*/
-public interface IStructureElementDeferred<T> extends IStructureElement<T> {
+public interface IStructureElementDeferred<MultiBlock> extends IStructureElement<MultiBlock> {
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java
index 47e6060878..12cf2141ae 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java
@@ -3,9 +3,9 @@ package com.github.technus.tectech.mechanics.structure;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
-public interface IStructureElementNoPlacement<T> extends IStructureElement<T> {
+public interface IStructureElementNoPlacement<MultiBlock> extends IStructureElement<MultiBlock> {
@Override
- default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){
+ default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){
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 d3f4134cea..8c7c837a94 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
@@ -6,19 +6,19 @@ import net.minecraft.world.World;
/**
* Use StructureUtility to instantiate
*/
-interface IStructureNavigate<T> extends IStructureElement<T> {
+interface IStructureNavigate<MultiBlock> extends IStructureElement<MultiBlock> {
@Override
- default boolean check(T t, World world, int x, int y, int z){
+ default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){
return true;
}
@Override
- default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
return true;
}
@Override
- default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
return true;
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java
index 9a1e94d98a..f42cbd35d1 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java
@@ -7,31 +7,31 @@ import java.util.*;
import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE;
import static com.github.technus.tectech.mechanics.structure.StructureUtility.*;
-public class StructureDefinition<T> implements IStructureDefinition<T> {
- private final Map<Character, IStructureElement<T>> elements;
+public class StructureDefinition<MultiBlock> implements IStructureDefinition<MultiBlock> {
+ private final Map<Character, IStructureElement<MultiBlock>> elements;
private final Map<String, String> shapes;
- private final Map<String, IStructureElement<T>[]> structures;
+ private final Map<String, IStructureElement<MultiBlock>[]> structures;
- public static <B> Builder<B> builder() {
+ public static <MultiBlock> Builder<MultiBlock> builder() {
return new Builder<>();
}
private StructureDefinition(
- Map<Character, IStructureElement<T>> elements,
+ Map<Character, IStructureElement<MultiBlock>> elements,
Map<String, String> shapes,
- Map<String, IStructureElement<T>[]> structures) {
+ Map<String, IStructureElement<MultiBlock>[]> structures) {
this.elements =elements;
this.shapes=shapes;
this.structures = structures;
}
- public static class Builder<T> {
+ public static class Builder<MultiBlock> {
private static final char A='\uA000';
private static final char B='\uB000';
private static final char C='\uC000';
private char d ='\uD000';
private final Map<Vec3Impl,Character> navigates;
- private final Map<Character, IStructureElement<T>> elements;
+ private final Map<Character, IStructureElement<MultiBlock>> elements;
private final Map<String, String> shapes;
private Builder() {
@@ -40,7 +40,7 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
shapes = new HashMap<>();
}
- public Map<Character, IStructureElement<T>> getElements() {
+ public Map<Character, IStructureElement<MultiBlock>> getElements() {
return elements;
}
@@ -57,7 +57,7 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
* @return
*/
@Deprecated
- public Builder<T> addShapeOldApi(String name, String[][] structurePiece) {
+ public Builder<MultiBlock> addShapeOldApi(String name, String[][] structurePiece) {
StringBuilder builder = new StringBuilder();
if (structurePiece.length > 0) {
for (String[] strings : structurePiece) {
@@ -142,7 +142,7 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
* @param structurePiece generated or written struct - DO NOT STORE IT ANYWHERE, or at least set them to null afterwards
* @return this builder
*/
- public Builder<T> addShape(String name, String[][] structurePiece) {
+ public Builder<MultiBlock> addShape(String name, String[][] structurePiece) {
StringBuilder builder = new StringBuilder();
if (structurePiece.length > 0) {
for (String[] strings : structurePiece) {
@@ -199,13 +199,13 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
return this;
}
- public Builder<T> addElement(Character name, IStructureElement<T> structurePiece) {
+ public Builder<MultiBlock> addElement(Character name, IStructureElement<MultiBlock> structurePiece) {
elements.putIfAbsent(name, structurePiece);
return this;
}
- public IStructureDefinition<T> build() {
- Map<String, IStructureElement<T>[]> structures = compileStructureMap();
+ public IStructureDefinition<MultiBlock> build() {
+ Map<String, IStructureElement<MultiBlock>[]> structures = compileStructureMap();
if(DEBUG_MODE){
return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), structures);
}else {
@@ -214,22 +214,22 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
}
@SuppressWarnings("unchecked")
- private Map<String, IStructureElement<T>[]> compileElementSetMap() {
+ private Map<String, IStructureElement<MultiBlock>[]> compileElementSetMap() {
Set<Integer> missing = new HashSet<>();
shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> {
- IStructureElement<T> iStructureElement = elements.get((char) c);
+ IStructureElement<MultiBlock> iStructureElement = elements.get((char) c);
if (iStructureElement == null) {
missing.add(c);
}
}));
if (missing.isEmpty()) {
- Map<String, IStructureElement<T>[]> map = new HashMap<>();
+ Map<String, IStructureElement<MultiBlock>[]> map = new HashMap<>();
shapes.forEach((key, value) -> {
Set<Character> chars=new HashSet<>();
for (char c : value.toCharArray()) {
chars.add(c);
}
- IStructureElement<T>[] compiled = new IStructureElement[chars.size()];
+ IStructureElement<MultiBlock>[] compiled = new IStructureElement[chars.size()];
int i=0;
for (Character aChar : chars) {
compiled[i++]=elements.get(aChar);
@@ -244,18 +244,18 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
}
@SuppressWarnings("unchecked")
- private Map<String, IStructureElement<T>[]> compileStructureMap() {
+ private Map<String, IStructureElement<MultiBlock>[]> compileStructureMap() {
Set<Integer> mising = new HashSet<>();
shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> {
- IStructureElement<T> iStructureElement = elements.get((char) c);
+ IStructureElement<MultiBlock> iStructureElement = elements.get((char) c);
if (iStructureElement == null) {
mising.add(c);
}
}));
if (mising.isEmpty()) {
- Map<String, IStructureElement<T>[]> map = new HashMap<>();
+ Map<String, IStructureElement<MultiBlock>[]> map = new HashMap<>();
shapes.forEach((key, value) -> {
- IStructureElement<T>[] compiled = new IStructureElement[value.length()];
+ IStructureElement<MultiBlock>[] compiled = new IStructureElement[value.length()];
for (int i = 0; i < value.length(); i++) {
compiled[i] = elements.get(value.charAt(i));
}
@@ -269,7 +269,7 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
}
}
- public Map<Character, IStructureElement<T>> getElements(){
+ public Map<Character, IStructureElement<MultiBlock>> getElements(){
return elements;
}
@@ -277,12 +277,12 @@ public class StructureDefinition<T> implements IStructureDefinition<T> {
return shapes;
}
- public Map<String, IStructureElement<T>[]> getStructures() {
+ public Map<String, IStructureElement<MultiBlock>[]> getStructures() {
return structures;
}
@Override
- public IStructureElement<T>[] getStructureFor(String name) {
+ public IStructureElement<MultiBlock>[] getStructureFor(String name) {
return structures.get(name);
}
} \ No newline at end of file
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java
new file mode 100644
index 0000000000..618c07f970
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java
@@ -0,0 +1,8 @@
+package com.github.technus.tectech.mechanics.structure;
+
+public enum StructureIterationType {
+ SPAWN_HINTS, //only spawn hint particles
+ BUILD_TEMPLATE, //only builds template
+ CHECK, //checks the structure skipping all unloaded chunks (for machines that were validated already)
+ CHECK_FULLY, //checks the structure failing on unloaded chunks (for machines that are not valid currently)
+}
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 521b0e7645..87ab275d39 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
@@ -22,6 +22,8 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
+import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE;
+import static com.github.technus.tectech.mechanics.structure.StructureIterationType.SPAWN_HINTS;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT;
import static java.lang.Integer.MIN_VALUE;
@@ -37,18 +39,18 @@ public class StructureUtility {
@SuppressWarnings("rawtypes")
private static final IStructureElement AIR = new IStructureElement() {
@Override
- public boolean check(Object t, World world, int x, int y, int z) {
+ public boolean check(Object multiBlock, World world, int x, int y, int z) {
return world.getBlock(x, y, z).getMaterial() == Material.air;
}
@Override
- public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 13);
return true;
}
@Override
- public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, Blocks.air, 0, 2);
return false;
}
@@ -56,18 +58,18 @@ public class StructureUtility {
@SuppressWarnings("rawtypes")
private static final IStructureElement NOT_AIR = new IStructureElement() {
@Override
- public boolean check(Object t, World world, int x, int y, int z) {
+ public boolean check(Object multiBlock, World world, int x, int y, int z) {
return world.getBlock(x, y, z).getMaterial() != Material.air;
}
@Override
- public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 14);
return true;
}
@Override
- public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, sHintCasingsTT, 14, 2);
return true;
}
@@ -75,18 +77,18 @@ public class StructureUtility {
@SuppressWarnings("rawtypes")
private static final IStructureElement ERROR = new IStructureElement() {
@Override
- public boolean check(Object t, World world, int x, int y, int z) {
+ public boolean check(Object multiBlock, World world, int x, int y, int z) {
return false;
}
@Override
- public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 15);
return true;
}
@Override
- public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) {
return true;
}
};
@@ -96,12 +98,12 @@ public class StructureUtility {
}
@SuppressWarnings("unchecked")
- public static <T> IStructureElement<T> isAir() {
+ public static <MultiBlock> IStructureElement<MultiBlock> isAir() {
return AIR;
}
@SuppressWarnings("unchecked")
- public static <T> IStructureElement<T> notAir() {
+ public static <MultiBlock> IStructureElement<MultiBlock> notAir() {
return NOT_AIR;
}
@@ -110,11 +112,11 @@ public class StructureUtility {
* Placement is always handled by this and does nothing.
* Makes little to no use it in fallback chain.
*
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
@SuppressWarnings("unchecked")
- public static <T> IStructureElement<T> error() {
+ public static <MultiBlock> IStructureElement<MultiBlock> error() {
return ERROR;
}
@@ -124,19 +126,19 @@ public class StructureUtility {
* Check always returns: true.
*
* @param dots
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
- public static <T> IStructureElementNoPlacement<T> ofHint(int dots) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofHint(int dots) {
int meta = dots - 1;
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, meta);
return false;
}
@@ -147,18 +149,18 @@ public class StructureUtility {
* Check always returns: true.
*
* @param icons
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
- public static <T> IStructureElementNoPlacement<T> ofHintDeferred(Supplier<IIcon[]> icons) {
- return new IStructureElementNoPlacement<T>() {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofHintDeferred(Supplier<IIcon[]> icons) {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, icons.get());
return false;
}
@@ -170,18 +172,18 @@ public class StructureUtility {
*
* @param icons
* @param RGBa
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
- public static <T> IStructureElementNoPlacement<T> ofHintDeferred(Supplier<IIcon[]> icons, short[] RGBa) {
- return new IStructureElementNoPlacement<T>() {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofHintDeferred(Supplier<IIcon[]> icons, short[] RGBa) {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(), RGBa);
return false;
}
@@ -195,19 +197,19 @@ public class StructureUtility {
/**
* Does not allow Block duplicates (with different meta)
*/
- public static <T> IStructureElementNoPlacement<T> ofBlocksFlatHint(Map<Block, Integer> blocsMap, Block hintBlock, int hintMeta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofBlocksFlatHint(Map<Block, Integer> blocsMap, Block hintBlock, int hintMeta) {
if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
@@ -226,57 +228,57 @@ public class StructureUtility {
throw new IllegalArgumentException();
}
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
};
}
- public static <T> IStructureElementNoPlacement<T> ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) {
if (block == null || hintBlock == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
};
}
- public static <T> IStructureElementNoPlacement<T> ofBlockHint(Block block, int meta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofBlockHint(Block block, int meta) {
return ofBlockHint(block, meta, block, meta);
}
- public static <T> IStructureElementNoPlacement<T> ofBlockAdderHint(IBlockAdder<T> iBlockAdder, Block hintBlock, int hintMeta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofBlockAdderHint(IBlockAdder<MultiBlock> iBlockAdder, Block hintBlock, int hintMeta) {
if (iBlockAdder == null || hintBlock == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
- return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
+ return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
@@ -286,46 +288,46 @@ public class StructureUtility {
/**
* Does not allow Block duplicates (with different meta)
*/
- public static <T> IStructureElement<T> ofBlocksFlat(Map<Block, Integer> blocsMap, Block defaultBlock, int defaultMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlocksFlat(Map<Block, Integer> blocsMap, Block defaultBlock, int defaultMeta) {
if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) {
throw new IllegalArgumentException();
}
if(defaultBlock instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
};
}else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
@@ -346,41 +348,41 @@ public class StructureUtility {
}
}
if(defaultBlock instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
};
}else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
@@ -388,46 +390,46 @@ public class StructureUtility {
}
}
- public static <T> IStructureElement<T> ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) {
if (block == null || defaultBlock == null) {
throw new IllegalArgumentException();
}
if(block instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
};
} else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
@@ -438,44 +440,44 @@ public class StructureUtility {
/**
* Same as above but ignores target meta id
*/
- public static <T> IStructureElement<T> ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) {
if (block == null || defaultBlock == null) {
throw new IllegalArgumentException();
}
if(block instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
return block == world.getBlock(x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
};
} else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
return block == world.getBlock(x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
@@ -483,21 +485,21 @@ public class StructureUtility {
}
}
- public static <T> IStructureElement<T> ofBlock(Block block, int meta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlock(Block block, int meta) {
return ofBlock(block, meta, block, meta);
}
/**
* Same as above but ignores target meta id
*/
- public static <T> IStructureElement<T> ofBlockAnyMeta(Block block) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlockAnyMeta(Block block) {
return ofBlockAnyMeta(block, block, 0);
}
/**
* Same as above but allows to set hint particle render
*/
- public static <T> IStructureElement<T> ofBlockAnyMeta(Block block,int defaultMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlockAnyMeta(Block block,int defaultMeta) {
return ofBlockAnyMeta(block, block, defaultMeta);
}
@@ -505,46 +507,46 @@ public class StructureUtility {
//region adders
- public static <T> IStructureElement<T> ofBlockAdder(IBlockAdder<T> iBlockAdder, Block defaultBlock, int defaultMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlockAdder(IBlockAdder<MultiBlock> iBlockAdder, Block defaultBlock, int defaultMeta) {
if (iBlockAdder == null || defaultBlock == null) {
throw new IllegalArgumentException();
}
if(defaultBlock instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
- return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
+ return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
};
}else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
Block worldBlock = world.getBlock(x, y, z);
- return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
+ return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z));
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
return true;
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta);
return true;
}
@@ -552,102 +554,102 @@ public class StructureUtility {
}
}
- public static <T> IStructureElement<T> ofBlockAdder(IBlockAdder<T> iBlockAdder, int dots) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofBlockAdder(IBlockAdder<MultiBlock> iBlockAdder, int dots) {
return ofBlockAdder(iBlockAdder, sHintCasingsTT, dots - 1);
}
- public static <T> IStructureElementNoPlacement<T> ofTileAdder(ITileAdder<T> iTileAdder, Block hintBlock, int hintMeta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofTileAdder(ITileAdder<MultiBlock> iTileAdder, Block hintBlock, int hintMeta) {
if (iTileAdder == null || hintBlock == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
TileEntity tileEntity = world.getTileEntity(x, y, z);
- return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t, tileEntity);
+ return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(multiBlock, tileEntity);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
};
}
- public static <T> IStructureElementNoPlacement<T> ofHatchAdder(IHatchAdder<T> iHatchAdder, int textureIndex, int dots) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofHatchAdder(IHatchAdder<MultiBlock> iHatchAdder, int textureIndex, int dots) {
return ofHatchAdder(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1);
}
- public static <T> IStructureElementNoPlacement<T> ofHatchAdder(IHatchAdder<T> iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) {
+ public static <MultiBlock> IStructureElementNoPlacement<MultiBlock> ofHatchAdder(IHatchAdder<MultiBlock> iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) {
if (iHatchAdder == null || hintBlock == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementNoPlacement<T>() {
+ return new IStructureElementNoPlacement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, 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);
+ return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
};
}
- public static <T> IStructureElement<T> ofHatchAdderOptional(IHatchAdder<T> iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofHatchAdderOptional(IHatchAdder<MultiBlock> iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) {
return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1, placeCasing, placeCasingMeta);
}
- public static <T> IStructureElement<T> ofHatchAdderOptional(IHatchAdder<T> iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) {
+ public static <MultiBlock> IStructureElement<MultiBlock> ofHatchAdderOptional(IHatchAdder<MultiBlock> iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) {
if (iHatchAdder == null || hintBlock == null) {
throw new IllegalArgumentException();
}
if(placeCasing instanceof ICustomBlockSetting){
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
TileEntity tileEntity = world.getTileEntity(x, y, z);
Block worldBlock = world.getBlock(x, y, z);
return (tileEntity instanceof IGregTechTileEntity &&
- iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) ||
+ iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) ||
(worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
((ICustomBlockSetting) placeCasing).setBlock(world, x, y, z, placeCasingMeta);
return true;
}
};
}else {
- return new IStructureElement<T>() {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
TileEntity tileEntity = world.getTileEntity(x, y, z);
Block worldBlock = world.getBlock(x, y, z);
return (tileEntity instanceof IGregTechTileEntity &&
- iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) ||
+ iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) ||
(worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta);
return true;
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2);
return true;
}
@@ -659,48 +661,48 @@ public class StructureUtility {
//region side effects
- public static <B extends IStructureElement<T>, T> IStructureElement<T> onElementPass(Consumer<T> onCheckPass, B element) {
- return new IStructureElement<T>() {
+ public static <MultiBlock> IStructureElement<MultiBlock> onElementPass(Consumer<MultiBlock> onCheckPass, IStructureElement<MultiBlock> element) {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- boolean check = element.check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ boolean check = element.check(multiBlock, world, x, y, z);
if (check) {
- onCheckPass.accept(t);
+ onCheckPass.accept(multiBlock);
}
return check;
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return element.placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return element.placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return element.spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return element.spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <B extends IStructureElement<T>, T> IStructureElement<T> onElementFail(Consumer<T> onFail, B element) {
- return new IStructureElement<T>() {
+ public static <MultiBlock> IStructureElement<MultiBlock> onElementFail(Consumer<MultiBlock> onFail, IStructureElement<MultiBlock> element) {
+ return new IStructureElement<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- boolean check = element.check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ boolean check = element.check(multiBlock, world, x, y, z);
if (!check) {
- onFail.accept(t);
+ onFail.accept(multiBlock);
}
return check;
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return element.placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return element.placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return element.spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return element.spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@@ -712,15 +714,15 @@ public class StructureUtility {
* If none does it will finally return false.
*
* @param elementChain
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
@SafeVarargs
- public static <T> IStructureElementChain<T> ofChain(IStructureElement<T>... elementChain) {
+ public static <MultiBlock> IStructureElementChain<MultiBlock> ofChain(IStructureElement<MultiBlock>... elementChain) {
if (elementChain == null || elementChain.length == 0) {
throw new IllegalArgumentException();
}
- for (IStructureElement<T> iStructureElement : elementChain) {
+ for (IStructureElement<MultiBlock> iStructureElement : elementChain) {
if (iStructureElement == null) {
throw new IllegalArgumentException();
}
@@ -733,317 +735,317 @@ public class StructureUtility {
* If none does it will finally return false.
*
* @param elementChain
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
@SuppressWarnings("unchecked")
- public static <T> IStructureElementChain<T> ofChain(List<IStructureElement<T>> elementChain) {
+ public static <MultiBlock> IStructureElementChain<MultiBlock> ofChain(List<IStructureElement<MultiBlock>> elementChain) {
return ofChain(elementChain.toArray(new IStructureElement[0]));
}
//region defer
- public static <T> IStructureElementDeferred<T> defer(Supplier<IStructureElement<T>> to) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Supplier<IStructureElement<MultiBlock>> to) {
if (to == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return to.get().check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return to.get().check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.get().placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.get().placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.get().spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.get().spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T> IStructureElementDeferred<T> defer(Function<T, IStructureElement<T>> to) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, IStructureElement<MultiBlock>> to) {
if (to == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return to.apply(t).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return to.apply(multiBlock).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(Function<T, K> keyExtractor, Map<K, IStructureElement<T>> map) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.get(keyExtractor.apply(t)).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.get(keyExtractor.apply(multiBlock)).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock)).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock)).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(Function<T, K> keyExtractor, Map<K, IStructureElement<T>> map, IStructureElement<T> defaultElem) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map, IStructureElement<MultiBlock> defaultElem) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.getOrDefault(keyExtractor.apply(t), defaultElem).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t), defaultElem).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t), defaultElem).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SafeVarargs
- public static <T> IStructureElementDeferred<T> defer(Function<T, Integer> keyExtractor, IStructureElement<T>... array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, Integer> keyExtractor, IStructureElement<MultiBlock>... array) {
if (keyExtractor == null || array == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return array[keyExtractor.apply(t)].check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return array[keyExtractor.apply(multiBlock)].check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t)].placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock)].placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t)].spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock)].spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SuppressWarnings("unchecked")
- public static <T> IStructureElementDeferred<T> defer(Function<T, Integer> keyExtractor, List<IStructureElement<T>> array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, Integer> keyExtractor, List<IStructureElement<MultiBlock>> array) {
return defer(keyExtractor, array.toArray(new IStructureElement[0]));
}
- public static <T> IStructureElementDeferred<T> defer(BiFunction<T, ItemStack, IStructureElement<T>> to) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(BiFunction<MultiBlock, ItemStack, IStructureElement<MultiBlock>> to) {
if (to == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return to.apply(t, null).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return to.apply(multiBlock, null).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(BiFunction<T, ItemStack, K> keyExtractor, Map<K, IStructureElement<T>> map) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(BiFunction<MultiBlock, ItemStack, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.get(keyExtractor.apply(t, null)).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.get(keyExtractor.apply(multiBlock, null)).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(BiFunction<T, ItemStack, K> keyExtractor, Map<K, IStructureElement<T>> map, IStructureElement<T> defaultElem) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(BiFunction<MultiBlock, ItemStack, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map, IStructureElement<MultiBlock> defaultElem) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.getOrDefault(keyExtractor.apply(t, null), defaultElem).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock, null), defaultElem).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SafeVarargs
- public static <T> IStructureElementDeferred<T> defer(BiFunction<T, ItemStack, Integer> keyExtractor, IStructureElement<T>... array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(BiFunction<MultiBlock, ItemStack, Integer> keyExtractor, IStructureElement<MultiBlock>... array) {
if (keyExtractor == null || array == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return array[keyExtractor.apply(t, null)].check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return array[keyExtractor.apply(multiBlock, null)].check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SuppressWarnings("unchecked")
- public static <T> IStructureElementDeferred<T> defer(BiFunction<T, ItemStack, Integer> keyExtractor, List<IStructureElement<T>> array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(BiFunction<MultiBlock, ItemStack, Integer> keyExtractor, List<IStructureElement<MultiBlock>> array) {
return defer(keyExtractor, array.toArray(new IStructureElement[0]));
}
- public static <T> IStructureElementDeferred<T> defer(Function<T, IStructureElement<T>> toCheck, BiFunction<T, ItemStack, IStructureElement<T>> to) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, IStructureElement<MultiBlock>> toCheck, BiFunction<MultiBlock, ItemStack, IStructureElement<MultiBlock>> to) {
if (to == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return toCheck.apply(t).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return toCheck.apply(multiBlock).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(Function<T, K> keyExtractorCheck, BiFunction<T, ItemStack, K> keyExtractor, Map<K, IStructureElement<T>> map) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, K> keyExtractorCheck, BiFunction<MultiBlock, ItemStack, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.get(keyExtractorCheck.apply(multiBlock)).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
- public static <T, K> IStructureElementDeferred<T> defer(Function<T, K> keyExtractorCheck, BiFunction<T, ItemStack, K> keyExtractor, Map<K, IStructureElement<T>> map, IStructureElement<T> defaultElem) {
+ public static <MultiBlock, K> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, K> keyExtractorCheck, BiFunction<MultiBlock, ItemStack, K> keyExtractor, Map<K, IStructureElement<MultiBlock>> map, IStructureElement<MultiBlock> defaultElem) {
if (keyExtractor == null || map == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return map.getOrDefault(keyExtractorCheck.apply(t), defaultElem).check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return map.getOrDefault(keyExtractorCheck.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SafeVarargs
- public static <T> IStructureElementDeferred<T> defer(Function<T, Integer> keyExtractorCheck, BiFunction<T, ItemStack, Integer> keyExtractor, IStructureElement<T>... array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, Integer> keyExtractorCheck, BiFunction<MultiBlock, ItemStack, Integer> keyExtractor, IStructureElement<MultiBlock>... array) {
if (keyExtractor == null || array == null) {
throw new IllegalArgumentException();
}
- return new IStructureElementDeferred<T>() {
+ return new IStructureElementDeferred<MultiBlock>() {
@Override
- public boolean check(T t, World world, int x, int y, int z) {
- return array[keyExtractorCheck.apply(t)].check(t, world, x, y, z);
+ public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) {
+ return array[keyExtractorCheck.apply(multiBlock)].check(multiBlock, world, x, y, z);
}
@Override
- public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger);
+ public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger);
}
@Override
- public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
- return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger);
+ public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) {
+ return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger);
}
};
}
@SuppressWarnings("unchecked")
- public static <T> IStructureElementDeferred<T> defer(Function<T, Integer> keyExtractorCheck, BiFunction<T, ItemStack, Integer> keyExtractor, List<IStructureElement<T>> array) {
+ public static <MultiBlock> IStructureElementDeferred<MultiBlock> defer(Function<MultiBlock, Integer> keyExtractorCheck, BiFunction<MultiBlock, ItemStack, Integer> keyExtractor, List<IStructureElement<MultiBlock>> array) {
return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0]));
}
@@ -1055,10 +1057,10 @@ public class StructureUtility {
* @param a
* @param b
* @param c
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
- public static <T> IStructureNavigate<T> step(int a, int b, int c) {
+ public static <MultiBlock> IStructureNavigate<MultiBlock> step(int a, int b, int c) {
return step(new Vec3Impl(a, b, c));
}
@@ -1066,11 +1068,11 @@ public class StructureUtility {
* Used internally, to generate skips for structure definitions
*
* @param step
- * @param <T>
+ * @param <MultiBlock>
* @return
*/
@SuppressWarnings("unchecked")
- public static <T> IStructureNavigate<T> step(Vec3Impl step) {
+ public static <MultiBlock> IStructureNavigate<MultiBlock> step(Vec3Impl step) {
if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) {
throw new IllegalArgumentException();
}
@@ -1085,8 +1087,8 @@ public class StructureUtility {
});
}
- private static <T> IStructureNavigate<T> stepA(int a, int b, int c) {
- return new IStructureNavigate<T>() {
+ private static <MultiBlock> IStructureNavigate<MultiBlock> stepA(int a, int b, int c) {
+ return new IStructureNavigate<MultiBlock>() {
@Override
public int getStepA() {
return a;
@@ -1104,8 +1106,8 @@ public class StructureUtility {
};
}
- private static <T> IStructureNavigate<T> stepB(int a, int b, int c) {
- return new IStructureNavigate<T>() {
+ private static <MultiBlock> IStructureNavigate<MultiBlock> stepB(int a, int b, int c) {
+ return new IStructureNavigate<MultiBlock>() {
@Override
public int getStepA() {
return a;
@@ -1128,8 +1130,8 @@ public class StructureUtility {
};
}
- private static <T> IStructureNavigate<T> stepC(int a, int b, int c) {
- return new IStructureNavigate<T>() {
+ private static <MultiBlock> IStructureNavigate<MultiBlock> stepC(int a, int b, int c) {
+ return new IStructureNavigate<MultiBlock>() {
@Override
public int getStepA() {
return a;
@@ -1376,6 +1378,134 @@ public class StructureUtility {
}
}
+ public static <MultiBlock> boolean iterate(MultiBlock object,
+ ItemStack trigger,
+ IStructureElement<MultiBlock>[] elements,
+ World world,
+ ExtendedFacing extendedFacing,
+ int basePositionX, int basePositionY, int basePositionZ,
+ int basePositionA, int basePositionB, int basePositionC,
+ StructureIterationType iterationType) {
+ if (world.isRemote ^ (iterationType == SPAWN_HINTS)) {
+ return false;
+ }
+
+ //change base position to base offset
+ basePositionA = -basePositionA;
+ basePositionB = -basePositionB;
+ basePositionC = -basePositionC;
+
+ int[] abc = new int[]{basePositionA, basePositionB, basePositionC};
+ int[] xyz = new int[3];
+
+ switch (iterationType) {
+ case SPAWN_HINTS: {
+ for (IStructureElement<MultiBlock> element : elements) {
+ if (element.isNavigating()) {
+ abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
+ abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
+ abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
+ } else {
+ extendedFacing.getWorldOffset(abc, xyz);
+ xyz[0] += basePositionX;
+ xyz[1] += basePositionY;
+ xyz[2] += basePositionZ;
+
+ element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger);
+
+ abc[0] += 1;
+ }
+ }
+ break;
+ }
+ case BUILD_TEMPLATE: {
+ for (IStructureElement<MultiBlock> element : elements) {
+ if (element.isNavigating()) {
+ abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
+ abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
+ abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
+ } else {
+ extendedFacing.getWorldOffset(abc, xyz);
+ xyz[0] += basePositionX;
+ xyz[1] += basePositionY;
+ xyz[2] += basePositionZ;
+
+ if (world.blockExists(xyz[0], xyz[1], xyz[2])) {
+ element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger);
+ }
+ abc[0] += 1;
+ }
+ }
+ break;
+ }
+ case CHECK: {
+ for (IStructureElement<MultiBlock> element : elements) {
+ if (element.isNavigating()) {
+ abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
+ abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
+ abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
+ } else {
+ extendedFacing.getWorldOffset(abc, xyz);
+ xyz[0] += basePositionX;
+ xyz[1] += basePositionY;
+ xyz[2] += basePositionZ;
+
+ 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;
+ }
+ break;
+ }
+ }
+ case CHECK_FULLY: {
+ for (IStructureElement<MultiBlock> element : elements) {
+ if (element.isNavigating()) {
+ abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA();
+ abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB();
+ abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC();
+ } else {
+ extendedFacing.getWorldOffset(abc, xyz);
+ xyz[0] += basePositionX;
+ xyz[1] += basePositionY;
+ xyz[2] += basePositionZ;
+
+ 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));
+ }
+ return false;
+ }
+ abc[0] += 1;
+ }
+ }
+ break;
+ }
+ default: return false;
+ }
+ return true;
+ }
+
/**
* Transposes shape (swaps B and C axis, can be used to un-transpose transposed shape)
* WARNING! Do not use on old api...
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java
index 908c4c4aca..36ebfb3d21 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java
@@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders;
import net.minecraft.block.Block;
-public interface IBlockAdder<T> {
+public interface IBlockAdder<MultiBlock> {
/**
* Callback on block added, needs to check if block is valid (and add it)
* @param block block attempted to add
* @param meta meta of block attempted to add
* @return is structure still valid
*/
- boolean apply(T t,Block block, Integer meta);
+ boolean apply(MultiBlock multiBlock, Block block, int meta);
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java
index a47befc2e8..0545a83d9e 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java
@@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-public interface IHatchAdder<T> {
+public interface IHatchAdder<MultiBlock> {
/**
* Callback to add hatch, needs to check if hatch is valid (and add it)
* @param iGregTechTileEntity hatch
- * @param aShort requested texture index, or null if not...
+ * @param textureIndex requested texture index, or null if not...
* @return managed to add hatch (structure still valid)
*/
- boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort);
+ boolean apply(MultiBlock multiBlock, IGregTechTileEntity iGregTechTileEntity, int textureIndex);
}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java
index cc3c7dbb7a..72d08751b5 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java
@@ -2,11 +2,11 @@ package com.github.technus.tectech.mechanics.structure.adders;
import net.minecraft.tileentity.TileEntity;
-public interface ITileAdder<T> {
+public interface ITileAdder<MultiBlock> {
/**
* Callback to add hatch, needs to check if tile is valid (and add it)
* @param tileEntity tile
* @return managed to add hatch (structure still valid)
*/
- boolean apply(T t,TileEntity tileEntity);
+ boolean apply(MultiBlock multiBlock, TileEntity tileEntity);
}
diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java
index 1843770e3a..8c693620b6 100644
--- a/src/main/java/com/github/technus/tectech/util/Util.java
+++ b/src/main/java/com/github/technus/tectech/util/Util.java
@@ -40,7 +40,6 @@ public final class Util {
private Util() {
}
- @SuppressWarnings("ComparatorMethodParameterNotUsed")
public static <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) {
SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>(
(e1, e2) -> {