Spaces:
Build error
Build error
package net.minecraft.world.flag; | |
import com.google.common.collect.Sets; | |
import com.mojang.logging.LogUtils; | |
import com.mojang.serialization.Codec; | |
import com.mojang.serialization.DataResult; | |
import java.util.Arrays; | |
import java.util.HashSet; | |
import java.util.LinkedHashMap; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.Set; | |
import java.util.function.Consumer; | |
import net.minecraft.resources.ResourceLocation; | |
import org.slf4j.Logger; | |
public class FeatureFlagRegistry { | |
private static final Logger LOGGER = LogUtils.getLogger(); | |
private final FeatureFlagUniverse universe; | |
private final Map<ResourceLocation, FeatureFlag> names; | |
private final FeatureFlagSet allFlags; | |
FeatureFlagRegistry(FeatureFlagUniverse p_249715_, FeatureFlagSet p_249277_, Map<ResourceLocation, FeatureFlag> p_249557_) { | |
this.universe = p_249715_; | |
this.names = p_249557_; | |
this.allFlags = p_249277_; | |
} | |
public boolean isSubset(FeatureFlagSet p_251939_) { | |
return p_251939_.isSubsetOf(this.allFlags); | |
} | |
public FeatureFlagSet allFlags() { | |
return this.allFlags; | |
} | |
public FeatureFlagSet fromNames(Iterable<ResourceLocation> p_250759_) { | |
return this.fromNames(p_250759_, p_251224_ -> LOGGER.warn("Unknown feature flag: {}", p_251224_)); | |
} | |
public FeatureFlagSet subset(FeatureFlag... p_252295_) { | |
return FeatureFlagSet.create(this.universe, Arrays.asList(p_252295_)); | |
} | |
public FeatureFlagSet fromNames(Iterable<ResourceLocation> p_251769_, Consumer<ResourceLocation> p_251521_) { | |
Set<FeatureFlag> set = Sets.newIdentityHashSet(); | |
for (ResourceLocation resourcelocation : p_251769_) { | |
FeatureFlag featureflag = this.names.get(resourcelocation); | |
if (featureflag == null) { | |
p_251521_.accept(resourcelocation); | |
} else { | |
set.add(featureflag); | |
} | |
} | |
return FeatureFlagSet.create(this.universe, set); | |
} | |
public Set<ResourceLocation> toNames(FeatureFlagSet p_251153_) { | |
Set<ResourceLocation> set = new HashSet<>(); | |
this.names.forEach((p_252018_, p_250772_) -> { | |
if (p_251153_.contains(p_250772_)) { | |
set.add(p_252018_); | |
} | |
}); | |
return set; | |
} | |
public Codec<FeatureFlagSet> codec() { | |
return ResourceLocation.CODEC.listOf().comapFlatMap(p_275144_ -> { | |
Set<ResourceLocation> set = new HashSet<>(); | |
FeatureFlagSet featureflagset = this.fromNames(p_275144_, set::add); | |
return !set.isEmpty() ? DataResult.error(() -> "Unknown feature ids: " + set, featureflagset) : DataResult.success(featureflagset); | |
}, p_249796_ -> List.copyOf(this.toNames(p_249796_))); | |
} | |
public static class Builder { | |
private final FeatureFlagUniverse universe; | |
private int id; | |
private final Map<ResourceLocation, FeatureFlag> flags = new LinkedHashMap<>(); | |
public Builder(String p_251576_) { | |
this.universe = new FeatureFlagUniverse(p_251576_); | |
} | |
public FeatureFlag createVanilla(String p_251782_) { | |
return this.create(ResourceLocation.withDefaultNamespace(p_251782_)); | |
} | |
public FeatureFlag create(ResourceLocation p_250098_) { | |
if (this.id >= 64) { | |
throw new IllegalStateException("Too many feature flags"); | |
} else { | |
FeatureFlag featureflag = new FeatureFlag(this.universe, this.id++); | |
FeatureFlag featureflag1 = this.flags.put(p_250098_, featureflag); | |
if (featureflag1 != null) { | |
throw new IllegalStateException("Duplicate feature flag " + p_250098_); | |
} else { | |
return featureflag; | |
} | |
} | |
} | |
public FeatureFlagRegistry build() { | |
FeatureFlagSet featureflagset = FeatureFlagSet.create(this.universe, this.flags.values()); | |
return new FeatureFlagRegistry(this.universe, featureflagset, Map.copyOf(this.flags)); | |
} | |
} | |
} |