Simple WorldBlender crash fix, Pallidium blocks (WIP)
This commit is contained in:
parent
80590c1a7e
commit
e32c6c76cb
18 changed files with 126 additions and 20 deletions
|
@ -173,6 +173,10 @@ public class EndBlocks extends BlocksRegistry {
|
||||||
);
|
);
|
||||||
public static final Block SANGNUM = registerBlock("sangnum", new EndTerrainBlock(MaterialColor.COLOR_RED));
|
public static final Block SANGNUM = registerBlock("sangnum", new EndTerrainBlock(MaterialColor.COLOR_RED));
|
||||||
public static final Block RUTISCUS = registerBlock("rutiscus", new EndTerrainBlock(MaterialColor.COLOR_ORANGE));
|
public static final Block RUTISCUS = registerBlock("rutiscus", new EndTerrainBlock(MaterialColor.COLOR_ORANGE));
|
||||||
|
public static final Block PALLIDIUM = registerBlock("pallidium", new EndTerrainBlock(MaterialColor.COLOR_LIGHT_GRAY));
|
||||||
|
public static final Block PALLIDIUM_TRANSITION_1 = registerBlock("pallidium_transition_1", new EndTerrainBlock(MaterialColor.COLOR_LIGHT_GRAY));
|
||||||
|
public static final Block PALLIDIUM_TRANSITION_2 = registerBlock("pallidium_transition_2", new EndTerrainBlock(MaterialColor.COLOR_LIGHT_GRAY));
|
||||||
|
public static final Block PALLIDIUM_TRANSITION_3 = registerBlock("pallidium_transition_3", new EndTerrainBlock(MaterialColor.COLOR_LIGHT_GRAY));
|
||||||
|
|
||||||
// Roads //
|
// Roads //
|
||||||
public static final Block END_MYCELIUM_PATH = registerBlock("end_mycelium_path", new BasePathBlock(END_MYCELIUM));
|
public static final Block END_MYCELIUM_PATH = registerBlock("end_mycelium_path", new BasePathBlock(END_MYCELIUM));
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
package ru.betterend.util;
|
package ru.betterend.util;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.BlockPos.MutableBlockPos;
|
import net.minecraft.core.BlockPos.MutableBlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.FallingBlock;
|
import net.minecraft.world.level.block.FallingBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import ru.bclib.blocks.BaseDoublePlantBlock;
|
import ru.bclib.blocks.BaseDoublePlantBlock;
|
||||||
import ru.bclib.blocks.BaseVineBlock;
|
import ru.bclib.blocks.BaseVineBlock;
|
||||||
import ru.bclib.blocks.StalactiteBlock;
|
import ru.bclib.blocks.StalactiteBlock;
|
||||||
|
@ -24,16 +28,23 @@ public class BlockFixer {
|
||||||
private static final BlockState WATER = Blocks.WATER.defaultBlockState();
|
private static final BlockState WATER = Blocks.WATER.defaultBlockState();
|
||||||
|
|
||||||
public static void fixBlocks(LevelAccessor world, BlockPos start, BlockPos end) {
|
public static void fixBlocks(LevelAccessor world, BlockPos start, BlockPos end) {
|
||||||
Set<BlockPos> doubleCheck = Sets.newConcurrentHashSet();
|
Registry<DimensionType> registry = world.registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
|
||||||
int dx = end.getX() - start.getX() + 1;
|
ResourceLocation dimKey = registry.getKey(world.dimensionType());
|
||||||
int dz = end.getZ() - start.getZ() + 1;
|
if (dimKey.getNamespace().equals("world_blender")) {
|
||||||
int count = dx * dz;
|
return;
|
||||||
|
}
|
||||||
|
final Set<BlockPos> doubleCheck = Sets.newConcurrentHashSet();
|
||||||
|
final int dx = end.getX() - start.getX() + 1;
|
||||||
|
final int dz = end.getZ() - start.getZ() + 1;
|
||||||
|
final int count = dx * dz;
|
||||||
|
final int minY = Math.max(start.getY(), world.getMinBuildHeight());
|
||||||
|
final int maxY = Math.min(end.getY(), world.getMaxBuildHeight());
|
||||||
IntStream.range(0, count).parallel().forEach(index -> {
|
IntStream.range(0, count).parallel().forEach(index -> {
|
||||||
MutableBlockPos POS = new MutableBlockPos();
|
MutableBlockPos POS = new MutableBlockPos();
|
||||||
POS.setX((index % dx) + start.getX());
|
POS.setX((index % dx) + start.getX());
|
||||||
POS.setZ((index / dx) + start.getZ());
|
POS.setZ((index / dx) + start.getZ());
|
||||||
BlockState state;
|
BlockState state;
|
||||||
for (int y = start.getY(); y <= end.getY(); y++) {
|
for (int y = minY; y <= maxY; y++) {
|
||||||
POS.setY(y);
|
POS.setY(y);
|
||||||
state = world.getBlockState(POS);
|
state = world.getBlockState(POS);
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,10 @@ public class SurfaceBuilders {
|
||||||
public static final SurfaceBuilderBaseConfiguration BRIMSTONE_CONFIG = makeSimpleConfig(EndBlocks.BRIMSTONE);
|
public static final SurfaceBuilderBaseConfiguration BRIMSTONE_CONFIG = makeSimpleConfig(EndBlocks.BRIMSTONE);
|
||||||
public static final SurfaceBuilderBaseConfiguration SULFURIC_ROCK_CONFIG = makeSimpleConfig(EndBlocks.SULPHURIC_ROCK.stone);
|
public static final SurfaceBuilderBaseConfiguration SULFURIC_ROCK_CONFIG = makeSimpleConfig(EndBlocks.SULPHURIC_ROCK.stone);
|
||||||
public static final SurfaceBuilderBaseConfiguration UMBRA_SURFACE_CONFIG = makeSimpleConfig(EndBlocks.UMBRALITH.stone);
|
public static final SurfaceBuilderBaseConfiguration UMBRA_SURFACE_CONFIG = makeSimpleConfig(EndBlocks.UMBRALITH.stone);
|
||||||
|
public static final SurfaceBuilderBaseConfiguration PALLIDIUM_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM, EndBlocks.UMBRALITH.stone);
|
||||||
|
public static final SurfaceBuilderBaseConfiguration PALLIDIUM_T1_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_TRANSITION_1, EndBlocks.UMBRALITH.stone);
|
||||||
|
public static final SurfaceBuilderBaseConfiguration PALLIDIUM_T2_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_TRANSITION_2, EndBlocks.UMBRALITH.stone);
|
||||||
|
public static final SurfaceBuilderBaseConfiguration PALLIDIUM_T3_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_TRANSITION_3, EndBlocks.UMBRALITH.stone);
|
||||||
|
|
||||||
public static final SurfaceBuilder<SurfaceBuilderBaseConfiguration> SULPHURIC_SURFACE = register(
|
public static final SurfaceBuilder<SurfaceBuilderBaseConfiguration> SULPHURIC_SURFACE = register(
|
||||||
"sulphuric_surface",
|
"sulphuric_surface",
|
||||||
|
@ -33,6 +37,14 @@ public class SurfaceBuilders {
|
||||||
return new SurfaceBuilderBaseConfiguration(state, state, state);
|
return new SurfaceBuilderBaseConfiguration(state, state, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SurfaceBuilderBaseConfiguration makeSurfaceConfig(Block surface, Block under) {
|
||||||
|
return new SurfaceBuilderBaseConfiguration(
|
||||||
|
surface.defaultBlockState(),
|
||||||
|
under.defaultBlockState(),
|
||||||
|
under.defaultBlockState()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,20 +19,23 @@ public class UmbraSurfaceBuilder extends SurfaceBuilder<SurfaceBuilderBaseConfig
|
||||||
@Override
|
@Override
|
||||||
public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) {
|
public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) {
|
||||||
int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60);
|
int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60);
|
||||||
SurfaceBuilder.DEFAULT.apply(
|
float grass = ((float) NOISE.eval(x * 0.03, z * 0.03) + (float) NOISE.eval(x * 0.1, z * 0.1) * 0.6F + random.nextFloat() * 0.2F) - 0.05F;
|
||||||
random,
|
SurfaceBuilderBaseConfiguration config = null;
|
||||||
chunk,
|
if (grass > 0.3F) {
|
||||||
biome,
|
config = SurfaceBuilders.PALLIDIUM_SURFACE_CONFIG;
|
||||||
x,
|
}
|
||||||
z,
|
else if (grass > 0.1F) {
|
||||||
height,
|
config = SurfaceBuilders.PALLIDIUM_T1_SURFACE_CONFIG;
|
||||||
noise + depth,
|
}
|
||||||
defaultBlock,
|
else if (grass > -0.1) {
|
||||||
defaultFluid,
|
config = SurfaceBuilders.PALLIDIUM_T2_SURFACE_CONFIG;
|
||||||
seaLevel,
|
}
|
||||||
seed,
|
else if (grass > -0.3F) {
|
||||||
n,
|
config = SurfaceBuilders.PALLIDIUM_T3_SURFACE_CONFIG;
|
||||||
SurfaceBuilders.UMBRA_SURFACE_CONFIG
|
}
|
||||||
);
|
else {
|
||||||
|
config = SurfaceBuilders.UMBRA_SURFACE_CONFIG;
|
||||||
|
}
|
||||||
|
SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": [
|
||||||
|
{ "model": "betterend:block/pallidium" },
|
||||||
|
{ "model": "betterend:block/pallidium", "y": 90 },
|
||||||
|
{ "model": "betterend:block/pallidium", "y": 180 },
|
||||||
|
{ "model": "betterend:block/pallidium", "y": 270 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "betterend:block/pallidium_transition_1" }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "betterend:block/pallidium_transition_2" }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "betterend:block/pallidium_transition_3" }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"parent": "block/cube",
|
||||||
|
"textures": {
|
||||||
|
"down": "betterend:block/umbralith",
|
||||||
|
"east": "betterend:block/pallidium_side",
|
||||||
|
"north": "betterend:block/pallidium_side",
|
||||||
|
"particle": "betterend:block/pallidium_side",
|
||||||
|
"south": "betterend:block/pallidium_side",
|
||||||
|
"up": "betterend:block/pallidium_top",
|
||||||
|
"west": "betterend:block/pallidium_side"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"parent": "block/cube",
|
||||||
|
"textures": {
|
||||||
|
"down": "betterend:block/umbralith",
|
||||||
|
"east": "betterend:block/pallidium_side",
|
||||||
|
"north": "betterend:block/pallidium_side",
|
||||||
|
"particle": "betterend:block/pallidium_side",
|
||||||
|
"south": "betterend:block/pallidium_side",
|
||||||
|
"up": "betterend:block/pallidium_transition_1_top",
|
||||||
|
"west": "betterend:block/pallidium_side"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"parent": "block/cube",
|
||||||
|
"textures": {
|
||||||
|
"down": "betterend:block/umbralith",
|
||||||
|
"east": "betterend:block/pallidium_side",
|
||||||
|
"north": "betterend:block/pallidium_side",
|
||||||
|
"particle": "betterend:block/pallidium_side",
|
||||||
|
"south": "betterend:block/pallidium_side",
|
||||||
|
"up": "betterend:block/pallidium_transition_2_top",
|
||||||
|
"west": "betterend:block/pallidium_side"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"parent": "block/cube",
|
||||||
|
"textures": {
|
||||||
|
"down": "betterend:block/umbralith",
|
||||||
|
"east": "betterend:block/pallidium_side",
|
||||||
|
"north": "betterend:block/pallidium_side",
|
||||||
|
"particle": "betterend:block/pallidium_side",
|
||||||
|
"south": "betterend:block/pallidium_side",
|
||||||
|
"up": "betterend:block/pallidium_transition_3_top",
|
||||||
|
"west": "betterend:block/pallidium_side"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "betterend:block/pallidium"
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 287 B |
Binary file not shown.
After Width: | Height: | Size: 257 B |
Binary file not shown.
After Width: | Height: | Size: 796 B |
Binary file not shown.
After Width: | Height: | Size: 795 B |
Binary file not shown.
After Width: | Height: | Size: 624 B |
Loading…
Add table
Add a link
Reference in a new issue