Unicopia/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java

67 lines
2.5 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.client;
2020-01-16 12:35:46 +01:00
2020-04-15 15:45:57 +02:00
import java.util.HashSet;
import java.util.Set;
2020-01-16 12:35:46 +01:00
2020-04-15 15:55:18 +02:00
import com.minelittlepony.unicopia.IKeyBinding;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.UnicopiaCore;
import com.minelittlepony.unicopia.ability.PowersRegistry;
import com.minelittlepony.unicopia.entity.player.IPlayer;
2020-01-16 12:35:46 +01:00
import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
import net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.options.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.util.Identifier;
2020-04-15 15:55:18 +02:00
class KeyBindingsHandler {
2020-01-16 12:35:46 +01:00
private final MinecraftClient client = MinecraftClient.getInstance();
2020-04-15 15:45:57 +02:00
private final Set<KeyBinding> bindings = new HashSet<>();
private final Set<KeyBinding> removed = new HashSet<>();
2020-01-16 12:35:46 +01:00
2020-04-15 15:45:57 +02:00
private final Set<KeyBinding> pressed = new HashSet<>();
2020-01-16 12:35:46 +01:00
public void addKeybind(IKeyBinding p) {
KeyBindingRegistry.INSTANCE.addCategory(p.getKeyCategory());
FabricKeyBinding b = FabricKeyBinding.Builder.create(new Identifier(UnicopiaCore.MODID, p.getKeyName()), InputUtil.Type.KEYSYM, p.getKeyCode(), p.getKeyCategory()).build();
2020-01-16 12:35:46 +01:00
KeyBindingRegistry.INSTANCE.register(b);
bindings.add(b);
}
public void onKeyInput() {
if (client.currentScreen != null
|| client.player == null) {
return;
}
IPlayer iplayer = SpeciesList.instance().getPlayer(client.player);
for (KeyBinding i : bindings) {
if (i.isPressed()) {
2020-04-15 15:45:57 +02:00
if (pressed.add(i)) {
2020-01-16 12:35:46 +01:00
if (!PowersRegistry.instance().hasRegisteredPower(i.getDefaultKeyCode().getKeyCode())) {
removed.add(i);
System.out.println("Error: Keybinding(" + i.getLocalizedName() + ") does not have a registered pony power. Keybinding will be removed from event.");
} else {
PowersRegistry.instance()
.getCapablePowerFromKey(i.getDefaultKeyCode().getKeyCode(), iplayer.getSpecies())
.ifPresent(iplayer.getAbilities()::tryUseAbility);
}
}
2020-04-15 15:45:57 +02:00
} else if (pressed.remove(i)) {
iplayer.getAbilities().tryClearAbility();
2020-01-16 12:35:46 +01:00
}
}
2020-04-15 15:45:57 +02:00
bindings.removeAll(removed);
pressed.removeAll(removed);
removed.clear();
2020-01-16 12:35:46 +01:00
}
}