Added custom damage code
As well i added a way to create a fake entity for tile to be attacked by vinalla and other mobs.
This commit is contained in:
parent
e84b7aa28f
commit
e33f0b98e3
5 changed files with 204 additions and 4 deletions
|
@ -43,7 +43,6 @@ public class DarkMain
|
||||||
{
|
{
|
||||||
LOGGER.fine("Loaded Basic Components Items");
|
LOGGER.fine("Loaded Basic Components Items");
|
||||||
|
|
||||||
// UniversalElectricity.CONFIGURATION.load();
|
|
||||||
BasicComponents.requestItem("ingotCopper", 0);
|
BasicComponents.requestItem("ingotCopper", 0);
|
||||||
BasicComponents.requestItem("ingotTin", 0);
|
BasicComponents.requestItem("ingotTin", 0);
|
||||||
|
|
||||||
|
@ -69,7 +68,8 @@ public class DarkMain
|
||||||
BasicComponents.requestItem("infiniteBattery", 0);
|
BasicComponents.requestItem("infiniteBattery", 0);
|
||||||
|
|
||||||
loadedItems = true;
|
loadedItems = true;
|
||||||
|
BasicComponents.register(mod, channel);
|
||||||
}
|
}
|
||||||
BasicComponents.register(mod, channel);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
143
src/minecraft/dark/library/damage/EntityTileDamage.java
Normal file
143
src/minecraft/dark/library/damage/EntityTileDamage.java
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
package dark.library.damage;
|
||||||
|
|
||||||
|
import universalelectricity.core.vector.Vector3;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entity designed to take damage and apply it to the tile from an Entity. Simulates the tile is
|
||||||
|
* alive and can be harmed by normal AIs without additional code.
|
||||||
|
*
|
||||||
|
* @author DarkGuardsman
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class EntityTileDamage extends Entity implements IEntityAdditionalSpawnData
|
||||||
|
{
|
||||||
|
|
||||||
|
private TileEntity host;
|
||||||
|
int hp = 100;
|
||||||
|
|
||||||
|
public EntityTileDamage(World par1World)
|
||||||
|
{
|
||||||
|
super(par1World);
|
||||||
|
this.setSize(1F, 1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityTileDamage(World par1World, TileEntity c)
|
||||||
|
{
|
||||||
|
this(par1World);
|
||||||
|
this.isImmuneToFire = true;
|
||||||
|
this.setPosition(c.xCoord + 0.5, c.yCoord + 0.5, c.zCoord + 0.5);
|
||||||
|
this.host = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void entityInit()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean attackEntityFrom(DamageSource source, int ammount)
|
||||||
|
{
|
||||||
|
if (this.isEntityInvulnerable())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (this.host instanceof IHpTile)
|
||||||
|
{
|
||||||
|
return ((IHpTile) this.host).onDamageTaken(source, ammount);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.hp -= ammount;
|
||||||
|
if (hp <= 0)
|
||||||
|
{
|
||||||
|
if (this.host != null)
|
||||||
|
{
|
||||||
|
Vector3 vec = new Vector3(this.host.xCoord, this.host.yCoord, this.host.zCoord);
|
||||||
|
int id = vec.getBlockID(this.worldObj);
|
||||||
|
int meta = vec.getBlockID(this.worldObj);
|
||||||
|
Block block = Block.blocksList[id];
|
||||||
|
if (block != null)
|
||||||
|
{
|
||||||
|
block.breakBlock(this.worldObj, this.host.xCoord, this.host.yCoord, this.host.zCoord, id, meta);
|
||||||
|
}
|
||||||
|
vec.setBlock(this.worldObj, 0);
|
||||||
|
}
|
||||||
|
this.setDead();
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEntityName()
|
||||||
|
{
|
||||||
|
return "EntityTileTarget";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeSpawnData(ByteArrayDataOutput data)
|
||||||
|
{
|
||||||
|
if (this.host != null)
|
||||||
|
{
|
||||||
|
data.writeInt(this.host.xCoord);
|
||||||
|
data.writeInt(this.host.yCoord);
|
||||||
|
data.writeInt(this.host.zCoord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readSpawnData(ByteArrayDataInput data)
|
||||||
|
{
|
||||||
|
this.host = this.worldObj.getBlockTileEntity(data.readInt(), data.readInt(), data.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdate()
|
||||||
|
{
|
||||||
|
if (this.host == null || this.host.isInvalid())
|
||||||
|
{
|
||||||
|
this.setDead();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.host instanceof IHpTile && !((IHpTile) this.host).isAlive())
|
||||||
|
{
|
||||||
|
this.setDead();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readEntityFromNBT(NBTTagCompound nbttagcompound)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void writeEntityToNBT(NBTTagCompound nbttagcompound)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean canTriggerWalking()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
src/minecraft/dark/library/damage/IHpTile.java
Normal file
21
src/minecraft/dark/library/damage/IHpTile.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package dark.library.damage;
|
||||||
|
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
|
|
||||||
|
public interface IHpTile
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Same as attackEntityFrom in Entity.class
|
||||||
|
*
|
||||||
|
* @param source - DamageSource/DamageType
|
||||||
|
* @param ammount - amount of damage
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean onDamageTaken(DamageSource source, int ammount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this tile considered too still be alive. Allows for the tile to remain while being
|
||||||
|
* considered dead
|
||||||
|
*/
|
||||||
|
public boolean isAlive();
|
||||||
|
}
|
36
src/minecraft/dark/library/damage/TileDamageSource.java
Normal file
36
src/minecraft/dark/library/damage/TileDamageSource.java
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
package dark.library.damage;
|
||||||
|
|
||||||
|
import universalelectricity.prefab.CustomDamageSource;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityLiving;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.entity.projectile.EntityArrow;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
|
import net.minecraft.util.EntityDamageSourceIndirect;
|
||||||
|
import cpw.mods.fml.common.registry.LanguageRegistry;
|
||||||
|
|
||||||
|
public class TileDamageSource extends CustomDamageSource
|
||||||
|
{
|
||||||
|
protected Object damageSource;
|
||||||
|
|
||||||
|
public static final CustomDamageSource bullets = ((CustomDamageSource) new CustomDamageSource("Bullets")).setDeathMessage("%1$s was filled with holes!");
|
||||||
|
public static final CustomDamageSource laser = ((CustomDamageSource) new CustomDamageSource("Laser")).setDeathMessage("%1$s was vaporized!");
|
||||||
|
|
||||||
|
public TileDamageSource(String damageName, Object attacker)
|
||||||
|
{
|
||||||
|
super(damageName);
|
||||||
|
this.damageSource = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entity getEntity()
|
||||||
|
{
|
||||||
|
return damageSource instanceof Entity ? (Entity) damageSource : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDifficultyScaled()
|
||||||
|
{
|
||||||
|
return this.damageSource != null && this.damageSource instanceof EntityLiving && !(this.damageSource instanceof EntityPlayer);
|
||||||
|
}
|
||||||
|
}
|
|
@ -159,6 +159,6 @@ public class NetworkOrbit
|
||||||
quat.FromEuler((float) t.x, ((float) (t.y)), (float) t.z);
|
quat.FromEuler((float) t.x, ((float) (t.y)), (float) t.z);
|
||||||
ya.FromAxis(new Vector3(0, 1f, 0), (float) o);
|
ya.FromAxis(new Vector3(0, 1f, 0), (float) o);
|
||||||
|
|
||||||
return ya.multi(quat).multi(new Vector3(0, 0, r));
|
return quat.multi(ya).multi(new Vector3(0, 0, r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue