Skip to content

Commit cb9537a

Browse files
author
Lee Zheng Han
committed
Add ItemsAdder compatibility, add display names to color bundles
1 parent 73f81b4 commit cb9537a

File tree

4 files changed

+108
-92
lines changed

4 files changed

+108
-92
lines changed

pom.xml

+10-73
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,18 @@
1313
<checkstyle.version>8.29</checkstyle.version>
1414
<checkstyle-rules.version>4.0.1</checkstyle-rules.version>
1515
<maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
16-
<jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version>
1716
<maven-javadoc-plugin.version>3.0.0</maven-javadoc-plugin.version>
1817
<coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
19-
<!-- JaCoCo thresholds. Increase gradually as you add tests. -->
20-
<jacoco.unit-tests.limit.instruction-ratio>0%</jacoco.unit-tests.limit.instruction-ratio>
21-
<jacoco.unit-tests.limit.branch-ratio>0%</jacoco.unit-tests.limit.branch-ratio>
22-
<jacoco.unit-tests.limit.class-complexity>20</jacoco.unit-tests.limit.class-complexity>
23-
<jacoco.unit-tests.limit.method-complexity>5</jacoco.unit-tests.limit.method-complexity>
2418
</properties>
2519
<repositories>
2620
<repository>
2721
<id>spigot-repo</id>
2822
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
2923
</repository>
24+
<repository>
25+
<id>jitpack-repo</id>
26+
<url>https://jitpack.io</url>
27+
</repository>
3028
</repositories>
3129
<dependencies>
3230
<dependency>
@@ -35,6 +33,12 @@
3533
<version>1.17-R0.1-SNAPSHOT</version>
3634
<scope>provided</scope>
3735
</dependency>
36+
<dependency>
37+
<groupId>com.github.LoneDev6</groupId>
38+
<artifactId>api-itemsadder</artifactId>
39+
<version>2.3.8</version>
40+
<scope>provided</scope>
41+
</dependency>
3842
<dependency>
3943
<groupId>org.junit.jupiter</groupId>
4044
<artifactId>junit-jupiter-api</artifactId>
@@ -76,73 +80,6 @@
7680
<artifactId>maven-surefire-plugin</artifactId>
7781
<version>${maven-surefire-plugin.version}</version>
7882
</plugin>
79-
<plugin>
80-
<groupId>org.jacoco</groupId>
81-
<artifactId>jacoco-maven-plugin</artifactId>
82-
<version>${jacoco-maven-plugin.version}</version>
83-
<executions>
84-
<execution>
85-
<id>pre-unit-test</id>
86-
<goals>
87-
<goal>prepare-agent</goal>
88-
</goals>
89-
</execution>
90-
<execution>
91-
<id>post-unit-test</id>
92-
<phase>test</phase>
93-
<goals>
94-
<goal>report</goal>
95-
</goals>
96-
</execution>
97-
<execution>
98-
<id>check-unit-test</id>
99-
<phase>test</phase>
100-
<goals>
101-
<goal>check</goal>
102-
</goals>
103-
<configuration>
104-
<dataFile>${project.build.directory}/jacoco.exec</dataFile>
105-
<rules>
106-
<rule>
107-
<element>BUNDLE</element>
108-
<limits>
109-
<limit>
110-
<counter>INSTRUCTION</counter>
111-
<value>COVEREDRATIO</value>
112-
<minimum>${jacoco.unit-tests.limit.instruction-ratio}</minimum>
113-
</limit>
114-
<limit>
115-
<counter>BRANCH</counter>
116-
<value>COVEREDRATIO</value>
117-
<minimum>${jacoco.unit-tests.limit.branch-ratio}</minimum>
118-
</limit>
119-
</limits>
120-
</rule>
121-
<rule>
122-
<element>CLASS</element>
123-
<limits>
124-
<limit>
125-
<counter>COMPLEXITY</counter>
126-
<value>TOTALCOUNT</value>
127-
<maximum>${jacoco.unit-tests.limit.class-complexity}</maximum>
128-
</limit>
129-
</limits>
130-
</rule>
131-
<rule>
132-
<element>METHOD</element>
133-
<limits>
134-
<limit>
135-
<counter>COMPLEXITY</counter>
136-
<value>TOTALCOUNT</value>
137-
<maximum>${jacoco.unit-tests.limit.method-complexity}</maximum>
138-
</limit>
139-
</limits>
140-
</rule>
141-
</rules>
142-
</configuration>
143-
</execution>
144-
</executions>
145-
</plugin>
14683
</plugins>
14784
<resources>
14885
<resource>

src/main/java/com/paratopiamc/colorbundles/ColorBundles.java

+48-9
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,23 @@
2020

