diff --git a/src/main/java/com/minelittlepony/unicopia/client/InversionAwareKeyboardInput.java b/src/main/java/com/minelittlepony/unicopia/client/InversionAwareKeyboardInput.java deleted file mode 100644 index 843b0253..00000000 --- a/src/main/java/com/minelittlepony/unicopia/client/InversionAwareKeyboardInput.java +++ /dev/null @@ -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; - } - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java index e3377b07..b814d38a 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java @@ -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 bindings = new ArrayList<>(); - private final List removed = new ArrayList<>(); + private final Set bindings = new HashSet<>(); + private final Set removed = new HashSet<>(); - private final List pressed = new ArrayList<>(); + private final Set 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(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/MouseControl.java b/src/main/java/com/minelittlepony/unicopia/client/MouseControl.java deleted file mode 100644 index c5da090d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/client/MouseControl.java +++ /dev/null @@ -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(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java index 9cc4f64d..fa4a2bf2 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java @@ -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); - } } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaReduxClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaReduxClient.java deleted file mode 100644 index 0d0db1c3..00000000 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaReduxClient.java +++ /dev/null @@ -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); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinCamera.java b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinCamera.java index c77b8a4b..62ba03a4 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinCamera.java +++ b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinCamera.java @@ -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 diff --git a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinGameRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinGameRenderer.java index 7584e0bf..22d7f57e 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinGameRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinGameRenderer.java @@ -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) diff --git a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinKeyboardInput.java b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinKeyboardInput.java new file mode 100644 index 00000000..0c82a53a --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinKeyboardInput.java @@ -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; + } + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinMouse.java b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinMouse.java new file mode 100644 index 00000000..385bf9e7 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/client/mixin/MixinMouse.java @@ -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; + } + } +}