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

donatell

Активный участник
Пользователь
Баллы
63
Имя в Minecraft
monkeyman_91
Если говорить проще то у меня сервер с минииграми. Все появляются в мире hub на маленьком спавне. там стоят порталы в разные миры типа сурвивал мир, креатив мир и т.д. так вот мне надо чтобы при вводе комманды спавн игрок попадал на спавн мира в котором он находится))
Сказали сюда обратиться)) Как бы так сделать чтобы плагин отслеживал в каком мире ты находишься и при вводе команды /spawn кидал именно в спавн мира в котором ты есть. Но еще как бы косячек небольшой. Чтобы к примеру если в аду или в крае находишься то тпхал на спавн выживания...
P.S. Это вроде как запрос на разработку плагина))) и на много миров у меня стоит multiverse-core
 
Не проще ли будет использовать /warp название_мира вместо /spawn?
 
Использовал бы Multi-World, там есть функция спауна для каждого мира. А за плагин могу я взяться.
 
Не проще ли будет использовать /warp название_мира вместо /spawn?
Проще, не проще, а мне пока нужно так. И многим кого я знаю))
Использовал бы Multi-World, там есть функция спауна для каждого мира. А за плагин могу я взяться.
Если можешь то возьмись)) И подумай по поводу EssentialsSpawn. Надо будет его сносить?
 
Ну что там с плагином? Мне бы тоже его подогнали...Извиняюсь за дату.
 
Если говорить проще то у меня сервер с минииграми. Все появляются в мире hub на маленьком спавне. там стоят порталы в разные миры типа сурвивал мир, креатив мир и т.д. так вот мне надо чтобы при вводе комманды спавн игрок попадал на спавн мира в котором он находится))
Сказали сюда обратиться)) Как бы так сделать чтобы плагин отслеживал в каком мире ты находишься и при вводе команды /spawn кидал именно в спавн мира в котором ты есть. Но еще как бы косячек небольшой. Чтобы к примеру если в аду или в крае находишься то тпхал на спавн выживания...
P.S. Это вроде как запрос на разработку плагина))) и на много миров у меня стоит multiverse-core
Сделай для кождой мини игры свой сервер и соедени через BungeeCord
 
Если говорить проще то у меня сервер с минииграми. Все появляются в мире hub на маленьком спавне. там стоят порталы в разные миры типа сурвивал мир, креатив мир и т.д. так вот мне надо чтобы при вводе комманды спавн игрок попадал на спавн мира в котором он находится))
Сказали сюда обратиться)) Как бы так сделать чтобы плагин отслеживал в каком мире ты находишься и при вводе команды /spawn кидал именно в спавн мира в котором ты есть. Но еще как бы косячек небольшой. Чтобы к примеру если в аду или в крае находишься то тпхал на спавн выживания...
P.S. Это вроде как запрос на разработку плагина))) и на много миров у меня стоит multiverse-core
Эмм. Вот сделал: https://yadi.sk/d/Je8z-5l3iA9Rh
Пермы: multispawn.spawn | multispawn.setspawn
И да, взломки нет:

Java:
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);
    }

}
 
AdminCMD имеет такую возможность... почему все ессентаилс используют, а не его?
 
AdminCMD имеет такую возможность... почему все ессентаилс используют, а не его?
Потому, что essentials включает в себя много функционала. Не требуется скачивать 5-10 плагинов и каждый настраивать. А так скачал один плагин, настроил его и забыл.
Тем более он имеет хоть какую-то совместимость с другими плагинами, например с тремя разными permission плагинами и вроде двумя плагинами для экономики.
 
Потому, что essentials включает в себя много функционала. Не требуется скачивать 5-10 плагинов и каждый настраивать. А так скачал один плагин, настроил его и забыл.
Тем более он имеет хоть какую-то совместимость с другими плагинами, например с тремя разными permission плагинами и вроде двумя плагинами для экономики.
А ты прочитай возможности AdminCMD.
 
Ага, они прекратили разработку, выложив исходники. Но последняя версия работает даже на 1.8.7
На вид неплохо, конечно отпугивает такая заброшенность. Но ессеншалс уже прижился почти везде..)
 
Эмм. Вот сделал: https://yadi.sk/d/Je8z-5l3iA9Rh
Пермы: multispawn.spawn | multispawn.setspawn
И да, взломки нет:

Java:
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);
    }

}

Лучше не используй instanceof, а делай лучше так:
Java:
if(!sender.equals(EntityType.PLAYER)) {
// дальше что хочешь сделать
}
 
Лучше не используй instanceof, а делай лучше так:
Java:
if(!sender.equals(EntityType.PLAYER)) {
// дальше что хочешь сделать
}
Понятно. А в чем разница? Где то читал, что instanceof не оптимально использовать т.к. он долгий.
 
Ну instanceof долгий, а этот быстрее. @Ission писал где-то про это.
instanceof вызывает целую цепь рекурсий на проверку интерфейсов, всех родителей и прародителей обоих классов. Для сравнивания типа сущности лучше использовать подобную конструкцию: entity.getType()==EntityType.VASILIY
 
Назад
Верх