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

Помогите Кирка 3х3

Тема в разделе "Разработка плагинов для новичков", создана пользователем DJMixa, 17 апр 2018.

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

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    По названию понятно что я создаю плагин на кирку 3х3.
    Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень. И пересмотрите код который связан с названием кирки, ибо я не могу изменить цвет кирки.
    Спасибо!!
    Главный файл MineAssist
    Код:
    package com.DJMixa;
    
    import com.DJMixa.Providers.RegionProvider;
    import com.DJMixa.Utills.EnchantmentsHelper;
    import org.bukkit.ChatColor;
    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 org.bukkit.util.BlockIterator;
    
    import javax.sql.RowSet;
    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;
    
    
        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 itemInHand = player.getItemInHand();
            if (itemInHand == null) return;
    
            List<Block> blocks = getBlocks(aWaitBreak);
    
            int silkTouch = itemInHand.getEnchantmentLevel(Enchantment.SILK_TOUCH);
            int fortune = itemInHand.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
            int durability = itemInHand.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)))
                    itemInHand.setDurability((short) (itemInHand.getDurability() + 1));
    
                for (ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>) block.getDrops(itemInHand), block, silkTouch, fortune)) {
                    player.getWorld().dropItemNaturally(block.getLocation(), is);
                }
    
                if (itemInHand.getDurability() >= itemInHand.getType().getMaxDurability()) {
                    isBroken = true;
                    player.getInventory().removeItem(itemInHand);
                    break;
                }
    
    
                if (player.getGameMode() == GameMode.SURVIVAL) {
                    player.setExhaustion(player.getExhaustion() + 0.025f);
                    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(itemInHand);
    
        }
    
        @EventHandler
        public void onInteract(PlayerInteractEvent event) {
            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) {
                ItemStack item = player.getItemInHand();
                if (item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null) return;
    
                if ((item.getItemMeta().getDisplayName()).equalsIgnoreCase(ChatColor.GREEN + "Кирка 3x3"));
    
            }
    
            {
                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;
        }
    }
    
    Интеграция WorldGuard
    Код:
    package com.DJMixa.Providers;
    
    import com.sk89q.worldguard.LocalPlayer;
    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
    import com.sk89q.worldguard.protection.ApplicableRegionSet;
    import com.sk89q.worldguard.protection.managers.RegionManager;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.logging.Logger;
    /**
     * Created by DJMixa on 14.04.2018.
     */
    public class RegionProvider {
    
        private Logger logger;
        private WorldGuardPlugin worldGuard;
    
        public RegionProvider(JavaPlugin plugin)
        {
            logger = plugin.getLogger();
    
            Plugin wg = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
    
            if(wg != null && wg instanceof WorldGuardPlugin)
            {
                worldGuard = (WorldGuardPlugin)wg;
                logger.info("WorldGuard was found and integrated");
            }
            else
            {
                logger.info("WorldGuard was not found");
            }
        }
    
        public boolean canChangeRegion(Player player, Location location)
        {
            if(worldGuard != null && worldGuard.isEnabled())
            {
                return worldGuard.canBuild(player,location);
            }
    
            return true;
        }
    
    }
    
    Управление зачарованиями
    Код:
    package com.DJMixa.Utills;
    
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.*********ventory.ItemStack;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    
    /**
     * Created by DJMixa on 14.04.2018.
     */
    public class EnchantmentsHelper {
    
        public static ItemStack getDrops(ItemStack naturally, Block block, int silk, int fortune)
        {
            if(silk == 1)
            {
                naturally.setAmount(1);
    
                if(block.getType() == Material.GLOWING_REDSTONE_ORE)
                {
                    naturally.setType(Material.REDSTONE_ORE);
                }
                else naturally.setType(block.getType());
            }
            else
            {
                int chanceToExtra = 49/(2+fortune);
                Random random = new Random();
    
                if(block.getType() == Material.GLOWSTONE && fortune > 0)
                {
                    naturally.setAmount(4);
                }
                else if(block.getType() == Material.GRAVEL)
                {
                    if(fortune == 0)chanceToExtra = 10;
                    else if(fortune == 1)chanceToExtra = 14;
                    else if(fortune == 2)chanceToExtra = 25;
                    else chanceToExtra = 49;
    
                    if(random.nextInt(100) < chanceToExtra)naturally.setType(Material.FLINT);
                    else naturally.setType(Material.GRAVEL);
    
                    naturally.setAmount(1);
                }
                else
                {
                    int multiplier = 1;
                    for(int i = 1; i<= fortune+1;i++)
                    {
                        if(random.nextInt(100) < chanceToExtra)multiplier=i;
                    }
                    naturally.setAmount(naturally.getAmount() * multiplier);
                }
            }
            return naturally;
        }
        public static List<ItemStack> getDrops(List<ItemStack> naturally, Block block, int silk, int fortune)
        {
            List<ItemStack> list = new ArrayList<>();
            if(silk == 1)
                list.add(getDrops(naturally.get(0),block,silk,fortune));
            else
            {
                for(ItemStack is : naturally)
                {
                    list.add(getDrops(is,block,silk,fortune));
                }
            }
            return list;
        }
    }
    
     
    Последнее редактирование: 17 апр 2018
  2. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    А сейчас он узнает что в "Разработке плагинов для новичков" не очень то и помогают :lol:
     
  3. Автор темы
    DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Чел, помог бы лучше.
     
  4. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Ну про цвета - этот кусок выглядит подозрительным
    if (ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase(ChatColor.GREEN + "Кирка 3x3"));

    Ты очищаешь цвет, а потом сравниваешь к строке с цветом.
     
  5. Автор темы
    DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Мой косяк, перед заливкой на форум не убрал эту строфу, но всё же, даже при этом кирка без цвета с таким названием копает 3х3
     
  6. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Да как раз таки и помогают все, но помогают на адекватные вопросы, а не по типу «допишите код плз», ответы на такие вопросы не являются помощью, а наоборот развитием поколения даунов копипастеров
     
  7. Автор темы
    DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Я же написал вроде что пересмотрите код, чего тут не ясного
    Я адекватно попросил "пересмотрите код.." по возможности допишите
     
  8. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ты че люди будут разгр****ь твое говно где ты сам не знаешь что не так?
     
  9. Автор темы
    DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Я попросил людей, которые могут, и шарят, не хочешь - не рагребай
     
  10. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    А я и не тебе вообще отвечал, а челу который сказал, что здесь не помогают
     

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