Search in sources :

Example 1 with ISoldierUpgrade

use of de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade in project ClaySoldiersMod by SanAndreasP.

the class EntityClaySoldier method addUpgrade.

@Override
public ISoldierUpgradeInst addUpgrade(ISoldierUpgrade upgrade, EnumUpgradeType type, @Nonnull ItemStack stack) {
    if (upgrade == null) {
        return null;
    }
    ISoldierUpgradeInst upgInst = new SoldierUpgrade(upgrade, type, stack.copy().splitStack(1));
    this.addUpgradeInternal(upgInst);
    upgrade.onAdded(this, stack, upgInst);
    this.callUpgradeFunc(EnumUpgFunctions.ON_UPGRADE_ADDED, upgInstCl -> upgInstCl.getUpgrade().onUpgradeAdded(this, upgInstCl, upgInst));
    if (upgrade.syncData() && !this.world.isRemote) {
        this.sendSyncUpgrades(true, new UpgradeEntry(upgrade, type));
    }
    return upgInst;
}
Also used : ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) UpgradeEntry(de.sanandrew.mods.claysoldiers.registry.upgrade.UpgradeEntry)

Example 2 with ISoldierUpgrade

use of de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade in project ClaySoldiersMod by SanAndreasP.

the class UpgradeRegistry method registerUpgrade.

@Override
public boolean registerUpgrade(UUID id, ISoldierUpgrade upgrade) {
    if (id == null || upgrade == null) {
        CsmConstants.LOG.log(Level.WARN, String.format("Upgrade ID and instance cannot be null nor empty for ID %s!", id));
        return false;
    }
    ItemStack[] upgItems = upgrade.getStacks();
    if (upgItems.length < 1 || Arrays.stream(upgItems).anyMatch(itm -> !ItemStackUtils.isValid(itm))) {
        CsmConstants.LOG.log(Level.WARN, String.format("Upgrade items are invalid for ID %s!", id));
        return false;
    }
    if (this.idToUpgradeMap.containsKey(id)) {
        CsmConstants.LOG.log(Level.WARN, String.format("Duplicate Upgrade ID %s!", id));
        return false;
    }
    if (this.upgradeToIdMap.containsKey(upgrade)) {
        CsmConstants.LOG.log(Level.WARN, String.format("Duplicate Upgrade instances for %s!", id));
        return false;
    }
    for (ItemStack existingItm : this.stackToUpgradeMap.keySet()) {
        if (Arrays.stream(upgItems).anyMatch(itm -> ItemStackUtils.areEqualNbtFit(itm, existingItm, false, existingItm.getItemDamage() != OreDictionary.WILDCARD_VALUE))) {
            CsmConstants.LOG.log(Level.WARN, String.format("Duplicate Upgrade Item %s for ID %s!", existingItm, id));
            return false;
        }
    }
    this.idToUpgradeMap.put(id, upgrade);
    this.upgradeToIdMap.put(upgrade, id);
    Arrays.stream(upgItems).forEach(stk -> stackToUpgradeMap.put(stk.copy(), upgrade));
    this.upgrades.add(upgrade);
    return true;
}
Also used : Arrays(java.util.Arrays) EnumUpgFunctions(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgFunctions) Level(org.apache.logging.log4j.Level) HashMap(java.util.HashMap) UUID(java.util.UUID) UpgradeFunctions(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.UpgradeFunctions) ArrayList(java.util.ArrayList) ItemStack(net.minecraft.item.ItemStack) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) OreDictionary(net.minecraftforge.oredict.OreDictionary) CsmConstants(de.sanandrew.mods.claysoldiers.api.CsmConstants) Map(java.util.Map) ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) IUpgradeRegistry(de.sanandrew.mods.claysoldiers.api.IUpgradeRegistry) ItemStackUtils(de.sanandrew.mods.sanlib.lib.util.ItemStackUtils) Nullable(javax.annotation.Nullable) ItemStack(net.minecraft.item.ItemStack)

Example 3 with ISoldierUpgrade

use of de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade in project ClaySoldiersMod by SanAndreasP.

the class EntityClaySoldier method readEntityFromNBT.

