Advanced Item Instance management trouble
<p>I've been developing a massive Role Playing Game. The problem is that I'm having trouble engineering how will I manage the Item and Inventory system. Currently I have something similar to this:</p>

<ul>
<li>public abstract class Item has 5 Nested classes which all are abstract and static that represent the types of Items. Every Nested class has an unique use(), delete() (Which finalizes the class instance) and sell()(triggers delete) void. They also have optional getter and setter methods, like the setAll() method which fills all necesary fields.</li>
<li>Default: Has base price, tradeability boolean, String name, etc... Very flexible</li>
<li>Weapon: Else than the things that the Default type has, it has integers for stat bonus on being equipped(used in the equip() and unequip() voids). Interacts with public class Hero.</li>
<li>Equipment: Similar to Weapon, just that it has an Enum field called 'EquipSlot' that determines where it is equipped.</li>
<li>Consumable: Similar to default, just that has a consume() void that enables the player to apply certain effects to an Hero when using it. Consuming usually means triggering the delete() void.</li>
<li>Special: Usually quest related items where the 'Tradeable' boolean is <em>static, final and always false</em>.</li>
</ul>

<p>Now, the way that I make customized items is this.</p>

<ul>
<li>First, I make a new class (Not abstract)</li>
<li>Then, I make it extend Item.ItemType</li>
<li>Then, I make a constructor which has the setAll(info) void inside.</li>
<li>Then, I can use this class in other classes.</li>
</ul>

<p>It all looks like this:</p>

<pre><code>package com.ep1ccraft.Classes.Items.Defaults;

import com.ep1ccraft.apis.Item.*;

public class ItemExample extends Item.Default {
    public ItemExample() { // Constructor
        this.setAll(lots of arguments here);
    }
}
</code></pre>

<p>then I can do:</p>

<pre><code>ItemExample something = new ItemExample();
</code></pre>

<p>And I have a perfect ItemExample with all the properties that I want, So, I can make various instances of it, and use amazing methods like 'getName()' and that kind of stuff.</p>

<p>The problems come to Naming the instances, as I do not know how to make an automated form that will give the instance a Different name from the other instance so they don't collide. Also, I want to implement an inventory system that uses slots as containers and can keep stacks (Stackable items only), also the main feature of it is that you can drag and drop them into other slots (For example, to reorganize or to move to another inventory instance like a bank, or to place in an hero's weapon or equipment slots, if it is allowed) and that you can click on them to display a screen that shows the name, description and possible actions of the Item (Which trigger the previously mentioned delete() and use() voids).</p>

<p>Thank you for reading all that! I know that maybe I'm asking for too much, but I'll appreciate any answers anyway!</p>
