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

  • Автор темы Автор темы Kloper
  • Дата начала Дата начала

Kloper

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
f3azzy
Привет, пишу плагин и нужно чтобы каждые 3-4 часа по миру спавнились разные ништяки, даже не представляю как можно это реализовать, буду очень благодарен если поможете! (желательно с объяснением)
 
1) Генерируешь 2 рандомных координаты x и z и делаешь из них локацию(y возьми произвольную, хоть 100).
2) Получаешь чанк из loc.getChunk() и загружаешь его через chunk.load() (не уверен, требуется ли проверка на то, что чанк уже загружен)
3) Получаешь наивысшую локацию в этом месте loc.setY(world.getHighestBlockYAt(loc)+1.5)
4) Спавнишь предмет world.dropItem(loc, item)
 
Баккит шедулер.
Где именно?
Chunk[] chunks = world.getLoadedChunks() - вернёт список чанков, загруженных в память в данный момент.
Конкретные координаты точек локации генерируешь при помощи Random.
Координату Y можешь брать по высочайшей точке - world.getHighestBlockYAt(int x, int z)
спавнились разные ништяки
Опять же - что именно?
Item item = world.dropItemNaturally(Location loc, ItemStack item) - дропнуть ItemStack в мире, вернёт Entity. Учти, что весь дроп автоматически удаляется через 10, что ли, минут.
даже не представляю как можно это реализовать
Конкретнее распиши, что ты хочешь сделать.
 
Баккит шедулер.

Где именно?
Chunk[] chunks = world.getLoadedChunks() - вернёт список чанков, загруженных в память в данный момент.
Конкретные координаты точек локации генерируешь при помощи Random.
Координату Y можешь брать по высочайшей точке - world.getHighestBlockYAt(int x, int z)

Опять же - что именно?
Item item = world.dropItemNaturally(Location loc, ItemStack item) - дропнуть ItemStack в мире, вернёт Entity. Учти, что весь дроп автоматически удаляется через 10, что ли, минут.

Конкретнее распиши, что ты хочешь сделать.
Нужно сделать что то на подобие выброса как в сталкере, предметы это артефакты.
 
1) Генерируешь 2 рандомных координаты x и z и делаешь из них локацию(y возьми произвольную, хоть 100).
2) Получаешь чанк из loc.getChunk() и загружаешь его через chunk.load() (не уверен, требуется ли проверка на то, что чанк уже загружен)
3) Получаешь наивысшую локацию в этом месте loc.setY(world.getHighestBlockYAt(loc)+1.5)
4) Спавнишь предмет world.dropItem(loc, item)
Как именно локацию создать из определённых координат?
 
Нужно сделать что то на подобие выброса как в сталкере, предметы это артефакты.
Я не шарю в сталкере. Выше уже сказано, как примерно действовать. Пробуй. Если что-то конкретное не получается - пиши
 
Я не шарю в сталкере. Выше уже сказано, как примерно действовать. Пробуй. Если что-то конкретное не получается - пиши
Ошибка: 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;
}




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

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

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

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

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

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

Ты не указал ошибку, которую получил в своем коде. Стак трейс ошибки находится в логах сервера. Его и нужно скидывать вместе с кодом, причем указывая ключевые строки твоего кода.
хех, я не просил мне скидывать готовый код, а показать мою ошибку и объяснить что там не так..
 
Код:
    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());
    }
Дорисуешь стартовую локацию, если тебе не от центра координат.
 
Последнее редактирование:
Назад
Верх