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

Помогите Математика, Short, Durability, и прочее.

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

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

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Про это я знаю, но от 0 мне не подходит, мне нужно четко в диапазонею
     
  2. Хостинг MineCraft
    <
  3. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    rand.nextInt(max) + min
     
    Последнее редактирование: 6 апр 2015
  4. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    int number = r.nextInt(ширина диапазона) + сколько не хватает до нижней границы.
    Пример:
    Нужно от 5 до 10:
    int number = r.nextInt(5) + 5;
     
  5. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    А как можно это красиво впаять в мой метод?))
     
  6. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Написать еще один метод? Или не вариант?
     
  7. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Фиг его знает.. Наверно попробую.[DOUBLEPOST=1428337294,1428330513][/DOUBLEPOST]Пасаны, подхелпуйте, опять та же хрень, у всех предметов 100% прочность.
    Код:
    package ua.roboman.plugin;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class Items
    {
        private ArrayList<ItemStack> randomItems = new ArrayList<ItemStack>();
        private String chatPrefix = ChatColor.translateAlternateColorCodes('&', "&c&l[&2&lCase&a&ls&c&l] &7");
    
        public Items()
        {
    
        }
    
        private String generateRandomDurabilityM()
        {
            int Min = 1;
            int Max = 100;
            int fortune = Min + (int)(Math.random() * ((Max - Min) + 1));
            if (fortune <= 30) return ChatColor.translateAlternateColorCodes('&', "&4Закаленный в боях");
            else if (fortune <= 55) return ChatColor.translateAlternateColorCodes('&', "&cПоношенный");
            else if (fortune <= 75) return ChatColor.translateAlternateColorCodes('&', "&5&lПосле полевых испытаний");
            else if (fortune <= 90) return ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенный");
            else if (fortune <= 100)return ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с завода");
            else return ChatColor.translateAlternateColorCodes('&', "&e&lЭкстраординарный");
        }
    
        private List<String> getRandomDurabilityToLore()
        {
            ArrayList<String> list = new ArrayList<String>();
            list.add(generateRandomDurabilityM());
            return list;
        }
    
        private Short getDurability(short max, String durability)
        {
            if (durability.equals(ChatColor.translateAlternateColorCodes('&', "&4Закаленный в боях")))
            {
                return (short) (max / 2.);
            }
            else if (durability.equals(ChatColor.translateAlternateColorCodes('&', "&cПоношенный")))
            {
                return (short) (max * 3. / 4);
            }
            else if (durability.equals(ChatColor.translateAlternateColorCodes('&', "&5После полевых испытаний")))
            {
                return (short) (max * 5. / 6);
            }
            else if (durability.equals(ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенный")))
            {
                return (short) (max * 9. / 10);
            }
            else if (durability.equals(ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с завода")))
            {
                return max;
            }
            return -1;
        }
    
        public void playerOpenCase(Player player)
        {
            int Min = 1;
            int Max = 5;
            int fortune = Min + (int) (Math.random() * ((Max - Min) + 1));
            String name;
            ItemStack item;
            if (fortune == 1)
            {
                name = ChatColor.translateAlternateColorCodes('&', "&9Золотой меч");
                item = new ItemStack(Material.GOLD_SWORD);
            }
            else if (fortune == 2)
            {
                name = ChatColor.translateAlternateColorCodes('&', "&1Деревянный меч");
                item = new ItemStack(Material.WOOD_SWORD);
            }
            else if (fortune == 3)
            {
                name = ChatColor.translateAlternateColorCodes('&', "&dКаменный меч");
                item = new ItemStack(Material.STONE_SWORD);
            }
            else if (fortune == 4)
            {
                name = ChatColor.translateAlternateColorCodes('&', "&5Железный меч");
                item = new ItemStack(Material.IRON_SWORD);
            }
            else if (fortune == 5)
            {
                name = ChatColor.translateAlternateColorCodes('&', "&4Алмазный меч");
                item = new ItemStack(Material.DIAMOND_SWORD);
            }
            else return;
            ItemMeta meta = item.getItemMeta();
            if (new Random().nextBoolean()) meta.addEnchant(Enchantment.DAMAGE_ALL, new Random().nextInt(29)+1, true);
            if (new Random().nextBoolean()) meta.addEnchant(Enchantment.KNOCKBACK, new Random().nextInt(19)+1, true);
            if (new Random().nextBoolean()) meta.addEnchant(Enchantment.FIRE_ASPECT, new Random().nextInt(19)+1, true);
            if (new Random().nextBoolean()) meta.addEnchant(Enchantment.LOOT_BONUS_MOBS, new Random().nextInt(19)+1, true);
            if (new Random().nextBoolean()) meta.addEnchant(Enchantment.DURABILITY, new Random().nextInt(29)+1, true);
            meta.setDisplayName(name);
            List<String> lore = getRandomDurabilityToLore();
            meta.setLore(lore);
            item.setDurability(getDurability(item.getType().getMaxDurability(), ChatColor.translateAlternateColorCodes('&', name)));
            item.setItemMeta(meta);
            player.getInventory().setItemInHand(item);
            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', chatPrefix + "Игрок &9" + player.getName() + "&7 открыл кейс и получил: " + name.toLowerCase() + " " + meta.getLore().get(0).toLowerCase()));
        }
    }
    
    [DOUBLEPOST=1428379456][/DOUBLEPOST]UP
     
  8. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Почему не switch?
     
  9. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Блин, ну какая разница?
     
  10. danbka333

    danbka333 Старожил Пользователь

    Баллы:
    103
    switch более эффективен в данном примере
     
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Красивее в коде да, по скорости так же.
     
  12. Tiberiumk

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

    Баллы:
    76
    Skype:
    tiberium_11111
    Имя в Minecraft:
    Tiberium
    Извините,оффтоп: Mr_RoboMan,Добавь в скайп, tiberium_1111, вопросик есть)
     
  13. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Шабы ты мне рекламил свой сервер 1.5.2? Ну ок...
    И да UP[DOUBLEPOST=1428501550,1428425163][/DOUBLEPOST]И можете подсказать... Почему даже первая проверка не работает?
    Код:
        @EventHandler
        public void checkOpenCase(PlayerInteractEvent event)
        {
            if (event.getClickedBlock().getType().equals(Material.CHEST))
            {
                Bukkit.broadcastMessage("ПервыйТест");
                if (event.getPlayer().getInventory().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', "&aКейс")))
                {
                    Bukkit.broadcastMessage("ВторойТест");
                    if (((Chest) event.getClickedBlock()).getInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', "&cКлюч")))
                    {
                        Bukkit.broadcastMessage("ТретийТест");
                        event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                        event.getClickedBlock().setTypeId(0);
                        new Items().playerOpenCase(event.getPlayer());
                    }
                    else event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', chatPrefix + "Чтобы открыть кейс нужно держать ключ в руке."));
                }
            }
        }
    
    [DOUBLEPOST=1428515999][/DOUBLEPOST]UP
     
  14. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    У меня уже ночь и мозги отключены, но материал.чест надо проверять в гетБлокСтейт
     
  15. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    getBlockChest() ? Это где такой метод есть?..[DOUBLEPOST=1428592599,1428591834][/DOUBLEPOST]Даже так ничего не пишет в чат...
    Код:
        @EventHandler
        public void checkOpenCase(PlayerInteractEvent event)
        {
            Bukkit.broadcastMessage("Просто тест");
            if (event.getClickedBlock().getType().getId() == 54)
            {
                Bukkit.broadcastMessage("ПервыйТест");
                if (event.getPlayer().getInventory().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', "&aКейс")))
                {
                    Bukkit.broadcastMessage("ВторойТест");
                    if (((Chest) event.getClickedBlock()).getBlockInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', "&cКлюч")))
                    {
                        Bukkit.broadcastMessage("ТретийТест");
                        event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                        event.getClickedBlock().setTypeId(0);
                        new Items().playerOpenCase(event.getPlayer());
                    }
                    else event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', chatPrefix + "Чтобы открыть кейс нужно держать ключ в руке."));
                }
            }
        }
    
    [DOUBLEPOST=1428600367][/DOUBLEPOST]UPчхи, что делать? Мой плагин болеет!!![DOUBLEPOST=1428600519][/DOUBLEPOST]На любой блок ПКМ/ЛКМ - никакой реакции(((
     
  16. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Так может ты не зарегистрировал листенер?
     
  17. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ага :D Теперь в чат выводиться все кроме третьего теста, как правильно проверить сундук?
     
  18. DeQaPy

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

    Баллы:
    31
    Имя в Minecraft:
    DeQaPy
    Выучите Java'у для начала, а потом уже беритесь за плагины.
     
  19. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    ((Chest)event.getClickedBlock().getState())
     
  20. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    За совет спасибо, тем не менее я предпочитаю это делать параллельно.[DOUBLEPOST=1428657920,1428646677][/DOUBLEPOST]
    Спасибо, зароботало.[DOUBLEPOST=1428658086][/DOUBLEPOST]Кароче ребята, ну опять таже проблема, не правильные прочности...
    У закаленного я боях самая большая прочность, у прямо с завода самая маленьькая....
    Что делать, как сделать чтоб было правильно?
    Код:
    package ua.roboman.plugin;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.block.Chest;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.ShapedRecipe;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.ArrayList;
    import java.util.logging.Logger;
    
    public class RandomCase extends JavaPlugin implements Listener
    {
        protected String loggerPrefix = "[RandomCase] ";
        protected String chatPrefix = ChatColor.translateAlternateColorCodes('&', "&c&l[&2&lCase&a&ls&c&l] &7");
        protected Logger logger = Logger.getLogger("RandomCase");
    
        @Override
        public void onEnable()
        {
            getServer().getPluginManager().registerEvents(this, this);
            logger.info(loggerPrefix + "Плагин успешно включен.");
            ArrayList<String> loreCase = new ArrayList<String>();
            loreCase.add(ChatColor.translateAlternateColorCodes('&', "&a&lОружейный кейс"));
    
            ItemStack itemCase = new ItemStack(Material.CHEST);
            ItemMeta caseMeta = itemCase.getItemMeta();
    
            caseMeta.addEnchant(Enchantment.DURABILITY, 1, true);
            caseMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&aКейс"));
            caseMeta.setLore(loreCase);
    
            itemCase.setItemMeta(caseMeta);
            ShapedRecipe recipeCase = new ShapedRecipe(itemCase);
            recipeCase.shape("WWW", "WEW", "WWW");
            recipeCase.setIngredient('W', Material.WOOD);
            recipeCase.setIngredient('E', Material.ENDER_PEARL);
            getServer().addRecipe(recipeCase);
    
            //==============================================================================================================
    
            ArrayList<String> loreKey = new ArrayList<String>();
            loreKey.add(ChatColor.translateAlternateColorCodes('&', "&c&lКлюч к кейсу"));
    
            ItemStack itemKey = new ItemStack(Material.TRIPWIRE_HOOK);
            ItemMeta keyMeta = itemKey.getItemMeta();
    
            keyMeta.addEnchant(Enchantment.DURABILITY, 1, true);
            keyMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&cКлюч"));
            keyMeta.setLore(loreKey);
    
            itemKey.setItemMeta(keyMeta);
            ShapedRecipe recipeKey = new ShapedRecipe(itemKey);
            recipeKey.shape("SIS", "SDS", "SSS");
            recipeKey.setIngredient('S', Material.STICK);
            recipeKey.setIngredient('I', Material.IRON_BLOCK);
            recipeKey.setIngredient('D', Material.DIAMOND);
            getServer().addRecipe(recipeKey);
        }
    
        @EventHandler
        public void checkOpenCase(PlayerInteractEvent event)
        {
            Bukkit.broadcastMessage("Просто тест");
            if (event.getClickedBlock().getType().getId() == 54)
            {
                Bukkit.broadcastMessage("ПервыйТест");
                if (event.getPlayer().getInventory().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', "&cКлюч")))
                {
                    Bukkit.broadcastMessage("ВторойТест");
                    if (((Chest)event.getClickedBlock().getState()).getInventory().getName().equals(ChatColor.translateAlternateColorCodes('&', "&aКейс")))
                    {
                        Bukkit.broadcastMessage("ТретийТест");
                        event.getPlayer().getInventory().setItemInHand(null);
                        event.getClickedBlock().breakNaturally();
                        new Items().playerOpenCase(event.getPlayer());
                    }
                    else event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', chatPrefix + "Чтобы открыть кейс нужно держать ключ в руке."));
    
                }
            }
        }
    }
    
    Код:
    package ua.roboman.plugin;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    import java.util.ArrayList;
    import java.util.Random;
    
    public class Items
    {
        private String chatPrefix = ChatColor.translateAlternateColorCodes('&', "&c&l[&2&lCase&a&ls&c&l] &7");
    
        public Items()
        {
    
        }
    
        public ItemStack setLoreAndDurability(ItemStack item, int goCase)
        {
            ItemMeta meta = item.getItemMeta();
            short durability = item.getType().getMaxDurability();
            int fortune = new Random().nextInt(99)+1;
            ArrayList<String> bs = new ArrayList<String>(), ww = new ArrayList<String>(), ft = new ArrayList<String>(), mw = new ArrayList<String>(), fn = new ArrayList<String>();
    
            switch (goCase) {
                case 1:
                    bs.add(ChatColor.translateAlternateColorCodes('&', "&4Закаленный в боях"));
                    ww.add(ChatColor.translateAlternateColorCodes('&', "&cПоношенный"));
                    ft.add(ChatColor.translateAlternateColorCodes('&', "&5После полевых испытаний"));
                    mw.add(ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенный"));
                    fn.add(ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с завода"));
                    break;
                case 2:
                    bs.add(ChatColor.translateAlternateColorCodes('&', "&4Закаленная в огороде"));
                    ww.add(ChatColor.translateAlternateColorCodes('&', "&cПоношенная"));
                    ft.add(ChatColor.translateAlternateColorCodes('&', "&5После полевых испытаний"));
                    mw.add(ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенная"));
                    fn.add(ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с кузни"));
                    break;
                case 3:
                    bs.add(ChatColor.translateAlternateColorCodes('&', "&4Закаленный в древесине"));
                    ww.add(ChatColor.translateAlternateColorCodes('&', "&cПоношенный"));
                    ft.add(ChatColor.translateAlternateColorCodes('&', "&5После полевых испытаний"));
                    mw.add(ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенный"));
                    fn.add(ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с завода"));
                    break;
                case 4:
                    bs.add(ChatColor.translateAlternateColorCodes('&', "&4Закаленные в боях"));
                    ww.add(ChatColor.translateAlternateColorCodes('&', "&cПоношенные"));
                    ft.add(ChatColor.translateAlternateColorCodes('&', "&5После полевых испытаний"));
                    mw.add(ChatColor.translateAlternateColorCodes('&', "&a&lНемного поношенные"));
                    fn.add(ChatColor.translateAlternateColorCodes('&', "&2&lПрямо с завода"));
                    break;
            }
    
            if (fortune <= 30) {
                meta.setLore(bs);
                item.setDurability((short) (durability / 2.));
            } else if (fortune <= 55) {
                meta.setLore(ww);
                item.setDurability((short) (durability * 3. / 4));
            } else if (fortune <= 75) {
                meta.setLore(ft);
                item.setDurability((short) (durability * 5. / 6));
            } else if (fortune <= 90) {
                meta.setLore(mw);
                item.setDurability((short) (durability * 9. / 10));
            } else {
                meta.setLore(fn);
                item.setDurability(durability);
            }
            item.setItemMeta(meta);
            return item;
        }
    
        public ItemStack getRandomItem()
        {
            Random random = new Random();
            Integer fortuneOne = random.nextInt(2)+1;
            switch (fortuneOne) {
                case 1: {
                    ItemStack firstItem = new ItemStack(Material.GOLD_SWORD);
                    ItemMeta firstMeta = firstItem.getItemMeta();
                    if (random.nextBoolean()) firstMeta.addEnchant(Enchantment.DAMAGE_ALL, random.nextInt(4)+1, true);
                    if (random.nextBoolean()) firstMeta.addEnchant(Enchantment.KNOCKBACK, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) firstMeta.addEnchant(Enchantment.FIRE_ASPECT, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) firstMeta.addEnchant(Enchantment.LOOT_BONUS_MOBS, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) firstMeta.addEnchant(Enchantment.DURABILITY, random.nextInt(2)+1, true);
                    firstMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&9Золотой меч"));
                    firstItem.setItemMeta(firstMeta);
                    firstItem = setLoreAndDurability(firstItem, 1);
                    return firstItem;
                } case 2: {
                    ItemStack secondItem = new ItemStack(Material.WOOD_SWORD);
                    ItemMeta secondMeta = secondItem.getItemMeta();
                    if (random.nextBoolean()) secondMeta.addEnchant(Enchantment.DAMAGE_ALL, random.nextInt(4) + 1, true);
                    if (random.nextBoolean()) secondMeta.addEnchant(Enchantment.KNOCKBACK, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) secondMeta.addEnchant(Enchantment.FIRE_ASPECT, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) secondMeta.addEnchant(Enchantment.LOOT_BONUS_MOBS, random.nextInt(1) + 1, true);
                    if (random.nextBoolean()) secondMeta.addEnchant(Enchantment.DURABILITY, random.nextInt(2) + 1, true);
                    secondMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&1Деревянный меч"));
                    secondItem.setItemMeta(secondMeta);
                    secondItem = setLoreAndDurability(secondItem, 1);
                    return secondItem;
                }
            }
            return null;
        }
    
        public void playerOpenCase(Player player)
        {
            ItemStack item = getRandomItem();
            player.getInventory().setItemInHand(item);
            Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', chatPrefix + "Игрок &9" + player.getName() + "&7 открыл кейс и получил: " + item.getItemMeta().getDisplayName().toLowerCase() + " " + item.getItemMeta().getLore().get(0).toLowerCase()));
        }
    }
    
    [DOUBLEPOST=1428728157][/DOUBLEPOST]UP[DOUBLEPOST=1428748042][/DOUBLEPOST]UP[DOUBLEPOST=1428853018][/DOUBLEPOST]UP[DOUBLEPOST=1428853052][/DOUBLEPOST]UP[DOUBLEPOST=1428911200][/DOUBLEPOST]UP
     
  21. DeQaPy

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

    Баллы:
    31
    Имя в Minecraft:
    DeQaPy
    Не надейтесь что кто-то даст Вам готовый рабочий код. Мой Вам совет - перекопайте весь код от начала до конца, если при этом Вы не найдёте ошибок, то попробуйте полностью переписать плагин с нуля.
     
    Последнее редактирование: 13 апр 2015

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