new gc-,gamemode- and tp-command, tab shows ram usage
This commit is contained in:
parent
94d9ba1bae
commit
dca9c7bfb6
src/main/java/eu/mhsl/craftattack/worldmuseum
@ -1,5 +1,9 @@
|
||||
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.worlds.WorldManager;
|
||||
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.Player;
|
||||
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.PlayerUseItemEvent;
|
||||
import net.minestom.server.instance.InstanceContainer;
|
||||
import net.minestom.server.instance.InstanceManager;
|
||||
import net.minestom.server.instance.block.Block;
|
||||
import net.minestom.server.timer.TaskSchedule;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -28,11 +34,23 @@ public class Main {
|
||||
MinecraftServer minecraftServer = MinecraftServer.init();
|
||||
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
|
||||
|
||||
|
||||
|
||||
|
||||
//temp
|
||||
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
|
||||
WorldManager.getInstance().loadWorlds();
|
||||
|
||||
|
||||
|
||||
// Create starting-instance / world
|
||||
InstanceContainer instanceContainer = instanceManager.createInstanceContainer();
|
||||
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)
|
||||
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 -> {
|
||||
final Player player = event.getPlayer();
|
||||
event.setSpawningInstance(instanceContainer);
|
||||
@ -57,7 +85,7 @@ public class Main {
|
||||
}
|
||||
}
|
||||
});
|
||||
globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
|
||||
|
||||
try {
|
||||
PORT = Integer.parseInt(args[0]);
|
||||
} 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.WorldManager;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
import net.minestom.server.entity.Player;
|
||||
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.Material;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ClickListener implements Consumer<PlayerUseItemEvent> {
|
||||
@ -19,14 +14,6 @@ public class ClickListener implements Consumer<PlayerUseItemEvent> {
|
||||
Player p = playerUseItemEvent.getPlayer();
|
||||
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++) {
|
||||
World world = WorldManager.getInstance().getWorlds().get(i);
|
||||
|
||||
|
@ -40,9 +40,11 @@ public class World extends InstanceContainer {
|
||||
static {
|
||||
MinecraftServer.getDimensionTypeManager().addDimension(dimension);
|
||||
}
|
||||
AnvilLoader anvilLoader;
|
||||
|
||||
public World(File file) {
|
||||
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
|
||||
this.anvilLoader = new AnvilLoader(file.getPath());
|
||||
MinecraftServer.getInstanceManager().registerInstance(this);
|
||||
this.file = file;
|
||||
try {
|
||||
|
Reference in New Issue
Block a user