switch from using api to send players to sending a raw packet because its broken
This commit is contained in:
		
							parent
							
								
									f1c59d0b80
								
							
						
					
					
						commit
						4fbc8c661d
					
				
					 9 changed files with 35 additions and 62 deletions
				
			
		|  | @ -131,7 +131,6 @@ public class ZNpcsPlus extends JavaPlugin { | |||
|         EntityPropertyRegistryImpl propertyRegistry = new EntityPropertyRegistryImpl(skinCache); | ||||
|         MetadataFactory metadataFactory = setupMetadataFactory(); | ||||
|         PacketFactory packetFactory = setupPacketFactory(scheduler, metadataFactory, propertyRegistry); | ||||
|         BungeeConnector bungeeConnector = new BungeeConnector(this); | ||||
| 
 | ||||
|         ActionRegistry actionRegistry = new ActionRegistry(); | ||||
|         NpcTypeRegistryImpl typeRegistry = new NpcTypeRegistryImpl(); | ||||
|  | @ -142,18 +141,17 @@ public class ZNpcsPlus extends JavaPlugin { | |||
|         UserManager userManager = new UserManager(); | ||||
|         shutdownTasks.add(userManager::shutdown); | ||||
| 
 | ||||
|         DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, bungeeConnector, | ||||
|         DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, | ||||
|                 scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile(), | ||||
|                 propertyRegistry, skinCache); | ||||
| 
 | ||||
|         log(ChatColor.WHITE + " * Registerring components..."); | ||||
| 
 | ||||
|         typeRegistry.registerDefault(packetEvents, propertyRegistry); | ||||
|         actionRegistry.registerTypes(scheduler, adventure, bungeeConnector, textSerializer); | ||||
|         actionRegistry.registerTypes(scheduler, adventure, textSerializer); | ||||
|         packetEvents.getEventManager().registerListener(new InteractionPacketListener(userManager, npcRegistry, scheduler), PacketListenerPriority.MONITOR); | ||||
|         new Metrics(this, 18244); | ||||
|         pluginManager.registerEvents(new UserListener(userManager), this); | ||||
|         getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); | ||||
| 
 | ||||
