forked from TAIGA/TAIGA
108 lines
4.0 KiB
Java
108 lines
4.0 KiB
Java
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 TraitBerserk extends TraitProgressiveStats {
|
|
|
|
protected static int TICK_PER_STAT = 8;
|
|
|
|
public TraitBerserk() {
|
|
super(TraitBerserk.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);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|