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

  • Автор темы Автор темы 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;
    }
}
 
Последнее редактирование:
А сейчас он узнает что в "Разработке плагинов для новичков" не очень то и помогают 😆
 
Ну про цвета - этот кусок выглядит подозрительным
if (ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase(ChatColor.GREEN + "Кирка 3x3"));

Ты очищаешь цвет, а потом сравниваешь к строке с цветом.
 
Ну про цвета - этот кусок выглядит подозрительным
if (ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase(ChatColor.GREEN + "Кирка 3x3"));

Ты очищаешь цвет, а потом сравниваешь к строке с цветом.
Мой косяк, перед заливкой на форум не убрал эту строфу, но всё же, даже при этом кирка без цвета с таким названием копает 3х3
 
А сейчас он узнает что в "Разработке плагинов для новичков" не очень то и помогают 😆
Да как раз таки и помогают все, но помогают на адекватные вопросы, а не по типу «допишите код плз», ответы на такие вопросы не являются помощью, а наоборот развитием поколения даунов копипастеров
 
Да как раз таки и помогают все, но помогают на адекватные вопросы, а не по типу «допишите код плз», ответы на такие вопросы не являются помощью, а наоборот развитием поколения даунов копипастеров
Я же написал вроде что пересмотрите код, чего тут не ясного
Я адекватно попросил "пересмотрите код.." по возможности допишите
 
Я же написал вроде что пересмотрите код, чего тут не ясного
Я адекватно попросил "пересмотрите код.." по возможности допишите
Ты че люди будут разгр****ь твое говно где ты сам не знаешь что не так?
 
Назад
Верх