adding automatic world restoration

This commit is contained in:
Martin Olischläger 2023-04-17 16:43:29 +02:00
parent 49ea2b1aad
commit 9b2884b85d
4 changed files with 41 additions and 14 deletions

View File

@ -3,9 +3,7 @@ package eu.mhsl.craftattack.worldmuseum;
import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand; import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
import eu.mhsl.craftattack.worldmuseum.commands.GcCommand; import eu.mhsl.craftattack.worldmuseum.commands.GcCommand;
import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand; import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
import eu.mhsl.craftattack.worldmuseum.listener.ChunkUnloading; import eu.mhsl.craftattack.worldmuseum.listener.*;
import eu.mhsl.craftattack.worldmuseum.listener.CompassUseListener;
import eu.mhsl.craftattack.worldmuseum.listener.InventoryClickListener;
import eu.mhsl.craftattack.worldmuseum.util.Config; import eu.mhsl.craftattack.worldmuseum.util.Config;
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;
@ -13,11 +11,10 @@ import eu.mhsl.craftattack.worldmuseum.util.CompassManager;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
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.entity.PlayerSkin;
import net.minestom.server.event.GlobalEventHandler; import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.inventory.InventoryPreClickEvent; import net.minestom.server.event.inventory.InventoryPreClickEvent;
import net.minestom.server.event.player.PlayerChunkUnloadEvent; import net.minestom.server.event.player.*;
import net.minestom.server.event.player.PlayerLoginEvent;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.instance.InstanceManager; import net.minestom.server.instance.InstanceManager;
import net.minestom.server.timer.TaskSchedule; import net.minestom.server.timer.TaskSchedule;
@ -29,10 +26,9 @@ public class Main {
// Initialization // Initialization
System.setProperty("minestom.chunk-view-distance", "16"); System.setProperty("minestom.chunk-view-distance", "16");
MinecraftServer minecraftServer = MinecraftServer.init(); MinecraftServer minecraftServer = MinecraftServer.init();
InstanceManager instanceManager = MinecraftServer.getInstanceManager(); MinecraftServer.setChunkViewDistance(8);
//temp //temp
MinecraftServer.setChunkViewDistance(8);
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20)); 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
@ -55,6 +51,8 @@ public class Main {
globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener()); globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener());
globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading()); globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading());
globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener()); globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener());
globalEventHandler.addListener(PlayerBlockBreakEvent.class, new BlockBreakListener());
globalEventHandler.addListener(PlayerBlockPlaceEvent.class, new BlockPlaceListener());
//commands //commands
MinecraftServer.getCommandManager().register(new TeleportCommand()); MinecraftServer.getCommandManager().register(new TeleportCommand());
@ -63,6 +61,7 @@ public class Main {
globalEventHandler.addListener(PlayerLoginEvent.class, event -> { globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
player.setSkin(PlayerSkin.fromUsername(player.getUsername()));
event.setSpawningInstance(startworld); event.setSpawningInstance(startworld);
player.setRespawnPoint(startworld.getSpawn()); player.setRespawnPoint(startworld.getSpawn());

View File

@ -0,0 +1,18 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Point;
import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.minestom.server.instance.block.Block;
import net.minestom.server.timer.TaskSchedule;
import java.util.function.Consumer;
public class BlockBreakListener implements Consumer<PlayerBlockBreakEvent> {
@Override
public void accept(PlayerBlockBreakEvent playerBlockBreakEvent) {
Block block = playerBlockBreakEvent.getBlock();
Point point = playerBlockBreakEvent.getBlockPosition();
MinecraftServer.getSchedulerManager().scheduleTask(() -> playerBlockBreakEvent.getInstance().setBlock(point, block), TaskSchedule.seconds(10), TaskSchedule.stop());
}
}

View File

@ -0,0 +1,11 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import net.minestom.server.event.player.PlayerBlockPlaceEvent;
import java.util.function.Consumer;
public class BlockPlaceListener implements Consumer<PlayerBlockPlaceEvent> {
@Override
public void accept(PlayerBlockPlaceEvent playerBlockPlaceEvent) {
playerBlockPlaceEvent.setCancelled(true);
}
}

View File

@ -16,16 +16,14 @@ import java.util.UUID;
public class World extends InstanceContainer { public class World extends InstanceContainer {
private final static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build(); private final static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
private final File file; private final ItemStack item;
private ItemStack item;
private String name = "default"; private String name = "default";
private Pos spawn = new Pos(0,0,0); private Pos spawn = new Pos(0,0,0);
private Material material = Material.GRASS_BLOCK;
private boolean enabled = false; private boolean enabled = false;
private final String defaultConfig = "{\n" + private final String defaultConfig = "{\n" +
" \"enabled\": false,\n" + " \"enabled\": false,\n" +
" \"name\": \"DEFAULT_NAME\",\n" + " \"name\": \"DEFAULT_NAME\",\n" +
" \"material\": \"2\",\n" + " \"material\": \"GRASS_BLOCK\",\n" +
" \"spawn\": {\n" + " \"spawn\": {\n" +
" \"x\": 0,\n" + " \"x\": 0,\n" +
" \"y\": 0,\n" + " \"y\": 0,\n" +
@ -45,7 +43,6 @@ public class World extends InstanceContainer {
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath())); super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
this.anvilLoader = new AnvilLoader(file.getPath()); this.anvilLoader = new AnvilLoader(file.getPath());
MinecraftServer.getInstanceManager().registerInstance(this); MinecraftServer.getInstanceManager().registerInstance(this);
this.file = file;
try { try {
File checkFile = new File(file.getPath() + "/config.json"); File checkFile = new File(file.getPath() + "/config.json");
if (checkFile.createNewFile()) { if (checkFile.createNewFile()) {
@ -58,17 +55,19 @@ public class World extends InstanceContainer {
} }
Material material = Material.GRASS_BLOCK;
try { try {
JsonObject config = (JsonObject) JsonParser.parseReader(new FileReader(file.getPath() + "/config.json")); JsonObject config = (JsonObject) JsonParser.parseReader(new FileReader(file.getPath() + "/config.json"));
this.name = config.get("name").getAsString(); this.name = config.get("name").getAsString();
JsonObject spawn = config.getAsJsonObject("spawn"); JsonObject spawn = config.getAsJsonObject("spawn");
this.spawn = new Pos(spawn.get("x").getAsDouble(), spawn.get("y").getAsDouble(), spawn.get("z").getAsDouble()); this.spawn = new Pos(spawn.get("x").getAsDouble(), spawn.get("y").getAsDouble(), spawn.get("z").getAsDouble());
this.material = Material.fromNamespaceId("minecraft:" + config.get("material").getAsString().toLowerCase()); material = Material.fromNamespaceId("minecraft:" + config.get("material").getAsString().toLowerCase());
this.enabled = config.get("enabled").getAsBoolean(); this.enabled = config.get("enabled").getAsBoolean();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
assert material != null;
item = ItemStack.builder(material).displayName(Component.text(name)).build(); item = ItemStack.builder(material).displayName(Component.text(name)).build();
} }