f37812be3e
I may have got a bit behind with version control. A lot behind, in fact. Maybe I'll go back and split this sometime - then again, I probably won't. But hey, at least it's here!
39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package electroblob.wizardry.worldgen;
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.gen.structure.template.ITemplateProcessor;
|
|
import net.minecraft.world.gen.structure.template.Template;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
/** Structure template processor that allows multiple processors to be run in order. */
|
|
public class MultiTemplateProcessor implements ITemplateProcessor {
|
|
|
|
private final ITemplateProcessor[] processors;
|
|
private final boolean stopWhenNull;
|
|
|
|
/**
|
|
* Creates a new {@code MultiTemplateProcessor} which applies the given processors in order.
|
|
* @param stopWhenNull True to skip any remaining processors in the sequence if one of them returns null, false to
|
|
* process them all regardless. If this is false, you should ensure all the given processors
|
|
* accept null {@link net.minecraft.world.gen.structure.template.Template.BlockInfo} arguments.
|
|
* @param processors The processors to be run, in order (i.e. the first one given will be applied first).
|
|
*/
|
|
public MultiTemplateProcessor(boolean stopWhenNull, ITemplateProcessor... processors){
|
|
this.processors = processors;
|
|
this.stopWhenNull = stopWhenNull;
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public Template.BlockInfo processBlock(World world, BlockPos pos, Template.BlockInfo info){
|
|
|
|
for(ITemplateProcessor processor : processors){
|
|
info = processor.processBlock(world, pos, info);
|
|
if(stopWhenNull && info == null) break;
|
|
}
|
|
|
|
return info;
|
|
}
|
|
} |