From 15dbf1c823e31c437cde0b3e186f791b71ec3506 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 29 Apr 2020 20:50:47 +0200 Subject: Cleanup struct util --- .../mechanics/structure/IStructureElement.java | 8 +- .../structure/IStructureElementChain.java | 41 +++ .../structure/IStructureElementCheckOnly.java | 16 + .../structure/IStructureElementDeferred.java | 7 + .../structure/IStructureElementNoPlacement.java | 11 + .../mechanics/structure/IStructureFallback.java | 41 --- .../mechanics/structure/StructureUtility.java | 374 ++++++++------------- .../multi/GT_MetaTileEntity_EM_transformer.java | 2 +- 8 files changed, 223 insertions(+), 277 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java (limited to 'src/main/java/com') 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 7ed173fbfa..f946e71f91 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 @@ -9,13 +9,9 @@ import net.minecraft.world.World; public interface IStructureElement { boolean check(T t,World world,int x,int y,int z); - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ - return false; - } + boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger); - default boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger){ - return false; - } + boolean placeBlock(T t,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 new file mode 100644 index 0000000000..f9593ee1c5 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java @@ -0,0 +1,41 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElementChain extends IStructureElement { + IStructureElement[] fallbacks(); + + @Override + default boolean check(T t, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(t, world, x, y, z, trigger)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(t, world, x, y, z, trigger)) { + return true; + } + } + return false; + } +} 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 new file mode 100644 index 0000000000..ec15aea53b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java @@ -0,0 +1,16 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IStructureElementCheckOnly extends IStructureElement { + @Override + default boolean placeBlock(T t, 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){ + 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 new file mode 100644 index 0000000000..dbb74312a8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java @@ -0,0 +1,7 @@ +package com.github.technus.tectech.mechanics.structure; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElementDeferred extends IStructureElement { +} 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 new file mode 100644 index 0000000000..47e6060878 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java @@ -0,0 +1,11 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IStructureElementNoPlacement extends IStructureElement { + @Override + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java deleted file mode 100644 index 1c55753d19..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * Use StructureUtility to instantiate - */ -public interface IStructureFallback extends IStructureElement { - IStructureElement[] fallbacks(); - - @Override - default boolean check(T t, World world, int x, int y, int z){ - for (IStructureElement fallback : fallbacks()) { - if (fallback.check(t, world, x, y, z)) { - return true; - } - } - return false; - } - - @Override - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.spawnHint(t, world, x, y, z, trigger)) { - return true; - } - } - return false; - } - - @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.placeBlock(t, world, x, y, z, trigger)) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 467140cb2c..68c00cf1ac 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 @@ -39,6 +39,12 @@ public class StructureUtility { 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) { + world.setBlock(x,y,z,Blocks.air,0,2); + return false; + } }; @SuppressWarnings("rawtypes") private static final IStructureElement NOT_AIR= new IStructureElement() { @@ -52,6 +58,12 @@ public class StructureUtility { 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) { + world.setBlock(x,y,z,sHintCasingsTT,14,2); + return true; + } }; @SuppressWarnings("rawtypes") private static final IStructureElement ERROR= new IStructureElement() { @@ -65,6 +77,11 @@ public class StructureUtility { 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) { + return true; + } }; private StructureUtility(){ @@ -81,19 +98,48 @@ public class StructureUtility { return NOT_AIR; } + /** + * Check returns false. + * Placement is always handled by this and does nothing. + * Makes little to no use it in fallback chain. + * @param + * @return + */ @SuppressWarnings("unchecked") public static IStructureElement error(){ return ERROR; } + /** + * Check always returns: true. + * @param dots + * @param + * @return + */ + public static IStructureElementNoPlacement ofHint(int dots){ + int meta=dots-1; + return new IStructureElementNoPlacement() { + @Override + public boolean check(T t, 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) { + TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, meta); + return false; + } + }; + } + /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlatHint(Map blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); @@ -110,7 +156,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocksMapHint(Map> blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } @@ -119,7 +165,7 @@ public class StructureUtility { throw new IllegalArgumentException(); } } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); @@ -133,11 +179,11 @@ public class StructureUtility { }; } - public static IStructureElement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ if(block==null || hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); @@ -151,31 +197,15 @@ public class StructureUtility { }; } - public static IStructureElement ofBlockHint(Block block, int meta){ + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta){ return ofBlockHint(block, meta,block,meta); } - public static IStructureElement ofHint(int dots){ - int meta=dots-1; - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return false; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; - } - - public static IStructureElement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); @@ -192,8 +222,8 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlat(Map blocsMap,Block hintBlock,int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElement ofBlocksFlat(Map blocsMap,Block defaultBlock,int defaultMeta){ + if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -204,13 +234,13 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + 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) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; @@ -219,8 +249,8 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocskMap(Map> blocsMap,Block hintBlock,int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta){ + if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ throw new IllegalArgumentException(); } for (Set value : blocsMap.values()) { @@ -236,20 +266,20 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + 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) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; } - public static IStructureElement ofBlock(Block block, int meta,Block hintBlock,int hintMeta){ - if(block==null || hintBlock==null){ + public static IStructureElement ofBlock(Block block, int meta,Block defaultBlock,int defaultMeta){ + if(block==null || defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -260,13 +290,13 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + 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) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; @@ -276,8 +306,8 @@ public class StructureUtility { return ofBlock(block, meta,block,meta); } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ - if(iBlockAdder==null ||hintBlock==null){ + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block defaultBlock,int defaultMeta){ + if(iBlockAdder==null ||defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -288,48 +318,27 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + 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) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; } public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,int dots){ - int meta=dots-1; - if(iBlockAdder==null ){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,sHintCasingsTT,meta,2); - return true; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; + return ofBlockAdder(iBlockAdder,sHintCasingsTT,dots-1); } - public static IStructureElement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); @@ -344,85 +353,15 @@ public class StructureUtility { }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ + return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1); } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); - return true; - } - }; - } - - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && - (iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex) || - (world.getBlock(x,y,z)==placeCasing&&world.getBlockMetadata(x,y,z)==placeCasingMeta)); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); - return true; - } - }; - } - - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); @@ -437,6 +376,10 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); + } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -462,6 +405,10 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); + } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -489,7 +436,7 @@ public class StructureUtility { }; } - public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element){ + public static ,T> IStructureElement onElementPass(Consumer onCheckPass, B element){ return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -512,7 +459,7 @@ public class StructureUtility { }; } - public static IStructureElement onElementFail(Consumer onFail, IStructureElement element){ + public static ,T> IStructureElement onElementFail(Consumer onFail, B element){ return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -535,8 +482,16 @@ public class StructureUtility { }; } + + /** + * Take care while chaining, as it will try to call every structure element until it returns true. + * If none does it will finally return false. + * @param elementChain + * @param + * @return + */ @SafeVarargs - public static IStructureFallback ofElementChain(IStructureElement... elementChain){ + public static IStructureElementChain ofChain(IStructureElement... elementChain){ if(elementChain==null || elementChain.length==0){ throw new IllegalArgumentException(); } @@ -548,11 +503,23 @@ public class StructureUtility { return () -> elementChain; } - public static IStructureElement defer(Supplier> to){ + /** + * Take care while chaining, as it will try to call every structure element until it returns true. + * If none does it will finally return false. + * @param elementChain + * @param + * @return + */ + @SuppressWarnings("unchecked") + public static IStructureElementChain ofChain(List> elementChain){ + return ofChain(elementChain.toArray(new IStructureElement[0])); + } + + public static IStructureElementDeferred defer(Supplier> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return to.get().check(t, world, x, y, z); @@ -570,11 +537,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function> to){ + public static IStructureElementDeferred defer(Function> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return to.apply(t).check(t, world, x, y, z); @@ -592,11 +559,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,Map> map){ + public static IStructureElementDeferred defer(Function keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -614,11 +581,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -637,11 +604,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(Function keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -659,33 +626,16 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractor.apply(t)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(Function keyExtractor,List> array){ + return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElement defer(BiFunction> to){ + public static IStructureElementDeferred defer(BiFunction> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -703,11 +653,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor,Map> map){ + public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -725,11 +675,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -748,11 +698,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(BiFunction keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -770,33 +720,16 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor, List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array){ + return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElement defer(Function> toCheck, BiFunction> to){ + public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return toCheck.apply(t).check(t, world, x, y, z); @@ -814,11 +747,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -836,11 +769,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -859,11 +792,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @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); @@ -881,26 +814,9 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ + return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } public static IStructureNavigate step(int a,int b, int c){ @@ -996,7 +912,7 @@ public class StructureUtility { } /** - * Use only to get pseudo code... + * Used only to get pseudo code in structure writer... * @param world * @return */ diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 26a8af04ed..bfd74ab448 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -45,7 +45,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo {"111", "111", "111",}, }) .addElement('0', ofBlock(sBlockCasings1,15)) - .addElement('1', ofElementChain( + .addElement('1', ofChain( ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), onElementPass(t->t.casingCount++,ofBlock(sBlockCasingsTT,0)) )) -- cgit