mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
286 lines
8.3 KiB
Java
286 lines
8.3 KiB
Java
package com.hbm.tileentity.turret;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.inventory.gui.GUITurretMaxwell;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
|
|
import com.hbm.lib.ModDamageSource;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.packet.toclient.AuxParticlePacketNT;
|
|
import com.hbm.potion.HbmPotion;
|
|
import com.hbm.tileentity.IUpgradeInfoProvider;
|
|
import com.hbm.util.BobMathUtil;
|
|
import com.hbm.util.EntityDamageUtil;
|
|
import com.hbm.util.I18nUtil;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.potion.PotionEffect;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.World;
|
|
|
|
public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT implements IUpgradeInfoProvider {
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "container.turretMaxwell";
|
|
}
|
|
|
|
@Override
|
|
protected List<Integer> getAmmoList() {
|
|
return null;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public List<ItemStack> getAmmoTypesForDisplay() {
|
|
|
|
if(ammoStacks != null)
|
|
return ammoStacks;
|
|
|
|
ammoStacks = new ArrayList();
|
|
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_speed_1));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_speed_2));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_speed_3));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_effect_1));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_effect_2));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_effect_3));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_power_1));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_power_2));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_power_3));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_afterburn_1));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_afterburn_2));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_afterburn_3));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_overdrive_1));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_overdrive_2));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_overdrive_3));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_5g));
|
|
ammoStacks.add(new ItemStack(ModItems.upgrade_screm));
|
|
|
|
return ammoStacks;
|
|
}
|
|
|
|
@Override
|
|
public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) {
|
|
return type == UpgradeType.SPEED || type == UpgradeType.EFFECT || type == UpgradeType.POWER || type == UpgradeType.AFTERBURN || type == UpgradeType.OVERDRIVE;
|
|
}
|
|
|
|
@Override
|
|
public void provideInfo(UpgradeType type, int level, List<String> info, boolean extendedInfo) {
|
|
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.turret_maxwell));
|
|
if(type == UpgradeType.SPEED) {
|
|
info.add(EnumChatFormatting.GREEN + "Damage +0." + (level * 25) + "/t");
|
|
}
|
|
if(type == UpgradeType.POWER) {
|
|
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 3) + "%"));
|
|
}
|
|
if(type == UpgradeType.EFFECT) {
|
|
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_RANGE, "+" + (level * 3) + "m"));
|
|
}
|
|
if(type == UpgradeType.AFTERBURN) {
|
|
info.add(EnumChatFormatting.GREEN + "Afterburn +3s");
|
|
}
|
|
if(type == UpgradeType.OVERDRIVE) {
|
|
info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getMaxLevel(UpgradeType type) {
|
|
if(type == UpgradeType.SPEED) return 27;
|
|
if(type == UpgradeType.POWER) return 27;
|
|
if(type == UpgradeType.EFFECT) return 27;
|
|
if(type == UpgradeType.AFTERBURN) return 27;
|
|
if(type == UpgradeType.OVERDRIVE) return 27;
|
|
return 0;
|
|
}
|
|
|
|
@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 _5g ? 10 : 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;
|
|
this._5g = false;
|
|
this.screm = false;
|
|
|
|
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;
|
|
if(item == ModItems.upgrade_5g) _5g = true;
|
|
if(item == ModItems.upgrade_screm) screm = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
checkDelay--;
|
|
}
|
|
|
|
super.updateEntity();
|
|
}
|
|
|
|
int redLevel;
|
|
int greenLevel;
|
|
int blueLevel;
|
|
int blackLevel;
|
|
int pinkLevel;
|
|
boolean _5g;
|
|
boolean screm;
|
|
|
|
int checkDelay;
|
|
|
|
@Override
|
|
public void updateFiringTick() {
|
|
|
|
long demand = this.getConsumption() * 10;
|
|
|
|
if(this.target != null && this.getPower() >= demand) {
|
|
|
|
if(_5g && target instanceof EntityPlayer) {
|
|
EntityPlayer living = (EntityPlayer) target;
|
|
living.addPotionEffect(new PotionEffect(HbmPotion.death.id, 30 * 60 * 20, 0, true));
|
|
} else {
|
|
EntityDamageUtil.attackEntityFromIgnoreIFrame(this.target, ModDamageSource.microwave, (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));
|
|
|
|
if(this.screm)
|
|
worldObj.playSoundEffect(this.target.posX, this.target.posY, this.target.posZ, "hbm:block.screm", 20.0F, 1.0F);
|
|
else
|
|
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;
|
|
|
|
this.networkPackNT(250);
|
|
}
|
|
}
|
|
|
|
public void serialize(ByteBuf buf) {
|
|
buf.writeBoolean(true);
|
|
}
|
|
|
|
public void deserialize(ByteBuf buf) {
|
|
if(buf.readBoolean())
|
|
this.beam = 5;
|
|
else
|
|
this.beam = 0;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new GUITurretMaxwell(player.inventory, this);
|
|
}
|
|
}
|