Initial commit

This commit is contained in:
KäseToatz
2024-07-13 16:36:39 +02:00
parent e58f179209
commit bef08cccf1
17 changed files with 667 additions and 0 deletions

View File

@ -0,0 +1,24 @@
package com.kasetoatz.riptidehacks;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
public class RiptideHacks implements ClientModInitializer {
public static MinecraftClient client;
private static long lastTridentUse = 0;
@Override
public void onInitializeClient() {
client = MinecraftClient.getInstance();
}
public static void setLastTridentUse()
{
lastTridentUse = System.currentTimeMillis();
}
public static boolean shouldAnimate()
{
return lastTridentUse > System.currentTimeMillis() - 1000;
}
}

View File

@ -0,0 +1,28 @@
package com.kasetoatz.riptidehacks.mixin;
import com.kasetoatz.riptidehacks.RiptideHacks;
import net.minecraft.client.network.ClientPlayerEntity;
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 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;
@Mixin(ClientConnection.class)
public abstract class ClientConnectionMixin {
@Inject(method="send*", at=@At("HEAD"), cancellable = true)
private void send(Packet<?> packet, CallbackInfo ci)
{
if (packet instanceof PlayerActionC2SPacket)
{
ClientPlayerEntity player = RiptideHacks.client.player;
if (player != null && player.getActiveItem().getItem() == Items.TRIDENT)
{
ci.cancel();
}
}
}
}

View File

@ -0,0 +1,16 @@
package com.kasetoatz.riptidehacks.mixin;
import net.minecraft.enchantment.EnchantmentHelper;
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.CallbackInfoReturnable;
@Mixin(EnchantmentHelper.class)
public abstract class EnchantmentHelperMixin {
@Inject(method="getTridentSpinAttackStrength", at=@At("HEAD"), cancellable = true)
private static void getTridentSpinAttackStrength(CallbackInfoReturnable<Float> cir)
{
cir.setReturnValue(3.f);
}
}

View File

@ -0,0 +1,20 @@
package com.kasetoatz.riptidehacks.mixin;
import com.kasetoatz.riptidehacks.RiptideHacks;
import net.minecraft.entity.Entity;
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.CallbackInfoReturnable;
@Mixin(Entity.class)
public abstract class EntityMixin {
@Inject(method="isTouchingWaterOrRain", at=@At("HEAD"), cancellable = true)
private void isTouchingWaterOrRain(CallbackInfoReturnable<Boolean> cir)
{
if (((Entity)(Object)this) == RiptideHacks.client.player)
{
cir.setReturnValue(true);
}
}
}

View File

@ -0,0 +1,21 @@
package com.kasetoatz.riptidehacks.mixin;
import com.kasetoatz.riptidehacks.RiptideHacks;
import net.minecraft.entity.LivingEntity;
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.CallbackInfoReturnable;
@Mixin(LivingEntity.class)
public abstract class LivingEntityMixin {
@Inject(method="isUsingRiptide", at=@At("HEAD"), cancellable = true)
private void isUsingRiptide(CallbackInfoReturnable<Boolean> cir)
{
LivingEntity entity = (LivingEntity)(Object)this;
if (RiptideHacks.shouldAnimate() && entity == RiptideHacks.client.player)
{
cir.setReturnValue(true);
}
}
}

View File

@ -0,0 +1,26 @@
package com.kasetoatz.riptidehacks.mixin;
import com.kasetoatz.riptidehacks.RiptideHacks;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.TridentItem;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.world.World;
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;
@Mixin(TridentItem.class)
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)
{
world.playSoundFromEntity(user, SoundEvents.ITEM_TRIDENT_RIPTIDE_3.value(), SoundCategory.AMBIENT, 1.f, 1.f);
RiptideHacks.setLastTridentUse();
}
}
}

View File

@ -0,0 +1,27 @@
{
"schemaVersion": 1,
"id": "riptidehacks",
"version": "${version}",
"name": "RiptideHacks",
"description": "",
"authors": [],
"contact": {
"repo": "https://github.com/KaseToatz1337/RiptideHacks"
},
"license": "MIT",
"environment": "*",
"entrypoints": {
"client": [
"com.kasetoatz.riptidehacks.RiptideHacks"
],
"main": []
},
"mixins": [
"riptidehacks.mixins.json"
],
"depends": {
"fabricloader": ">=${loader_version}",
"fabric": "*",
"minecraft": "${minecraft_version}"
}
}

View File

@ -0,0 +1,17 @@
{
"required": true,
"minVersion": "0.8",
"package": "com.kasetoatz.riptidehacks.mixin",
"compatibilityLevel": "JAVA_21",
"mixins": [],
"client": [
"EnchantmentHelperMixin",
"EntityMixin",
"LivingEntityMixin",
"TridentItemMixin",
"ClientConnectionMixin"
],
"injectors": {
"defaultRequire": 1
}
}