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.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());
|
||||
|
@ -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 {
|
||||
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();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user