Investiture Stuff
Plans for Investiture Implementation
Just laying out my ideas for the new Investiture System Feel free to comment suggestions Comment if you want to tackle one of these areas
Plans and Phases
Phase 1 -- Development
- New classes are added and changes are made to existing ones to make the system exist.
- In this phase, the system is mostly independent from the game. It exists, but very little should be trying to access it.
Phase 2 -- Implementation
- Manifestation classes are modified to ask for Investiture, as a median, instead of other methods.
- Manifestation classes are modified to use the Investiture they're given to determine the strength of the effect, instead of the player's strength, or use rate.
- Methods to give investiture to players is determined by the strength of the effect.
- Order for investiture access calling is to be determined.
Phase 3 -- Balancing
- The power and investiture values are tweaked to bring them back to what they should be.
###Phase 4 -- Other methods
- Other stuff besides manifestations start implementing investiture, including vanilla potions and enchantments.
- System fully integrates with the mod and the game, and future developments can made completely with this system with relative ease.
Proposed Changes
New IInvestiture Interface:
- [x] superclass for Investiture class and SpiritwebInvestiture class
New Investiture class:
- [x] ArrayList object with the Manifestations this object can power
- [x] int value for amount of investiture
- [x] int value for priority
- (direct sources intended for the art with higher priority, pure sources less so)
- this could be calculated based on the size of the Manifestations ArrayList
Class may have Inheritors, such as for Stormlight, bio-chromatic breaths, or feruchemic charge.
New SpiritwebInvestiture class:
- [ ] Manifestation object that this object grants the Living Entity
- [x] int value for strength the Living Enitity has in the Manifestation
New IInvCreator class:
- [x] Interface for all classes that create new Investiture objects.
New InvHelpers class:
Shards enum:
- [x] Enum containing 21 values for Shards, combination Shards, Aethers, etc.
- [x] All investiture objects are assigned one.
- [x] Mostly here for future-proofing and occasionally finding investiture sources.
Source enum:
- [x] Enum contains several possible ways the Investiture was obtained.
- [x] All investiture objects contain one
- [x] Mostly for determining if Investiture objects can be merged and future proofing.
Math class:
- [x] Static class for math stuff.
- [x] Exists for mass editing.
Constants class:
- [x] Constants
- [x] See Math class
Transfer class:
- [x] Used to help move investiture between containers.
New InvestitureContainer class:
This class is used to bridge the Cosmere Investiture system with entities and item stacks. It is stored as nbt data that attaches itself to the nbt data of its respective entity or item stack.
-
[x] Investiture is handled by this class.
-
[x] ArrayList of Investiture objects
-
[x] ArrayList of SpiritwebInvestiture objects.
-
[x] New runInvestiturePull() method that takes in a Manifestation and returns an int with the amount of investiture that the manifestation will consume.
- If the sum of all Investitures that the given manifestation can use is less than the min value, they will not be subtracted and the method will return 0.
- If the sum is between the min and max values, it will return the sum and subtract that amount of investiture from the ArrayList, starting at the highest priority
- If the sum is above the max, it returns the max and subtracts the max from the ArrayList.
- If an Investiture object has 0 BEUs, the object will be deleted.
Spiritweb Changes:
- [x] Link to InvestitureContainer
Manifestation class and inheriters:
- [x] New maxInvestiture() and minInvestiture() methods - returns the maximum and minimum investiture values the Manifestation can use
- [ ] each undefined number of ticks, the Manifestation will request investiture from the player's spiritweb or other source
Invested Blocks, Items, and non-living entities.
- [ ] Each invested object stores NBT data that can be converted into an InvestitureContainer object.
Feruchemic Nicrosil:
-
[ ] Each Feruchemic Nicrosilmind will store a second IInvestiture object in addition to the Nicrosil Investiture stored in the object.
- This object is the value stored, including the power and the amount.
- Storing will prioritize lower priority investitures
- Feruchemic Nicrosil can store either an amount of useable investiture of a specific type OR a strength and amount of
-
[ ] SpiritwebInvestiture to grant the user the power.
-
[ ] Compounding will multiply the stored amount by a value related to a user's strength in Nicrosil.