|         registerCommands(npcRegistry, skinCache, adventure, actionRegistry, | ||||
|                 typeRegistry, propertyRegistry, importerRegistry, configManager); | ||||
|  |  | |||
|  | @ -7,7 +7,6 @@ import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; | |||
| import lol.pyr.znpcsplus.packets.PacketFactory; | ||||
| import lol.pyr.znpcsplus.scheduling.TaskScheduler; | ||||
| import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| import lol.pyr.znpcsplus.util.LazyLoader; | ||||
| import net.kyori.adventure.platform.bukkit.BukkitAudiences; | ||||
| import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; | ||||
|  | @ -21,14 +20,14 @@ import java.util.Map; | |||
| public class DataImporterRegistry { | ||||
|     private final Map<String, LazyLoader<DataImporter>> importers = new HashMap<>(); | ||||
| 
 | ||||
|     public DataImporterRegistry(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector, | ||||
|     public DataImporterRegistry(ConfigManager configManager, BukkitAudiences adventure, | ||||
|                                 TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, | ||||
|                                 NpcTypeRegistryImpl typeRegistry, File pluginsFolder, EntityPropertyRegistryImpl propertyRegistry, | ||||
|                                 MojangSkinCache skinCache) { | ||||
| 
 | ||||
|         register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, bungeeConnector, taskScheduler, | ||||
|         register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, taskScheduler, | ||||
|                 packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ServersNPC/data.json")))); | ||||
|         register("znpcsplus_legacy", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, bungeeConnector, taskScheduler, | ||||
|         register("znpcsplus_legacy", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, taskScheduler, | ||||
|                 packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ZNPCsPlusLegacy/data.json")))); | ||||
|         /* register("citizens", LazyLoader.of(() -> new CitizensImporter(configManager, adventure, bungeeConnector, taskScheduler, | ||||
|                 packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "Citizens/saves.yml")))); */ | ||||
|  |  | |||
|  | @ -8,7 +8,6 @@ import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; | |||
| import lol.pyr.znpcsplus.packets.PacketFactory; | ||||
| import lol.pyr.znpcsplus.scheduling.TaskScheduler; | ||||
| import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| import net.kyori.adventure.platform.bukkit.BukkitAudiences; | ||||
| import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
|  | @ -21,7 +20,6 @@ import java.util.Collections; | |||
| public class CitizensImporter implements DataImporter { | ||||
|     private final ConfigManager configManager; | ||||
|     private final BukkitAudiences adventure; | ||||
|     private final BungeeConnector bungeeConnector; | ||||
|     private final TaskScheduler scheduler; | ||||
|     private final PacketFactory packetFactory; | ||||
|     private final LegacyComponentSerializer textSerializer; | ||||
|  | @ -30,13 +28,12 @@ public class CitizensImporter implements DataImporter { | |||
|     private final MojangSkinCache skinCache; | ||||
|     private final File dataFile; | ||||
| 
 | ||||
|     public CitizensImporter(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector, | ||||
|     public CitizensImporter(ConfigManager configManager, BukkitAudiences adventure, | ||||
|                             TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, | ||||
|                             NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, MojangSkinCache skinCache, | ||||
|                             File dataFile) { | ||||
|         this.configManager = configManager; | ||||
|         this.adventure = adventure; | ||||
|         this.bungeeConnector = bungeeConnector; | ||||
|         this.scheduler = taskScheduler; | ||||
|         this.packetFactory = packetFactory; | ||||
|         this.textSerializer = textSerializer; | ||||
|  |  | |||
|  | @ -31,7 +31,6 @@ import lol.pyr.znpcsplus.skin.Skin; | |||
| import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; | ||||
| import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor; | ||||
| import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| import lol.pyr.znpcsplus.util.ItemSerializationUtil; | ||||
| import lol.pyr.znpcsplus.util.NpcLocation; | ||||
| import net.kyori.adventure.platform.bukkit.BukkitAudiences; | ||||
|  | @ -47,7 +46,6 @@ import java.util.*; | |||
| public class ZNpcImporter implements DataImporter { | ||||
|     private final ConfigManager configManager; | ||||
|     private final BukkitAudiences adventure; | ||||
|     private final BungeeConnector bungeeConnector; | ||||
|     private final TaskScheduler taskScheduler; | ||||
|     private final PacketFactory packetFactory; | ||||
|     private final LegacyComponentSerializer textSerializer; | ||||
|  | @ -57,13 +55,12 @@ public class ZNpcImporter implements DataImporter { | |||
|     private final File dataFile; | ||||
|     private final Gson gson; | ||||
| 
 | ||||
|     public ZNpcImporter(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector, | ||||
|     public ZNpcImporter(ConfigManager configManager, BukkitAudiences adventure, | ||||
|                         TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, | ||||
|                         NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, MojangSkinCache skinCache, File dataFile) { | ||||
| 
 | ||||
|         this.configManager = configManager; | ||||
|         this.adventure = adventure; | ||||
|         this.bungeeConnector = bungeeConnector; | ||||
|         this.taskScheduler = taskScheduler; | ||||
|         this.packetFactory = packetFactory; | ||||
|         this.textSerializer = textSerializer; | ||||
|  | @ -164,7 +161,7 @@ public class ZNpcImporter implements DataImporter { | |||
|             case "message": | ||||
|                 return new MessageAction(adventure, parameter, clickType, textSerializer, cooldown * 1000L, 0); | ||||
|             case "server": | ||||
|                 return new SwitchServerAction(bungeeConnector, parameter, clickType, cooldown * 1000L, 0); | ||||
|                 return new SwitchServerAction(parameter, clickType, cooldown * 1000L, 0); | ||||
|         } | ||||
|         throw new IllegalArgumentException("Couldn't adapt znpcs click action: " + type); | ||||
|     } | ||||
|  |  | |||
|  | @ -7,7 +7,6 @@ import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatActionType; | |||
| import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandActionType; | ||||
| import lol.pyr.znpcsplus.interaction.switchserver.SwitchServerActionType; | ||||
| import lol.pyr.znpcsplus.scheduling.TaskScheduler; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| import net.kyori.adventure.platform.bukkit.BukkitAudiences; | ||||
| import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; | ||||
| 
 | ||||
|  | @ -23,10 +22,10 @@ public class ActionRegistry { | |||
|     public ActionRegistry() { | ||||
|     } | ||||
| 
 | ||||
|     public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, BungeeConnector bungeeConnector, LegacyComponentSerializer textSerializer) { | ||||
|     public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer) { | ||||
|         register(new ConsoleCommandActionType(taskScheduler)); | ||||
|         register(new PlayerCommandActionType(taskScheduler)); | ||||
|         register(new SwitchServerActionType(bungeeConnector)); | ||||
|         register(new SwitchServerActionType()); | ||||
|         register(new MessageActionType(adventure, textSerializer)); | ||||
|         register(new PlayerChatActionType(taskScheduler)); | ||||
|     } | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ package lol.pyr.znpcsplus.interaction.switchserver; | |||
| import lol.pyr.director.adventure.command.CommandContext; | ||||
| import lol.pyr.znpcsplus.api.interaction.InteractionType; | ||||
| import lol.pyr.znpcsplus.interaction.InteractionActionImpl; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| import lol.pyr.znpcsplus.util.BungeeUtil; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.event.ClickEvent; | ||||
| import net.kyori.adventure.text.event.HoverEvent; | ||||
|  | @ -11,18 +11,16 @@ import net.kyori.adventure.text.format.NamedTextColor; | |||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class SwitchServerAction extends InteractionActionImpl { | ||||
|     private final BungeeConnector bungeeConnector; | ||||
|     private final String server; | ||||
| 
 | ||||
|     public SwitchServerAction(BungeeConnector bungeeConnector, String server, InteractionType interactionType, long cooldown, long delay) { | ||||
|     public SwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay) { | ||||
|         super(cooldown, delay, interactionType); | ||||
|         this.bungeeConnector = bungeeConnector; | ||||
|         this.server = server; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void run(Player player) { | ||||
|         bungeeConnector.sendPlayer(player, server); | ||||
|         BungeeUtil.connectPlayer(player, server); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  |  | |||
|  | @ -6,7 +6,6 @@ import lol.pyr.znpcsplus.api.interaction.InteractionType; | |||
| import lol.pyr.znpcsplus.interaction.InteractionActionImpl; | ||||
| import lol.pyr.znpcsplus.interaction.InteractionActionType; | ||||
| import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; | ||||
| import lol.pyr.znpcsplus.util.BungeeConnector; | ||||
| 
 | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.util.Base64; | ||||
|  | @ -14,12 +13,6 @@ import java.util.Collections; | |||
| import java.util.List; | ||||
| 
 | ||||
| public class SwitchServerActionType implements InteractionActionType<SwitchServerAction>, InteractionCommandHandler { | ||||
|     private final BungeeConnector bungeeConnector; | ||||
| 
 | ||||
|     public SwitchServerActionType(BungeeConnector bungeeConnector) { | ||||
|         this.bungeeConnector = bungeeConnector; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String serialize(SwitchServerAction obj) { | ||||
|         return Base64.getEncoder().encodeToString(obj.getServer().getBytes(StandardCharsets.UTF_8)) + ";" + obj.getCooldown() + ";" + obj.getInteractionType().name() + ";" + obj.getDelay(); | ||||
|  | @ -29,7 +22,7 @@ public class SwitchServerActionType implements InteractionActionType<SwitchServe | |||
|     public SwitchServerAction deserialize(String str) { | ||||
|         String[] split = str.split(";"); | ||||
|         InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK; | ||||
|         return new SwitchServerAction(bungeeConnector, new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0")); | ||||
|         return new SwitchServerAction(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0")); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  | @ -53,7 +46,7 @@ public class SwitchServerActionType implements InteractionActionType<SwitchServe | |||
|         long cooldown = (long) (context.parse(Double.class) * 1000D); | ||||
|         long delay = (long) (context.parse(Integer.class) * 1D); | ||||
|         String server = context.dumpAllArgs(); | ||||
|         return new SwitchServerAction(bungeeConnector, server, type, cooldown, delay); | ||||
|         return new SwitchServerAction(server, type, cooldown, delay); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  |  | |||
|  | @ -1,28 +0,0 @@ | |||
| package lol.pyr.znpcsplus.util; | ||||
| 
 | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.plugin.Plugin; | ||||
| 
 | ||||
| import java.io.ByteArrayOutputStream; | ||||
| import java.io.DataOutputStream; | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| public class BungeeConnector { | ||||
|     private final Plugin plugin; | ||||
| 
 | ||||
|     public BungeeConnector(Plugin plugin) { | ||||
|         this.plugin = plugin; | ||||
|     } | ||||
| 
 | ||||
|     public void sendPlayer(Player player, String server) { | ||||
|         ByteArrayOutputStream b = new ByteArrayOutputStream(); | ||||
|         DataOutputStream out = new DataOutputStream(b); | ||||
|         try { | ||||
|             out.writeUTF("Connect"); | ||||
|             out.writeUTF(server); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         player.sendPluginMessage(this.plugin, "BungeeCord", b.toByteArray()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								plugin/src/main/java/lol/pyr/znpcsplus/util/BungeeUtil.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								plugin/src/main/java/lol/pyr/znpcsplus/util/BungeeUtil.java
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| package lol.pyr.znpcsplus.util; | ||||
| 
 | ||||
| import com.github.retrooper.packetevents.PacketEvents; | ||||
| import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPluginMessage; | ||||
| import com.google.common.io.ByteArrayDataOutput; | ||||
| import com.google.common.io.ByteStreams; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| public class BungeeUtil { | ||||
|     public static void connectPlayer(Player player, String server) { | ||||
|         PacketEvents.getAPI().getPlayerManager().sendPacket(player, new WrapperPlayServerPluginMessage("BungeeCord", createMessage("Connect", server))); | ||||
|     } | ||||
| 
 | ||||
|     @SuppressWarnings("UnstableApiUsage") | ||||
|     private static byte[] createMessage(String... parts) { | ||||
|         ByteArrayDataOutput out = ByteStreams.newDataOutput(); | ||||
|         for (String part : parts) out.writeUTF(part); | ||||
|         return out.toByteArray(); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in a new issue