diff options
Diffstat (limited to 'src/main/java/com/sosnitzka/taiga/traits')
5 files changed, 117 insertions, 6 deletions
diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitBerserk.java b/src/main/java/com/sosnitzka/taiga/traits/TraitBerserk.java index 96b13be..ec0232d 100644 --- a/src/main/java/com/sosnitzka/taiga/traits/TraitBerserk.java +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitBerserk.java @@ -1,6 +1,5 @@ package com.sosnitzka.taiga.traits; -import com.sosnitzka.taiga.generic.TraitProgressiveStats; import com.sosnitzka.taiga.util.Utils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitDecay.java b/src/main/java/com/sosnitzka/taiga/traits/TraitDecay.java index 7a8f4bc..2d1364c 100644 --- a/src/main/java/com/sosnitzka/taiga/traits/TraitDecay.java +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitDecay.java @@ -1,7 +1,6 @@ package com.sosnitzka.taiga.traits; import com.google.common.collect.ImmutableList; -import com.sosnitzka.taiga.generic.TraitProgressiveStats; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitProgressiveStats.java b/src/main/java/com/sosnitzka/taiga/traits/TraitProgressiveStats.java new file mode 100644 index 0000000..d9af33d --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitProgressiveStats.java @@ -0,0 +1,115 @@ +package com.sosnitzka.taiga.traits; + +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.TextFormatting; +import slimeknights.tconstruct.library.modifiers.ModifierNBT; +import slimeknights.tconstruct.library.tools.ToolNBT; +import slimeknights.tconstruct.library.traits.AbstractTrait; +import slimeknights.tconstruct.library.utils.TagUtil; + +/** + * Base class for tools that progressively gain/award stats. + * The modifier persists 2 different stat-data on the tool: + * - A 'pool' of stats to award + * - A 'bonus' of already awarded stats + * <p> + * The modifier reapplies the 'bonus' stats on application. + * The pool is not touched inheritly but only provided for the logic of the deriving trait. + */ +public abstract class TraitProgressiveStats extends AbstractTrait { + + protected final String pool_key; // Key to the tag that contains the free unassigned + protected final String applied_key; // Key to the tag that contains the already applied bonus stats + + public TraitProgressiveStats(String identifier, TextFormatting color) { + super(identifier, color); + + pool_key = identifier + "StatPool"; + applied_key = identifier + "StatBonus"; + } + + public TraitProgressiveStats(String identifier, int color) { + super(identifier, color); + + pool_key = identifier + "StatPool"; + applied_key = identifier + "StatBonus"; + } + + /* Modifier management */ + + protected static StatNBT getStats(NBTTagCompound root, String key) { + return ModifierNBT.readTag(TagUtil.getTagSafe(TagUtil.getExtraTag(root), key), StatNBT.class); + } + + protected static void setStats(NBTTagCompound root, StatNBT data, String key) { + NBTTagCompound extra = TagUtil.getExtraTag(root); + NBTTagCompound tag = new NBTTagCompound(); + data.write(tag); + extra.setTag(key, tag); + TagUtil.setExtraTag(root, extra); + } + + @Override + public void applyEffect(NBTTagCompound rootCompound, NBTTagCompound modifierTag) { + super.applyEffect(rootCompound, modifierTag); + // called on tool loading only + // we just apply the saved bonus stats + ToolNBT data = TagUtil.getToolStats(rootCompound); + StatNBT bonus = getBonus(rootCompound); + + data.durability += bonus.durability; + data.speed += bonus.speed; + data.attack += bonus.attack; + + TagUtil.setToolTag(rootCompound, data.get()); + } + + protected boolean hasPool(NBTTagCompound root) { + return TagUtil.getExtraTag(root).hasKey(pool_key); + } + + protected StatNBT getPool(NBTTagCompound root) { + return getStats(root, pool_key); + } + + protected void setPool(NBTTagCompound root, StatNBT data) { + setStats(root, data, pool_key); + } + + protected StatNBT getBonus(NBTTagCompound root) { + return getStats(root, applied_key); + } + + protected void setBonus(NBTTagCompound root, StatNBT data) { + setStats(root, data, applied_key); + } + + protected boolean playerIsBreakingBlock(Entity entity) { + return false; + } + + public static class StatNBT extends ModifierNBT { + + // statpool + public int durability; + public float attack; + public float speed; + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + durability = tag.getInteger("durability"); + attack = tag.getFloat("attack"); + speed = tag.getFloat("speed"); + } + + @Override + public void write(NBTTagCompound tag) { + super.write(tag); + tag.setInteger("durability", durability); + tag.setFloat("attack", attack); + tag.setFloat("speed", speed); + } + } +}
\ No newline at end of file diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitSlaughtering.java b/src/main/java/com/sosnitzka/taiga/traits/TraitSlaughtering.java index 4a9f371..2baf143 100644 --- a/src/main/java/com/sosnitzka/taiga/traits/TraitSlaughtering.java +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitSlaughtering.java @@ -3,7 +3,6 @@ package com.sosnitzka.taiga.traits; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.util.text.TextFormatting; @@ -32,8 +31,8 @@ public class TraitSlaughtering extends AbstractTrait { if (event.getSource().getTrueSource() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getSource().getTrueSource(); if (!w.isRemote && event.getEntity() instanceof EntityLiving && !(event.getEntity() instanceof EntityPlayer) && TinkerUtil.hasTrait(TagUtil.getTagSafe(player.getHeldItemMainhand()), identifier)) { - Item i = event.getDrops().get(random.nextInt(event.getDrops().size())).getItem().getItem(); - event.getDrops().add(new EntityItem(event.getEntity().getEntityWorld(), event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ, new ItemStack(i, random.nextInt(4) + 1))); + ItemStack i = event.getDrops().get(random.nextInt(event.getDrops().size())).getItem(); + event.getDrops().add(new EntityItem(w, event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ, new ItemStack(i.getItem(), random.nextInt(4) + 1, i.getMetadata(), i.getTagCompound()))); } } } diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitSuperHeavy.java b/src/main/java/com/sosnitzka/taiga/traits/TraitSuperHeavy.java index c2f2656..5334048 100644 --- a/src/main/java/com/sosnitzka/taiga/traits/TraitSuperHeavy.java +++ b/src/main/java/com/sosnitzka/taiga/traits/TraitSuperHeavy.java @@ -1,6 +1,5 @@ package com.sosnitzka.taiga.traits; -import com.sosnitzka.taiga.generic.TraitProgressiveStats; import com.sosnitzka.taiga.util.Utils; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; |
