use of com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace in project blueprint by team-abnormals.
the class AdvancementModificationManager method apply.
@Override
protected void apply(Map<ResourceLocation, JsonElement> map, ResourceManager resourceManager, ProfilerFiller profiler) {
this.reset();
SelectionSpace unmodifiedAdvancements = this.getUnmodifiedEntries();
for (Map.Entry<ResourceLocation, JsonElement> entry : map.entrySet()) {
ResourceLocation resourcelocation = entry.getKey();
if (resourcelocation.getPath().startsWith("_"))
continue;
try {
TargetedModifier<Builder, Void, DeserializationContext> targetedAdvancementModifier = TargetedModifier.deserialize(entry.getValue().getAsJsonObject(), "advancement", new DeserializationContext(resourcelocation, this.lootPredicateManager), AdvancementModifiers.REGISTRY, true);
this.addModifiers(targetedAdvancementModifier.getTargetSelector().getTargetNames(unmodifiedAdvancements), targetedAdvancementModifier.getPriority(), targetedAdvancementModifier.getConfiguredModifiers());
} catch (IllegalArgumentException | JsonParseException jsonparseexception) {
Blueprint.LOGGER.error("Parsing error loading Advancement Modifier: {}", resourcelocation, jsonparseexception);
}
}
Blueprint.LOGGER.info("Advancement Modification Manager has assigned {} sets of modifiers", this.size());
}
use of com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace in project blueprint by team-abnormals.
the class BiomeSourceModificationManager method onServerAboutToStart.
@SuppressWarnings("unchecked")
@SubscribeEvent
public static void onServerAboutToStart(ServerAboutToStartEvent event) {
if (INSTANCE == null)
return;
List<BiomeSourceModifier> modifiers = INSTANCE.modifiers;
if (modifiers.isEmpty())
return;
MinecraftServer server = event.getServer();
WorldGenSettings worldGenSettings = server.getWorldData().worldGenSettings();
var dimensions = worldGenSettings.dimensions();
var keySet = dimensions.keySet();
SelectionSpace selectionSpace = (consumer) -> keySet.forEach(location -> consumer.accept(location, null));
HashMap<ResourceLocation, ArrayList<BiomeUtil.ModdedBiomeProvider>> map = new HashMap<>();
for (BiomeSourceModifier modifier : modifiers) {
BiomeUtil.ModdedBiomeProvider provider = modifier.provider();
if (provider.getWeight() <= 0)
return;
modifier.targetSelector().getTargetNames(selectionSpace).forEach(location -> {
map.computeIfAbsent(location, __ -> new ArrayList<>()).add(provider);
});
}
long seed = worldGenSettings.seed();
RegistryAccess registryAccess = server.registryAccess();
Registry<Biome> biomeRegistry = registryAccess.registryOrThrow(Registry.BIOME_REGISTRY);
Registry<NormalNoise.NoiseParameters> noiseParametersRegistry = registryAccess.registryOrThrow(Registry.NOISE_REGISTRY);
Registry<DensityFunction> densityFunctionRegistry = registryAccess.registryOrThrow(Registry.DENSITY_FUNCTION_REGISTRY);
NoiseSettings defaultNoiseSettings = registryAccess.registryOrThrow(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY).getOrThrow(NoiseGeneratorSettings.OVERWORLD).noiseSettings();
DensityFunction defaultModdedness = densityFunctionRegistry.getOrThrow(ModdedBiomeSource.DEFAULT_MODDEDNESS);
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : dimensions.entrySet()) {
ResourceLocation location = entry.getKey().location();
ArrayList<BiomeUtil.ModdedBiomeProvider> providersForKey = map.get(location);
if (providersForKey != null && !providersForKey.isEmpty()) {
ChunkGenerator chunkGenerator = entry.getValue().generator();
BiomeSource source = chunkGenerator.getBiomeSource();
// TODO: Mostly experimental! Works with Terralith, Biomes O' Plenty, and more, but still needs more testing!
if (!(source instanceof FixedBiomeSource) && !(source instanceof CheckerboardColumnBiomeSource)) {
boolean legacy = false;
boolean noiseBased = chunkGenerator instanceof NoiseBasedChunkGenerator;
NoiseSettings noiseSettings = defaultNoiseSettings;
if (noiseBased) {
try {
NoiseGeneratorSettings settings = ((Holder<NoiseGeneratorSettings>) NOISE_GENERATOR_SETTINGS.get(chunkGenerator)).value();
if (settings != null) {
legacy = settings.useLegacyRandomSource();
noiseSettings = settings.noiseSettings();
}
} catch (IllegalAccessException ignored) {
}
}
DensityFunction moddedness = densityFunctionRegistry.get(new ResourceLocation(Blueprint.MOD_ID, "moddedness/" + location.getNamespace() + "/" + location.getPath()));
ModdedBiomeSource moddedBiomeSource = new ModdedBiomeSource(biomeRegistry, noiseParametersRegistry, densityFunctionRegistry, source, noiseSettings, seed, legacy, moddedness != null ? moddedness : defaultModdedness, new ModdedBiomeSource.WeightedBiomeSlices(providersForKey.toArray(new BiomeUtil.ModdedBiomeProvider[0])));
chunkGenerator.biomeSource = moddedBiomeSource;
chunkGenerator.runtimeBiomeSource = moddedBiomeSource;
if (noiseBased)
((ModdedSurfaceSystem) ((NoiseBasedChunkGenerator) chunkGenerator).surfaceSystem).setModdedBiomeSource(moddedBiomeSource);
}
}
}
}
use of com.teamabnormals.blueprint.core.util.modification.targeting.SelectionSpace in project blueprint by team-abnormals.
the class LootModificationManager method apply.
@Override
protected void apply(Map<ResourceLocation, JsonElement> map, ResourceManager resourceManager, ProfilerFiller profiler) {
this.reset();
SelectionSpace unmodifiedTables = this.getUnmodifiedEntries();
for (Map.Entry<ResourceLocation, JsonElement> entry : map.entrySet()) {
ResourceLocation resourcelocation = entry.getKey();
if (resourcelocation.getPath().startsWith("_"))
continue;
try {
TargetedModifier<LootTableLoadEvent, Gson, Pair<Gson, PredicateManager>> targetedModifier = TargetedModifier.deserialize(entry.getValue().getAsJsonObject(), Pair.of(GSON, this.lootPredicateManager), LootModifiers.REGISTRY);
this.addModifiers(targetedModifier.getTargetSelector().getTargetNames(unmodifiedTables), targetedModifier.getPriority(), targetedModifier.getConfiguredModifiers());
} catch (IllegalArgumentException | JsonParseException jsonparseexception) {
Blueprint.LOGGER.error("Parsing error loading Loot Modifier: {}", resourcelocation, jsonparseexception);
}
}
Blueprint.LOGGER.info("Loot Modification Manager has assigned {} sets of modifiers", this.size());
}
Aggregations