[Чёртов 1.12.2] 2 вопроса про замену блока в мире, и выдачу предметов в инвентарь.

Версия Minecraft
1.12.2
2,932
44
598
Не доброго времени суток Земляне и Чужие! (Ну кроме @timaxa007, ему всегда всё доброе :) ) (Рофл)
Сегодня у меня появились вопросы связанные с этим вашим буржуйским Forge api на 1.12.2:
  1. Мне надо сделать так что бы при событий onPlayerRightClickBlock когда игрок тыкнул по блоку снега (например :mc_78-0:) ему в инвентарь выдался снежный шарик ( :mc_332-0: ). Я тут что-то типо этого собрал:
    Java:
        @SubscribeEvent    public static boolean onPlayerRightClickBlock(PlayerInteractEvent.RightClickBlock event, ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int s) {
       
            if (!world.isRemote && world.getBlockState.BlockPos(x, y, z) == Blocks.SNOW.getDefaultState()) {
                player.inventory.addItemStackToInventory(new ItemStack(Items.SNOWBALL));
                return true;
            }
            return false;
        }
  2. Мне надо что бы когда игрок в этом же событий (Ну не прям в этом, а я другом onPlayerRightClickBlock) когда тыкнул по блоку снега на его месте появился слой снега.
 
Последнее редактирование:

Sainthozier

Стрелочник
623
11
369
Вот тут посмотри как чувак обращается к методам, на суть его проблемы можешь забить, это тебе не нужно.
И даже если не знаешь толком ничего об экземпляре какого-либо класса, юзай Ctrl + Space, IDE всё подскажет.
И ещё уточни это:
сделать так что бы при событий onPlayerRightClickBlock
в этом же событий (Ну не прям в этом, а я другом onPlayerRightClickBlock)
 
2,932
44
598
Ну ещё одно такое же событие. (Два раза сделать события)

Забей кароче про это.
---
По поводу экземпляа класса: Я это на коленках из кода под 1.7.10 собрал, не уверен что это вообще работает.
 
5,018
47
783
если делаешь событие, в аргументах метода должно быть только событие, иначе работать не будет.
 
1,057
50
234
Java:
@Override
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        if(!world.isRemote && world.getBlockState(pos).getBlock() == Blocks.SNOW)
        {
            player.inventory.addItemStackToInventory(new ItemStack(Items.SNOWBALL));
            return EnumActionResult.SUCCESS;
        }
        return EnumActionResult.PASS;
        
    }
 

Icosider

Kotliner
Администратор
3,603
99
664
1, 2 читай учебник про события. Всё написано, то что у тебя в коде это ерунда. Как сказал Максик, у тебя должен быть лишь один параметр(само событие), в противном случаи шина не подхватит твой метод.
 
2,932
44
598
1, 2 читай учебник про события.
Где, что? Использование событий - Minecraft Modding
Как сказал Максик, у тебя должен быть лишь один параметр(само событие), в противном случаи шина не подхватит твой метод.
Ясно, спасибо не знал.
Всё написано, то что у тебя в коде это ерунда.
Ещё бы...

@BlesseNtumble, спасибо!
 

Icosider

Kotliner
Администратор
3,603
99
664
О Боже! Когда читать научишься? Из самого минимума даже понятно, что используется лишь один параметр. Помимо этого тут используется реализация с использование данных самого события.
Java:
    @SubscribeEvent
    public void onDeath(LivingDeathEvent e)
    {
        if (e.getEntity() instanceof EntityPlayer)
        {
            EntityPlayer player = (EntityPlayer) e.getEntity();

            if (player.getName().equals("_Ivasik_"))
            {
                player.dropItem(new ItemStack(Items.GOLDEN_APPLE, 1, 1), false);
            }
        }
    }
 
2,932
44
598
Из самого минимума даже понятно, что используется лишь один параметр. Помимо этого тут используется реализация с использование данных самого события.
Спасибо! Я это уже понял из второго (#4) сообщения от @AbstractShape. Зачем эту воду мутить?
~~~
По идей вот так оно должно работать?
Java:
    @SubscribeEvent
    public static void onPlayerRightClickBlock(PlayerInteractEvent.RightClickBlock ev) {
        
        World world = ev.getWorld();
        EntityPlayer entityPlayer = ev.getEntityPlayer();
        BlockPos blockPos = ev.getPos();
        
         if(!world.isRemote && world.getBlockState(blockPos).getBlock() == Blocks.SNOW)
            {
                entityPlayer.inventory.addItemStackToInventory(new ItemStack(Items.SNOWBALL));
            }
    }
Я прав или нет?
 
2,932
44
598
Круто, народ! Работает! Спасибо всем кто участвовал в данном вопросе!
1531384988608.png

Теперь надо перейти ко второму вопросу, а именно как заменить допустим блок снега, на блок травы?
 
Сверху