diff options
Diffstat (limited to 'src/main/java/openmodularturrets/entity/projectiles/projectileEM.java')
-rw-r--r-- | src/main/java/openmodularturrets/entity/projectiles/projectileEM.java | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java b/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java new file mode 100644 index 0000000000..1d118964ca --- /dev/null +++ b/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java @@ -0,0 +1,123 @@ +package openmodularturrets.entity.projectiles; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStack; +import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStackMap; +import com.github.technus.tectech.elementalMatter.definitions.dHadronDefinition; +import com.github.technus.tectech.elementalMatter.definitions.eQuarkDefinition; +import gregtech.api.GregTech_API; +import gregtech.api.util.GT_Utility; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import openmodularturrets.entity.projectiles.damagesources.NormalDamageSource; +import openmodularturrets.handler.ConfigHandler; +import openmodularturrets.tileentity.turretbase.TurretBase; + + +/** + * Created by Bass on 27/07/2017. + */ +public class projectileEM extends TurretProjectile { + public float gravity=0; + private TurretBase turretBase; + + private boolean exotic, antiMatter; + + private float massFactor; + + public projectileEM(World par1World) { + super(par1World); + } + + public projectileEM(World par1World, TurretBase turretBase, cElementalInstanceStackMap avalableEM) { + super(par1World); + this.turretBase = turretBase; + boolean onlyQuarks=true; + if(avalableEM!=null && avalableEM.hasStacks()) { + for (cElementalInstanceStack stack : avalableEM.values()) { + if (!(stack.definition instanceof eQuarkDefinition)) { + onlyQuarks = false; + } + } + if (onlyQuarks) { + avalableEM.clear(); + } else { + cElementalInstanceStack consumeFromThis=avalableEM.get(TecTech.Rnd.nextInt(avalableEM.size())); + massFactor =consumeFromThis.definition.getMass()/ dHadronDefinition.hadron_n_.getMass(); + + if(consumeFromThis.definition.getType()>1 || consumeFromThis.definition.getType()<-1) exotic = true; + if(consumeFromThis.definition.getType()<0) antiMatter = true; + + if (consumeFromThis.definition.getCharge() == 0) this.gravity = massFactor/100f; + else this.gravity = Math.min(0.0025F/Math.abs(consumeFromThis.definition.getCharge()),massFactor/100f); + + antiMatter=true;//todo remove + + avalableEM.removeAmount(false,consumeFromThis.definition.getStackForm(1)); + } + } + //todo add subspace pollution + } + + protected void onImpact(MovingObjectPosition movingobjectposition) { + if(this.ticksExisted > 1) { + if(movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + Block hitBlock = this.worldObj.getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ); + if(hitBlock != null){ + if (hitBlock.getMaterial().isSolid() && TecTech.ModConfig.ENABLE_TURRET_EXPLOSIONS && antiMatter) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "openmodularturrets:laserHit", ConfigHandler.getTurretSoundVolume(), TecTech.Rnd.nextFloat() + 0.5F); + GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(209), 1.0F, -1.0F, + movingobjectposition.blockX, + movingobjectposition.blockY, + movingobjectposition.blockZ); + worldObj.createExplosion(null, + movingobjectposition.blockX + 0.5D, + movingobjectposition.blockY + 0.5D, + movingobjectposition.blockZ + 0.5D, (exotic?10:1) * TecTech.ModConfig.TURRET_EXPLOSION_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1) * (ticksExisted/250f), true); + } else { + return; + } + } + } + + if(movingobjectposition.entityHit != null && !this.worldObj.isRemote) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "openmodularturrets:laserHit", ConfigHandler.getTurretSoundVolume(), TecTech.Rnd.nextFloat() + 0.5F); + if(movingobjectposition.entityHit != null && !this.worldObj.isRemote) { + float damage = (exotic?10:1) * TecTech.ModConfig.TURRET_DAMAGE_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1); + + if(movingobjectposition.entityHit instanceof EntityPlayer) { + if(this.canDamagePlayer((EntityPlayer)movingobjectposition.entityHit)) { + movingobjectposition.entityHit.setFire((exotic?10:1)*2); + movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage); + if(antiMatter) movingobjectposition.entityHit.hurtResistantTime = 0; + } + } else { + movingobjectposition.entityHit.setFire((exotic?10:1)*2); + movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage); + if(antiMatter) movingobjectposition.entityHit.hurtResistantTime = 0; + } + + if (TecTech.ModConfig.ENABLE_TURRET_EXPLOSIONS && antiMatter) { + GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(209), 1.0F, -1.0F, + (int)movingobjectposition.entityHit.posX, + (int)movingobjectposition.entityHit.posY, + (int)movingobjectposition.entityHit.posZ); + worldObj.createExplosion(null, + movingobjectposition.entityHit.posX, + movingobjectposition.entityHit.posY, + movingobjectposition.entityHit.posZ, (exotic?10:1) * TecTech.ModConfig.TURRET_EXPLOSION_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1) * (ticksExisted/250f), true); + } + } + } + this.setDead(); + } + } + + public void onEntityUpdate() { + if(this.ticksExisted >= 250) { + this.setDead(); + } + } +} |