Проклятия

В моем моде есть проклятия - разнообразные, я остановился пока что на этом:
Теперь, когда проклятый игрок будет крафтить инструмент (!), тот будет крафтиться поломанным в диапазоне от 1 ед. до середины - крафтиться, значит при перекладывании в инвентарь из верстака или другого места. Как определить игрока с boolean-переменной-проклятием с true, затем узнать что он скрафтил инструмент, и сгенерировать кол-во ед. поломок?
 
Насчет проклятий. Мне нужно как-то получать игрока - типа ДНК, как в Witchery, например. Иначе каким образом я буду накладывать на него проклятия?
 
Ладно, путем сложных махинаций я могу найти игрока. 


public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
{
if (entity instanceof EntityLivingBase)
{
EntityLivingBase entity_base = (EntityLivingBase) entity;
parEntity = entity_base;
if (player.worldObj.rand.nextInt(5) == 0)
{
entity.playSound("random.explode", 1.0F, 1.0F);
entity_base.addPotionEffect(new PotionEffect(Potion.confusion.id, 0, 5));
player.inventory.consumeInventoryItem(AlchemyBase.Needle);
player.inventory.addItemStackToInventory(new ItemStack(AlchemyBase.NeedleWithBlood, 1));

Вот игла, которая берет кровь, по ней я нахожу игрока в другом коде. Но тот код его не видит. Как сделат ь его видимым?
 
Хорошо нужно получить ник, но как? Ведь я даже игрока получить не могу! Ведь тыкнутая сущность (в том числе и игрок) есть только в этом методе. Снаружи их не найти их другого кода. Я сделал переменную public, которая равна тыкнутой сущности, в другом коде ее тоже не видно.
 
Типа делать различные проверки. Я не знаю как в "Witchery" сделано взятия ДНК с кровати. Но предполагаю, что тыкая предметом по кровати, предмет ищет спаван точку игрока. Берём игрока по спавн точке. Ну затем можно методом "player.getCommandSenderName()" в предмет сохранить имя в NBT. Затем, чтобы как-то после этого взаимодействовать с игроком, нужно найти игрока по нику. Как получить игрока по нику? Если null, то ни чего не делать, так как этого игрока нет. Если не null, то что-то делать с ним.
 
У меня теперь крашится)) Вроде способ нашел. Но..
Код:
package com.alchemy.alchemy;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemAxe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;

import java.util.UUID;

public class Needle extends ItemAxe
{
    public Needle(Item.ToolMaterial material)
    {
        super(material);
        this.maxStackSize = 1;
        this.setCreativeTab(AlchemyBase.TabExorcism);
        this.setTextureName(AlchemyBase.MODID + ":Needle");
        this.setMaxDamage(material.getMaxUses());
    }

    @Override
    public void registerIcons(IIconRegister par1IconRegister)
    {
        this.itemIcon = par1IconRegister.registerIcon(AlchemyBase.MODID + ":Needle");
    }

    public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
    {
        if (entity instanceof EntityLivingBase)
        {
            EntityLivingBase entity_base = (EntityLivingBase) entity;

            if (player.worldObj.rand.nextInt(5) == 0)
            {
                entity.playSound("random.explode", 1.0F, 1.0F);
                entity_base.addPotionEffect(new PotionEffect(Potion.confusion.id, 0, 5));
                player.inventory.consumeInventoryItem(AlchemyBase.Needle);
                player.inventory.addItemStackToInventory(new ItemStack(AlchemyBase.NeedleWithBlood, 1));

                for (int i = 0; i < 10; i++)
                {
                    entity.worldObj.spawnParticle("reddust", entity.posX, entity.posY + 0.5, entity.posZ, 0.0D, 0.1D, 0.0D);
                }
            }
        }

        this.setDamage(stack, this.getDamage(stack) + 1);

        if (this.getDamage(stack) >= this.getMaxDamage(stack))
        {
            player.inventory.consumeInventoryItem(this);
        }

        return true;
    }
}
[merge_posts_bbcode]Добавлено: 20.03.2016 13:31:34[/merge_posts_bbcode]

Я сейчас убрал получение игрока, но все равно крашится
 
Назад
Сверху