diff options
author | DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> | 2021-10-23 12:24:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-23 12:24:24 -0400 |
commit | 344eb03d32817ffa158bcbd88e932f05bb77c261 (patch) | |
tree | fbad3e417e19bcf5cfeb20d36e79aeb9fea849e1 /src/main | |
parent | 35f238d91b5f0bc3f16b0a30266dfe8054cd9203 (diff) | |
download | SkytilsMod-344eb03d32817ffa158bcbd88e932f05bb77c261.tar.gz SkytilsMod-344eb03d32817ffa158bcbd88e932f05bb77c261.tar.bz2 SkytilsMod-344eb03d32817ffa158bcbd88e932f05bb77c261.zip |
improvements to rarity outline (#91)
- fix rendering in neu storage
- use a mutex to prevent recursion
- disable enchantment glint while rendering
Diffstat (limited to 'src/main')
6 files changed, 81 insertions, 21 deletions
diff --git a/src/main/java/skytils/skytilsmod/mixins/transformers/neu/MixinStorageOverlay.java b/src/main/java/skytils/skytilsmod/mixins/transformers/neu/MixinStorageOverlay.java new file mode 100644 index 00000000..35835951 --- /dev/null +++ b/src/main/java/skytils/skytilsmod/mixins/transformers/neu/MixinStorageOverlay.java @@ -0,0 +1,52 @@ +/* + * Skytils - Hypixel Skyblock Quality of Life Mod + * Copyright (C) 2021 Skytils + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package skytils.skytilsmod.mixins.transformers.neu; + +import net.minecraft.client.shader.Framebuffer; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Pseudo +@Mixin(targets = "io.github.moulberry.notenoughupdates.miscgui.StorageOverlay") +public class MixinStorageOverlay { + + @Shadow(remap = false) + private Framebuffer framebuffer; + + @SuppressWarnings({"UnresolvedMixinReference", "UnqualifiedMemberReference"}) + @Inject( + method = "render", + at = @At( + value = "FIELD", + target = "Lio/github/moulberry/notenoughupdates/miscgui/StorageOverlay;framebuffer", + shift = At.Shift.AFTER, + opcode = Opcodes.PUTFIELD + ), + remap = false + ) + public void onSetFramebuffer(CallbackInfo ci) { + framebuffer.enableStencil(); + } + +} diff --git a/src/main/java/skytils/skytilsmod/mixins/transformers/renderer/MixinRenderItem.java b/src/main/java/skytils/skytilsmod/mixins/transformers/renderer/MixinRenderItem.java index 2d20cf72..d1eca0ba 100644 --- a/src/main/java/skytils/skytilsmod/mixins/transformers/renderer/MixinRenderItem.java +++ b/src/main/java/skytils/skytilsmod/mixins/transformers/renderer/MixinRenderItem.java @@ -50,4 +50,11 @@ public abstract class MixinRenderItem { RenderItemHookKt.modifyGlintRendering(stack, model, ci); } + @Inject(method = "renderEffect", at = @At("HEAD"), cancellable = true) + public void onRenderEffect(CallbackInfo ci) { + if (RenderItemHookKt.getSkipGlint()) { + ci.cancel(); + } + } + } diff --git a/src/main/kotlin/skytils/skytilsmod/mixins/hooks/renderer/RenderItemHook.kt b/src/main/kotlin/skytils/skytilsmod/mixins/hooks/renderer/RenderItemHook.kt index 4b267b21..8181e421 100644 --- a/src/main/kotlin/skytils/skytilsmod/mixins/hooks/renderer/RenderItemHook.kt +++ b/src/main/kotlin/skytils/skytilsmod/mixins/hooks/renderer/RenderItemHook.kt @@ -40,12 +40,12 @@ import skytils.skytilsmod.utils.Utils val RES_ITEM_GLINT = ResourceLocation("textures/misc/enchanted_item_glint.png") +var skipGlint = false + fun renderRarity(stack: ItemStack, x: Int, y: Int, ci: CallbackInfo) { if (Utils.inSkyblock && Skytils.config.showItemRarity) { if (mc.currentScreen != null) { if (isStorageMenuActive || isTradeWindowActive || isCustomAHActive) { - // TODO Fix items not rendering in neu storage overlay - if (stack.hasTagCompound() && stack.tagCompound.getBoolean("ignoreForRarity")) return renderRarity(stack, x, y) } } diff --git a/src/main/kotlin/skytils/skytilsmod/utils/ItemUtil.kt b/src/main/kotlin/skytils/skytilsmod/utils/ItemUtil.kt index 3943aa6e..98fa4935 100644 --- a/src/main/kotlin/skytils/skytilsmod/utils/ItemUtil.kt +++ b/src/main/kotlin/skytils/skytilsmod/utils/ItemUtil.kt @@ -215,12 +215,4 @@ object ItemUtil { return nbt.getCompoundTag("SkullOwner").getCompoundTag("Properties") .getTagList("textures", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(0).getString("Value") } - - fun removeEnchants(item: ItemStack): ItemStack { - val nbt = item.tagCompound ?: return item - if (!nbt.hasKey("ench", 9)) return item - nbt.removeTag("ench") - item.tagCompound = nbt - return item - } }
\ No newline at end of file diff --git a/src/main/kotlin/skytils/skytilsmod/utils/RenderUtil.kt b/src/main/kotlin/skytils/skytilsmod/utils/RenderUtil.kt index 56443eaa..b17cc9a1 100644 --- a/src/main/kotlin/skytils/skytilsmod/utils/RenderUtil.kt +++ b/src/main/kotlin/skytils/skytilsmod/utils/RenderUtil.kt @@ -32,8 +32,10 @@ import net.minecraft.util.* import org.lwjgl.opengl.GL11 import skytils.skytilsmod.Skytils import skytils.skytilsmod.Skytils.Companion.mc +import skytils.skytilsmod.mixins.hooks.renderer.skipGlint import skytils.skytilsmod.mixins.transformers.accessors.AccessorMinecraft import java.awt.Color +import java.util.concurrent.locks.ReentrantLock import kotlin.math.cos import kotlin.math.roundToInt import kotlin.math.sin @@ -46,6 +48,7 @@ object RenderUtil { private val RARITY4 = ResourceLocation("skytils", "gui/rarity4.png") private val CUSTOMRARITY = ResourceLocation("skytils", "gui/customrarity.png") private val beaconBeam = ResourceLocation("textures/entity/beacon_beam.png") + private val mutex = ReentrantLock() /** * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 @@ -475,7 +478,11 @@ object RenderUtil { if (!Skytils.config.showPetRarity && ItemUtil.isPet(itemStack)) { return } else { - renderRarity(xPos, yPos, itemStack) + if (!mutex.isLocked) { + mutex.lock() + renderRarity(xPos, yPos, itemStack) + mutex.unlock() + } } } } @@ -560,24 +567,25 @@ object RenderUtil { val scale: Double = 1.2 GlStateManager.translate( - xPos.toFloat() - scale * scale, - yPos.toFloat() - scale * scale, + xPos.toDouble(), + yPos.toDouble(), 0.0 ) + + GlStateManager.pushMatrix() + GlStateManager.translate(8.0, 8.0, 0.0) GlStateManager.scale(scale, scale, 0.0) - renderItem(ItemUtil.removeEnchants(itemStack.copy().also { it.tagCompound.setBoolean("ignoreForRarity", true) }), 0, 0) + GlStateManager.translate(-8.0, -8.0, 0.0) + skipGlint = true + renderItem(itemStack, 0, 0) + skipGlint = false + GlStateManager.popMatrix() - GlStateManager.scale(1 / scale, 1 / scale, 0.0) - GL11.glColorMask(true, true, true, false) + GL11.glColorMask(true, true, true, true) GL11.glStencilMask(0x00) // Writing = OFF GL11.glStencilFunc(GL11.GL_NOTEQUAL, 0, 0xFF) // Anything that wasn't defined above will not be rendered. //Anything rendered here will be cut if goes beyond frame defined before. - GlStateManager.translate( - scale - 1, - scale - 1, - 0.0 - ) Gui.drawRect( 1, 1, 17, 17, Color( diff --git a/src/main/resources/mixins.skytils.json b/src/main/resources/mixins.skytils.json index 8684fa3c..df3dd1b2 100644 --- a/src/main/resources/mixins.skytils.json +++ b/src/main/resources/mixins.skytils.json @@ -40,6 +40,7 @@ "network.MixinNetworkManager", "neu.MixinGuiProfileViewer", "neu.MixinStorageManager", + "neu.MixinStorageOverlay", "neu.MixinTradeWindow", "patcher.MixinFontRendererHook", "renderer.MixinBlockRendererDispatcher", |