Как создать крафт предмета, посредством ударов ингридиента о блок? 1.7.10

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#1
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Всем привет!
Я хочу создать рецепт заточенного кремния, посредством ударов(лкм) о блок (например, камня) кремнием, как это сделано в моде PrimalCore, но у этого мода нет открытого исходного кода + он на 1.10.2+ Вот gif, где видно как это сделано в PrimalCore:
 ИНСТРУМЕНТЫ И НОЧЬ SevTech Ages ПРОХОЖДЕНИЕ СБОРКИ #1 (onlin...GIF
Буду очень признателен, если поможете!
 

Krab

Каменная лига
Сообщения
75
Лучшие ответы
2
Симпатии
16
#2
PlayerInteractEvent.RightClickItem, но это для 1.12. Думаю, в 1.7.10 тоже есть что-то подобное?
 

fixable

Каменная лига
Сообщения
149
Лучшие ответы
5
Симпатии
36
#3
Дам совет если кода не в общем доступе ищи у друзей или знакомых на гитлабе, либо декомпилируй, лично для этого я открываю мод через 7zip и открываю с помощью IDEA
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#4
PlayerInteractEvent есть на 1.7.10, но когда дописываю Right/LeftClickItem выдает ошибку...
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#5
Дам совет если кода не в общем доступе ищи у друзей или знакомых на гитлабе, либо декомпилируй, лично для этого я открываю мод через 7zip и открываю с помощью IDEA
Krab уже написал какой код используется на 1.12.2(то есть какой используется в PrimalCore, мне уже не надо декомпилировать. За совет спасибо, учту!), а сейчас мне нужен похожий код для 1.7.10
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#6
Я нашел, как это будет выглядеть в 1.7.10, только как это все привести в должный вид? Чтобы когда я бил кремнием о блок камня, мне дропался "MyMod.SharpedFlint"?
Вот вид PlayerInteractEvent.LeftClickBlock в 1.7.10:
PlayerInteractEvent.Action.LEFT_CLICK_BLOCK
 

SuperCatMaster

Каменная лига
Сообщения
536
Лучшие ответы
25
Симпатии
58
#7
Не то нашёл ты. Это returnит Event.RESULT. Тебе нужно подобное:
Java:
public void onClick(PlayerInteractEvent e) {
        ItemStack flint = e.entityPlayer.getHeldItem();
        Block block = e.world.getBlock(e.x, e.y, e.z);
}
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#8
Спасибо, SuperCatMaster! А как полностью будет выглядеть этот код, чтобы когда я бил по камню кремнием, мне дропался "MyMod.SharpedFlint"?
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#10
У меня не получается, требует зарегистрировать MyMod.SharpedFlint, как Entity...
Вот...:
    @SubscribeEvent
    public void onClick(PlayerInteractEvent e) {
        ItemStack flint = e.entityPlayer.getHeldItem();
        Block block = e.world.getBlock(e.x, e.y, e.z);
        if(block == Blocks.stone)
        {
            EntityItem item = new EntityItem(e.world, e.x, e.y, e.z, flint);
            e.world.spawnEntityInWorld(MyMod.SharpedFlint);
        }
    }
 

Agravaine

Алмазная лига
Сообщения
4,412
Лучшие ответы
182
Симпатии
578
#11
Забаньте плез, человек ваще не понимает что делает, без основ джавы тут никак.
 

Maxik001

Золотая лига
Сообщения
4,342
Лучшие ответы
40
Симпатии
457
#12
Спасибо за идею!
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#13
Спасибо Timaxa!
Спасибо SuperCatMaster!
Спасибо BlesseNTumble!
Наконец все получилось с вашей помощью!

Вот код::
    @SubscribeEvent
    public void onClick(PlayerInteractEvent event5) {
        ItemStack SharpedFlint = event5.entityPlayer.getHeldItem();
        Block block = event5.world.getBlock(event5.x, event5.y, event5.z);
        if(block == Blocks.stone)
        {
            EntityItem item = new EntityItem(event5.world, event5.x + 0.5, event5.y + 0.5, event5.z + 0.5, new ItemStack(MyMod.SharpedFlint));
            event5.world.spawnEntityInWorld(item);
        }
    }
 

Eifel

Золотая лига
Сообщения
1,308
Лучшие ответы
54
Симпатии
338
#14
То-есть я могу теперь делать заточенный кремний клацая чем угодно по камню, даже пустой рукой? Допиши проверку, ты получил, но нигде не используешь SharpedFlint(а еще там может быть что угодно, даже null)
 

Doc

Золотая лига
Сообщения
2,274
Лучшие ответы
122
Симпатии
288
#15

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#16
То-есть я могу теперь делать заточенный кремний клацая чем угодно по камню, даже пустой рукой? Допиши проверку, ты получил, но нигде не используешь SharpedFlint(а еще там может быть что угодно, даже null)
Это я уже вчера выяснил, что этот код не делает то, что я задумал. Уже исправлено и доделано! Спасибо огромное Timaxa, что очень сильно помог мне с кодом!
Вот сам код:
    @SubscribeEvent
    public void onClick(PlayerInteractEvent event) {
        if (event.action != PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) return;
        ItemStack heldItem = event.entityPlayer.getHeldItem();
        if (heldItem == null) return;

        Block block = event.world.getBlock(event.x, event.y, event.z);
        if (block == Blocks.stone) {

            if (heldItem.getItem() == Items.flint) {
                EntityItem item = new EntityItem(event.world, event.x + 0.5, event.y + 0.5, event.z + 0.5, new ItemStack(MyMod.SharpedFlint));
                if (!event.world.isRemote) {
                    event.world.spawnEntityInWorld(item);
                    event.world.spawnParticle("smoke", event.x + 0.5, event.y + 0.5, event.z + 0.5, 0.0D, 0.0D, 0.0D);

                    if (!event.entityPlayer.capabilities.isCreativeMode) {
                        --heldItem.stackSize;
                        if (heldItem.stackSize <= 0)
                            event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, null);
                        else
                            event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, heldItem);
                    }

                }
            }
        }
    }
 
Последнее редактирование:
Сверху