diff --git a/pom.xml b/pom.xml
index dd9997e..2bb5127 100644
--- a/pom.xml
+++ b/pom.xml
@@ -134,17 +134,20 @@
-
-
+
+ plugilyprojects-snapshots
+ https://maven.plugily.xyz/snapshots
+
MikeRepo
https://repo.mikeprimm.com/
+
+ packetevents-repo
+ https://repo.retrooper.dev/public/
+
@@ -484,10 +487,9 @@
- pl.plajer
+ plugily.projects
villagedefense
- 4.4.2
- provided
+ 4.7.0-SNAPSHOT7
@@ -525,6 +527,13 @@
Konquest
0.12.0
+
+
+
+ com.github.retrooper
+ packetevents-spigot
+ 2.8.0
+
diff --git a/src/au/com/addstar/pandora/MasterPlugin.java b/src/au/com/addstar/pandora/MasterPlugin.java
index f6c5212..cdf4c02 100644
--- a/src/au/com/addstar/pandora/MasterPlugin.java
+++ b/src/au/com/addstar/pandora/MasterPlugin.java
@@ -128,6 +128,7 @@ private void registerModules() {
registerModule("RPlaceDynmap", "au.com.addstar.pandora.modules.RPlaceDynmap", "dynmap", "RPlace");
registerModule("Konquest", "au.com.addstar.pandora.modules.Konquest", "Konquest");
registerModule("MineChessHelper", "au.com.addstar.pandora.modules.MineChessHelper","MineChessPlus", "ChatControl");
+ registerModule("OverworldHijack", "au.com.addstar.pandora.modules.OverworldHijack", "PacketEvents");
}
@Override
diff --git a/src/au/com/addstar/pandora/modules/OverworldHijack.java b/src/au/com/addstar/pandora/modules/OverworldHijack.java
new file mode 100644
index 0000000..08770f8
--- /dev/null
+++ b/src/au/com/addstar/pandora/modules/OverworldHijack.java
@@ -0,0 +1,79 @@
+package au.com.addstar.pandora.modules;
+
+import au.com.addstar.pandora.AbstractModule;
+import au.com.addstar.pandora.AutoConfig;
+import au.com.addstar.pandora.ConfigField;
+import au.com.addstar.pandora.MasterPlugin;
+import com.github.retrooper.packetevents.PacketEvents;
+import com.github.retrooper.packetevents.event.PacketListener;
+import com.github.retrooper.packetevents.event.PacketSendEvent;
+import com.github.retrooper.packetevents.packettype.PacketType;
+import com.github.retrooper.packetevents.protocol.world.DimensionType;
+import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerJoinGame;
+import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerRespawn;
+import org.bukkit.entity.Player;
+import java.io.File;
+
+public class OverworldHijack extends AbstractModule implements PacketListener {
+
+ private MasterPlugin plugin;
+ private Config config;
+
+ @Override
+ public void onEnable() {
+ if (config != null && config.load()) {
+ config.save();
+ debug = config.debug;
+ }
+ PacketEvents.get().getEventManager().registerListener(this);
+ }
+
+ @Override
+ public void onDisable() {
+ PacketEvents.get().getEventManager().unregisterListener(this);
+ plugin = null;
+ config = null;
+ }
+
+ @Override
+ public void setPandoraInstance(MasterPlugin plugin) {
+ this.plugin = plugin;
+ this.config = new Config(new File(plugin.getDataFolder(), "OverworldHijack.yml"));
+ }
+
+ @Override
+ public void onPacketSend(PacketSendEvent event) {
+ if (event.getPacketType() == PacketType.Play.Server.JOIN_GAME) {
+ WrapperPlayServerJoinGame packet = new WrapperPlayServerJoinGame(event);
+ handle(packet, event.getPlayer());
+ } else if (event.getPacketType() == PacketType.Play.Server.RESPAWN) {
+ WrapperPlayServerRespawn packet = new WrapperPlayServerRespawn(event);
+ handle(packet, event.getPlayer());
+ }
+ }
+
+ private void handle(WrapperPlayServerJoinGame packet, Player player) {
+ DimensionType dim = packet.getDimensionType();
+ if (dim != DimensionType.NETHER && dim != DimensionType.END) {
+ debugLog("Spoofing join dimension for " + player.getName());
+ packet.setDimensionType(DimensionType.OVERWORLD);
+ packet.setDimension(DimensionType.OVERWORLD);
+ }
+ }
+
+ private void handle(WrapperPlayServerRespawn packet, Player player) {
+ DimensionType dim = packet.getDimensionType();
+ if (dim != DimensionType.NETHER && dim != DimensionType.END) {
+ debugLog("Spoofing respawn dimension for " + player.getName());
+ packet.setDimensionType(DimensionType.OVERWORLD);
+ packet.setDimension(DimensionType.OVERWORLD);
+ }
+ }
+
+ private class Config extends AutoConfig {
+ public Config(File file) { super(file); }
+
+ @ConfigField(comment = "Enable debugging")
+ public boolean debug = false;
+ }
+}
diff --git a/src/resources/OverworldHijack.yml b/src/resources/OverworldHijack.yml
new file mode 100644
index 0000000..e0c5ca1
--- /dev/null
+++ b/src/resources/OverworldHijack.yml
@@ -0,0 +1,2 @@
+# Enable debug logging
+#debug: true
diff --git a/src/resources/plugin.yml b/src/resources/plugin.yml
index 966cb77..d19cf29 100644
--- a/src/resources/plugin.yml
+++ b/src/resources/plugin.yml
@@ -5,7 +5,7 @@ description: ${project.description}
main: ${mainClass}
-softdepend: [geSuitHomes, Multiverse-Core, My_Worlds, GriefPrevention, QuickShop, VanishNoPacket, Citizens, Votifier, Monolith, Minigames, MurderMystery, BuildBattle, VillageDefense, PrisonMines, ChatControl, RPlace, Konquest, Treasures, Slimefun]
+softdepend: [geSuitHomes, Multiverse-Core, My_Worlds, GriefPrevention, QuickShop, VanishNoPacket, Citizens, Votifier, Monolith, Minigames, MurderMystery, BuildBattle, VillageDefense, PrisonMines, ChatControl, RPlace, Konquest, Treasures, Slimefun, PacketEvents]
loadbefore: [CommandHelper]