diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..a55e7a1
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 98fbefe..1d4a2ba 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -23,4 +23,11 @@ java {
tasks.test {
useJUnitPlatform()
-}
\ No newline at end of file
+}
+
+tasks.register("copyJarToTestServer") {
+ dependsOn(tasks.jar)
+ mustRunAfter(tasks.jar)
+
+ commandLine("cp", "build/libs/WorldMuseum-1.0-SNAPSHOT.jar", "/home/elias/Dokumente/mcTestServer/plugins/worldmuseum.jar")
+}
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/CancelListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/CancelListener.java
new file mode 100644
index 0000000..a04fa9a
--- /dev/null
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/CancelListener.java
@@ -0,0 +1,12 @@
+package eu.mhsl.minecraft.WorldMuseum;
+
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockRedstoneEvent;
+
+public class CancelListener implements Listener {
+ @EventHandler
+ public void disableRedstone(BlockRedstoneEvent event) {
+ event.setNewCurrent(0);
+ }
+}
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java
new file mode 100644
index 0000000..e5ca76a
--- /dev/null
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/Main.java
@@ -0,0 +1,52 @@
+package eu.mhsl.minecraft.WorldMuseum;
+
+import eu.mhsl.minecraft.WorldMuseum.worldSelector.WorldSelectListener;
+import org.bukkit.Bukkit;
+import org.bukkit.event.Listener;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+public class Main extends JavaPlugin {
+ private static Main instance;
+
+ private final List worlds = new ArrayList<>();
+
+ @Override
+ public void onEnable() {
+ Main.instance = this;
+ this.saveDefaultConfig();
+
+ List listeners = List.of(
+ new WorldSelectListener(),
+ new CancelListener()
+ );
+ listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));
+
+ this.loadWorlds();
+ }
+
+ @Override
+ public void onDisable() {
+ }
+
+ private void loadWorlds() {
+ File worldFolder = new File(getDataFolder().getAbsolutePath() + "/worlds");
+ //noinspection ResultOfMethodCallIgnored
+ worldFolder.mkdirs();
+ Arrays.stream(Objects.requireNonNull(worldFolder.listFiles())).forEach(file -> this.worlds.add(new ViewableWorld(file)));
+ this.worlds.forEach(ViewableWorld::loadWorld);
+ }
+
+ public static Main instance() {
+ return Main.instance;
+ }
+
+ public List getWorlds() {
+ return worlds;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/ViewableWorld.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/ViewableWorld.java
new file mode 100644
index 0000000..5969523
--- /dev/null
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/ViewableWorld.java
@@ -0,0 +1,60 @@
+package eu.mhsl.minecraft.WorldMuseum;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.util.TriState;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.WorldCreator;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.generator.ChunkGenerator;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.io.File;
+
+public class ViewableWorld {
+ private final File worldLocation;
+ private World world;
+
+ private boolean enabled = true;
+ private String name;
+ private Material icon = Material.GRASS_BLOCK;
+
+ public ViewableWorld(File worldLocation) {
+ this.worldLocation = worldLocation;
+ this.name = "unnamed_" + worldLocation.getName();
+ File configFile = new File(this.worldLocation.getAbsolutePath() + "/config.yml");
+ if (configFile.exists()) {
+ ConfigurationSection config = YamlConfiguration.loadConfiguration(configFile);
+ this.enabled = config.getBoolean("enabled");
+ this.name = config.getString("name");
+ this.icon = Material.valueOf(config.getString("icon"));
+ }
+ }
+
+ public void loadWorld() {
+ if(world != null) throw new IllegalStateException("World was already loaded");
+ WorldCreator worldCreator = new WorldCreator(this.worldLocation.getAbsolutePath());
+ worldCreator.keepSpawnLoaded(TriState.FALSE);
+ worldCreator.generator(new ChunkGenerator() {});
+ this.world = worldCreator.createWorld();
+ }
+
+ public void addViewer(Player player) {
+ player.teleport(world.getSpawnLocation());
+ }
+
+ public ItemStack getItem() {
+ ItemStack stack = new ItemStack(this.icon);
+ ItemMeta meta = stack.getItemMeta();
+ meta.displayName(Component.text(name));
+ stack.setItemMeta(meta);
+ return stack;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+}
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java
new file mode 100644
index 0000000..f21344e
--- /dev/null
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectInventory.java
@@ -0,0 +1,21 @@
+package eu.mhsl.minecraft.WorldMuseum.worldSelector;
+
+import eu.mhsl.minecraft.WorldMuseum.Main;
+import eu.mhsl.minecraft.WorldMuseum.ViewableWorld;
+import org.bukkit.Bukkit;
+import org.bukkit.inventory.Inventory;
+
+import java.util.List;
+
+public class WorldSelectInventory {
+ public static Inventory generateInventory() {
+ List worlds = Main.instance().getWorlds();
+ Inventory inventory = Bukkit.createInventory(null, Math.max(worlds.size() / 9, 1) * 9);
+
+ worlds.stream()
+ .filter(ViewableWorld::isEnabled)
+ .forEach(viewableWorld -> inventory.addItem(viewableWorld.getItem()));
+
+ return inventory;
+ }
+}
diff --git a/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java b/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java
new file mode 100644
index 0000000..6a1bbda
--- /dev/null
+++ b/src/main/java/eu/mhsl/minecraft/WorldMuseum/worldSelector/WorldSelectListener.java
@@ -0,0 +1,31 @@
+package eu.mhsl.minecraft.WorldMuseum.worldSelector;
+
+import eu.mhsl.minecraft.WorldMuseum.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+public class WorldSelectListener implements Listener {
+ @EventHandler
+ public void onInteract(InventoryClickEvent event) {
+ event.setCancelled(true);
+
+ Main.instance().getWorlds().stream()
+ .filter(viewableWorld -> viewableWorld.getItem().equals(event.getCurrentItem()))
+ .findFirst()
+ .ifPresent(viewableWorld -> viewableWorld.addViewer((Player) event.getWhoClicked()));
+ }
+
+ @EventHandler
+ public void onJoin(PlayerJoinEvent event) {
+ Bukkit.getScheduler().scheduleSyncDelayedTask(
+ Main.instance(),
+ () -> event.getPlayer().openInventory(
+ WorldSelectInventory.generateInventory()
+ )
+ );
+ }
+}
diff --git a/src/main/java/org/example/WorldMuseum.java b/src/main/java/org/example/WorldMuseum.java
deleted file mode 100644
index 717683c..0000000
--- a/src/main/java/org/example/WorldMuseum.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.example;
-
-import org.bukkit.plugin.java.JavaPlugin;
-
-public class WorldMuseum extends JavaPlugin {
- @Override
- public void onEnable() {
- }
-
- @Override
- public void onDisable() {
- }
-}
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..59f3224
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,3 @@
+bungee:
+ enabled: true
+ returnToServer: 'server'
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..94e7c77
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,6 @@
+name: WorldMuseum
+version: 0.1
+main: eu.mhsl.minecraft.WorldMuseum.Main
+description: Weltenmuseum
+author: MineTec
+api-version: '1.21.1'
\ No newline at end of file