use of cn.nukkit.level.Level in project Nukkit by Nukkit.
the class Server method loadLevel.
public boolean loadLevel(String name) {
if (Objects.equals(name.trim(), "")) {
throw new LevelException("Invalid empty level name");
}
if (this.isLevelLoaded(name)) {
return true;
} else if (!this.isLevelGenerated(name)) {
this.logger.notice(this.getLanguage().translateString("nukkit.level.notFound", name));
return false;
}
String path;
if (name.contains("/") || name.contains("\\")) {
path = name;
} else {
path = this.getDataPath() + "worlds/" + name + "/";
}
Class<? extends LevelProvider> provider = LevelProviderManager.getProvider(path);
if (provider == null) {
this.logger.error(this.getLanguage().translateString("nukkit.level.loadError", new String[] { name, "Unknown provider" }));
return false;
}
Level level;
try {
level = new Level(this, name, path, provider);
} catch (Exception e) {
this.logger.error(this.getLanguage().translateString("nukkit.level.loadError", new String[] { name, e.getMessage() }));
this.logger.logException(e);
return false;
}
this.levels.put(level.getId(), level);
level.initLevel();
this.getPluginManager().callEvent(new LevelLoadEvent(level));
level.setTickRate(this.baseTickRate);
return true;
}
use of cn.nukkit.level.Level in project Nukkit by Nukkit.
the class Server method tick.
private boolean tick() {
long tickTime = System.currentTimeMillis();
// TODO
long sleepTime = tickTime - this.nextTick;
if (sleepTime < -25) {
try {
Thread.sleep(Math.max(5, -sleepTime - 25));
} catch (InterruptedException e) {
Server.getInstance().getLogger().logException(e);
}
}
long tickTimeNano = System.nanoTime();
if ((tickTime - this.nextTick) < -25) {
return false;
}
Timings.fullServerTickTimer.startTiming();
++this.tickCounter;
Timings.connectionTimer.startTiming();
this.network.processInterfaces();
if (this.rcon != null) {
this.rcon.check();
}
Timings.connectionTimer.stopTiming();
Timings.schedulerTimer.startTiming();
this.scheduler.mainThreadHeartbeat(this.tickCounter);
Timings.schedulerTimer.stopTiming();
this.checkTickUpdates(this.tickCounter, tickTime);
for (Player player : new ArrayList<>(this.players.values())) {
player.checkNetwork();
}
if ((this.tickCounter & 0b1111) == 0) {
this.titleTick();
this.network.resetStatistics();
this.maxTick = 20;
this.maxUse = 0;
if ((this.tickCounter & 0b111111111) == 0) {
try {
this.getPluginManager().callEvent(this.queryRegenerateEvent = new QueryRegenerateEvent(this, 5));
if (this.queryHandler != null) {
this.queryHandler.regenerateInfo();
}
} catch (Exception e) {
this.logger.logException(e);
}
}
this.getNetwork().updateName();
}
if (this.autoSave && ++this.autoSaveTicker >= this.autoSaveTicks) {
this.autoSaveTicker = 0;
this.doAutoSave();
}
if (this.sendUsageTicker > 0 && --this.sendUsageTicker == 0) {
this.sendUsageTicker = 6000;
// todo sendUsage
}
if (this.tickCounter % 100 == 0) {
for (Level level : this.levelArray) {
level.doChunkGarbageCollection();
}
}
Timings.fullServerTickTimer.stopTiming();
// long now = System.currentTimeMillis();
long nowNano = System.nanoTime();
// float tick = Math.min(20, 1000 / Math.max(1, now - tickTime));
// float use = Math.min(1, (now - tickTime) / 50);
float tick = (float) Math.min(20, 1000000000 / Math.max(1000000, ((double) nowNano - tickTimeNano)));
float use = (float) Math.min(1, ((double) (nowNano - tickTimeNano)) / 50000000);
if (this.maxTick > tick) {
this.maxTick = tick;
}
if (this.maxUse < use) {
this.maxUse = use;
}
System.arraycopy(this.tickAverage, 1, this.tickAverage, 0, this.tickAverage.length - 1);
this.tickAverage[this.tickAverage.length - 1] = tick;
System.arraycopy(this.useAverage, 1, this.useAverage, 0, this.useAverage.length - 1);
this.useAverage[this.useAverage.length - 1] = use;
if ((this.nextTick - tickTime) < -1000) {
this.nextTick = tickTime;
} else {
this.nextTick += 50;
}
return true;
}
use of cn.nukkit.level.Level in project Nukkit by Nukkit.
the class Server method doAutoSave.
public void doAutoSave() {
if (this.getAutoSave()) {
Timings.levelSaveTimer.startTiming();
for (Player player : new ArrayList<>(this.players.values())) {
if (player.isOnline()) {
player.save(true);
} else if (!player.isConnected()) {
this.removePlayer(player);
}
}
for (Level level : this.levelArray) {
level.save();
}
Timings.levelSaveTimer.stopTiming();
}
}
use of cn.nukkit.level.Level in project Nukkit by Nukkit.
the class SetWorldSpawnCommand method execute.
@Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if (!this.testPermission(sender)) {
return true;
}
Level level;
Vector3 pos;
if (args.length == 0) {
if (sender instanceof Player) {
level = ((Player) sender).getLevel();
pos = ((Player) sender).round();
} else {
sender.sendMessage(new TranslationContainer("commands.generic.ingame"));
return true;
}
} else if (args.length == 3) {
level = sender.getServer().getDefaultLevel();
try {
pos = new Vector3(Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]));
} catch (NumberFormatException e1) {
sender.sendMessage(new TranslationContainer("commands.generic.usage", this.usageMessage));
return true;
}
} else {
sender.sendMessage(new TranslationContainer("commands.generic.usage", this.usageMessage));
return true;
}
level.setSpawnLocation(pos);
DecimalFormat round2 = new DecimalFormat("##0.00");
Command.broadcastCommandMessage(sender, new TranslationContainer("commands.setworldspawn.success", new String[] { round2.format(pos.x), round2.format(pos.y), round2.format(pos.z) }));
return true;
}
use of cn.nukkit.level.Level in project Nukkit by Nukkit.
the class SpawnpointCommand method execute.
@Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if (!this.testPermission(sender)) {
return true;
}
Player target;
if (args.length == 0) {
if (sender instanceof Player) {
target = (Player) sender;
} else {
sender.sendMessage(new TranslationContainer("commands.generic.ingame"));
return true;
}
} else {
target = sender.getServer().getPlayer(args[0]);
if (target == null) {
sender.sendMessage(new TranslationContainer(TextFormat.RED + "%commands.generic.player.notFound"));
return true;
}
}
Level level = target.getLevel();
DecimalFormat round2 = new DecimalFormat("##0.00");
if (args.length == 4) {
if (level != null) {
int x;
int y;
int z;
try {
x = Integer.parseInt(args[1]);
y = Integer.parseInt(args[2]);
z = Integer.parseInt(args[3]);
} catch (NumberFormatException e1) {
sender.sendMessage(new TranslationContainer("commands.generic.usage", this.usageMessage));
return true;
}
if (y < 0)
y = 0;
if (y > 256)
y = 256;
target.setSpawn(new Position(x, y, z, level));
Command.broadcastCommandMessage(sender, new TranslationContainer("commands.spawnpoint.success", new String[] { target.getName(), round2.format(x), round2.format(y), round2.format(z) }));
return true;
}
} else if (args.length <= 1) {
if (sender instanceof Player) {
Position pos = (Position) sender;
target.setSpawn(pos);
Command.broadcastCommandMessage(sender, new TranslationContainer("commands.spawnpoint.success", new String[] { target.getName(), round2.format(pos.x), round2.format(pos.y), round2.format(pos.z) }));
return true;
} else {
sender.sendMessage(new TranslationContainer("commands.generic.ingame"));
return true;
}
}
sender.sendMessage(new TranslationContainer("commands.generic.usage", this.usageMessage));
return true;
}
Aggregations