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

Плагин [ECON/RPG] Griswold v0.079 – починка и зачарование вещей без команд! [1.6 - 1.12.X]

Ничего не понял. Где не оказалось народа? Какие сервера сидят на старой версии?

На серверах выше версии 1.5.2 редко кто сидит, поэтому пришлось откатиться с 1.7.2 на 1.5.2 для того, чтобы народ заходил на сервер. Иначе прогорели бы.
 
Установил себе на сервер Forge, моды Mo'Creatures (новая живность), Super Slopes (живая изгородь и угловые блоки) и Balcon's Mod (новое оружие). В свете появления множества новых инструментов пришлось приучать к ним плагин GriswoldReloaded.

Сначала пришлось откатить версию плагина на 0.1 версии назад. Класс версии 1_7_R2 последней версии MCPC+ оказался незнаком. Долго парился, пока это выяснил. Дело в том, что, как я понял, там внутри нет этих классов, но есть таблица переадресаций на другие классы. Я нашел эту таблицу и увидел, что там нет 1_7_R2, а есть только 1_7_R1. Изменив класс, удалось починить зачаровывание ванильных шмоток.

С зачаровыванием модовых шмоток пришлось повозиться. 92 предмета, к каждому пришлось писать отдельную формулу вычисления цены ремонта, привязывая цены к ванильным материалам, уже существующим в конфиге.

Самое приятное - переделанный плагин имеет обратную совместимость с обычным баккитом 1.7.2 (не 1.7.5!). То есть, удалось реализовать прозрачность нестандартных блоков - обычный баккит с ними в коде просто не сталкивается. Это особенно важно, если у вас стоит не три мода, как у меня, а только какой-то один из них (ну или два).

Часть предметов чарится только на прочность - например, мечи из жал скорпионов, набивники для слонов. Это не мешает наложить на них другие чары через книжки. Зато снять чары наш кузнец может с любого предмета, независимо от количества и качества чар.

В общем, пока плагин находится в стадии тестирования - наверняка в коде еще найдутся баги, которые я тогда и исправлю.

В архиве конфиг с моими кузнецами. Просто удалите их командой: /bs delete Ашот, /bs delete Селим

P.S. Забыл сказать: цеп не обрабатывал. Тупое оружие, сделанное зачем-то из удочки. У себя я его отключил - и вам советую. Кузнец не ремонтирует его, не зачаровывает, не расчаровывает - просто не знает его.
 

Вложения:

Последнее редактирование:
@LaoTheLizard Твои исходники получил, глянул только поверхностно. Детально буду разбираться на выходных:)
Обновил кодбазу до 1.7.2, включая AI у кузнеца. Добавил всякие новомодные ништяки типа отображение имени над головой (вкл\выкл в конфиге). Пока только на гитхабе, так как тестирую пока. Кто хочет собрать для себя – более чем welcome. Или дождитесь 0.7.
 
Toxuin, ок. Ну, в общем, на всякий случай, подытожу проблемы, которые не решил я:

1. AI мобов, из которых делается кузнец.
2. Мобы множатся при каждом перезапуске сервера.
3. Если моб - не житель - при клике на нем элементом брони он самонадевается на игрока, если на игрока не надет элемент этого типа.
4. Если моб - житель - рано или поздно вокруг него собирается куча зомби, которые предпринимают безуспешные попытки его убить. В таком случае окрестности наполняются не очень приятными завываниями этих милых зеленых человечков.
Взял из гитхаба блок OverwriteAI, обновленный тобой, сунул в свой код. Все ошибки при компиляции исчезли (это раз), ошибки из консоли исчезли (это два), но мобы все равно не стоят на месте - если не ограничить их, то начинают бродить. Что я делаю не так? :)
В моем коде обрати внимание на этот блок:
/* } else if(squidward.presence.equalsIgnoreCase("player")){
repairman = (LivingEntity) loc.getWorld().spawn(loc, EntityType.PLAYER.getEntityClass()); */

Он закомментирован, потому что не работает. Но мы же оба понимаем, что я пытался сделать, да? Буду рад, если ты реализуешь этот момент.
 
Сейчас с самыми обидными глюками разберусь – и все остальное.

Собственно, проблемы которые ты указал, у меня не очень-то и вылезают. AI вроде годный, NPC не множатся (/reload не в счет – я его даже не тестил, там вообще все плохо), зомбей как раз в последнем коммите отвадил от кузнецов, самонадевание брони и открытие интерфейса – это кто-то там в баккит-тим накрутил приоритеты событий, я поправил у себя и вроде все нормально теперь.

Нате пока, потестите со мной, человеки.
Свежий релиз-кандитат 0.07. Если все ок - запушу на девбаккит.
Тестировал на 1.7.2.
 
Последнее редактирование:
Toxuin, потестил на чистом 1.7.2, вообще без плагинов. Результаты ниже.

