summaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/sosnitzka/taiga/MaterialTraits.java6
-rw-r--r--src/main/java/com/sosnitzka/taiga/traits/TraitBeserk.java107
-rw-r--r--src/main/java/com/sosnitzka/taiga/traits/TraitCarousel.java25
-rw-r--r--src/main/java/com/sosnitzka/taiga/traits/TraitCatcher.java47
-rw-r--r--src/main/java/com/sosnitzka/taiga/traits/TraitDevelopement.java6
-rw-r--r--src/main/java/com/sosnitzka/taiga/util/Utils.java3
6 files changed, 181 insertions, 13 deletions
diff --git a/src/main/java/com/sosnitzka/taiga/MaterialTraits.java b/src/main/java/com/sosnitzka/taiga/MaterialTraits.java
index 4eb5ef0..4fd2be9 100644
--- a/src/main/java/com/sosnitzka/taiga/MaterialTraits.java
+++ b/src/main/java/com/sosnitzka/taiga/MaterialTraits.java
@@ -52,7 +52,9 @@ public class MaterialTraits {
public static final AbstractTrait decay = new TraitDecay();
public static final AbstractTrait whirl = new TraitWhirl();
public static final AbstractTrait superheavy = new TraitSuperHeavy();
- //public static final AbstractTrait dev = new TraitDevelopement();
+ public static final AbstractTrait dev = new TraitDevelopement();
+ public static final AbstractTrait carousel = new TraitCarousel();
+ public static final AbstractTrait beserk = new TraitBeserk();
/**
@@ -86,7 +88,7 @@ public class MaterialTraits {
/**
* With Dev
**/
- public static Material adamant = new Material("adamant", TextFormatting.GOLD); //.addTrait(dev);
+ public static Material adamant = new Material("adamant", TextFormatting.GOLD).addTrait(beserk); //.addTrait(dev);
public static Material dyonite = new Material("dyonite", TextFormatting.GREEN).addTrait(tantrum);
public static Material nucleum = new Material("nucleum", TextFormatting.YELLOW).addTrait(decay);
public static Material lumix = new Material("lumix", TextFormatting.YELLOW).addTrait(bright, MaterialTypes.HANDLE).addTrait(glimmer, MaterialTypes.HEAD);
diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitBeserk.java b/src/main/java/com/sosnitzka/taiga/traits/TraitBeserk.java
new file mode 100644
index 0000000..20525b6
--- /dev/null
+++ b/src/main/java/com/sosnitzka/taiga/traits/TraitBeserk.java
@@ -0,0 +1,107 @@
+package com.sosnitzka.taiga.traits;
+
+import com.sosnitzka.taiga.util.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.text.TextFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.FakePlayer;
+import net.minecraftforge.event.entity.player.PlayerInteractEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import slimeknights.tconstruct.library.tools.ToolNBT;
+import slimeknights.tconstruct.library.utils.TagUtil;
+import slimeknights.tconstruct.library.utils.TinkerUtil;
+import slimeknights.tconstruct.library.utils.ToolHelper;
+
+
+public class TraitBeserk extends TraitProgressiveStats {
+
+ protected static int TICK_PER_STAT = 8;
+
+ public TraitBeserk() {
+ super(TraitBeserk.class.getSimpleName().toLowerCase().substring(5), TextFormatting.RED);
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @Override
+ public void miningSpeed(ItemStack tool, PlayerInteractEvent.BreakSpeed event) {
+ NBTTagCompound tag = TagUtil.getExtraTag(tool);
+ Utils.GeneralNBTData data = Utils.GeneralNBTData.read(tag);
+ if (!data.active) return;
+ event.setNewSpeed(event.getNewSpeed() * 4);
+ }
+
+ @Override
+ public float damage(ItemStack tool, EntityLivingBase player, EntityLivingBase target, float damage, float newDamage, boolean isCritical) {
+ NBTTagCompound tag = TagUtil.getExtraTag(tool);
+ Utils.GeneralNBTData data = Utils.GeneralNBTData.read(tag);
+ if (!data.active) return newDamage;
+ return newDamage * 4;
+ }
+
+
+ @Override
+ public void onUpdate(ItemStack tool, World world, Entity entity, int itemSlot, boolean isSelected) {
+ if (!world.isRemote) {
+ NBTTagCompound tag = TagUtil.getExtraTag(tool);
+ EntityLivingBase player = (EntityLivingBase) entity;
+ Utils.GeneralNBTData data = Utils.GeneralNBTData.read(tag);
+ NBTTagCompound root = TagUtil.getTagSafe(tool);
+ StatNBT distributed = getBonus(root);
+ if (data.active) {
+ TagUtil.setEnchantEffect(root, true);
+ if (entity instanceof FakePlayer) {
+ return;
+ }
+ if (entity.ticksExisted % TICK_PER_STAT > 0) {
+ return;
+ }
+
+ ToolNBT stat = TagUtil.getToolStats(tool);
+ if (random.nextFloat() > .80f) {
+ stat.durability -= 1;
+ distributed.durability -= 1;
+ } else
+ ToolHelper.damageTool(tool, 1, player);
+ TagUtil.setToolTag(root, stat.get());
+ setBonus(root, distributed);
+ } else TagUtil.setEnchantEffect(root, false);
+ }
+ }
+
+ @SubscribeEvent
+ public void onRightClickItem(PlayerInteractEvent.RightClickItem event) {
+ World w = event.getWorld();
+ ItemStack tool = event.getEntityPlayer().getHeldItemMainhand();
+ if (!w.isRemote && TinkerUtil.hasTrait(TagUtil.getTagSafe(tool), identifier)) {
+ NBTTagCompound tag = TagUtil.getExtraTag(tool);
+ Utils.GeneralNBTData data = Utils.GeneralNBTData.read(tag);
+ NBTTagCompound root = TagUtil.getTagSafe(tool);
+ StatNBT distributed = getBonus(root);
+ ToolNBT stat = TagUtil.getToolStats(tool);
+ if (data.active) {
+ data.active = false;
+ TagUtil.setEnchantEffect(root, false);
+ TagUtil.setExtraTag(root, tag);
+ data.write(tag);
+
+ } else {
+ stat.durability -= 10;
+ distributed.durability -= 10;
+ TagUtil.setToolTag(root, stat.get());
+ setBonus(root, distributed);
+ data.active = true;
+ data.write(tag);
+
+ TagUtil.setExtraTag(root, tag);
+ data.write(tag);
+ }
+
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitCarousel.java b/src/main/java/com/sosnitzka/taiga/traits/TraitCarousel.java
new file mode 100644
index 0000000..76b5f66
--- /dev/null
+++ b/src/main/java/com/sosnitzka/taiga/traits/TraitCarousel.java
@@ -0,0 +1,25 @@
+package com.sosnitzka.taiga.traits;
+
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+import slimeknights.tconstruct.library.traits.AbstractTrait;
+
+
+public class TraitCarousel extends AbstractTrait {
+
+ public static final int TICK = 24;
+
+ public TraitCarousel() {
+ super(TraitCarousel.class.getSimpleName().toLowerCase().substring(5), 0xffcc5511);
+ }
+
+ @Override
+ public void afterBlockBreak(ItemStack tool, World world, IBlockState state, BlockPos pos, EntityLivingBase player, boolean wasEffective) {
+
+ }
+
+
+}
diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitCatcher.java b/src/main/java/com/sosnitzka/taiga/traits/TraitCatcher.java
index ae64b52..0db24d8 100644
--- a/src/main/java/com/sosnitzka/taiga/traits/TraitCatcher.java
+++ b/src/main/java/com/sosnitzka/taiga/traits/TraitCatcher.java
@@ -3,6 +3,8 @@ package com.sosnitzka.taiga.traits;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -10,6 +12,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -21,7 +24,7 @@ import slimeknights.tconstruct.library.utils.ToolHelper;
public class TraitCatcher extends AbstractTrait {
- public static int chance = 1;
+ public static int chance = 3;
public static float costMulti = 0.25f;
public TraitCatcher() {
@@ -29,25 +32,50 @@ public class TraitCatcher extends AbstractTrait {
MinecraftForge.EVENT_BUS.register(this);
}
- @Override
- public void onHit(ItemStack tool, EntityLivingBase player, EntityLivingBase target, float damage, boolean isCritical) {
- World w = player.worldObj;
+ @SubscribeEvent
+ public void killEntity(LivingDeathEvent event) {
+ if (!(event.getSource().getEntity() instanceof EntityPlayer))
+ return;
+ if (event.getEntityLiving() instanceof EntityPlayer || event.getEntityLiving() instanceof EntityPlayerMP)
+ return;
+ World w = event.getSource().getEntity().getEntityWorld();
+ EntityPlayer p = (EntityPlayer) event.getSource().getEntity();
+ EntityLivingBase target = event.getEntityLiving();
+ NBTTagCompound tag = TagUtil.getExtraTag(p.getHeldItemMainhand());
+ Data data = Data.read(tag);
+ if (!data.mobClass.isEmpty())
+ return;
if (!w.isRemote && random.nextInt((int) target.getMaxHealth()) <= chance && target instanceof EntityLiving) {
- NBTTagCompound tag = TagUtil.getExtraTag(tool);
- Data data = Data.read(tag);
+ event.setCanceled(true);
+ target.setDropItemsWhenDead(false);
if (data.mobClass.isEmpty()) {
data.mobClass = target.getClass().getName();
data.mobName = target.getName();
data.write(tag);
- TagUtil.setEnchantEffect(tool, true);
- TagUtil.setExtraTag(tool, tag);
- player.playSound(SoundEvents.ENTITY_ENDERMEN_TELEPORT, 1.0F, 1.0F);
+ TagUtil.setExtraTag(p.getHeldItemMainhand(), tag);
+ p.playSound(SoundEvents.ENTITY_ENDERMEN_TELEPORT, 1.0F, 1.0F);
target.setDropItemsWhenDead(false);
target.setDead();
}
}
}
+
+ @Override
+ public void onUpdate(ItemStack tool, World world, Entity entity, int itemSlot, boolean isSelected) {
+ if (!world.isRemote) {
+ NBTTagCompound tag = TagUtil.getExtraTag(tool);
+ Data data = Data.read(tag);
+ if (data.mobClass.isEmpty()) {
+ TagUtil.setEnchantEffect(tool, false);
+ } else
+ TagUtil.setEnchantEffect(tool, true);
+
+
+ }
+ }
+
+
@SubscribeEvent
public void onRightClickItem(PlayerInteractEvent.RightClickItem event) {
World w = event.getWorld();
@@ -72,7 +100,6 @@ public class TraitCatcher extends AbstractTrait {
data.mobName = "";
data.write(tag);
TagUtil.setExtraTag(tool, tag);
- TagUtil.setEnchantEffect(tool, false);
ToolHelper.damageTool(tool, random.nextInt((int) (ToolHelper.getCurrentDurability(tool) * costMulti)), event.getEntityPlayer());
}
}
diff --git a/src/main/java/com/sosnitzka/taiga/traits/TraitDevelopement.java b/src/main/java/com/sosnitzka/taiga/traits/TraitDevelopement.java
index 4fe6a76..60dc7ab 100644
--- a/src/main/java/com/sosnitzka/taiga/traits/TraitDevelopement.java
+++ b/src/main/java/com/sosnitzka/taiga/traits/TraitDevelopement.java
@@ -2,11 +2,14 @@ package com.sosnitzka.taiga.traits;
import net.minecraft.block.BlockStone;
import net.minecraft.block.state.IBlockState;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import slimeknights.tconstruct.library.traits.AbstractTrait;
+import slimeknights.tconstruct.library.utils.TagUtil;
+import slimeknights.tconstruct.library.utils.TinkerUtil;
public class TraitDevelopement extends AbstractTrait {
@@ -20,7 +23,8 @@ public class TraitDevelopement extends AbstractTrait {
@SubscribeEvent
public void onBreak(BlockEvent.BreakEvent e) {
IBlockState state = e.getState();
- if (state.getBlock().equals(net.minecraft.init.Blocks.STONE))
+ ItemStack tool = e.getPlayer().getHeldItemMainhand();
+ if (state.getBlock().equals(net.minecraft.init.Blocks.STONE) && TinkerUtil.hasTrait(TagUtil.getTagSafe(tool), identifier))
System.out.println("State.Variant: " + state.getValue(BlockStone.VARIANT));
}
diff --git a/src/main/java/com/sosnitzka/taiga/util/Utils.java b/src/main/java/com/sosnitzka/taiga/util/Utils.java
index 6d63dcf..6a508c6 100644
--- a/src/main/java/com/sosnitzka/taiga/util/Utils.java
+++ b/src/main/java/com/sosnitzka/taiga/util/Utils.java
@@ -125,6 +125,7 @@ public class Utils {
public float radius;
public float dfloat;
public int dint;
+ public boolean active;
public static GeneralNBTData read(NBTTagCompound tag) {
GeneralNBTData data = new GeneralNBTData();
@@ -137,6 +138,7 @@ public class Utils {
data.radius = tag.getFloat("radius");
data.dfloat = tag.getFloat("dfloat");
data.dint = tag.getInteger("dint");
+ data.active = tag.getBoolean("active");
return data;
}
@@ -150,6 +152,7 @@ public class Utils {
tag.setFloat("radius", radius);
tag.setInteger("dint", dint);
tag.setFloat("dfloat", dfloat);
+ tag.setBoolean("active", active);
}
}
}