Search in sources :

Example 1 with WeaponInfoDisplay

use of me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay in project MechanicsMain by WeaponMechanics.

the class WeaponListeners method equip.

@EventHandler
public void equip(EntityEquipmentEvent e) {
    if (e.isArmor())
        return;
    LivingEntity entity = (LivingEntity) e.getEntity();
    EntityWrapper entityWrapper = WeaponMechanics.getEntityWrapper(entity);
    ItemStack weaponStack = e.getEquipped();
    // Also try auto converting to weapon
    String weaponTitle = weaponHandler.getInfoHandler().getWeaponTitle(weaponStack, true);
    boolean alreadyUsedEquipMechanics = false;
    boolean mainhand = e.getSlot() == EquipmentSlot.HAND;
    HandData handData = mainhand ? entityWrapper.getMainHandData() : entityWrapper.getOffHandData();
    handData.setCurrentWeaponTitle(weaponTitle);
    if (weaponTitle != null) {
        if (e.getEntityType() == EntityType.PLAYER) {
            WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
            if (weaponInfoDisplay != null)
                weaponInfoDisplay.send((PlayerWrapper) entityWrapper, e.getSlot());
        }
        weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, e.getSlot());
        Mechanics equipMechanics = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Equip_Mechanics", Mechanics.class);
        if (equipMechanics != null) {
            equipMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
            alreadyUsedEquipMechanics = true;
        }
        handData.setLastEquipTime(System.currentTimeMillis());
        if (getConfigurations().getBool(weaponTitle + ".Info.Show_Cooldown.Weapon_Equip_Delay") && e.getEntityType() == EntityType.PLAYER) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), getConfigurations().getInt(weaponTitle + ".Info.Weapon_Equip_Delay") / 50);
        } else if (CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, weaponStack.getType())) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), 0);
        }
        Bukkit.getPluginManager().callEvent(new WeaponEquipEvent(weaponTitle, weaponStack, entity, e.getSlot() == EquipmentSlot.HAND));
    }
    ItemStack dequipped = e.getDequipped();
    String dequippedWeapon = weaponHandler.getInfoHandler().getWeaponTitle(dequipped, false);
    if (dequippedWeapon != null) {
        // Don't use holster mechanics is equip mechanics were already used
        if (!alreadyUsedEquipMechanics) {
            Mechanics holsterMechanics = getConfigurations().getObject(dequippedWeapon + ".Info.Weapon_Holster_Mechanics", Mechanics.class);
            if (holsterMechanics != null)
                holsterMechanics.use(new CastData(entityWrapper, dequippedWeapon, dequipped));
        }
        if (weaponTitle == null && CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, dequipped.getType())) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, dequipped.getType(), 0);
        }
    }
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) CastData(me.deecaad.weaponmechanics.mechanics.CastData) Player(org.bukkit.entity.Player) WeaponEquipEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponEquipEvent) EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) Mechanics(me.deecaad.weaponmechanics.mechanics.Mechanics) WeaponMechanics(me.deecaad.weaponmechanics.WeaponMechanics) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper) ItemStack(org.bukkit.inventory.ItemStack) HandData(me.deecaad.weaponmechanics.wrappers.HandData) EventHandler(org.bukkit.event.EventHandler)

Example 2 with WeaponInfoDisplay

use of me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay in project MechanicsMain by WeaponMechanics.

the class ReloadHandler method getCloseTask.

private ChainTask getCloseTask(int firearmCloseTime, FirearmAction firearmAction, ItemStack weaponStack, HandData handData, EntityWrapper entityWrapper, String weaponTitle, boolean mainhand, EquipmentSlot slot) {
    return new ChainTask(firearmCloseTime) {

        @Override
        public void task() {
            ItemStack taskReference = mainhand ? entityWrapper.getEntity().getEquipment().getItemInMainHand() : entityWrapper.getEntity().getEquipment().getItemInOffHand();
            if (taskReference == weaponStack) {
                taskReference = weaponStack;
            } else {
                handData.setReloadData(weaponTitle, taskReference);
            }
            firearmAction.changeState(taskReference, FirearmState.READY);
            finishReload(entityWrapper, weaponTitle, taskReference, handData, slot);
        }

        @Override
        public void setup() {
            handData.addReloadTask(getTaskId());
            firearmAction.changeState(weaponStack, FirearmState.CLOSE);
            CastData castData = new CastData(entityWrapper, weaponTitle, weaponStack);
            // Set the extra data so SoundMechanic knows to save task id to hand's reload tasks
            castData.setData(ReloadSound.getDataKeyword(), mainhand ? ReloadSound.MAIN_HAND.getId() : ReloadSound.OFF_HAND.getId());
            firearmAction.useMechanics(castData, false);
            if (entityWrapper instanceof PlayerWrapper) {
                WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
                if (weaponInfoDisplay != null)
                    weaponInfoDisplay.send((PlayerWrapper) entityWrapper, slot);
            }
            weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, slot);
        }
    };
}
Also used : CastData(me.deecaad.weaponmechanics.mechanics.CastData) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper) ItemStack(org.bukkit.inventory.ItemStack)

Example 3 with WeaponInfoDisplay

use of me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay in project MechanicsMain by WeaponMechanics.

the class ReloadHandler method finishReload.

public void finishReload(EntityWrapper entityWrapper, String weaponTitle, ItemStack weaponStack, HandData handData, EquipmentSlot slot) {
    handData.finishReload();
    Mechanics reloadFinishMechanics = getConfigurations().getObject(weaponTitle + ".Reload.Finish_Mechanics", Mechanics.class);
    if (reloadFinishMechanics != null)
        reloadFinishMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
    if (entityWrapper instanceof PlayerWrapper) {
        WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
        if (weaponInfoDisplay != null)
            weaponInfoDisplay.send((PlayerWrapper) entityWrapper, slot);
    }
    weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, slot);
}
Also used : CastData(me.deecaad.weaponmechanics.mechanics.CastData) Mechanics(me.deecaad.weaponmechanics.mechanics.Mechanics) WeaponMechanics(me.deecaad.weaponmechanics.WeaponMechanics) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper)

Example 4 with WeaponInfoDisplay

use of me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay in project MechanicsMain by WeaponMechanics.

the class ScopeHandler method zoomOutWithoutTiming.

/**
 * @return true if successfully zoomed out
 */
private boolean zoomOutWithoutTiming(ItemStack weaponStack, String weaponTitle, EntityWrapper entityWrapper, ZoomData zoomData, EquipmentSlot slot) {
    if (!zoomData.isZooming())
        return false;
    LivingEntity entity = entityWrapper.getEntity();
    // Zoom amount and stack 0 because zooming out
    WeaponScopeEvent weaponScopeEvent = new WeaponScopeEvent(weaponTitle, weaponStack, entity, WeaponScopeEvent.ScopeType.OUT, 0, 0);
    Bukkit.getPluginManager().callEvent(weaponScopeEvent);
    if (weaponScopeEvent.isCancelled()) {
        return false;
    }
    updateZoom(entityWrapper, zoomData, weaponScopeEvent.getZoomAmount());
    zoomData.setZoomStacks(0);
    Mechanics zoomOffMechanics = getConfigurations().getObject(weaponTitle + ".Scope.Zoom_Off.Mechanics", Mechanics.class);
    if (zoomOffMechanics != null)
        zoomOffMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
    WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
    if (weaponInfoDisplay != null)
        weaponInfoDisplay.send((PlayerWrapper) entityWrapper, slot);
    weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, slot);
    if (zoomData.hasZoomNightVision())
        useNightVision(entityWrapper, zoomData);
    HandData handData = slot == EquipmentSlot.HAND ? entityWrapper.getMainHandData() : entityWrapper.getOffHandData();
    handData.setLastScopeTime(System.currentTimeMillis());
    if (getConfigurations().getBool(weaponTitle + ".Info.Show_Cooldown.Shoot_Delay_After_Scope")) {
        CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), getConfigurations().getInt(weaponTitle + ".Scope.Shoot_Delay_After_Scope") / 50);
    }
    return true;
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) CastData(me.deecaad.weaponmechanics.mechanics.CastData) Mechanics(me.deecaad.weaponmechanics.mechanics.Mechanics) WeaponMechanics(me.deecaad.weaponmechanics.WeaponMechanics) WeaponScopeEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponScopeEvent) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper) HandData(me.deecaad.weaponmechanics.wrappers.HandData)

Example 5 with WeaponInfoDisplay

use of me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay in project MechanicsMain by WeaponMechanics.

the class ScopeHandler method zoomInWithoutTiming.

/**
 * @return true if successfully zoomed in or stacked
 */
