Кирка 3х3

  • Автор темы Автор темы DJMixa
  • Дата начала Дата начала

DJMixa

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
SKQ0
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Код:
package com.DJMixa;


import com.DJMixa.Providers.RegionProvider;
import com.DJMixa.Utills.EnchantmentsHelper;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

import javax.smartcardio.TerminalFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;



/**
 * Created by DJMixa on 13.04.2018.
 */
public class MineAssist extends JavaPlugin implements Listener {

    List<AWaitBreak> aWaitBreaks = new ArrayList<>();
    RegionProvider regionProvider;
    private TerminalFactory item;


    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this,this);
        regionProvider = new RegionProvider(this);
    }

    @EventHandler
    public void onBreak(BlockBreakEvent event)
    {
        Player player = event.getPlayer();
        if(player==null)return;

        AWaitBreak aWaitBreak = AWaitBreak.get(player,aWaitBreaks);
        if(aWaitBreak == null)return;

        ItemStack itemInTools = player.getItemInHand();
        if(itemInTools == null)return;

        List<Block> blocks = getBlocks(aWaitBreak);

        int silkTouch = itemInTools.getEnchantmentLevel(Enchantment.SILK_TOUCH);
        int fortune = itemInTools.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
        int durability = itemInTools.getEnchantmentLevel(Enchantment.DURABILITY);

        Random random = new Random();

        boolean isBroken = false;

        aWaitBreaks.remove(aWaitBreak);
        if(!regionProvider.canChangeRegion(player,event.getBlock().getLocation()))return;

        if(player.getFoodLevel() == 0)return;

        for(Block block : blocks)
        {
            if(!regionProvider.canChangeRegion(player,block.getLocation()))continue;

            if(random.nextInt(100) < (100/(1+durability)))
                itemInTools.setDurability((short)(itemInTools.getDurability() + 1));

            for(ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>)block.getDrops(itemInTools),block,silkTouch,fortune))
            {
                player.getWorld().dropItemNaturally(block.getLocation(),is);
            }

            if(itemInTools.getDurability() >= itemInTools.getType().getMaxDurability())
            {
                isBroken = true;
                player.getInventory().removeItem(itemInTools);
                break;
            }


            if(player.getGameMode() == GameMode.SURVIVAL) {
                player.setExhaustion(player.getExhaustion() + 0.045f);
                if(player.getExhaustion() >= 4)
                {
                    if(player.getSaturation() >= 1)
                    {
                        player.setSaturation(player.getSaturation() - 1);
                    }
                    else
                    {
                        player.setFoodLevel(player.getFoodLevel() - 1);
                    }
                    player.setExhaustion(0);
                }
            }

            block.setType(Material.AIR);
        }


        if(!isBroken)
            player.setItemInHand(itemInTools);

    }

    @EventHandler
    public void onInteract(PlayerInteractEvent event)
    {
        Player player;
        player = event.getPlayer();
        if(player==null)return;

        AWaitBreak aWaitBreak = AWaitBreak.get(player,aWaitBreaks);
        if(aWaitBreak != null)aWaitBreaks.remove(aWaitBreak);

        if(event.getAction() == Action.LEFT_CLICK_BLOCK)

        {
            aWaitBreaks.add(new AWaitBreak(player,event.getClickedBlock(),event.getBlockFace()));
        }
    }

    public List<Block> getBlocks(AWaitBreak aWaitBreak)
    {
        if(aWaitBreak.face == BlockFace.DOWN || aWaitBreak.face == BlockFace.UP)
            return getBlocks(aWaitBreak,1,0,1);
        else if(aWaitBreak.face == BlockFace.EAST || aWaitBreak.face == BlockFace.WEST)
            return getBlocks(aWaitBreak,0,1,1);
        else return getBlocks(aWaitBreak,1,1,0);
    }

    public List<Block> getBlocks(AWaitBreak aWaitBreak,int x,int y,int z)
    {
        List<Block> blocks = new ArrayList<>();

        World world = aWaitBreak.player.getWorld();

        int bX = aWaitBreak.block.getX();
        int bY = aWaitBreak.block.getY();
        int bZ = aWaitBreak.block.getZ();

        for(int cX = -x;cX <=x;cX++)
            for(int cY = -y;cY <=y;cY++)
                for(int cZ = -z;cZ <=z;cZ++)
                {
                    Block block = world.getBlockAt(bX + cX,bY + cY,bZ + cZ);
                    if(aWaitBreak.block == block)continue;
                    if(block.getType() == Material.AIR)continue;

                    blocks.add(block);
                }
        return blocks;
    }
}
Об рубке блоков aWaitBreak
Код:
package com.DJMixa;

import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;

import java.util.List;

/**
 * Created by DJMixa on 13.04.2018.
 */
public class AWaitBreak {

    public Player player;
    public Block block;
    public BlockFace face;

    public AWaitBreak(Player player, Block block,BlockFace face)
    {
        this.player = player;
        this.block = block;
        this.face = face;
    }


    public static AWaitBreak get(Player player, List<AWaitBreak> list)
    {
        for(AWaitBreak aWaitBreak : list)
        {
            if(aWaitBreak.player.getName().equals(player.getName()))return aWaitBreak;
        }
        return null;
    }
}
Спасибо!!!
Плагин вот
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Код:
package com.DJMixa;


import com.DJMixa.Providers.RegionProvider;
import com.DJMixa.Utills.EnchantmentsHelper;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

import javax.smartcardio.TerminalFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;



/**
 * Created by DJMixa on 13.04.2018.
 */
public class MineAssist extends JavaPlugin implements Listener {

    List<AWaitBreak> aWaitBreaks = new ArrayList<>();
    RegionProvider regionProvider;
    private TerminalFactory item;


    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this,this);
        regionProvider = new RegionProvider(this);
    }

    @EventHandler
    public void onBreak(BlockBreakEvent event)
    {
        Player player = event.getPlayer();
        if(player==null)return;

        AWaitBreak aWaitBreak = AWaitBreak.get(player,aWaitBreaks);
        if(aWaitBreak == null)return;

        ItemStack itemInTools = player.getItemInHand();
        if(itemInTools == null)return;

        List<Block> blocks = getBlocks(aWaitBreak);

        int silkTouch = itemInTools.getEnchantmentLevel(Enchantment.SILK_TOUCH);
        int fortune = itemInTools.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
        int durability = itemInTools.getEnchantmentLevel(Enchantment.DURABILITY);

        Random random = new Random();

        boolean isBroken = false;

        aWaitBreaks.remove(aWaitBreak);
        if(!regionProvider.canChangeRegion(player,event.getBlock().getLocation()))return;

        if(player.getFoodLevel() == 0)return;

        for(Block block : blocks)
        {
            if(!regionProvider.canChangeRegion(player,block.getLocation()))continue;

            if(random.nextInt(100) < (100/(1+durability)))
                itemInTools.setDurability((short)(itemInTools.getDurability() + 1));

            for(ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>)block.getDrops(itemInTools),block,silkTouch,fortune))
            {
                player.getWorld().dropItemNaturally(block.getLocation(),is);
            }

            if(itemInTools.getDurability() >= itemInTools.getType().getMaxDurability())
            {
                isBroken = true;
                player.getInventory().removeItem(itemInTools);
                break;
            }


            if(player.getGameMode() == GameMode.SURVIVAL) {
                player.setExhaustion(player.getExhaustion() + 0.045f);
                if(player.getExhaustion() >= 4)
                {
                    if(player.getSaturation() >= 1)
                    {
                        player.setSaturation(player.getSaturation() - 1);
                    }
                    else
                    {
                        player.setFoodLevel(player.getFoodLevel() - 1);
                    }
                    player.setExhaustion(0);
                }
            }

            block.setType(Material.AIR);
        }


        if(!isBroken)
            player.setItemInHand(itemInTools);

    }

    @EventHandler
    public void onInteract(PlayerInteractEvent event)
    {
        Player player;
        player = event.getPlayer();
        if(player==null)return;

        AWaitBreak aWaitBreak = AWaitBreak.get(player,aWaitBreaks);
        if(aWaitBreak != null)aWaitBreaks.remove(aWaitBreak);

        if(event.getAction() == Action.LEFT_CLICK_BLOCK)

        {
            aWaitBreaks.add(new AWaitBreak(player,event.getClickedBlock(),event.getBlockFace()));
        }
    }

    public List<Block> getBlocks(AWaitBreak aWaitBreak)
    {
        if(aWaitBreak.face == BlockFace.DOWN || aWaitBreak.face == BlockFace.UP)
            return getBlocks(aWaitBreak,1,0,1);
        else if(aWaitBreak.face == BlockFace.EAST || aWaitBreak.face == BlockFace.WEST)
            return getBlocks(aWaitBreak,0,1,1);
        else return getBlocks(aWaitBreak,1,1,0);
    }

    public List<Block> getBlocks(AWaitBreak aWaitBreak,int x,int y,int z)
    {
        List<Block> blocks = new ArrayList<>();

        World world = aWaitBreak.player.getWorld();

        int bX = aWaitBreak.block.getX();
        int bY = aWaitBreak.block.getY();
        int bZ = aWaitBreak.block.getZ();

        for(int cX = -x;cX <=x;cX++)
            for(int cY = -y;cY <=y;cY++)
                for(int cZ = -z;cZ <=z;cZ++)
                {
                    Block block = world.getBlockAt(bX + cX,bY + cY,bZ + cZ);
                    if(aWaitBreak.block == block)continue;
                    if(block.getType() == Material.AIR)continue;

                    blocks.add(block);
                }
        return blocks;
    }
}
Об рубке блоков aWaitBreak
Код:
package com.DJMixa;

import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;

import java.util.List;

/**
 * Created by DJMixa on 13.04.2018.
 */
public class AWaitBreak {

    public Player player;
    public Block block;
    public BlockFace face;

    public AWaitBreak(Player player, Block block,BlockFace face)
    {
        this.player = player;
        this.block = block;
        this.face = face;
    }


    public static AWaitBreak get(Player player, List<AWaitBreak> list)
    {
        for(AWaitBreak aWaitBreak : list)
        {
            if(aWaitBreak.player.getName().equals(player.getName()))return aWaitBreak;
        }
        return null;
    }
}
Спасибо!!!
Плагин вот https://drive.google.com/open?id=1Y3jbtHujzS4tmXfKCMhN9ijQvR9FGmiB
 
BlockIterator в помощь!
 
Интеграции с WG нет, ломать приват будет кирка.
 
Назад
Верх