Skip to content

Commit 9e018dd

Browse files
committed
wrap the plugin-specific code to a dedicated item class
1 parent 90b5c83 commit 9e018dd

File tree

38 files changed

+1135
-480
lines changed

38 files changed

+1135
-480
lines changed

all/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@
1818
<artifactId>uni-item-api</artifactId>
1919
<version>${project.version}</version>
2020
</dependency>
21-
<dependency>
22-
<groupId>io.github.projectunified</groupId>
23-
<artifactId>uni-item-multi</artifactId>
24-
<version>${project.version}</version>
25-
</dependency>
2621
<dependency>
2722
<groupId>io.github.projectunified</groupId>
2823
<artifactId>uni-item-itembridge</artifactId>
Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.github.projectunified.uniitem.all;
22

3+
import io.github.projectunified.uniitem.api.Item;
4+
import io.github.projectunified.uniitem.api.ItemKey;
5+
import io.github.projectunified.uniitem.api.ItemProvider;
36
import io.github.projectunified.uniitem.craftengine.CraftEngineItemProvider;
47
import io.github.projectunified.uniitem.customfishing.CustomFishingProvider;
58
import io.github.projectunified.uniitem.eco.EcoItemProvider;
@@ -9,62 +12,98 @@
912
import io.github.projectunified.uniitem.itemedit.ItemEditProvider;
1013
import io.github.projectunified.uniitem.itemsadder.ItemsAdderProvider;
1114
import io.github.projectunified.uniitem.mmoitems.MMOItemsProvider;
12-
import io.github.projectunified.uniitem.multi.MultiItemProvider;
1315
import io.github.projectunified.uniitem.mythicmobs.MythicItemProvider;
1416
import io.github.projectunified.uniitem.nexo.NexoProvider;
1517
import io.github.projectunified.uniitem.nova.NovaItemProvider;
1618
import io.github.projectunified.uniitem.oraxen.OraxenProvider;
1719
import io.github.projectunified.uniitem.slimefun.SlimefunProvider;
20+
import org.bukkit.inventory.ItemStack;
21+
import org.jetbrains.annotations.NotNull;
22+
23+
import java.util.ArrayList;
24+
import java.util.Collection;
25+
import java.util.List;
26+
import java.util.concurrent.atomic.AtomicReference;
27+
import java.util.stream.Collectors;
28+
29+
public class AllItemProvider implements ItemProvider {
30+
private final AtomicReference<List<ItemProvider>> providers = new AtomicReference<>();
31+
32+
private List<ItemProvider> constructProviders() {
33+
List<ItemProvider> providers = new ArrayList<>();
1834

19-
public class AllItemProvider extends MultiItemProvider {
20-
public AllItemProvider() {
2135
// Dependent
2236
if (ItemEditProvider.isAvailable()) {
23-
addProvider(new ItemEditProvider());
37+
providers.add(new ItemEditProvider());
2438
}
2539
if (CraftEngineItemProvider.isAvailable()) {
26-
addProvider(new CraftEngineItemProvider());
40+
providers.add(new CraftEngineItemProvider());
2741
}
2842
if (CustomFishingProvider.isAvailable()) {
29-
addProvider(new CustomFishingProvider());
43+
providers.add(new CustomFishingProvider());
3044
}
3145
if (EcoItemProvider.isAvailable()) {
32-
EcoItemProvider provider = new EcoItemProvider();
33-
addProvider(provider, provider.type());
46+
providers.add(new EcoItemProvider());
3447
}
3548
if (ExecutableItemsProvider.isAvailable()) {
36-
addProvider(new ExecutableItemsProvider());
49+
providers.add(new ExecutableItemsProvider());
3750
}
3851
if (MMOItemsProvider.isAvailable()) {
39-
addProvider(new MMOItemsProvider());
52+
providers.add(new MMOItemsProvider());
4053
}
4154
if (MythicItemProvider.isAvailable()) {
42-
addProvider(new MythicItemProvider(), "mm");
55+
providers.add(new MythicItemProvider());
4356
}
4457

4558
// Base
4659
if (ItemsAdderProvider.isAvailable()) {
47-
addProvider(new ItemsAdderProvider(), "ia");
60+
providers.add(new ItemsAdderProvider());
4861
}
4962
if (OraxenProvider.isAvailable()) {
50-
addProvider(new OraxenProvider(), "orx");
63+
providers.add(new OraxenProvider());
5164
}
5265
if (NexoProvider.isAvailable()) {
53-
addProvider(new NexoProvider());
66+
providers.add(new NexoProvider());
5467
}
5568
if (HeadDatabaseProvider.isAvailable()) {
56-
addProvider(new HeadDatabaseProvider(), "hdb", "headdb");
69+
providers.add(new HeadDatabaseProvider());
5770
}
5871
if (NovaItemProvider.isAvailable()) {
59-
addProvider(new NovaItemProvider());
72+
providers.add(new NovaItemProvider());
6073
}
6174
if (SlimefunProvider.isAvailable()) {
62-
addProvider(new SlimefunProvider(), "sf");
75+
providers.add(new SlimefunProvider());
6376
}
6477

6578
// Bridge
6679
if (ItemBridgeProvider.isAvailable()) {
67-
addProvider(new ItemBridgeProvider(), "item-bridge");
80+
providers.add(new ItemBridgeProvider());
81+
}
82+
83+
return providers;
84+
}
85+
86+
private List<ItemProvider> getProviders() {
87+
List<ItemProvider> providerList = providers.get();
88+
if (providerList == null) {
89+
providerList = constructProviders();
90+
providers.set(providerList);
6891
}
92+
return providerList;
93+
}
94+
95+
@Override
96+
public List<String> availableTypes() {
97+
return getProviders().parallelStream().map(ItemProvider::availableTypes).flatMap(Collection::stream).collect(Collectors.toList());
98+
}
99+
100+
@Override
101+
public @NotNull Item wrap(@NotNull ItemStack item) {
102+
return getProviders().stream().map(provider -> provider.wrap(item)).filter(Item::isValid).findFirst().orElse(Item.INVALID);
103+
}
104+
105+
@Override
106+
public @NotNull Item wrap(@NotNull ItemKey key) {
107+
return getProviders().stream().map(provider -> provider.wrap(key)).filter(Item::isValid).findFirst().orElse(Item.INVALID);
69108
}
70109
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.github.projectunified.uniitem.api;
2+
3+
import org.bukkit.entity.Player;
4+
import org.bukkit.inventory.ItemStack;
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
public interface Item {
9+
Item INVALID = new Item() {
10+
@Override
11+
public boolean isValid() {
12+
return false;
13+
}
14+
15+
@Override
16+
public @Nullable ItemKey key() {
17+
return null;
18+
}
19+
20+
@Override
21+
public @Nullable ItemStack bukkitItem() {
22+
return null;
23+
}
24+
25+
@Override
26+
public @Nullable ItemStack bukkitItem(@NotNull Player player) {
27+
return null;
28+
}
29+
30+
@Override
31+
public boolean isSimilar(@NotNull ItemStack item) {
32+
return false;
33+
}
34+
};
35+
36+
boolean isValid();
37+
38+
@Nullable ItemKey key();
39+
40+
@Nullable ItemStack bukkitItem();
41+
42+
@Nullable ItemStack bukkitItem(@NotNull Player player);
43+
44+
default @Nullable ItemStack tryBukkitItem(@Nullable Player player) {
45+
return player == null ? bukkitItem() : bukkitItem(player);
46+
}
47+
48+
boolean isSimilar(@NotNull ItemStack item);
49+
}

api/src/main/java/io/github/projectunified/uniitem/api/ItemKey.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.projectunified.uniitem.api;
22

3+
import java.util.Collection;
34
import java.util.Locale;
45
import java.util.Objects;
56

@@ -38,6 +39,17 @@ public String type() {
3839
return type;
3940
}
4041

42+
public boolean isType(String type) {
43+
return this.type.equalsIgnoreCase(type);
44+
}
45+
46+
public boolean isType(Collection<String> types) {
47+
for (String type : types) {
48+
if (isType(type)) return true;
49+
}
50+
return false;
51+
}
52+
4153
public String id() {
4254
return id;
4355
}

api/src/main/java/io/github/projectunified/uniitem/api/ItemProvider.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,36 @@
55
import org.jetbrains.annotations.NotNull;
66
import org.jetbrains.annotations.Nullable;
77

8-
import java.util.Objects;
8+
import java.util.List;
99

1010
public interface ItemProvider {
11-
boolean isValidKey(@NotNull ItemKey key);
11+
List<String> availableTypes();
1212

13-
@Nullable ItemKey key(@NotNull ItemStack item);
13+
@NotNull Item wrap(@NotNull ItemStack item);
1414

15-
@Nullable ItemStack item(@NotNull ItemKey key);
15+
@NotNull Item wrap(@NotNull ItemKey key);
16+
17+
default boolean isValidKey(@NotNull ItemKey key) {
18+
return wrap(key).isValid();
19+
}
20+
21+
default @Nullable ItemKey key(@NotNull ItemStack item) {
22+
return wrap(item).key();
23+
}
24+
25+
default @Nullable ItemStack item(@NotNull ItemKey key) {
26+
return wrap(key).bukkitItem();
27+
}
1628

1729
default @Nullable ItemStack item(@NotNull ItemKey key, @NotNull Player player) {
18-
return item(key);
30+
return wrap(key).bukkitItem(player);
1931
}
2032

2133
default @Nullable ItemStack tryItem(@NotNull ItemKey key, @Nullable Player player) {
22-
return player == null ? item(key) : item(key, player);
34+
return wrap(key).tryBukkitItem(player);
2335
}
2436

2537
default boolean isSimilar(@NotNull ItemStack item, @NotNull ItemKey key) {
26-
if (!isValidKey(key)) return false;
27-
28-
ItemKey itemKey = key(item);
29-
if (itemKey == null) return false;
30-
31-
return Objects.equals(itemKey, key);
38+
return wrap(key).isSimilar(item);
3239
}
3340
}

api/src/main/java/io/github/projectunified/uniitem/api/SimpleItemProvider.java

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package io.github.projectunified.uniitem.craftengine;
2+
3+
import io.github.projectunified.uniitem.api.Item;
4+
import io.github.projectunified.uniitem.api.ItemKey;
5+
import net.momirealms.craftengine.bukkit.api.CraftEngineItems;
6+
import net.momirealms.craftengine.core.item.CustomItem;
7+
import net.momirealms.craftengine.core.item.ItemBuildContext;
8+
import net.momirealms.craftengine.core.util.Key;
9+
import org.bukkit.entity.Player;
10+
import org.bukkit.inventory.ItemStack;
11+
import org.jetbrains.annotations.NotNull;
12+
import org.jetbrains.annotations.Nullable;
13+
14+
import java.util.Objects;
15+
16+
class CraftEngineItem implements Item {
17+
private final @Nullable CustomItem<ItemStack> customItem;
18+
19+
CraftEngineItem(String id) {
20+
Key key = Key.of(id);
21+
this.customItem = CraftEngineItems.byId(key);
22+
}
23+
24+
CraftEngineItem(ItemStack itemStack) {
25+
Key key = CraftEngineItems.getCustomItemId(itemStack);
26+
this.customItem = key == null ? null : CraftEngineItems.byId(key);
27+
}
28+
29+
@Override
30+
public boolean isValid() {
31+
return customItem != null;
32+
}
33+
34+
@Override
35+
public @Nullable ItemKey key() {
36+
if (customItem == null) return null;
37+
return new ItemKey(CraftEngineItemProvider.TYPE, customItem.id().asString());
38+
}
39+
40+
@Override
41+
public @Nullable ItemStack bukkitItem() {
42+
if (customItem == null) return null;
43+
return customItem.buildItemStack();
44+
}
45+
46+
@Override
47+
public @Nullable ItemStack bukkitItem(@NotNull Player player) {
48+
if (customItem == null) return null;
49+
net.momirealms.craftengine.core.entity.player.Player customPlayer = net.momirealms.craftengine.bukkit.api.BukkitAdaptors.adapt(player);
50+
ItemBuildContext context = ItemBuildContext.of(customPlayer);
51+
return customItem.buildItemStack(context);
52+
}
53+
54+
@Override
55+
public boolean isSimilar(@NotNull ItemStack item) {
56+
if (customItem == null) return false;
57+
Key key = CraftEngineItems.getCustomItemId(item);
58+
return Objects.equals(key, customItem.id());
59+
}
60+
}

0 commit comments

Comments
 (0)