Помогите Отправка ScoreBoard пакетов

Статус
Закрыто для дальнейших ответов.

Phizzle

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Phizzle
Привет всем, я пытаюсь отправить игроку/игрокам пакет PacketScoreBoardTeam (класс с и пытаюсь присвоить ему допустим префикс "§cABC", но выдает предупреждение ниже и следовательно не отправляет пакет. Тоже самое и с PacketPlayOutScoreboardTeam/PacketPlayOutScoreboardScore

PHP:
[06:25:16 WARN]: java.lang.IllegalArgumentException: Can not set net.minecraft.server.v1_15_R1.EnumChatFormat field net.minecraft.server.v1_15_R1.PacketPlayOutScoreboardTeam.g to java.lang.Integer
[06:25:16 WARN]:        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
[06:25:16 WARN]:        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
[06:25:16 WARN]:        at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
[06:25:16 WARN]:        at java.lang.reflect.Field.set(Unknown Source)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.ReflectionUtils.setFieldValue(ReflectionUtils.java:11)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.packet.PacketScoreBoardTeam.init(PacketScoreBoardTeam.java:39)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.packet.PacketScoreBoardTeam.init(PacketScoreBoardTeam.java:8)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.packet.PacketBase.sendPacket(PacketBase.java:22)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.packet.PacketContainer.lambda$sendPacket$0(PacketContainer.java:20)
[06:25:16 WARN]:        at java.util.Arrays$ArrayList.forEach(Unknown Source)
[06:25:16 WARN]:        at ru.phizzle.cwtags.utils.nms.packet.PacketContainer.sendPacket(PacketContainer.java:20)
[06:25:16 WARN]:        at ru.phizzle.cwtags.scoreboard.PlayerTag.sendTo(PlayerTag.java:59)
[06:25:16 WARN]:        at ru.phizzle.cwtags.spCommand.onCommand(spCommand.java:18)
[06:25:16 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45)
[06:25:16 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159)
[06:25:16 WARN]:        at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:752)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.PlayerConnection.handleCommand(PlayerConnection.java:1825)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1633)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:47)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:5)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:23)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:1038)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:1031)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:1015)
[06:25:16 WARN]:        at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:938)
[06:25:16 WARN]:        at java.lang.Thread.run(Unknown Source)

Код:
PHP:
public class PacketScoreBoardTeam extends PacketBase<PacketPlayOutScoreboardTeam> {

    private HTeam team;
    private TeamAction teamAction;

    public PacketScoreBoardTeam(HTeam team, TeamAction teamAction) {
        this.team = team;
        this.teamAction = teamAction;
    }

    public void setTeamAction(TeamAction action) {
        this.teamAction = action;
        init();
    }

    public HTeam getTeam() {
        return team;
    }

    public void setTeam(HTeam team) {
        this.team = team;
        init();
    }

    protected PacketPlayOutScoreboardTeam init() {
        PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
        ReflectionUtils.setFieldValue(packet, "a", team.getName());
        ReflectionUtils.setFieldValue(packet, "e", team.getVisibility().getValue());

        ReflectionUtils.setFieldValue(packet, "i", teamAction.getMode());
        ReflectionUtils.setFieldValue(packet, "j", team.packOptionData());
        ReflectionUtils.setFieldValue(packet, "g", 0);

        ReflectionUtils.setFieldValue(packet, "h", team.getPlayers());

        if (teamAction == TeamAction.CREATE || teamAction == TeamAction.UPDATE) {
            ReflectionUtils.setFieldValue(packet, "b", team.getDisplayName());
            ReflectionUtils.setFieldValue(packet, "c", team.getPrefix());
            ReflectionUtils.setFieldValue(packet, "d", team.getSuffix());

            ReflectionUtils.setFieldValue(packet, "f", team.getCollides().getValue());
        }
        return packet;
    }
}


Отправка пакета:
PHP:
    public void sendPacket(final Player player, HPacket... hPackets) {
        if (hPackets.length == 0) {
            return;
        }

        Arrays.asList(hPackets).forEach(packet -> packet.sendPacket(player));
    }
 
Последнее редактирование:
Тип переменной PacketPlayOutScoreboardTeam#g net.minecraft.server.EnumChatFormat, а не int. Лучше просто используй PacketWrapper вместо собственных костылей
 
Тип переменной PacketPlayOutScoreboardTeam#g net.minecraft.server.EnumChatFormat, а не int. Лучше просто используй PacketWrapper вместо собственных костылей
не помогла замена 0 на EnumChatFormat.ЦВЕТ, а библиотеку мне не хотелось бы использовать(
 
не помогла замена 0 на EnumChatFormat.ЦВЕТ, а библиотеку мне не хотелось бы использовать(
Ты уверен что ошибка не изменилась после того как ты изменил? Не понимаю в чём проблема использовать PacketWrapper.
 
Код:
public class PacketScoreBoardTeam extends PacketBase<PacketPlayOutScoreboardTeam> {

    private HTeam team;
    private TeamAction teamAction;
    private Class<? extends Enum> typeEnumChatFormat;

    public PacketScoreBoardTeam(HTeam team, TeamAction teamAction) {
        this.team = team;
        this.teamAction = teamAction;
       
        try {
        String version = Bukkit.getServer().getClass().getPackage()
                   .getName().split("\\.")[3];
       typeEnumChatFormat = (Class<? extends Enum>) Class.forName(
                        "net.minecraft.server." + version + ".EnumChatFormat");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setTeamAction(TeamAction action) {
        this.teamAction = action;
        init();
    }

    public HTeam getTeam() {
        return team;
    }

    public void setTeam(HTeam team) {
        this.team = team;
        init();
    }

    protected PacketPlayOutScoreboardTeam init() {
        PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
        ReflectionUtils.setFieldValue(packet, "a", team.getName());
        ReflectionUtils.setFieldValue(packet, "e", team.getVisibility().getValue());

        ReflectionUtils.setFieldValue(packet, "i", teamAction.getMode());
        ReflectionUtils.setFieldValue(packet, "j", team.packOptionData());
       Enum<?> colorEnum = Enum.valueOf(typeEnumChatFormat,
                            COLOR);
        ReflectionUtils.setFieldValue(packet, "g", colorEnum );

        ReflectionUtils.setFieldValue(packet, "h", team.getPlayers());

        if (teamAction == TeamAction.CREATE || teamAction == TeamAction.UPDATE) {
            ReflectionUtils.setFieldValue(packet, "b", team.getDisplayName());
            ReflectionUtils.setFieldValue(packet, "c", team.getPrefix());
            ReflectionUtils.setFieldValue(packet, "d", team.getSuffix());

            ReflectionUtils.setFieldValue(packet, "f", team.getCollides().getValue());
        }
        return packet;
    }
}

Не могу понять, зачем создавать велосипед, если есть ведро апи?
 
Код:
public class PacketScoreBoardTeam extends PacketBase<PacketPlayOutScoreboardTeam> {

    private HTeam team;
    private TeamAction teamAction;
    private Class<? extends Enum> typeEnumChatFormat;

    public PacketScoreBoardTeam(HTeam team, TeamAction teamAction) {
        this.team = team;
        this.teamAction = teamAction;
      
        try {
        String version = Bukkit.getServer().getClass().getPackage()
                   .getName().split("\\.")[3];
       typeEnumChatFormat = (Class<? extends Enum>) Class.forName(
                        "net.minecraft.server." + version + ".EnumChatFormat");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setTeamAction(TeamAction action) {
        this.teamAction = action;
        init();
    }

    public HTeam getTeam() {
        return team;
    }

    public void setTeam(HTeam team) {
        this.team = team;
        init();
    }

    protected PacketPlayOutScoreboardTeam init() {
        PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
        ReflectionUtils.setFieldValue(packet, "a", team.getName());
        ReflectionUtils.setFieldValue(packet, "e", team.getVisibility().getValue());

        ReflectionUtils.setFieldValue(packet, "i", teamAction.getMode());
        ReflectionUtils.setFieldValue(packet, "j", team.packOptionData());
       Enum<?> colorEnum = Enum.valueOf(typeEnumChatFormat,
                            COLOR);
        ReflectionUtils.setFieldValue(packet, "g", colorEnum );

        ReflectionUtils.setFieldValue(packet, "h", team.getPlayers());

        if (teamAction == TeamAction.CREATE || teamAction == TeamAction.UPDATE) {
            ReflectionUtils.setFieldValue(packet, "b", team.getDisplayName());
            ReflectionUtils.setFieldValue(packet, "c", team.getPrefix());
            ReflectionUtils.setFieldValue(packet, "d", team.getSuffix());

            ReflectionUtils.setFieldValue(packet, "f", team.getCollides().getValue());
        }
        return packet;
    }
}

Не могу понять, зачем создавать велосипед, если есть ведро апи?
Спасибо, посмотрю работоспособность кода, не используя я готовый апи т.к. с помощью пакета можно обойти регистрацию Team для каждой команды и игрока в принципе, и я по логике могу сделать на одном пакете сразу таб/тэги над игроком/борд справа
 
Спасибо, посмотрю работоспособность кода, не используя я готовый апи т.к. с помощью пакета можно обойти регистрацию Team для каждой команды и игрока в принципе, и я по логике могу сделать на одном пакете сразу таб/тэги над игроком/борд справа
С ведроапи все точно так же делается. И таб и борд. Чудной ты.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх