我希望玩家每次持有基石块时都会得到一个随机块(只是一个例子,稍后我想做一些更酷的事情(我编码它,当玩家持有基石块的时候会发生一些事情。但我不知道如何给玩家一个随机的方块。。。谢谢你的帮助!
代码:
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的修改,但看起来它会起作用。