aboutsummaryrefslogtreecommitdiff
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
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>
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/dev/DevConfig.java22
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/ContributorsJson.kt6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/ContributorManager.kt25
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt6
-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
7 files changed, 150 insertions, 11 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DevConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DevConfig.java
index c66a23f08..c6aac8bbe 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DevConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DevConfig.java
@@ -77,6 +77,28 @@ public class DevConfig {
public boolean fancyContributors = true;
@Expose
+ @ConfigOption(
+ name = "Flip Contributors",
+ desc = "Make SkyHanni contributors appear upside down in the world.")
+ @ConfigEditorBoolean
+ public boolean flipContributors = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Spin Contributors",
+ desc = "Make SkyHanni contributors spin around when you are looking at them. " +
+ "§eRequires 'Flip Contributors' to be enabled.")
+ @ConfigEditorBoolean
+ public boolean rotateContributors = false;
+
+ @Expose
+ @ConfigOption(
+ name = "SBA Contributors",
+ desc = "Mark SBA Contributors the same way as SkyHanni contributors.")
+ @ConfigEditorBoolean
+ public boolean fancySbaContributors = false;
+
+ @Expose
@Category(name = "Minecraft Console", desc = "Minecraft Console Settings")
public MinecraftConsoleConfig minecraftConsoles = new MinecraftConsoleConfig();
diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/ContributorsJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/ContributorsJson.kt
index 7857da85a..b82e0dc4e 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/ContributorsJson.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/ContributorsJson.kt
@@ -1,12 +1,14 @@
package at.hannibal2.skyhanni.data.jsonobjects.repo
import com.google.gson.annotations.Expose
+import com.google.gson.annotations.SerializedName
data class ContributorsJson(
- @Expose val contributors: Map<String, ContributorJsonEntry>
+ @Expose val contributors: Map<String, ContributorJsonEntry>,
)
data class ContributorJsonEntry(
@Expose val suffix: String = "§c:O",
- @Expose val spinny: Boolean = false
+ @Expose val spinny: Boolean = false,
+ @Expose @SerializedName("external_mod") val externalMod: String? = null,
)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/ContributorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/ContributorManager.kt
index 16d1088c8..8fff1d56a 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/misc/ContributorManager.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/misc/ContributorManager.kt
@@ -1,11 +1,13 @@
package at.hannibal2.skyhanni.features.misc
+import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.jsonobjects.repo.ContributorJsonEntry
import at.hannibal2.skyhanni.data.jsonobjects.repo.ContributorsJson
import at.hannibal2.skyhanni.events.RepositoryReloadEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
object ContributorManager {
+ private val config get() = SkyHanniMod.feature.dev
private var contributors: Map<String, ContributorJsonEntry> = emptyMap()
@@ -14,11 +16,24 @@ object ContributorManager {
contributors = event.getConstant<ContributorsJson>("Contributors").contributors.mapKeys { it.key.lowercase() }
}
- fun getTabListSuffix(username: String): String? {
- return contributors[username.lowercase()]?.suffix
- }
+ fun getTabListSuffix(username: String): String? = getContributor(username)?.suffix
+
+ fun canSpin(username: String): Boolean = getContributor(username)?.spinny ?: false
+
+ private fun getContributor(username: String) =
+ contributors[username.lowercase()]?.let { it.takeIf { it.isAllowed() } }
+
+ private fun ContributorJsonEntry.isAllowed(): Boolean {
+ if (!config.fancyContributors) return false
+ return when (externalMod) {
+ // normal SkyHanni contributor
+ null -> true
+
+ // TODO add other mod's devs, e.g skytils
+
+ "SBA" -> config.fancySbaContributors
- fun canSpin(username: String): Boolean {
- return contributors[username.lowercase()]?.spinny ?: false
+ else -> false
+ }
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt
index dd3d7a804..76a5decd8 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt
@@ -197,10 +197,8 @@ object AdvancedPlayerList {
if (config.markSpecialPersons) {
suffix += " ${getSocialIcon(data.name).icon()}"
}
- if (SkyHanniMod.feature.dev.fancyContributors) {
- ContributorManager.getTabListSuffix(data.name)?.let {
- suffix += " $it"
- }
+ ContributorManager.getTabListSuffix(data.name)?.let {
+ suffix += " $it"
}
if (IslandType.CRIMSON_ISLE.isInIsland() && !config.hideFactions) {
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);
+ }
+}