[Туториал][1.7.10] Создание аддона для Thaumcraft

7,099
324
1,509
57
2
0
@Egorka я api просто кинул в папку src
@hohserg1 dev-ка у меня есть, как я тогда проверяю свой мод. А вот где эта папка (./libs/)?
 
241
20
75
3) Dev версию кидаем в eclipse/mods
Это лишнее, можно подключать из папки libs, клиент будет запускаться нормально.
compile files('libs/Thaumcraft.jar')
Лучше использовать compile fileTree(dir: 'libs' , include: '*.jar') так в сборке будут задействованы все моды из папки libs.

UPD: @sqcode, спасибо в карман не положишь, а вот лайкииии.... это да 🥴
 
Последнее редактирование:
57
2
0
Добрый вечер, есть следующие три проблемы, сам решить не могу, прошу помочь:
1. Как сделать проверку на наличие исследования в таумономиконе, хочу чтобы улучшение для набалдашника было доступно только после того, как будет изучено исследование, открывающее его
2. У меня моя вкладка в таумономиконе почему-то самая первая, как её переместить под вкладки самого таума?
3. Ошибка при сборке в jar-файл, если запускаю из IDEA, то всё нормально, если хочу собрать, ошибка, мол, нет класса ItemWandCasting, который я импортировал из lib-ов. В коде четко указан импорт и никаких ошибок в редакторе и при запуске из него нет.
 
7,099
324
1,509
1. Thaumcraft.proxy.getCompletedResearch().get(playername).contains(key)
2. В postInit регистрацию вкладки перемести
3. А в build.gradle это указано?
 
57
2
0
За 1 и 2 спасибо. Что должно быть указано в build.gradle? У меня в dependencies compile files("Thaumcraft.jar")

UPD: где в функции
Java:
public FocusUpgradeType[] getPossibleUpgradesByRank(ItemStack itemstack, int rank)
    {
        switch (rank)
        {
            case 1:
            case 2:
            case 3:
            case 4:
                return new FocusUpgradeType[]{FocusUpgradeType.frugal};
            case 5:
                if(Thaumcraft.proxy.getCompletedResearch().get(playername).contains("tsqcode.upgrade.heal"))
                return new FocusUpgradeType[]{ThaumicSqcode.focusHealUpgrade};
        }
        return null;
    }
мне взять имя игрока? Точнее EntityPlayer, чтобы из него взять ник
 
Последнее редактирование:
7,099
324
1,509
Можно попробовать из контейнера достать, если он доступен

Что должно быть указано в build.gradle? У меня в dependencies compile files("Thaumcraft.jar")
Убедись, что gradle точно знает о либе
Выше @Egorka написал годный код
compile fileTree(dir: 'libs' , include: '*.jar')
 
Последнее редактирование:
57
2
0
Поподробнее про контейнер, пожалуйста
UPD: с кодом compile fileTree билд прошел успешно. @Egorka респект!
 
Последнее редактирование:
57
2
0
Вот я додумал: нужно проверять есть ли изучение у того, кто в GUI стола для улучшения набалдашников, в слоте которого лежит мой набалдашник. Если это возможно, прошу написать как, если нет, то как взять список всех игроков на сервере(в мире)

UPD(для тех, кто хочет сделать тоже самое): пока сделал доступным улучшение всегда, но при использовании дополнительно проверяю на наличие изучения(в функции onFocusRightClick, куда передается EntityPlayer). То есть, если изучения нет, то улучшение не будет работать
 
Последнее редактирование:
3,005
192
592
Изначально нельзя скрафтить любой наболдажник из таума, у тебя какое-то свое "улучшение", посмотри как сделан крафт и сделай улучшение с проверкой, как в крафте.
 
57
2
0
Крафт работает через ключи, посмотри первое сообщение темы. С улучшениями так не прокатит
 
7,099
324
1,509
Поподробнее про контейнер, пожалуйста
Если игрок открыл гуи верстака и нажал кнопку, то у него открыт конттейнер, а у контейнер есть переменная с игроком. Поэтому если есть возможность достать контейнер, то и есть возможность достать игрока
 
Здравствуйте, такой вопрос, как сделать блок стабилизирующим? Прочитал комменты в апи, но ничего не понял
 
7,099
324
1,509
Он должен расширять какой-то там интерфейс
 
Вот код моего класса
Java:
package ru.posaydone.thaumicinspiration;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
public class BlockStabilisator extends Block {
    protected BlockStabilisator(Material p_i45394_1_, String name, String texture) {
        super(p_i45394_1_);
        this.setBlockName(name);
        this.setCreativeTab(Main.tabThaumicInspiration);
        this.setHardness(3.0F);
        this.setStepSound(soundTypeStone);
        this.setResistance(10.0F);
        this.setHarvestLevel("pickaxe", 3);
        this.setLightLevel(0.0F);
        this.setLightOpacity(10);
        this.setBlockTextureName(Main.MODID + ":" + texture);
        GameRegistry.registerBlock(this, name);
    }
}
Вот код интерфейса
Java:
package thaumcraft.api.crafting;

import net.minecraft.world.World;
/**
 *
 * @author Azanor
 *
 * Blocks that implement this interface act as infusion crafting stabilisers like candles and skulls
 *
 */
public interface IInfusionStabiliser {
    
    /**
     * returns true if the block can stabilise things
     */
    public boolean canStabaliseInfusion(World world, int x, int y, int z);

}
Я не очень силён в джаве и не знаю что мне делать, мне нужно как-то подключить этот интерфейс в мой класс или сделать наследование
 

Eifel

Модератор
1,623
78
608
Загугли "интерфейсы в java", прочитай что там рассказываеться и поймешь, что тебе делать
 
7,099
324
1,509
Нужно сделать так, чтобы твой блок расширял этот интерфейс и метод canStabaliseInfusion в твоем блоке возвращал true, если в данной позиции блок может добавлять стабилизацию при соблюдении симметрии. Обрати внимание, что это позвооляет делать сложную логику, типо, чтобы лок мог стабилизировать только в определенной структуре
Как и заметил @Eifel выше, прежде чем браться за моддинг было бы неплохо освоить java.
 
Сверху