added Compass to swich worlds

This commit is contained in:
Martin Olischläger 2023-04-16 23:14:08 +02:00
parent 04f3f6b448
commit 447ecf2a93
6 changed files with 108 additions and 57 deletions

View File

@ -4,27 +4,23 @@ 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.ClickListener;
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.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.GameMode;
import net.minestom.server.entity.Player;
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.instance.InstanceContainer;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.instance.block.Block;
import net.minestom.server.timer.TaskSchedule;
import java.util.ArrayList;
import java.util.List;
public class Main {
static int PORT = 25565;
static String IP = "0.0.0.0";
@ -36,6 +32,8 @@ public class Main {
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
//temp
// MinecraftServer.getConnectionManager().setPlayerProvider(ExploringPlayer::new);
MinecraftServer.setChunkViewDistance(8);
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
@ -47,12 +45,17 @@ public class Main {
config.loadConfig();
World startworld = config.getStart_world();
//CompassManager
CompassManager compassManager = CompassManager.getInstance();
compassManager.loadCommpassManager();
// Add an event callback to specify the spawning instance (and the spawn position)
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
//listeners
globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener());
globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading());
globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener());
//commands
MinecraftServer.getCommandManager().register(new TeleportCommand());
@ -62,21 +65,15 @@ public class Main {
globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
final Player player = event.getPlayer();
event.setSpawningInstance(startworld);
player.setRespawnPoint(startworld.getSpawn());
player.setGameMode(GameMode.CREATIVE);
// for (int i = 0; i< WorldManager.getInstance().getWorlds().size(); i++) {
// if (WorldManager.getInstance().getWorlds().get(i).isEnabled()) {
// player.getInventory().setItemStack(i, WorldManager.getInstance().getWorlds().get(i).getItem());
// } else {
// System.out.println("Es gibt nicht aktivierte Welten!");
// }
// }
player.getInventory().setItemStack(0, compassManager.getCompass());
});
try {
PORT = Integer.parseInt(args[0]);
} catch (Exception e) {

View File

@ -1,33 +0,0 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.minestom.server.entity.Player;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.item.ItemStack;
import java.util.function.Consumer;
public class ClickListener implements Consumer<PlayerUseItemEvent> {
@Override
public void accept(PlayerUseItemEvent playerUseItemEvent) {
Player p = playerUseItemEvent.getPlayer();
ItemStack usedItem = playerUseItemEvent.getItemStack();
for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) {
World world = WorldManager.getInstance().getWorlds().get(i);
if (world.getItem().equals(usedItem)) {
if (p.getInstance().equals(world)) {
tpToSpawn(p, world);
return;
};
p.setInstance(world, world.getSpawn());
}
}
}
private void tpToSpawn(Player player, World world) {
player.teleport(world.getSpawn());
}
}

View File

@ -0,0 +1,20 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager;
import net.minestom.server.entity.Player;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.item.ItemStack;
import java.util.function.Consumer;
public class CompassUseListener implements Consumer<PlayerUseItemEvent> {
@Override
public void accept(PlayerUseItemEvent playerUseItemEvent) {
Player p = playerUseItemEvent.getPlayer();
ItemStack usedItem = playerUseItemEvent.getItemStack();
CompassManager compassManager = CompassManager.getInstance();
if (!usedItem.equals(compassManager.getCompass())) return;
p.openInventory(compassManager.getInventory());
}
}

View File

@ -0,0 +1,33 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.minestom.server.entity.Player;
import net.minestom.server.event.inventory.InventoryPreClickEvent;
import java.util.Iterator;
import java.util.function.Consumer;
public class InventoryClickListener implements Consumer<InventoryPreClickEvent> {
@Override
public void accept(InventoryPreClickEvent inventoryPreClickEvent) {
Player p = inventoryPreClickEvent.getPlayer();
inventoryPreClickEvent.setCancelled(true);
WorldManager worldManager = WorldManager.getInstance();
Iterator iterator = worldManager.getWorlds().iterator();
while (iterator.hasNext()) {
World w = (World) iterator.next();
if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue;
if (p.getInstance().equals(w)) {
p.closeInventory();
p.teleport(w.getSpawn());
return;
} else {
p.closeInventory();
p.setInstance(w);
p.teleport(w.getSpawn());
return;
}
}
}
}

View File

@ -11,19 +11,18 @@ import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.utils.NamespaceID;
import net.minestom.server.world.DimensionType;
import java.io.*;
import java.util.UUID;
public class World extends InstanceContainer {
private static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
private File file;
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 String name = "default";
private Pos spawn = new Pos(0,0,0);
private Material material = Material.GRASS_BLOCK;
private boolean enabled = false;
private String defaultConfig = "{\n" +
private final String defaultConfig = "{\n" +
" \"enabled\": false,\n" +
" \"name\": \"DEFAULT_NAME\",\n" +
" \"material\": \"GRASS_BLOCK\",\n" +

View File

@ -0,0 +1,35 @@
package eu.mhsl.craftattack.worldmuseum.worldswiching;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.kyori.adventure.text.Component;
import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
public class CompassManager {
static CompassManager instance;
ItemStack compass;
Inventory inventory;
public static CompassManager getInstance() {
if (instance == null) instance = new CompassManager();
return instance;
}
public void loadCommpassManager() {
compass = ItemStack.builder(Material.COMPASS).displayName(Component.text("World-changer")).build();
inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("World-changer"));
for (World w : WorldManager.getInstance().getWorlds()) {
inventory.addItemStack(w.getItem());
}
}
public ItemStack getCompass() {
return compass;
}
public Inventory getInventory() {
return inventory;
}
}