Skip to content

Commit e47f597

Browse files
committed
docs: Update API docs
1 parent 96ab058 commit e47f597

File tree

1 file changed

+22
-50
lines changed

1 file changed

+22
-50
lines changed

mimic-bukkit-api/README.md

Lines changed: 22 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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() {
4747
Mimic uses `ServicesManager` to hold API implementations and each API implements interface [MimicService].
4848
You 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

5857
Now 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);
6361
int playerLevel = levelSystem.getLevel();
6462
levelSystem.giveExp(42);
6563

66-
BukkitClassSystem classSystem = classSystemProvider.get(player);
6764
String playerPrimaryClass = classSystem.getPrimaryClass();
6865
boolean 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

211182
When you've implemented API, register it in method **`onLoad`** of your plugin:
183+
212184
```java
213185
@Override
214186
public 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

Comments
 (0)