Mineuniverse
Log in Register
Mods

Shield System

a minecraft mod that provide a simple shield system
by chen_1335
Download Claim this project
3,800 downloads
0 likes
Updated Jul 6, 2026
0 hypes
API and Library KubeJS

This is an independent shield system from SimpleRPG Core.

It provides a shield system similar to that of League of Legends and it has complete kubejs support.

 

Currently adapted to Overflow Bars

 

for kubejs:

StartupEvents.registry("shield_system:shield_type", event => {
    //Create a simple unit shield that exists permanently
    event.create("kubejs_test_unit")
        .createSimpleUnitShield()

    //Create a simple shield group, where the unit shields of the shield group permanently exist
    event.create("kubejs_test_group")
        .createSimpleGroupShield()

    //Create a shield that lasts for 5 seconds and belongs to the shield group
    event.create("kubejs_test_time")
        .createTimeLimitedShield(20 * 5)

    //Create a shield that continuously decays within 5 seconds and belongs to the shield group
    event.create("kubejs_test_decay")
        .createDecayShield(20 * 5)


    //Next is the advanced section
    event.create("kubejs_custom_1")
        //Add shield provider
        .shieldFactory(
            //Use the unit shield constructor to provide kjs objects for the builder, making it easier to manage
            () => UnitShieldBuilder.of((initAmount) => new TestShield(initAmount))
                //tick
                .tick((kubeUnitShield, living) => {
                    kubeUnitShield.getKubeObject().tick(kubeUnitShield, living)
                })
                //save
                .save((kubeUnitShield, living) => {
                    kubeUnitShield.getKubeObject().save(kubeUnitShield, living)
                })
                //load
                .load((kubeUnitShield, living) => {
                    kubeUnitShield.getKubeObject().load(kubeUnitShield, living)
                })
                //Since it is a unit shield, a unit shield constructor should not be provided, but rather a unit shield should be provided directly. Therefore,. create (0)
                .build().create(0)
        )

    event.create("kubejs_cunstom_2")
        .shieldFactory(
            //Use shield group
            () => new GroupShield(
                   //Use the unit shield constructor to provide kjs objects for the builder, making it easier to manage
                UnitShieldBuilder.of((initAmount) => new TestShield(initAmount))
                    .tick((kubeUnitShield, living) => {
                        kubeUnitShield.getKubeObject().tick(kubeUnitShield, living)
                    })
                    .save((kubeUnitShield, living) => {
                        kubeUnitShield.getKubeObject().save(kubeUnitShield, living)
                    })
                    .load((kubeUnitShield, living) => {
                        kubeUnitShield.getKubeObject().load(kubeUnitShield, living)
                    })
                    //Since it is a shield group, there is no initial shield, so a unit shield constructor is provided here without the need for. create (0)
                    .build()
            )
        )
})


function TestShield(initAmount) {
    this.initAmount = initAmount
}

/**
 * @param {$KubeUnitShield_<TestShield} kubeUnitShield
 * @param {$LivingEntity_} living
 */
TestShield.prototype.tick = function (kubeUnitShield, living) {
    kubeUnitShield.reduceShieldAmount(this.initAmount / 100)

}

/**
 * @param {$KubeUnitShield_<TestShield} kubeUnitShield
 * @param {$LivingEntity_} living
 */
TestShield.prototype.save = function (kubeUnitShield, living) {

}

/**
 * @param {$KubeUnitShield_<TestShield} kubeUnitShield
 * @param {$LivingEntity_} living
 */
TestShield.prototype.load = function (kubeUnitShield, living) {

}
/**
 * @param {$LivingEntity_} living
 */


TestShield.prototype.sendMessage = function (living) {
    living.sendSystemMessage(this.initAmount)
}

ShieldSystemEvents.RegisterShieldPriority(event => {
    //Register shield priority, shields without registered priority will not take effect
    event.addShieldType("kubejs:kubejs_test_group")
    event.addShieldType("kubejs:kubejs_test_time")
    event.addShieldType("kubejs:kubejs_test_decay")
})

for API use

EntityEvents.afterHurt(event => {
//There are two situations to add shield values to a shield:
//If the target shield is a shield group, a unit shield will be created based on the provided shield value, and then the unit shield will be added to the shield group
//If the target shield is a unit shield, the shield value will be directly increased on the basis of the original shield value     ShieldAPI.addShieldAmount(event.entity, "kubejs:kubejs_test_decay", 80) //reduce shield ShieldAPI.reduceShieldAmount(event.entity, "kubejs:kubejs_test_decay", 40) //get shield instance var shieldInstance = ShieldAPI.getShieldInstance(event.entity, "kubejs:kubejs_test_decay") })
shield_system-2101.1.3.jar
MC Client, NeoForge, 1.21.1, Server
Beta 2025-06-19 Get

More from chen_1335

Forbidden Arcanus JS
97,097
Immersive Engineering JS
94,624
EnumExtenderJS
85
Ultimate Enchantment
62,320
Spell Colonies
46,163
Legendary Relics
3,789

You Might Also Like

Vivecraft
A Minecraft VR mod on a loader of your choice!
9,988,339
Athena
A crossplatform (Forge/Fabric) solution to connected block textures for 1.19.4+
99,799,527
Lodestone
A collection of code used throughout projects under the Lodestar team.
9,914,417
TheDragonLib
A library for most of sokratis12GR's Mods
9,910,232
Multi Mob Library
A library mod containing essential files for Daveyx0's mob mods
9,892,767
FTB Library (Forge) (Legacy)
FTB Library is a library mod that is used for some of our mods.
98,265,314