diff --git a/pom.xml b/pom.xml
index e91939c..488bea1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,10 @@
https://repo.codemc.org/repository/maven-public/
default
+
+ viaversion-repo
+ https://repo.viaversion.com
+
@@ -100,6 +104,12 @@
2.10.0-SNAPSHOT
provided
+
+ com.viaversion
+ viaversion-api
+ 4.5.2-SNAPSHOT
+ provided
+
diff --git a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java
index a798f25..5fcf289 100644
--- a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java
+++ b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java
@@ -45,6 +45,7 @@
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
+import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.HashSet;
@@ -149,11 +150,11 @@
getPluginConfig().getAdventureServers().forEach(Server::despawnPiglin);
}
- public void spawnPiglin(Location location, String serverName, String gpLocationName, String serverDisplayName) {
- spawnPiglin(location, serverName, gpLocationName, serverDisplayName, true);
+ public void spawnPiglin(Location location, String serverName, @Nullable Integer serverVersion, String gpLocationName, String serverDisplayName) {
+ spawnPiglin(location, serverName, serverVersion, gpLocationName, serverDisplayName, true);
}
- public void spawnPiglin(Location location, String serverName, String gpLocationName, String serverDisplayName, boolean saveToConfig) {
+ public void spawnPiglin(Location location, String serverName, @Nullable Integer serverVersion, String gpLocationName, String serverDisplayName, boolean saveToConfig) {
if (entityData.containsKey(serverName)) {
despawnPiglin(entityData.get(serverName).getEntityUUID(), serverName);
}
@@ -163,7 +164,7 @@
piglin.setRemoveWhenFarAway(false);
piglin.setPersistent(true);
piglin.setCustomNameVisible(true);
- addPiglin(piglin.getUniqueId(), serverName, gpLocationName, serverDisplayName, saveToConfig);
+ addPiglin(piglin.getUniqueId(), serverName, serverVersion, gpLocationName, serverDisplayName, saveToConfig);
globalDataHelper.requestInitialData(serverName);
}
@@ -209,7 +210,10 @@
}
public void addPiglin(UUID piglinUUID, String serverName, String gpLocationName, String serverDisplayName, boolean saveToConfig) {
- JoinEntityData entityData = new JoinEntityData(serverName, piglinUUID, gpLocationName, serverDisplayName, JoinEntityData.ServerStatus.OFFLINE, JoinEntityData.EventStatus.NORMAL, 0, 0);
+ addPiglin(piglinUUID, serverName, null, gpLocationName, serverDisplayName, saveToConfig);
+ }
+ public void addPiglin(UUID piglinUUID, String serverName, @Nullable Integer mapVersion, String gpLocationName, String serverDisplayName, boolean saveToConfig) {
+ JoinEntityData entityData = new JoinEntityData(serverName, mapVersion, piglinUUID, gpLocationName, serverDisplayName, JoinEntityData.ServerStatus.OFFLINE, JoinEntityData.EventStatus.NORMAL, 0, 0);
this.entityData.put(serverName, entityData);
this.entityServerMapping.put(piglinUUID, serverName);
diff --git a/src/main/java/de/fanta/challengesjoinentities/Config.java b/src/main/java/de/fanta/challengesjoinentities/Config.java
index 47dfee4..2e793aa 100644
--- a/src/main/java/de/fanta/challengesjoinentities/Config.java
+++ b/src/main/java/de/fanta/challengesjoinentities/Config.java
@@ -54,7 +54,7 @@
float yaw = (float) locSection.getDouble("yaw");
Location location = new Location(world, x, y, z, yaw, 0.0F);
- challengeServers.add(new Server(serverName, server.getString("gpLocation"), server.getString("dir"), ServerType.CHALLENGES, plugin, location));
+ challengeServers.add(new Server(serverName, null, server.getString("gpLocation"), server.getString("dir"), ServerType.CHALLENGES, plugin, location));
}
}
@@ -71,7 +71,7 @@
float yaw = (float) locSection.getDouble("yaw");
Location location = new Location(world, x, y, z, yaw, 0.0F);
- adventureServers.add(new Server(serverName, server.getString("gpLocation"), server.getString("dir"), ServerType.ADVENTURE, plugin, location));
+ adventureServers.add(new Server(serverName, null, server.getString("gpLocation"), server.getString("dir"), ServerType.ADVENTURE, plugin, location));
}
}
diff --git a/src/main/java/de/fanta/challengesjoinentities/JoinEntityData.java b/src/main/java/de/fanta/challengesjoinentities/JoinEntityData.java
index 38d7576..421e8ec 100644
--- a/src/main/java/de/fanta/challengesjoinentities/JoinEntityData.java
+++ b/src/main/java/de/fanta/challengesjoinentities/JoinEntityData.java
@@ -1,6 +1,7 @@
package de.fanta.challengesjoinentities;
import net.md_5.bungee.api.ChatColor;
+import org.jetbrains.annotations.Nullable;
import java.util.UUID;
@@ -15,8 +16,11 @@
private int playerCount;
private int maxPlayers;
- public JoinEntityData(String serverName, UUID entityUUID, String globalPortLocationName, String serverDisplayName, ServerStatus serverStatus, EventStatus eventStatus, int playerCount, int maxPlayers) {
+ private final int mapVersion;
+
+ public JoinEntityData(String serverName, @Nullable Integer mapVersion, UUID entityUUID, String globalPortLocationName, String serverDisplayName, ServerStatus serverStatus, EventStatus eventStatus, int playerCount, int maxPlayers) {
this.serverName = serverName;
+ this.mapVersion = mapVersion == null ? 0 : mapVersion;
this.entityUUID = entityUUID;
this.globalPortLocationName = globalPortLocationName;
this.serverDisplayName = serverDisplayName;
@@ -74,6 +78,10 @@
this.maxPlayers = maxPlayers;
}
+ public int getMapVersion() {
+ return mapVersion;
+ }
+
public String createCustomEntityName() {
String statusString = serverStatus == ServerStatus.ONLINE ? ChatUtil.GREEN + "ONLINE" : serverStatus == ServerStatus.OFFLINE ? ChatUtil.RED + "OFFLINE" : serverStatus == ServerStatus.RUNNING ? ChatUtil.ORANGE + "RUNNING" : "";
String playerCountString = ChatUtil.BLUE + "(" + playerCount + "/" + maxPlayers + ")";
diff --git a/src/main/java/de/fanta/challengesjoinentities/Server.java b/src/main/java/de/fanta/challengesjoinentities/Server.java
index b60d69d..0961c2d 100644
--- a/src/main/java/de/fanta/challengesjoinentities/Server.java
+++ b/src/main/java/de/fanta/challengesjoinentities/Server.java
@@ -1,11 +1,14 @@
package de.fanta.challengesjoinentities;
+import com.viaversion.viaversion.api.Via;
+import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
+import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
@@ -20,6 +23,8 @@
private final String name;
+ private int serverVersion;
+
private final String gPLocation;
private final String dir;
@@ -30,8 +35,9 @@
private boolean online;
- public Server(String name, String gPLocation, String dir, ServerType serverType, ChallengesJoinEntities plugin, Location piglinLocation) {
+ public Server(String name, @Nullable Integer serverVersion, String gPLocation, String dir, ServerType serverType, ChallengesJoinEntities plugin, Location piglinLocation) {
this.name = name;
+ this.serverVersion = serverVersion == null ? 0 : serverVersion;
this.gPLocation = gPLocation;
this.dir = dir;
this.serverType = serverType;
@@ -66,6 +72,10 @@
return this.gPLocation;
}
+ public void setServerVersion(int serverVersion) {
+ this.serverVersion = serverVersion;
+ }
+
public void loadSaved(Player p, String slot) {
this.online = true;
serverPlayers.put(this, p.getUniqueId());
@@ -99,20 +109,27 @@
serverPlayers.remove(this);
return;
}
- load(p, this.serverType.getDir(), path, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG
+ load(p, this.serverType.getDir(), path, getMapVersion(new File(dir + "/Challenges/serverconfig.yml")));
}
- public void loadNewAdventure(Player player, String category, String map) {
- this.online = true;
- serverPlayers.put(this, player.getUniqueId());
- File dir = new File("/home/minecraft/Adventure-Maps", category + "/" + map);
- if (!dir.isDirectory()) {
- ChatUtil.sendErrorMessage(player, "Map " + map + " nicht gefunden!");
- this.online = false;
- serverPlayers.remove(this);
- return;
+ public void loadNewAdventure(Player player, String category, String map, String mapVersion) {
+ int playerVersion = Via.getAPI().getPlayerVersion(player.getUniqueId());
+ int mapProtocolVersion = ProtocolVersion.getClosest(mapVersion).getVersion();
+ if (playerVersion >= mapProtocolVersion) {
+ this.online = true;
+ serverPlayers.put(this, player.getUniqueId());
+ File dir = new File("/home/minecraft/Adventure-Maps", category + "/" + map);
+ if (!dir.isDirectory()) {
+ ChatUtil.sendErrorMessage(player, "Map " + map + " nicht gefunden!");
+ this.online = false;
+ serverPlayers.remove(this);
+ return;
+ }
+
+ load(player, "Adventure-Maps", category + "/" + map, getMapVersion(new File(dir + "/Challenges/serverconfig.yml")));
+ } else {
+ ChatUtil.sendErrorMessage(player, "Du brauchst mindestens die Version " + ChatUtil.BLUE + mapVersion + ChatUtil.RED + " um die Map zu starten!");
}
- load(player, "Adventure-Maps", category + "/" + map, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG
}
public void load(Player p, String serverTypeDir, String targetDir, String ServerVersion) {
@@ -151,6 +168,7 @@
File serverConfigFile = new File("/home/minecraft/Server/" + this.dir + "/plugins/Challenges/serverconfig.yml");
YamlConfiguration serverConfig = new YamlConfiguration();
serverConfig.load(serverConfigFile);
+
String tempServerType = serverConfig.getString("servertype");
if (tempServerType == null || tempServerType.equals("CHALLENGE")) {
serverConfig.set("servertype", "CHALLENGE_LOAD");
@@ -158,6 +176,10 @@
Bukkit.getLogger().info(serverConfigFile.getAbsolutePath());
}
+ if (tempServerType != null || tempServerType.equals("ADVENTURE")) {
+ setServerVersion(ProtocolVersion.getClosest(serverConfig.getString("serverversion")).getVersion());
+ }
+
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
ChatUtil.sendErrorMessage(p, "Map konnte nicht geladen werden!");
@@ -182,7 +204,7 @@
}
public void spawnPiglin(Player player) {
- this.plugin.spawnPiglin(this.piglinLocation, this.name, this.gPLocation, player.getName(), false);
+ this.plugin.spawnPiglin(this.piglinLocation, this.name, this.serverVersion, this.gPLocation, player.getName(), false);
}
public void despawnPiglin() {
diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java
index dd4c2dc..2aba922 100644
--- a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java
+++ b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureMapsUI.java
@@ -6,7 +6,6 @@
import de.fanta.challengesjoinentities.adventure.AdventureMap;
import de.fanta.challengesjoinentities.adventure.Category;
import de.fanta.challengesjoinentities.utils.ui.AbstractWindow;
-import de.fanta.challengesjoinentities.utils.ui.ItemUtil;
import de.iani.cubesideutils.bukkit.items.CustomHeads;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
@@ -22,9 +21,7 @@
import java.util.ArrayList;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
public class AdventureMapsUI extends AbstractWindow {
private final ChallengesJoinEntities plugin;
@@ -120,8 +117,7 @@
return;
}
- int shopItemIndex = (slot - (slot / NUM_OF_COLUMNS))
- + this.scrollAmount * NUM_OF_ITEM_COLUMNS;
+ int shopItemIndex = (slot - (slot / NUM_OF_COLUMNS)) + this.scrollAmount * NUM_OF_ITEM_COLUMNS;
if (shopItemIndex >= this.maps.size()) {
return;
}
@@ -134,7 +130,7 @@
getPlayer().sendMessage(ChallengesJoinEntities.PREFIX_COMPONENT.append(Component.text("MapLink: klick mich :)", TextColor.color(Color.YELLOW.asRGB())).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, map.getWebLink()))));
} else if (!Server.serverPlayers.containsValue(p.getUniqueId())) {
getPlayer().closeInventory();
- this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category.getName(), map.getName()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
+ this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category.getName(), map.getName(), map.getVersion()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
} else {
ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!");
}
diff --git a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java
index a9877dc..3c18cb4 100644
--- a/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java
+++ b/src/main/java/de/fanta/challengesjoinentities/adventure/ui/AdventureSearchGUI.java
@@ -146,7 +146,7 @@
getPlayer().sendMessage(ChallengesJoinEntities.PREFIX_COMPONENT.append(Component.text("MapLink: klick mich :)", TextColor.color(Color.YELLOW.asRGB())).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, map.getWebLink()))));
} else if (!Server.serverPlayers.containsValue(p.getUniqueId())) {
getPlayer().closeInventory();
- this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category.getName(), map.getName()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
+ this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category.getName(), map.getName(), map.getVersion()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
} else {
ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!");
}
diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureTestMapCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureTestMapCommand.java
index 56b8a00..d993264 100644
--- a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureTestMapCommand.java
+++ b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureTestMapCommand.java
@@ -3,6 +3,7 @@
import de.fanta.challengesjoinentities.ChallengesJoinEntities;
import de.fanta.challengesjoinentities.ChatUtil;
import de.fanta.challengesjoinentities.Server;
+import de.fanta.challengesjoinentities.adventure.AdventureMap;
import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.commands.ArgsParser;
import org.bukkit.command.Command;
@@ -27,7 +28,7 @@
if (args.hasNext()) {
String map = args.getNext();
if (!Server.serverPlayers.containsValue(p.getUniqueId())) {
- this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category, map), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
+ this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category, map, plugin.getAdventureMapsConfig().getMap(map).getVersion()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
} else {
ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!");
}
diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/PiglinCommand/AddEntityCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/PiglinCommand/AddEntityCommand.java
index 9cf45b2..ba21215 100644
--- a/src/main/java/de/fanta/challengesjoinentities/commands/PiglinCommand/AddEntityCommand.java
+++ b/src/main/java/de/fanta/challengesjoinentities/commands/PiglinCommand/AddEntityCommand.java
@@ -47,7 +47,7 @@
if (plugin.getGlobalDataHelper().getServer(serverName) != null) {
String serverDisplayName = StringUtil.convertColors(args.getAll(serverName));
- plugin.spawnPiglin(((Player) sender).getLocation(), serverName, locationName, serverDisplayName);
+ plugin.spawnPiglin(((Player) sender).getLocation(), serverName, null, locationName, serverDisplayName);
ChatUtil.sendNormalMessage(sender, "Piglin hinzugefügt! *grunz*");
} else {
ChatUtil.sendErrorMessage(sender, "Server nicht gefunden!");
diff --git a/src/main/java/de/fanta/challengesjoinentities/listeners/EntityListener.java b/src/main/java/de/fanta/challengesjoinentities/listeners/EntityListener.java
index d3621ff..6a738b7 100644
--- a/src/main/java/de/fanta/challengesjoinentities/listeners/EntityListener.java
+++ b/src/main/java/de/fanta/challengesjoinentities/listeners/EntityListener.java
@@ -1,5 +1,7 @@
package de.fanta.challengesjoinentities.listeners;
+import com.viaversion.viaversion.api.Via;
+import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import de.fanta.challengesjoinentities.ChallengesJoinEntities;
import de.fanta.challengesjoinentities.ChatUtil;
import de.fanta.challengesjoinentities.JoinEntityData;
@@ -82,7 +84,13 @@
ChatUtil.sendWarningMessage(player, "Der erste Spieler muss VIP haben!");
ChatUtil.sendWarningMessage(player, "Um VIP zu bekommen musst du im Freebuild (/tt) /voteshop eingeben!");
} else {
- GlobalApi.portOnlinePlayerToLocation(player.getName(), data.getGlobalPortLocationName());
+ int playerVersion = Via.getAPI().getPlayerVersion(player.getUniqueId());
+ int mapProtocolVersion = data.getMapVersion();
+ if (playerVersion >= mapProtocolVersion) {
+ GlobalApi.portOnlinePlayerToLocation(player.getName(), data.getGlobalPortLocationName());
+ } else {
+ ChatUtil.sendErrorMessage(player, "Du brauchst mindestens die Version " + ChatUtil.BLUE + ProtocolVersion.getProtocol(data.getMapVersion()).getName() + ChatUtil.RED + " um die Map zu betreten!");
+ }
}
} else {
ChatUtil.sendErrorMessage(player, "Der Server ist bereits voll!");
diff --git a/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java b/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java
index 59b8a45..c365464 100644
--- a/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java
+++ b/src/main/java/de/fanta/challengesjoinentities/listeners/PlayerListener.java
@@ -64,7 +64,7 @@
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
PlayerData data = UtilsApiBukkit.getInstance().getPlayerData(e.getPlayer());
- if (data.getLastJoin() + (5 * 1000) > System.currentTimeMillis()) {
+ if (data.getLastJoin() + (10 * 1000) > System.currentTimeMillis()) {
String hosteName = CubesideUtilsBukkit.getInstance().getPlayerData(e.getPlayer()).getHostName().toLowerCase();
if (hosteName.startsWith("challenge")) {
GlobalApi.portOnlinePlayerToLocation(e.getPlayer().getName(), "challenge");
diff --git a/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java b/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java
index 40ffae6..e55c6d5 100644
--- a/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java
+++ b/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java
@@ -175,8 +175,8 @@
File mapConfig = new File(save, "/Challenges/serverconfig.yml");
Material displayItem = null;
String displayName = null;
+ YamlConfiguration serverConfig = new YamlConfiguration();
try {
- YamlConfiguration serverConfig = new YamlConfiguration();
serverConfig.load(mapConfig);
String itemType = serverConfig.getString("displayItem.item");
String itemName = serverConfig.getString("displayItem.name");
@@ -196,7 +196,7 @@
ItemStack stack = new ItemStack(displayItem != null ? displayItem : Material.MAP);
ItemMeta meta = stack.getItemMeta();
meta.setDisplayName(displayName != null ? displayName : ChatUtil.GREEN + "Save " + saveSlot.getSlot());
- meta.setLore(List.of(ChatUtil.GREEN + "Gespeichert am " + getFileDate(save)));
+ meta.setLore(List.of(ChatUtil.GREEN + "Version: " + ChatUtil.BLUE + serverConfig.getString("serverversion"), ChatUtil.GREEN + "Gespeichert am: " + ChatUtil.BLUE + getFileDate(save)));
stack.setItemMeta(meta);
item = stack;
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 533be69..73017e4 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -5,7 +5,7 @@
api-version: 1.13
depend: [GlobalClient, CubesideUtils, GlobalPort, CubesideNMSUtils, CubesideStatistics]
-softdepend: [Challenges, CubesideNPCs, SignGUI]
+softdepend: [Challenges, CubesideNPCs, SignGUI, ViaVersion]
commands:
piglins: