Jump to content

[1.11.2] Creating tools that level up?


TheCaelondian

Recommended Posts

Hi! I'm working on a mod that adds "sentient items" into Minecraft - think something along the lines of the Transistor from the game of the same name, or the Corrupted Ashbringer from WoW. The concept of sentient items is that they get stronger the more they get used; they get XP from using them - whether it's killing things for swords and bows, breaking blocks for pickaxes and shovels, either of those for axes, or taking damage for armor. They can't be crafted (with one exception), but can only be found from killing boss mobs or looting dungeon chests. Any vanilla tool or armor (save for hoes) that can be found as dungeon loot would have a small, 1% chance to generate as Sentient; in addition, the mod adds several new types of weapons and tools, a few of which will only be generated as Sentient, the rest of which can be crafted. I'm also adding four enchantments to the game.

 

I'm not sure how to go about the XP system, though. I do have the mechanics worked out in "layman's terms", but what I need help with is figuring out how to make an item generate as Sentient, as opposed to marking all items of the appropriate class Sentient, and making that item level up on tool use or armor taking damage. Essentially, I want it to work like this:

 

  • Sentient items start at Level 1, and max out at level 20. They generate with a randomly selected name, personality, and extra modifier, as well as starting with enchantments - all Sentients generate with Unbreaking I, as well as Sharpness, Efficiency or Protection depending on the type of item. In order to level up, an item must be used a number of times equal to its current level times 100. This means killing 100 mobs with a weapon, breaking 100 ore blocks with a pickaxe (I may configure certain blocks to reward different amounts of XP), or taking 100 points of damage with an armor piece.
  • When a Sentient levels up, one random enchantment currently on the item is raised in level by one. No enchantment can be raised above level 10.  If a Sentient maxes its enchantments before reaching Level 20 (only possible if it did not generate a new enchantment from its modifier), it gains a new enchantment at level 1; these can include treasure enchants, and the new enchant will, if applicable, level up as normal until the level cap is reached.
  • Each of the game's bosses drops a different, unique Sentient - the Elder Guardians, as there are three, drop separate parts of their item, that can be crafted together to create the final product.
  • Four enchantments: Wither, Poison, True Damage, and Health Boost. Wither adds two seconds of Wither II on hit per level, normally capping at 2. Poison inflicts Poison I for three seconds per level, capping at 3 for non-Sentients. True Damage adds one point of armor-piercing damage per level, capping at 3 - this cap cannot be exceeded even by Sentients. Finally, Health Boost adds half a heart to your max health per level, capping at 5.
  • As a secondary goal, I am in the process of writing some dialogue for a set of "personalities" that will be picked from when a Sentient is generated. This dialogue would be used by the Sentient, triggered by using it, storing or withdrawing it, or equipping it. Ideally, it would be shown only to the owner of the sentient, akin to using the /whisper command.

 

I figure the random generation of the Sentient's name, personality and modifier (the last being an extra enchant) could be accomplished using random selection from arrays, but I don't know how to apply a tag to an item to identify it as a Sentient and generate its data,  nor do I know how to structure its experience code. I can picture how the latter would work, incrementing it by one using "xp++" when LivingDeathEvent is triggered, but I don't know how to hook that into each individual item, or whether enchantment data can be incremented in the same way. I realize that this is not a school, and I am learning Java, but I've only started work on the mod two days ago, and I'm still learning the depth and breadth of this whole scene. I would greatly appreciate any help you can give, and I can link my currently completed classes for reference if necessary.

 

Thank you for your help!

Link to comment
Share on other sites

You need to use Forge's Capabilities system to attach extra data to the Item/ItemStack.

 

For generating random items, take a look at Loot Tables - they are super flexible and can do everything you will need them to do for your system, though they are somewhat complicated to work with.

Edited by coolAlias
Link to comment
Share on other sites

First and foremost:
Making vanilla tools/items (also) use this logic, whilst not impossible, is much harder compared to using (only )your own items.

 

I would recommend that you make use of Capabilities for this, like coolAlias suggests as well.
In this capability, you would store XP, name and level.

 

You'd be better off incrementing the XP when the tool lose durability (for vanilla/others items, you'd need a tick-counter and manually check every so often, and add XP as needed), instead of going after the LivingDeathEvent (as that fires when an EntityLiving dies (or equivalent of))

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Link to comment
Share on other sites

Thank you for the advice. Regarding vanilla items, would it be easier to create "pseudo-vanilla" items that would behave like the vanilla ones, but are added by my mod? For example, if I create an "ItemNewDiamondSword" class and set it up, would that be easier to access and use than the original?

Edited by TheCaelondian
Link to comment
Share on other sites

Sentience itself could be a new enchantment that works much like Mending -- not available on the table, perhaps not even available in found magic books, siphons XP orbs when in player's active hand (or otherwise intervenes when used). Being an enchantment might make it easier to act upon vanilla items / itemStacks

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.