Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Ну хз. Токо что проверил, пробовал разгружать и загружать чанки с мобом, рестартить сервер, но uuid так и не сменился
А у меня 1.7.10. =(использую такой подход для магазина с парящими итемами. храню их уид. четыре месяца. полет нормальный. даже с перекидыванием мира на другой сервер.
топикстартеру: призвать жителя с нужными торгами можно и стандартным апи. по состоянию на 1.10.2-R0.1
Не единственное.Но единственное.
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, который не имеет направления.Не единственное.
В конце концов, можно же просто запихать куда ниб метод, который проверит 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; }
Начну разбор темы с вашего поста)Не тестил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 предложений для торговли иметь?
Только ты забыл самое главноеСоздать класс для торговца с конструктором, заполнять конструктор через цикл при запуске плагина, данные для торговцев брать из конфига. Такова моя система магазина. Очень удобно.
Можно пример подобного конструктора?) Что бы было от чего отталкиваться.Создать класс для торговца с конструктором, заполнять конструктор через цикл при запуске плагина, данные для торговцев брать из конфига. Такова моя система магазина. Очень удобно.
Как же быть тогда?Только ты забыл самое главное
Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT); не работает больше.
Инвентарь тупо не откроется вообще.
У меня магазин обычного типа. Тоесть использую инвентарь сундука.Только ты забыл самое главное
Inventory i = Bukkit.createInventory(null, InventoryType.MERCHANT); не работает больше.
Инвентарь тупо не откроется вообще.
А у вас не найдётся пример подобной реализации магазина?У меня магазин обычного типа. Тоесть использую инвентарь сундука.
Для инвентаря торговца нужно цеплять нмс.
5 мин.А у вас не найдётся пример подобной реализации магазина?
Хотелось бы сперва глянуть, в эти нмс лезть не хочется...
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);
}
}
}
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();
}
}
Merchants:
'1':
Name: 'Test'
Inventory-name: 'Test'
Inventory-size: 54
Окей, спасибо) Допустим я их создам, дам им имена и т.д. Но как это сделать конкретно в виде инвентаря? Как указать какие предметы и т.д. Я далёк от этого дела.5 мин.
Main.class
Merchant.classJava: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); } } }
Config.ymlJava: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; } }
Вот примерно это я имел ввиду.YAML:Merchants: '1': Name: 'Test'
Дальше всё просто:
добавляешь новые параметры к торговцу - добавляешь больше аргументов к конструктору, создаёшь поля в классе Merchant.class и загружаешь эти параметры в методе loadShops(), который расположен в главном классе.
Тогда, по сути, тебе нужен человек, который напишет весь код за тебя.Окей, спасибо) Допустим я их создам, дам им имена и т.д. Но как это сделать конкретно в виде инвентаря? Как указать какие предметы и т.д. Я далёк от этого дела.
Вот такое дело нашёл.Тогда, по сути, тебе нужен человек, который напишет весь код за тебя.
Как ты можешь заметить - инвентарь я уже подключил.
Чтобы сделать предметы, тебе нужно создать такой же класс как Merchants.class, только для предметов.
Там, в поля класса можно указать цену предмета, его тип, имя, лор, дату и т.д. и т.п.
Для загрузки итемов, нужно также создать метод в главном классе, а потом просто вызывать его до создания мерчанта.
Вы решили начать свой первый плагин с этого?"Выставление предметов в инвентарь торговцу и назначение цены на предмет сам догадаешся сделать?"
Я свой первый плагин делаю только, ещё не доходилось с таким дело иметь) По этому без понятия как такое сделать.
Есть ли у вас туториалы, где вы учились такое делать?
Вот такое дело нашёл.
В принципе идея появилась, буду пробовать)
Я нигде не учился "такое делать". Достаточно знания основ Java, для реализации подобного самостоятельно. В Java вы управляете классами и обьектами. Так в чём проблема создать класс, который описывает "трейдера" и класс, который описывает вещи, которые имеются у трейдера?Есть ли у вас туториалы, где вы учились такое делать?