diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java index 21176f0..65a7ff7 100755 --- a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java @@ -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()); diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockBreakListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockBreakListener.java new file mode 100644 index 0000000..6147446 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockBreakListener.java @@ -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()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockPlaceListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockPlaceListener.java new file mode 100644 index 0000000..3e87631 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/BlockPlaceListener.java @@ -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); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java index 50f7aa5..fd10118 100755 --- a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java +++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java @@ -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(); }