📅  最后修改于: 2023-12-03 15:32:54.513000             🧑  作者: Mango
当你在 Minecraft 内建造大型建筑时,经常需要在胸部中存储大量不同种类的物品。有时候你需要找到一些特定的物品,但是搜索过程非常烦琐。本文将介绍如何使用 Java 编写代码,在 Minecraft 中使用自定义名称检测胸部中的特定物品。
首先,你需要下载并安装 Minecraft Forge,这样你就可以使用 Java Mod 来编写 Minecraft 插件。然后,你需要创建一个新的 Eclipse 项目或者 IntelliJ IDEA 项目,并将 Minecraft Forge 添加到项目的依赖中。
下面是一个简单的代码片段,它可以找到指定的物品并输出它们在胸部中的数量。
import net.minecraft.block.Block;
import net.minecraft.block.BlockChest;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.List;
@Mod(modid = "customdetectmod", name = "Custom Detect Mod", version = "1.0")
public class CustomDetectMod {
private Minecraft mc = Minecraft.getMinecraft();
private List<String> itemList = new ArrayList<>();
public CustomDetectMod() {
itemList.add("minecraft:diamond");
itemList.add("minecraft:iron_ingot");
itemList.add("minecraft:gold_ingot");
}
@SubscribeEvent
public void onRenderGameOverlay(RenderGameOverlayEvent event) {
EntityLivingBase entity = mc.renderViewEntity;
if (entity instanceof EntityPlayerSP) {
EntityPlayerSP player = (EntityPlayerSP) entity;
if (player.openContainer instanceof ContainerChest) {
ContainerChest container = (ContainerChest) player.openContainer;
IInventory inventory = container.getLowerChestInventory();
if (inventory instanceof TileEntityChest) {
TileEntityChest chest = (TileEntityChest) inventory;
String customName = chest.getName().getUnformattedText();
for (int i = 0; i < chest.getSizeInventory(); i++) {
ItemStack itemStack = chest.getStackInSlot(i);
if (!itemStack.isEmpty()) {
Item item = itemStack.getItem();
int count = itemStack.getCount();
ResourceLocation itemName = item.getRegistryName();
String itemNameString = itemName.toString();
if (itemList.contains(itemNameString)) {
mc.fontRenderer.drawStringWithShadow(customName + ": " + itemStack.getDisplayName() + " x " + count, 10, 10 + i * 10, 0xFFFFFF);
}
}
}
}
}
}
}
}
上面的代码片段首先创建了一个名为 CustomDetectMod
的 Minecraft Mod。在 CustomDetectMod
类中,定义了一个 itemList
,用于存储需要检测的物品名称。在 CustomDetectMod
的构造函数中,将需要检测的物品名称添加到 itemList
中。
接下来,定义了一个名为 onRenderGameOverlay
的方法,该方法将在渲染游戏界面时被调用。
onRenderGameOverlay
方法首先获取当前玩家实体,并检查当前打开的窗口是否为一个双箱胸。如果是,则获取胸部的 IInventory,并检查其是否为一个 TileEntityChest。然后,循环遍历所有物品槽,获取物品的 Item 对象、数量以及名称。如果物品的名称在 itemList
中,则使用 Minecraft 字体渲染器在游戏界面上输出胸部中该物品的数量和名称。
在 Eclipse 或 IntelliJ IDEA 中运行项目,然后启动 Minecraft。在游戏中,打开双箱胸,在胸部中存储一些设置的物品,你将看到在游戏中输出了存储的物品的名称和数量。
本文介绍了如何使用 Java 编写 Minecraft Mod,在 Minecraft 中使用自定义名称检测胸部中的特定物品。我们讲解了每个代码行的作用和代码的解析过程。运行代码后,你可以在 Minecraft 中测试代码是否正常工作。