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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.minelittlepony.unicopia.IKeyBindingHandler;
|
||||
import com.minelittlepony.unicopia.SpeciesList;
|
||||
|
@ -17,13 +17,13 @@ import net.minecraft.client.util.InputUtil;
|
|||
import net.minecraft.util.Identifier;
|
||||
|
||||
|
||||
public class KeyBindingsHandler implements IKeyBindingHandler {
|
||||
class KeyBindingsHandler implements IKeyBindingHandler {
|
||||
private final MinecraftClient client = MinecraftClient.getInstance();
|
||||
|
||||
private final List<KeyBinding> bindings = new ArrayList<>();
|
||||
private final List<KeyBinding> removed = new ArrayList<>();
|
||||
private final Set<KeyBinding> bindings = new HashSet<>();
|
||||
private final Set<KeyBinding> removed = new HashSet<>();
|
||||
|
||||
private final List<KeyBinding> pressed = new ArrayList<>();
|
||||
private final Set<KeyBinding> pressed = new HashSet<>();
|
||||
|
||||
@Override
|
||||
public void addKeybind(IKeyBinding p) {
|
||||
|
@ -46,9 +46,7 @@ public class KeyBindingsHandler implements IKeyBindingHandler {
|
|||
for (KeyBinding i : bindings) {
|
||||
if (i.isPressed()) {
|
||||
|
||||
if (!pressed.contains(i)) {
|
||||
pressed.add(i);
|
||||
|
||||
if (pressed.add(i)) {
|
||||
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.");
|
||||
|
@ -58,19 +56,13 @@ public class KeyBindingsHandler implements IKeyBindingHandler {
|
|||
.ifPresent(iplayer.getAbilities()::tryUseAbility);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pressed.contains(i)) {
|
||||
pressed.remove(i);
|
||||
|
||||
iplayer.getAbilities().tryClearAbility();
|
||||
}
|
||||
} else if (pressed.remove(i)) {
|
||||
iplayer.getAbilities().tryClearAbility();
|
||||
}
|
||||
}
|
||||
|
||||
for (KeyBinding i : removed) {
|
||||
removed.remove(i);
|
||||
bindings.remove(i);
|
||||
pressed.remove(i);
|
||||
}
|
||||
bindings.removeAll(removed);
|
||||
pressed.removeAll(removed);
|
||||
removed.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
import static com.minelittlepony.unicopia.EquinePredicates.MAGI;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -10,10 +12,14 @@ import com.minelittlepony.unicopia.IKeyBindingHandler;
|
|||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.SpeciesList;
|
||||
import com.minelittlepony.unicopia.UBlocks;
|
||||
import com.minelittlepony.unicopia.UnicopiaCore;
|
||||
import com.minelittlepony.unicopia.ability.PowersRegistry;
|
||||
import com.minelittlepony.unicopia.block.IColourful;
|
||||
import com.minelittlepony.unicopia.client.render.DisguiseRenderer;
|
||||
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.util.MineLPConnector;
|
||||
import com.minelittlepony.unicopia.util.dummy.DummyClientPlayerEntity;
|
||||
|
@ -21,13 +27,19 @@ import com.mojang.authlib.GameProfile;
|
|||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.render.ColorProviderRegistry;
|
||||
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.input.Input;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.client.color.world.BiomeColors;
|
||||
import net.minecraft.client.color.world.GrassColors;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.Entity;
|
||||
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 {
|
||||
|
||||
|
@ -134,6 +146,33 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI
|
|||
ClientReadyCallback.EVENT.register(client -> {
|
||||
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) {
|
||||
|
@ -150,19 +189,5 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
@Mixin(Camera.class)
|
||||
public class MixinCamera {
|
||||
|
||||
abstract class MixinCamera {
|
||||
@Shadow
|
||||
private float pitch;
|
||||
@Shadow
|
||||
|
|
|
@ -14,7 +14,6 @@ import net.minecraft.resource.SynchronousResourceReloadListener;
|
|||
|
||||
@Mixin(GameRenderer.class)
|
||||
abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceReloadListener {
|
||||
|
||||
@Inject(method = "getFov(Lnet/minecraft/client/render/Camera;FZ)D",
|
||||
at = @At("RETURN"),
|
||||
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