Features (update 17 of 20)

This commit is contained in:
SD 2021-02-12 08:38:49 +05:30
parent 1bc2b3f933
commit 3561e9a7b6
No known key found for this signature in database
GPG key ID: E36B57EE08544BC5
6 changed files with 31 additions and 26 deletions

View file

@ -1,12 +1,8 @@
package org.dimdev.dimdoors.world.feature.gateway; package org.dimdev.dimdoors.world.feature.gateway;
import java.util.Random;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.util.FeatureContext;
public class LimboGatewayFeature extends Feature<DefaultFeatureConfig> { public class LimboGatewayFeature extends Feature<DefaultFeatureConfig> {
public LimboGatewayFeature() { public LimboGatewayFeature() {
@ -14,8 +10,8 @@ public class LimboGatewayFeature extends Feature<DefaultFeatureConfig> {
} }
@Override @Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig featureConfig) { public boolean generate(FeatureContext<DefaultFeatureConfig> context) {
LimboGateway.INSTANCE.generate(world, pos); LimboGateway.INSTANCE.generate(context.getWorld(), context.getPos());
return true; return true;
} }
} }

View file

@ -4,7 +4,10 @@ import java.util.Set;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import net.minecraft.block.SandBlock;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.RegistryKey; import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.biome.BiomeKeys;
@ -17,4 +20,9 @@ public class SandstonePillarsV2Gateway extends SchematicV2Gateway {
public Set<RegistryKey<Biome>> getBiomes() { public Set<RegistryKey<Biome>> getBiomes() {
return ImmutableSet.of(BiomeKeys.DESERT, BiomeKeys.DESERT_LAKES, BiomeKeys.DESERT_HILLS); return ImmutableSet.of(BiomeKeys.DESERT, BiomeKeys.DESERT_LAKES, BiomeKeys.DESERT_HILLS);
} }
@Override
public boolean test(StructureWorldAccess structureWorldAccess, BlockPos blockPos) {
return structureWorldAccess.getBlockState(blockPos.down()).getBlock() instanceof SandBlock;
}
} }

View file

@ -3,11 +3,14 @@ package org.dimdev.dimdoors.world.feature.gateway.schematic;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UncheckedIOException; import java.io.UncheckedIOException;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
import com.google.common.collect.BiMap; import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import org.dimdev.dimdoors.DimensionalDoorsInitializer; import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.pockets.TemplateUtils; import org.dimdev.dimdoors.pockets.TemplateUtils;
import org.dimdev.dimdoors.util.Location;
import org.dimdev.dimdoors.util.schematic.v2.Schematic; import org.dimdev.dimdoors.util.schematic.v2.Schematic;
import org.dimdev.dimdoors.util.schematic.v2.SchematicPlacer; import org.dimdev.dimdoors.util.schematic.v2.SchematicPlacer;
import org.dimdev.dimdoors.world.feature.gateway.Gateway; import org.dimdev.dimdoors.world.feature.gateway.Gateway;
@ -16,7 +19,7 @@ import net.minecraft.nbt.NbtIo;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.StructureWorldAccess;
public abstract class SchematicV2Gateway implements Gateway { public abstract class SchematicV2Gateway implements Gateway, BiPredicate<StructureWorldAccess, BlockPos> {
private Schematic schematic; private Schematic schematic;
private final String id; private final String id;
public static final BiMap<String, SchematicV2Gateway> ID_SCHEMATIC_MAP = HashBiMap.create(); public static final BiMap<String, SchematicV2Gateway> ID_SCHEMATIC_MAP = HashBiMap.create();

View file

@ -1,15 +1,10 @@
package org.dimdev.dimdoors.world.feature.gateway.schematic; package org.dimdev.dimdoors.world.feature.gateway.schematic;
import java.util.Random;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.block.AirBlock; import net.minecraft.block.AirBlock;
import net.minecraft.block.FallingBlock;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.util.FeatureContext;
public class SchematicV2GatewayFeature extends Feature<SchematicV2GatewayFeatureConfig> { public class SchematicV2GatewayFeature extends Feature<SchematicV2GatewayFeatureConfig> {
public SchematicV2GatewayFeature(Codec<SchematicV2GatewayFeatureConfig> codec) { public SchematicV2GatewayFeature(Codec<SchematicV2GatewayFeatureConfig> codec) {
@ -17,9 +12,9 @@ public class SchematicV2GatewayFeature extends Feature<SchematicV2GatewayFeature
} }
@Override @Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, SchematicV2GatewayFeatureConfig featureConfig) { public boolean generate(FeatureContext<SchematicV2GatewayFeatureConfig> featureContext) {
if (world.getBlockState(blockPos).getBlock() instanceof AirBlock && world.getBlockState(blockPos.down()).getBlock() instanceof FallingBlock) { if (featureContext.getWorld().getBlockState(featureContext.getPos()).getBlock() instanceof AirBlock && featureContext.getConfig().getGateway().test(featureContext.getWorld(), featureContext.getPos())) {
featureConfig.getGateway().generate(world, blockPos); featureContext.getConfig().getGateway().generate(featureContext.getWorld(), featureContext.getPos());
return true; return true;
} }
return false; return false;

View file

@ -6,11 +6,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.FeatureConfig;
public class SchematicV2GatewayFeatureConfig implements FeatureConfig { public class SchematicV2GatewayFeatureConfig implements FeatureConfig {
public static final Codec<SchematicV2GatewayFeatureConfig> CODEC = RecordCodecBuilder.create((instance) -> { public static final Codec<SchematicV2GatewayFeatureConfig> CODEC = RecordCodecBuilder.create((instance) -> instance.group(
return instance.group(
Codec.STRING.fieldOf("gatewayId").forGetter(SchematicV2GatewayFeatureConfig::getGatewayId) Codec.STRING.fieldOf("gatewayId").forGetter(SchematicV2GatewayFeatureConfig::getGatewayId)
).apply(instance, SchematicV2GatewayFeatureConfig::new); ).apply(instance, SchematicV2GatewayFeatureConfig::new));
});
private final SchematicV2Gateway gateway; private final SchematicV2Gateway gateway;
private final String gatewayId; private final String gatewayId;

View file

@ -47,4 +47,9 @@ public class TwoPillarsV2Gateway extends SchematicV2Gateway {
public Set<RegistryKey<Biome>> getBiomes() { public Set<RegistryKey<Biome>> getBiomes() {
return BuiltinBiomesAccessor.getIdMap().int2ObjectEntrySet().stream().map(Map.Entry::getValue).collect(Collectors.toSet()); return BuiltinBiomesAccessor.getIdMap().int2ObjectEntrySet().stream().map(Map.Entry::getValue).collect(Collectors.toSet());
} }
@Override
public boolean test(StructureWorldAccess structureWorldAccess, BlockPos blockPos) {
return true;
}
} }