栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

分享个Minecraft 模组打开GUI的代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分享个Minecraft 模组打开GUI的代码

#分享个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> {
	public final static HashMap guistate = new HashMap<>();
	public final Level world;
	public final Player entity;
	public int x, y, z;
	private IItemHandler internal;
	private final Map customSlots = new HashMap<>();
	private boolean bound = false;

	public H45Menu(int id, Inventory inv, FriendlyByteBuf extraData) {
		super(HskgzsczModMenus.HSK_001, id);
		this.entity = inv.player;
		this.world = inv.player.level;
		this.internal = new ItemStackHandler(0);
		BlockPos pos = null;
		if (extraData != null) {
			pos = extraData.readBlockPos();
			this.x = pos.getX();
			this.y = pos.getY();
			this.z = pos.getZ();
		}

		BQDangMingLingBeiZhiXingShiProcedure.execute(entity);
	}

	@Override
	public boolean stillValid(Player player) {
		return true;
	}

	public Map get() {
		return customSlots;
	}
}

打开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);
			}
		}
	}
}

需要考虑到文件路径

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号