Added a corruption handler so that blocks can be corrupted by a wide variety of processes.
This commit is contained in:
parent
e12b1a7042
commit
f7ff728c0d
|
@ -3,12 +3,14 @@ package WayofTime.bloodmagic.entity.mob;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.datasync.DataParameter;
|
import net.minecraft.network.datasync.DataParameter;
|
||||||
import net.minecraft.network.datasync.EntityDataManager;
|
import net.minecraft.network.datasync.EntityDataManager;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import WayofTime.bloodmagic.api.Constants;
|
import WayofTime.bloodmagic.api.Constants;
|
||||||
import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
|
import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
|
||||||
import WayofTime.bloodmagic.gson.Serializers;
|
import WayofTime.bloodmagic.gson.Serializers;
|
||||||
|
|
||||||
public class EntityAspectedDemonBase extends EntityDemonBase
|
public abstract class EntityAspectedDemonBase extends EntityDemonBase
|
||||||
{
|
{
|
||||||
protected static final DataParameter<EnumDemonWillType> TYPE = EntityDataManager.<EnumDemonWillType>createKey(EntityAspectedDemonBase.class, Serializers.WILL_TYPE_SERIALIZER);
|
protected static final DataParameter<EnumDemonWillType> TYPE = EntityDataManager.<EnumDemonWillType>createKey(EntityAspectedDemonBase.class, Serializers.WILL_TYPE_SERIALIZER);
|
||||||
|
|
||||||
|
@ -24,6 +26,47 @@ public class EntityAspectedDemonBase extends EntityDemonBase
|
||||||
this.dataManager.register(TYPE, EnumDemonWillType.DEFAULT);
|
this.dataManager.register(TYPE, EnumDemonWillType.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getMeleeResist()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getProjectileResist()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMagicResist()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean attackEntityFrom(DamageSource source, float amount)
|
||||||
|
{
|
||||||
|
if (this.isEntityInvulnerable(source))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
float newAmount = amount;
|
||||||
|
if (source.isProjectile())
|
||||||
|
{
|
||||||
|
newAmount *= MathHelper.clamp_double(1 - getProjectileResist(), 0, 1);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
newAmount *= MathHelper.clamp_double(1 - getMeleeResist(), 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source.isMagicDamage())
|
||||||
|
{
|
||||||
|
newAmount *= MathHelper.clamp_double(1 - getMagicResist(), 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.attackEntityFrom(source, newAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public EnumDemonWillType getType()
|
public EnumDemonWillType getType()
|
||||||
{
|
{
|
||||||
return this.dataManager.get(TYPE);
|
return this.dataManager.get(TYPE);
|
||||||
|
|
|
@ -96,8 +96,19 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh
|
||||||
protected void applyEntityAttributes()
|
protected void applyEntityAttributes()
|
||||||
{
|
{
|
||||||
super.applyEntityAttributes();
|
super.applyEntityAttributes();
|
||||||
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D);
|
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30);
|
||||||
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D);
|
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25);
|
||||||
|
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMeleeResist()
|
||||||
|
{
|
||||||
|
return 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getProjectileResist()
|
||||||
|
{
|
||||||
|
return 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -120,13 +131,6 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
//TODO: Add fun stuff for when interacted with - explode?
|
|
||||||
public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack)
|
|
||||||
{
|
|
||||||
return super.processInteract(player, hand, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public float getHeadRotationPointY(float partialTick)
|
public float getHeadRotationPointY(float partialTick)
|
||||||
{
|
{
|
||||||
|
@ -180,6 +184,12 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh
|
||||||
return SoundEvents.ENTITY_SHEEP_DEATH;
|
return SoundEvents.ENTITY_SHEEP_DEATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getSoundPitch()
|
||||||
|
{
|
||||||
|
return super.getSoundPitch() * 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void playStepSound(BlockPos pos, Block blockIn)
|
protected void playStepSound(BlockPos pos, Block blockIn)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package WayofTime.bloodmagic.inversion;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
|
||||||
|
|
||||||
|
public class CorruptionHandler
|
||||||
|
{
|
||||||
|
public static Map<Pair<Block, Integer>, Map<EnumDemonWillType, IBlockState>> corruptBlockMap = new HashMap<Pair<Block, Integer>, Map<EnumDemonWillType, IBlockState>>();
|
||||||
|
|
||||||
|
public static void registerBlockCorruption(EnumDemonWillType type, Block block, int meta, IBlockState corruptedState)
|
||||||
|
{
|
||||||
|
Pair<Block, Integer> pair = Pair.of(block, meta);
|
||||||
|
if (corruptBlockMap.containsKey(pair))
|
||||||
|
{
|
||||||
|
Map<EnumDemonWillType, IBlockState> stateMap = corruptBlockMap.get(pair);
|
||||||
|
stateMap.put(type, corruptedState);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Map<EnumDemonWillType, IBlockState> stateMap = new HashMap<EnumDemonWillType, IBlockState>();
|
||||||
|
stateMap.put(type, corruptedState);
|
||||||
|
corruptBlockMap.put(pair, stateMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isBlockCorruptible(World world, EnumDemonWillType type, BlockPos pos, IBlockState state, Block block)
|
||||||
|
{
|
||||||
|
int meta = block.getMetaFromState(state);
|
||||||
|
Pair<Block, Integer> pair = Pair.of(block, meta);
|
||||||
|
if (corruptBlockMap.containsKey(pair))
|
||||||
|
{
|
||||||
|
Map<EnumDemonWillType, IBlockState> stateMap = corruptBlockMap.get(pair);
|
||||||
|
return stateMap.containsKey(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean corruptBlock(World world, EnumDemonWillType type, BlockPos pos, IBlockState state, Block block)
|
||||||
|
{
|
||||||
|
int meta = block.getMetaFromState(state);
|
||||||
|
Pair<Block, Integer> pair = Pair.of(block, meta);
|
||||||
|
if (corruptBlockMap.containsKey(pair))
|
||||||
|
{
|
||||||
|
Map<EnumDemonWillType, IBlockState> stateMap = corruptBlockMap.get(pair);
|
||||||
|
if (stateMap.containsKey(type))
|
||||||
|
{
|
||||||
|
return world.setBlockState(pos, stateMap.get(type));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean corruptSurroundingBlocks(World world, EnumDemonWillType type, BlockPos centerPos, int radius)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue