Fixes, structures, removed glow
This commit is contained in:
parent
beab6ce10a
commit
687def43d1
15 changed files with 140 additions and 103 deletions
|
@ -139,7 +139,7 @@ public class EndBlocks {
|
||||||
// Wall Plants //
|
// Wall Plants //
|
||||||
public static final Block PURPLE_POLYPORE = registerBlock("purple_polypore", new BlockWallMushroom(13));
|
public static final Block PURPLE_POLYPORE = registerBlock("purple_polypore", new BlockWallMushroom(13));
|
||||||
public static final Block TAIL_MOSS = registerBlock("tail_moss", new BlockWallPlant());
|
public static final Block TAIL_MOSS = registerBlock("tail_moss", new BlockWallPlant());
|
||||||
public static final Block CYAN_MOSS = registerBlock("cyan_moss", new BlockWallPlant(13));
|
public static final Block CYAN_MOSS = registerBlock("cyan_moss", new BlockWallPlant());
|
||||||
|
|
||||||
// Crops //
|
// Crops //
|
||||||
public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new BlockShadowBerry());
|
public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new BlockShadowBerry());
|
||||||
|
|
|
@ -24,6 +24,7 @@ import net.minecraft.world.WorldAccess;
|
||||||
import ru.betterend.blocks.BlockBlueVine;
|
import ru.betterend.blocks.BlockBlueVine;
|
||||||
import ru.betterend.blocks.basis.BlockDoublePlant;
|
import ru.betterend.blocks.basis.BlockDoublePlant;
|
||||||
import ru.betterend.blocks.basis.BlockGlowingFur;
|
import ru.betterend.blocks.basis.BlockGlowingFur;
|
||||||
|
import ru.betterend.blocks.basis.BlockVine;
|
||||||
import ru.betterend.registry.EndBlocks;
|
import ru.betterend.registry.EndBlocks;
|
||||||
import ru.betterend.registry.EndTags;
|
import ru.betterend.registry.EndTags;
|
||||||
|
|
||||||
|
@ -147,117 +148,127 @@ public class BlocksHelper {
|
||||||
doubleCheck.add(POS.toImmutable());
|
doubleCheck.add(POS.toImmutable());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chorus
|
if (!state.canPlaceAt(world, POS)) {
|
||||||
if (state.isOf(Blocks.CHORUS_PLANT)) {
|
|
||||||
Set<BlockPos> ends = Sets.newHashSet();
|
// Chorus
|
||||||
Set<BlockPos> add = Sets.newHashSet();
|
if (state.isOf(Blocks.CHORUS_PLANT)) {
|
||||||
ends.add(POS.toImmutable());
|
Set<BlockPos> ends = Sets.newHashSet();
|
||||||
|
Set<BlockPos> add = Sets.newHashSet();
|
||||||
for (int i = 0; i < 64 && !ends.isEmpty(); i++) {
|
ends.add(POS.toImmutable());
|
||||||
ends.forEach((pos) -> {
|
|
||||||
setWithoutUpdate(world, pos, AIR);
|
for (int i = 0; i < 64 && !ends.isEmpty(); i++) {
|
||||||
for (Direction dir: HORIZONTAL) {
|
ends.forEach((pos) -> {
|
||||||
BlockPos p = pos.offset(dir);
|
setWithoutUpdate(world, pos, AIR);
|
||||||
|
for (Direction dir : HORIZONTAL) {
|
||||||
|
BlockPos p = pos.offset(dir);
|
||||||
|
BlockState st = world.getBlockState(p);
|
||||||
|
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
||||||
|
add.add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BlockPos p = pos.up();
|
||||||
BlockState st = world.getBlockState(p);
|
BlockState st = world.getBlockState(p);
|
||||||
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
||||||
add.add(p);
|
add.add(p);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
BlockPos p = pos.up();
|
ends.clear();
|
||||||
BlockState st = world.getBlockState(p);
|
ends.addAll(add);
|
||||||
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
add.clear();
|
||||||
add.add(p);
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
ends.clear();
|
|
||||||
ends.addAll(add);
|
|
||||||
add.clear();
|
|
||||||
}
|
}
|
||||||
}
|
// Vines
|
||||||
// Liquids
|
else if (state.getBlock() instanceof BlockVine) {
|
||||||
else if (!state.getFluidState().isEmpty()) {
|
while (world.getBlockState(POS).getBlock() instanceof BlockVine) {
|
||||||
POS.setY(y - 1);
|
|
||||||
if (world.isAir(POS)) {
|
|
||||||
POS.setY(y);
|
|
||||||
while (!world.getFluidState(POS).isEmpty()) {
|
|
||||||
setWithoutUpdate(world, POS, AIR);
|
setWithoutUpdate(world, POS, AIR);
|
||||||
POS.setY(POS.getY() + 1);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
BlockState st;
|
|
||||||
for (Direction dir: HORIZONTAL) {
|
|
||||||
if ((st = world.getBlockState(POS.offset(dir))).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
|
||||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((st = world.getBlockState(POS.up())).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
|
||||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Falling blocks
|
|
||||||
else if (state.getBlock() instanceof FallingBlock) {
|
|
||||||
BlockState falling = state;
|
|
||||||
|
|
||||||
POS.setY(POS.getY() - 1);
|
|
||||||
state = world.getBlockState(POS);
|
|
||||||
|
|
||||||
int ray = downRayRep(world, POS.toImmutable(), 64);
|
|
||||||
if (ray > 32) {
|
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
|
||||||
if (world.getRandom().nextBoolean()) {
|
|
||||||
POS.setY(POS.getY() - 1);
|
POS.setY(POS.getY() - 1);
|
||||||
state = world.getBlockState(POS);
|
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
// Liquids
|
||||||
POS.setY(y);
|
else if (!state.getFluidState().isEmpty()) {
|
||||||
boolean place = true;
|
POS.setY(y - 1);
|
||||||
for (Direction dir: HORIZONTAL) {
|
if (world.isAir(POS)) {
|
||||||
state = world.getBlockState(POS.offset(dir));
|
POS.setY(y);
|
||||||
if (!state.getFluidState().isEmpty()) {
|
while (!world.getFluidState(POS).isEmpty()) {
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, state);
|
setWithoutUpdate(world, POS, AIR);
|
||||||
place = false;
|
POS.setY(POS.getY() + 1);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BlockState st;
|
||||||
|
for (Direction dir : HORIZONTAL) {
|
||||||
|
if ((st = world.getBlockState(POS.offset(dir))).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||||
|
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (place) {
|
if ((st = world.getBlockState(POS.up())).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
POS.setY(y - ray);
|
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, falling);
|
|
||||||
}
|
}
|
||||||
}
|
// Falling blocks
|
||||||
// Blocks without support
|
else if (state.getBlock() instanceof FallingBlock) {
|
||||||
else if (!state.canPlaceAt(world, POS)) {
|
BlockState falling = state;
|
||||||
// Blue Vine
|
|
||||||
if (state.getBlock() instanceof BlockBlueVine) {
|
POS.setY(POS.getY() - 1);
|
||||||
while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) {
|
state = world.getBlockState(POS);
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
|
||||||
for (Direction dir : HORIZONTAL) {
|
int ray = downRayRep(world, POS.toImmutable(), 64);
|
||||||
BlockPos p = POS.offset(dir);
|
if (ray > 32) {
|
||||||
state = world.getBlockState(p);
|
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||||
if (state.getBlock() instanceof BlockGlowingFur) {
|
if (world.getRandom().nextBoolean()) {
|
||||||
BlocksHelper.setWithoutUpdate(world, p, AIR);
|
POS.setY(POS.getY() - 1);
|
||||||
}
|
state = world.getBlockState(POS);
|
||||||
world.getBlockTickScheduler().schedule(p, world.getBlockState(p).getBlock(), 0);
|
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||||
}
|
}
|
||||||
POS.setY(POS.getY() + 1);
|
}
|
||||||
state = world.getBlockState(POS);
|
else {
|
||||||
|
POS.setY(y);
|
||||||
|
boolean place = true;
|
||||||
|
for (Direction dir : HORIZONTAL) {
|
||||||
|
state = world.getBlockState(POS.offset(dir));
|
||||||
|
if (!state.getFluidState().isEmpty()) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, state);
|
||||||
|
place = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (place) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
POS.setY(y - ray);
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, falling);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Double plants
|
// Blocks without support
|
||||||
if (state.getBlock() instanceof BlockDoublePlant) {
|
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
|
||||||
POS.setY(POS.getY() + 1);
|
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
|
||||||
}
|
|
||||||
// Other blocks
|
|
||||||
else {
|
else {
|
||||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
// Blue Vine
|
||||||
|
if (state.getBlock() instanceof BlockBlueVine) {
|
||||||
|
while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||||
|
for (Direction dir : HORIZONTAL) {
|
||||||
|
BlockPos p = POS.offset(dir);
|
||||||
|
state = world.getBlockState(p);
|
||||||
|
if (state.getBlock() instanceof BlockGlowingFur) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, p, AIR);
|
||||||
|
}
|
||||||
|
world.getBlockTickScheduler().schedule(p, world.getBlockState(p).getBlock(), 0);
|
||||||
|
}
|
||||||
|
POS.setY(POS.getY() + 1);
|
||||||
|
state = world.getBlockState(POS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Double plants
|
||||||
|
if (state.getBlock() instanceof BlockDoublePlant) {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||||
|
POS.setY(POS.getY() + 1);
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||||
|
}
|
||||||
|
// Other blocks
|
||||||
|
else {
|
||||||
|
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,12 +95,12 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
||||||
structure.place(world, center, placementData, random);
|
structure.place(world, center, placementData, random);
|
||||||
|
|
||||||
TerrainMerge merge = getTerrainMerge(world, center, random);
|
TerrainMerge merge = getTerrainMerge(world, center, random);
|
||||||
|
int x1 = center.getX();
|
||||||
|
int z1 = center.getZ();
|
||||||
|
int x2 = x1 + offset.getX();
|
||||||
|
int z2 = z1 + offset.getZ();
|
||||||
if (merge != TerrainMerge.NONE) {
|
if (merge != TerrainMerge.NONE) {
|
||||||
Mutable mut = new Mutable();
|
Mutable mut = new Mutable();
|
||||||
int x1 = center.getX();
|
|
||||||
int z1 = center.getZ();
|
|
||||||
int x2 = x1 + offset.getX();
|
|
||||||
int z2 = z1 + offset.getZ();
|
|
||||||
|
|
||||||
if (x2 < x1) {
|
if (x2 < x1) {
|
||||||
int a = x1;
|
int a = x1;
|
||||||
|
@ -119,10 +119,10 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
||||||
mut.setX(x);
|
mut.setX(x);
|
||||||
for (int z = z1; z <= z2; z++) {
|
for (int z = z1; z <= z2; z++) {
|
||||||
mut.setZ(z);
|
mut.setZ(z);
|
||||||
mut.setY(posY);
|
mut.setY(surfMax);
|
||||||
BlockState state = world.getBlockState(mut);
|
BlockState state = world.getBlockState(mut);
|
||||||
if (!state.isIn(EndTags.GEN_TERRAIN) && state.isSideSolidFullSquare(world, mut, Direction.DOWN)) {
|
if (!state.isIn(EndTags.GEN_TERRAIN) && state.isSideSolidFullSquare(world, mut, Direction.DOWN)) {
|
||||||
for (int i = 0; i < 10; i--) {
|
for (int i = 0; i < 10; i++) {
|
||||||
mut.setY(mut.getY() - 1);
|
mut.setY(mut.getY() - 1);
|
||||||
BlockState stateSt = world.getBlockState(mut);
|
BlockState stateSt = world.getBlockState(mut);
|
||||||
if (!stateSt.isIn(EndTags.GEN_TERRAIN)) {
|
if (!stateSt.isIn(EndTags.GEN_TERRAIN)) {
|
||||||
|
@ -153,6 +153,7 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BlocksHelper.fixBlocks(world, new BlockPos(x1, center.getY(), z1), new BlockPos(x2, center.getY() + offset.getY(), z2));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,14 +31,26 @@ public class DragonTreeBushFeature extends DefaultFeature {
|
||||||
if (world.getBlockState(pos.down()).getBlock() != EndBlocks.SHADOW_GRASS) return false;
|
if (world.getBlockState(pos.down()).getBlock() != EndBlocks.SHADOW_GRASS) return false;
|
||||||
|
|
||||||
BlockState leaves = EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1);
|
BlockState leaves = EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1);
|
||||||
float radius = MHelper.randRange(1.8F, 4.5F, random);
|
float radius = MHelper.randRange(1.8F, 3.5F, random);
|
||||||
OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt());
|
OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt());
|
||||||
SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1));
|
SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1));
|
||||||
sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere);
|
sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere);
|
||||||
sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere);
|
sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere);
|
||||||
sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere);
|
sphere = new SDFDisplacement().setFunction((vec) -> { return MHelper.randRange(-2F, 2F, random); }).setSource(sphere);
|
||||||
sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere));
|
sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere));
|
||||||
sphere.setReplaceFunction(REPLACE);
|
sphere.setReplaceFunction(REPLACE);
|
||||||
|
sphere.setPostProcess((info) -> {
|
||||||
|
if (info.getState().getBlock() instanceof LeavesBlock) {
|
||||||
|
int distance = info.getPos().getManhattanDistance(pos);
|
||||||
|
if (distance < 7) {
|
||||||
|
return info.getState().with(LeavesBlock.DISTANCE, distance);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return AIR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return info.getState();
|
||||||
|
});
|
||||||
sphere.fillRecursive(world, pos);
|
sphere.fillRecursive(world, pos);
|
||||||
BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.DRAGON_TREE.bark);
|
BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.DRAGON_TREE.bark);
|
||||||
for (Direction d: Direction.values()) {
|
for (Direction d: Direction.values()) {
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"defaultMaterial": "betterend:waving_wall_glow_inc"
|
"defaultMaterial": "betterend:waving_wall"
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"structures": [
|
||||||
|
{ "nbt": "fallen_tree_1", "offsetY": 0, "terrainMerge": "object" },
|
||||||
|
{ "nbt": "fallen_tree_2", "offsetY": 0, "terrainMerge": "object" },
|
||||||
|
{ "nbt": "stump_1", "offsetY": 0, "terrainMerge": "object" },
|
||||||
|
{ "nbt": "stump_2", "offsetY": 0, "terrainMerge": "object" },
|
||||||
|
{ "nbt": "library", "offsetY": 0, "terrainMerge": "surface" },
|
||||||
|
{ "nbt": "ruins_1", "offsetY": 0, "terrainMerge": "surface" },
|
||||||
|
{ "nbt": "ruins_2", "offsetY": 0, "terrainMerge": "surface" },
|
||||||
|
{ "nbt": "ruins_3", "offsetY": 0, "terrainMerge": "surface" },
|
||||||
|
{ "nbt": "tree_house", "offsetY": 0, "terrainMerge": "surface" }
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue