我希望玩家每次持有基岩块时都会得到一个随机块(仅作为示例,稍后我想做一些更酷的事情)。我编码为当玩家持有基岩块时会发生某种情况。但我不知道如何随机分配播放器...谢谢您的帮助!
代码:
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
List<Block> itemList = new ArrayList<>();
for (Iterator<Block> it = itemIterator; it.hasNext(); ) // Iterates through registry iterator
{
itemList.add(it.next()); // Adds each element to a List (easier to get a random element from)
}
Random rand = new Random();
Block randomBlock = itemList.get(rand.nextInt(itemList.size())); // Chooses a random element from the List of Blocks
然后您可以使用Block
做各种事情。要以Item
格式获取它,请执行Item itemFromRandomBlock = randomBlock.asItem()
。
未经测试。我对1.15改装不太熟悉,但是看起来可以使用。