#分享个Minecraft 模组打开GUI的代码
gui代码
sreen.java
package hskgzscz.client.gui; import net.minecraft.world.level.Level; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Inventory; import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.Minecraft; import java.util.HashMap; import hskgzscz.world.inventory.H45Menu; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.systems.RenderSystem; public class H45Screen extends AbstractContainerScreen{ private final static HashMap guistate = H45Menu.guistate; private final Level world; private final int x, y, z; private final Player entity; public H45Screen(H45Menu container, Inventory inventory, Component text) { super(container, inventory, text); this.world = container.world; this.x = container.x; this.y = container.y; this.z = container.z; this.entity = container.entity; this.imageWidth = 304; this.imageHeight = 178; } private static final ResourceLocation texture = new ResourceLocation("hskgzscz:textures/hsk_001.png"); @Override public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { this.renderBackground(ms); super.render(ms, mouseX, mouseY, partialTicks); this.renderTooltip(ms, mouseX, mouseY); } @Override protected void renderBg(PoseStack ms, float partialTicks, int gx, int gy) { RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.setShaderTexture(0, texture); this.blit(ms, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight); RenderSystem.setShaderTexture(0, new ResourceLocation("hskgzscz:textures/fqsureqk3191br_qra2ajmij0aaf.png")); this.blit(ms, this.leftPos + 11, this.topPos + 40, 0, 0, 73, 59, 73, 59); RenderSystem.disableBlend(); } @Override public boolean keyPressed(int key, int b, int c) { if (key == 256) { this.minecraft.player.closeContainer(); return true; } return super.keyPressed(key, b, c); } @Override public void containerTick() { super.containerTick(); } @Override \文字信息\ protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { this.font.draw(poseStack, "u7248u6743u4FE1u606F", 11, 10, -12829636); this.font.draw(poseStack, "u7981u6B62u76D7u7528uFF01uFF01uFF01", 10, 24, -3407872); this.font.draw(poseStack, "u7EA2u77F3u5757u5DE5u4F5Cu5BA4 u00A9 2022 u7248u6743u6240u6709 ", 164, 157, -12829636); this.font.draw(poseStack, "u5982u679Cu53D1u73B0u76D7u7248u8BF7u8054u7CFBu4F5Cu8005", 119, 15, -12829636); this.font.draw(poseStack, "u4F5Cu8005u90AEu7BB1uFF1A730899***@QQ.com", 119, 38, -12829636); this.font.draw(poseStack, "u7559u8A00u6807u9898uFF1Au6A21u7EC4u88ABu76D7u7248", 119, 55, -12829636); this.font.draw(poseStack, "u5185u5BB9uFF1Au88ABu76D7u6A21u7EC4 ,u76D7u7248u6A21u7EC4u540Du5B57", 120, 70, -12829636); } @Override public void onClose() { super.onClose(); Minecraft.getInstance().keyboardHandler.setSendRepeatsToGui(false); } @Override public void init() { super.init(); this.minecraft.keyboardHandler.setSendRepeatsToGui(true); } }
效果图
menu.java
package hskgzscz.world.inventory; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.IItemHandler; import net.minecraft.world.level.Level; import net.minecraft.world.inventory.Slot; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Inventory; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.core.BlockPos; import java.util.function.Supplier; import java.util.Map; import java.util.HashMap; import hskgzscz.procedures.BQDangMingLingBeiZhiXingShiProcedure; import hskgzscz.init.HskgzsczModMenus; public class H45Menu extends AbstractContainerMenu implements Supplier
打开GUI的代码
package hskgzscz.procedures;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.event.CommandEvent;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.MenuProvider;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.core.BlockPos;
import javax.annotation.Nullable;
import io.netty.buffer.Unpooled;
import hskgzscz.world.inventory.H45Menu;
@Mod.EventBusSubscriber
public class WqDangYouJianDianJiKongQiShiShiTiDeWeiZhiProcedure {
@SubscribeEvent
public static void onCommand(CommandEvent event) {
Entity entity = event.getParseResults().getContext().getSource().getEntity();
if (entity != null) {
execute(event, entity.level, entity.getX(), entity.getY(), entity.getZ(), entity);
}
}
public static void execute(LevelAccessor world, double x, double y, double z, Entity entity) {
execute(null, world, x, y, z, entity);
}
private static void execute(@Nullable Event event, LevelAccessor world, double x, double y, double z, Entity entity) {
if (entity == null)
return;
{
if (entity instanceof ServerPlayer _ent) {
BlockPos _bpos = new BlockPos(x, y, z);
NetworkHooks.openGui((ServerPlayer) _ent, new MenuProvider() {
@Override
public Component getDisplayName() {
return new TextComponent("你要打开的gui");
}
@Override
public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
return new H45Menu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(_bpos));
}
}, _bpos);
}
}
}
}
需要考虑到文件路径



