Added option to leave Server and go back to main server
This commit is contained in:
parent
6b2b25ce5e
commit
a00c1f174c
@ -1,31 +1,67 @@
|
||||
package eu.mhsl.craftattack.worldmuseum.inventory;
|
||||
|
||||
import eu.mhsl.craftattack.worldmuseum.util.BunggeCordComunicator;
|
||||
import eu.mhsl.craftattack.worldmuseum.util.MuseumPlayer;
|
||||
import eu.mhsl.craftattack.worldmuseum.worlds.World;
|
||||
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.inventory.Inventory;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
import net.minestom.server.timer.TaskSchedule;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class WorldSelector extends Inventory {
|
||||
public WorldSelector() {
|
||||
super(InventoryType.CHEST_1_ROW, Component.text("Weltenauswahl").color(NamedTextColor.DARK_GRAY));
|
||||
|
||||
List<World> worlds = WorldManager.getInstance().getWorlds();
|
||||
for (int i = 0; i < worlds.size(); i++) {
|
||||
World world = worlds.get(i);
|
||||
setItemStack(i, world.getItem());
|
||||
}
|
||||
// Limit to seven worlds, so no overflow occurs // TODO make inventory bigger when more items are added
|
||||
List<World> worlds = WorldManager
|
||||
.getInstance()
|
||||
.getWorlds()
|
||||
.stream()
|
||||
.limit(7)
|
||||
.toList();
|
||||
|
||||
addInventoryCondition((player, slot, clickType, inventoryConditionResult) -> {
|
||||
Map<Integer, World> worldIndex = IntStream
|
||||
.range(0, worlds.size())
|
||||
.boxed()
|
||||
.collect(Collectors.toMap(i -> i, worlds::get));
|
||||
|
||||
worldIndex.forEach((integer, world) -> setItemStack(integer, world.getItem()));
|
||||
|
||||
setItemStack(8, ItemStack.of(Material.IRON_DOOR).withDisplayName(Component.text("Zurück zum Server").color(NamedTextColor.GOLD)));
|
||||
|
||||
addInventoryCondition((p, slot, clickType, inventoryConditionResult) -> {
|
||||
MuseumPlayer player = (MuseumPlayer) p;
|
||||
inventoryConditionResult.setCancel(true);
|
||||
if(player.isLoading()) return;
|
||||
|
||||
player.closeInventory();
|
||||
try {
|
||||
worlds.get(slot).movePlayer(player);
|
||||
} catch (IndexOutOfBoundsException ignore) {}
|
||||
// leave World-Museum
|
||||
if(slot == 8) {
|
||||
player.closeInventory();
|
||||
player.startLoading();
|
||||
|
||||
BunggeCordComunicator.connect(player, "server");
|
||||
|
||||
MinecraftServer.getSchedulerManager().scheduleTask(() -> {
|
||||
if(player.isOnline()) player.kick("Timeout beim Serverwechsel. Bitte joine dem Server erneut!");
|
||||
}, TaskSchedule.seconds(5), TaskSchedule.stop());
|
||||
return;
|
||||
}
|
||||
|
||||
// join any world
|
||||
if(worldIndex.containsKey(slot)) {
|
||||
player.closeInventory();
|
||||
worldIndex.get(slot).movePlayer(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package eu.mhsl.craftattack.worldmuseum.util;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.packet.server.play.PluginMessagePacket;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class BunggeCordComunicator {
|
||||
private static final String bungeeTargetSelector = "BungeeCord";
|
||||
public static void connect(Player p, String bungeeServerTargetName) {
|
||||
try {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
out.write("Connect".getBytes(StandardCharsets.UTF_8));
|
||||
out.write(bungeeServerTargetName.getBytes(StandardCharsets.UTF_8));
|
||||
p.sendPacket(new PluginMessagePacket(bungeeTargetSelector, out.toByteArray()));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -49,6 +49,10 @@ public class MuseumPlayer extends Player {
|
||||
isLoading = false;
|
||||
}
|
||||
|
||||
public boolean isLoading() {
|
||||
return isLoading;
|
||||
}
|
||||
|
||||
public void updateFlyingSpeed(float speed) {
|
||||
speed = MathUtils.clamp(getFlyingSpeed() + speed, 0.01f, 0.2f);
|
||||
setFlyingSpeed(speed);
|
||||
|
Reference in New Issue
Block a user