Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

В разработке [1.5.2] [MCPC+] Изменение геймплея (Получение урона, максимальное ХП)

SuperCraft

Активный участник
Пользователь
Баллы
88
Здравствуйте. Долго делал мод на изменение геймплея, пока один умный человек не посоветовал сделать это все плагином. Я уже создавал тему в запросах на создание плагинов, с того времени уже изменил должным образом интерфейс.
e03db89329a1.png

Теперь осталось сделать замену баганому MoreHealth.
В чем будет заключаться идея плагина:
- Максимальное здоровье будет рассчитываться по формуле LHealth+AHealth.
Где LHealth - максимальное здоровье на данном уровне, Ahealth - здоровье, суммарно добавляемое текущим комплектом брони.
- Урон будет уменьшаться на величину брони (Полученный урон = Входящий урон - Броня).
- Дополнительно будет получаться урон от стихий (Вода, воздух, металл, свет, земля).
- Защита от стихий будет уменьшать урон аналогично работе брони.
- Регенерация будет зависеть от уровня персонажа (будет повышаться либо скорость регенерации здоровья, либо количество восстановления за раз).
- Базовый урон будет зависеть от уровня, оружие усиливает базовый урон (а не игнорирует его).
Это основное, если все пойдет идеально, планирую изменить:
- Эффекты зелий
- Работу зачарования
- Получение урона в лаве/в огне/от огня/от падения/от утопления

Сейчас все основное реализовано модом, НО установить его на клиент мне не удалось, работал только при запуске в eclipse :confused:. Сейчас думаю приступить к разработке.
Сделал по гайду пробный плагин, работает. Хочу спросить, будет ли нормально, если я буду каждый тик проверять, какая броня одета на игрока и какой его уровень для установки ему максимального хп, или лучше это сделать иначе? Так же, как посоветуете реализовать изменение работы стандартной брони и добавление доп. урона от стихий и его уменьшение?
 
Последнее редактирование:
Хочу спросить, будет ли нормально, если я буду каждый тик проверять, какая броня одета на игрока и какой его уровень для установки ему максимального хп, или лучше это сделать иначе?
Незачем делать проверку с каждым тиком. Используйте ивенты.
Так же, как посоветуете реализовать изменение работы стандартной брони и добавление доп. урона от стихий и его уменьшение?
А что именно нужно изменить?
 
"Урон будет уменьшаться на величину брони (Полученный урон = Входящий урон - Броня)."
Так же броня при каждом ударе, если полученный урон больше нуля должна терять 1 ед. прочности, если показатель брони выше входящего урона или равен ему, прочность брони не отнимается.
Насколько я знаю, нет ивента одевания брони в 1.5.2.
 
Последнее редактирование:
Да, я так и делаю, но ведь броня еще и здоровье добавляет.
 
Да, я так и делаю, но ведь броня еще и здоровье добавляет.
Ну для добавления здоровья шедулер подойдёт, но делать его на каждый тик вряд ли целесообразно, лучше посекундно. Ну или слушать события клика по слотам брони
D2PB6Eqiw5n1r3
 
Не знаю, как сделать нормальный перебор игроков, сейчас осуществляется вот так, но что-то мне подсказывает, что этот код полный бред.

Код:
   @Override
            public void run() {
                List<Player> Playerss = getServer().getWorld("World").getPlayers();
                while(Playerss.iterator().hasNext())    
                {
                    getLogger().info(Playerss.iterator().next().getPlayerListName());
                }
 
Последнее редактирование:
Думаю добавить конфиг, для удобства добавления свойств предметов, структуру планирую примерно такую:

ArmorStats:
Health:
4002: 10
4003: 15
ProtectWater:
4002: 5
4003: 8

Не могу разобраться, как достать из конфига, например, список пар "id: health" и перебрать их все, сравнивая id с тем, что одето на игроке и прибавляя максимальное здоровье. Вот такой код с ошибками:

Код:
newConfig = YamlConfiguration.loadConfiguration(configFile);
...
List<Map<?, ?>> ListHPArmor = getConfig().getMapList("ArmorStats.Health");
                    for (Map<?, ?> elem : ListHPArmor)
                    {
                        int arr[];
                        elem.values().toArray(arr[2]); //Вот тут не знаю, как взять текущий ключ и значение

                        if (arr[1]==IdItemInSlot)
                        {
                            player.setMaxHealth(player.getMaxHealth()+arr[2]);
                        }
                             
                    }

Пишет The method toArray(T[]) in the type Collection<capture#2-of ?> is not applicable for the arguments (int)
В то же время, <?, ?> заменить на <int, int> тоже не получается.
Как мне сделать перебор всех пар и получить ключ и значение для текущей пары в цикле?
 

Поделиться этой страницей

Назад
Верх