Skip to content

Commit

Permalink
use home-grown key binding system
Browse files Browse the repository at this point in the history
closes #170
  • Loading branch information
deirn committed May 11, 2024
1 parent c299f56 commit b3e3ad5
Show file tree
Hide file tree
Showing 19 changed files with 196 additions and 159 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ public class FabricWailaClient extends WailaClient implements ClientModInitializ

@Override
public void onInitializeClient() {
registerKeyBinds();

Packets.initClient();

HudRenderCallback.EVENT.register(TooltipRenderer::render);
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ static void clientSetup(FMLClientSetupEvent event) {
registerConfigScreen();
}

@SubscribeEvent
static void registerKeyMappings(RegisterKeyMappingsEvent event) {
registerKeyBinds().forEach(event::register);
}

@SubscribeEvent
static void addReloadListener(RegisterClientReloadListenersEvent event) {
event.registerReloadListener(new BuiltinThemeLoader());
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
import net.neoforged.neoforge.client.event.RenderGuiEvent;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import net.neoforged.neoforge.event.entity.player.ItemTooltipEvent;
Expand All @@ -31,11 +30,6 @@ static void clientSetup(FMLClientSetupEvent event) {
registerConfigScreen();
}

@SubscribeEvent
static void registerKeyMappings(RegisterKeyMappingsEvent event) {
registerKeyBinds().forEach(event::register);
}

@SubscribeEvent
static void addReloadListener(RegisterClientReloadListenersEvent event) {
event.registerReloadListener(new BuiltinThemeLoader());
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ public class QuiltWailaClient extends WailaClient implements ClientModInitialize

@Override
public void onInitializeClient(ModContainer mod) {
registerKeyBinds();

Packets.initClient();

HudRenderCallback.EVENT.register(TooltipRenderer::render);
Expand Down

This file was deleted.

2 changes: 2 additions & 0 deletions src/main/java/mcp/mobius/waila/Waila.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import mcp.mobius.waila.api.WailaConstants;
import mcp.mobius.waila.api.__internal__.IHarvestService;
import mcp.mobius.waila.config.BlacklistConfig;
import mcp.mobius.waila.config.KeyBinding;
import mcp.mobius.waila.config.WailaConfig;
import mcp.mobius.waila.gui.hud.theme.ThemeDefinition;
import mcp.mobius.waila.registry.RegistryFilter;
Expand Down Expand Up @@ -40,6 +41,7 @@ public abstract class Waila {
.registerTypeAdapter(WailaConfig.Overlay.Color.class, new WailaConfig.Overlay.Color.Adapter())
.registerTypeAdapter(ThemeDefinition.class, new ThemeDefinition.Adapter())
.registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer())
.registerTypeAdapter(KeyBinding.class, new KeyBinding.Adapter())
.create())
.build();

Expand Down
63 changes: 23 additions & 40 deletions src/main/java/mcp/mobius/waila/WailaClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,17 @@

import java.util.List;

import com.mojang.blaze3d.platform.InputConstants;
import mcp.mobius.waila.access.ClientAccessor;
import mcp.mobius.waila.api.IWailaConfig;
import mcp.mobius.waila.api.WailaConstants;
import mcp.mobius.waila.buildconst.Tl;
import mcp.mobius.waila.config.KeyBinding;
import mcp.mobius.waila.config.PluginConfig;
import mcp.mobius.waila.gui.hud.TooltipHandler;
import mcp.mobius.waila.gui.screen.HomeScreen;
import mcp.mobius.waila.integration.IRecipeAction;
import mcp.mobius.waila.registry.Registrar;
import mcp.mobius.waila.registry.RegistryFilter;
import mcp.mobius.waila.service.IClientService;
import mcp.mobius.waila.util.Log;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
Expand All @@ -25,12 +22,6 @@ public abstract class WailaClient {

private static final Log LOG = Log.create();

public static KeyMapping keyOpenConfig;
public static KeyMapping keyShowOverlay;
public static KeyMapping keyToggleLiquid;
public static KeyMapping keyShowRecipeInput;
public static KeyMapping keyShowRecipeOutput;

public static boolean showComponentBounds = false;
public static boolean showFps = false;

Expand All @@ -48,43 +39,39 @@ public static void setRecipeAction(IRecipeAction action) {
recipeAction = action;
}

protected static List<KeyMapping> registerKeyBinds() {
return List.of(
keyOpenConfig = createKeyBind(Tl.Key.CONFIG),
keyShowOverlay = createKeyBind(Tl.Key.SHOW_OVERLAY),
keyToggleLiquid = createKeyBind(Tl.Key.TOGGLE_LIQUID),
keyShowRecipeInput = createKeyBind(Tl.Key.SHOW_RECIPE_INPUT),
keyShowRecipeOutput = createKeyBind(Tl.Key.SHOW_RECIPE_OUTPUT)
);
}

protected static void onClientTick() {
KeyBinding.tick();

var client = Minecraft.getInstance();
var config = Waila.CONFIG.get();
var general = config.getGeneral();
var bindings = config.getKeyBindings();

TooltipHandler.tick();

while (keyOpenConfig.consumeClick()) {
client.setScreen(new HomeScreen(null));
}

while (keyShowOverlay.consumeClick()) {
if (config.getGeneral().getDisplayMode() == IWailaConfig.General.DisplayMode.TOGGLE) {
config.getGeneral().setDisplayTooltip(!config.getGeneral().isDisplayTooltip());
if (client.screen == null) {
if (bindings.getOpenConfig().isPressed()) {
client.setScreen(new HomeScreen(null));
}
}

while (keyToggleLiquid.consumeClick()) {
PluginConfig.set(WailaConstants.CONFIG_SHOW_FLUID, !PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_FLUID));
}
if (bindings.getShowOverlay().isPressed()) {
if (general.getDisplayMode() == IWailaConfig.General.DisplayMode.TOGGLE) {
general.setDisplayTooltip(!general.isDisplayTooltip());
}
}

if (recipeAction != null) {
while (keyShowRecipeInput.consumeClick()) {
recipeAction.showInput(ClientAccessor.INSTANCE.getStack());
if (bindings.getToggleLiquid().isPressed()) {
PluginConfig.set(WailaConstants.CONFIG_SHOW_FLUID, !PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_FLUID));
}

while (keyShowRecipeOutput.consumeClick()) {
recipeAction.showOutput(ClientAccessor.INSTANCE.getStack());
if (recipeAction != null) {
if (bindings.getShowRecipeInput().isPressed()) {
recipeAction.showInput(ClientAccessor.INSTANCE.getStack());
}

if (bindings.getShowRecipeOutput().isPressed()) {
recipeAction.showOutput(ClientAccessor.INSTANCE.getStack());
}
}
}
}
Expand Down Expand Up @@ -114,8 +101,4 @@ protected static void onServerLogout() {
config.setServerValue(null));
}

private static KeyMapping createKeyBind(String id) {
return IClientService.INSTANCE.createKeyBind(id, InputConstants.UNKNOWN.getValue());
}

}
83 changes: 83 additions & 0 deletions src/main/java/mcp/mobius/waila/config/KeyBinding.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package mcp.mobius.waila.config;

import java.lang.reflect.Type;
import java.util.Map;

import com.google.common.collect.MapMaker;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.Minecraft;
import org.jetbrains.annotations.Nullable;

public final class KeyBinding {

private static final Map<InputConstants.Key, KeyBinding> INSTANCES = new MapMaker().weakValues().makeMap();

public static final KeyBinding UNKNOWN = of(InputConstants.UNKNOWN);

private final InputConstants.Key key;

private @Nullable Boolean pressed;
private @Nullable Boolean wasPressed;
private boolean held;

private KeyBinding(InputConstants.Key key) {
this.key = key;
}

public static KeyBinding of(InputConstants.Key key) {
return INSTANCES.computeIfAbsent(key, KeyBinding::new);
}

public boolean isDown() {
if (pressed == null) {
pressed = key.getValue() != InputConstants.UNKNOWN.getValue()
&& InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), key.getValue());

if (!pressed) {
held = false;
} else {
held = wasPressed == Boolean.TRUE;
}
}

return pressed;
}

public boolean isPressed() {
isDown();
return pressed == Boolean.TRUE && !held;
}

public static void tick() {
for (var instance : INSTANCES.values()) {
instance.wasPressed = instance.pressed;
instance.pressed = null;
}
}

public InputConstants.Key key() {
return key;
}

public static class Adapter implements JsonSerializer<KeyBinding>, JsonDeserializer<KeyBinding> {

@Override
public KeyBinding deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return of(InputConstants.getKey(json.getAsString()));
}

@Override
public JsonElement serialize(KeyBinding src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.key.getName());
}

}

}
Loading

0 comments on commit b3e3ad5

Please sign in to comment.