1. NPC вообще не множатся. Даже при /reload. Возможно, у меня множатся из-за несостыковок с другими плагинами. Кстати, выяснил, что у меня не множатся при /reload (теперь).

2. Зомби действительно не агрятся. Посмотрел, как реализовано, скопировал себе - все равно агрятся. Не понял, почему.

3. Насчет самонадевания брони - не надевается. Если "кто-то" - это я, то соглашусь, виноват. Какое событие и к какому приоритету нужно привести - так и не нашёл. Нашёл одно - у меня было LOWEST, у тебя - HIGH. Изменил - все равно самонадевается. Что касается "открытия интерфейса" - такого и не было. Обычно это происходит, если версия плагина несовместима с ведром - при второй интеракции. Например, плагин под 1_7_R2, а ведро 1_7_R1.

4. (продолжая п.3) При попытке зачаровать вещь вылезает ошибка и открывается интерфейс. Ремонт - работает. Ведро: craftbukkit-1.7.2-R0.1-20131205.042212-19. Какую версию использовать?
А, уточню. Проблема самонадевания была (и остается у меня) только если моб был не-NPC, а корова, волк и т. п. Как это исправить?
 
Проблема самонадевания была только если моб был не-NPC, а корова, волк и т. п. Как это исправить?

PHP:
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
        final Player player = event.getPlayer();
        final ItemStack[] was_armor = player.getInventory().getArmorContents();
        final ItemStack held_item = player.getItemInHand();

        BukkitRunnable placeItemsBack = new BukkitRunnable() {
            @Override
            public void run() {
                ItemStack[] now_armor = player.getInventory().getArmorContents();
                for (int i=0; i<now_armor.length; i++) {
                    if (now_armor[i].equals(held_item)) {
                        now_armor[i] = was_armor[i];
                        player.setItemInHand(held_item);
                    }
                }
                player.getInventory().setArmorContents(now_armor);
                player.updateInventory();
            }
        };

        this.getServer().getScheduler().scheduleSyncDelayedTask(this, placeItemsBack, 5L);
        event.setCancelled(true);
}

––––––––––––––––––––––

Через ~1.5 года после предыдущей верии: держите версию 0.07. Новое:

– Обновлено для баккита 1.7.2.
– Имена над головами NPC! (+ команда /blacksmith names)
– При взаимодействии с NPC они издают звуки! (+ команда: /blacksmith sound blacksmith_name minecraft_sound. Звуки можно настраивать для каждого NPC отдельно)
– Маленькие баги пофикшены.
– Разработчика – с днем рождения!
 
Что-то на Spigot-1371 не хочет работать.
А по поводу глюков с дубликацией и зомби - посмотрите плагин Shopkeepers - там используются villager'ы и эти проблемы решены (раньше тоже было).
 
Что-то на Spigot-1371 не хочет работать.
1371 это 1.7.5-R0.1.
Залил на dev-bukkit бетки для 1.7.5-R0.1 и 1.7.9-R0.1.

Баг с копированием NPC при выключении сервера не подтверждаю. Пробовал на 1.7.2 – делал /stop, /reload и просто закрывал окошко с сервером. Все работает как нужно. Возможно, просто возникла путаница – в прошлых версиях этот баг наблюдался, но был пофикшен в последней, 0.07.
Я тут еще кой-чего подкрутил, смотрите кому интересно:
  • Новая схема защиты от деспауна. Теперь чанки не держатся всегда загруженными, копии чанков не висят в памяти и вообще все работает куда проще и быстрее. Ура!
  • Поддержка вещей из модов. Да-да, теперь кузнецы могут чинить (и зачаровывать!) вообще что угодно.
  • Меньше спагетти-кода, больше багфиксов.
Потестируйте, пожалуйста, на серверах с модами. Я не особенно с ними дело имел, может еще что-нибудь подкрутить нужно чтоб работало.

Итак, как добавлять свои вещи в конфиг?
Довольно просто: Копируем в конец конфига вот это:
Код:
CustomItems:
  Tools:
    '261': Bow
    '259': Flint and steel
  Armor:
    '12': Random armor
    '69': Some other armor
И изменяем айди и названия на свои. Названия вещей нужны только чтобы вам было потом удобно разбираться что есть что, в плагине они не используются.
 
Последнее редактирование:
Может ли к примеру другой игрок забрать вещь, которую я чиню?
Почему кузнеца можно толкать? ;c
 
spigot 1.7.5 Попробовал установить для теста плагин.
при вызове команды создания NPC, получил следующее в консоли

"an internal error occurred while attempting to perform this kommand"

В логах имею следующее

