Иконка ресурса

Разработка аддона для Thaumcraft 4.2.3.5

Версия(и) Minecraft
1.7.10
Всем привет! Данный туториал создан по мотивам гайда от SLywnow (Вот тут). Обещания, который он давал не сбылись, так что эту обязанность я возьму на себя. Настоятельно рекомендую прочесть его гайд для установки таумкрафта в среду разработки и разработки базовых вещей.
( Разработка аддона для Thaumcraft - также источник информации )
Спойлер ниже обязателен к прочтению!
Когда вы скачали и установили в качестве библиотеки таумкрафт, вы можете приступать к работе. Но прежде всего разберемся, что и откуда я брал.
Основная папка это api, именно в ней находится большинство нужных нам вещей.
Например здесь мы можем найти интерфейс IGoggles:
Снимок экрана от 2021-10-04 17-01-22.png

Также здесь находятся файлы для разработки новых аспектов/своих письменных принадлежностей и многого другого. Вообщем это и есть ваш главный друг при разработке.

Создайте папку init в главной папке мода. В ней можно инициализировать свои вещи, аспекты, крафты, исследования и многое другое.

А теперь поехали!
\

Зачем нужен свой аспект? Возможно при крафте более дорогой вещи/наполнения для которой оправдано создание такого аспекта. Также в целях более подробного разбиения на аспекты(Например аспект "Скорость" для создания сверхскоростных ботинок).

