блин. а я делал getTypeId()
🫢Я даже не представляю, чем Вас отблагодарить...
Результаты тестирования:
- При появлении в воздухе, воде, лаве, факеле, зыбучем песке ExtraBiomes XL, мягком блоке chisel - появляешься в том же месте, что и был.
- При появлении в твердом блоке: земля, камень, лед и т.п. - появляюсь на спавне.
Вывод: Плагин выполняет требуемую задачу.
Надо еще протестировать работу с онлайн 2+
Развитие продолжу - надо привязать команду для назначения спавна в этом плагине, вынести в конфиг время счетчика, чтоб значение "30сек(600L)" можно было быстро поменять.
Еще вопросец образовался. Как запросить/записать/перезагрузить конфиг из другого класса?
Код:
public class SavePlayerLoc extends JavaPlugin implements Listener {
protected FileConfiguration config;
@Override
public void onEnable() {
config = getConfig();
getCommand("spl").setExecutor(new spComand());
Код:
public class spComand implements CommandExecutor {
private SavePlayerLoc plugin;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
switch (args.length) {
case 1:
if ("reload".equalsIgnoreCase(args[0])) {
plugin.reloadConfig();
В данном случае reloadConfig(); не работает....
Апдейт плагина:
Код:
package ru.morIV.BungeeSavePL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
public class Main extends JavaPlugin implements Listener{
protected FileConfiguration config;
@Override
public void onEnable() {
Bukkit.getLogger().info("Enabled!");
config = getConfig();
Bukkit.getPluginManager().registerEvents(this, this);
config.options().copyDefaults(true);
saveConfig();
BukkitRunnable runnable = new BukkitRunnable(){
@Override
public void run (){
// Bukkit.broadcastMessage("Автоматическое сохранение локации");
for(Player player : Bukkit.getOnlinePlayers())
locToConfig(player);
}
};
runnable.runTaskTimer(this, 1L, 600L);
}
@Override
public void onDisable() {
Bukkit.getLogger().info("Disabled!");
for(Player player : Bukkit.getOnlinePlayers())
locToConfig(player);
}
@EventHandler
public void onJoin(PlayerJoinEvent event){
Player p = event.getPlayer();
configToLoc(p);
}
@EventHandler
public void onQuit(PlayerQuitEvent event){
Player p = event.getPlayer();
locToConfig(p);
}
public void locToConfig(Player p){
config.set(p.getName() + "." + "world", p.getLocation().getWorld().getName());
config.set(p.getName() + "." + "x", p.getLocation().getX());
config.set(p.getName() + "." + "y", p.getLocation().getY());
config.set(p.getName() + "." + "z", p.getLocation().getZ());
saveConfig();
}
public void configToLoc(Player p){
if(getConfig().getConfigurationSection(p.getName()) == null) {
p.sendMessage(ChatColor.RED + "Вы впервые зашли на сервер");
p.teleport(p.getPlayer().getWorld().getSpawnLocation());
}else {
World w = Bukkit.getServer().getWorld(getConfig().getString(p.getName() + "." + "world"));
double x = getConfig().getDouble(p.getName() + "." + "x");
double y = getConfig().getDouble(p.getName() + "." + "y");
double z = getConfig().getDouble(p.getName() + "." + "z");
int a = (int) x;
int b = (int) y + 1;
int c = (int) z;
//if(w.getBlockAt(a,b,c).isEmpty() == true) {
if(w.getBlockAt(a,b,c).getType().isSolid() == false) {
p.teleport(new Location(w, x, b, z));
}else{
p.sendMessage(ChatColor.RED + "Вы телепортированы на спавн");
p.teleport(p.getPlayer().getWorld().getSpawnLocation());
}
}
}
}
Добавлена проверка на наличие твердого блока в координатах ТП. Если есть, тп на спавн. Так же т.п. на спавн при первом входе в игру.