📜  minecraft 使用自定义名称检测胸部中的特定物品 - Java (1)

📅  最后修改于: 2023-12-03 15:32:54.513000             🧑  作者: Mango

Minecraft 使用自定义名称检测胸部中的特定物品 - Java

当你在 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 中测试代码是否正常工作。