Added some important stuff

This commit is contained in:
2026-07-06 18:52:02 +02:00
parent d28e476802
commit 8471d50646
5 changed files with 169 additions and 3 deletions
@@ -0,0 +1,62 @@
package de.fullrisk.citrusDev.UI;
import io.wispforest.owo.ui.component.LabelComponent;
import io.wispforest.owo.ui.component.UIComponents;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.container.UIContainers;
import io.wispforest.owo.ui.core.*;
import io.wispforest.owo.ui.hud.Hud;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.Identifier;
public class Module_FPS {
private static LabelComponent fpsLabel;
private static FlowLayout fpsContainer;
static boolean toggle = true;
private static boolean shown = false; // tracks current visible/built state
private static final Surface GLASS_PANEL = Surface.blur(5f, 15f)
.and(Surface.flat(0x40FFFFFF));
public static void register() {
Hud.add(Identifier.fromNamespaceAndPath("citrus-dev", "fps_display"), () -> {
if (fpsContainer == null) {
fpsLabel = UIComponents.label(Component.literal(""));
fpsContainer = UIContainers.horizontalFlow(Sizing.content(), Sizing.content());
fpsContainer.gap(4);
fpsContainer.verticalAlignment(VerticalAlignment.CENTER);
fpsContainer.horizontalAlignment(HorizontalAlignment.CENTER);
fpsContainer.positioning(Positioning.absolute(10, 10));
// start hidden; tick()/first update will populate it
fpsContainer.padding(Insets.of(0));
}
return fpsContainer;
});
}
public static void tick() {
if (fpsContainer == null) return;
if (toggle && !shown) {
// turning on: restore the panel chrome and label
fpsContainer.surface(GLASS_PANEL);
fpsContainer.padding(Insets.of(6));
fpsContainer.child(fpsLabel);
shown = true;
} else if (!toggle && shown) {
// turning off: strip everything so it collapses to nothing
fpsContainer.clearChildren();
fpsContainer.surface(Surface.flat(0));
fpsContainer.padding(Insets.of(0));
shown = false;
}
if (!toggle) return;
Minecraft client = Minecraft.getInstance();
fpsLabel.text(Component.literal(client.getFps() + " FPS"));
}
}
@@ -56,7 +56,7 @@ public class MyScreen extends BaseOwoScreen<FlowLayout> {
// ----- Sidebar ----- // ----- Sidebar -----
FlowLayout sidebar = UIContainers.verticalFlow(Sizing.fixed(sidebarWidth), Sizing.fixed(innerHeight)); FlowLayout sidebar = UIContainers.verticalFlow(Sizing.fixed(sidebarWidth), Sizing.fixed(innerHeight));
sidebar.horizontalAlignment(HorizontalAlignment.CENTER); sidebar.horizontalAlignment(HorizontalAlignment.CENTER);
sidebar.verticalAlignment(VerticalAlignment.CENTER); sidebar.verticalAlignment(VerticalAlignment.TOP);
sidebar.padding(Insets.of(4)); sidebar.padding(Insets.of(4));
sidebar.gap(2); sidebar.gap(2);
@@ -75,6 +75,22 @@ public class MyScreen extends BaseOwoScreen<FlowLayout> {
sidebarButton.verticalSizing(Sizing.fixed(20)); sidebarButton.verticalSizing(Sizing.fixed(20));
sidebarButton.scale().animate(300, Easing.CUBIC, new ScaleValue(1f)).forwards(); sidebarButton.scale().animate(300, Easing.CUBIC, new ScaleValue(1f)).forwards();
var friendsButton = new ScalableButton(Component.literal("-"), btn -> {
Minecraft.getInstance().getSoundManager().play(
SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK.value(), 2.0F, 2)
);
},
0x80FFFFFF, // base fill
0xA0FFFFFF, // hovered fill
0xFFFFFFFF, // base outline
0xFFFFFFFF, // hovered outline
1 // outline width
);
friendsButton.horizontalSizing(Sizing.fixed(20));
friendsButton.verticalSizing(Sizing.fixed(20));
friendsButton.scale().animate(300, Easing.CUBIC, new ScaleValue(1f)).forwards();
sidebar.child(friendsButton);
sidebar.child(sidebarButton); sidebar.child(sidebarButton);
panel.child(sidebar); panel.child(sidebar);
@@ -0,0 +1,71 @@
package de.fullrisk.citrusDev.UI;
import io.wispforest.owo.ui.base.BaseOwoScreen;
import io.wispforest.owo.ui.component.UIComponents;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.container.UIContainers;
import io.wispforest.owo.ui.core.HorizontalAlignment;
import io.wispforest.owo.ui.core.OwoUIAdapter;
import io.wispforest.owo.ui.core.VerticalAlignment;
import net.minecraft.network.chat.Component;
import io.wispforest.owo.ui.core.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.resources.Identifier;
import net.minecraft.sounds.SoundEvents;
public class OverviewScreen extends BaseOwoScreen<FlowLayout> {
@Override
protected OwoUIAdapter<FlowLayout> createAdapter() {
return OwoUIAdapter.create(this, UIContainers::verticalFlow);
}
@Override
protected void build(FlowLayout rootComponent) {
rootComponent.gap(2);
rootComponent
.horizontalAlignment(HorizontalAlignment.CENTER)
.verticalAlignment(VerticalAlignment.CENTER);
FlowLayout iconButton = UIContainers.horizontalFlow(Sizing.content(), Sizing.content());
iconButton.gap(4);
iconButton.verticalAlignment(VerticalAlignment.CENTER);
iconButton.horizontalAlignment(HorizontalAlignment.CENTER);
iconButton.padding(Insets.of(6));
Surface glassPanel = Surface.blur(5f, 15f)
.and(Surface.flat(0x40FFFFFF))
.and(Surface.outline(0xFFFFFFFF));
iconButton.surface(glassPanel);
iconButton.child(UIComponents.texture(
Identifier.fromNamespaceAndPath("minecraft", "textures/item/diamond.png"),
0, 0, 16, 16, 16, 16
));
iconButton.child(UIComponents.label(Component.literal("Click me")));
iconButton.mouseEnter().subscribe(() -> {
iconButton.surface(Surface.blur(5f, 15f)
.and(Surface.flat(0x70FFFFFF))
.and(Surface.outline(0xFFFFFFFF)));
});
iconButton.mouseLeave().subscribe(() -> {
iconButton.surface(Surface.blur(5f, 15f)
.and(Surface.flat(0x40FFFFFF))
.and(Surface.outline(0xFFFFFFFF)));
});
iconButton.mouseDown().subscribe((click, doubled) -> {
Module_FPS.toggle = !Module_FPS.toggle;
Minecraft.getInstance().getSoundManager().play(
SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK.value(), 2.0F, 2)
);
return true;
});
rootComponent.child(iconButton);
}
@Override
public boolean isPauseScreen() {
return false;
}
}
@@ -1,6 +1,9 @@
package de.fullrisk.citrusDev.client; package de.fullrisk.citrusDev.client;
import de.fullrisk.citrusDev.UI.Module_FPS;
import de.fullrisk.citrusDev.UI.MyScreen; import de.fullrisk.citrusDev.UI.MyScreen;
import de.fullrisk.citrusDev.UI.OverviewScreen;
import io.wispforest.owo.ui.hud.Hud;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper;
@@ -11,9 +14,12 @@ import org.lwjgl.glfw.GLFW;
public class CitrusDevClient implements ClientModInitializer { public class CitrusDevClient implements ClientModInitializer {
private static KeyMapping openScreenKey; private static KeyMapping openScreenKey;
private static KeyMapping openOverviewKey;
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
Module_FPS.register();
KeyMapping.Category category = KeyMapping.Category.register( KeyMapping.Category category = KeyMapping.Category.register(
Identifier.fromNamespaceAndPath("citrus-dev", "general")); Identifier.fromNamespaceAndPath("citrus-dev", "general"));
@@ -22,11 +28,21 @@ public class CitrusDevClient implements ClientModInitializer {
GLFW.GLFW_KEY_G, GLFW.GLFW_KEY_G,
category category
)); ));
openOverviewKey = KeyMappingHelper.registerKeyMapping(new KeyMapping(
"key.citrus-dev.open_ui",
GLFW.GLFW_KEY_RIGHT_SHIFT,
category
));
ClientTickEvents.END_CLIENT_TICK.register(client -> { ClientTickEvents.END_CLIENT_TICK.register(client -> {
Module_FPS.tick(); // update every tick, unconditionally
while (openScreenKey.consumeClick()) { while (openScreenKey.consumeClick()) {
client.setScreen(new MyScreen()); client.setScreen(new MyScreen());
} }
while (openOverviewKey.consumeClick()) {
client.setScreen(new OverviewScreen());
}
}); });
} }
} }
+3 -2
View File
@@ -1,4 +1,5 @@
{ {
"category.citrus-dev.main": "My Mod Keybinds", "category.citrus-dev.general": "Citrus",
"key.citrus-dev.action_name": "Do Action" "key.citrus-dev.open_screen": "Module Screen",
"key.citrus-dev.open_ui": "Main UI"
} }