Feature fixes

This commit is contained in:
paulevsGitch 2020-10-19 01:25:06 +03:00
parent 3583164e10
commit eaeabf4577
5 changed files with 49 additions and 66 deletions

View file

@ -51,8 +51,7 @@ public class BetterEnd implements ModInitializer {
SmithingRecipes.register(); SmithingRecipes.register();
StructureRegistry.register(); StructureRegistry.register();
FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class) FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register);
.forEach(BetterEndPlugin::register);
} }
public static Identifier makeID(String path) { public static Identifier makeID(String path) {

View file

@ -13,7 +13,7 @@ import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.chunk.NoiseChunkGenerator; import net.minecraft.world.gen.chunk.NoiseChunkGenerator;
import ru.betterend.world.generator.BetterEndBiomeSource; import ru.betterend.world.generator.BetterEndBiomeSource;
@Mixin(DimensionType.class) @Mixin(value = DimensionType.class, priority = 1)
public class DimensionTypeMixin public class DimensionTypeMixin
{ {
@Inject(method = "createEndGenerator", at = @At("HEAD"), cancellable = true) @Inject(method = "createEndGenerator", at = @At("HEAD"), cancellable = true)

View file

@ -1,61 +1,42 @@
package ru.betterend.mixin.common; package ru.betterend.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Supplier; import java.util.function.Supplier;
import org.spongepowered.asm.mixin.Mixin; import com.google.common.collect.Lists;
import org.spongepowered.asm.mixin.Shadow; import com.google.common.collect.Sets;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import net.minecraft.util.registry.Registry;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import com.google.common.collect.Lists; import net.minecraft.world.gen.feature.ConfiguredStructureFeature;
import com.google.common.collect.Sets; import ru.betterend.mixin.common.GenerationSettingsAccessor;
import ru.betterend.registry.FeatureRegistry;
import net.minecraft.util.math.BlockPos; import ru.betterend.registry.StructureRegistry;
import net.minecraft.world.ChunkRegion;
import net.minecraft.world.biome.Biome; public class FeaturesHelper {
import net.minecraft.world.biome.GenerationSettings; private static final Set<Biome> INJECTED = Sets.newHashSet();
import net.minecraft.world.gen.ChunkRandom;
import net.minecraft.world.gen.StructureAccessor; public static void addFeatures(Registry<Biome> biomeRegistry) {
import net.minecraft.world.gen.chunk.ChunkGenerator; biomeRegistry.forEach((biome) -> {
import net.minecraft.world.gen.feature.ConfiguredFeature; if (biome.getCategory() == Biome.Category.THEEND && !INJECTED.contains(biome)) {
import net.minecraft.world.gen.feature.ConfiguredStructureFeature; GenerationSettingsAccessor accessor = (GenerationSettingsAccessor) biome.getGenerationSettings();
import ru.betterend.registry.FeatureRegistry; List<Supplier<ConfiguredStructureFeature<?, ?>>> structures = Lists.newArrayList(accessor.getStructures());
import ru.betterend.registry.StructureRegistry; List<List<Supplier<ConfiguredFeature<?, ?>>>> preFeatures = accessor.getFeatures();
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = new ArrayList<List<Supplier<ConfiguredFeature<?, ?>>>>(preFeatures.size());
@Mixin(Biome.class) preFeatures.forEach((list) -> {
public abstract class BiomeMixin { features.add(Lists.newArrayList(list));
private static final Set<Biome> INJECTED = Sets.newHashSet(); });
@Shadow FeatureRegistry.registerBiomeFeatures(biome, features);
private Biome.Category category; StructureRegistry.registerBiomeStructures(biome, structures);
@Shadow accessor.setFeatures(features);
private GenerationSettings generationSettings; accessor.setStructures(structures);
INJECTED.add(biome);
@Inject(method = "generateFeatureStep", at = @At("HEAD")) }
public void generateFeatureStep(StructureAccessor structureAccessor, ChunkGenerator chunkGenerator, ChunkRegion region, long populationSeed, ChunkRandom random, BlockPos pos, CallbackInfo cinfo) { });
Biome biome = (Biome) (Object) this; }
if (!INJECTED.contains(biome)) { }
if (category.equals(Biome.Category.THEEND)) {
GenerationSettingsAccessor accessor = (GenerationSettingsAccessor) generationSettings;
List<Supplier<ConfiguredStructureFeature<?, ?>>> structures = Lists.newArrayList(accessor.getStructures());
List<List<Supplier<ConfiguredFeature<?, ?>>>> preFeatures = accessor.getFeatures();
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = new ArrayList<List<Supplier<ConfiguredFeature<?, ?>>>>(preFeatures.size());
preFeatures.forEach((list) -> {
features.add(Lists.newArrayList(list));
});
FeatureRegistry.registerBiomeFeatures(biome, features);
StructureRegistry.registerBiomeStructures(biome, structures);
accessor.setFeatures(features);
accessor.setStructures(structures);
}
INJECTED.add(biome);
}
}
}

View file

@ -17,6 +17,8 @@ import net.minecraft.world.biome.source.TheEndBiomeSource;
import net.minecraft.world.gen.ChunkRandom; import net.minecraft.world.gen.ChunkRandom;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.registry.BiomeRegistry; import ru.betterend.registry.BiomeRegistry;
import ru.betterend.registry.BlockTagRegistry;
import ru.betterend.util.FeaturesHelper;
import ru.betterend.world.biome.EndBiome; import ru.betterend.world.biome.EndBiome;
public class BetterEndBiomeSource extends BiomeSource { public class BetterEndBiomeSource extends BiomeSource {
@ -48,6 +50,8 @@ public class BetterEndBiomeSource extends BiomeSource {
this.noise = new SimplexNoiseSampler(chunkRandom); this.noise = new SimplexNoiseSampler(chunkRandom);
BiomeRegistry.mutateRegistry(biomeRegistry); BiomeRegistry.mutateRegistry(biomeRegistry);
BlockTagRegistry.addTerrainTags(biomeRegistry);
FeaturesHelper.addFeatures(biomeRegistry);
} }
private static List<Biome> getBiomes(Registry<Biome> biomeRegistry) { private static List<Biome> getBiomes(Registry<Biome> biomeRegistry) {

View file

@ -24,8 +24,7 @@
"LivingEntityMixin", "LivingEntityMixin",
"BoneMealItemMixin", "BoneMealItemMixin",
"SlimeEntityMixin", "SlimeEntityMixin",
"BrewingAccessor", "BrewingAccessor"
"BiomeMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1