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]