Client GUI test

This commit is contained in:
Eugene Rybalkin 2024-04-12 22:24:54 +03:00
parent 714570c75f
commit f7c54d756a
10 changed files with 125 additions and 29 deletions

View File

@ -21,6 +21,7 @@ public class CustomItem extends Item{
@Override @Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) { public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
playerEntity.openHandledScreen(null);
playerEntity.playSound(SoundEvents.BLOCK_BELL_USE, 1.0F, 1.0F); playerEntity.playSound(SoundEvents.BLOCK_BELL_USE, 1.0F, 1.0F);
return TypedActionResult.success(playerEntity.getStackInHand(hand)); return TypedActionResult.success(playerEntity.getStackInHand(hand));
} }

View File

@ -1,20 +1,28 @@
package com.youpe.test; package com.youpe.test;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.fabricmc.fabric.api.registry.FuelRegistry; import net.fabricmc.fabric.api.registry.FuelRegistry;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemGroups; import net.minecraft.item.ItemGroups;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.Rarity; import net.minecraft.util.Rarity;
import org.joml.Matrix4f;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.mojang.blaze3d.systems.RenderSystem;
public class Testing implements ModInitializer { public class Testing implements ModInitializer {
// This logger is used to write text to the console and the log file. // This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name. // It is considered best practice to use your mod id as the logger's name.
@ -34,5 +42,22 @@ public class Testing implements ModInitializer {
ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(content -> { ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(content -> {
content.add(CUSTOM_ITEM); content.add(CUSTOM_ITEM);
}); });
HudRenderCallback.EVENT.register((drawContext, tickDelta) -> {
Matrix4f positionMatrix = drawContext.getMatrices().peek().getPositionMatrix();
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuffer();
buffer.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR_TEXTURE);
buffer.vertex(positionMatrix, 20, 20, 0).color(1f, 1f, 1f, 1f).texture(0f, 0f).next();
buffer.vertex(positionMatrix, 20, 60, 0).color(1f, 0f, 0f, 1f).texture(0f, 1f).next();
buffer.vertex(positionMatrix, 60, 60, 0).color(0f, 1f, 0f, 1f).texture(1f, 1f).next();
buffer.vertex(positionMatrix, 60, 20, 0).color(0f, 0f, 1f, 1f).texture(1f, 0f).next();
RenderSystem.setShader(GameRenderer::getPositionColorTexProgram);
RenderSystem.setShaderTexture(0, new Identifier("testing", "icon.png"));
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
tessellator.draw();
});
} }
} }

View File

@ -0,0 +1,15 @@
package com.youpe.test;
import com.youpe.test.event.KeyInputHandler;
import net.fabricmc.api.ClientModInitializer;
public class TestingClient implements ClientModInitializer{
@Override
public void onInitializeClient() {
KeyInputHandler.register();
KeyInputHandler.registerKeyInputs();
}
}

View File

@ -1,11 +0,0 @@
package com.youpe.test;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
public class TestingDataGenerator implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
}
}

View File

@ -0,0 +1,35 @@
package com.youpe.test.client;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
public class GUI extends Screen {
public GUI(Text title) {
super(title);
}
public ButtonWidget button1;
public ButtonWidget button2;
@Override
public void init() {
button1 = ButtonWidget.builder(Text.literal("Button 1"), button -> {
System.out.println("You clicked button1!");
})
.dimensions(width / 2 - 205, 20, 200, 20)
.tooltip(Tooltip.of(Text.literal("Tooltip of button1")))
.build();
button2 = ButtonWidget.builder(Text.literal("Button 2"), button -> {
System.out.println("You clicked button2!");
})
.dimensions(width / 2 + 5, 20, 200, 20)
.tooltip(Tooltip.of(Text.literal("Tooltip of button2")))
.build();
addDrawableChild(button1);
addDrawableChild(button2);
}
}

View File

@ -0,0 +1,41 @@
package com.youpe.test.event;
import org.lwjgl.glfw.GLFW;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.youpe.test.client.GUI;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
public class KeyInputHandler {
public static final Logger LOGGER = LoggerFactory.getLogger("testing");
public static final String KEY_CATEGORY_TESTING = "key.category.testing.tutorial";
public static final String KEY_TEST = "key.testing.test";
public static KeyBinding modkey;
public static void registerKeyInputs() {
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (modkey.wasPressed()) {
LOGGER.info("NAZHAL PIZDEC BLYA");
client.player.sendMessage(Text.literal("PIZDEC"));
MinecraftClient.getInstance().setScreen(new GUI(Text.empty()));
}
});
}
public static void register() {
modkey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
KEY_TEST,
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_B,
KEY_CATEGORY_TESTING));
}
}

View File

@ -1,15 +0,0 @@
package com.youpe.test.mixin;
import net.minecraft.server.MinecraftServer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MinecraftServer.class)
public class ExampleMixin {
@Inject(at = @At("HEAD"), method = "loadWorld")
private void init(CallbackInfo info) {
// This code is injected into the start of MinecraftServer.loadWorld()V
}
}

View File

@ -1,4 +1,6 @@
{ {
"item.testing.custom_item": "Pizdec", "item.testing.custom_item": "Pizdec",
"item.testing.custom_item.tooltip": "hahaha" "item.testing.custom_item.tooltip": "hahaha",
"key.category.testing.tutorial": "Testing",
"key.testing.test": "Test"
} }

View File

@ -18,6 +18,9 @@
"main": [ "main": [
"com.youpe.test.Testing" "com.youpe.test.Testing"
], ],
"client": [
"com.youpe.test.TestingClient"
],
"fabric-datagen": [ "fabric-datagen": [
"com.youpe.test.TestingDataGenerator" "com.youpe.test.TestingDataGenerator"
] ]

View File

@ -1,5 +1,5 @@
{ {
"required": true, "required": false,
"package": "com.youpe.test.mixin", "package": "com.youpe.test.mixin",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_17",
"mixins": [ "mixins": [