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

Стартап Простая утилита для создания крафтов с ItemStack'ами

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

?

Полезна ли эта тема для новичков

  1. Да

    2 голосов
    40,0%
  2. Нет

    0 голосов
    0,0%
  3. Незнаю

    1 голосов
    20,0%
  4. Ваще хрень

    2 голосов
    40,0%
Статус темы:
Закрыта.
  1. Автор темы
    Energy warrior

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

    Баллы:
    76
    Всем привет! Есть у меня один большой плагин в разработке. И там есть крафты с ItemStack нашёл видео на польском где чувак рассказывает как сделать такие крафты. Но они получились грамосткие.
    Позже я нашёл видео на английском и нашёл в его методе что-то удобное поддающееся к автоматизации. На его основе я сделал данную утилиту. Она представляет из себя 2 класса и один вспомогательный интерфейс.
    PHP:
    public class CraftUtils implements Listener
    {
      
    public class 
    CraftUtils implements Listener
    {
      
        private static List<
    Craftcrafts = new ArrayList<Craft>();
        private static 
    Main main;
      
        @
    EventHandler
        
    public void onCraft(PrepareItemCraftEvent e) {
            
    CraftingInventory ci e.getInventory();
            
    ItemStack[] matrix ci.getMatrix();
            if(
    matrix.length 9) return;
            
    crafts.forEach(x->{
                
    checkCraft(x.getResult(), cix.convertToIntMap());
            });
          
        }
      
        public 
    CraftUtils(Main main) {
            
    CraftUtils.main main;
            
    Bukkit.getPluginManager().registerEvents(thismain);
        }
      
      
        public static 
    void addCraft(ItemStack resultString[] shapeHashMap<CharacterItemStackingrs){
            
    ShapedRecipe recipe = new ShapedRecipe(new NamespacedKey(mainUUID.randomUUID().toString()), result);
            
    recipe.shape(shape);
            
    //Пробегаемся по карте с знаками и итемами
            
    ingrs.forEach((xx1)->{
                
    recipe.setIngredient(xx1.getType());
            });
            
    Bukkit.addRecipe(recipe);
            
    //Добавляем в лист с рецептами
            
    crafts.add(new Craft(resultshapeingrs));
        }
      
        
    //Проверка крафта
        
    public void checkCraft(ItemStack resultCraftingInventory ciHashMap<IntegerItemStackingridients){
            
    ItemStack[] matrix ci.getMatrix();
            
    //Пробежка по слотам
            
    for(int i =0<9i++){
                if(
    ingridients.containsKey(i)){//Если в карте ингридиентов есть этот слот - то
                    
    if(matrix[i] == null || !matrix[i].equals(ingridients.get(i))){ //Если слот пуст или он не ровняется тому что есть в карте - то ничего не делаем
                        
    return;
                    }
                } else {
                    
    //Иначе проверяем не ровняется ли нулю этот слот
                    
    if(matrix[i] != null) return;
                }
            }
            
    ci.setResult(result);
        }
    }
        }

    PHP:
    package pack;

    import java.util.HashMap;

    import org.bukkit.Material;
    import org.*********ventory.ItemStack;

    public class 
    Craft
    {
        private 
    HashMap<CharacterItemStackingrs = new HashMap<>();
        private 
    ItemStack result;
        private 
    String[] shape;
      
      
        public 
    Craft(ItemStack resultString[] shapeHashMap<CharacterItemStackingrs) {
            
    this.setResult(result);
            
    this.setShape(shape);
            
    this.setIngrs(ingrs);
        }


        public 
    HashMap<IntegerItemStackconvertToIntMap(){
            
    HashMap<IntegerItemStackingridients = new HashMap<IntegerItemStack>();
            
    String sh shapeString();
            for(
    int i 0ingridients.size() < sh.length(); i++){
                if(
    sh.charAt(i) == ' 'ingridients.put(i, new ItemStack(Material.AIR));
                
    ingridients.put(iingrs.get(sh.charAt(i)));
            }
            return 
    ingridients;
        }
      
        public 
    HashMap<CharacterItemStackgetIngrs() {
            return 
    ingrs;
        }

        public 
    void setIngrs(HashMap<CharacterItemStackingrs) {
            
    this.ingrs ingrs;
        }


        public 
    String[] getShape() {
            return 
    shape;
        }


        public 
    void setShape(String[] shape) {
            
    this.shape shape;
        }


        public 
    ItemStack getResult() {
            return 
    result;
        }
      
        private 
    String shapeString(){
            return 
    shape[0]+shape[1]+shape[2];
        }


        public 
    void setResult(ItemStack result) {
            
    this.result result;
        }
    }

    PHP:
    package pack;

    public interface 
    CraftInterface
    {
        public 
    ItemStack getResult();

        public 
    String[] getShape();

        public 
    HashMap<CharacterItemStackgetIngredientMap();

        public default 
    ItemStack(Material mat){
        return new 
    ItemStack(mat);
    }
    }

    Применение:
    PHP:
    public class Main extends JavaPlugin implements CraftInterface
    {
        @
    Override
        
    public void onEnable() {
            new 
    CraftUtils(this);
            
    CraftUtils.addCraft(getResult(), getShape(), getIngredientMap());
        }

        @
    Override
        
    public ItemStack getResult() {
            
    ItemStack i toItemStack(Material.DIRT);
            
    ItemMeta me i.getItemMeta();
            
    me.setDisplayName("DIRT");
            
    i.setItemMeta(me);
            return 
    i;
        }

        @
    Override
        
    public String[] getShape() {
            return new 
    String[]{"   "," D ","   "};
        }

        @
    Override
        
    public HashMap<CharacterItemStackgetIngredientMap() {
            
    HashMap<CharacterItemStack= new HashMap<>();
            
    i.put('D'toItemStack(Material.DIAMOND));
            return 
    i;
        }
    }
    Жду комментарии и конструктивную критику
     
    Последнее редактирование: 13 авг 2018
  2. alexandrage

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

    Баллы:
    173
    Я тебе кинул в другой теме же. Все, тебе только иметь конфиг со стаками.

    Код:
    public static void addRecipe(Plugin plugin, ItemStack stack, ItemStack[] istack) {
            ShapedRecipe rc = new ShapedRecipe(new NamespacedKey(plugin, UUID.randomUUID().toString()), stack);
            rc.shape("012", "345", "678");
            for (int i = 0; i < 9; i++) {
                if (istack[i] != null && istack[i].getType() != Material.AIR)
                    rc.setIngredient(String.valueOf(i).toCharArray()[0], istack[i].getType());
            }
            Bukkit.getServer().addRecipe(rc);
        }
     
  3. alexandrage

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

    Баллы:
    173
  4. Автор темы
    Energy warrior

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

    Баллы:
    76
    Я говорю про код. Мне нужен крафт внутри.
     
  5. Автор темы
    Energy warrior

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

    Баллы:
    76
  6. Автор темы
    Energy warrior

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

    Баллы:
    76
  7. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    псс.. ты интерфейс не выложил
     
  8. Автор темы
    Energy warrior

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

    Баллы:
    76
    Упс.
     
  9. Автор темы
    Energy warrior

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

    Баллы:
    76
    Завтра сделаю небольшое обновление для утилиты.
     
  10. Автор темы
    Energy warrior

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

    Баллы:
    76
  11. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Эм, плагин если не ошибаюсь года 2 на спайтготе валяется по созданию подобного
     
  12. Автор темы
    Energy warrior

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

    Баллы:
    76
    Во-первых, это для новичков и говнокодеров(вроде меня),которые не умеют пользоваться гуглом. Во-вторых, зачем скачивать плагин, когда можно создать пакет и запихнуть туда 3 файла. В-третьих, эта утилита нужна в случае если у тебя дохринилион крафтов и не хочется создавать миллион файлов. Просто написал одну строчку и всё.
     
  13. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Согласен только с первым, новичкам зайдет.
    Во вторых и в третьих - зачем усложнять? И это видимо очень большая строчка!

    Не в тему конечно но близко, касается "плагиноделов"
    Существует допустим плагин на сообщение при входе и таких уже десятки, не стоит тратить время на то что уже есть, неужели кто-то горд за такое название плагина "JoinMessageGovnoCraft.jar"
    "Зачем брать туалетную бумагу, если есть рука", собственно может кто нибудь осознает.
     
  14. Автор темы
    Energy warrior

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

    Баллы:
    76
    Я хотел сказать, что для одного крафта одна строчка.
    Кому как. Лично мне нравится. Когда утилиты находятся в пакете плагина , а не в папке plugins.

    Понимаю ещё какой-нибудь Pex, WG, We, Vault, IDisguise... Но малюсенький плагин в папку?Тем-более есть возможность редачить под себя . А готовый плагин не всегда даёт такую возможность. Поэтому, кому как.
    Ты за готовый плагин, я за пакет.
     
  15. alexandrage

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

    Баллы:
    173
    Вот сделал вам свою утилиту. Полностью кастомная https://github.com/alexandrage/Craft
    Крафт чувствителен к isSimilar. Имя, лоре чарка и прочие теги в итемстаках.
     
  16. Автор темы
    Energy warrior

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

    Баллы:
    76
    Взял и убил желание что-либо делать. А вообще твоя утилита в 10 раз удобнее.
     
  17. Автор темы
    Energy warrior

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

    Баллы:
    76
    Ладно раз нашёлся более достойный конкурент. Я закрою тему.
     
Статус темы:
Закрыта.

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