Skip to content

v0.1.1-alpha

Pre-release
Pre-release

Choose a tag to compare

@reply7251 reply7251 released this 06 Nov 08:11

RuntimeMixin (limited usage)

example

object MixinClientWorld {
    @Advice.OnMethodExit
    @JvmStatic
    fun getBlockParticle(
        @Advice.FieldValue("field_35432", typing = Assigner.Typing.DYNAMIC) BLOCK_MARKER_ITEMS: Set<class_1792>?,
        @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) returnValue: Any?
    ) {
        var returnValue = returnValue
        if(returnValue != null) return

        val mc = class_310.method_1551()
        val itemstack = mc.field_1724?.method_6047() ?: return
        val item = itemstack.method_7909()
        if(BLOCK_MARKER_ITEMS?.contains(item) == true)
            returnValue = (item as? class_1747)?.method_7711()
    }
}

val matcher = ElementMatchers.named<MethodDescription>("method_35752")
val mixinClientWorld = RuntimeMixin.getPatchedImplementation(MixinClientWorld::class.java).on(matcher)

RuntimeMixin.addMixin(net.minecraft.class_638::class.java, mixinClientWorld)
RuntimeMixin.doMixin(net.minecraft.class_638::class.java)

(event as? EventService)?.stopListener = JavaWrapper.methodToJava { ->
    RuntimeMixin.removeMixin(net.minecraft.class_638::class.java, mixinClientWorld)
    RuntimeMixin.doMixin(net.minecraft.class_638::class.java)
}