Fixed snow being placed in illegal positions

This commit is contained in:
Sollace 2022-08-29 14:48:07 +02:00
parent b894665d65
commit 5b0d3bb770

View file

@ -5,6 +5,7 @@ import com.minelittlepony.unicopia.ability.magic.spell.Situation;
import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits; import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits;
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.block.state.StateMaps;
import com.minelittlepony.unicopia.block.state.StatePredicate;
import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.ParticleUtils;
import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.MagicalDamageSource;
import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.PosHelper;
@ -12,11 +13,7 @@ import com.minelittlepony.unicopia.util.VecHelper;
import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Shape;
import com.minelittlepony.unicopia.util.shape.Sphere; import com.minelittlepony.unicopia.util.shape.Sphere;
import net.minecraft.block.Block; import net.minecraft.block.*;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.Material;
import net.minecraft.block.PlantBlock;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.TntEntity; import net.minecraft.entity.TntEntity;
@ -93,14 +90,13 @@ public class IceSpell extends AbstractSpell {
private boolean applyBlockSingle(Entity owner, World world, BlockPos pos, Situation situation) { private boolean applyBlockSingle(Entity owner, World world, BlockPos pos, Situation situation) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if ((situation == Situation.PROJECTILE if ((situation == Situation.PROJECTILE && StateMaps.SNOW_PILED.convert(world, pos))
&& StateMaps.SNOW_PILED.convert(world, pos)) || StateMaps.ICE_AFFECTED.convert(world, pos)) {
|| StateMaps.ICE_AFFECTED.convert(world, pos)) {
return true; return true;
} }
if (world.isTopSolid(pos, owner) if (world.isTopSolid(pos, owner)
|| state.isOf(Blocks.SNOW) || (state.isOf(Blocks.SNOW) && state.get(SnowBlock.LAYERS) == SnowBlock.MAX_LAYERS)
|| state.isIn(BlockTags.LEAVES)) { || state.isIn(BlockTags.LEAVES)) {
addSnowLayer(world, pos.up()); addSnowLayer(world, pos.up());
return true; return true;
@ -117,16 +113,15 @@ public class IceSpell extends AbstractSpell {
} }
private static boolean isSurroundedByIce(World w, BlockPos pos) { private static boolean isSurroundedByIce(World w, BlockPos pos) {
return !PosHelper.adjacentNeighbours(pos).anyMatch(i -> return PosHelper.adjacentNeighbours(pos).allMatch(i ->
w.getBlockState(i).getMaterial() == Material.ICE w.getBlockState(i).getMaterial() == Material.ICE
); );
} }
private static void addSnowLayer(World world, BlockPos pos) { private static void addSnowLayer(World world, BlockPos pos) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
Block id = state.getBlock();
if (id == Blocks.AIR || (id instanceof PlantBlock)) { if (state.isAir() || StatePredicate.isPlant(state)) {
world.setBlockState(pos, Blocks.SNOW.getDefaultState(), 3); world.setBlockState(pos, Blocks.SNOW.getDefaultState(), 3);
} }
} }