diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/GTStructureUtility.java')
-rw-r--r-- | src/main/java/gregtech/api/util/GTStructureUtility.java | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/GTStructureUtility.java b/src/main/java/gregtech/api/util/GTStructureUtility.java index 1ee55ed200..6e7da9696d 100644 --- a/src/main/java/gregtech/api/util/GTStructureUtility.java +++ b/src/main/java/gregtech/api/util/GTStructureUtility.java @@ -19,6 +19,7 @@ import javax.annotation.Nonnull; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; @@ -36,9 +37,12 @@ import com.gtnewhorizon.structurelib.structure.IStructureElement; import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; import com.gtnewhorizon.structurelib.util.ItemStackPredicate; +import cofh.asmhooks.block.BlockTickingWater; +import cofh.asmhooks.block.BlockWater; import gregtech.api.GregTechAPI; import gregtech.api.enums.HeatingCoilLevel; import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.IHeatingCoil; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -48,6 +52,8 @@ import gregtech.common.blocks.BlockCasings5; import gregtech.common.blocks.BlockCyclotronCoils; import gregtech.common.blocks.BlockFrameBox; import gregtech.common.blocks.ItemMachines; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; public class GTStructureUtility { @@ -65,6 +71,42 @@ public class GTStructureUtility { return ofHatchAdder(aHatchAdder, aTextureIndex, StructureLibAPI.getBlockHint(), aDots - 1); } + public static <T> IStructureElement<T> ofAnyWater(boolean allowFlowing) { + return new IStructureElement<>() { + + final Block distilledWater = BlocksItems.getFluidBlock(InternalName.fluidDistilledWater); + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block == Blocks.water || block == distilledWater) return true; + if (allowFlowing && block == Blocks.flowing_water) return true; + if (Mods.COFHCore.isModLoaded()) { + return block instanceof BlockWater || block instanceof BlockTickingWater; + } + return false; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x, y, z, Blocks.water, 0, 2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, Blocks.water, 0); + return true; + } + + @Override + public IStructureElement.BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + return IStructureElement.BlocksToPlace.create(Blocks.water, 0); + } + }; + } + public static <T> IStructureElement<T> ofFrame(Materials aFrameMaterial) { if (aFrameMaterial == null) throw new IllegalArgumentException(); return new IStructureElement<>() { |