new gc-,gamemode- and tp-command, tab shows ram usage
This commit is contained in:
parent
94d9ba1bae
commit
dca9c7bfb6
@ -1,5 +1,9 @@
|
|||||||
package eu.mhsl.craftattack.worldmuseum;
|
package eu.mhsl.craftattack.worldmuseum;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
|
||||||
|
import eu.mhsl.craftattack.worldmuseum.commands.GcCommand;
|
||||||
|
import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
|
||||||
|
import eu.mhsl.craftattack.worldmuseum.listener.ChunkUnloading;
|
||||||
import eu.mhsl.craftattack.worldmuseum.listener.ClickListener;
|
import eu.mhsl.craftattack.worldmuseum.listener.ClickListener;
|
||||||
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
@ -7,11 +11,13 @@ import net.minestom.server.coordinate.Pos;
|
|||||||
import net.minestom.server.entity.GameMode;
|
import net.minestom.server.entity.GameMode;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.GlobalEventHandler;
|
import net.minestom.server.event.GlobalEventHandler;
|
||||||
|
import net.minestom.server.event.player.PlayerChunkUnloadEvent;
|
||||||
import net.minestom.server.event.player.PlayerLoginEvent;
|
import net.minestom.server.event.player.PlayerLoginEvent;
|
||||||
import net.minestom.server.event.player.PlayerUseItemEvent;
|
import net.minestom.server.event.player.PlayerUseItemEvent;
|
||||||
import net.minestom.server.instance.InstanceContainer;
|
import net.minestom.server.instance.InstanceContainer;
|
||||||
import net.minestom.server.instance.InstanceManager;
|
import net.minestom.server.instance.InstanceManager;
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
|
import net.minestom.server.timer.TaskSchedule;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -28,11 +34,23 @@ public class Main {
|
|||||||
MinecraftServer minecraftServer = MinecraftServer.init();
|
MinecraftServer minecraftServer = MinecraftServer.init();
|
||||||
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
|
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//temp
|
||||||
|
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
|
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
|
||||||
WorldManager.getInstance().loadWorlds();
|
WorldManager.getInstance().loadWorlds();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Create starting-instance / world
|
// Create starting-instance / world
|
||||||
InstanceContainer instanceContainer = instanceManager.createInstanceContainer();
|
InstanceContainer instanceContainer = instanceManager.createInstanceContainer();
|
||||||
instanceContainer.setBlock(0,0,0,Block.STONE);
|
instanceContainer.setBlock(0,0,0,Block.STONE);
|
||||||
@ -40,6 +58,16 @@ public class Main {
|
|||||||
|
|
||||||
// Add an event callback to specify the spawning instance (and the spawn position)
|
// Add an event callback to specify the spawning instance (and the spawn position)
|
||||||
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
|
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
|
||||||
|
|
||||||
|
//listeners
|
||||||
|
globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
|
||||||
|
globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading());
|
||||||
|
|
||||||
|
//commands
|
||||||
|
MinecraftServer.getCommandManager().register(new TeleportCommand());
|
||||||
|
MinecraftServer.getCommandManager().register(new GcCommand());
|
||||||
|
MinecraftServer.getCommandManager().register(new GamemodeCommand());
|
||||||
|
|
||||||
globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
|
globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
event.setSpawningInstance(instanceContainer);
|
event.setSpawningInstance(instanceContainer);
|
||||||
@ -57,7 +85,7 @@ public class Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
|
|
||||||
try {
|
try {
|
||||||
PORT = Integer.parseInt(args[0]);
|
PORT = Integer.parseInt(args[0]);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package eu.mhsl.craftattack.worldmuseum;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.adventure.audience.Audiences;
|
||||||
|
import net.minestom.server.entity.Player;
|
||||||
|
import net.minestom.server.monitoring.TickMonitor;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
public class TablistUpdateTask implements Runnable {
|
||||||
|
private static final Runtime runtime = Runtime.getRuntime();
|
||||||
|
private static final AtomicReference<TickMonitor> lastTick = new AtomicReference<>();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Collection<Player> players = MinecraftServer.getConnectionManager().getOnlinePlayers();
|
||||||
|
if (players.isEmpty()) return;
|
||||||
|
|
||||||
|
final Component header =
|
||||||
|
Component.newline()
|
||||||
|
.append(Component.text("MineNet Network", NamedTextColor.GOLD))
|
||||||
|
.append(Component.newline()).append(Component.text("Players: " + players.size()))
|
||||||
|
.append(Component.newline())
|
||||||
|
.append(Component.newline()).append(Component.text("RAM: " + getRamUsage() + " MB", NamedTextColor.GRAY))
|
||||||
|
.append(Component.newline()).append(Component.text("TICK: " + getTickMonitor().getTickTime() + "ms", NamedTextColor.GRAY))
|
||||||
|
.append(Component.newline());
|
||||||
|
|
||||||
|
final Component footer =
|
||||||
|
Component.newline()
|
||||||
|
.append(Component.text("mhsl.eu"))
|
||||||
|
.append(Component.newline());
|
||||||
|
|
||||||
|
Audiences.players().sendPlayerListHeaderAndFooter(header, footer);
|
||||||
|
}
|
||||||
|
public static long getRamUsage() {
|
||||||
|
return (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024;
|
||||||
|
}
|
||||||
|
public static TickMonitor getTickMonitor() {
|
||||||
|
return lastTick.get() != null ? lastTick.get() : new TickMonitor(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package eu.mhsl.craftattack.worldmuseum.commands;
|
||||||
|
|
||||||
|
import net.minestom.server.command.builder.Command;
|
||||||
|
import net.minestom.server.command.builder.arguments.ArgumentEnum;
|
||||||
|
import net.minestom.server.command.builder.arguments.ArgumentType;
|
||||||
|
import net.minestom.server.entity.GameMode;
|
||||||
|
import net.minestom.server.entity.Player;
|
||||||
|
|
||||||
|
public class GamemodeCommand extends Command {
|
||||||
|
public GamemodeCommand() {
|
||||||
|
super("gamemode", "gm");
|
||||||
|
|
||||||
|
// setCondition((sender, commandString) -> sender.hasPermission("admin"));
|
||||||
|
|
||||||
|
addSyntax((sender, context) -> ((Player) sender).setGameMode(
|
||||||
|
context.get("target")),
|
||||||
|
ArgumentType.Enum("target", GameMode.class).setFormat(ArgumentEnum.Format.LOWER_CASED)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package eu.mhsl.craftattack.worldmuseum.commands;
|
||||||
|
|
||||||
|
import net.minestom.server.command.builder.Command;
|
||||||
|
|
||||||
|
public class GcCommand extends Command {
|
||||||
|
private static long lastRun = System.currentTimeMillis();
|
||||||
|
private static final Runtime runtime = Runtime.getRuntime();
|
||||||
|
|
||||||
|
public GcCommand() {
|
||||||
|
super("gc");
|
||||||
|
|
||||||
|
// setCondition((sender, commandString) -> sender.hasPermission("admin"));
|
||||||
|
|
||||||
|
setDefaultExecutor((sender, context) -> {
|
||||||
|
long nextRun = (lastRun - (System.currentTimeMillis() - 30*1000)) / 1000;
|
||||||
|
if(nextRun > 0) {
|
||||||
|
sender.sendMessage("pls wait");
|
||||||
|
// new ChatMessage(Icon.ERROR).appendStatic("Please wait ").appendStatic(String.valueOf(nextRun)).appendStatic(" seconds before running GC again!").send(sender);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastRun = System.currentTimeMillis();
|
||||||
|
|
||||||
|
long before = getRamUsage();
|
||||||
|
System.gc();
|
||||||
|
long after = getRamUsage();
|
||||||
|
|
||||||
|
sender.sendMessage("before: " + before + " now: " + after);
|
||||||
|
// new ChatMessage(Icon.SUCCESS).appendStatic("Garbage collector ran successfully!").indent(1).newLine()
|
||||||
|
// .appendStatic("before: ").appendStatic(String.valueOf(before)).appendStatic("MB").newLine()
|
||||||
|
// .appendStatic("now: ").appendStatic(String.valueOf(after)).appendStatic("MB").indent(1).newLine()
|
||||||
|
// .appendStatic("difference: ").appendStatic(String.valueOf(before-after)).appendStatic("MB")
|
||||||
|
// .send(sender);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public static long getRamUsage() {
|
||||||
|
return (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package eu.mhsl.craftattack.worldmuseum.commands;
|
||||||
|
|
||||||
|
import net.minestom.server.command.builder.Command;
|
||||||
|
import net.minestom.server.command.builder.arguments.ArgumentType;
|
||||||
|
import net.minestom.server.entity.Player;
|
||||||
|
|
||||||
|
public class TeleportCommand extends Command {
|
||||||
|
|
||||||
|
public TeleportCommand() {
|
||||||
|
super("tp","teleport");
|
||||||
|
setDefaultExecutor(((sender, context) -> {
|
||||||
|
sender.sendMessage("test");
|
||||||
|
}));
|
||||||
|
|
||||||
|
var playerArgument = ArgumentType.Entity("Spieler").onlyPlayers(true);
|
||||||
|
var number = ArgumentType.Integer("Kordinaten");
|
||||||
|
|
||||||
|
addSyntax(((sender, context) -> {
|
||||||
|
Player targetPlayer = (Player) context.get(playerArgument).find(sender).get(0);
|
||||||
|
Player p = (Player) sender;
|
||||||
|
p.teleport(targetPlayer.getPosition());
|
||||||
|
}), playerArgument);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package eu.mhsl.craftattack.worldmuseum.listener;
|
||||||
|
|
||||||
|
import net.minestom.server.event.player.PlayerChunkUnloadEvent;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class ChunkUnloading implements Consumer<PlayerChunkUnloadEvent> {
|
||||||
|
@Override
|
||||||
|
public void accept(PlayerChunkUnloadEvent e) {
|
||||||
|
|
||||||
|
var chunk = e.getInstance().getChunk(e.getChunkX(), e.getChunkZ());
|
||||||
|
if (chunk == null) return;
|
||||||
|
|
||||||
|
if (chunk.getViewers().size() == 0) {
|
||||||
|
try {
|
||||||
|
e.getInstance().unloadChunk(e.getChunkX(), e.getChunkZ());
|
||||||
|
} catch (NullPointerException ignored) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,14 +2,9 @@ package eu.mhsl.craftattack.worldmuseum.listener;
|
|||||||
|
|
||||||
import eu.mhsl.craftattack.worldmuseum.worlds.World;
|
import eu.mhsl.craftattack.worldmuseum.worlds.World;
|
||||||
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
||||||
import net.minestom.server.coordinate.Pos;
|
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.player.PlayerUseItemEvent;
|
import net.minestom.server.event.player.PlayerUseItemEvent;
|
||||||
import net.minestom.server.inventory.Inventory;
|
|
||||||
import net.minestom.server.inventory.InventoryType;
|
|
||||||
import net.minestom.server.item.ItemStack;
|
import net.minestom.server.item.ItemStack;
|
||||||
import net.minestom.server.item.Material;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class ClickListener implements Consumer<PlayerUseItemEvent> {
|
public class ClickListener implements Consumer<PlayerUseItemEvent> {
|
||||||
@ -19,14 +14,6 @@ public class ClickListener implements Consumer<PlayerUseItemEvent> {
|
|||||||
Player p = playerUseItemEvent.getPlayer();
|
Player p = playerUseItemEvent.getPlayer();
|
||||||
ItemStack usedItem = playerUseItemEvent.getItemStack();
|
ItemStack usedItem = playerUseItemEvent.getItemStack();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Inventory inventory = new Inventory(InventoryType.WINDOW_3X3, "asdasd");
|
|
||||||
// inventory.setItemStack(0, ItemStack.builder(Material.GRASS_BLOCK).build());
|
|
||||||
// p.openInventory(inventory);
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) {
|
for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) {
|
||||||
World world = WorldManager.getInstance().getWorlds().get(i);
|
World world = WorldManager.getInstance().getWorlds().get(i);
|
||||||
|
|
||||||
|
@ -40,9 +40,11 @@ public class World extends InstanceContainer {
|
|||||||
static {
|
static {
|
||||||
MinecraftServer.getDimensionTypeManager().addDimension(dimension);
|
MinecraftServer.getDimensionTypeManager().addDimension(dimension);
|
||||||
}
|
}
|
||||||
|
AnvilLoader anvilLoader;
|
||||||
|
|
||||||
public World(File file) {
|
public World(File file) {
|
||||||
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
|
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
|
||||||
|
this.anvilLoader = new AnvilLoader(file.getPath());
|
||||||
MinecraftServer.getInstanceManager().registerInstance(this);
|
MinecraftServer.getInstanceManager().registerInstance(this);
|
||||||
this.file = file;
|
this.file = file;
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user