@Override
public void readEntityFromNBT(NBTTagCompound compound) {
    super.readEntityFromNBT(compound);
    String teamId = compound.getString(NBTConstants.E_SOLDIER_TEAM);
    this.dataManager.set(TEAM_PARAM, UuidUtils.isStringUuid(teamId) ? UUID.fromString(teamId) : UuidUtils.EMPTY_UUID);
    this.dataManager.set(TEXTURE_TYPE_PARAM, compound.getByte(NBTConstants.E_SOLDIER_TEXTYPE));
    this.dataManager.set(TEXTURE_ID_PARAM, compound.getByte(NBTConstants.E_SOLDIER_TEXID));
    if (compound.hasKey(NBTConstants.E_SOLDIER_DOLL, Constants.NBT.TAG_COMPOUND)) {
        this.doll = new ItemStack(compound.getCompoundTag(NBTConstants.E_SOLDIER_DOLL));
    }
    NBTTagList upgrades = compound.getTagList(NBTConstants.E_SOLDIER_UPGRADES, Constants.NBT.TAG_COMPOUND);
    for (int i = 0, max = upgrades.tagCount(); i < max; i++) {
        NBTTagCompound upgNbt = upgrades.getCompoundTagAt(i);
        String idStr = upgNbt.getString(NBTConstants.N_UPGRADE_ID);
        byte type = upgNbt.getByte(NBTConstants.N_UPGRADE_TYPE);
        if (UuidUtils.isStringUuid(idStr)) {
            ItemStack upgStack = new ItemStack(upgNbt.getCompoundTag(NBTConstants.N_UPGRADE_ITEM));
            ISoldierUpgrade upgrade = UpgradeRegistry.INSTANCE.getUpgrade(UUID.fromString(idStr));
            if (upgrade != null) {
                ISoldierUpgradeInst upgInst = new SoldierUpgrade(upgrade, EnumUpgradeType.VALUES[type], upgStack);
                upgInst.setNbtData(upgNbt.getCompoundTag(NBTConstants.N_UPGRADE_NBT));
                upgrade.onLoad(this, upgInst, upgNbt);
                this.addUpgradeInternal(upgInst);
            }
        }
    }
    NBTTagList effects = compound.getTagList(NBTConstants.E_SOLDIER_EFFECTS, Constants.NBT.TAG_COMPOUND);
    for (int i = 0, max = effects.tagCount(); i < max; i++) {
        NBTTagCompound effectNbt = effects.getCompoundTagAt(i);
        String idStr = effectNbt.getString(NBTConstants.N_EFFECT_ID);
        if (UuidUtils.isStringUuid(idStr)) {
            ISoldierEffect effect = EffectRegistry.INSTANCE.getEffect(UUID.fromString(idStr));
            if (effect != null) {
                ISoldierEffectInst effInst = new SoldierEffect(effect, effectNbt.getInteger(NBTConstants.N_EFFECT_DURATION));
                effInst.setNbtData(effectNbt.getCompoundTag(NBTConstants.N_EFFECT_NBT));
                effect.onLoad(this, effInst, effectNbt);
                this.addEffectInternal(effInst);
            }
        }
    }
    this.dwBooleans.readFromNbt(compound);
}
Also used : NBTTagList(net.minecraft.nbt.NBTTagList) ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) ISoldierEffect(de.sanandrew.mods.claysoldiers.api.soldier.effect.ISoldierEffect) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ItemStack(net.minecraft.item.ItemStack) ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) ISoldierEffect(de.sanandrew.mods.claysoldiers.api.soldier.effect.ISoldierEffect) ISoldierEffectInst(de.sanandrew.mods.claysoldiers.api.soldier.effect.ISoldierEffectInst)

Example 4 with ISoldierUpgrade

use of de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade in project ClaySoldiersMod by SanAndreasP.

the class EntityClaySoldier method pickupUpgrade.

public void pickupUpgrade(EntityItem item) {
    ItemStack stack = item.getItem();
    if (stack.getCount() < 1) {
        return;
    }
    ISoldierUpgrade upg = UpgradeRegistry.INSTANCE.getUpgrade(stack);
    if (upg == null || this.hasUpgrade(upg, upg.getType(this))) {
        return;
    }
    ISoldierUpgradeInst upgInst = this.addUpgrade(upg, upg.getType(this), stack);
    if (upgInst != null) {
        if (Arrays.asList(UpgradeRegistry.getFuncCalls(upg)).contains(EnumUpgFunctions.ON_PICKUP)) {
            upg.onPickup(this, item, upgInst);
        }
    }
}
Also used : ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ItemStack(net.minecraft.item.ItemStack)

Example 5 with ISoldierUpgrade

use of de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade in project ClaySoldiersMod by SanAndreasP.

the class EntityClaySoldier method addUpgradeInternal.

private void addUpgradeInternal(ISoldierUpgradeInst instance) {
    ISoldierUpgrade upgrade = instance.getUpgrade();
    UpgradeEntry entry = new UpgradeEntry(upgrade, upgrade.getType(this));
    this.upgradeMap.put(entry, instance);
    if (upgrade.syncData()) {
        this.upgradeSyncList.add(instance);
    }
    Arrays.asList(UpgradeRegistry.getFuncCalls(upgrade)).forEach(func -> {
        Queue<ISoldierUpgradeInst> upgList = this.upgradeFuncMap.get(func).computeIfAbsent(upgrade.getPriority(), k -> new ConcurrentLinkedQueue<>());
        upgList.add(instance);
    });
    switch(upgrade.getType(this)) {
        case MAIN_HAND:
            this.setMainhandUpg(true);
            break;
        case OFF_HAND:
            this.setOffhandUpg(true);
            break;
        case BEHAVIOR:
            this.setBehaviorUpg(true);
            break;
    }
}
Also used : ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) UpgradeEntry(de.sanandrew.mods.claysoldiers.registry.upgrade.UpgradeEntry)

Aggregations

ISoldierUpgrade (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade)5 ISoldierUpgradeInst (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst)4 ItemStack (net.minecraft.item.ItemStack)3 UpgradeEntry (de.sanandrew.mods.claysoldiers.registry.upgrade.UpgradeEntry)2 ImmutableList (com.google.common.collect.ImmutableList)1 CsmConstants (de.sanandrew.mods.claysoldiers.api.CsmConstants)1 IUpgradeRegistry (de.sanandrew.mods.claysoldiers.api.IUpgradeRegistry)1 ISoldierEffect (de.sanandrew.mods.claysoldiers.api.soldier.effect.ISoldierEffect)1 ISoldierEffectInst (de.sanandrew.mods.claysoldiers.api.soldier.effect.ISoldierEffectInst)1 EnumUpgFunctions (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgFunctions)1 UpgradeFunctions (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.UpgradeFunctions)1 ItemStackUtils (de.sanandrew.mods.sanlib.lib.util.ItemStackUtils)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 UUID (java.util.UUID)1 Nullable (javax.annotation.Nullable)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1