More cleanup to input

This commit is contained in:
Sollace 2020-04-15 15:45:57 +02:00
parent 52ae5816a5
commit 3beacf5f58
9 changed files with 121 additions and 176 deletions

View file

@ -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;
}
}
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}

View file

@ -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

View file

@ -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)

View file

@ -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;
}
}
}
}

View file

@ -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;
}
}
}