где находится логика зачарования удачи

Версия Minecraft
1.7.10
235
3
21
добрый день

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

где прописана логика этого чара?
 
7,099
324
1,510
В самих рудах. Чекни метод блока, возвращающий дроп при разрушении getItemDropped
Чтобы убрать опыт нужно хуком исправить getExpDrop, там тоже есть аргумент соответствующей лвл зачара удачи
Java:
public int getExpDrop(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune)
 
Последнее редактирование:
3,005
192
592
BlockOre#quantityDroppedWithBonus
Там первый параметр - это фортуна.
Можешь увидеть, что рандом идет относительно этой переменной.
1558178757431.png
 
1,200
37
237
Выше тебе правильно подсказали, но без вмешательства хуков или чего похожего ты не поправишь опыт для блоков, которые делал не ты.

Попробуй BlockEvent.BreakEvent, у него есть поле exp, осталось лишь получить уровень удачи в предмете игрока и делать проверки на нужные блоки.
 
3,005
192
592
235
3
21
Java:
public class BlockOreHook
{
    private static Random rand = new Random();
    
    @Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
    public static int quantityDroppedWithBonus(BlockOre blockOre, int fortuneLevel, Random rand)
    {       
        if (fortuneLevel > 0)
        {
            if(blockOre == Blocks.coal_ore || blockOre == Blocks.diamond_ore || blockOre == Blocks.emerald_ore || blockOre == Blocks.lapis_ore || blockOre == Blocks.quartz_ore || blockOre == Blocks.redstone_ore)
            {
                ModSyntheticMethods.setNoExpDrop(blockOre, true);
            }

            if(Item.getItemFromBlock(blockOre) != blockOre.getItemDropped(0, rand, fortuneLevel))
            {
                int j = rand.nextInt(fortuneLevel + 2) - 1;

                if (j < 0)
                {
                    j = 0;
                }

                return blockOre.quantityDropped(rand) * (j + 1);
            }
            else
            {
                return blockOre.quantityDropped(rand);
            }
        }
        else
        {
            return blockOre.quantityDropped(rand);
        }
    }
    
    @Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
    public static int getExpDrop(BlockOre blockOre, IBlockAccess blockAccess, int p_149690_5_, int p_149690_7_)
    {
        if (blockOre.getItemDropped(p_149690_5_, rand, p_149690_7_) != Item.getItemFromBlock(blockOre) && !ModSyntheticMethods.getNoExpDrop(blockOre))
        {
            int j1 = 0;

            if (blockOre == Blocks.coal_ore)
            {
                j1 = MathHelper.getRandomIntegerInRange(rand, 0, 2);
            }
            else if (blockOre == Blocks.diamond_ore)
            {
                j1 = MathHelper.getRandomIntegerInRange(rand, 3, 7);
            }
            else if (blockOre == Blocks.emerald_ore)
            {
                j1 = MathHelper.getRandomIntegerInRange(rand, 3, 7);
            }
            else if (blockOre == Blocks.lapis_ore)
            {
                j1 = MathHelper.getRandomIntegerInRange(rand, 2, 5);
            }
            else if (blockOre == Blocks.quartz_ore)
            {
                j1 = MathHelper.getRandomIntegerInRange(rand, 2, 5);
            }

            return j1;
        }
        
        return 0;
    }
}
 
7,099
324
1,510
Та-ак. А почему мой более ранний и исчерпывающий ответ не получил благодарности?
MCP с исходниками игры и сразу правил
Непосредственно редачить - значит никогда не публиковать свою работу(из-за eula). А юзать патчи как форж - может быть не очень удобно
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Непосредственно редачить - значит никогда не публиковать свою работу(из-за eula)
Самому не смешно?) Я почти уверен что он делает свой проект.
Никто не будет тебя мурыжить за это в ру сегменте)
 
3,005
192
592
7,099
324
1,510
Пока редачил ответ - не обновлял страницу и не смотрел ,что кто-то еще отвечает
 
Сверху