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.GcCommand;
import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
import eu.mhsl.craftattack.worldmuseum.listener.ChunkUnloading;
import eu.mhsl.craftattack.worldmuseum.listener.CompassUseListener;
import eu.mhsl.craftattack.worldmuseum.listener.InventoryClickListener;
import eu.mhsl.craftattack.worldmuseum.listener.*;
import eu.mhsl.craftattack.worldmuseum.util.Config;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
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.entity.GameMode;
import net.minestom.server.entity.Player;
import net.minestom.server.entity.PlayerSkin;
import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.inventory.InventoryPreClickEvent;
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.event.player.*;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.timer.TaskSchedule;
@ -29,10 +26,9 @@ public class Main {
// Initialization
System.setProperty("minestom.chunk-view-distance", "16");
MinecraftServer minecraftServer = MinecraftServer.init();
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
MinecraftServer.setChunkViewDistance(8);
//temp
MinecraftServer.setChunkViewDistance(8);
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
@ -55,6 +51,8 @@ public class Main {
globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener());
globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading());
globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener());
globalEventHandler.addListener(PlayerBlockBreakEvent.class, new BlockBreakListener());
globalEventHandler.addListener(PlayerBlockPlaceEvent.class, new BlockPlaceListener());
//commands
MinecraftServer.getCommandManager().register(new TeleportCommand());
@ -63,6 +61,7 @@ public class Main {
globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
final Player player = event.getPlayer();
player.setSkin(PlayerSkin.fromUsername(player.getUsername()));
event.setSpawningInstance(startworld);
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 {
private final static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
private final File file;
private ItemStack item;
private final ItemStack item;
private String name = "default";
private Pos spawn = new Pos(0,0,0);
private Material material = Material.GRASS_BLOCK;
private boolean enabled = false;
private final String defaultConfig = "{\n" +
" \"enabled\": false,\n" +
" \"name\": \"DEFAULT_NAME\",\n" +
" \"material\": \"2\",\n" +
" \"material\": \"GRASS_BLOCK\",\n" +
" \"spawn\": {\n" +
" \"x\": 0,\n" +
" \"y\": 0,\n" +
@ -45,7 +43,6 @@ public class World extends InstanceContainer {
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
this.anvilLoader = new AnvilLoader(file.getPath());
MinecraftServer.getInstanceManager().registerInstance(this);
this.file = file;
try {
File checkFile = new File(file.getPath() + "/config.json");
if (checkFile.createNewFile()) {
@ -58,17 +55,19 @@ public class World extends InstanceContainer {
}
Material material = Material.GRASS_BLOCK;
try {
JsonObject config = (JsonObject) JsonParser.parseReader(new FileReader(file.getPath() + "/config.json"));
this.name = config.get("name").getAsString();
JsonObject spawn = config.getAsJsonObject("spawn");
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();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
assert material != null;
item = ItemStack.builder(material).displayName(Component.text(name)).build();
}