我如何给玩家一个随机的方块?谢谢(Minecraft锻造修改1.15)



我希望玩家每次持有基石块时都会得到一个随机块(只是一个例子,稍后我想做一些更酷的事情(我编码它,当玩家持有基石块的时候会发生一些事情。但我不知道如何给玩家一个随机的方块。。。谢谢你的帮助!

代码:

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); 
}       
}

看起来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的修改,但看起来它会起作用。

最新更新