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,21 +1,17 @@
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.Feature;
import net.minecraft.world.gen.feature.util.FeatureContext;
public class LimboGatewayFeature extends Feature<DefaultFeatureConfig> {
public LimboGatewayFeature() {
super(DefaultFeatureConfig.CODEC);
}
@Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig featureConfig) {
LimboGateway.INSTANCE.generate(world, pos);
return true;
}
@Override
public boolean generate(FeatureContext<DefaultFeatureConfig> context) {
LimboGateway.INSTANCE.generate(context.getWorld(), context.getPos());
return true;
}
}

View file

@ -4,7 +4,10 @@ import java.util.Set;
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.world.StructureWorldAccess;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys;
@ -17,4 +20,9 @@ public class SandstonePillarsV2Gateway extends SchematicV2Gateway {
public Set<RegistryKey<Biome>> getBiomes() {
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.InputStream;
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.HashBiMap;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
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.SchematicPlacer;
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.world.StructureWorldAccess;
public abstract class SchematicV2Gateway implements Gateway {
public abstract class SchematicV2Gateway implements Gateway, BiPredicate<StructureWorldAccess, BlockPos> {
private Schematic schematic;
private final String id;
public static final BiMap<String, SchematicV2Gateway> ID_SCHEMATIC_MAP = HashBiMap.create();

View file

@ -1,25 +1,20 @@
package org.dimdev.dimdoors.world.feature.gateway.schematic;
import java.util.Random;
import com.mojang.serialization.Codec;
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.util.FeatureContext;
public class SchematicV2GatewayFeature extends Feature<SchematicV2GatewayFeatureConfig> {
public SchematicV2GatewayFeature(Codec<SchematicV2GatewayFeatureConfig> codec) {
super(codec);
}
@Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, SchematicV2GatewayFeatureConfig featureConfig) {
if (world.getBlockState(blockPos).getBlock() instanceof AirBlock && world.getBlockState(blockPos.down()).getBlock() instanceof FallingBlock) {
featureConfig.getGateway().generate(world, blockPos);
@Override
public boolean generate(FeatureContext<SchematicV2GatewayFeatureConfig> featureContext) {
if (featureContext.getWorld().getBlockState(featureContext.getPos()).getBlock() instanceof AirBlock && featureContext.getConfig().getGateway().test(featureContext.getWorld(), featureContext.getPos())) {
featureContext.getConfig().getGateway().generate(featureContext.getWorld(), featureContext.getPos());
return true;
}
return false;

View file

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

View file

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