2121
import java.util.ArrayList;
2222
import java.util.List;
23+
import org.apache.commons.lang.WordUtils;
2324
import org.bukkit.Bukkit;
25+
import org.bukkit.ChatColor;
2426
import org.bukkit.Material;
2527
import org.bukkit.NamespacedKey;
28+
import org.bukkit.event.EventHandler;
29+
import org.bukkit.event.Listener;
2630
import org.bukkit.inventory.ItemStack;
2731
import org.bukkit.inventory.ShapelessRecipe;
2832
import org.bukkit.inventory.meta.ItemMeta;
2933
import org.bukkit.plugin.java.JavaPlugin;
30-
import net.md_5.bungee.api.ChatColor;
34+
import dev.lone.itemsadder.api.CustomStack;
35+
import dev.lone.itemsadder.api.Events.ItemsAdderFirstLoadEvent;
3136

32-
public final class ColorBundles extends JavaPlugin {
37+
public final class ColorBundles extends JavaPlugin implements Listener {
3338
private List<String> recipeKeys;
39+
private boolean hasItemsAdder;
3440

3541
private static enum Dyes {
3642
BLACK("black"), BLUE("blue"), BROWN("brown"), CYAN("cyan"), GRAY("gray"), GREEN("green"),
@@ -57,6 +63,12 @@ private Material getDye() {
5763

5864
@Override
5965
public void onEnable() {
66+
this.hasItemsAdder = this.getServer().getPluginManager().getPlugin("ItemsAdder") != null;
67+
if (this.hasItemsAdder) {
68+
getServer().getConsoleSender().sendMessage(
69+
ChatColor.AQUA + "[ColorBundles] ItemsAdder detected! Waiting for ItemsAdder to load items...");
70+
}
71+
6072
if (!this.getDataFolder().exists()) {
6173
try {
6274
this.getDataFolder().mkdir();
@@ -66,23 +78,46 @@ public void onEnable() {
6678
}
6779
saveDefaultConfig();
6880
getServer().getPluginManager().registerEvents(new CraftingListener(this), this);
81+
getServer().getPluginManager().registerEvents(this, this);
6982

7083
recipeKeys = new ArrayList<>();
71-
for (Dyes dye : Dyes.values()) {
72-
ItemStack item = new ItemStack(Material.BUNDLE);
73-
ItemMeta meta = item.getItemMeta();
84+
if (!this.hasItemsAdder) {
85+
for (Dyes dye : Dyes.values()) {
86+
ItemStack item = new ItemStack(Material.BUNDLE);
87+
ItemMeta meta = item.getItemMeta();
88+
int modelData = getConfig().getInt(dye.toString());
89+
meta.setCustomModelData(modelData);
90+
meta.setDisplayName(
91+
ChatColor.WHITE + WordUtils.capitalize(dye.toString().replaceAll("_", " ")) + " Bundle");
92+
item.setItemMeta(meta);
93+
94+
NamespacedKey key = new NamespacedKey(this, dye + "_bundle");
95+
ShapelessRecipe recipe = new ShapelessRecipe(key, item);
96+
recipe.addIngredient(Material.BUNDLE);
97+
recipe.addIngredient(dye.getDye());
98+
99+
Bukkit.addRecipe(recipe);
100+
101+
recipeKeys.add(dye + "_bundle");
102+
103+
getServer().getConsoleSender()
104+
.sendMessage(ChatColor.GREEN + "[ColorBundles] Loaded recipes: " + dye + "_bundle");
105+
}
106+
}
107+
}
74108

75-
int modelData = getConfig().getInt(dye.toString());
76-
meta.setCustomModelData(modelData);
109+
@EventHandler
110+
public void onItemsLoadEvent(ItemsAdderFirstLoadEvent evt) {
111+
for (Dyes dye : Dyes.values()) {
112+
ItemStack item = CustomStack.getInstance("colorbundles:" + dye + "_bundle").getItemStack();
77113

78-
item.setItemMeta(meta);
79114
NamespacedKey key = new NamespacedKey(this, dye + "_bundle");
80115
ShapelessRecipe recipe = new ShapelessRecipe(key, item);
81-
82116
recipe.addIngredient(Material.BUNDLE);
83117
recipe.addIngredient(dye.getDye());
84118

85119
Bukkit.addRecipe(recipe);
120+
86121
recipeKeys.add(dye + "_bundle");
87122

88123
getServer().getConsoleSender()
@@ -93,4 +128,8 @@ public void onEnable() {
93128
public List<String> getRecipeKeys() {
94129
return this.recipeKeys;
95130
}
131+
132+
public boolean hasItemsAdder() {
133+
return this.hasItemsAdder;
134+
}
96135
}

src/main/java/com/paratopiamc/colorbundles/CraftingListener.java

+48-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
import java.util.HashMap;
2222
import java.util.List;
23+
import org.apache.commons.lang.WordUtils;
24+
import org.bukkit.Bukkit;
25+
import org.bukkit.ChatColor;
2326
import org.bukkit.Material;
2427
import org.bukkit.entity.HumanEntity;
2528
import org.bukkit.event.EventHandler;
@@ -29,7 +32,9 @@
2932
import org.bukkit.inventory.ItemStack;
3033
import org.bukkit.inventory.Recipe;
3134
import org.bukkit.inventory.ShapelessRecipe;
32-
import org.bukkit.inventory.meta.ItemMeta;
35+
import org.bukkit.inventory.meta.BundleMeta;
36+
import dev.lone.itemsadder.api.CustomStack;
37+
import dev.lone.itemsadder.api.ItemsAdder;
3338

3439
public class CraftingListener implements Listener {
3540
private ColorBundles plugin;
@@ -42,31 +47,64 @@ public CraftingListener(ColorBundles plugin) {
4247
public void onCraft(PrepareItemCraftEvent evt) {
4348
Recipe recipe = evt.getRecipe();
4449
if (recipe instanceof ShapelessRecipe) {
45-
ShapelessRecipe shapeless = (ShapelessRecipe) recipe;
46-
String currentKey = shapeless.getKey().getKey();
50+
String currentKey = ((ShapelessRecipe) recipe).getKey().getKey();
4751
List<String> recipeKeys = this.plugin.getRecipeKeys();
4852
for (int i = 0; i < recipeKeys.size(); i++) {
4953
if (currentKey.equals(recipeKeys.get(i))) {
5054
List<HumanEntity> viewers = evt.getViewers();
5155
boolean anyPermitted = viewers.stream()
5256
.anyMatch(human -> human.hasPermission("colorbundles.craft"));
5357

54-
ItemStack originalResult = shapeless.getResult();
55-
int customModelData = originalResult.getItemMeta().getCustomModelData();
58+
// #getResult returns a clone
59+
ItemStack originalResult = recipe.getResult();
60+
BundleMeta resultMeta = (BundleMeta) originalResult.getItemMeta();
5661

5762
CraftingInventory inventory = evt.getInventory();
5863
HashMap<Integer, ? extends ItemStack> mapping = inventory.all(Material.BUNDLE);
5964
Integer[] array = mapping.keySet().toArray(new Integer[2]);
60-
ItemStack finalResult = inventory.getItem(array[1]).clone();
65+
// original bundle
66+
ItemStack ingredientBundle = inventory.getItem(array[1]).clone();
67+
BundleMeta meta = (BundleMeta) ingredientBundle.getItemMeta();
6168

62-
ItemMeta meta = finalResult.getItemMeta();
63-
meta.setCustomModelData(customModelData);
64-
finalResult.setItemMeta(meta);
69+
resultMeta.setItems(meta.getItems());
70+
if (meta.hasDisplayName()
71+
&& !meta.getDisplayName().equals(this.getOriginalName(ingredientBundle))) {
72+
resultMeta.setDisplayName(meta.getDisplayName());
73+
}
74+
if (meta.hasLore()) {
75+
resultMeta.setLore(meta.getLore());
76+
}
6577

66-
inventory.setResult(anyPermitted ? finalResult : null);
78+
originalResult.setItemMeta(resultMeta);
79+
80+
meta.getEnchants().forEach(originalResult::addUnsafeEnchantment);
81+
82+
Bukkit.getScheduler().runTask(this.plugin,
83+
() -> inventory.setResult(anyPermitted ? originalResult : null));
6784
break;
6885
}
6986
}
7087
}
7188
}
89+
90+
/**
91+
* Returns the original name of the bundle item.
92+
*
93+
* @param item ingredient bundle item
94+
* @return {@code null} if {@link ItemMeta#hasDisplayName()} returns
95+
* {@code false}.
96+
*/
97+
private String getOriginalName(ItemStack item) {
98+
if (this.plugin.hasItemsAdder() && ItemsAdder.isCustomItem(item)) {
99+
return CustomStack.getInstance(CustomStack.byItemStack(item).getNamespacedID()).getDisplayName();
100+
} else if (!item.getItemMeta().hasCustomModelData()) {
101+
return null;
102+
} else {
103+
return this.plugin.getConfig().getKeys(false).stream()
104+
.filter(str -> this.plugin.getConfig().getInt(str) == item.getItemMeta().getCustomModelData())
105+
.findFirst()
106+
.map(str -> ChatColor.WHITE + WordUtils.capitalize(str.replaceAll("_", " ")) + " Bundle")
107+
.orElse(null);
108+
}
109+
}
72110
}

src/main/resources/plugin.yml

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ version: 1.2
44
author: SolarRabbit
55
api-version: 1.17
66

7+
softdepend: [ItemsAdder]
8+
79
permissions:
810
colorbundles.craft:
911
description: User able to craft color bundles.

0 commit comments

Comments
 (0)