mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
186 lines
4.5 KiB
Java
186 lines
4.5 KiB
Java
package com.hbm.tileentity.turret;
|
|
|
|
import java.util.List;
|
|
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.lib.ModDamageSource;
|
|
import com.hbm.packet.AuxParticlePacketNT;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.util.EntityDamageUtil;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.Vec3;
|
|
|
|
public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT {
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "container.turretMaxwell";
|
|
}
|
|
|
|
@Override
|
|
protected List<Integer> getAmmoList() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public double getAcceptableInaccuracy() {
|
|
return 2;
|
|
}
|
|
|
|
@Override
|
|
public double getDecetorGrace() {
|
|
return 5D;
|
|
}
|
|
|
|
@Override
|
|
public double getTurretYawSpeed() {
|
|
return 9D;
|
|
}
|
|
|
|
@Override
|
|
public double getTurretPitchSpeed() {
|
|
return 6D;
|
|
}
|
|
|
|
@Override
|
|
public double getTurretElevation() {
|
|
return 40D;
|
|
}
|
|
|
|
@Override
|
|
public double getTurretDepression() {
|
|
return 35D;
|
|
}
|
|
|
|
@Override
|
|
public double getDecetorRange() {
|
|
return 64D + this.greenLevel * 3;
|
|
}
|
|
|
|
@Override
|
|
public long getMaxPower() {
|
|
return 10000000;
|
|
}
|
|
|
|
@Override
|
|
public long getConsumption() {
|
|
return 10000 - this.blueLevel * 300;
|
|
}
|
|
|
|
@Override
|
|
public double getBarrelLength() {
|
|
return 2.125D;
|
|
}
|
|
|
|
@Override
|
|
public double getHeightOffset() {
|
|
return 2D;
|
|
}
|
|
|
|
public int beam;
|
|
public double lastDist;
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
|
|
if(worldObj.isRemote) {
|
|
|
|
if(this.tPos != null) {
|
|
Vec3 pos = this.getTurretPos();
|
|
double length = Vec3.createVectorHelper(tPos.xCoord - pos.xCoord, tPos.yCoord - pos.yCoord, tPos.zCoord - pos.zCoord).lengthVector();
|
|
this.lastDist = length;
|
|
}
|
|
|
|
if(beam > 0)
|
|
beam--;
|
|
} else {
|
|
|
|
if(checkDelay <= 0) {
|
|
checkDelay = 20;
|
|
|
|
this.redLevel = 0;
|
|
this.greenLevel = 0;
|
|
this.blueLevel = 0;
|
|
this.blackLevel = 0;
|
|
this.pinkLevel = 0;
|
|
|
|
for(int i = 1; i < 10; i++) {
|
|
if(slots[i] != null) {
|
|
Item item = slots[i].getItem();
|
|
|
|
if(item == ModItems.upgrade_speed_1) redLevel += 1;
|
|
if(item == ModItems.upgrade_speed_2) redLevel += 2;
|
|
if(item == ModItems.upgrade_speed_3) redLevel += 3;
|
|
if(item == ModItems.upgrade_effect_1) greenLevel += 1;
|
|
if(item == ModItems.upgrade_effect_2) greenLevel += 2;
|
|
if(item == ModItems.upgrade_effect_3) greenLevel += 3;
|
|
if(item == ModItems.upgrade_power_1) blueLevel += 1;
|
|
if(item == ModItems.upgrade_power_2) blueLevel += 2;
|
|
if(item == ModItems.upgrade_power_3) blueLevel += 3;
|
|
if(item == ModItems.upgrade_afterburn_1) pinkLevel += 1;
|
|
if(item == ModItems.upgrade_afterburn_2) pinkLevel += 2;
|
|
if(item == ModItems.upgrade_afterburn_3) pinkLevel += 3;
|
|
if(item == ModItems.upgrade_overdrive_1) blackLevel += 1;
|
|
if(item == ModItems.upgrade_overdrive_2) blackLevel += 2;
|
|
if(item == ModItems.upgrade_overdrive_3) blackLevel += 3;
|
|
}
|
|
}
|
|
}
|
|
|
|
checkDelay--;
|
|
}
|
|
|
|
super.updateEntity();
|
|
}
|
|
|
|
int redLevel;
|
|
int greenLevel;
|
|
int blueLevel;
|
|
int blackLevel;
|
|
int pinkLevel;
|
|
|
|
int checkDelay;
|
|
|
|
@Override
|
|
public void updateFiringTick() {
|
|
|
|
long demand = this.getConsumption() * 10;
|
|
|
|
if(this.target != null && this.getPower() >= demand) {
|
|
|
|
EntityDamageUtil.attackEntityFromIgnoreIFrame(this.target, ModDamageSource.shrapnel, (this.blackLevel * 10 + this.redLevel + 1F) * 0.25F);
|
|
|
|
if(pinkLevel > 0)
|
|
this.target.setFire(this.pinkLevel * 3);
|
|
|
|
if(!this.target.isEntityAlive() && this.target instanceof EntityLivingBase) {
|
|
NBTTagCompound vdat = new NBTTagCompound();
|
|
vdat.setString("type", "giblets");
|
|
vdat.setInteger("ent", this.target.getEntityId());
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(vdat, this.target.posX, this.target.posY + this.target.height * 0.5, this.target.posZ), new TargetPoint(this.target.dimension, this.target.posX, this.target.posY + this.target.height * 0.5, this.target.posZ, 150));
|
|
|
|
worldObj.playSoundEffect(this.target.posX, this.target.posY, this.target.posZ, "mob.zombie.woodbreak", 2.0F, 0.95F + worldObj.rand.nextFloat() * 0.2F);
|
|
}
|
|
|
|
this.power -= demand;
|
|
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
data.setBoolean("shot", true);
|
|
this.networkPack(data, 250);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void networkUnpack(NBTTagCompound nbt) {
|
|
|
|
if(nbt.hasKey("shot"))
|
|
beam = 5;
|
|
else
|
|
super.networkUnpack(nbt);
|
|
}
|
|
}
|