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

Помогите Спавн предметов по всей карте

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kloper, 1 июл 2019.

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

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Привет, пишу плагин и нужно чтобы каждые 3-4 часа по миру спавнились разные ништяки, даже не представляю как можно это реализовать, буду очень благодарен если поможете! (желательно с объяснением)
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    1) Генерируешь 2 рандомных координаты x и z и делаешь из них локацию(y возьми произвольную, хоть 100).
    2) Получаешь чанк из loc.getChunk() и загружаешь его через chunk.load() (не уверен, требуется ли проверка на то, что чанк уже загружен)
    3) Получаешь наивысшую локацию в этом месте loc.setY(world.getHighestBlockYAt(loc)+1.5)
    4) Спавнишь предмет world.dropItem(loc, item)
     
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Баккит шедулер.
    Где именно?
    Chunk[] chunks = world.getLoadedChunks() - вернёт список чанков, загруженных в память в данный момент.
    Конкретные координаты точек локации генерируешь при помощи Random.
    Координату Y можешь брать по высочайшей точке - world.getHighestBlockYAt(int x, int z)
    Опять же - что именно?
    Item item = world.dropItemNaturally(Location loc, ItemStack item) - дропнуть ItemStack в мире, вернёт Entity. Учти, что весь дроп автоматически удаляется через 10, что ли, минут.
    Конкретнее распиши, что ты хочешь сделать.
     
  4. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Нужно сделать что то на подобие выброса как в сталкере, предметы это артефакты.
     
  5. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Как именно локацию создать из определённых координат?
     
  6. MurlikMurlik

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

    Баллы:
    96
    new Location(world, x, y, z);
     
  7. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я не шарю в сталкере. Выше уже сказано, как примерно действовать. Пробуй. Если что-то конкретное не получается - пиши
     
  8. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Спасибо!
     
  9. Автор темы
    Kloper

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    Ошибка: An internal error occurred while attemping to perform this command

    Код(дада в bukkit плохо шарю, код гавно)


    package release.main;


    import java.util.ArrayList;
    import java.util.List;

    import org.bukkit.Chunk;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;


    public class vubros implements CommandExecutor{


    Location mup = null;


    public vubros(t1mqxikzz plugin) {
    // TODO Auto-generated constructor stub
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] arg3) {

    if(!sender.hasPermission("ReleaseRPG.Vubros"))
    {
    sender.sendMessage("sorry man");
    return true;
    }

    Location location = mup;
    World w = location.getWorld();
    Location loc = new Location(w, -34, 200, 208);
    loc.getChunk();
    Chunk[] chunks = w.getLoadedChunks();
    loc.setY(w.getHighestBlockYAt(loc)+1.5);



    ItemStack drop = new ItemStack(Material.DIAMOND);
    drop.setAmount(1);
    ItemMeta rubinmeta = drop.getItemMeta();
    rubinmeta.setDisplayName("§d§lОблученный Рубин.");
    List<String> lore = new ArrayList<String>();
    lore.add("");
    lore.add("§6Облучённый радиацией §3§lалмаз §6стал сильнейшим оружием.");
    lore.add("§6В руках неопытного игрока этот артефакт способен истребить всё живое.");
    lore.add("§6При держании в руках даёт эффекты - §3§lСкорость §6и §c§lРегенерация.");
    lore.add("§6Уровень Редкости: §dУльтра Редкий.");
    lore.add("");

    rubinmeta.setLore(lore);

    drop.setItemMeta(rubinmeta);

    w.dropItem(loc, drop);

    return true;
    }




    }
     
  10. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Рано тебе лезть в разработку плагинов. Начни с нормального изучения джавы. Научись разбирать ошибки, вставлять сюда код с форматированием и отступами, придерживаться основных конвенций именования и формата разных частей кода.

    Потом приходи и задавай конкретные вопросы по конкретно одной цели. Не проси написать тебе готовый код по абстрактной идее. Готовый код тебе напишут в коммерческом разделе.

    Думаю, что с твоими темпами здесь ты не получишь должной помощи на данном этапе.

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

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

    Баллы:
    76
    Имя в Minecraft:
    f3azzy
    хех, я не просил мне скидывать готовый код, а показать мою ошибку и объяснить что там не так..
     
  12. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    В том же сообщении я уже указал об ошибке
     
  13. alexandrage

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

    Баллы:
    173
    Код:
        public static void dropItem(World world, ItemStack stack, int radius) {
            Random rd = new Random();
            int x = rd.nextInt(radius+1)-radius/2;
            int z = rd.nextInt(radius+1)-radius/2;
            int y = world.getHighestBlockYAt(x, z);
            world.dropItemNaturally(new Location(world, x, y, z), stack);
            Bukkit.broadcastMessage("Drop item " + x + " " + y + " " + z + " " + stack.getType());
        }
    Дорисуешь стартовую локацию, если тебе не от центра координат.
     
    Последнее редактирование: 2 июл 2019

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