mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-01 19:46:42 +01:00
More cleanup to input
This commit is contained in:
parent
52ae5816a5
commit
3beacf5f58
9 changed files with 121 additions and 176 deletions
|
@ -1,60 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.client;
|
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
|
||||||
import com.minelittlepony.unicopia.entity.player.IPlayer;
|
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.input.Input;
|
|
||||||
import net.minecraft.client.input.KeyboardInput;
|
|
||||||
|
|
||||||
public class InversionAwareKeyboardInput extends KeyboardInput {
|
|
||||||
|
|
||||||
private static boolean recurseCheck;
|
|
||||||
|
|
||||||
private Input proxy;
|
|
||||||
|
|
||||||
public InversionAwareKeyboardInput(MinecraftClient client, Input inherited) {
|
|
||||||
super(client.options);
|
|
||||||
proxy = inherited;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tick(boolean one, boolean two) {
|
|
||||||
// Other mods might wrap us, in which case let's just pretend to be the vanilla one.
|
|
||||||
// We'll replace them at the top level and let go of the inner to prevent the chain from growing.
|
|
||||||
if (recurseCheck) {
|
|
||||||
proxy = null;
|
|
||||||
super.tick(one, two);
|
|
||||||
}
|
|
||||||
|
|
||||||
recurseCheck = true;
|
|
||||||
proxy.tick(one, two);
|
|
||||||
recurseCheck = false;
|
|
||||||
|
|
||||||
this.pressingForward = proxy.pressingForward;
|
|
||||||
this.pressingBack = proxy.pressingBack;
|
|
||||||
this.pressingLeft = proxy.pressingLeft;
|
|
||||||
this.pressingRight = proxy.pressingRight;
|
|
||||||
this.jumping = proxy.jumping;
|
|
||||||
this.sneaking = proxy.sneaking;
|
|
||||||
this.movementSideways = proxy.movementSideways;
|
|
||||||
this.movementForward = proxy.movementForward;
|
|
||||||
|
|
||||||
IPlayer player = SpeciesList.instance().getPlayer(MinecraftClient.getInstance().player);
|
|
||||||
|
|
||||||
if (player.getGravity().getGravitationConstant() < 0) {
|
|
||||||
boolean tmp = pressingLeft;
|
|
||||||
|
|
||||||
pressingLeft = pressingRight;
|
|
||||||
pressingRight = tmp;
|
|
||||||
|
|
||||||
movementSideways = -movementSideways;
|
|
||||||
|
|
||||||
if (player.getOwner().abilities.flying) {
|
|
||||||
tmp = jumping;
|
|
||||||
jumping = sneaking;
|
|
||||||
sneaking = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
package com.minelittlepony.unicopia.client;
|
package com.minelittlepony.unicopia.client;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.IKeyBindingHandler;
|
import com.minelittlepony.unicopia.IKeyBindingHandler;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
|
@ -17,13 +17,13 @@ import net.minecraft.client.util.InputUtil;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
|
||||||
public class KeyBindingsHandler implements IKeyBindingHandler {
|
class KeyBindingsHandler implements IKeyBindingHandler {
|
||||||
private final MinecraftClient client = MinecraftClient.getInstance();
|
private final MinecraftClient client = MinecraftClient.getInstance();
|
||||||
|
|
||||||
private final List<KeyBinding> bindings = new ArrayList<>();
|
private final Set<KeyBinding> bindings = new HashSet<>();
|
||||||
private final List<KeyBinding> removed = new ArrayList<>();
|
private final Set<KeyBinding> removed = new HashSet<>();
|
||||||
|
|
||||||
private final List<KeyBinding> pressed = new ArrayList<>();
|
private final Set<KeyBinding> pressed = new HashSet<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addKeybind(IKeyBinding p) {
|
public void addKeybind(IKeyBinding p) {
|
||||||
|
@ -46,9 +46,7 @@ public class KeyBindingsHandler implements IKeyBindingHandler {
|
||||||
for (KeyBinding i : bindings) {
|
for (KeyBinding i : bindings) {
|
||||||
if (i.isPressed()) {
|
if (i.isPressed()) {
|
||||||
|
|
||||||
if (!pressed.contains(i)) {
|
if (pressed.add(i)) {
|
||||||
pressed.add(i);
|
|
||||||
|
|
||||||
if (!PowersRegistry.instance().hasRegisteredPower(i.getDefaultKeyCode().getKeyCode())) {
|
if (!PowersRegistry.instance().hasRegisteredPower(i.getDefaultKeyCode().getKeyCode())) {
|
||||||
removed.add(i);
|
removed.add(i);
|
||||||
System.out.println("Error: Keybinding(" + i.getLocalizedName() + ") does not have a registered pony power. Keybinding will be removed from event.");
|
System.out.println("Error: Keybinding(" + i.getLocalizedName() + ") does not have a registered pony power. Keybinding will be removed from event.");
|
||||||
|
@ -58,19 +56,13 @@ public class KeyBindingsHandler implements IKeyBindingHandler {
|
||||||
.ifPresent(iplayer.getAbilities()::tryUseAbility);
|
.ifPresent(iplayer.getAbilities()::tryUseAbility);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (pressed.remove(i)) {
|
||||||
if (pressed.contains(i)) {
|
iplayer.getAbilities().tryClearAbility();
|
||||||
pressed.remove(i);
|
|
||||||
|
|
||||||
iplayer.getAbilities().tryClearAbility();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (KeyBinding i : removed) {
|
bindings.removeAll(removed);
|
||||||
removed.remove(i);
|
pressed.removeAll(removed);
|
||||||
bindings.remove(i);
|
removed.clear();
|
||||||
pressed.remove(i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.client;
|
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.Mouse;
|
|
||||||
|
|
||||||
// TODO: we need mixins for this
|
|
||||||
public class MouseControl extends Mouse {
|
|
||||||
public MouseControl(MinecraftClient client) {
|
|
||||||
super(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateMouse() {
|
|
||||||
if (SpeciesList.instance().getPlayer(MinecraftClient.getInstance().player).getGravity().getGravitationConstant() < 0) {
|
|
||||||
//cursorDeltaX = -cursorDeltaX;
|
|
||||||
//cursorDeltaY = -cursorDeltaY;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.updateMouse();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.minelittlepony.unicopia.client;
|
package com.minelittlepony.unicopia.client;
|
||||||
|
|
||||||
|
import static com.minelittlepony.unicopia.EquinePredicates.MAGI;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -10,10 +12,14 @@ import com.minelittlepony.unicopia.IKeyBindingHandler;
|
||||||
import com.minelittlepony.unicopia.InteractionManager;
|
import com.minelittlepony.unicopia.InteractionManager;
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.SpeciesList;
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
|
import com.minelittlepony.unicopia.UBlocks;
|
||||||
import com.minelittlepony.unicopia.UnicopiaCore;
|
import com.minelittlepony.unicopia.UnicopiaCore;
|
||||||
import com.minelittlepony.unicopia.ability.PowersRegistry;
|
import com.minelittlepony.unicopia.ability.PowersRegistry;
|
||||||
|
import com.minelittlepony.unicopia.block.IColourful;
|
||||||
import com.minelittlepony.unicopia.client.render.DisguiseRenderer;
|
import com.minelittlepony.unicopia.client.render.DisguiseRenderer;
|
||||||
import com.minelittlepony.unicopia.entity.player.IPlayer;
|
import com.minelittlepony.unicopia.entity.player.IPlayer;
|
||||||
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
|
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
||||||
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
|
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
|
||||||
import com.minelittlepony.unicopia.util.MineLPConnector;
|
import com.minelittlepony.unicopia.util.MineLPConnector;
|
||||||
import com.minelittlepony.unicopia.util.dummy.DummyClientPlayerEntity;
|
import com.minelittlepony.unicopia.util.dummy.DummyClientPlayerEntity;
|
||||||
|
@ -21,13 +27,19 @@ import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
|
import net.fabricmc.fabric.api.client.render.ColorProviderRegistry;
|
||||||
import net.fabricmc.fabric.api.event.client.ClientTickCallback;
|
import net.fabricmc.fabric.api.event.client.ClientTickCallback;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.input.Input;
|
import net.minecraft.client.color.world.BiomeColors;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.color.world.GrassColors;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.BlockItem;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.ExtendedBlockView;
|
||||||
|
|
||||||
public class UnicopiaCoreClient extends InteractionManager implements ClientModInitializer {
|
public class UnicopiaCoreClient extends InteractionManager implements ClientModInitializer {
|
||||||
|
|
||||||
|
@ -134,6 +146,33 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI
|
||||||
ClientReadyCallback.EVENT.register(client -> {
|
ClientReadyCallback.EVENT.register(client -> {
|
||||||
PowersRegistry.instance().getValues().forEach(keyboard::addKeybind);
|
PowersRegistry.instance().getValues().forEach(keyboard::addKeybind);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem"));
|
||||||
|
|
||||||
|
ColorProviderRegistry.ITEM.register((stack, tint) -> {
|
||||||
|
return getLeavesColor(((BlockItem)stack.getItem()).getBlock().getDefaultState(), null, null, tint);
|
||||||
|
}, UItems.apple_leaves);
|
||||||
|
ColorProviderRegistry.BLOCK.register(UnicopiaCoreClient::getLeavesColor, UBlocks.apple_leaves);
|
||||||
|
ColorProviderRegistry.ITEM.register((stack, tint) -> {
|
||||||
|
if (MAGI.test(MinecraftClient.getInstance().player)) {
|
||||||
|
return SpellRegistry.instance().getSpellTintFromStack(stack);
|
||||||
|
}
|
||||||
|
return 0xFFFFFF;
|
||||||
|
}, UItems.spell, UItems.curse);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getLeavesColor(BlockState state, @Nullable ExtendedBlockView world, @Nullable BlockPos pos, int tint) {
|
||||||
|
Block block = state.getBlock();
|
||||||
|
|
||||||
|
if (block instanceof IColourful) {
|
||||||
|
return ((IColourful)block).getCustomTint(state, tint);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world != null && pos != null) {
|
||||||
|
return BiomeColors.getGrassColor(world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return GrassColors.getColor(0.5D, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tick(MinecraftClient client) {
|
private void tick(MinecraftClient client) {
|
||||||
|
@ -150,19 +189,5 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard.onKeyInput();
|
keyboard.onKeyInput();
|
||||||
|
|
||||||
if (player instanceof ClientPlayerEntity) {
|
|
||||||
ClientPlayerEntity sp = (ClientPlayerEntity)player;
|
|
||||||
|
|
||||||
Input movement = sp.input;
|
|
||||||
|
|
||||||
if (!(movement instanceof InversionAwareKeyboardInput)) {
|
|
||||||
sp.input = new InversionAwareKeyboardInput(client, movement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(client.mouse instanceof MouseControl)) {
|
|
||||||
client.mouse = new MouseControl(client);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
package com.minelittlepony.unicopia.client;
|
|
||||||
|
|
||||||
import static com.minelittlepony.unicopia.EquinePredicates.MAGI;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.UBlocks;
|
|
||||||
import com.minelittlepony.unicopia.block.IColourful;
|
|
||||||
import com.minelittlepony.unicopia.item.UItems;
|
|
||||||
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
|
||||||
|
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
|
||||||
import net.fabricmc.fabric.api.client.render.ColorProviderRegistry;
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.BlockState;
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.color.world.BiomeColors;
|
|
||||||
import net.minecraft.client.color.world.GrassColors;
|
|
||||||
import net.minecraft.item.BlockItem;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.ExtendedBlockView;
|
|
||||||
|
|
||||||
public class UnicopiaReduxClient implements ClientModInitializer {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onInitializeClient() {
|
|
||||||
//BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem"));
|
|
||||||
|
|
||||||
ColorProviderRegistry.ITEM.register((stack, tint) -> {
|
|
||||||
return getLeavesColor(((BlockItem)stack.getItem()).getBlock().getDefaultState(), null, null, tint);
|
|
||||||
}, UItems.apple_leaves);
|
|
||||||
ColorProviderRegistry.BLOCK.register(UnicopiaReduxClient::getLeavesColor, UBlocks.apple_leaves);
|
|
||||||
ColorProviderRegistry.ITEM.register((stack, tint) -> {
|
|
||||||
if (MAGI.test(MinecraftClient.getInstance().player)) {
|
|
||||||
return SpellRegistry.instance().getSpellTintFromStack(stack);
|
|
||||||
}
|
|
||||||
return 0xFFFFFF;
|
|
||||||
}, UItems.spell, UItems.curse);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int getLeavesColor(BlockState state, @Nullable ExtendedBlockView world, @Nullable BlockPos pos, int tint) {
|
|
||||||
Block block = state.getBlock();
|
|
||||||
|
|
||||||
if (block instanceof IColourful) {
|
|
||||||
return ((IColourful)block).getCustomTint(state, tint);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world != null && pos != null) {
|
|
||||||
return BiomeColors.getGrassColor(world, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
return GrassColors.getColor(0.5D, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,8 +13,7 @@ import net.minecraft.client.render.Camera;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
|
||||||
@Mixin(Camera.class)
|
@Mixin(Camera.class)
|
||||||
public class MixinCamera {
|
abstract class MixinCamera {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
private float pitch;
|
private float pitch;
|
||||||
@Shadow
|
@Shadow
|
||||||
|
|
|
@ -14,7 +14,6 @@ import net.minecraft.resource.SynchronousResourceReloadListener;
|
||||||
|
|
||||||
@Mixin(GameRenderer.class)
|
@Mixin(GameRenderer.class)
|
||||||
abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceReloadListener {
|
abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceReloadListener {
|
||||||
|
|
||||||
@Inject(method = "getFov(Lnet/minecraft/client/render/Camera;FZ)D",
|
@Inject(method = "getFov(Lnet/minecraft/client/render/Camera;FZ)D",
|
||||||
at = @At("RETURN"),
|
at = @At("RETURN"),
|
||||||
cancellable = true)
|
cancellable = true)
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.minelittlepony.unicopia.client.mixin;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
import com.minelittlepony.unicopia.SpeciesList;
|
||||||
|
import com.minelittlepony.unicopia.entity.player.IPlayer;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.input.Input;
|
||||||
|
import net.minecraft.client.input.KeyboardInput;
|
||||||
|
|
||||||
|
@Mixin(KeyboardInput.class)
|
||||||
|
abstract class MixinKeyboardInput extends Input {
|
||||||
|
@Inject(method = "tick(ZZ)V", at = @At("RETURN"))
|
||||||
|
private void onTick(boolean one, boolean two, CallbackInfo info) {
|
||||||
|
IPlayer player = SpeciesList.instance().getPlayer(MinecraftClient.getInstance().player);
|
||||||
|
|
||||||
|
if (player.getGravity().getGravitationConstant() < 0) {
|
||||||
|
boolean tmp = pressingLeft;
|
||||||
|
|
||||||
|
pressingLeft = pressingRight;
|
||||||
|
pressingRight = tmp;
|
||||||
|
|
||||||
|
movementSideways = -movementSideways;
|
||||||
|
|
||||||
|
if (player.getOwner().abilities.flying) {
|
||||||
|
tmp = jumping;
|
||||||
|
jumping = sneaking;
|
||||||
|
sneaking = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.minelittlepony.unicopia.client.mixin;
|
||||||
|
|
||||||
|
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 com.minelittlepony.unicopia.SpeciesList;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.Mouse;
|
||||||
|
|
||||||
|
@Mixin(Mouse.class)
|
||||||
|
abstract class MixinMouse {
|
||||||
|
@Shadow
|
||||||
|
private @Final MinecraftClient client;
|
||||||
|
@Shadow
|
||||||
|
private double cursorDeltaX;
|
||||||
|
@Shadow
|
||||||
|
private double cursorDeltaY;
|
||||||
|
|
||||||
|
@Inject(method = "updateMouse()V", at = @At("HEAD"))
|
||||||
|
private void onUpdateMouse(CallbackInfo info) {
|
||||||
|
if (SpeciesList.instance().getPlayer(client.player).getGravity().getGravitationConstant() < 0) {
|
||||||
|
cursorDeltaX = -cursorDeltaX;
|
||||||
|
cursorDeltaY = -cursorDeltaY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue