Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Кирка 3х3

Тема в разделе "Запросы на разработку плагинов", создана пользователем DJMixa, 16 апр 2018 в 16:33.

  1. Автор темы
    DJMixa

    DJMixa Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    DJMixa
    По названию понятно что я создаю плагин на кирку 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
     
  2. Mr Hosting
  3. JustDevel

    JustDevel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    BlockIterator в помощь!
     
  4. HunterGaming

    HunterGaming Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Не тот раздел
     
  5. Автор темы
    DJMixa

    DJMixa Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    DJMixa
    Поподробнее можно обьяснить чайнику?
     
  6. Almightily

    Almightily Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Almightily
    Интеграции с WG нет, ломать приват будет кирка.
     
  7. JustDevel

    JustDevel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    тык
     
  8. Автор темы
    DJMixa

    DJMixa Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    DJMixa
    Интеграцию есть, просто я не скинул код.
     
  9. Автор темы
    DJMixa

    DJMixa Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    DJMixa
    Чел, я тему подал в ТОТ РАЗДЕЛ!
     
  10. HunterGaming

    HunterGaming Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Ну молодец
     
  11. N0Trix

    N0Trix Активный участник Пользователь

    Баллы:
    76
    Skype:
    null
    Имя в Minecraft:
    N0Trix
    Не-а...
     
  12. Автор темы
    DJMixa

    DJMixa Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    DJMixa
    Я подавал свою тему в "Помощь" её удалили.
    Предложишь куда кидать? Ты же знаешь.
     
  13. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    Slavok2001
    "Разработка плагинов для новичков"
     
  14. N0Trix

    N0Trix Активный участник Пользователь

    Баллы:
    76
    Skype:
    null
    Имя в Minecraft:
    N0Trix
     

Поделиться этой страницей