Skip to content

Commit

Permalink
Refactored code a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
Flatkat committed Nov 1, 2024
1 parent 4739802 commit 3b29d4f
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,81 +5,16 @@
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(LivingEntity.class)
abstract public class LivingEntityMixin extends Entity {
/**
* FEATURE: Using riptide trident enchant underwater makes the player gain acceleration during its effect.
* @author Kiku
* @author Flatkat
*/
@SuppressWarnings("JavadocDeclaration")
@Unique
private static final float MODIFIER = HarmonyConfig.riptideAccelerationOnWater;
@Unique
private static final float DEG = (float) (Math.PI / 180F);

@Shadow
protected int riptideTicks;

@Shadow public abstract void setSprinting(boolean sprinting);

public abstract class LivingEntityMixin extends Entity {
public LivingEntityMixin(EntityType<?> type, World world) {
super(type, world);
}

//Applies constant acceleration when using riptide and touching water.
@Inject(
method = "tickMovement", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/LivingEntity;tickRiptide(Lnet/minecraft/util/math/Box;Lnet/minecraft/util/math/Box;)V"
)
)
private void accelerateWhenRiptide(CallbackInfo ci) {
if(HarmonyConfig.riptideAccelerationOnWater != 0){
if (!this.isTouchingWater()) return;
float f = getYaw();
float g = getPitch();
float h = -MathHelper.sin(f * DEG) * MathHelper.cos(g * DEG);
float k = -MathHelper.sin(g * DEG);
float l = MathHelper.cos(f * DEG) * MathHelper.cos(g * DEG);
float m = MathHelper.sqrt(h * h + k * k + l * l);
h *= MODIFIER / m;
k *= MODIFIER / m;
l *= MODIFIER / m;
addVelocity(h, k, l);
}
}


/**
* FEATURE: Reduced water drag when using riptide
* @author Kiku
* @author Flatkat
**/
@ModifyExpressionValue(
method = "travelInFluid", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/LivingEntity;hasStatusEffect(Lnet/minecraft/registry/entry/RegistryEntry;)Z"
)
)
private boolean boostWhenRiptide(boolean original) {
if(HarmonyConfig.reduceRiptideWaterDrag){
return original || this.riptideTicks>0;
}
return original;
}



/**
* FEATURE: Flying through liquids deactivates the Elytra
* @author Kiku
Expand All @@ -95,6 +30,4 @@ private boolean cancelElytraInLiquid(boolean original) {
}
return false;
}


}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.symphony.harmony.mixin.transportation;
package dev.symphony.harmony.mixin.transportation.riptide;

import net.minecraft.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package dev.symphony.harmony.mixin.transportation.riptide;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import dev.symphony.harmony.config.HarmonyConfig;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(LivingEntity.class)
public abstract class LivingEntityMixin extends Entity {
/**
* FEATURE: Using riptide trident enchant underwater makes the player gain acceleration during its effect.
* @author Kiku
* @author Flatkat
*/
@SuppressWarnings("JavadocDeclaration")
@Unique
private static final float MODIFIER = HarmonyConfig.riptideAccelerationOnWater;
@Unique
private static final float DEG = (float) (Math.PI / 180F);

@Shadow
protected int riptideTicks;

@Shadow public abstract void setSprinting(boolean sprinting);

public LivingEntityMixin(EntityType<?> type, World world) {
super(type, world);
}

//Applies constant acceleration when using riptide and touching water.
@Inject(
method = "tickMovement", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/LivingEntity;tickRiptide(Lnet/minecraft/util/math/Box;Lnet/minecraft/util/math/Box;)V"
)
)
private void accelerateWhenRiptide(CallbackInfo ci) {
if(HarmonyConfig.riptideAccelerationOnWater != 0){
if (!this.isTouchingWater()) return;
float f = getYaw();
float g = getPitch();
float h = -MathHelper.sin(f * DEG) * MathHelper.cos(g * DEG);
float k = -MathHelper.sin(g * DEG);
float l = MathHelper.cos(f * DEG) * MathHelper.cos(g * DEG);
float m = MathHelper.sqrt(h * h + k * k + l * l);
h *= MODIFIER / m;
k *= MODIFIER / m;
l *= MODIFIER / m;
addVelocity(h, k, l);
}
}


/**
* FEATURE: Reduced water drag when using riptide
* @author Kiku
* @author Flatkat
**/
@ModifyExpressionValue(
method = "travelInFluid", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/LivingEntity;hasStatusEffect(Lnet/minecraft/registry/entry/RegistryEntry;)Z"
)
)
private boolean boostWhenRiptide(boolean original) {
if(HarmonyConfig.reduceRiptideWaterDrag){
return original || this.riptideTicks>0;
}
return original;
}


}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.symphony.harmony.mixin.transportation;
package dev.symphony.harmony.mixin.transportation.riptide;

import com.llamalad7.mixinextras.sugar.Local;
import dev.symphony.harmony.config.HarmonyConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* Contains multiple features related to Trident's Riptide enchantment
*/
package dev.symphony.harmony.mixin.transportation.riptide;
9 changes: 5 additions & 4 deletions src/main/resources/harmony.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,21 @@
"building.ArmorStandStickArms",
"combat.ItemEntityMixin",
"food.GlowBerryMixin",
"mobs.HuskEntityMixin",
"mobs.mismatched_mob_armor.MobEntityMixin",
"mobs.permissive_parrot_perching.EntityImplMixin",
"mobs.permissive_parrot_perching.PlayerEntityMixin",
"mobs.permissive_parrot_perching.SitOnOwnerShoulderGoalMixin",
"mobs.mismatched_mob_armor.MobEntityMixin",
"mobs.wolves_growl_at_monsters.WolfEntityMixin",
"mobs.HuskEntityMixin",
"potions.BeaconBlockEntityMixin",
"redstone.AbstractBlockImplMixin",
"redstone.OneTickCopperBulbDelay",
"transportation.ExitVehicleOnDamage",
"transportation.HorseArmorPreventsBucking",
"transportation.TridentItemMixin",
"transportation.LivingEntityMixin",
"transportation.LivingEntityAccessor"
"transportation.riptide.LivingEntityAccessor",
"transportation.riptide.LivingEntityMixin",
"transportation.riptide.TridentItemMixin"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit 3b29d4f

Please sign in to comment.