package com.gtnewhorizon.structurelib.structure; import static com.gtnewhorizon.structurelib.structure.IStructureWalker.ignoreBlockUnloaded; import static com.gtnewhorizon.structurelib.structure.IStructureWalker.skipBlockUnloaded; import java.util.function.Function; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import com.gtnewhorizon.structurelib.StructureLib; import com.gtnewhorizon.structurelib.StructureLibAPI; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; /** * This is the structure definition of your multi. You will have one of these for each multi. * *
* You will construct this definition once per multi, either at class load or at first call to your variant of * {@code getStructureDefinition()}. You can use a {@link ClassValue ClassValue<IStructureDefinition<?>>} if you * have a template for subclass. You can also use {@link StructureUtility#defer(Function) defer()} or its overloads for * simpler cases, but it is slightly less performant as it will allocate new objects on each structure check, whereas * {@link ClassValue} will allocate once and cache it onwards. *
*
* {@linkplain IStructureDefinition} is constructed using {@link IStructureDefinition#builder()} *
* Builder has two main methods: *
* Might, but is not required, to throw {@link java.util.NoSuchElementException} if the given structure piece is not
* found.
*
* @param name same name as for other methods here
* @return the array of elements to process
* @throws java.util.NoSuchElementException if the given structure piece is not found and the moon phase perfectly
* matches
*/
IStructureElement