92 lines
3.1 KiB
Java
92 lines
3.1 KiB
Java
package electroblob.wizardry.block;
|
|
|
|
import electroblob.wizardry.registry.Spells;
|
|
import electroblob.wizardry.registry.WizardryPotions;
|
|
import electroblob.wizardry.spell.Spell;
|
|
import electroblob.wizardry.util.EntityUtils;
|
|
import net.minecraft.block.state.BlockFaceShape;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.potion.PotionEffect;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.util.EnumFacing;
|
|
import net.minecraft.util.math.AxisAlignedBB;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import net.minecraft.world.World;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
public class BlockPermafrost extends BlockDryFrostedIce {
|
|
|
|
protected static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0, 0, 0, 1, 0, 1);
|
|
protected static final AxisAlignedBB SELECTION_BOUNDING_BOX = new AxisAlignedBB(0, 0, 0, 1, 0.125, 1);
|
|
|
|
@Override
|
|
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
|
|
return BOUNDING_BOX;
|
|
}
|
|
|
|
@Override
|
|
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos){
|
|
return SELECTION_BOUNDING_BOX;
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos){
|
|
return super.getCollisionBoundingBox(blockState, worldIn, pos);
|
|
}
|
|
|
|
@Override
|
|
public boolean isFullCube(IBlockState state){
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean isNormalCube(IBlockState state){
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face){
|
|
return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED;
|
|
}
|
|
|
|
@Override
|
|
public void onEntityCollision(World world, BlockPos pos, IBlockState state, Entity entity){
|
|
|
|
if(EntityUtils.isLiving(entity) && entity.ticksExisted % 30 == 0){
|
|
// Can't make it player damage unless we make this block a tile entity, but there will be too many for that
|
|
entity.attackEntityFrom(DamageSource.MAGIC, Spells.permafrost.getProperty(Spell.DAMAGE).floatValue());
|
|
int duration = Spells.permafrost.getProperty(Spell.EFFECT_DURATION).intValue();
|
|
int amplifier = Spells.permafrost.getProperty(Spell.EFFECT_STRENGTH).intValue();
|
|
((EntityLivingBase)entity).addPotionEffect(new PotionEffect(WizardryPotions.frost, duration, amplifier));
|
|
}
|
|
|
|
// EntityLivingBase's slipperiness code doesn't get the block below it properly so slipperiness only works for
|
|
// full blocks...
|
|
if(entity.onGround){
|
|
|
|
// Not brilliant but it's about the best I can do
|
|
entity.motionX *= 1.12 - entity.motionX * entity.motionX;
|
|
entity.motionZ *= 1.12 - entity.motionZ * entity.motionZ;
|
|
|
|
// if(entity instanceof EntityLivingBase){
|
|
// double maxVel = 0.8;
|
|
// double x = entity.motionX;
|
|
// double y = entity.motionY;
|
|
// double z = entity.motionZ;
|
|
// double vel = MathHelper.sqrt(x*x + y*y + z*z);
|
|
// double m = vel / maxVel;
|
|
// if(m > 1){
|
|
// entity.motionX /= m;
|
|
// entity.motionZ /= m;
|
|
// }
|
|
// }
|
|
}
|
|
|
|
}
|
|
}
|