aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/render/EntityRenderLayersEvent.kt15
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggDisplayManager.kt56
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggPlayerOpacityChanger.kt60
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt3
7 files changed, 86 insertions, 63 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index f04a7de46..c19d288a4 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -141,7 +141,7 @@ import at.hannibal2.skyhanni.features.event.diana.MythologicalCreatureTracker
import at.hannibal2.skyhanni.features.event.diana.SoopyGuessBurrow
import at.hannibal2.skyhanni.features.event.hoppity.HoppityCollectionStats
import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggLocator
-import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggPlayerOpacityChanger
+import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggDisplayManager
import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggsManager
import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggsShared
import at.hannibal2.skyhanni.features.event.hoppity.HoppityNpc
@@ -669,7 +669,7 @@ class SkyHanniMod {
loadModule(HoppityEggsManager)
loadModule(HoppityEggLocator)
loadModule(HoppityEggsShared)
- loadModule(HoppityEggPlayerOpacityChanger)
+ loadModule(HoppityEggDisplayManager)
loadModule(HoppityCollectionStats)
loadModule(SpawnTimers())
loadModule(MarkedPlayerManager())
diff --git a/src/main/java/at/hannibal2/skyhanni/events/render/EntityRenderLayersEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/render/EntityRenderLayersEvent.kt
new file mode 100644
index 000000000..ff951736e
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/events/render/EntityRenderLayersEvent.kt
@@ -0,0 +1,15 @@
+package at.hannibal2.skyhanni.events.render
+
+import at.hannibal2.skyhanni.events.LorenzEvent
+import net.minecraft.entity.Entity
+import net.minecraftforge.fml.common.eventhandler.Cancelable
+
+open class EntityRenderLayersEvent<T : Entity>(
+ val entity: T,
+) : LorenzEvent() {
+
+ @Cancelable
+ class Pre<T : Entity>(
+ entity: T,
+ ) : EntityRenderLayersEvent<T>(entity)
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggDisplayManager.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggDisplayManager.kt
new file mode 100644
index 000000000..914b10b0e
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggDisplayManager.kt
@@ -0,0 +1,56 @@
+package at.hannibal2.skyhanni.features.event.hoppity
+
+import at.hannibal2.skyhanni.data.mob.MobFilter.isRealPlayer
+import at.hannibal2.skyhanni.events.SkyHanniRenderEntityEvent
+import at.hannibal2.skyhanni.events.render.EntityRenderLayersEvent
+import at.hannibal2.skyhanni.utils.LocationUtils.distanceTo
+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.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import org.lwjgl.opengl.GL11
+
+object HoppityEggDisplayManager {
+
+ private val config get() = HoppityEggsManager.config
+ private var shouldHidePlayer: Boolean = false
+
+ private fun canChangeOpacity(entity: EntityLivingBase): Boolean {
+ if (!HoppityEggLocator.isEnabled()) return false
+ if (entity !is EntityPlayer) return false
+ if (entity == LorenzUtils.getPlayer()) return false
+ if (!entity.isRealPlayer()) return false
+ return config.playerOpacity < 100
+ }
+
+ @SubscribeEvent
+ fun onPreRenderPlayer(event: SkyHanniRenderEntityEvent.Pre<EntityLivingBase>) {
+ if (!canChangeOpacity(event.entity)) return
+
+ shouldHidePlayer = HoppityEggLocator.sharedEggLocation?.let { event.entity.distanceTo(it) < 4.0 }
+ ?: HoppityEggLocator.possibleEggLocations.any { event.entity.distanceTo(it) < 4.0 }
+
+ if (!shouldHidePlayer) return
+ if (config.playerOpacity <= 0) return event.cancel()
+
+ GlStateManager.enableBlend()
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA)
+ GlStateManager.color(1.0f, 1.0f, 1.0f, config.playerOpacity / 100f)
+ }
+
+ @SubscribeEvent
+ fun onPostRenderPlayer(event: SkyHanniRenderEntityEvent.Post<EntityLivingBase>) {
+ if (!canChangeOpacity(event.entity)) return
+
+ GlStateManager.color(1f, 1f, 1f, 1f)
+ GlStateManager.disableBlend()
+ }
+
+ @SubscribeEvent
+ fun onRenderPlayerLayers(event: EntityRenderLayersEvent.Pre<EntityLivingBase>) {
+ if (!canChangeOpacity(event.entity)) return
+ if (!shouldHidePlayer) return
+ event.cancel()
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt
index c57ec2b33..012532f3b 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt
@@ -248,7 +248,7 @@ object HoppityEggLocator {
private fun ReceiveParticleEvent.isEnchantmentParticle() =
type == EnumParticleTypes.ENCHANTMENT_TABLE && speed == -2.0f && count == 10
- private fun isEnabled() = LorenzUtils.inSkyBlock && config.waypoints && !GardenAPI.inGarden()
+ fun isEnabled() = LorenzUtils.inSkyBlock && config.waypoints && !GardenAPI.inGarden()
&& !ReminderUtils.isBusy(true) && ChocolateFactoryAPI.isHoppityEvent()
private val ItemStack.isLocatorItem get() = getInternalName() == locatorItem
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggPlayerOpacityChanger.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggPlayerOpacityChanger.kt
deleted file mode 100644
index 68436438f..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggPlayerOpacityChanger.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package at.hannibal2.skyhanni.features.event.hoppity
-
-import at.hannibal2.skyhanni.events.SkyHanniRenderEntityEvent
-import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryAPI
-import at.hannibal2.skyhanni.utils.EntityUtils.getArmorInventory
-import at.hannibal2.skyhanni.utils.LocationUtils.distanceTo
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.LorenzVec
-import net.minecraft.client.renderer.GlStateManager
-import net.minecraft.entity.EntityLivingBase
-import net.minecraft.entity.player.EntityPlayer
-import net.minecraft.item.ItemStack
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import org.lwjgl.opengl.GL11
-
-object HoppityEggPlayerOpacityChanger {
- private val config get() = HoppityEggsManager.config
- private var armor = mapOf<Int, ItemStack>()
-
- private fun hideNearbyPlayer(entity: EntityPlayer, location: LorenzVec) {
- if (entity.distanceTo(location) >= 4.0) return
- GlStateManager.enableBlend()
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA)
- GlStateManager.color(1.0f, 1.0f, 1.0f, config.playerOpacity / 100f)
- val armorInventory = entity.getArmorInventory() ?: return
-
- armor = buildMap {
- for ((i, stack) in armorInventory.withIndex()) {
- stack?.let {
- this[i] = it.copy()
- armorInventory[i] = null
- }
- }
- }
- }
-
- @SubscribeEvent
- fun onPreRenderPlayer(event: SkyHanniRenderEntityEvent.Pre<EntityLivingBase>) {
- if (!isEnabled()) return
- if (event.entity !is EntityPlayer) return
- if (event.entity.name == LorenzUtils.getPlayerName()) return
- HoppityEggLocator.sharedEggLocation?.let { hideNearbyPlayer(event.entity, it) }
- HoppityEggLocator.possibleEggLocations.forEach { hideNearbyPlayer(event.entity, it) }
- }
-
- @SubscribeEvent
- fun onPostRenderPlayer(event: SkyHanniRenderEntityEvent.Post<EntityLivingBase>) {
- if (!isEnabled()) return
- GlStateManager.color(1f, 1f, 1f, 1f)
- GlStateManager.disableBlend()
- val armorInventory = event.entity.getArmorInventory() ?: return
-
- for ((index, stack) in armor) { // restore armor after players leave the area
- armorInventory[index] = stack
- }
- }
-
- private fun isEnabled() = LorenzUtils.inSkyBlock && config.waypoints
- && ChocolateFactoryAPI.isHoppityEvent() && config.playerOpacity != 100
-}
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java
index eb1b5afda..f23b290f1 100644
--- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java
@@ -1,5 +1,6 @@
package at.hannibal2.skyhanni.mixins.transformers.renderer;
+import at.hannibal2.skyhanni.events.render.EntityRenderLayersEvent;
import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
@@ -10,6 +11,7 @@ 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.Redirect;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(value = RendererLivingEntity.class, priority = 1001)
@@ -28,4 +30,11 @@ public abstract class MixinRendererLivingEntity<T extends EntityLivingBase> exte
private int changeHurtTime(EntityLivingBase entity) {
return RenderLivingEntityHelper.Companion.internalChangeHurtTime(entity);
}
+
+ @Inject(method = "renderLayers", at = @At("HEAD"), cancellable = true)
+ private void onRenderLayersPre(T entity, float p_177093_2_, float p_177093_3_, float partialTicks, float p_177093_5_, float p_177093_6_, float p_177093_7_, float p_177093_8_, CallbackInfo ci) {
+ if (new EntityRenderLayersEvent.Pre<>(entity).postAndCatch()) {
+ ci.cancel();
+ }
+ }
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
index fbc76f1b2..05ea212b1 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
@@ -22,6 +22,7 @@ import at.hannibal2.skyhanni.utils.StringUtils.toDashlessUUID
import at.hannibal2.skyhanni.utils.renderables.Renderable
import com.google.gson.JsonPrimitive
import net.minecraft.client.Minecraft
+import net.minecraft.client.entity.EntityPlayerSP
import net.minecraft.client.gui.inventory.GuiEditSign
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.SharedMonsterAttributes
@@ -162,6 +163,8 @@ object LorenzUtils {
fun getPlayerName(): String = Minecraft.getMinecraft().thePlayer.name
+ fun getPlayer(): EntityPlayerSP? = Minecraft.getMinecraft()?.thePlayer
+
fun fillTable(
data: List<DisplayTableEntry>,
padding: Int = 1,