aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java
blob: 28f305c85b04260f10c5db377655e0fb82af9da9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package openmodularturrets.entity.projectiles;

import com.github.technus.tectech.TecTech;
import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMap;
import com.github.technus.tectech.elementalMatter.core.stacks.cElementalInstanceStack;
import com.github.technus.tectech.elementalMatter.definitions.complex.hadron.dHadronDefinition;
import com.github.technus.tectech.elementalMatter.definitions.primitive.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) {
        super(par1World, turretBase);
    }

    public projectileEM(World par1World, TurretBase turretBase, cElementalInstanceStackMap avalableEM) {
        super(par1World, turretBase);
        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) gravity = massFactor/100f;
                else gravity = Math.min(0.0025F/Math.abs(consumeFromThis.definition.getCharge()),massFactor/100f);

                avalableEM.removeAmount(false,consumeFromThis.definition.getStackForm(1));
            }
        }
        //todo make the recipe require some overflow hatches

        //todo add more subspace pollution
    }

    @Override
    protected void onImpact(MovingObjectPosition movingobjectposition) {
        if(ticksExisted > 1) {
            if(movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
                Block hitBlock = worldObj.getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
                if(hitBlock != null){
                    if (hitBlock.getMaterial().isSolid() && TecTech.ModConfig.ENABLE_TURRET_EXPLOSIONS && antiMatter) {
                        worldObj.playSoundEffect(posX, posY, 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 && !worldObj.isRemote) {
                worldObj.playSoundEffect(posX, posY, posZ, "openmodularturrets:laserHit", ConfigHandler.getTurretSoundVolume(), TecTech.Rnd.nextFloat() + 0.5F);
                if(movingobjectposition.entityHit != null && !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(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);
                    }
                }
            }
            setDead();
        }
    }

    @Override
    public void onEntityUpdate() {
        if(ticksExisted >= 75) {
            setDead();
        }
    }
}