Код:
[01:54:30] [Server thread/INFO]: neon52 issued server command: /blacksmith create Ратибор tools
[01:54:30] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'blacksmith' in plugin Griswold v0.071
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchCommand(CraftServer.java:709) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.PlayerConnection.handleCommand(PlayerConnection.java:984) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.PlayerConnection.a(PlayerConnection.java:829) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.PacketPlayInChat.a(PacketPlayInChat.java:28) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.PacketPlayInChat.handle(PacketPlayInChat.java:65) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.NetworkManager.a(NetworkManager.java:148) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.ServerConnection.c(ServerConnection.java:77) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.MinecraftServer.v(MinecraftServer.java:703) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:273) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:566) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java:472) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:618) [spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
Caused by: java.lang.NoClassDefFoundError: net/minecraft/server/v1_7_R1/EntityInsentient
    at com.github.toxuin.Griswold.createRepairman(Griswold.java:207) ~[?:?]
    at com.github.toxuin.Griswold.createRepairman(Griswold.java:178) ~[?:?]
    at com.github.toxuin.CommandListener.onCommand(CommandListener.java:38) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    ... 13 more
Caused by: java.lang.ClassNotFoundException: net.minecraft.server.v1_7_R1.EntityInsentient
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:67) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_51]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_51]
    at com.github.toxuin.Griswold.createRepairman(Griswold.java:207) ~[?:?]
    at com.github.toxuin.Griswold.createRepairman(Griswold.java:178) ~[?:?]
    at com.github.toxuin.CommandListener.onCommand(CommandListener.java:38) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-1.4.5-R0.2-1802-g21760c6]
    ... 13 more

но при этом сам продавец в конфиг был добавлен

Код:
  Ратибор:
    world: world
    X: -90.64318212947231
    Y: 51.0
    Z: 149.34462411663583
    sound: mob.villager.haggle
    type: all
    cost: 1.0
 
Griswold
Версия:
v0.07
Спасибо за 9000+ скачиваний!

375ebb7173c7.png

Просто покажите поломанную вещь кузнецу и он назовет свою цену. Если она вас устроит - дайте вещь кузнецу и подождите, пока он делает свою работу.

NEW: Теперь, если вещь полностью починена кузнец может наложить на нее зачарования!

Кузнецами являются обычные NPC, villager'ы. Они не убегают, неуязвимы, не исчезают при отсутствии рядом с ними игрока, сохраняются с перезагрузками сервера. Кузнецам можно давать имена и назначать персональную "надбавку" (ну, или скидку) к стоимости ремонта. Кузнецы могут чинить только оружие, только броню или все сразу. Кузнецов может быть сколько угодно – можете организовать свою "кузню" с кузнецами разных видов. Они даже будут издавать прикольные звуки когда вы говорите с ними.

Команд пользователя нет, потому что они не нужны!

Все просто!

Вкусности:
  • Без команд. Нативный экспириенс!
  • Поддержка множества миров!
  • Зачарования!
  • Поддержка вещей из модов!
  • Полностью переводимый. Из коробки доступен только русский, немецкий и английский, но новые языки добавляются крайне просто!
  • Все основные системы экономики поддерживаются. Ваши кузнецы принимают любые валюты, которые поддерживает Vault!
  • Простой!
Permissions:
  • griswold.admin - обеспечивает доступ к созданию и удалению кузнецов.
  • griswold.tools - позволяет пользователям обращаться к кузнецам, чинящим вещи
  • griswold.armor - позволяет пользователям обращаться к кузнецам, чинящим броню
  • griswold.enchant - позволяет зачаровывать вещи
Команды:
  • /blacksmith create имя - Создает нового кузнеца. Можно указать больше параметров: /blacksmith create имя тип цена. Имя может быть любым (даже русским) и будет отображено в чат когда кто-либо разговаривает с кузнецом. Тип может быть "all", "tools", "armor" или "enchant". "all" позволяет кузнецу чинить все, "tools" - только оружие и ножницы\зажигалки, "armor" - только броню. Тип "enchant" не умеет чинить ничего, но зато умеет накладывать зачарования на вещи.
  • /blacksmith list - показывает список всех кузнецов
  • /blacksmith names - показывать или скрыть имена кузнецов над их головами
  • /blacksmith sound npc_name sound_name - установить звук, который NPC будет издавать при взаимодействии
  • /blacksmith remove name - удаляет конкретного кузнеца
  • /blacksmith despawn / respawn - заставляет всех кузнецов изчезнуть\появиться. Конфиг при этом не перечитывается, если вам нужно перезагрузить конфиг – используйте следующую команду.
  • /blacksmith reload - перезагружает конфиг, и пере-спавнит всех кузнецов.
Все команды требуют permission griswold.admin, так как пользователям не нужны команды.
Конфиг:
Все параметры хранятся в config.yml и перезагружаемы без остановки\перезапуска сервера (/blacksmith reload).

