Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / DefinedStructureProcessorRule.java
package net.minecraft.server;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.UnmodifiableIterator;
import com.mojang.datafixers.Dynamic;
import com.mojang.datafixers.types.DynamicOps;
import java.util.List;
import java.util.Random;
import javax.annotation.Nullable;

public class DefinedStructureProcessorRule extends DefinedStructureProcessor {

    private final ImmutableList<DefinedStructureProcessorPredicates> a;

    public DefinedStructureProcessorRule(List<DefinedStructureProcessorPredicates> list) {
        this.a = ImmutableList.copyOf(list);
    }

    public DefinedStructureProcessorRule(Dynamic<?> dynamic) {
        this(dynamic.get("rules").asList(DefinedStructureProcessorPredicates::a));
    }

    @Nullable
    @Override
    public DefinedStructure.BlockInfo a(IWorldReader iworldreader, BlockPosition blockposition, DefinedStructure.BlockInfo definedstructure_blockinfo, DefinedStructure.BlockInfo definedstructure_blockinfo1, DefinedStructureInfo definedstructureinfo) {
        Random random = new Random(MathHelper.a((BaseBlockPosition) definedstructure_blockinfo1.a));
        IBlockData iblockdata = iworldreader.getType(definedstructure_blockinfo1.a);
        UnmodifiableIterator unmodifiableiterator = this.a.iterator();

        DefinedStructureProcessorPredicates definedstructureprocessorpredicates;

        do {
            if (!unmodifiableiterator.hasNext()) {
                return definedstructure_blockinfo1;
            }

            definedstructureprocessorpredicates = (DefinedStructureProcessorPredicates) unmodifiableiterator.next();
        } while (!definedstructureprocessorpredicates.a(definedstructure_blockinfo1.b, iblockdata, random));

        return new DefinedStructure.BlockInfo(definedstructure_blockinfo1.a, definedstructureprocessorpredicates.a(), definedstructureprocessorpredicates.b());
    }

    @Override
    protected DefinedStructureStructureProcessorType a() {
        return DefinedStructureStructureProcessorType.f;
    }

    @Override
    protected <T> Dynamic<T> a(DynamicOps<T> dynamicops) {
        return new Dynamic(dynamicops, dynamicops.createMap(ImmutableMap.of(dynamicops.createString("rules"), dynamicops.createList(this.a.stream().map((definedstructureprocessorpredicates) -> {
            return definedstructureprocessorpredicates.a(dynamicops).getValue();
        })))));
    }
}