Помогите Изменение здоровья без дерганья экрана

baksovic111

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
Baksovic
Мне давно известна проблема когда при установке, setMaxHealth или setHealthScale, экран дергается от получения урона.

Нашел один способ обхода этой проблемы, использовать новый метод вместо setMaxHealth, GENERIC_MAX_HEALTH.
Все-бы хорошо, но этот способ изменяет и healthScale
Мне-же нужно изменить здоровье, не изменяя healthScale, БЕЗ ДЕРГАНЬЯ ЭКРАНА.
Думал может отправлять, healthScale игроку пакетом, но не знаю какой пакет за это отвечает да и не знаю поможет ли это.

Что подскажете господа?
Какие есть способы?
Готов даже заплатить кто поможет)
 
К слову, после того, как пофиксишь изменение хп без добавления сердец, то можно было бы создать простой плагин, который будет отдельно выполнять эту функцию(на самом деле там ещё понадобится боссбар для удобного отображения). Использовать твой RPGPL лишь из-за изменения хп не очень удобно.
Прости за оффтоп, в личку я тебе почему-то написать не смог.
 
К слову, после того, как пофиксишь изменение хп без добавления сердец, то можно было бы создать простой плагин, который будет отдельно выполнять эту функцию(на самом деле там ещё понадобится боссбар для удобного отображения). Использовать твой RPGPL лишь из-за изменения хп не очень удобно.
Прости за оффтоп, в личку я тебе почему-то написать не смог.
Ну, я бы не сказал что в RPGPL только изменение ХП ;D
Там не много в 500раз больше функционала
 
Я делал пакетами, все равно будет дергаться. Выбрасывай.

Код:
        ProtocolManager manager = ProtocolLibrary.getProtocolManager();
        manager.addPacketListener(new PacketAdapter(this.plugin, PacketType.Play.Server.UPDATE_HEALTH) {
            @Override
            public void onPacketSending(PacketEvent event) {
                WrapperPlayServerUpdateHealth packet = new WrapperPlayServerUpdateHealth(event.getPacket());
                float hp = (float) (event.getPlayer().getHealth() * 20
                        / (int) event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());
                packet.setHealth(hp);
            }
        });

        manager.addPacketListener(new PacketAdapter(this.plugin, PacketType.Play.Server.UPDATE_ATTRIBUTES) {
            @Override
            public void onPacketSending(PacketEvent event) {
                try {
                    WrapperPlayServerUpdateAttributes packet = new WrapperPlayServerUpdateAttributes(event.getPacket());
                    Entity e = packet.getEntity(event);
                    if (e.getType() == EntityType.PLAYER) {
                        List<WrappedAttribute> list = packet.getAttributes();
                        for (int i = 0; i < list.size(); i++) {
                            WrappedAttribute atr = list.get(i);
                            if (atr.getAttributeKey().equals("generic.maxHealth")) {
                                list.remove(atr);
                            }
                        }
                        packet.setAttributes(list);
                    }
                } catch (Exception e) {
                }
            }
        });

        manager.addPacketListener(new PacketAdapter(this.plugin, PacketType.Play.Server.ENTITY_METADATA) {
            @Override
            public void onPacketSending(PacketEvent event) {
                try {
                    WrapperPlayServerEntityMetadata packet = new WrapperPlayServerEntityMetadata(event.getPacket());
                    Entity e = packet.getEntity(event);
                    if (e.getType() == EntityType.PLAYER) {
                        for (WrappedWatchableObject meta : packet.getMetadata()) {
                            if (meta.getIndex() == 7) {
                                float hp = (float) (event.getPlayer().getHealth() * 20 / (int) event.getPlayer()
                                        .getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());
                                meta.setValue(hp);
                            }
                        }
                    }
                } catch (Exception e) {
                }
            }
        });
 
Назад
Верх