Bound tools
Fix errors Fix Fix Patch Patch
This commit is contained in:
parent
6c6d8067bf
commit
aa0f7d81a0
|
@ -2,9 +2,11 @@ package WayofTime.bloodmagic.api;
|
|||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
|
@ -13,6 +15,8 @@ public class ItemStackWrapper {
|
|||
public final Item item;
|
||||
public final int stackSize;
|
||||
public final int meta;
|
||||
@Setter
|
||||
public NBTTagCompound nbtTag;
|
||||
|
||||
public ItemStackWrapper(Item item, int stackSize) {
|
||||
this(item, stackSize, 0);
|
||||
|
@ -50,4 +54,10 @@ public class ItemStackWrapper {
|
|||
public String toString() {
|
||||
return stackSize + "x" + item.getUnlocalizedName() + "@" + this.meta;
|
||||
}
|
||||
|
||||
public ItemStack toStack(int count) {
|
||||
ItemStack result = new ItemStack(item, count, meta);
|
||||
result.setTagCompound(nbtTag);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package WayofTime.bloodmagic.api.event;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
|
||||
public class BoundToolEvent extends Event {
|
||||
|
||||
public EntityPlayer player;
|
||||
|
||||
public BoundToolEvent(EntityPlayer player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class Charge extends BoundToolEvent {
|
||||
|
||||
public ItemStack result;
|
||||
|
||||
public Charge(EntityPlayer player, ItemStack result) {
|
||||
super(player);
|
||||
this.result = result;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class Release extends BoundToolEvent {
|
||||
|
||||
public final ItemStack boundTool;
|
||||
public int charge;
|
||||
|
||||
public Release(EntityPlayer player, ItemStack boundTool, int charge) {
|
||||
super(player);
|
||||
this.boundTool = boundTool;
|
||||
this.charge = charge;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ public class ItemActivationCrystal extends ItemBindable {
|
|||
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".activationCrystal.");
|
||||
setHasSubtypes(true);
|
||||
setEnergyUsed(100);
|
||||
setLPUsed(100);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -25,7 +25,7 @@ import java.util.List;
|
|||
|
||||
public class ItemBindable extends Item implements IBindable {
|
||||
|
||||
private int energyUsed;
|
||||
private int lpUsed;
|
||||
|
||||
public ItemBindable() {
|
||||
super();
|
||||
|
@ -119,12 +119,12 @@ public class ItemBindable extends Item implements IBindable {
|
|||
}
|
||||
}
|
||||
|
||||
public int getEnergyUsed() {
|
||||
return this.energyUsed;
|
||||
public int getLPUsed() {
|
||||
return this.lpUsed;
|
||||
}
|
||||
|
||||
protected void setEnergyUsed(int energyUsed) {
|
||||
this.energyUsed = energyUsed;
|
||||
protected void setLPUsed(int lpUsed) {
|
||||
this.lpUsed = lpUsed;
|
||||
}
|
||||
|
||||
public String getBindableOwner(ItemStack stack) {
|
||||
|
|
36
src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java
Normal file
36
src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java
Normal file
|
@ -0,0 +1,36 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ItemBloodShard extends Item {
|
||||
|
||||
public String[] names = { "weak", "demon" };
|
||||
|
||||
public ItemBloodShard() {
|
||||
super();
|
||||
|
||||
setCreativeTab(BloodMagic.tabBloodMagic);
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".bloodShard.");
|
||||
setHasSubtypes(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubItems(Item id, CreativeTabs creativeTab, List<ItemStack> list) {
|
||||
for (int i = 0; i < names.length; i++)
|
||||
list.add(new ItemStack(id, 1, i));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack) {
|
||||
return super.getUnlocalizedName(stack) + names[stack.getItemDamage()];
|
||||
}
|
||||
}
|
83
src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java
Normal file
83
src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java
Normal file
|
@ -0,0 +1,83 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.api.ItemStackWrapper;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockLeavesBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.ai.attributes.AttributeModifier;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ItemBoundAxe extends ItemBoundTool {
|
||||
|
||||
private static final Set<Block> EFFECTIVE_ON = Sets.newHashSet(Blocks.planks, Blocks.bookshelf, Blocks.log, Blocks.log2, Blocks.chest, Blocks.pumpkin, Blocks.lit_pumpkin, Blocks.melon_block, Blocks.ladder);
|
||||
|
||||
public ItemBoundAxe() {
|
||||
super("axe", 5, EFFECTIVE_ON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStrVsBlock(ItemStack stack, Block block) {
|
||||
return block.getMaterial() != Material.wood && block.getMaterial() != Material.plants && block.getMaterial() != Material.vine ? super.getStrVsBlock(stack, block) : 12F;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) {
|
||||
boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player);
|
||||
int fortuneLvl = EnchantmentHelper.getFortuneModifier(player);
|
||||
int range = (int) (charge * 0.25);
|
||||
|
||||
HashMultiset<ItemStackWrapper> drops = HashMultiset.create();
|
||||
|
||||
BlockPos playerPos = player.getPosition().add(0, -1, 0);
|
||||
|
||||
for (int i = -range; i <= range; i++) {
|
||||
for (int j = -range; j <= range; j++) {
|
||||
for (int k = -range; k <= range; k++) {
|
||||
BlockPos blockPos = playerPos.add(i, j, k);
|
||||
Block block = world.getBlockState(blockPos).getBlock();
|
||||
int blockMeta = block.getMetaFromState(world.getBlockState(blockPos));
|
||||
|
||||
if (block != null && block.getBlockHardness(world, blockPos) != -1) {
|
||||
float strengthVsBlock = getStrVsBlock(stack, block);
|
||||
|
||||
if (strengthVsBlock > 1.1F || block instanceof BlockLeavesBase && world.canMineBlockBody(player, blockPos)) {
|
||||
if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player))
|
||||
drops.add(new ItemStackWrapper(block, 1, blockMeta));
|
||||
else {
|
||||
List<ItemStack> itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl);
|
||||
|
||||
if (itemDrops != null)
|
||||
for (ItemStack stacks : itemDrops)
|
||||
drops.add(ItemStackWrapper.getHolder(stacks));
|
||||
}
|
||||
|
||||
world.setBlockToAir(blockPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false);
|
||||
dropStacks(drops, world, playerPos.add(0, 1, 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Multimap<String, AttributeModifier> getAttributeModifiers(ItemStack stack) {
|
||||
Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(stack);
|
||||
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 7, 0));
|
||||
return multimap;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.api.ItemStackWrapper;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Multiset;
|
||||
import com.google.common.collect.Sets;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.ai.attributes.AttributeModifier;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ItemBoundPickaxe extends ItemBoundTool {
|
||||
|
||||
private static final Set<Block> EFFECTIVE_ON = Sets.newHashSet(Blocks.activator_rail, Blocks.coal_ore, Blocks.cobblestone, Blocks.detector_rail, Blocks.diamond_block, Blocks.diamond_ore, Blocks.double_stone_slab, Blocks.golden_rail, Blocks.gold_block, Blocks.gold_ore, Blocks.ice, Blocks.iron_block, Blocks.iron_ore, Blocks.lapis_block, Blocks.lapis_ore, Blocks.lit_redstone_ore, Blocks.mossy_cobblestone, Blocks.netherrack, Blocks.packed_ice, Blocks.rail, Blocks.redstone_ore, Blocks.sandstone, Blocks.red_sandstone, Blocks.stone, Blocks.stone_slab);
|
||||
|
||||
public ItemBoundPickaxe() {
|
||||
super("pickaxe", 5, EFFECTIVE_ON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHarvestBlock(Block blockIn) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStrVsBlock(ItemStack stack, Block block) {
|
||||
return block.getMaterial() != Material.iron && block.getMaterial() != Material.anvil && block.getMaterial() != Material.rock ? super.getStrVsBlock(stack, block) : 12F;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) {
|
||||
boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player);
|
||||
int fortuneLvl = EnchantmentHelper.getFortuneModifier(player);
|
||||
int range = (int) (charge * 0.25);
|
||||
|
||||
HashMultiset<ItemStackWrapper> drops = HashMultiset.create();
|
||||
|
||||
BlockPos playerPos = player.getPosition().add(0, -1, 0);
|
||||
|
||||
for (int i = -range; i <= range; i++) {
|
||||
for (int j = -range; j <= range; j++) {
|
||||
for (int k = -range; k <= range; k++) {
|
||||
BlockPos blockPos = playerPos.add(i, j, k);
|
||||
Block block = world.getBlockState(blockPos).getBlock();
|
||||
int blockMeta = block.getMetaFromState(world.getBlockState(blockPos));
|
||||
|
||||
if (block != null && block.getBlockHardness(world, blockPos) != -1) {
|
||||
float strengthVsBlock = getStrVsBlock(stack, block);
|
||||
|
||||
if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) {
|
||||
if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player))
|
||||
drops.add(new ItemStackWrapper(block, 1, blockMeta));
|
||||
else {
|
||||
List<ItemStack> itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl);
|
||||
|
||||
if (itemDrops != null)
|
||||
for (ItemStack stacks : itemDrops)
|
||||
drops.add(ItemStackWrapper.getHolder(stacks));
|
||||
}
|
||||
|
||||
world.setBlockToAir(blockPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false);
|
||||
dropStacks(drops, world, playerPos.add(0, 1, 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Multimap<String, AttributeModifier> getAttributeModifiers(ItemStack stack) {
|
||||
Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(stack);
|
||||
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 5, 0));
|
||||
return multimap;
|
||||
}
|
||||
}
|
81
src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java
Normal file
81
src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java
Normal file
|
@ -0,0 +1,81 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.api.ItemStackWrapper;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.ai.attributes.AttributeModifier;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ItemBoundShovel extends ItemBoundTool {
|
||||
|
||||
private static final Set<Block> EFFECTIVE_ON = Sets.newHashSet(Blocks.clay, Blocks.dirt, Blocks.farmland, Blocks.grass, Blocks.gravel, Blocks.mycelium, Blocks.sand, Blocks.snow, Blocks.snow_layer, Blocks.soul_sand);
|
||||
|
||||
public ItemBoundShovel() {
|
||||
super("shovel", 5, EFFECTIVE_ON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHarvestBlock(Block blockIn) {
|
||||
return blockIn == Blocks.snow_layer || blockIn == Blocks.snow;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) {
|
||||
boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(player);
|
||||
int fortuneLvl = EnchantmentHelper.getFortuneModifier(player);
|
||||
int range = (int) (charge * 0.25);
|
||||
|
||||
HashMultiset<ItemStackWrapper> drops = HashMultiset.create();
|
||||
|
||||
BlockPos playerPos = player.getPosition().add(0, -1, 0);
|
||||
|
||||
for (int i = -range; i <= range; i++) {
|
||||
for (int j = -range; j <= range; j++) {
|
||||
for (int k = -range; k <= range; k++) {
|
||||
BlockPos blockPos = playerPos.add(i, j, k);
|
||||
Block block = world.getBlockState(blockPos).getBlock();
|
||||
int blockMeta = block.getMetaFromState(world.getBlockState(blockPos));
|
||||
|
||||
if (block != null && block.getBlockHardness(world, blockPos) != -1) {
|
||||
float strengthVsBlock = getStrVsBlock(stack, block);
|
||||
|
||||
if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) {
|
||||
if (silkTouch && block.canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player))
|
||||
drops.add(new ItemStackWrapper(block, 1, blockMeta));
|
||||
else {
|
||||
List<ItemStack> itemDrops = block.getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl);
|
||||
|
||||
if (itemDrops != null)
|
||||
for (ItemStack stacks : itemDrops)
|
||||
drops.add(ItemStackWrapper.getHolder(stacks));
|
||||
}
|
||||
|
||||
world.setBlockToAir(blockPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false);
|
||||
dropStacks(drops, world, playerPos.add(0, 1, 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Multimap<String, AttributeModifier> getAttributeModifiers(ItemStack stack) {
|
||||
Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(stack);
|
||||
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 1, 0));
|
||||
return multimap;
|
||||
}
|
||||
}
|
137
src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java
Normal file
137
src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java
Normal file
|
@ -0,0 +1,137 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import WayofTime.bloodmagic.api.event.BoundToolEvent;
|
||||
import WayofTime.bloodmagic.api.util.helper.BindableHelper;
|
||||
import WayofTime.bloodmagic.api.util.helper.NBTHelper;
|
||||
import WayofTime.bloodmagic.registry.ModItems;
|
||||
import WayofTime.bloodmagic.util.helper.TextHelper;
|
||||
import com.google.common.base.Strings;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemSword;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.Explosion;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ItemBoundSword extends ItemSword {
|
||||
|
||||
private int lpUsed;
|
||||
|
||||
public ItemBoundSword() {
|
||||
super(ModItems.boundToolMaterial);
|
||||
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".bound.sword");
|
||||
setHasSubtypes(true);
|
||||
setNoRepair();
|
||||
setCreativeTab(BloodMagic.tabBloodMagic);
|
||||
this.lpUsed = 50;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) {
|
||||
|
||||
if (!playerIn.isSneaking() && getActivated(stack)) {
|
||||
int i = this.getMaxItemUseDuration(stack) - timeLeft;
|
||||
BoundToolEvent.Release event = new BoundToolEvent.Release(playerIn, stack, i);
|
||||
if (MinecraftForge.EVENT_BUS.post(event))
|
||||
return;
|
||||
|
||||
i = event.charge;
|
||||
|
||||
//TODO Make conical charge blast
|
||||
Explosion explosion = new Explosion(worldIn, playerIn, playerIn.posX, playerIn.posY, playerIn.posZ, (float) (i * 0.5), true, true);
|
||||
if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(worldIn, explosion)) return;
|
||||
explosion.doExplosionA();
|
||||
explosion.doExplosionB(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
|
||||
|
||||
BindableHelper.checkAndSetItemOwner(stack, player);
|
||||
|
||||
// if (!world.isRemote)
|
||||
{
|
||||
if (player.isSneaking())
|
||||
setActivated(stack, !getActivated(stack));
|
||||
if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, lpUsed))
|
||||
return stack;
|
||||
|
||||
if (!player.isSneaking() && getActivated(stack)) {
|
||||
BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack);
|
||||
if (MinecraftForge.EVENT_BUS.post(event))
|
||||
return event.result;
|
||||
|
||||
player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) {
|
||||
if (getActivated(stack)) {
|
||||
if (target != null || attacker != null) {
|
||||
if (target instanceof EntityLiving) {
|
||||
if (!target.isPotionActive(Potion.weakness))
|
||||
target.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn)
|
||||
{
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumAction getItemUseAction(ItemStack stack) {
|
||||
return EnumAction.BLOCK;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
|
||||
NBTHelper.checkNBT(stack);
|
||||
|
||||
if (StatCollector.canTranslate("tooltip.BloodMagic.bound.sword.desc"))
|
||||
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.bound.sword.desc"));
|
||||
if (getActivated(stack))
|
||||
tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated"));
|
||||
else
|
||||
tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated"));
|
||||
|
||||
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)))
|
||||
tooltip.add(TextHelper.getFormattedText(String.format(StatCollector.translateToLocal("tooltip.BloodMagic.currentOwner"), stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))));
|
||||
}
|
||||
|
||||
private boolean getActivated(ItemStack stack) {
|
||||
return stack.getItemDamage() > 0;
|
||||
}
|
||||
|
||||
private ItemStack setActivated(ItemStack stack, boolean activated) {
|
||||
stack.setItemDamage(activated ? 1 : 0);
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
196
src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java
Normal file
196
src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java
Normal file
|
@ -0,0 +1,196 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import WayofTime.bloodmagic.api.ItemStackWrapper;
|
||||
import WayofTime.bloodmagic.api.event.BoundToolEvent;
|
||||
import WayofTime.bloodmagic.api.util.helper.BindableHelper;
|
||||
import WayofTime.bloodmagic.util.helper.TextHelper;
|
||||
import com.google.common.collect.Multiset;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Getter
|
||||
public class ItemBoundTool extends ItemBindable {
|
||||
|
||||
private Set<Block> effectiveBlocks;
|
||||
protected final String tooltipBase;
|
||||
private final String name;
|
||||
|
||||
public boolean beingHeldDown;
|
||||
private int heldDownCount;
|
||||
|
||||
public final int chargeTime = 30;
|
||||
|
||||
public ItemBoundTool(String name, int lpUsed, Set<Block> effectiveBlocks) {
|
||||
super();
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".bound." + name);
|
||||
setHasSubtypes(true);
|
||||
setLPUsed(lpUsed);
|
||||
setFull3D();
|
||||
|
||||
this.name = name;
|
||||
this.tooltipBase = "tooltip.BloodMagic.bound." + name + ".";
|
||||
this.effectiveBlocks = effectiveBlocks;
|
||||
}
|
||||
|
||||
public ItemBoundTool(String name, int lpUsed) {
|
||||
this(name, lpUsed, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStrVsBlock(ItemStack stack, Block block) {
|
||||
return this.effectiveBlocks.contains(block) ? 8.0F : 1.0F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
|
||||
if (entityIn instanceof EntityPlayer && getActivated(stack) && isSelected && isBeingHeldDown() && stack == ((EntityPlayer) entityIn).getCurrentEquippedItem()) {
|
||||
EntityPlayer player = (EntityPlayer) entityIn;
|
||||
heldDownCount = Math.min(player.getItemInUseDuration(), chargeTime);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
|
||||
|
||||
BindableHelper.checkAndSetItemOwner(stack, player);
|
||||
|
||||
// if (!world.isRemote)
|
||||
{
|
||||
if (player.isSneaking())
|
||||
setActivated(stack, !getActivated(stack));
|
||||
// if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getLPUsed()))
|
||||
// return stack;
|
||||
|
||||
if (!player.isSneaking() && getActivated(stack)) {
|
||||
BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack);
|
||||
if (MinecraftForge.EVENT_BUS.post(event))
|
||||
return event.result;
|
||||
|
||||
player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
|
||||
beingHeldDown = true;
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed()))
|
||||
return false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
this.onItemRightClick(stack, world, player);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) {
|
||||
if (!playerIn.isSneaking() && getActivated(stack)) {
|
||||
int i = this.getMaxItemUseDuration(stack) - timeLeft;
|
||||
BoundToolEvent.Release event = new BoundToolEvent.Release(playerIn, stack, i);
|
||||
if (MinecraftForge.EVENT_BUS.post(event))
|
||||
return;
|
||||
|
||||
i = event.charge;
|
||||
|
||||
onBoundRelease(stack, worldIn, playerIn, Math.min(i, chargeTime));
|
||||
beingHeldDown = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn) {
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxItemUseDuration(ItemStack stack) {
|
||||
return 72000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumAction getItemUseAction(ItemStack stack) {
|
||||
return EnumAction.BOW;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemEnchantability() {
|
||||
return 50;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
|
||||
|
||||
if (StatCollector.canTranslate(tooltipBase + "desc"))
|
||||
tooltip.add(TextHelper.localizeEffect(tooltipBase + "desc"));
|
||||
if (getActivated(stack))
|
||||
tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated"));
|
||||
else
|
||||
tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated"));
|
||||
|
||||
super.addInformation(stack, player, tooltip, advanced);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showDurabilityBar(ItemStack stack) {
|
||||
return getActivated(stack) && beingHeldDown;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDurabilityForDisplay(ItemStack stack) {
|
||||
return ((double) -Math.min(getHeldDownCount(), chargeTime) / chargeTime) + 1;
|
||||
}
|
||||
|
||||
protected static void dropStacks(Multiset<ItemStackWrapper> drops, World world, BlockPos posToDrop) {
|
||||
for (Multiset.Entry<ItemStackWrapper> entry : drops.entrySet()) {
|
||||
int count = entry.getCount();
|
||||
ItemStackWrapper stack = entry.getElement();
|
||||
int maxStackSize = stack.item.getItemStackLimit(stack.toStack(1));
|
||||
|
||||
while (count >= maxStackSize) {
|
||||
world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(maxStackSize)));
|
||||
count -= maxStackSize;
|
||||
}
|
||||
|
||||
if (count > 0)
|
||||
world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(count)));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getActivated(ItemStack stack) {
|
||||
return stack.getItemDamage() > 0;
|
||||
}
|
||||
|
||||
public ItemStack setActivated(ItemStack stack, boolean activated) {
|
||||
stack.setItemDamage(activated ? 1 : 0);
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
|
@ -24,7 +24,7 @@ public class ItemInscriptionTool extends ItemBindable {
|
|||
public ItemInscriptionTool() {
|
||||
super();
|
||||
|
||||
setEnergyUsed(100);
|
||||
setLPUsed(100);
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".scribe.");
|
||||
setHasSubtypes(true);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public class ItemSigilAir extends ItemSigilBase {
|
|||
player.fallDistance = 0;
|
||||
|
||||
if (!player.capabilities.isCreativeMode)
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed()));
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed()));
|
||||
}
|
||||
|
||||
return super.onItemRightClick(stack, world, player);
|
||||
|
|
|
@ -24,11 +24,11 @@ public class ItemSigilBase extends ItemBindable implements ISigil {
|
|||
private final String name;
|
||||
private boolean toggleable;
|
||||
|
||||
public ItemSigilBase(String name, int energyUsed) {
|
||||
public ItemSigilBase(String name, int lpUsed) {
|
||||
super();
|
||||
|
||||
setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name);
|
||||
setEnergyUsed(energyUsed);
|
||||
setLPUsed(lpUsed);
|
||||
|
||||
this.name = name;
|
||||
this.tooltipBase = "tooltip.BloodMagic.sigil." + name + ".";
|
||||
|
|
|
@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
import org.lwjgl.Sys;
|
||||
|
||||
public class ItemSigilBloodLight extends ItemSigilBase {
|
||||
|
||||
|
@ -19,7 +18,7 @@ public class ItemSigilBloodLight extends ItemSigilBase {
|
|||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed() * 5) && !world.isRemote)
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed() * 5) && !world.isRemote)
|
||||
world.spawnEntityInWorld(new EntityBloodLight(world, player));
|
||||
|
||||
return stack;
|
||||
|
@ -29,7 +28,7 @@ public class ItemSigilBloodLight extends ItemSigilBase {
|
|||
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (world.isRemote) return false;
|
||||
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed())) {
|
||||
BlockPos newPos = blockPos.offset(side);
|
||||
|
||||
if (world.isAirBlock(newPos)) {
|
||||
|
|
|
@ -47,14 +47,14 @@ public class ItemSigilLava extends ItemSigilBase {
|
|||
return stack;
|
||||
}
|
||||
|
||||
if (this.canPlaceLava(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed()) && this.tryPlaceLava(world, blockpos1)) {
|
||||
if (this.canPlaceLava(world, blockpos1) && syphonBatteries(stack, player, getLPUsed()) && this.tryPlaceLava(world, blockpos1)) {
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!player.capabilities.isCreativeMode)
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed()));
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed()));
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
@ -74,7 +74,7 @@ public class ItemSigilLava extends ItemSigilBase {
|
|||
FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000);
|
||||
int amount = ((IFluidHandler) tile).fill(side, fluid, false);
|
||||
|
||||
if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (amount > 0 && syphonBatteries(stack, player, getLPUsed())) {
|
||||
((IFluidHandler) tile).fill(side, fluid, true);
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ public class ItemSigilLava extends ItemSigilBase {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (this.canPlaceLava(world, newPos) && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (this.canPlaceLava(world, newPos) && syphonBatteries(stack, player, getLPUsed())) {
|
||||
return this.tryPlaceLava(world, newPos);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ public class ItemSigilToggleable extends ItemSigilBase {
|
|||
if (!world.isRemote && !isUnusable(stack)) {
|
||||
if (player.isSneaking())
|
||||
setActivated(stack, !getActivated(stack));
|
||||
if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed()))
|
||||
if (getActivated(stack) && ItemBindable.syphonBatteries(stack, player, getLPUsed()))
|
||||
return stack;
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ public class ItemSigilToggleable extends ItemSigilBase {
|
|||
|
||||
@Override
|
||||
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getEnergyUsed()))
|
||||
if (BindableHelper.checkAndSetItemOwner(stack, player) && ItemBindable.syphonBatteries(stack, player, getLPUsed()))
|
||||
return onSigilUseFirst(stack, player, world, blockPos, side, hitX, hitY, hitZ);
|
||||
|
||||
return false;
|
||||
|
@ -60,7 +60,7 @@ public class ItemSigilToggleable extends ItemSigilBase {
|
|||
public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
|
||||
if (!worldIn.isRemote && entityIn instanceof EntityPlayerMP && getActivated(stack)) {
|
||||
if (worldIn.getWorldTime() % 100 == 0) {
|
||||
if (!ItemBindable.syphonBatteries(stack, (EntityPlayer) entityIn, getEnergyUsed())) {
|
||||
if (!ItemBindable.syphonBatteries(stack, (EntityPlayer) entityIn, getLPUsed())) {
|
||||
setActivated(stack, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ public class ItemSigilVoid extends ItemSigilBase {
|
|||
return stack;
|
||||
}
|
||||
|
||||
if (world.getBlockState(blockpos).getBlock().getMaterial().isLiquid() && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (world.getBlockState(blockpos).getBlock().getMaterial().isLiquid() && syphonBatteries(stack, player, getLPUsed())) {
|
||||
world.setBlockToAir(blockpos);
|
||||
return stack;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ public class ItemSigilVoid extends ItemSigilBase {
|
|||
}
|
||||
|
||||
if (!player.capabilities.isCreativeMode)
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed()));
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed()));
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
@ -72,7 +72,7 @@ public class ItemSigilVoid extends ItemSigilBase {
|
|||
if (tile instanceof IFluidHandler) {
|
||||
FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false);
|
||||
|
||||
if (amount != null && amount.amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (amount != null && amount.amount > 0 && syphonBatteries(stack, player, getLPUsed())) {
|
||||
((IFluidHandler) tile).drain(side, 1000, true);
|
||||
return true;
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ public class ItemSigilVoid extends ItemSigilBase {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && syphonBatteries(stack, player, getLPUsed())) {
|
||||
world.setBlockToAir(newPos);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -47,14 +47,14 @@ public class ItemSigilWater extends ItemSigilBase {
|
|||
return stack;
|
||||
}
|
||||
|
||||
if (this.canPlaceWater(world, blockpos1) && syphonBatteries(stack, player, getEnergyUsed()) && this.tryPlaceWater(world, blockpos1)) {
|
||||
if (this.canPlaceWater(world, blockpos1) && syphonBatteries(stack, player, getLPUsed()) && this.tryPlaceWater(world, blockpos1)) {
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!player.capabilities.isCreativeMode)
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getEnergyUsed()));
|
||||
this.setUnusable(stack, !syphonBatteries(stack, player, getLPUsed()));
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
@ -75,7 +75,7 @@ public class ItemSigilWater extends ItemSigilBase {
|
|||
FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000);
|
||||
int amount = ((IFluidHandler) tile).fill(side, fluid, false);
|
||||
|
||||
if (amount > 0 && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (amount > 0 && syphonBatteries(stack, player, getLPUsed())) {
|
||||
((IFluidHandler) tile).fill(side, fluid, true);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ public class ItemSigilWater extends ItemSigilBase {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (this.canPlaceWater(world, newPos) && syphonBatteries(stack, player, getEnergyUsed())) {
|
||||
if (this.canPlaceWater(world, newPos) && syphonBatteries(stack, player, getLPUsed())) {
|
||||
return this.tryPlaceWater(world, newPos);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
package WayofTime.bloodmagic.potion;
|
||||
|
||||
import WayofTime.bloodmagic.registry.ModItems;
|
||||
import WayofTime.bloodmagic.registry.ModPotions;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.IProjectile;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.projectile.EntityArrow;
|
||||
import net.minecraft.entity.projectile.EntityThrowable;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.living.EnderTeleportEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingEvent;
|
||||
import net.minecraftforge.event.entity.living.*;
|
||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
|
@ -101,6 +103,22 @@ public class PotionEventHandlers {
|
|||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onEntityDrop(LivingDropsEvent event) {
|
||||
if (event.source.getDamageType().equals("player")) {
|
||||
double rand = Math.random();
|
||||
|
||||
if (!(event.entityLiving instanceof EntityAnimal)) {
|
||||
PotionEffect effect = event.entityLiving.getActivePotionEffect(Potion.weakness);
|
||||
|
||||
if (effect != null)
|
||||
if (effect.getAmplifier() >= 2)
|
||||
if (rand < 0.2)
|
||||
event.entityLiving.dropItem(ModItems.bloodShard, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.HIGHEST)
|
||||
public void onPlayerDamageEvent(LivingAttackEvent event) {
|
||||
if (event.entityLiving.isPotionActive(ModPotions.whirlwind) && event.isCancelable() && event.source.isProjectile())
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package WayofTime.bloodmagic.registry;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.common.util.EnumHelper;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.ConfigHandler;
|
||||
|
@ -35,6 +36,11 @@ public class ModItems {
|
|||
public static Item packSacrifice;
|
||||
public static Item daggerOfSacrifice;
|
||||
|
||||
public static Item boundSword;
|
||||
public static Item boundPickaxe;
|
||||
public static Item boundAxe;
|
||||
public static Item boundShovel;
|
||||
|
||||
public static Item sigilDivination;
|
||||
public static Item sigilAir;
|
||||
public static Item sigilWater;
|
||||
|
@ -54,6 +60,8 @@ public class ModItems {
|
|||
public static Item sigilCompression;
|
||||
|
||||
public static Item itemComponent;
|
||||
|
||||
public static Item bloodShard;
|
||||
|
||||
public static Item livingArmourHelmet;
|
||||
public static Item livingArmourChest;
|
||||
|
@ -62,6 +70,8 @@ public class ModItems {
|
|||
|
||||
public static Item altarMaker;
|
||||
|
||||
public static Item.ToolMaterial boundToolMaterial = EnumHelper.addToolMaterial("BoundToolMaterial", 4, 0, 12, 8, 50);
|
||||
|
||||
public static void init() {
|
||||
bloodOrb = registerItem(new ItemBloodOrb());
|
||||
orbWeak = new BloodOrb("weak", 1, 5000);
|
||||
|
@ -88,6 +98,11 @@ public class ModItems {
|
|||
packSelfSacrifice = registerItem(new ItemPackSelfSacrifice());
|
||||
daggerOfSacrifice = registerItem(new ItemDaggerOfSacrifice());
|
||||
|
||||
boundSword = registerItem(new ItemBoundSword());
|
||||
boundPickaxe = registerItem(new ItemBoundPickaxe());
|
||||
boundAxe = registerItem(new ItemBoundAxe());
|
||||
boundShovel = registerItem(new ItemBoundShovel());
|
||||
|
||||
sigilDivination = registerItem(new ItemSigilDivination());
|
||||
sigilAir = registerItem(new ItemSigilAir());
|
||||
sigilWater = registerItem(new ItemSigilWater());
|
||||
|
@ -107,6 +122,8 @@ public class ModItems {
|
|||
sigilEnderSeverance = registerItem(new ItemSigilEnderSeverance());
|
||||
|
||||
itemComponent = registerItem(new ItemComponent());
|
||||
|
||||
bloodShard = registerItem(new ItemBloodShard());
|
||||
|
||||
livingArmourHelmet = registerItem(new ItemLivingArmour(0), "ItemLivingArmourHelmet");
|
||||
livingArmourChest = registerItem(new ItemLivingArmour(1), "ItemLivingArmourChest");
|
||||
|
@ -152,6 +169,15 @@ public class ModItems {
|
|||
renderHelper.itemRender(packSelfSacrifice);
|
||||
renderHelper.itemRender(daggerOfSacrifice);
|
||||
|
||||
renderHelper.itemRender(boundSword, 0);
|
||||
renderHelper.itemRender(boundSword, 1);
|
||||
renderHelper.itemRender(boundPickaxe, 0);
|
||||
renderHelper.itemRender(boundPickaxe, 1);
|
||||
renderHelper.itemRender(boundAxe, 0);
|
||||
renderHelper.itemRender(boundAxe, 1);
|
||||
renderHelper.itemRender(boundShovel, 0);
|
||||
renderHelper.itemRender(boundShovel, 1);
|
||||
|
||||
renderHelper.itemRender(sigilDivination);
|
||||
renderHelper.itemRender(sigilAir);
|
||||
renderHelper.itemRender(sigilWater);
|
||||
|
@ -183,6 +209,9 @@ public class ModItems {
|
|||
for(int i = 0 ; i < ItemComponent.getNames().size() ; i++)
|
||||
renderHelper.itemRender(itemComponent, i);
|
||||
|
||||
renderHelper.itemRender(bloodShard, 0);
|
||||
renderHelper.itemRender(bloodShard, 1);
|
||||
|
||||
renderHelper.itemRender(livingArmourHelmet);
|
||||
renderHelper.itemRender(livingArmourChest);
|
||||
renderHelper.itemRender(livingArmourLegs);
|
||||
|
|
|
@ -3,6 +3,7 @@ package WayofTime.bloodmagic.util.handler;
|
|||
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
|
||||
import WayofTime.bloodmagic.block.BlockAltar;
|
||||
import WayofTime.bloodmagic.item.ItemAltarMaker;
|
||||
import WayofTime.bloodmagic.item.ItemBoundSword;
|
||||
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
|
||||
import WayofTime.bloodmagic.registry.ModBlocks;
|
||||
import WayofTime.bloodmagic.registry.ModItems;
|
||||
|
@ -16,6 +17,7 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||
import net.minecraftforge.event.entity.player.FillBucketEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
|
@ -69,4 +71,13 @@ public class EventHandler {
|
|||
ChatUtil.sendNoSpam(event.entityPlayer, TextHelper.localizeEffect("chat.BloodMagic.altarMaker.destroy", altarMaker.destroyAltar(event.entityPlayer)));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onBlockBreak(BlockEvent.BreakEvent event) {
|
||||
if (!event.world.isRemote && event.getPlayer() != null) {
|
||||
if (event.getPlayer().capabilities.isCreativeMode && event.getPlayer().getCurrentEquippedItem().getItem() instanceof ItemBoundSword) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,11 @@ item.BloodMagic.pack.selfSacrifice.name=Blood Letter's Pack
|
|||
item.BloodMagic.pack.sacrifice.name=Coat of Arms
|
||||
item.BloodMagic.daggerOfSacrifice.name=Dagger of Sacrifice
|
||||
|
||||
item.BloodMagic.bound.sword.name=Bound Sword
|
||||
item.BloodMagic.bound.pickaxe.name=Bound Pickaxe
|
||||
item.BloodMagic.bound.axe.name=Bound Axe
|
||||
item.BloodMagic.bound.shovel.name=Bound Shovel
|
||||
|
||||
item.BloodMagic.bucket.lifeEssence.name=Bucket of Life
|
||||
|
||||
item.BloodMagic.scribe.water.name=Elemental Inscription Tool: Water
|
||||
|
@ -60,6 +65,9 @@ item.BloodMagic.reagent.virtus.name=Virtus
|
|||
item.BloodMagic.reagent.reductus.name=Reductus
|
||||
item.BloodMagic.reagent.potentia.name=Potentia
|
||||
|
||||
item.BloodMagic.bloodShard.weak.name=Weak Blood Shard
|
||||
item.BloodMagic.bloodShard.demon.name=Demon Blood Shard
|
||||
|
||||
item.BloodMagic.baseComponent.reagentWater.name=Water Reagent
|
||||
item.BloodMagic.baseComponent.reagentLava.name=Lava Reagent
|
||||
item.BloodMagic.baseComponent.reagentAir.name=Air Reagent
|
||||
|
@ -156,6 +164,11 @@ tooltip.BloodMagic.sigil.phantomBridge.desc=&oWalking on thin air...
|
|||
tooltip.BloodMagic.sigil.whirlwind.desc=&oBest not to wear a skirt
|
||||
tooltip.BloodMagic.sigil.enderSeverance.desc=&oPutting Endermen in Dire situations!
|
||||
|
||||
tooltip.BloodMagic.bound.sword.desc=&oCulling the weak
|
||||
tooltip.BloodMagic.bound.pickaxe.desc=&oDestroying stone without mercy
|
||||
tooltip.BloodMagic.bound.axe.desc=&oDemonic deforestation
|
||||
tooltip.BloodMagic.bound.shovel.desc=&oScrubs floors clean of dirt
|
||||
|
||||
tooltip.BloodMagic.sacrificialDagger.desc=Just a prick of the finger will suffice...
|
||||
tooltip.BloodMagic.slate.desc=Infused stone inside of a Blood Altar
|
||||
tooltip.BloodMagic.inscriber.desc=The writing is on the wall...
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/WeakBloodShard"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/DemonBloodShard"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/Item_deactivated"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/BoundAxe_activated"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/Item_deactivated"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/BoundPickaxe_activated"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/Item_deactivated"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/BoundShovel_activated"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/Item_deactivated"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"parent":"bloodmagic:item/ItemModelBase",
|
||||
"textures": {
|
||||
"layer0":"bloodmagic:items/BoundSword_activated"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 457 B After Width: | Height: | Size: 457 B |
Loading…
Reference in a new issue