Skip to content

Commit

Permalink
update class names
Browse files Browse the repository at this point in the history
  • Loading branch information
uhb217 committed Jan 4, 2024
1 parent 58c0577 commit f3965c0
Show file tree
Hide file tree
Showing 8 changed files with 272 additions and 10 deletions.
6 changes: 5 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
maven {
name = "CottonMC"
url = "https://server.bbkr.space/artifactory/libs-release"
}
}

loom {
Expand All @@ -41,7 +45,7 @@ dependencies {

// Uncomment the following line to enable the deprecated Fabric API modules.
// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.

modImplementation include("io.github.cottonmc:LibGui:9.2.1+1.20.2")
// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"
}

Expand Down
15 changes: 15 additions & 0 deletions src/client/java/net/uhb217/glowingentity/GlowingEntityClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,21 @@
import com.mojang.brigadier.arguments.IntegerArgumentType;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.uhb217.glowingentity.gui.TestGUI;
import net.uhb217.glowingentity.gui.TestScreen;
import net.uhb217.glowingentity.utils.KeyInputHandler;

import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;

public class GlowingEntityClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
//register commands
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal("entity_glowing")
.then(argument("glowing", IntegerArgumentType.integer())
.executes(context -> {
Expand All @@ -24,5 +30,14 @@ public void onInitializeClient() {
context.getSource().sendFeedback(Text.literal("The Entity Glowing set to: " + glow).formatted(Formatting.DARK_AQUA));
return value;
}))));
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal("my_screen")
.executes(context -> {
if (context.getSource().getWorld().isClient()){
context.getSource().getClient().setScreen(new TestScreen(new TestGUI()));
}
return 1;
})));
//register KeyBiding
KeyInputHandler.register();
}
}
56 changes: 56 additions & 0 deletions src/client/java/net/uhb217/glowingentity/gui/TestGUI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package net.uhb217.glowingentity.gui;

import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription;
import io.github.cottonmc.cotton.gui.client.ScreenDrawing;
import io.github.cottonmc.cotton.gui.impl.LibGuiCommon;
import io.github.cottonmc.cotton.gui.impl.client.NarrationMessages;
import io.github.cottonmc.cotton.gui.widget.WGridPanel;
import io.github.cottonmc.cotton.gui.widget.WLabel;
import io.github.cottonmc.cotton.gui.widget.WToggleButton;
import io.github.cottonmc.cotton.gui.widget.WWidget;
import io.github.cottonmc.cotton.gui.widget.data.InputResult;
import io.github.cottonmc.cotton.gui.widget.data.Texture;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.screen.narration.NarrationPart;
import net.minecraft.client.sound.PositionedSoundInstance;
import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;

import java.util.function.Consumer;

public class TestGUI extends LightweightGuiDescription {
public TestGUI() {
WGridPanel root = new WGridPanel();
setRootPanel(root);
root.setSize(300, 200);
WToggleButton button = new WToggleButton(Text.literal("Off"));
button.setOnToggle(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) {
if (aBoolean)
button.setLabel(Text.literal("On"));
else
button.setLabel(Text.literal("Off"));
}
});
root.add(button,1,0);
WToggleButton button1 = new WToggleButton(Text.literal("Off"));
button1.setOnToggle(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) {
if (aBoolean)
button1.setLabel(Text.literal("On"));
else
button1.setLabel(Text.literal("Off"));
}
});
root.add(button1,1,1);
}
}
13 changes: 13 additions & 0 deletions src/client/java/net/uhb217/glowingentity/gui/TestScreen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package net.uhb217.glowingentity.gui;

import io.github.cottonmc.cotton.gui.GuiDescription;
import io.github.cottonmc.cotton.gui.client.CottonClientScreen;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;

