Проблема с OnUpdate

26
1
Я только начал писать на java, решил для кирки сделать фичу, когда из рук ее убираешь, пропадает бафф. Совместив это с режимами, у меня что-то пошло не так. Полагаю я не верно вставил OnUpdate, но если его выносить за режимы, то он будет просто одним глобальным баффом. Ошибка у OnUpdate и его переменных
Java:
package ru.fcorecode.arcanereborn.items.tools;

import java.util.List;

import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
import ru.fcorecode.arcanereborn.Main;
import ru.fcorecode.arcanereborn.configs.ConfigInfo;
import ru.fcorecode.arcanereborn.configs.RandomUtils;
import ru.fcorecode.arcanereborn.configs.Rarity;
import ru.fcorecode.arcanereborn.configs.ModToolMaterial;
import net.minecraft.util.StatCollector;

public class BasePickaxe extends ItemPickaxe {
    int mode = 1;
    public BasePickaxe(String name, String texture, int maxStackSize, ToolMaterial baseHAMMER) {
        super(baseHAMMER);
        this.canRepair = false;
        this.setUnlocalizedName(name);
        this.setTextureName(Main.MODID + ":" + texture);
        this.setCreativeTab(ConfigInfo.tabAFRebornTools);
        this.maxStackSize = 1;
        GameRegistry.registerItem(this, name);
    }

    public EnumRarity getRarity(ItemStack itemStack) {
        return Rarity._legendary;
    }

    @SideOnly(Side.CLIENT)
    public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
        par3List.add("" + Rarity._legendary.rarityColor + Rarity._legendary.rarityName);
        par3List.add(" " + " ");
        par3List.add(StatCollector.translateToLocal("item.effency.lore") + " " + ModToolMaterial.digSpeedbaseHAMMER);
        par3List.add(" " + " ");
        par3List.add(StatCollector.translateToLocal("item.par3MEDIUM1.lore"));
        par3List.add(StatCollector.translateToLocal("item.par3MEDIUM2.lore"));
        par3List.add(StatCollector.translateToLocal("item.par3MEDIUM3.lore"));
        par3List.add(StatCollector.translateToLocal("item.par3MEDIUM4.lore"));
        par3List.add(StatCollector.translateToLocal("item.par3MEDIUM5.lore"));
        int a, b, c;
        a = this.getMaxDamage();
        b = this.getDamage(par1ItemStack);
        c = a - b;

        par3List.add(" " + " ");
        par3List.add(StatCollector.translateToLocal("item.GetDamage.lore") + " " + c + " " + StatCollector.translateToLocal("item.GetDamageL.lore"));


    }


    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
        if (world.isRemote) {
            if (mode == 1) {
                public onUpdate (ItemStack stack, World world, Entity entity, int par4, boolean par5)
                {
                    super.onUpdate(stack, world, entity, par4, par5);
                    if (entity instanceof EntityPlayer)
                    {
                        EntityPlayer player = (EntityPlayer) entity;
                        ItemStack equipped = player.getCurrentEquippedItem();
                        if (equipped == stack)
                        {
                            player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 2, 2, true));
                        }
                    

                mode = 2;
            }}} else if (mode == 2) {
                public void onUpdate (ItemStack stack, World world, Entity entity, int par4, boolean par5)
                {
                    super.onUpdate(stack, world, entity, par4, par5);
                    if (entity instanceof EntityPlayer)
                    {
                        EntityPlayer player = (EntityPlayer) entity;
                        ItemStack equipped = player.getCurrentEquippedItem();
                        if (equipped == stack)
                        {
                            player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 2, 2, true));
                        }
                    
                mode = 3;
                    }
                    }
                } else if (mode == 3) {
                public void onUpdate (ItemStack stack, World world, Entity entity, int par4, boolean par5)
                {
                    super.onUpdate(stack, world, entity, par4, par5);
                    if (entity instanceof EntityPlayer)
                    {
                        EntityPlayer player = (EntityPlayer) entity;
                        ItemStack equipped = player.getCurrentEquippedItem();
                        if (equipped == stack)
                        {
                            player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 2, 2, true));
                        }
                    
                mode = 0;
                    }}
            } else if (mode == 0) {

                player.addChatMessage(new ChatComponentText("Все было выключено."));

                player.removePotionEffect(Potion.blindness.id);
                mode = 1;
            }
        }
        
        itemStack.damageItem(1, player);
        return itemStack;
    }

    @Override
    public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) {
        World world = player.worldObj;
        Block block = world.getBlock(x, y, z);

        MovingObjectPosition object = RandomUtils.raytraceFromEntity(world, player, false, 4.5D);

        if (object == null) {
            return super.onBlockDestroyed(stack, world, block, x, y, z, player);
        }

        int side = object.sideHit;
        int xmove = 0;
        int ymove = 0;
        int zmove = 0;

        if (side == 0 || side == 1) {
            xmove = 1;
            zmove = 1;
        } else {
            ymove = 1;
            if (side == 4 || side == 5) {
                zmove = 1;
            } else {
                xmove = 1;
            }
        }

        float strength = ForgeHooks.blockStrength(block, player, world, x, y, z);

        if (player.isSneaking() && ConfigInfo.EnableHammerShiftOneBlock &&
            (player.experienceLevel >= 20 || player.capabilities.isCreativeMode)) {
            checkBlockBreak(world, player, x, y, z, stack, strength, block, side);
        } else {
            for (int i = -xmove; i <= xmove; i++) {
                for (int j = -ymove; j <= ymove; j++) {
                    for (int k = -zmove; k <= zmove; k++) {
                        if (i != x && j != y && k != z) {
                            checkBlockBreak(world, player, x + i, y + j, z + k, stack, strength, block, side);
                        }
                    }
                }
            }
        }
        return false;
    }

    public void checkBlockBreak(World world, EntityPlayer player, int x, int y, int z, ItemStack stack, float strength, Block originalBlock, int side) {
        Block breakBlock = world.getBlock(x, y, z);

        if (this.canHarvestBlock(breakBlock, stack)) {
            float newStrength = ForgeHooks.blockStrength(breakBlock, player, world, x, y, z);
            Material material = originalBlock.getMaterial();

            if (newStrength > 0f && strength / newStrength <= 10f && breakBlock.getMaterial() == material) {
                RandomUtils.breakBlock(world, breakBlock, x, y, z, side, player);

                if ((double) breakBlock.getBlockHardness(world, x, y, z) != 0.0D) {
                    stack.damageItem(1, player);
                }
            }
        }
    }
}
 
Решение
Потому что сделано не правильно. Метод onUpdate сделай как и все другие методы у тебя, а не внутри другого метода. Там можешь сделать проверки на режимы. И сами режимы тебе надо переделать, к примеру, через НБТ стака, так как обьект предмета создаеться только 1 раз, и меняя его таким образом, ты будешь менять его у всех таких же предметов в игре.

Ну и прочитай про методы и прочее в джаве, сам поймешь потом, что сделал не так

Eifel

Модератор
1,624
79
609
Потому что сделано не правильно. Метод onUpdate сделай как и все другие методы у тебя, а не внутри другого метода. Там можешь сделать проверки на режимы. И сами режимы тебе надо переделать, к примеру, через НБТ стака, так как обьект предмета создаеться только 1 раз, и меняя его таким образом, ты будешь менять его у всех таких же предметов в игре.

Ну и прочитай про методы и прочее в джаве, сам поймешь потом, что сделал не так
 
Сверху