summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/mixins
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2024-04-24 08:38:27 +1000
committerGitHub <noreply@github.com>2024-04-24 00:38:27 +0200
commit53da6585ecb9b4cc123707d54556b85a8500b599 (patch)
treee9beb38c616b9a4dea209b1fdc14a8a419243d7a /src/main/java/at/hannibal2/skyhanni/mixins
parent90d24f8dd01f87fa7dbdf49a150314c887cb5bf9 (diff)
downloadskyhanni-53da6585ecb9b4cc123707d54556b85a8500b599.tar.gz
skyhanni-53da6585ecb9b4cc123707d54556b85a8500b599.tar.bz2
skyhanni-53da6585ecb9b4cc123707d54556b85a8500b599.zip
Add Funny (#1523)
Co-authored-by: ThatGravyBoat <thatgravyboat@gmail.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: Linnea Gräf <nea@nea.moe>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/mixins')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/hooks/RendererLivingEntityHook.kt44
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinContributorRendererEntityLiving.java28
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntityHookSBA.java30
3 files changed, 102 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/RendererLivingEntityHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/RendererLivingEntityHook.kt
index 8b724037a..784875f56 100644
--- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/RendererLivingEntityHook.kt
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/RendererLivingEntityHook.kt
@@ -1,10 +1,17 @@
package at.hannibal2.skyhanni.mixins.hooks
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.features.misc.ContributorManager
import at.hannibal2.skyhanni.utils.EntityOutlineRenderer
+import at.hannibal2.skyhanni.utils.LorenzUtils
import net.minecraft.client.renderer.GlStateManager
import net.minecraft.entity.EntityLivingBase
+import net.minecraft.entity.player.EntityPlayer
+import net.minecraft.entity.player.EnumPlayerModelParts
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
class RendererLivingEntityHook {
+ private val config get() = SkyHanniMod.feature.dev
fun setOutlineColor(red: Float, green: Float, blue: Float, alpha: Float, entity: EntityLivingBase) {
val color = EntityOutlineRenderer.getCustomOutlineColor(entity)
@@ -18,4 +25,41 @@ class RendererLivingEntityHook {
GlStateManager.color(red, green, blue, alpha)
}
}
+
+ fun isWearing(entityPlayer: EntityPlayer, parts: EnumPlayerModelParts?): Boolean {
+ if (!LorenzUtils.inSkyBlock) return entityPlayer.isWearing(parts)
+ return isCoolPerson(entityPlayer.name) || entityPlayer.isWearing(parts)
+ }
+
+ fun <T> rotateCorpse(displayName: String, bat: T): Boolean {
+ if (isCoolPerson(displayName)) {
+ GlStateManager.rotate(getRotation(bat).toFloat(), 0f, 1f, 0f)
+ }
+ return isCoolPerson(displayName)
+ }
+
+ fun onIsWearing(entityPlayer: EntityPlayer, cir: CallbackInfoReturnable<Boolean>) {
+ if (!isCoolPerson(entityPlayer.name)) return
+ GlStateManager.rotate(getRotation(entityPlayer).toFloat(), 0f, 1f, 0f)
+ cir.returnValue = true
+ }
+
+ fun onEquals(displayName: String, cir: CallbackInfoReturnable<Boolean>) {
+ if (isCoolPerson(displayName)) {
+ cir.returnValue = true
+ }
+ }
+
+ private fun isCoolPerson(userName: String?): Boolean {
+ if (!LorenzUtils.inSkyBlock) return false
+ if (!config.flipContributors && !LorenzUtils.isAprilFoolsDay) return false
+ val name = userName ?: return false
+ return ContributorManager.canSpin(name)
+ }
+
+ private fun <T> getRotation(entity: T): Int {
+ if (!config.rotateContributors) return 0
+ if (entity !is EntityPlayer) return 0
+ return (entity.ticksExisted % 90) * 4
+ }
}
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinContributorRendererEntityLiving.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinContributorRendererEntityLiving.java
new file mode 100644
index 000000000..15fafa822
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinContributorRendererEntityLiving.java
@@ -0,0 +1,28 @@
+package at.hannibal2.skyhanni.mixins.transformers.renderer;
+
+import at.hannibal2.skyhanni.mixins.hooks.RendererLivingEntityHook;
+import net.minecraft.client.renderer.entity.RendererLivingEntity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Unique;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+@Mixin(value = RendererLivingEntity.class, priority = 500)
+public class MixinContributorRendererEntityLiving<T extends EntityLivingBase> {
+
+ @Unique
+ private final RendererLivingEntityHook skyHanni$hook = new RendererLivingEntityHook();
+
+ @Redirect(method = "rotateCorpse", at = @At(value = "INVOKE", target = "Ljava/lang/String;equals(Ljava/lang/Object;)Z", ordinal = 0))
+ private boolean rotateCorpse(String displayName, Object v2, T bat, float p_77043_2_, float p_77043_3_, float partialTicks) {
+ return skyHanni$hook.rotateCorpse(displayName, bat);
+ }
+
+ @Redirect(method = "rotateCorpse", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/EntityPlayer;isWearing(Lnet/minecraft/entity/player/EnumPlayerModelParts;)Z"))
+ private boolean rotateCorpse(EntityPlayer bat, EnumPlayerModelParts p_175148_1_) {
+ return skyHanni$hook.isWearing(bat, EnumPlayerModelParts.CAPE);
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntityHookSBA.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntityHookSBA.java
new file mode 100644
index 000000000..1d54872f7
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntityHookSBA.java
@@ -0,0 +1,30 @@
+package at.hannibal2.skyhanni.mixins.transformers.renderer;
+
+import at.hannibal2.skyhanni.mixins.hooks.RendererLivingEntityHook;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Pseudo;
+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.CallbackInfoReturnable;
+
+@Pseudo
+@Mixin(targets = "codes/biscuit/skyblockaddons/asm/hooks/RendererLivingEntityHook")
+public class MixinRendererLivingEntityHookSBA<T extends EntityLivingBase> {
+
+ @Unique
+ private static final RendererLivingEntityHook skyHanni$hook = new RendererLivingEntityHook();
+
+ @Inject(method = "equals", at = @At("HEAD"), cancellable = true, remap = false)
+ private static void onEquals(String displayName, Object otherString, CallbackInfoReturnable<Boolean> cir) {
+ skyHanni$hook.onEquals(displayName, cir);
+ }
+
+ @Inject(method = "isWearing", at = @At("HEAD"), cancellable = true, remap = false)
+ private static void onIsWearing(EntityPlayer entityPlayer, EnumPlayerModelParts p_175148_1_, CallbackInfoReturnable<Boolean> cir) {
+ skyHanni$hook.onIsWearing(entityPlayer, cir);
+ }
+}