В созданной папке init(Прочтите спойлер сверху!) создадим класс initAspects.
В него запишем:
Java:
public class InitAspects {
    public static void setup() { // по аналогии с гайдом SLywnow
        // аспект который создается из других аспектов
        new Aspect("aspectus", 00000000, new Aspect[]{AIR, EARTH}, new ResourceLocation("thaumcraft", "textures/aspects/vacuos"), 1);
        // начальный аспект(типо ignis, aqua, terra и других)
        new Aspect("aspectus", 00000000, new Aspect[]{}, new ResourceLocation("thaumcraft", "textures/aspects/vacuos"), 1);
    }

}
Здесь можно увидеть создание двух аспектов. Первый аспект создан из двух первоначальных аспектов(AIR(Aer) + EARTH(Terra)).
Второй - это наш новый "первоначальный"(primal) аспект. Наряду с Aer, Terra, Ignis, Aque он не будет создаваться, однако его обязательно нужно зарегистрировать в любом обьекте(для расщепления в столе расщепления или изучения с таумометром(Будет рассказано в следующем спойлере).

Также можно разобрать аргументы создания аспекта.
1-й - название.
2-й - цвет аспекта(цвет узла ауры)
3-й - состав аспекта
4-й - иконка аспекта. В этих примерах я взял текстуру vacuos(пустоты) для примера, однако вы можете использовать свою!
5-й - некий blend(смешивание), однако все аспекты кроме void используют 1, так что используем 1.

Наверняка данная опция будет очень удобна при создании интеграции с модами, так как ванильный таумкрафт, интегрируется далеко не со всеми предметами.
Для этого создадим класс InitThaumometer в вышеописанной папке init.
В нем же создадим метод (public static void) init и в нем registerEntitiesAspects и registerBlocksAspects
Java:
public class initThaumometer {
    public static void setup() {
        registerEntitiesAspects();
        registerBlocksAspects();

    }
    public static void registerEntitiesAspects() {
        ThaumcraftApi.registerEntityTag("Zombie" /* имя сущности */, (new AspectList()).add(Aspect.UNDEAD, 2).add(Aspect.MAN, 1).add(Aspect.EARTH, 1), new ThaumcraftApi.EntityTagsNBT[0]);
    }

    public static void registerBlocksAspects() {
        ThaumcraftApi.registerObjectTag(new ItemStack(Blocks.bedrock) /* выдается при изучении бедрока */, (new AspectList()).add(Aspect.VOID, 16).add(Aspect.ENTROPY, 16).add(Aspect.EARTH, 16).add(Aspect.DARKNESS, 16) /* сколько выдается аспектов, создаем с помощью AspectList() */);
    }
}

После создания файла, вызовите setup() в preInit(preLoad) в главном классе.
В registerEntitesAspects можно добавлять аспекты которые будут выдаваться игроку при изучении мобов таумометром.
В registerBlocksAspects то же самое, но с блоками.

Также при создании кастомных интеграций с другими модами перед названием предмета указывается modid мода.

И дополнительная киллерфича, можно использовать oreDict для одних и тех же обьектов, которые реализуются разными модами(например слиток меди).
ThaumcraftApi.registerObjectTag("nuggetLead", (new AspectList()).add(Aspect.METAL, 1));

Однажды вы захотели создать свои собственные письменные принадлежности( в дальнейшем буду называть ПП) и для этого создан класс IScribeTools. Сам он ничего не делает как таковой, поэтому стоит пользоваться кодом из таумкрафта и аддонами к нему.

А вот и базовый код любых письменных принадлежностей. Вы можете добавить какую-либо интеграцию или что-нибудь свое(к примеру на ПКМ у вас высасывается мана из планшета маны ботании).
Java:
public class scribe extends Item implements IScribeTools {
    @SideOnly(Side.CLIENT)
    public IIcon icon;

    public ItemInkwell() {
        this.maxStackSize = 1;
        this.canRepair = true;
        this.setMaxDamage(100);

        this.setHasSubtypes(false);
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister ir) {
        this.icon = ir.registerIcon("thaumcraft:inkwell");
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIconFromDamage(int par1) {
        return this.icon;
    }
}
( примеры можно найти вот здесь: ForbiddenMagic/src/main/java/fox/spiteful/forbidden/items/scribes at master · SpitefulFox/ForbiddenMagic )

Для создания очков откровения в таумкрафте есть интерфейс IGoggles. Он предоставляет возможность видеть узлы ауры и аспекты в котлах/банках/узлах ауры.

(Код закомментирован):
Java:
public class GogglesHelmet extends ItemArmor implements IRepairable, IVisDiscountGear, IRevealer, IGoggles, IRunicArmor {
    public IIcon icon;

    public GogglesHelmet(ArmorMaterial enumarmormaterial, int j, int k) {
        super(enumarmormaterial, j, k);
        this.setMaxDamage(350);
        this.setCreativeTab(/* ваша вкладка, https://minecrafting.ru/topic/10939/ здесь я узнавал как сделать */);
    }

    public int getRunicCharge(ItemStack itemstack) {
        return 0;
    } /* руническая зарядка, не знаю, что это, но в большинстве предметов возвращает 0 */



    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister ir) {
        this.icon = ir.registerIcon("thaumcraft:gogglesrevealing");
    } /* зарегистрировали предмет с иконкой
         очков откровения. На первое время нормально */

    @SideOnly(Side.CLIENT)
    public IIcon getIconFromDamage(int par1) {
        return this.icon;
    }

    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {
        return "thaumcraft:thaumiumfortresshelm"; /* текстура штурмового шлема */
    }


    public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
        return par2ItemStack.isItemEqual(new ItemStack(Items.gold_ingot)) ? true : super.getIsRepairable(par1ItemStack, par2ItemStack);
    } /* добавляем починку предмета */

    /* ТЕПЕРЬ САМОЕ ВАЖНОЕ */

    /* Данная функция добавляет возможность видеть узлы ауры */
    public boolean showNodes(ItemStack itemstack, EntityLivingBase player) {
        return true;
    }

    /* Эта показывает количество аспектов в различных вещах */
    public boolean showIngamePopups(ItemStack itemstack, EntityLivingBase player) {
        return true;
    }
}

Для достижения эффекта очков откровения нужно вовзращать true в обоих последних функциях.
  • Like
Реакции: Nik6506
Автор
Proff
Просмотры
1,629
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху