@@ -22,8 +22,8 @@ private boolean checkMimicEnabled() {
2222 }
2323
2424 // You can also check if Mimic version is right
25- if (! MimicApiLevel . checkApiLevel(MimicApiLevel . VERSION_0_6 )) {
26- getLogger(). severe(" Required at least Mimic 0.6 !" );
25+ if (! MimicApiLevel . checkApiLevel(MimicApiLevel . VERSION_0_7 )) {
26+ getLogger(). severe(" Required at least Mimic 0.7 !" );
2727 return false ;
2828 }
2929
@@ -47,23 +47,20 @@ public void onEnable() {
4747Mimic uses ` ServicesManager ` to hold API implementations and each API implements interface [ MimicService] .
4848You can load needed APIs in ` onEnable ` of your plugin:
4949``` java
50- ServicesManager sm = getServer(). getServicesManager();
51- // Services will never be null because there always exists default
52- // implementation for each service
53- levelSystemProvider = sm. load(BukkitLevelSystem . Provider . class);
54- classSystemProvider = sm. load(BukkitClassSystem . Provider . class);
55- itemsRegistry = sm. load(BukkitItemsRegistry . class);
50+ Mimic mimic = Mimic . getInstance();
51+
52+ BukkitLevelSystem levelSystem = mimic. getLevelSystem(player);
53+ BukkitClassSystem classSystem = mimic. getClassSystem(player);
54+ BukkitItemsRegistry itemsRegistry = mimic. getItemsRegistry();
5655```
5756
5857Now you can use APIs:
5958``` java
60- // System got from the provider holds a weak reference to a player object
59+ // LevelSystem and ClassSystem holds a weak reference to a player object
6160// and should not live a long time.
62- BukkitLevelSystem levelSystem = levelSystemProvider. get(player);
6361int playerLevel = levelSystem. getLevel();
6462levelSystem. giveExp(42 );
6563
66- BukkitClassSystem classSystem = classSystemProvider. get(player);
6764String playerPrimaryClass = classSystem. getPrimaryClass();
6865boolean isMage = classSystem. hasOneOfClasses(Arrays . asList(" Mage" , " Druid" , " Necromancer" ));
6966
@@ -89,21 +86,18 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
8986
9087 public class MyPlugin extends JavaPlugin {
9188
92- // Declare field for needed APIs
93- private static BukkitLevelSystem.Provider levelSystemProvider = null;
94- private static BukkitClassSystem.Provider classSystemProvider = null;
95- private static BukkitItemsRegistry itemsRegistry = null;
89+ private static Mimic mimic = null;
9690
9791 public static BukkitLevelSystem getLevelSystem(Player player) {
98- return levelSystemProvider.get (player);
92+ return mimic.getLevelSystem (player);
9993 }
10094
10195 public static BukkitClassSystem getClassSystem(Player player) {
102- return classSystemProvider.get (player);
96+ return mimic.getClassSystem (player);
10397 }
10498
10599 public static BukkitItemsRegistry getItemsRegistry() {
106- return itemsRegistry ;
100+ return mimic.getItemsRegistry() ;
107101 }
108102
109103 @Override
@@ -114,7 +108,7 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
114108 return;
115109 }
116110
117- setupMimic ();
111+ mimic = Mimic.getInstance ();
118112 }
119113
120114 private boolean checkMimicEnabled() {
@@ -132,27 +126,19 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
132126 return true;
133127 }
134128
135- private void setupMimic() {
136- ServicesManager sm = getServer().getServicesManager();
137- // Services will never be null because there always exists default
138- // implementation for each service
139- levelSystemProvider = sm.load(BukkitLevelSystem.Provider.class);
140- classSystemProvider = sm.load(BukkitClassSystem.Provider.class);
141- itemsRegistry = sm.load(BukkitItemsRegistry.class);
142- }
143-
144129 // Method to demonstrate usage
145130 private void useApis(Player player) {
146- // System got from provider holds weak reference to player object and should not live a long time.
147- BukkitLevelSystem levelSystem = levelSystemProvider.get (player);
131+ // LevelSystem and ClassSystem holds holds weak reference to player object and should not live a long time.
132+ BukkitLevelSystem levelSystem = getLevelSystem (player);
148133 int playerLevel = levelSystem.getLevel();
149134 levelSystem.giveExp(42);
150135
151- BukkitClassSystem classSystem = classSystemProvider.get (player);
136+ BukkitClassSystem classSystem = getClassSystem (player);
152137 String playerPrimaryClass = classSystem.getPrimaryClass();
153138 boolean isMage = classSystem.hasAnyOfClasses(Arrays.asList("Mage", "Druid", "Necromancer"));
154139
155140 // ItemsRegistry is not related to player so it can be used without provider
141+ BukkitItemsRegistry itemsRegistry = getItemsRegistry();
156142 ItemStack stick = itemsRegistry.getItem("minecraft:stick");
157143 boolean isStickMagical = itemsRegistry.isSameItem(stick, "customitems:magic_wand");
158144 boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand");
@@ -190,35 +176,21 @@ public class MyClassSystem extends BukkitClassSystem {
190176 public List<String > getClasses () {
191177 return playersClassesMap. get(getPlayer(). getUniqueId());
192178 }
193-
194- // Level and Class systems are bounded to players so you need to create provider.
195- // It will provide instance of your implementation initialized with player when need.
196- static class Provider extends BukkitClassSystem .Provider {
197-
198- public Provider () {
199- super (ID ); // Specify your implementation ID here
200- }
201-
202- @NotNull
203- @Override
204- public BukkitClassSystem getSystem (@NotNull Player player ) {
205- return new MyClassSystem (player);
206- }
207- }
208179}
209180```
210181
211182When you've implemented API, register it in method ** ` onLoad ` ** of your plugin:
183+
212184``` java
213185@Override
214186public void onLoad() {
215- ServicesManager sm = getServer() . getServicesManager ();
187+ Mimic mimic = Mimic . getInstance ();
216188
217- // Register you Provider in service manager with priority you want.
218- // Services with higher priority will be used first.
219- sm. register(BukkitClassSystem . Provider . class, new MyClassSystem .Provider (), this , ServicePriority . High );
189+ // Register your implementations and specify minimal required Mimic version for it.
190+ mimic. registerClassSystem(MyClassSystem :: new , MimicApiLevel.CURRENT, this);
220191}
221192```
193+
222194> Don ' t use **`onEnable`** to register services.
223195> Plugins should be able to get services in **`onEnable`** and all services should be already registered.
224196
0 commit comments