diff --git a/gradle.properties b/gradle.properties index ba1c6b9..4271988 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.16.0 # Mod Properties - mod_version = 1.0 + mod_version = 1.1 maven_group = com.kasetoatz archives_base_name = RiptideHacks diff --git a/src/main/java/com/kasetoatz/riptidehacks/RiptideHacks.java b/src/main/java/com/kasetoatz/riptidehacks/RiptideHacks.java index ede3b23..5d0804f 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/RiptideHacks.java +++ b/src/main/java/com/kasetoatz/riptidehacks/RiptideHacks.java @@ -1,24 +1,46 @@ package com.kasetoatz.riptidehacks; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.lwjgl.glfw.GLFW; public class RiptideHacks implements ClientModInitializer { public static MinecraftClient client; + public static boolean toggled = false; + public static boolean onGround = true; + private static KeyBinding keyBinding; private static long lastTridentUse = 0; @Override public void onInitializeClient() { client = MinecraftClient.getInstance(); + keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding("Toggle Riptide", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_ALT, "RiptideHacks")); + ClientTickEvents.END_CLIENT_TICK.register(client -> { + while (keyBinding.wasPressed()) { + toggled = !toggled; + client.inGameHud.setOverlayMessage(Text.literal("Riptide ").append((toggled) ? Text.literal("ON").styled((style -> style.withColor(Formatting.GREEN))) : Text.literal("OFF").styled((style -> style.withColor(Formatting.RED)))), false); + } + if (!onGround && client.player != null && client.player.isOnGround()) + { + onGround = true; + } + }); } public static void setLastTridentUse() { lastTridentUse = System.currentTimeMillis(); + onGround = false; } public static boolean shouldAnimate() { return lastTridentUse > System.currentTimeMillis() - 1000; } -} +} \ No newline at end of file diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/ClientConnectionMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/ClientConnectionMixin.java index 7212b82..43d452a 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/mixin/ClientConnectionMixin.java +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/ClientConnectionMixin.java @@ -6,6 +6,7 @@ import net.minecraft.item.Items; import net.minecraft.network.ClientConnection; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -16,13 +17,20 @@ public abstract class ClientConnectionMixin { @Inject(method="send*", at=@At("HEAD"), cancellable = true) private void send(Packet packet, CallbackInfo ci) { - if (packet instanceof PlayerActionC2SPacket) + if (RiptideHacks.toggled) { ClientPlayerEntity player = RiptideHacks.client.player; - if (player != null && player.getActiveItem().getItem() == Items.TRIDENT) + if (player != null) { - ci.cancel(); + if (packet instanceof PlayerActionC2SPacket && player.getActiveItem().getItem() == Items.TRIDENT) + { + ci.cancel(); + } + else if (packet instanceof PlayerMoveC2SPacket && !RiptideHacks.onGround) + { + ((PlayerMoveC2SPacketMixin)packet).setOnGround(true); + } } } } -} +} \ No newline at end of file diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/EnchantmentHelperMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/EnchantmentHelperMixin.java index e985d42..c7a7b1e 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/mixin/EnchantmentHelperMixin.java +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/EnchantmentHelperMixin.java @@ -1,5 +1,6 @@ package com.kasetoatz.riptidehacks.mixin; +import com.kasetoatz.riptidehacks.RiptideHacks; import net.minecraft.enchantment.EnchantmentHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -11,6 +12,9 @@ public abstract class EnchantmentHelperMixin { @Inject(method="getTridentSpinAttackStrength", at=@At("HEAD"), cancellable = true) private static void getTridentSpinAttackStrength(CallbackInfoReturnable cir) { - cir.setReturnValue(3.f); + if (RiptideHacks.toggled) + { + cir.setReturnValue(3.f); + } } -} +} \ No newline at end of file diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/EntityMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/EntityMixin.java index 8ac949e..f32ccb8 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/mixin/EntityMixin.java +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/EntityMixin.java @@ -12,9 +12,12 @@ public abstract class EntityMixin { @Inject(method="isTouchingWaterOrRain", at=@At("HEAD"), cancellable = true) private void isTouchingWaterOrRain(CallbackInfoReturnable cir) { - if (((Entity)(Object)this) == RiptideHacks.client.player) + if (RiptideHacks.toggled) { - cir.setReturnValue(true); + if (((Entity)(Object)this) == RiptideHacks.client.player) + { + cir.setReturnValue(true); + } } } } \ No newline at end of file diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/LivingEntityMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/LivingEntityMixin.java index 33ddb8f..99c42ff 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/mixin/LivingEntityMixin.java +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/LivingEntityMixin.java @@ -13,9 +13,12 @@ public abstract class LivingEntityMixin { private void isUsingRiptide(CallbackInfoReturnable cir) { LivingEntity entity = (LivingEntity)(Object)this; - if (RiptideHacks.shouldAnimate() && entity == RiptideHacks.client.player) + if (RiptideHacks.toggled && RiptideHacks.shouldAnimate()) { - cir.setReturnValue(true); + if (entity == RiptideHacks.client.player) + { + cir.setReturnValue(true); + } } } -} +} \ No newline at end of file diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/PlayerMoveC2SPacketMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/PlayerMoveC2SPacketMixin.java new file mode 100644 index 0000000..2265256 --- /dev/null +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/PlayerMoveC2SPacketMixin.java @@ -0,0 +1,13 @@ +package com.kasetoatz.riptidehacks.mixin; + +import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(PlayerMoveC2SPacket.class) +public interface PlayerMoveC2SPacketMixin { + @Accessor("onGround") + @Mutable + void setOnGround(boolean onGround); +} diff --git a/src/main/java/com/kasetoatz/riptidehacks/mixin/TridentItemMixin.java b/src/main/java/com/kasetoatz/riptidehacks/mixin/TridentItemMixin.java index 9288fb8..a141741 100644 --- a/src/main/java/com/kasetoatz/riptidehacks/mixin/TridentItemMixin.java +++ b/src/main/java/com/kasetoatz/riptidehacks/mixin/TridentItemMixin.java @@ -17,10 +17,10 @@ public class TridentItemMixin { @Inject(method="onStoppedUsing", at=@At("HEAD")) private void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfo ci) { - if (user == RiptideHacks.client.player && user.getItemUseTime() > 10) + if (RiptideHacks.toggled && user == RiptideHacks.client.player && user.getItemUseTime() > 10) { world.playSoundFromEntity(user, SoundEvents.ITEM_TRIDENT_RIPTIDE_3.value(), SoundCategory.AMBIENT, 1.f, 1.f); RiptideHacks.setLastTridentUse(); } } -} +} \ No newline at end of file diff --git a/src/main/resources/riptidehacks.mixins.json b/src/main/resources/riptidehacks.mixins.json index 58a33ba..724f555 100644 --- a/src/main/resources/riptidehacks.mixins.json +++ b/src/main/resources/riptidehacks.mixins.json @@ -8,6 +8,7 @@ "EnchantmentHelperMixin", "EntityMixin", "LivingEntityMixin", + "PlayerMoveC2SPacketMixin", "TridentItemMixin", "ClientConnectionMixin" ],