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

Starcry

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

Krab

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

fixable

Каменная лига
Сообщения
155
Лучшие ответы
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

Каменная лига
Сообщения
595
Лучшие ответы
26
Симпатии
71
#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,599
Лучшие ответы
197
Симпатии
653
#11
Забаньте плез, человек ваще не понимает что делает, без основ джавы тут никак.
 

Maxik001

Золотая лига
Сообщения
4,356
Лучшие ответы
41
Симпатии
466
#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,309
Лучшие ответы
54
Симпатии
343
#14
То-есть я могу теперь делать заточенный кремний клацая чем угодно по камню, даже пустой рукой? Допиши проверку, ты получил, но нигде не используешь SharpedFlint(а еще там может быть что угодно, даже null)
 

Doc

Золотая лига
Сообщения
2,341
Лучшие ответы
126
Симпатии
302
#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);
                    }

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