mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Fixed snow being placed in illegal positions
This commit is contained in:
parent
b894665d65
commit
5b0d3bb770
1 changed files with 7 additions and 12 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue