Помогите [Решено] Как призвать жителя с нужными торговыми принадлежностями?

Статус
Закрыто для дальнейших ответов.
Может возьмешь плагин Shopcepers, там все это есть.
 
Ну хз. Токо что проверил, пробовал разгружать и загружать чанки с мобом, рестартить сервер, но uuid так и не сменился

использую такой подход для магазина с парящими итемами. храню их уид. четыре месяца. полет нормальный. даже с перекидыванием мира на другой сервер.
топикстартеру: призвать жителя с нужными торгами можно и стандартным апи. по состоянию на 1.10.2-R0.1
 
Последнее редактирование:
использую такой подход для магазина с парящими итемами. храню их уид. четыре месяца. полет нормальный. даже с перекидыванием мира на другой сервер.
топикстартеру: призвать жителя с нужными торгами можно и стандартным апи. по состоянию на 1.10.2-R0.1
А у меня 1.7.10. =(
 
Последнее редактирование:
Но единственное.
Не единственное.

В конце концов, можно же просто запихать куда ниб метод, который проверит Location без учёта yaw и pitch.
Java:
public static boolean compareLocation(Location loc1, Location loc2) {
    if (loc1.getWorld() == null || loc2.getWorld() == null) {
        return false;
    }
    if (!loc1.getWorld().equals(loc2.getWorld())) {
        return false;
    }
    if (loc1.getX() != loc2.getX()) {
        return false;
    }
    if (loc1.getY() != loc2.getY()) {
        return false;
    }
    if (loc1.getZ() != loc2.getZ()) {
        return false;
    }
    return true;
}
 
Не единственное.

В конце концов, можно же просто запихать куда ниб метод, который проверит Location без учёта yaw и pitch.
Java:
public static boolean compareLocation(Location loc1, Location loc2) {
    if (loc1.getWorld() == null || loc2.getWorld() == null) {
        return false;
    }
    if (!loc1.getWorld().equals(loc2.getWorld())) {
        return false;
    }
    if (loc1.getX() != loc2.getX()) {
        return false;
    }
    if (loc1.getY() != loc2.getY()) {
        return false;
    }
    if (loc1.getZ() != loc2.getZ()) {
        return false;
    }
    return true;
}
Непис не блок, перейдет клетку и все, ты его потерял. И уже определились юзать кастом имена, или getUniqueId(). Ты опоздал малость. А так то не проблема, создать свой класс Location, который не имеет направления.
 
Последнее редактирование:
Java:
    private double x = 1D;
    private double y = 100D;
    private double z = 1D;
 
    public void entity() {
        Location loc = new Location(Bukkit.getWorld("world"), x, y, z);
        LivingEntity  e = (LivingEntity) Bukkit.getWorld("world").spawnEntity(loc, EntityType.VILLAGER);
    }
    @EventHandler
    public void onInteract(PlayerInteractEntityEvent e) {
        Player p = e.getPlayer();
     
        if (!p.hasPermission("villager.interact")) return;
        if (e.getRightClicked() instanceof LivingEntity) {
            LivingEntity en = (LivingEntity) e.getRightClicked();
            if (en.getType() == EntityType.VILLAGER) {
                if (en.getLocation().getX() == x) {
                    if (en.getLocation().getY() == y) {
                        if (en.getLocation().getZ() == z) {
                            if (en.getLocation().getWorld().getName().equalsIgnoreCase("world")) {
                                e.setCancelled(true);
                                Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT);
                                i.setItem(0, new ItemStack(Material.APPLE));
                                i.setItem(1, new ItemStack(Material.STONE));
                            }
                        }
                    }
                }
            }
        }
     
    }
Не тестил
Начну разбор темы с вашего поста)
И так, на сколько я понял, в данном случае у одного торговца только 1 предмет в ассортименте.
А как их сделать больше на одного торговца? Что бы он мог и по 8-10 предложений для торговли иметь?
 
Начну разбор темы с вашего поста)
И так, на сколько я понял, в данном случае у одного торговца только 1 предмет в ассортименте.
А как их сделать больше на одного торговца? Что бы он мог и по 8-10 предложений для торговли иметь?
Создать класс для торговца с конструктором, заполнять конструктор через цикл при запуске плагина, данные для торговцев брать из конфига. Такова моя система магазина. Очень удобно.
 
Создать класс для торговца с конструктором, заполнять конструктор через цикл при запуске плагина, данные для торговцев брать из конфига. Такова моя система магазина. Очень удобно.
Только ты забыл самое главное
Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT); не работает больше.
Инвентарь тупо не откроется вообще.
 
Создать класс для торговца с конструктором, заполнять конструктор через цикл при запуске плагина, данные для торговцев брать из конфига. Такова моя система магазина. Очень удобно.
Можно пример подобного конструктора?) Что бы было от чего отталкиваться.
Только ты забыл самое главное
Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT); не работает больше.
Инвентарь тупо не откроется вообще.
Как же быть тогда?
 
Только ты забыл самое главное
Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT); не работает больше.
Инвентарь тупо не откроется вообще.
У меня магазин обычного типа. Тоесть использую инвентарь сундука.
Для инвентаря торговца нужно цеплять нмс.
 
У меня магазин обычного типа. Тоесть использую инвентарь сундука.
Для инвентаря торговца нужно цеплять нмс.
А у вас не найдётся пример подобной реализации магазина?
Хотелось бы сперва глянуть, в эти нмс лезть не хочется...
 
А у вас не найдётся пример подобной реализации магазина?
Хотелось бы сперва глянуть, в эти нмс лезть не хочется...
5 мин.
Main.class
Java:
public class Main
{
    @Override
    public void onEnable()
    {
        this.loadShops();
    }

    private void loadShops()
    {
        for (String key : this.getConfig().getConfigurationSection("Merchants").getValues(false).keySet()
        {
            String name = this.getConfig().getString("Merchants." + key + ".Name");
            String inventory_name = this.getConfig().getString("Merchants." + key + ".Inventory-name");
            int inventory_size = this.getConfig().getString("Merchants." + key + ".Inventory-size");

            new Merchant(name, inventory_name, inventory_size);
        }
    }
}
Merchant.class
Java:
public class Merchant
{
    public static ArrayList<Merchant> merchants = new ArrayList<Merchant> ();

    private String name;
    private Inventory inventory;

    public Merchant(String name, String inventory_name, int inventory_size)
    {
        this.name = name;
        this.inventory = Bukkit.createInventory(null, inventory_size, inventory_name);

        merchants.add(this);
    }

    public String getName()
    {
        return this.name;
    }

    public Inventory getInventory()
    {
        this.inventory();
    }
}
Config.yml
YAML:
Merchants:
  '1':
    Name: 'Test'
    Inventory-name: 'Test'
    Inventory-size: 54
Вот примерно это я имел ввиду.
Дальше всё просто:
добавляешь новые параметры к торговцу - добавляешь больше аргументов к конструктору, создаёшь поля в классе Merchant.class и загружаешь эти параметры в методе loadShops(), который расположен в главном классе.

Выставление предметов в инвентарь торговцу и назначение цены на предмет сам догадаешся сделать?
 
Последнее редактирование:
5 мин.
Main.class
Java:
public class Main
{
    @Override
    public void onEnable()
    {
        this.loadShops();
    }

    private void loadShops()
    {
        for (String key : this.getConfig().getConfigurationSection("Merchants").getValues(false).keySet()
        {
            String name = this.getConfig().getString("Merchants." + key + ".Name");

            new Merchant(name);
        }
    }
}
Merchant.class
Java:
public class Merchant
{
    public static ArrayList<Merchant> merchants = new ArrayList<Merchant> ();

    private String name;

    public Merchant(String name)
    {
        this.name = name;

        merchants.add(this);
    }

    public String getName()
    {
        return this.name;
    }
}
Config.yml
YAML:
Merchants:
  '1':
    Name: 'Test'
Вот примерно это я имел ввиду.
Дальше всё просто:
добавляешь новые параметры к торговцу - добавляешь больше аргументов к конструктору, создаёшь поля в классе Merchant.class и загружаешь эти параметры в методе loadShops(), который расположен в главном классе.
Окей, спасибо) Допустим я их создам, дам им имена и т.д. Но как это сделать конкретно в виде инвентаря? Как указать какие предметы и т.д. Я далёк от этого дела.
Вижу вы дополнили сообщение, сейчас перечитаю.
 
Окей, спасибо) Допустим я их создам, дам им имена и т.д. Но как это сделать конкретно в виде инвентаря? Как указать какие предметы и т.д. Я далёк от этого дела.
Тогда, по сути, тебе нужен человек, который напишет весь код за тебя.
Как ты можешь заметить - инвентарь я уже подключил.

Чтобы сделать предметы, тебе нужно создать такой же класс как Merchants.class, только для предметов.
Там, в поля класса можно указать цену предмета, его тип, имя, лор, дату и т.д. и т.п.

Для загрузки итемов, нужно также создать метод в главном классе, а потом просто вызывать его до создания мерчанта.
 
"Выставление предметов в инвентарь торговцу и назначение цены на предмет сам догадаешся сделать?"
Я свой первый плагин делаю только, ещё не доходилось с таким дело иметь) По этому без понятия как такое сделать.
Есть ли у вас туториалы, где вы учились такое делать?
Тогда, по сути, тебе нужен человек, который напишет весь код за тебя.
Как ты можешь заметить - инвентарь я уже подключил.

Чтобы сделать предметы, тебе нужно создать такой же класс как Merchants.class, только для предметов.
Там, в поля класса можно указать цену предмета, его тип, имя, лор, дату и т.д. и т.п.

Для загрузки итемов, нужно также создать метод в главном классе, а потом просто вызывать его до создания мерчанта.
Вот такое дело нашёл.

В принципе идея появилась, буду пробовать)
 
"Выставление предметов в инвентарь торговцу и назначение цены на предмет сам догадаешся сделать?"
Я свой первый плагин делаю только, ещё не доходилось с таким дело иметь) По этому без понятия как такое сделать.
Есть ли у вас туториалы, где вы учились такое делать?

Вот такое дело нашёл.

В принципе идея появилась, буду пробовать)
Вы решили начать свой первый плагин с этого?
Это почти тоже самое, что и абсолютно не зная математики пробовать решать квадратное уравнение. Быть может, что-то и слепите, но оно будет просто ужасно во всём.
Могу дать совет: взяться за написание более простого плагина. Не нужно начинать с самого сложного. Беритесь за простое. Набьёте руки - возьмётесь за сложное.

Если это - ваш первый плагин, то, скорее всего, понимание того, что вы пишете, у вас отсутствует. Следовательно, вы сейчас, навряд ли сможете обьяснить мне что я написал и без моих обьяснений не смогли бы воспользоваться этим.

Ну и касательно вашего вопроса.
Есть ли у вас туториалы, где вы учились такое делать?
Я нигде не учился "такое делать". Достаточно знания основ Java, для реализации подобного самостоятельно. В Java вы управляете классами и обьектами. Так в чём проблема создать класс, который описывает "трейдера" и класс, который описывает вещи, которые имеются у трейдера?
 
Последнее редактирование:
Магазин сделал без посторонних библиотек.
Стоимость предмета указывает в конфиге. Цена может быть как и 1 так и 2 разных предмета, там указывается количество.
Поддерживает чары и зелья (не идеально конечно, т.е. сложные или много указать не получится, но мне и этого хватит). Надо будет - сделаю и полную поддержку.
Магазин в моём случае открывается по нажатию на рамку портала в край ПКМ.
Всем спасибо. Тема закрыта.
KAgGaQVFgppgwA.png
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх