Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Идея Свой /spawn в каждом мире

Тема в разделе "Запросы на разработку плагинов", создана пользователем donatell, 13 июн 2014.

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

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

    Баллы:
    63
    Skype:
    Donateller1
    Имя в Minecraft:
    monkeyman_91
    Если говорить проще то у меня сервер с минииграми. Все появляются в мире hub на маленьком спавне. там стоят порталы в разные миры типа сурвивал мир, креатив мир и т.д. так вот мне надо чтобы при вводе комманды спавн игрок попадал на спавн мира в котором он находится))
    Сказали сюда обратиться)) Как бы так сделать чтобы плагин отслеживал в каком мире ты находишься и при вводе команды /spawn кидал именно в спавн мира в котором ты есть. Но еще как бы косячек небольшой. Чтобы к примеру если в аду или в крае находишься то тпхал на спавн выживания...
    P.S. Это вроде как запрос на разработку плагина))) и на много миров у меня стоит multiverse-core
     
  2. Хостинг MineCraft
    <
  3. Dimonskiu

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

    Баллы:
    103
    Не проще ли будет использовать /warp название_мира вместо /spawn?
     
  4. konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Использовал бы Multi-World, там есть функция спауна для каждого мира. А за плагин могу я взяться.
     
  5. Автор темы
    donatell

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

    Баллы:
    63
    Skype:
    Donateller1
    Имя в Minecraft:
    monkeyman_91
    Проще, не проще, а мне пока нужно так. И многим кого я знаю))[DOUBLEPOST=1402648989,1402648944][/DOUBLEPOST]
    Если можешь то возьмись)) И подумай по поводу EssentialsSpawn. Надо будет его сносить?
     
  6. Grozen

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

    Баллы:
    76
    Имя в Minecraft:
    BeatPeet
    Ну что там с плагином? Мне бы тоже его подогнали...Извиняюсь за дату.
     
  7. FalenyGui

    FalenyGui Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    Kott9ra
    Сделай для кождой мини игры свой сервер и соедени через BungeeCord
     
  8. LomNar

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

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Эмм. Вот сделал: https://yadi.sk/d/Je8z-5l3iA9Rh
    Пермы: multispawn.spawn | multispawn.setspawn
    И да, взломки нет:

    Код:
    package ru.lomnar.multispawn;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.InvalidConfigurationException;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MultiSpawn extends JavaPlugin {
       
        private FileConfiguration config;
        private File file;
        private Map<String, Location> spawns = new HashMap<String, Location>();
        private String error = ChatColor.translateAlternateColorCodes('&', "&4У вас нет прав!");
       
        public void onEnable() {
            loadConfig();
            getCommand("spawn").setExecutor(this);
            getCommand("setspawn").setExecutor(this);
            System.out.println("[MultiSpawn] Plugin was enabled.");
        }
       
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (!(sender instanceof Player)) {
                System.out.println("This commands for players");
                return false;
            }
            Player p = (Player) sender;
            switch (command.getName()) {
            case "spawn":
                if (p.hasPermission("multispawn.spawn")) {
                    if (spawns.containsKey(p.getWorld().getName())) {
                        p.teleport(spawns.get(p.getWorld().getName()));
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eВы были телепортированны на спавн!"));
                    } else p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cВ этом мире не указанна точка спавна!"));
                } else p.sendMessage(error);
                break;
            case "setspawn":
                if (p.hasPermission("multispawn.setspawn")) {
                    setSpawn(p.getLocation());
                    p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2Вы установили точку спавна в мире: &e" + p.getWorld().getName()));
                } else p.sendMessage(error);
                break;
    
            default:
                break;
            }
            return false;
        }
       
        public void loadConfig() {
            config = new YamlConfiguration();
            file = new File(getDataFolder(), "spawns.yml");
            if (!file.exists()) {
                config.set("spawns." + getServer().getWorlds().get(0).getName(), getServer().getWorlds().get(0).getSpawnLocation().getBlockX() + " " +  getServer().getWorlds().get(0).getSpawnLocation().getBlockY() + " " +  getServer().getWorlds().get(0).getSpawnLocation().getBlockZ() + " " +  getServer().getWorlds().get(0).getSpawnLocation().getYaw() + " " +  getServer().getWorlds().get(0).getSpawnLocation().getPitch());
                try {
                    config.save(file);
                } catch (IOException  e) {}
            } else {
                try {
                    config.load(file);
                } catch (IOException | InvalidConfigurationException e) {}
                Location spawnLoc = null;
                for (String world : config.getConfigurationSection("spawns").getKeys(false)) {
                    String value = config.getString("spawns." + world);
                    int x = Integer.parseInt(value.split(" ")[0]);
                    int y = Integer.parseInt(value.split(" ")[1]);
                    int z = Integer.parseInt(value.split(" ")[2]);
                    float yaw = Float.parseFloat(value.split(" ")[3]);
                    float pitch = Float.parseFloat(value.split(" ")[4]);
                    spawnLoc = new Location(getServer().getWorld(world), x, y, z, yaw, pitch);
                    spawns.put(world, spawnLoc);
                }
            }
        }
       
        public void setSpawn(Location spawnLoc) {
            config.set("spawns." + spawnLoc.getWorld().getName(), spawnLoc.getBlockX() + " " +  spawnLoc.getBlockY() + " " +  spawnLoc.getBlockZ() + " " +  spawnLoc.getYaw() + " " +  spawnLoc.getPitch());
            try {
                config.save(file);
            } catch (IOException e) {}
            spawns.put(spawnLoc.getWorld().getName(), spawnLoc);
        }
    
    }
    
     
  9. jwplaster

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

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    AdminCMD имеет такую возможность... почему все ессентаилс используют, а не его?
     
  10. Atobar

    Atobar Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Atobar
    Потому, что essentials включает в себя много функционала. Не требуется скачивать 5-10 плагинов и каждый настраивать. А так скачал один плагин, настроил его и забыл.
    Тем более он имеет хоть какую-то совместимость с другими плагинами, например с тремя разными permission плагинами и вроде двумя плагинами для экономики.
     
  11. jwplaster

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

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    А ты прочитай возможности AdminCMD.
     
  12. Atobar

    Atobar Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Atobar
    Я в курсе про AdminCMD и про его возможности. И мне кажется, что Essentials будет побогаче на команды и функционал, ещё и популярнее, чем AdminCMD.
     
  13. jwplaster

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

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    Эм. В ессентаилс меньше функций.
     
  14. Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Смущает то, что последний дев билд был 24.02.2014 :\
     
  15. jwplaster

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

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    Ага, они прекратили разработку, выложив исходники. Но последняя версия работает даже на 1.8.7
     
  16. Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    На вид неплохо, конечно отпугивает такая заброшенность. Но ессеншалс уже прижился почти везде..)
     
  17. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Лучше не используй instanceof, а делай лучше так:
    Код:
    if(!sender.equals(EntityType.PLAYER)) {
    // дальше что хочешь сделать
    }
     
  18. LomNar

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

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Понятно. А в чем разница? Где то читал, что instanceof не оптимально использовать т.к. он долгий.
     
  19. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Ну instanceof долгий, а этот быстрее. @Ission писал где-то про это.
     
  20. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    instanceof вызывает целую цепь рекурсий на проверку интерфейсов, всех родителей и прародителей обоих классов. Для сравнивания типа сущности лучше использовать подобную конструкцию: entity.getType()==EntityType.VASILIY
     
  21. LomNar

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

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Благодарю
     

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