Debug – парамтер, отвечающий за отладку. Он вам не нужен, если вы не знаете зачем он вам. По умолчанию – "false".

Timeout – время, которое кузнецы "помнят" что за вещь вы им показывали и ждут подтверждения. По умолчанию – "5000" (5 секунд).

Language – название файла с языком (без .yml на конце), хранящегося рядом с config.yml. По умолчанию – "ru_RU".

UseEnchantmentSystem - нужно ли плагину использовать систему зачарований? Если выключить этот параметр, то кузнецы типа "all" не смогут накладывать зачарования, а кузнецы типа "enchant" вообще не будут появляться. По умолчанию - true.

PriceToAddEnchantment устанавливает цену за один случайный набор зачарований. По умолчанию - 50.

ClearOldEnchantments - нужно ли удалять все уже имеющиеся зачарования с вещи или просто добавить новые. По умолчанию - true что значит "да, удалять зачарования".

EnchantmentBonus это количество "виртуальных книжных полок" вокруг кузнеца. Чем больше число - тем круче зачарования. По умолчанию - 5.

Вы также можете влиять на цену ремонта с помощью изменения базовых цен. Измените параметры BasicArmorPrice, BasicToolPrice и BasicEnchantmentPrice.

Цены рассчитываются вот так: надбавка кузнеца * (базовая цена вещи + уровень повреждения вещи + (базовая цена зачарования * кол-во зачарований * сумма уровней зачарований)).

Эта формула делает починку простых не зачарованных вещей достаточно дешевой, вещи с 1-2 зачарованиями стоят чуть дороже, а супер-зачарованные вещи с высокими уровнями стоят как самолёт.

Все остальные параметры конфигурабельны внутри игры, так что вам не стоит особенно трогать их. Но если вам все же хочется – валяйте, они называются достаточно понятно.

Как добавить кузнецам вещь из мода?
Довольно просто: Копируем в конец конфига вот это:
Код:
CustomItems:
  Tools:
    '261': Bow
    '259': Flint and steel
  Armor:
    '12': Random armor
    '69': Some other armor
И изменяем айди и названия на свои. Названия вещей нужны только чтобы вам было потом удобно разбираться что есть что, в плагине они не используются.
В следующем обновлении:
  • Баг-фиксы
  • Любая живность в качестве продавцов, не только NPC.
  • Any suggestions?..
История версий:
  • 0.071 – Поддержка вещей из модов, новый способ защиты от деспауна
  • 0.07 – Обновление под 1.7.2. Зомби не замечают NPC, NPC громко радуются именам над головами.
  • 0.06 – NPC наконец стоят смирно! Новый тип - both (чинит все, не умеет зачаровывать), изменяемый формат имени кузнеца.
  • 0.052 – исправление бага, не позволявшего торговать с NPC и садиться в лодки
  • 0.051 – поддержка Minecraft 1.3.1, возможность выключить систему зачарований.
  • 0.05 – теперь кузнецы могут зачаровывать вещи! Подробнее...
  • 0.04 – много-много исправлений. Все предыдущие версии признаны отстоем.
  • 0.03 – округление цены и другие мелкие багфиксы
  • 0.02 – добавлен Vault как soft-depend. Поддержка экономики.
  • 0.01 – первая версия. Сквидворты не убегают, не умирают, разговаривают.

[СКАЧАТЬ]

+ русский язык

Исходники плагина под лицензией zlib\libpng лежат на GitHub.

Как всегда, я очень жду ваших светлых идей, предложений, сообщений об ошибках.
Ну норм.
На сервере всем понравился плагин)
 
Aqel, хмммм... а пробовал после этого сделать /bs reload на всякий случай? У меня вроде все работает... Я знаю, что проблемы могут возникнуть, если неосторожно редактировать конфиг - в частности, секцию русификации. Если редактировал - удали файл конфига, перезапусти - сгенерируется новый (исправный) файл конфигурации, пересоздай кузнеца.

Только что попробовал на 1.7.2 и на 1.6.4 - кузнецы нормально создаются, адекватно реагируют... Кстати, ради эксперимента, попробуй сделать не-жителя кузнеца. Напиши, к примеру: /bs set Онуфрий enchanter irongolem и проверь, будет ли вообще реакция при клике по нему.
LaoTheLizard, попробовал на 1.7.5. Все хорошо, все чинится, но.. NPC почему то не хочет видеть экономику, предлагает все за бесплатно. А настроек включения/выключения экономики в конфиге вроде бы нет
 
LaoTheLizard, попробовал на 1.7.5. Все хорошо, все чинится, но.. NPC почему то не хочет видеть экономику, предлагает все за бесплатно. А настроек включения/выключения экономики в конфиге вроде бы нет

Поищи в логе по маске "Economy not found". Может, у тебя нет плагина Vault?
 

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

Назад
Верх