Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Send team of npc
- *
- * @param action the action (create, update, delete)
- * @param player the player want receive the team (pass null for broadcast)
- */
- private void sendTeam(@Nonnull String action, Player player) {
- try {
- final String id = uuid.toString().replaceAll("-", "").substring(0, 16);
- // Get scoreboard team instance
- final Class<?> scoreboardTeamClass = ReflectionUtils.PacketType.PLAY_OUT_SCOREBOARD_TEAM.getPacket();
- final Object scoreboardTeam = Reflection.getConstructor(scoreboardTeamClass).invoke();
- final Class<?> iChatBaseComponentClass = Reflection.getMinecraftClass("IChatBaseComponent");
- final Class<?> chatComponentClass = Reflection.getMinecraftClass("ChatComponentText");
- final Reflection.ConstructorInvoker chatComponentConstructor = Reflection.getConstructor(chatComponentClass, String.class);
- Reflection.getField(scoreboardTeamClass, "a", String.class).set(scoreboardTeam, id);
- Reflection.getField(scoreboardTeamClass, "b", iChatBaseComponentClass)
- .set(scoreboardTeam, chatComponentConstructor.invoke(id));
- // Set prefix and suffix
- if (!Strings.isNullOrEmpty(prefix)) {
- Reflection.getField(scoreboardTeamClass, "c", iChatBaseComponentClass)
- .set(scoreboardTeam, chatComponentConstructor.invoke(prefix));
- }
- if (!Strings.isNullOrEmpty(suffix)) {
- Reflection.getField(scoreboardTeamClass, "d", iChatBaseComponentClass)
- .set(scoreboardTeam, chatComponentConstructor.invoke(suffix));
- }
- // Disable name tag and collision
- Reflection.getField(scoreboardTeamClass, "e", String.class).set(scoreboardTeam, isNameVisible ? "always" : "never");
- Reflection.getField(scoreboardTeamClass, "f", String.class).set(scoreboardTeam, "never");
- // Set action of packet
- switch (action.toLowerCase()) {
- case "create":
- Reflection.getField(scoreboardTeamClass, "i", int.class).set(scoreboardTeam, 0);
- // Add npc to team
- Reflection.getField(scoreboardTeamClass, "h", Collection.class)
- .set(scoreboardTeam, Collections.singletonList(name));
- break;
- case "delete":
- Reflection.getField(scoreboardTeamClass, "i", int.class).set(scoreboardTeam, 1);
- break;
- case "update":
- Reflection.getField(scoreboardTeamClass, "i", int.class).set(scoreboardTeam, 2);
- break;
- }
- // Send packet
- if (player != null) {
- ReflectionUtils.sendPacket(player, scoreboardTeam);
- } else {
- broadcastPacket(scoreboardTeam);
- }
- } catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException e) {
- e.printStackTrace();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement