adding automatic world restoration
This commit is contained in:
parent
49ea2b1aad
commit
9b2884b85d
@ -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());
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user