Перенос кастом крафтов из onEnable в отдельный класс

sline

Пользователь
Сообщения
15
Здравствуйте, я имею кастом крафт предмета - он находится в методе onEnable, как я могу перенести его в отдельный класс. Допустим есть предмет изумрудный меч и есть его крафт и я хочу его крафт вынести в класс к примеру CraftEmerald, а так же как сделать количество итемов которые будут использоваться при крафте, например: этот меч крафтится из двух стаков эмеральдов и 1 стака палок. И ещё может кто-то обьяснить как ориентироваться в клетках крафта типо есть этот кусок кода recipe.shape( " E ", " E ", " S " ); , но я не совсем понимаю это абстракцию как разбирать?
 
Решение
то есть я могу регистрировать рецепты как обычные эвенты
Код:
    private void onregisterevents(){
        PluginManager mgf = Bukkit.getPluginManager();
        mgf.registerEvents(new DisableEvents(this),this);
        mgf.registerEvents(new CraftEmerald(this), this);
    }
тип так, если сделать
а то в одном уроке у американца нашёл такую вещь
Java:
CustomItems items = new CustomItems();
items.customRecipe();
items.unshaped(); это в он энейбле
Честно говоря, ничего не понял из того, что ты написал.
Для регистрации рецепта достаточно вызвать Bukkit.addRecipe() или Bukkit.getServer().addRecipe();
Java:
craftRecipe.shape
(
    // вот тебе дефолт сетка верстака 3*3
    // буквами указываешь ингридиент
    // и его положение...
Здравствуйте, я имею кастом крафт предмета - он находится в методе onEnable, как я могу перенести его в отдельный класс. Допустим есть предмет изумрудный меч и есть его крафт и я хочу его крафт вынести в класс к примеру CraftEmerald, а так же как сделать количество итемов которые будут использоваться при крафте, например: этот меч крафтится из двух стаков эмеральдов и 1 стака палок. И ещё может кто-то обьяснить как ориентироваться в клетках крафта типо есть этот кусок кода recipe.shape( " E ", " E ", " S " ); , но я не совсем понимаю это абстракцию как разбирать?
А твой код где?
 
А твой код где?
могу скинуть но он стандарный

Java:
        ItemStack sword = new ItemStack( Material.DIAMOND_SWORD );
        ItemMeta im = sword.getItemMeta();
        im.setDisplayName( "Emerald Sword" );
        sword.setItemMeta( im );
        im.addEnchant(Enchantment.KNOCKBACK, 10, true);
        im.addEnchant(Enchantment.DAMAGE_ALL, 20, true);
        sword.setItemMeta(im);
        ShapedRecipe recipe = new ShapedRecipe( sword );
        recipe.shape( " E ", " E ", " S " );
        recipe.setIngredient( 'E', Material.EMERALD, 3 );
        recipe.setIngredient( 'S', Material.STICK );
        getServer().addRecipe( recipe );
 
могу скинуть но он стандарный

Java:
        ItemStack sword = new ItemStack( Material.DIAMOND_SWORD );
        ItemMeta im = sword.getItemMeta();
        im.setDisplayName( "Emerald Sword" );
        sword.setItemMeta( im );
        im.addEnchant(Enchantment.KNOCKBACK, 10, true);
        im.addEnchant(Enchantment.DAMAGE_ALL, 20, true);
        sword.setItemMeta(im);
        ShapedRecipe recipe = new ShapedRecipe( sword );
        recipe.shape( " E ", " E ", " S " );
        recipe.setIngredient( 'E', Material.EMERALD, 3 );
        recipe.setIngredient( 'S', Material.STICK );
        getServer().addRecipe( recipe );
Ну и в чём твоя проблема перенести этот код куда-то в другой класс?

Java:
public class RecipesManager
{
    public void registerRecipes()
    {
        ItemStack sword = new ItemStack( Material.DIAMOND_SWORD );
        ItemMeta im = sword.getItemMeta();
        im.setDisplayName( "Emerald Sword" );
        sword.setItemMeta( im );
        im.addEnchant(Enchantment.KNOCKBACK, 10, true);
        im.addEnchant(Enchantment.DAMAGE_ALL, 20, true);
        sword.setItemMeta(im);
        ShapedRecipe recipe = new ShapedRecipe(sword);
        recipe.shape("E", "E", "S");
        recipe.setIngredient('E', Material.EMERALD, 3);
        recipe.setIngredient('S', Material.STICK);
        Bukkit.getServer().addRecipe(recipe);
    }
}
Ну и вообще вариантов масса. У тебя в другом классе может быть метод который возвращает List<ShapedRecipe>, а уже в мейн классе ты можешь проходится по этому листу циклом и регистрировать эти крафты.
 
так вопрос то в том, что я не могу понять как его вынести в отдельный класс (разве что через регистрацию эвентов, но если мне надо больше рецептов, допустим 60 как мне их регать тогда) и 2 вопроса остаются под вопросом
 
так вопрос то в том, что я не могу понять как его вынести в отдельный класс (разве что через регистрацию эвентов, но если мне надо больше рецептов, допустим 60 как мне их регать тогда) и 2 вопроса остаются под вопросом
Ты можешь регистрировать рецепты откуда угодно используя Bukkit.getServer(). Касательно букв в ShapedRecipe, насколько я помню, (последний раз кодил кастомные крафты в 2017) они отвечают за положение ингредиентов в сетке. Проще говоря ты устанавливаешь ингридиенту букву, в потом в самом ShapedRecipe расставляешь буквы по сетке. Это и будет 'рецепт' крафта. Схожая система используется в плагинах для построения меню.
 
Последнее редактирование:
то есть я могу регистрировать рецепты как обычные эвенты
Код:
    private void onregisterevents(){
        PluginManager mgf = Bukkit.getPluginManager();
        mgf.registerEvents(new DisableEvents(this),this);
        mgf.registerEvents(new CraftEmerald(this), this);
    }
тип так, если сделать
а то в одном уроке у американца нашёл такую вещь
Java:
CustomItems items = new CustomItems();
items.customRecipe();
items.unshaped(); это в он энейбле
 
то есть я могу регистрировать рецепты как обычные эвенты
Код:
    private void onregisterevents(){
        PluginManager mgf = Bukkit.getPluginManager();
        mgf.registerEvents(new DisableEvents(this),this);
        mgf.registerEvents(new CraftEmerald(this), this);
    }
тип так, если сделать
а то в одном уроке у американца нашёл такую вещь
Java:
CustomItems items = new CustomItems();
items.customRecipe();
items.unshaped(); это в он энейбле
Честно говоря, ничего не понял из того, что ты написал.
Для регистрации рецепта достаточно вызвать Bukkit.addRecipe() или Bukkit.getServer().addRecipe();
Java:
craftRecipe.shape
(
    // вот тебе дефолт сетка верстака 3*3
    // буквами указываешь ингридиент
    // и его положение необходимое для крафта предмета
    "abc",
    "def",
    "ghi"
);
  
// назначаем букве нужный итемстак для крафта
craftRecipe.setIngredient("b", new ItemStack(Material.STICK));
 
Последнее редактирование:
Назад
Сверху Снизу