mirror of
https://github.com/sekwah41/Advanced-Portals.git
synced 2024-11-22 10:36:17 +01:00
Updated to 1.16
Solves #200 Also removed the compat file so this should be far more forwards compatible
This commit is contained in:
parent
4012e9bc01
commit
1c413c82e5
@ -41,7 +41,8 @@ repositories {
|
||||
|
||||
// includeLibs just says to include the library in the final jar
|
||||
dependencies {
|
||||
implementation "org.bukkit:bukkit:1.15.1-R0.1-SNAPSHOT"
|
||||
//implementation "org.bukkit:bukkit:1.16.1-R0.1-SNAPSHOT"
|
||||
implementation "org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT"
|
||||
implementation "net.md-5:bungeecord-api:1.15-SNAPSHOT"
|
||||
|
||||
implementation "io.netty:netty-all:4.0.4.Final"
|
||||
|
@ -6,6 +6,9 @@ import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
|
||||
import com.sekwah.advancedportals.bukkit.listeners.Listeners;
|
||||
import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal;
|
||||
import com.sekwah.advancedportals.bukkit.portals.Portal;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.*;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@ -23,6 +26,7 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.material.Wool;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import javax.xml.soap.Text;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -462,21 +466,31 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
|
||||
player.sendMessage(PluginMessages.customPrefixFail + " You had no portal selected!");
|
||||
}
|
||||
case "gui":
|
||||
// /portal gui remove testarg
|
||||
if (args.length > 1) {
|
||||
if (args[1].toLowerCase().equals("remove") && args.length > 2) {
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(PluginMessages.customPrefixFail
|
||||
+ " Are you sure you would like to remove the portal \u00A7e" + args[2]
|
||||
+ "\u00A7c?");
|
||||
|
||||
TextComponent removeMessage = new TextComponent();
|
||||
TextComponent yes = new TextComponent("[Yes]");
|
||||
yes.setColor(ChatColor.YELLOW);
|
||||
yes.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal remove " + args[2]));
|
||||
yes.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Confirm removing this portal").create()));
|
||||
TextComponent no = new TextComponent("[No]");
|
||||
no.setColor(ChatColor.YELLOW);
|
||||
no.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal edit " + args[2]));
|
||||
no.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Cancel removing this portal").create()));
|
||||
|
||||
removeMessage.addExtra(" ");
|
||||
removeMessage.addExtra(yes);
|
||||
removeMessage.addExtra(" ");
|
||||
removeMessage.addExtra(no);
|
||||
|
||||
sender.sendMessage("");
|
||||
plugin.compat.sendRawMessage(
|
||||
"{\"text\":\" \",\"extra\":[{\"text\":\"\u00A7e[Yes]\",\"hoverEvent\":{\"action\":\"show_text\","
|
||||
+ "\"value\":\"Confirm removing this portal\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal remove "
|
||||
+ args[2] + "\"}}, "
|
||||
+ "{\"text\":\" \"},{\"text\":\"\u00A7e[No]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Cancel removing this portal\"}"
|
||||
+ ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal edit "
|
||||
+ args[2] + "\"}}]}",
|
||||
player);
|
||||
sender.spigot().sendMessage(removeMessage);
|
||||
sender.sendMessage("");
|
||||
}
|
||||
}
|
||||
@ -551,11 +565,11 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
|
||||
// TODO add the command autocompletes, add, remove and show
|
||||
if (args[1].toLowerCase().equals("add")) {
|
||||
if (args.length > 2) {
|
||||
String portalCommand = args[2];
|
||||
StringBuilder portalCommand = new StringBuilder(args[2]);
|
||||
for (int i = 3; i < args.length; i++) {
|
||||
portalCommand += args[i];
|
||||
portalCommand.append(args[i]);
|
||||
}
|
||||
if (Portal.addCommand(portalName, portalCommand)) {
|
||||
if (Portal.addCommand(portalName, portalCommand.toString())) {
|
||||
sender.sendMessage(
|
||||
PluginMessages.customPrefixFail + " Command added to portal!");
|
||||
} else {
|
||||
@ -826,15 +840,65 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
|
||||
sender.sendMessage("");
|
||||
|
||||
Player player = (Player) sender;
|
||||
/*TextComponent editMessage = new TextComponent();
|
||||
editMessage.setColor(ChatColor.GREEN);*/
|
||||
/* TextComponent yes = new TextComponent("Functions");
|
||||
yes.setColor(ChatColor.YELLOW);
|
||||
yes.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal remove " + args[2]));
|
||||
yes.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Confirm removing this portal").create()));
|
||||
TextComponent no = new TextComponent("[No]");
|
||||
no.setColor(ChatColor.YELLOW);
|
||||
no.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal edit " + args[2]));
|
||||
no.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Cancel removing this portal").create()));
|
||||
|
||||
plugin.compat.sendRawMessage("{\"text\":\"\u00A7aFunctions\u00A7e: \","
|
||||
removeMessage.addExtra(" ");
|
||||
removeMessage.addExtra(no);
|
||||
removeMessage.addExtra(" ");
|
||||
removeMessage.addExtra(yes);*/
|
||||
|
||||
TextComponent removeButton = new TextComponent("Remove");
|
||||
removeButton.setColor(ChatColor.YELLOW);
|
||||
removeButton.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new ComponentBuilder("Remove the selected portal").create()));
|
||||
removeButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
"/portal gui remove " + portalName));
|
||||
|
||||
TextComponent showButton = new TextComponent("Show");
|
||||
showButton.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new ComponentBuilder("Show the selected portal").create()));
|
||||
showButton.setColor(ChatColor.YELLOW);
|
||||
showButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal show " + portalName));
|
||||
|
||||
TextComponent renameButton = new TextComponent("Rename");
|
||||
renameButton.setColor(ChatColor.YELLOW);
|
||||
renameButton.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new ComponentBuilder("Change the name of the portal").create()));
|
||||
renameButton.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/portal rename "));
|
||||
|
||||
TextComponent activateButton = new TextComponent("Activate");
|
||||
activateButton.setColor(ChatColor.YELLOW);
|
||||
activateButton.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new ComponentBuilder("Trigger it as if you've just walked into it (Minus failing knockback)").create()));
|
||||
activateButton.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/portal warp " + portalName));
|
||||
|
||||
BaseComponent[] editMessage = new ComponentBuilder("Functions").color(ChatColor.GREEN)
|
||||
.append(": ").color(ChatColor.YELLOW)
|
||||
.append(removeButton).append(" ")
|
||||
.append(showButton).append(" ")
|
||||
.append(renameButton).append(" ")
|
||||
.append(activateButton).append(" ")
|
||||
.create();
|
||||
|
||||
sender.spigot().sendMessage(editMessage);
|
||||
|
||||
/*player.spigot().sendMessage(TextComponent.fromLegacyText("{\"text\":\"\u00A7aFunctions\u00A7e: \","
|
||||
+ "\"extra\":[{\"text\":\"\u00A7eRemove\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Remove the selected portal\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal gui remove "
|
||||
+ portalName + "\"}}"
|
||||
+ ",{\"text\":\" \"},{\"text\":\"\u00A7eShow\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Show the selected portal\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal show "
|
||||
+ portalName + "\"}}"
|
||||
+ ",{\"text\":\" \"},{\"text\":\"\u00A7eRename\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Change the name of the portal\"},\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"/portal rename \"}}"
|
||||
+ ",{\"text\":\" \"},{\"text\":\"\u00A7eTeleport\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Teleport to the set destination\n(If there is one)\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/desti warp "
|
||||
+ destination + "\"}}]}", player);
|
||||
+ destination + "\"}}]}"));*/
|
||||
|
||||
sender.sendMessage("");
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.sekwah.advancedportals.bukkit;
|
||||
|
||||
import com.sekwah.advancedportals.bukkit.compat.CraftBukkit;
|
||||
import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
|
||||
import com.sekwah.advancedportals.bukkit.config.ConfigHelper;
|
||||
import com.sekwah.advancedportals.bukkit.destinations.Destination;
|
||||
@ -14,7 +13,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class AdvancedPortalsPlugin extends JavaPlugin {
|
||||
|
||||
public CraftBukkit compat = null;
|
||||
//public CraftBukkit compat = null;
|
||||
private Settings settings;
|
||||
|
||||
public String channelName = "mc:advancedportals";
|
||||
@ -29,65 +28,52 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
|
||||
|
||||
saveDefaultConfig();
|
||||
|
||||
Metrics metrics = new Metrics(this);
|
||||
/*Metrics metrics = */
|
||||
new Metrics(this);
|
||||
|
||||
try {
|
||||
|
||||
this.compat = new CraftBukkit(this, version);
|
||||
//this.compat = new CraftBukkit(this, version);
|
||||
|
||||
ConfigAccessor config = new ConfigAccessor(this, "config.yml");
|
||||
ConfigAccessor config = new ConfigAccessor(this, "config.yml");
|
||||
|
||||
ConfigHelper configHelper = new ConfigHelper(config.getConfig());
|
||||
ConfigHelper configHelper = new ConfigHelper(config.getConfig());
|
||||
|
||||
configHelper.update();
|
||||
configHelper.update();
|
||||
|
||||
config.saveConfig();
|
||||
config.saveConfig();
|
||||
|
||||
// TODO reenable and finish but probably focus on the recode first
|
||||
// TODO reenable and finish but probably focus on the recode first
|
||||
/*if(config.getConfig().getBoolean("DisableGatewayBeam", true)) {
|
||||
new PacketInjector(this, version);
|
||||
}*/
|
||||
|
||||
ConfigAccessor portalConfig = new ConfigAccessor(this, "portals.yml");
|
||||
portalConfig.saveDefaultConfig();
|
||||
ConfigAccessor portalConfig = new ConfigAccessor(this, "portals.yml");
|
||||
portalConfig.saveDefaultConfig();
|
||||
|
||||
|
||||
ConfigAccessor destinationConfig = new ConfigAccessor(this, "destinations.yml");
|
||||
destinationConfig.saveDefaultConfig();
|
||||
ConfigAccessor destinationConfig = new ConfigAccessor(this, "destinations.yml");
|
||||
destinationConfig.saveDefaultConfig();
|
||||
|
||||
this.settings = new Settings(this);
|
||||
this.settings = new Settings(this);
|
||||
|
||||
// Loads the portal and destination editors
|
||||
new Portal(this);
|
||||
new Destination(this);
|
||||
// Loads the portal and destination editors
|
||||
new Portal(this);
|
||||
new Destination(this);
|
||||
|
||||
|
||||
this.registerCommands();
|
||||
this.registerCommands();
|
||||
|
||||
new WarpEffects(this);
|
||||
new WarpEffects(this);
|
||||
|
||||
this.addListeners();
|
||||
this.setupDataCollector();
|
||||
this.addListeners();
|
||||
this.setupDataCollector();
|
||||
|
||||
this.setupBungee();
|
||||
this.setupBungee();
|
||||
|
||||
this.getServer().getConsoleSender().sendMessage("\u00A7aAdvanced portals have been successfully enabled!");
|
||||
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
this.getLogger().warning("This version of craftbukkit is not yet supported, please notify sekwah and tell him about this version v:" + version);
|
||||
this.getLogger().warning("Along with the above stacktrace");
|
||||
this.setEnabled(false);
|
||||
} catch (IllegalArgumentException |
|
||||
NoSuchFieldException | SecurityException | NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
this.getLogger().warning("Something went wrong, please notify sekwah and tell him about this version v:" + version);
|
||||
this.getLogger().warning("Along with the above stacktrace");
|
||||
this.setEnabled(false);
|
||||
}
|
||||
this.getServer().getConsoleSender().sendMessage("\u00A7aAdvanced portals have been successfully enabled!");
|
||||
|
||||
for (Player player:
|
||||
this.getServer().getOnlinePlayers()) {
|
||||
this.getServer().getOnlinePlayers()) {
|
||||
player.removeMetadata("hasWarped", this);
|
||||
player.removeMetadata("lavaWarped", this);
|
||||
}
|
||||
|
@ -1,90 +0,0 @@
|
||||
package com.sekwah.advancedportals.bukkit.compat;
|
||||
|
||||
import com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin;
|
||||
import com.sekwah.advancedportals.bukkit.reflection.ReflectionHelper;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class CraftBukkit {
|
||||
|
||||
private final AdvancedPortalsPlugin plugin;
|
||||
|
||||
// Data for chat bar and json message
|
||||
private Method chatMessageTypeMethod;
|
||||
|
||||
private Method serializeMessage;
|
||||
private Constructor<?> chatPacketConstructor;
|
||||
|
||||
private Method playerGetHandle;
|
||||
private Field playerConnection;
|
||||
private Method sendPacket;
|
||||
|
||||
|
||||
public CraftBukkit(AdvancedPortalsPlugin plugin, String bukkitImpl) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
|
||||
|
||||
this.plugin = plugin;
|
||||
|
||||
try {
|
||||
String craftBukkitPackage = "org.bukkit.craftbukkit." + bukkitImpl + ".";
|
||||
String minecraftPackage = "net.minecraft.server." + bukkitImpl + ".";
|
||||
|
||||
this.plugin.getLogger().info("Bukkit version detected " + bukkitImpl);
|
||||
|
||||
Class<?> chatBaseComponent = Class.forName(minecraftPackage + "IChatBaseComponent"); // string to packet methods
|
||||
Class<?> chatSerialClass = ReflectionHelper.findClass(chatBaseComponent, "ChatSerializer");
|
||||
|
||||
Class<?> chatMessageTypeClass = Class.forName(minecraftPackage + "ChatMessageType");
|
||||
|
||||
this.chatMessageTypeMethod = chatMessageTypeClass.getMethod("a", byte.class);
|
||||
|
||||
this.chatPacketConstructor = Class.forName(minecraftPackage + "PacketPlayOutChat").getConstructor(chatBaseComponent, chatMessageTypeClass);
|
||||
|
||||
|
||||
this.serializeMessage = chatSerialClass.getMethod("a", String.class);
|
||||
|
||||
this.playerGetHandle = Class.forName(craftBukkitPackage + "entity.CraftPlayer").getMethod("getHandle");
|
||||
this.playerConnection = Class.forName(minecraftPackage + "EntityPlayer").getField("playerConnection"); // get player connection
|
||||
Class<?> packet = Class.forName(minecraftPackage + "Packet");
|
||||
this.sendPacket = playerConnection.getType().getMethod("sendPacket", packet);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
plugin.getLogger().warning("Attempting to use backup porekit locations");
|
||||
// Fall back on your Porekit
|
||||
Class<?> textBaseComponent = Class.forName("net.minecraft.util.text.ITextComponent"); // string to packet methods
|
||||
this.serializeMessage = ReflectionHelper.findClass(textBaseComponent, "Serializer").getMethod("func_150699_a", String.class); // md: jsonToComponent
|
||||
this.chatPacketConstructor = Class.forName("net.minecraft.network.play.server.SPacketChat").getConstructor(textBaseComponent, byte.class);
|
||||
|
||||
this.playerGetHandle = Class.forName("blue.lapis.pore.impl.entity.PorePlayer").getMethod("getHandle");
|
||||
this.playerConnection = Class.forName("net.minecraft.entity.player.EntityPlayerMP").getField("field_71135_a"); // get player connection fd: connection
|
||||
Class<?> packet = Class.forName("net.minecraft.network.Packet");
|
||||
this.sendPacket = playerConnection.getType().getMethod("func_147359_a", packet); //md: sendPacket
|
||||
}
|
||||
}
|
||||
|
||||
public void sendRawMessage(String rawMessage, Player player) {
|
||||
this.sendMessage(rawMessage,player, (byte) 1);
|
||||
}
|
||||
|
||||
public void sendActionBarMessage(String rawMessage, Player player) {
|
||||
this.sendMessage("{\"text\":\"" + rawMessage + "\"}",player, (byte) 2);
|
||||
}
|
||||
|
||||
public void sendMessage(String rawMessage, Player player, byte msgType) {
|
||||
try {
|
||||
Object comp = this.serializeMessage.invoke(null, rawMessage);
|
||||
Object packet = this.chatPacketConstructor.newInstance(comp, this.chatMessageTypeMethod.invoke(null,msgType)); // convert bytes into packet
|
||||
|
||||
Object handle = this.playerGetHandle.invoke(player);
|
||||
Object playerConnection = this.playerConnection.get(handle); // get players connection
|
||||
sendPacket.invoke(playerConnection, packet); // send packet
|
||||
} catch (IllegalAccessException | InvocationTargetException | InstantiationException e) {
|
||||
this.plugin.getLogger().warning("Error creating raw message, something must be wrong with reflection");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,8 @@ import com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin;
|
||||
import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
|
||||
import com.sekwah.advancedportals.bukkit.PluginMessages;
|
||||
import com.sekwah.advancedportals.bukkit.effects.WarpEffects;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
@ -150,7 +152,7 @@ public class Destination {
|
||||
player.sendMessage(PluginMessages.customPrefixFail + "\u00A7a You have been warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a.");
|
||||
player.sendMessage("");
|
||||
} else if (PORTAL_MESSAGE_DISPLAY == 2 && !hideActionbar) {
|
||||
plugin.compat.sendActionBarMessage("\u00A7aYou have warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a.", player);
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a."));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -9,6 +9,8 @@ import com.sekwah.advancedportals.bukkit.api.portaldata.PortalArg;
|
||||
import com.sekwah.advancedportals.bukkit.destinations.Destination;
|
||||
import com.sekwah.advancedportals.bukkit.effects.WarpEffects;
|
||||
import com.sekwah.advancedportals.bungee.BungeeMessages;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -581,8 +583,8 @@ public class Portal {
|
||||
|
||||
if (warped) {
|
||||
if (hasMessage) {
|
||||
plugin.compat.sendActionBarMessage(portal.getArg("message").replaceAll("&(?=[0-9a-fk-or])", "\u00A7"),
|
||||
player);
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR,
|
||||
TextComponent.fromLegacyText(portal.getArg("message").replaceAll("&(?=[0-9a-fk-or])", "\u00A7")));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
main: com.sekwah.advancedportals.bungee.AdvancedPortalsPlugin
|
||||
name: AdvancedPortals
|
||||
version: 0.5.4
|
||||
version: 0.5.5
|
||||
author: sekwah41
|
||||
|
@ -1,6 +1,6 @@
|
||||
main: com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin
|
||||
name: AdvancedPortals
|
||||
version: 0.5.4
|
||||
version: 0.5.5
|
||||
author: sekwah41
|
||||
description: An advanced portals plugin for bukkit.
|
||||
api-version: 1.13
|
||||
|
Loading…
Reference in New Issue
Block a user