@@ -22,8 +22,8 @@ private boolean checkMimicEnabled() {
22
22
}
23
23
24
24
// 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 !" );
27
27
return false ;
28
28
}
29
29
@@ -47,23 +47,20 @@ public void onEnable() {
47
47
Mimic uses ` ServicesManager ` to hold API implementations and each API implements interface [ MimicService] .
48
48
You can load needed APIs in ` onEnable ` of your plugin:
49
49
``` 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();
56
55
```
57
56
58
57
Now you can use APIs:
59
58
``` 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
61
60
// and should not live a long time.
62
- BukkitLevelSystem levelSystem = levelSystemProvider. get(player);
63
61
int playerLevel = levelSystem. getLevel();
64
62
levelSystem. giveExp(42 );
65
63
66
- BukkitClassSystem classSystem = classSystemProvider. get(player);
67
64
String playerPrimaryClass = classSystem. getPrimaryClass();
68
65
boolean isMage = classSystem. hasOneOfClasses(Arrays . asList(" Mage" , " Druid" , " Necromancer" ));
69
66
@@ -89,21 +86,18 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
89
86
90
87
public class MyPlugin extends JavaPlugin {
91
88
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;
96
90
97
91
public static BukkitLevelSystem getLevelSystem(Player player) {
98
- return levelSystemProvider.get (player);
92
+ return mimic.getLevelSystem (player);
99
93
}
100
94
101
95
public static BukkitClassSystem getClassSystem(Player player) {
102
- return classSystemProvider.get (player);
96
+ return mimic.getClassSystem (player);
103
97
}
104
98
105
99
public static BukkitItemsRegistry getItemsRegistry() {
106
- return itemsRegistry ;
100
+ return mimic.getItemsRegistry() ;
107
101
}
108
102
109
103
@Override
@@ -114,7 +108,7 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
114
108
return;
115
109
}
116
110
117
- setupMimic ();
111
+ mimic = Mimic.getInstance ();
118
112
}
119
113
120
114
private boolean checkMimicEnabled() {
@@ -132,27 +126,19 @@ boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand"
132
126
return true;
133
127
}
134
128
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
-
144
129
// Method to demonstrate usage
145
130
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);
148
133
int playerLevel = levelSystem.getLevel();
149
134
levelSystem.giveExp(42);
150
135
151
- BukkitClassSystem classSystem = classSystemProvider.get (player);
136
+ BukkitClassSystem classSystem = getClassSystem (player);
152
137
String playerPrimaryClass = classSystem.getPrimaryClass();
153
138
boolean isMage = classSystem.hasAnyOfClasses(Arrays.asList("Mage", "Druid", "Necromancer"));
154
139
155
140
// ItemsRegistry is not related to player so it can be used without provider
141
+ BukkitItemsRegistry itemsRegistry = getItemsRegistry();
156
142
ItemStack stick = itemsRegistry.getItem("minecraft:stick");
157
143
boolean isStickMagical = itemsRegistry.isSameItem(stick, "customitems:magic_wand");
158
144
boolean isMagicStickExists = itemsRegistry.isItemExists("customitems:magic_wand");
@@ -190,35 +176,21 @@ public class MyClassSystem extends BukkitClassSystem {
190
176
public List<String > getClasses () {
191
177
return playersClassesMap. get(getPlayer(). getUniqueId());
192
178
}
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
- }
208
179
}
209
180
```
210
181
211
182
When you've implemented API, register it in method ** ` onLoad ` ** of your plugin:
183
+
212
184
``` java
213
185
@Override
214
186
public void onLoad() {
215
- ServicesManager sm = getServer() . getServicesManager ();
187
+ Mimic mimic = Mimic . getInstance ();
216
188
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);
220
191
}
221
192
```
193
+
222
194
> Don ' t use **`onEnable`** to register services.
223
195
> Plugins should be able to get services in **`onEnable`** and all services should be already registered.
224
196
0 commit comments