private boolean zoomInWithoutTiming(ItemStack weaponStack, String weaponTitle, EntityWrapper entityWrapper, ZoomData zoomData, EquipmentSlot slot) {
    Configuration config = getConfigurations();
    LivingEntity entity = entityWrapper.getEntity();
    if (zoomData.isZooming()) {
        // zoom stack
        int increaseZoomPerStack = config.getInt(weaponTitle + ".Scope.Zoom_Stacking.Increase_Zoom_Per_Stack");
        if (increaseZoomPerStack != 0) {
            int zoomStack = zoomData.getZoomStacks() + 1;
            int zoomAmount = config.getInt(weaponTitle + ".Scope.Zoom_Amount");
            WeaponScopeEvent weaponScopeEvent = new WeaponScopeEvent(weaponTitle, weaponStack, entity, WeaponScopeEvent.ScopeType.STACK, zoomAmount + (zoomStack * increaseZoomPerStack), zoomStack);
            Bukkit.getPluginManager().callEvent(weaponScopeEvent);
            if (weaponScopeEvent.isCancelled()) {
                return false;
            }
            updateZoom(entityWrapper, zoomData, weaponScopeEvent.getZoomAmount());
            zoomData.setZoomStacks(zoomStack);
            weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, slot);
            Mechanics zoomStackingMechanics = config.getObject(weaponTitle + ".Scope.Zoom_Stacking.Mechanics", Mechanics.class);
            if (zoomStackingMechanics != null)
                zoomStackingMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
            WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
            if (weaponInfoDisplay != null)
                weaponInfoDisplay.send((PlayerWrapper) entityWrapper, slot);
            return true;
        } else {
            debug.log(LogLevel.WARN, "For some reason zoom in was called on entity when it shouldn't have.", "Entity was already zooming so it should have stacked zoom, but not zoom stacking wasn't used at all?", "Ignoring this call, but this shouldn't even happen...", "Are you sure you have defined both Maximum_Stacks and Increase_Zoom_Per_Stack for weapon " + weaponTitle + "?");
            return false;
        }
    }
    int zoomAmount = config.getInt(weaponTitle + ".Scope.Zoom_Amount");
    if (zoomAmount == 0)
        return false;
    // zoom stack = 0, because its not used OR this is first zoom in
    WeaponScopeEvent weaponScopeEvent = new WeaponScopeEvent(weaponTitle, weaponStack, entity, WeaponScopeEvent.ScopeType.IN, zoomAmount, 0);
    Bukkit.getPluginManager().callEvent(weaponScopeEvent);
    if (weaponScopeEvent.isCancelled()) {
        return false;
    }
    updateZoom(entityWrapper, zoomData, weaponScopeEvent.getZoomAmount());
    Mechanics zoomMechanics = config.getObject(weaponTitle + ".Scope.Mechanics", Mechanics.class);
    if (zoomMechanics != null)
        zoomMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
    WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
    if (weaponInfoDisplay != null)
        weaponInfoDisplay.send((PlayerWrapper) entityWrapper, slot);
    weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, slot);
    if (config.getBool(weaponTitle + ".Scope.Night_Vision"))
        useNightVision(entityWrapper, zoomData);
    return true;
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) CastData(me.deecaad.weaponmechanics.mechanics.CastData) Configuration(me.deecaad.core.file.Configuration) Mechanics(me.deecaad.weaponmechanics.mechanics.Mechanics) WeaponMechanics(me.deecaad.weaponmechanics.WeaponMechanics) WeaponScopeEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponScopeEvent) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper)

Aggregations

CastData (me.deecaad.weaponmechanics.mechanics.CastData)10 WeaponInfoDisplay (me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay)10 PlayerWrapper (me.deecaad.weaponmechanics.wrappers.PlayerWrapper)10 Mechanics (me.deecaad.weaponmechanics.mechanics.Mechanics)7 WeaponMechanics (me.deecaad.weaponmechanics.WeaponMechanics)6 LivingEntity (org.bukkit.entity.LivingEntity)6 ItemStack (org.bukkit.inventory.ItemStack)5 Configuration (me.deecaad.core.file.Configuration)4 HandData (me.deecaad.weaponmechanics.wrappers.HandData)4 FirearmAction (me.deecaad.weaponmechanics.weapon.firearm.FirearmAction)2 FirearmState (me.deecaad.weaponmechanics.weapon.firearm.FirearmState)2 AmmoTypes (me.deecaad.weaponmechanics.weapon.reload.ammo.AmmoTypes)2 WeaponScopeEvent (me.deecaad.weaponmechanics.weapon.weaponevents.WeaponScopeEvent)2 Player (org.bukkit.entity.Player)2 Projectile (me.deecaad.weaponmechanics.weapon.projectile.weaponprojectile.Projectile)1 WeaponProjectile (me.deecaad.weaponmechanics.weapon.projectile.weaponprojectile.WeaponProjectile)1 Recoil (me.deecaad.weaponmechanics.weapon.shoot.recoil.Recoil)1 Spread (me.deecaad.weaponmechanics.weapon.shoot.spread.Spread)1 Trigger (me.deecaad.weaponmechanics.weapon.trigger.Trigger)1 WeaponEquipEvent (me.deecaad.weaponmechanics.weapon.weaponevents.WeaponEquipEvent)1