Как я могу дать игроку случайный блок? Спасибо! (Моддинг Minecraft Forge 1.15) - PullRequest
0 голосов
/ 07 мая 2020

Я хочу, чтобы игрок получал случайный блок каждый раз, когда он держит блок коренных пород (только пример, позже я хочу сделать более крутые вещи). Я закодировал это, что что-то происходит, когда игрок держит блок коренных пород. Но я не знаю, как дать игроку случайный блок ... Спасибо за вашу помощь!

Код:

           package com.kelbig.mod.events;

import com.kelbig.mod.FirstMod;

import net.minecraft.entity.LivingEntity;
import net.minecraft.item.Items;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;



@Mod.EventBusSubscriber (modid = FirstMod.MOD_ID, bus = Bus.FORGE)
public class RightClickBlock {  


    @SubscribeEvent 
    public static void on(FOVUpdateEvent event) {



        if(player.getHeldItemMainhand().getItem() == Items.BEDROCK) 
        {           
                        event.setNewfov(event.getFov() * 1.3F); 
                 }       

}

1 Ответ

0 голосов
/ 09 мая 2020

Похоже, что Item::getItemById использует реестр элементов для получения элемента. Зарегистрированные Item кажутся сохраненными в итераторе. Block имеет аналогичный реестр. Это мы можем использовать.

Что-то вроде этого может сработать:

Iterator<Block> itemIterator = Registry.BLOCK.iterator(); // Gets the registry iterator
ArrayList<Block> blockList = new ArrayList<>();

for (Iterator<Block> it = itemIterator; it.hasNext(); ) // Iterates through registry iterator
{
    blockList.add(it.next()); // Adds each element to a List (easier to get a random element from)
}

Random rand = new Random();
Block randomBlock = blockList.get(rand.nextInt(blockList.size())); // Chooses a random element from the List of Blocks

Затем вы можете делать все, что угодно, с помощью Block. Чтобы получить его в формате Item, выполните команду Item itemFromRandomBlock = randomBlock.asItem().

Это не проверено. Я не слишком знаком с моддингом 1.15, но похоже, что он будет работать.

...