diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/dulkirmod/mixins/MixinItem.java | 19 | ||||
-rw-r--r-- | src/main/java/dulkirmod/mixins/MixinItemRenderer.java | 2 | ||||
-rw-r--r-- | src/main/java/dulkirmod/mixins/MixinWorld.java | 6 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/DulkirMod.kt | 9 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/command/SpawnParticlesCommand.kt | 14 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/config/Config.kt | 24 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/ArachneTimer.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/DragonTimer.kt | 136 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/ItemAnimations.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt | 18 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/utils/ScoreBoardUtils.kt | 24 | ||||
-rw-r--r-- | src/main/kotlin/dulkirmod/utils/WorldRenderUtils.kt | 60 | ||||
-rw-r--r-- | src/main/resources/mixins.dulkirmod.json | 1 |
14 files changed, 300 insertions, 19 deletions
diff --git a/src/main/java/dulkirmod/mixins/MixinItem.java b/src/main/java/dulkirmod/mixins/MixinItem.java new file mode 100644 index 0000000..d3cb421 --- /dev/null +++ b/src/main/java/dulkirmod/mixins/MixinItem.java @@ -0,0 +1,19 @@ +package dulkirmod.mixins; + +import dulkirmod.DulkirMod; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +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.callback.CallbackInfoReturnable; + +@Mixin(value = {Item.class}) +public class MixinItem { + + @Inject(method = "shouldCauseReequipAnimation", at = @At("HEAD"), cancellable = true, remap = false) + public void overrideReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged, CallbackInfoReturnable<Boolean> ci) { + if (DulkirMod.Companion.getConfig().getCancelReequip()) + ci.setReturnValue(false); + } +} diff --git a/src/main/java/dulkirmod/mixins/MixinItemRenderer.java b/src/main/java/dulkirmod/mixins/MixinItemRenderer.java index a81e67d..3620817 100644 --- a/src/main/java/dulkirmod/mixins/MixinItemRenderer.java +++ b/src/main/java/dulkirmod/mixins/MixinItemRenderer.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(value = {ItemRenderer.class}) +@Mixin(value = {ItemRenderer.class}, priority = 1010) public class MixinItemRenderer { @Shadow @Final private RenderItem itemRenderer; diff --git a/src/main/java/dulkirmod/mixins/MixinWorld.java b/src/main/java/dulkirmod/mixins/MixinWorld.java index 1502e38..cdbe9ae 100644 --- a/src/main/java/dulkirmod/mixins/MixinWorld.java +++ b/src/main/java/dulkirmod/mixins/MixinWorld.java @@ -1,18 +1,20 @@ package dulkirmod.mixins; +import dulkirmod.DulkirMod; import net.minecraft.world.World; 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.callback.CallbackInfo; -import dulkirmod.DulkirMod; @Mixin(World.class) public class MixinWorld { @Inject(method = "spawnParticle(IZDDDDDD[I)V", at = @At("HEAD"), cancellable = true) - public void onInitGui(int particleID, boolean p_175720_2_, double xCood, double yCoord, double zCoord, + public void onInitGui(int particleID, boolean p_175720_2_, double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int[] p_175720_15_, CallbackInfo ci) { + DulkirMod.Companion.getDragonTimer().handleNewParticle(particleID, xCoord, yCoord, zCoord); + if (particleID == 25 && DulkirMod.Companion.getConfig().getHideEnchantRune()) { ci.cancel(); } else if (particleID == 34 && DulkirMod.Companion.getConfig().getHideHeartParticles()) { diff --git a/src/main/kotlin/dulkirmod/DulkirMod.kt b/src/main/kotlin/dulkirmod/DulkirMod.kt index 4c94ae2..33fe338 100644 --- a/src/main/kotlin/dulkirmod/DulkirMod.kt +++ b/src/main/kotlin/dulkirmod/DulkirMod.kt @@ -5,10 +5,7 @@ import dulkirmod.config.Config import dulkirmod.events.ChatEvent import dulkirmod.features.* import dulkirmod.features.chat.AbiphoneDND -import dulkirmod.utils.ContainerNameUtil -import dulkirmod.utils.TabListUtils -import dulkirmod.utils.TextUtils -import dulkirmod.utils.TitleUtils +import dulkirmod.utils.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -56,6 +53,7 @@ class DulkirMod { ClientCommandHandler.instance.registerCommand(LeapNameCommand()) ClientCommandHandler.instance.registerCommand(HurtCamCommand()) ClientCommandHandler.instance.registerCommand(FarmingControlSchemeCommand()) + ClientCommandHandler.instance.registerCommand(SpawnParticlesCommand()) } @Mod.EventHandler @@ -76,6 +74,7 @@ class DulkirMod { mcBus.register(KeeperWaypoints()) mcBus.register(ScalableTooltips) mcBus.register(GardenVisitorAlert()) + mcBus.register(DragonTimer()) keyBinds.forEach(ClientRegistry::registerKeyBinding) } @@ -104,6 +103,7 @@ class DulkirMod { // Now I don't have to fetch the entries for multiple things, this just updates and caches // the data structure on 1s cooldown TabListUtils.parseTabEntries() + ScoreBoardUtils.inM7() lastLongUpdate = currTime } } @@ -133,6 +133,7 @@ class DulkirMod { val titleUtils = TitleUtils() val matchoAlert = MatchoAlert() val gardenVisitorAlert = GardenVisitorAlert() + val DragonTimer = DragonTimer() var tabEntries: List<String?> = emptyList() val keyBinds = arrayOf( diff --git a/src/main/kotlin/dulkirmod/command/SpawnParticlesCommand.kt b/src/main/kotlin/dulkirmod/command/SpawnParticlesCommand.kt new file mode 100644 index 0000000..88358a6 --- /dev/null +++ b/src/main/kotlin/dulkirmod/command/SpawnParticlesCommand.kt @@ -0,0 +1,14 @@ +package dulkirmod.command + +import dulkirmod.utils.TextUtils +import net.minecraft.command.ICommandSender + +class SpawnParticlesCommand : ClientCommandBase("sp") { + override fun processCommand(sender: ICommandSender?, args: Array<out String>?) { + TextUtils.sendMessage("/particle flame 84 18 95 1 1 1 1 100") + TextUtils.sendMessage("/particle flame 57 18 125 1 1 1 1 100") + TextUtils.sendMessage("/particle flame 26 18 95 1 1 1 1 100") + TextUtils.sendMessage("/particle flame 27 18 60 1 1 1 1 100") + TextUtils.sendMessage("/particle flame 84 18 56 1 1 1 1 100") + } +}
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/config/Config.kt b/src/main/kotlin/dulkirmod/config/Config.kt index 7f914e1..8fe611d 100644 --- a/src/main/kotlin/dulkirmod/config/Config.kt +++ b/src/main/kotlin/dulkirmod/config/Config.kt @@ -125,6 +125,22 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so @Property( type = PropertyType.SWITCH, + name = "M7 Dragon Timer", + description = "Helps u arrow stack ig", + category = "Dungeons" + ) + var dragonTimer = true + + @Property( + type = PropertyType.SWITCH, + name = "Better M7 Dragon Killbox", + description = "Mostly stolen from odin", + category = "Dungeons" + ) + var dragonKillBox = true + + @Property( + type = PropertyType.SWITCH, name = "Hide Extra Nametags", description = "Prevents some nametags not covered by skytils \"Hide non-starred nametags\" from rendering.", category = "General" @@ -570,6 +586,14 @@ object Config : Vigilant(File("./config/dulkirmod/config.toml"), "DulkirMod", so ) var defaultSens = .7f + @Property( + type = PropertyType.SWITCH, + name = "Turn off re-equip animation", + description = "Will stop the spam re-equip when stuff like cultivating is updating", + category = "Animations" + ) + var cancelReequip = false + fun init() { initialize() addDependency("customMessage", "throttleNotifier") diff --git a/src/main/kotlin/dulkirmod/features/ArachneTimer.kt b/src/main/kotlin/dulkirmod/features/ArachneTimer.kt index a4cfa1a..5c97c86 100644 --- a/src/main/kotlin/dulkirmod/features/ArachneTimer.kt +++ b/src/main/kotlin/dulkirmod/features/ArachneTimer.kt @@ -57,7 +57,7 @@ class ArachneTimer { (18 - (System.currentTimeMillis() - spawnmillis) / 1000).toInt() } if (time < 0) time = 0 - WorldRenderUtils.render(Vec3(-282.5, 50.8, -178.5), "${color}${time}", false) + WorldRenderUtils.renderString(Vec3(-282.5, 50.8, -178.5), "${color}${time}", false) } } }
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/DragonTimer.kt b/src/main/kotlin/dulkirmod/features/DragonTimer.kt new file mode 100644 index 0000000..459c291 --- /dev/null +++ b/src/main/kotlin/dulkirmod/features/DragonTimer.kt @@ -0,0 +1,136 @@ +package dulkirmod.features + +import dulkirmod.DulkirMod.Companion.mc +import dulkirmod.config.Config +import dulkirmod.utils.ScoreBoardUtils +import dulkirmod.utils.WorldRenderUtils +import net.minecraft.util.BlockPos +import net.minecraft.util.Vec3 +import net.minecraft.world.World +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.awt.Color +import kotlin.math.max + +class DragonTimer { + data class Dragon (val color: String, val pos: Vec3, var spawnTime: Long) + + companion object { + var dragons = arrayOf( + Dragon("orange", Vec3(84.0, 18.0, 56.0), 0), + Dragon("red", Vec3(27.0, 18.0, 56.0), 0), + Dragon("green", Vec3(26.0, 18.0, 95.0), 0), + Dragon("purple", Vec3(57.0, 18.0, 125.0), 0), + Dragon("blue", Vec3(84.0, 18.0, 95.0), 0) + ) + } + + /** + * Called from within the MixinWorld Class + */ + fun handleNewParticle(particleID: Int, xCoord: Double, yCoord: Double, zCoord: Double) { + if (particleID != 26) return + // if (!TabListUtils.isInDungeons) return + if (!Config.dragonTimer) return + //TextUtils.info("§6particle id ${particleID} 175 = $p_175720_2_") + + val particleVec = Vec3(xCoord, yCoord, zCoord) + for (d in dragons) { + if (inRangeOf(d.color, particleVec)) { + if (System.currentTimeMillis() - d.spawnTime > 10000) { + d.spawnTime = System.currentTimeMillis() + } + } + } + } + + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + val curTime: Long = System.currentTimeMillis() + // for some reason this really doesn't like the syntax for (d in dragons) + for (i in 0..4) { + // d.spawnTime + 5000 is when dragon actually spawn + val d = dragons[i] + if (d.spawnTime + 5000 > curTime) { + if (isDead(d.color)) + return + val timeUntilSpawn: Float = ((d.spawnTime + 5000 - curTime).toFloat() / 1000f) + val color = when { + timeUntilSpawn <= 1 -> "§c" + timeUntilSpawn <= 3 -> "§e" + else -> "§a" + } + val playerVec = mc.thePlayer.positionVector + val scale = max(1f, playerVec.distanceTo(d.pos).toFloat()/5f) + WorldRenderUtils.renderString(d.pos, "${color}${String.format("%.2f", timeUntilSpawn)}", + false, scale, true) + } + } + } + + /** + * true = dead + */ + private fun isDead(color:String): Boolean { + val world: World = mc.theWorld + val pos = when (color) { + "orange" -> BlockPos(90, 21, 56) + "red" -> BlockPos(20,22,59) + "green" -> BlockPos(22,21,94) + "purple" -> BlockPos(56,20,130) + "blue" -> BlockPos(89,21,94) + else -> BlockPos(0,0,0) + } + return world.isAirBlock(pos) + } + private fun inRangeOf(color: String, pos: Vec3): Boolean { + when (color) { + "orange" -> { + return (pos.xCoord.toInt() in 82..88 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 53..59) + } + "red" -> { + return (pos.xCoord.toInt() in 24..30 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 56..62) + } + "green" -> { + return (pos.xCoord.toInt() in 23..29 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 91..97) + } + "purple" -> { + return (pos.xCoord.toInt() in 53..59 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 122..128) + } + "blue" -> { + return (pos.xCoord.toInt() in 82..88 + && pos.yCoord.toInt() in 15..22 + && pos.zCoord.toInt() in 91..97) + } + else -> { + return false + } + } + } + + @SubscribeEvent + fun dragonBoxes(event: RenderWorldLastEvent) { + if (!Config.dragonKillBox) return + if (!ScoreBoardUtils.isInM7) return + if (mc.thePlayer.positionVector.yCoord > 45) return + // Blue + WorldRenderUtils.drawCustomBox(71.5, 25.0, 16.0, 10.0, 82.5, 25.0, Color(0, 170, 170, 255), 3f, phase = false) + // Purple + WorldRenderUtils.drawCustomBox(45.5, 23.0, 13.0, 10.0, 113.5, 23.0, Color(170, 0, 170, 255), 3f, phase = false) + // Green + WorldRenderUtils.drawCustomBox(7.0, 30.0, 8.0, 20.0, 80.0, 30.0, Color(85, 255, 85, 255), 3f, phase = false) + // Red + WorldRenderUtils.drawCustomBox(14.5, 25.0, 13.0, 15.0, 45.5, 25.0, Color(255, 85, 85, 255), 3f, phase = false) + // Orange + WorldRenderUtils.drawCustomBox(72.0, 30.0, 8.0, 20.0, 47.0, 30.0, Color(255, 170, 0, 255), 3f, phase = false) + } +} + diff --git a/src/main/kotlin/dulkirmod/features/ItemAnimations.kt b/src/main/kotlin/dulkirmod/features/ItemAnimations.kt index 7e9b85d..8fa55f2 100644 --- a/src/main/kotlin/dulkirmod/features/ItemAnimations.kt +++ b/src/main/kotlin/dulkirmod/features/ItemAnimations.kt @@ -19,6 +19,7 @@ import kotlin.math.pow * @author Aton - THANK YOU */ object ItemAnimations { + /** * Directly referenced hook for the itemTransform Inject in the ItemRenderer Mixin. * Takes care of scaling and positioning the held item. @@ -111,4 +112,5 @@ object ItemAnimations { GlStateManager.translate(-newX, -newY, -newZ) return true } + }
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt b/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt index bb053a3..6e47a59 100644 --- a/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt +++ b/src/main/kotlin/dulkirmod/features/KeeperWaypoints.kt @@ -38,15 +38,15 @@ class KeeperWaypoints { val scale9 = max(1f, playerVec.distanceTo(vec9).toFloat()/10f) val color = Utils.getColorString(Config.bestiaryNotifColor) - WorldRenderUtils.render(vec1, "${color}1", false, scale1, true) - WorldRenderUtils.render(vec2, "${color}2", false, scale2, true) - WorldRenderUtils.render(vec3, "${color}3", false, scale3, true) - WorldRenderUtils.render(vec4, "${color}4", false, scale4, true) - WorldRenderUtils.render(vec5, "${color}5", false, scale5, true) - WorldRenderUtils.render(vec6, "${color}6", false, scale6, true) - WorldRenderUtils.render(vec7, "${color}7", false, scale7, true) - WorldRenderUtils.render(vec8, "${color}8", false, scale8, true) - WorldRenderUtils.render(vec9, "${color}9", false, scale9, true) + WorldRenderUtils.renderString(vec1, "${color}1", false, scale1, true) + WorldRenderUtils.renderString(vec2, "${color}2", false, scale2, true) + WorldRenderUtils.renderString(vec3, "${color}3", false, scale3, true) + WorldRenderUtils.renderString(vec4, "${color}4", false, scale4, true) + WorldRenderUtils.renderString(vec5, "${color}5", false, scale5, true) + WorldRenderUtils.renderString(vec6, "${color}6", false, scale6, true) + WorldRenderUtils.renderString(vec7, "${color}7", false, scale7, true) + WorldRenderUtils.renderString(vec8, "${color}8", false, scale8, true) + WorldRenderUtils.renderString(vec9, "${color}9", false, scale9, true) } } diff --git a/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt b/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt index e1b618f..8e4d2dd 100644 --- a/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt +++ b/src/main/kotlin/dulkirmod/features/chat/FakeMsg.kt @@ -4,7 +4,7 @@ import dulkirmod.utils.TextUtils import net.minecraftforge.client.event.ClientChatReceivedEvent object FakeMsg { - private val dulkirRegex = "From \\[MVP(\\+|\\+\\+)] Dulkir: c:".toRegex() + private val dulkirRegex = "^From \\[MVP(\\+|\\+\\+)] Dulkir: c:".toRegex() fun handle(event: ClientChatReceivedEvent, unformatted: String) { if (dulkirRegex.matches(unformatted)) { event.isCanceled = true diff --git a/src/main/kotlin/dulkirmod/utils/ScoreBoardUtils.kt b/src/main/kotlin/dulkirmod/utils/ScoreBoardUtils.kt index 520c143..4db1046 100644 --- a/src/main/kotlin/dulkirmod/utils/ScoreBoardUtils.kt +++ b/src/main/kotlin/dulkirmod/utils/ScoreBoardUtils.kt @@ -5,6 +5,7 @@ import net.minecraft.scoreboard.Score import net.minecraft.scoreboard.ScorePlayerTeam object ScoreBoardUtils { + var isInM7: Boolean = false; fun getLines(): MutableList<String> { val scoreboard = DulkirMod.mc.thePlayer.worldScoreboard val sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1) @@ -18,4 +19,27 @@ object ScoreBoardUtils { } return lines } + + fun inM7(): Boolean { + if (!Utils.isInSkyblock()) { + isInM7 = false + return false + } + val lines = getLines() + if (lines.size < 4) { + isInM7 = false + return false + } + val line = lines.getOrNull(3) + var unformattedText = line?.replace("\\p{So}|\\p{Sk}".toRegex(), "") + if (unformattedText != null) { + unformattedText = Utils.stripColorCodes(unformattedText) + } + if (unformattedText == " The Catacombs (M7)") { + isInM7 = true + return true + } + isInM7 = false + return false + } }
\ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/utils/WorldRenderUtils.kt b/src/main/kotlin/dulkirmod/utils/WorldRenderUtils.kt index e0febdd..231ab3f 100644 --- a/src/main/kotlin/dulkirmod/utils/WorldRenderUtils.kt +++ b/src/main/kotlin/dulkirmod/utils/WorldRenderUtils.kt @@ -5,15 +5,22 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.GlStateManager.disableTexture2D import net.minecraft.client.renderer.GlStateManager.enableTexture2D import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.entity.RenderManager import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.util.Vec3 import org.lwjgl.opengl.GL11 +import java.awt.Color class WorldRenderUtils { + companion object { - fun render( + private val tessellator: Tessellator = Tessellator.getInstance() + private val worldRenderer: WorldRenderer = tessellator.worldRenderer + private val renderManager: RenderManager = mc.renderManager + fun renderString( location: Vec3, text: String, depthTest: Boolean = true, @@ -114,5 +121,56 @@ class WorldRenderUtils { GL11.glDepthMask(true) } } + + + /** + * Courtesy of Odin, I could not be bothered to deal with rendering code. + */ + fun drawCustomBox(x: Double, xWidth: Double, y: Double, yWidth: Double, z: Double, zWidth: Double, color: Color, thickness: Float = 3f, phase: Boolean) { + GlStateManager.pushMatrix() + + GlStateManager.color(color.red.toFloat() / 255f, color.green.toFloat() / 255f, color.blue.toFloat() / 255f, 1f) + GlStateManager.translate(-renderManager.viewerPosX, -renderManager.viewerPosY, -renderManager.viewerPosZ) + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) + if (phase) GlStateManager.disableDepth() + disableTexture2D() + GlStateManager.disableLighting() + GlStateManager.enableBlend() + + GL11.glLineWidth(thickness) + + val x1 = x + xWidth + val y1 = y + yWidth + val z1 = z + zWidth + + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION) + worldRenderer.pos(x1,y1,z1).endVertex() + worldRenderer.pos(x1,y1,z).endVertex() + worldRenderer.pos(x,y1,z).endVertex() + worldRenderer.pos(x,y1,z1).endVertex() + worldRenderer.pos(x1,y1,z1).endVertex() + worldRenderer.pos(x1,y,z1).endVertex() + worldRenderer.pos(x1,y,z).endVertex() + worldRenderer.pos(x,y,z).endVertex() + worldRenderer.pos(x,y,z1).endVertex() + worldRenderer.pos(x,y,z).endVertex() + worldRenderer.pos(x,y1,z).endVertex() + worldRenderer.pos(x,y,z).endVertex() + worldRenderer.pos(x1,y,z).endVertex() + worldRenderer.pos(x1,y1,z).endVertex() + worldRenderer.pos(x1,y,z).endVertex() + worldRenderer.pos(x1,y,z1).endVertex() + worldRenderer.pos(x,y,z1).endVertex() + worldRenderer.pos(x,y1,z1).endVertex() + worldRenderer.pos(x1,y1,z1).endVertex() + + tessellator.draw() + + enableTexture2D() + GlStateManager.disableBlend() + GlStateManager.enableDepth() + + GlStateManager.popMatrix() + } } }
\ No newline at end of file diff --git a/src/main/resources/mixins.dulkirmod.json b/src/main/resources/mixins.dulkirmod.json index c52d178..6fc520a 100644 --- a/src/main/resources/mixins.dulkirmod.json +++ b/src/main/resources/mixins.dulkirmod.json @@ -14,6 +14,7 @@ "MixinEntity", "MixinEntityLivingBase", "MixinGuiUtils", + "MixinItem", "MixinOldAnimations", "MixinWorld" ] |