Improved block fixer

This commit is contained in:
paulevsGitch 2020-11-19 18:56:02 +03:00
parent 44dd1c35a9
commit 85bcf5878e
3 changed files with 29 additions and 43 deletions

View file

@ -156,9 +156,25 @@ public class BlocksHelper {
if (state.getBlock() instanceof BlockGlowingFur) { if (state.getBlock() instanceof BlockGlowingFur) {
doubleCheck.add(POS.toImmutable()); doubleCheck.add(POS.toImmutable());
} }
// Liquids
if (!state.canPlaceAt(world, POS)) { else if (!state.getFluidState().isEmpty()) {
POS.setY(y - 1);
if (world.isAir(POS)) {
POS.setY(y);
while (!world.getFluidState(POS).isEmpty()) {
setWithoutUpdate(world, POS, AIR);
POS.setY(POS.getY() + 1);
}
continue;
}
for (Direction dir : HORIZONTAL) {
if (world.isAir(POS.offset(dir))) {
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
break;
}
}
}
else if (!state.canPlaceAt(world, POS)) {
// Chorus // Chorus
if (state.isOf(Blocks.CHORUS_PLANT)) { if (state.isOf(Blocks.CHORUS_PLANT)) {
Set<BlockPos> ends = Sets.newHashSet(); Set<BlockPos> ends = Sets.newHashSet();
@ -193,28 +209,6 @@ public class BlocksHelper {
POS.setY(POS.getY() - 1); POS.setY(POS.getY() - 1);
} }
} }
// Liquids
else if (!state.getFluidState().isEmpty()) {
POS.setY(y - 1);
if (world.isAir(POS)) {
POS.setY(y);
while (!world.getFluidState(POS).isEmpty()) {
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 // Falling blocks
else if (state.getBlock() instanceof FallingBlock) { else if (state.getBlock() instanceof FallingBlock) {
BlockState falling = state; BlockState falling = state;
@ -233,19 +227,15 @@ public class BlocksHelper {
} }
else { else {
POS.setY(y); POS.setY(y);
boolean place = true; BlockState replacement = AIR;
for (Direction dir : HORIZONTAL) { for (Direction dir : HORIZONTAL) {
state = world.getBlockState(POS.offset(dir)); state = world.getBlockState(POS.offset(dir));
if (!state.getFluidState().isEmpty()) { if (!state.getFluidState().isEmpty()) {
BlocksHelper.setWithoutUpdate(world, POS, state); replacement = state;
place = false;
break; break;
} }
} }
if (place) { BlocksHelper.setWithoutUpdate(world, POS, replacement);
BlocksHelper.setWithoutUpdate(world, POS, AIR);
}
POS.setY(y - ray); POS.setY(y - ray);
BlocksHelper.setWithoutUpdate(world, POS, falling); BlocksHelper.setWithoutUpdate(world, POS, falling);
} }
@ -256,14 +246,6 @@ public class BlocksHelper {
if (state.getBlock() instanceof BlockBlueVine) { if (state.getBlock() instanceof BlockBlueVine) {
while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) { while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) {
BlocksHelper.setWithoutUpdate(world, POS, AIR); 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); POS.setY(POS.getY() + 1);
state = world.getBlockState(POS); state = world.getBlockState(POS);
} }
@ -276,7 +258,7 @@ public class BlocksHelper {
} }
// Other blocks // Other blocks
else { else {
BlocksHelper.setWithoutUpdate(world, POS, AIR); BlocksHelper.setWithoutUpdate(world, POS, getAirOrFluid(state));
} }
} }
} }
@ -291,6 +273,10 @@ public class BlocksHelper {
}); });
} }
private static BlockState getAirOrFluid(BlockState state) {
return state.getFluidState().isEmpty() ? AIR : state.getFluidState().getBlockState();
}
public static boolean isEndNylium(Block block) { public static boolean isEndNylium(Block block) {
return block.isIn(BlockTags.NYLIUM) && block.isIn(EndTags.END_GROUND); return block.isIn(BlockTags.NYLIUM) && block.isIn(EndTags.END_GROUND);
} }

View file

@ -19,7 +19,7 @@ public class UnderwaterPlantFeature extends UnderwaterPlantScatter {
@Override @Override
public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) { public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos, float radius) {
return plant.canPlaceAt(plant.getDefaultState(), world, blockPos); return super.canSpawn(world, blockPos) && plant.canPlaceAt(plant.getDefaultState(), world, blockPos);
} }
@Override @Override

View file

@ -29,7 +29,7 @@ public abstract class UnderwaterPlantScatter extends ScatterFeature {
@Override @Override
protected boolean canSpawn(StructureWorldAccess world, BlockPos pos) { protected boolean canSpawn(StructureWorldAccess world, BlockPos pos) {
return !world.getFluidState(pos).isEmpty(); return world.getBlockState(pos).isOf(Blocks.WATER);
} }
@Override @Override