diff options
| author | CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> | 2024-04-24 08:38:27 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-24 00:38:27 +0200 |
| commit | 53da6585ecb9b4cc123707d54556b85a8500b599 (patch) | |
| tree | e9beb38c616b9a4dea209b1fdc14a8a419243d7a /src/main/java/at/hannibal2/skyhanni/mixins | |
| parent | 90d24f8dd01f87fa7dbdf49a150314c887cb5bf9 (diff) | |
| download | skyhanni-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')
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); + } +} |