@Environment(EnvType.CLIENT)
public class TestScreen extends CottonClientScreen {
public TestScreen(GuiDescription description) {
super(description);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package net.uhb217.glowingentity.mixin.client;

import io.github.cottonmc.cotton.gui.widget.WLabel;
import net.minecraft.client.gui.screen.ConfirmScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
import net.minecraft.client.gui.screen.option.*;
import net.minecraft.client.gui.screen.pack.PackScreen;
import net.minecraft.client.gui.widget.*;
import net.minecraft.client.option.GameOptions;
import net.minecraft.network.packet.c2s.play.UpdateDifficultyLockC2SPacket;
import net.minecraft.resource.ResourcePackManager;
import net.minecraft.screen.ScreenTexts;
import net.minecraft.text.Text;
import net.minecraft.world.Difficulty;
import net.uhb217.glowingentity.gui.TestGUI;
import net.uhb217.glowingentity.gui.TestScreen;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.function.Supplier;

@Mixin(OptionsScreen.class)
public abstract class GameMenuScreenMixin extends Screen{
protected GameMenuScreenMixin(Text title, Screen parent) {
super(title);
this.parent = parent;
}
@Shadow @Final private GameOptions settings;
@Shadow private CyclingButtonWidget<Difficulty> difficultyButton;
@Shadow private LockButtonWidget lockDifficultyButton;
@Shadow private final Screen parent;
private static final Text SKIN_CUSTOMIZATION_TEXT = Text.translatable("options.skinCustomisation");
private static final Text SOUNDS_TEXT = Text.translatable("options.sounds");
private static final Text VIDEO_TEXT = Text.translatable("options.video");
private static final Text CONTROL_TEXT = Text.translatable("options.controls");
private static final Text LANGUAGE_TEXT = Text.translatable("options.language");
private static final Text CHAT_TEXT = Text.translatable("options.chat");
private static final Text RESOURCE_PACK_TEXT = Text.translatable("options.resourcepack");
private static final Text ACCESSIBILITY_TEXT = Text.translatable("options.accessibility");
private static final Text TELEMETRY_TEXT = Text.translatable("options.telemetry");
private static final Text CREDITS_AND_ATTRIBUTION_TEXT = Text.translatable("options.credits_and_attribution");

private ButtonWidget createButton(Text message, Supplier<Screen> screenSupplier) {
return ButtonWidget.builder(message, button -> this.client.setScreen((Screen)screenSupplier.get())).build();
}
private Widget createTopRightButton() {
if (this.client.world != null && this.client.isIntegratedServerRunning()) {
this.difficultyButton = OptionsScreen.createDifficultyButtonWidget(0, 0, "options.difficulty", this.client);
if (!this.client.world.getLevelProperties().isHardcore()) {
this.lockDifficultyButton = new LockButtonWidget(
0,
0,
button -> this.client
.setScreen(
new ConfirmScreen(
this::lockDifficulty,
Text.translatable("difficulty.lock.title"),
Text.translatable("difficulty.lock.question", new Object[]{this.client.world.getLevelProperties().getDifficulty().getTranslatableName()})
)
)
);
this.difficultyButton.setWidth(this.difficultyButton.getWidth() - this.lockDifficultyButton.getWidth());
this.lockDifficultyButton.setLocked(this.client.world.getLevelProperties().isDifficultyLocked());
this.lockDifficultyButton.active = !this.lockDifficultyButton.isLocked();
this.difficultyButton.active = !this.lockDifficultyButton.isLocked();
AxisGridWidget axisGridWidget = new AxisGridWidget(150, 0, AxisGridWidget.DisplayAxis.HORIZONTAL);
axisGridWidget.add(this.difficultyButton);
axisGridWidget.add(this.lockDifficultyButton);
return axisGridWidget;
} else {
this.difficultyButton.active = false;
return this.difficultyButton;
}
} else {
return ButtonWidget.builder(
Text.translatable("options.online"), button -> this.client.setScreen(OnlineOptionsScreen.create(this.client, this, this.settings))
)
.dimensions(this.width / 2 + 5, this.height / 6 - 12 + 24, 150, 20)
.build();
}
}
private void lockDifficulty(boolean difficultyLocked) {
this.client.setScreen(this);
if (difficultyLocked && this.client.world != null) {
this.client.getNetworkHandler().sendPacket(new UpdateDifficultyLockC2SPacket(true));
this.lockDifficultyButton.setLocked(true);
this.lockDifficultyButton.active = false;
this.difficultyButton.active = false;
}
}
private void refreshResourcePacks(ResourcePackManager resourcePackManager) {
this.settings.refreshResourcePacks(resourcePackManager);
this.client.setScreen(this);
}
@Inject(method = "init", at = @At(value = "HEAD"),cancellable = true)
public void inject(CallbackInfo ci){
ci.cancel();
GridWidget gridWidget = new GridWidget();
gridWidget.getMainPositioner().marginX(5).marginBottom(4).alignHorizontalCenter();
GridWidget.Adder adder = gridWidget.createAdder(2);
adder.add(this.settings.getFov().createWidget(this.client.options, 0, 0, 150));
adder.add(this.createTopRightButton());
adder.add(EmptyWidget.ofHeight(12), 2);
adder.add(this.createButton(SKIN_CUSTOMIZATION_TEXT, () -> new SkinOptionsScreen(this, this.settings)));
adder.add(this.createButton(SOUNDS_TEXT, () -> new SoundOptionsScreen(this, this.settings)));
adder.add(this.createButton(VIDEO_TEXT, () -> new VideoOptionsScreen(this, this.settings)));
adder.add(this.createButton(CONTROL_TEXT, () -> new ControlsOptionsScreen(this, this.settings)));
adder.add(this.createButton(LANGUAGE_TEXT, () -> new LanguageOptionsScreen(this, this.settings, this.client.getLanguageManager())));
adder.add(this.createButton(CHAT_TEXT, () -> new ChatOptionsScreen(this, this.settings)));
adder.add(
this.createButton(
RESOURCE_PACK_TEXT,
() -> new PackScreen(
this.client.getResourcePackManager(), this::refreshResourcePacks, this.client.getResourcePackDir(), Text.translatable("resourcePack.title")
)
)
);
adder.add(this.createButton(ACCESSIBILITY_TEXT, () -> new AccessibilityOptionsScreen(this, this.settings)));
adder.add(this.createButton(TELEMETRY_TEXT, () -> new TelemetryInfoScreen(this, this.settings)));
adder.add(this.createButton(CREDITS_AND_ATTRIBUTION_TEXT, () -> new CreditsAndAttributionScreen(this)));
adder.add(ButtonWidget.builder(Text.literal("My Button"), button -> this.client.setScreen(new TestScreen(new TestGUI()))).width(200).build(), 2);
adder.add(ButtonWidget.builder(ScreenTexts.DONE, button -> this.client.setScreen(this.parent)).width(200).build(), 2, adder.copyPositioner().marginTop(3));
gridWidget.refreshPositions();
SimplePositioningWidget.setPos(gridWidget, 0, this.height / 6 - 12, this.width, this.height, 0.5F, 0.0F);
gridWidget.forEachChild(this::addDrawableChild);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package net.uhb217.glowingentity.utils;

import net.minecraft.nbt.NbtCompound;

public interface IEntityDataSaver {
NbtCompound getPersistentData();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package net.uhb217.glowingentity.utils;

import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
import net.uhb217.glowingentity.gui.TestGUI;
import net.uhb217.glowingentity.gui.TestScreen;
import org.lwjgl.glfw.GLFW;

public class KeyInputHandler {
public static final String KEY_CATEGORY_LS = "Lightning Strike Keys";
public static final String KEY_OPEN_LS_SCREEN = "Open Lightning Strike screen";
public static KeyBinding openLSScreenKey;
public static void registerKeyInputs(){
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (openLSScreenKey.wasPressed() && client.world.isClient()){
client.setScreen(new TestScreen(new TestGUI()));
}
});
}
public static void register(){
openLSScreenKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
KEY_OPEN_LS_SCREEN,
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_R,
KEY_CATEGORY_LS
));

registerKeyInputs();
}
}
19 changes: 10 additions & 9 deletions src/client/resources/glowingentity.client.mixins.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{
"required": true,
"package": "net.uhb217.glowingentity.mixin.client",
"compatibilityLevel": "JAVA_17",
"client": [
"EntityRendererMixin",
"ModEntityDataSaverMixin"
],
"injectors": {
"defaultRequire": 1
"required": true,
"package": "net.uhb217.glowingentity.mixin.client",
"compatibilityLevel": "JAVA_17",
"client": [
"EntityRendererMixin",
"GameMenuScreenMixin",
"ModEntityDataSaverMixin"
],
"injectors": {
"defaultRequire": 1
}
}

0 comments on commit f3965c0

Please sign in to comment.