forked from Maxlego08/zMenu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpigotAttributeModifiersItemComponentLoader.java
More file actions
73 lines (67 loc) · 3.33 KB
/
SpigotAttributeModifiersItemComponentLoader.java
File metadata and controls
73 lines (67 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package fr.maxlego08.menu.loader.components.spigot;
import fr.maxlego08.menu.api.MenuPlugin;
import fr.maxlego08.menu.api.attribute.AttributeMergeStrategy;
import fr.maxlego08.menu.api.attribute.AttributeWrapper;
import fr.maxlego08.menu.api.configuration.Configuration;
import fr.maxlego08.menu.api.context.MenuItemStackContext;
import fr.maxlego08.menu.api.itemstack.ItemComponent;
import fr.maxlego08.menu.api.itemstack.components.AttributeModifiersComponent;
import fr.maxlego08.menu.api.loader.ItemComponentLoader;
import fr.maxlego08.menu.zcore.logger.Logger;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class SpigotAttributeModifiersItemComponentLoader extends ItemComponentLoader {
private final MenuPlugin plugin;
public SpigotAttributeModifiersItemComponentLoader(MenuPlugin plugin){
super("attribute-modifiers");
this.plugin = plugin;
}
@Override
public @Nullable ItemComponent load(@NotNull MenuItemStackContext context, @NotNull File file, @NotNull YamlConfiguration configuration, @NotNull String path, @Nullable ConfigurationSection componentSection) {
if (componentSection == null) return null;
String mergeStrategyStr = componentSection.getString("attribute-merge-strategy", "");
AttributeMergeStrategy mergeStrategy;
try {
mergeStrategy = AttributeMergeStrategy.valueOf(mergeStrategyStr.toUpperCase());
} catch (IllegalArgumentException e) {
mergeStrategy = AttributeMergeStrategy.ADD;
}
List<Map<?, ?>> mapList = componentSection.getMapList("modifiers");
List<AttributeWrapper> modifiersWrapper = new ArrayList<>();
for (Map<?, ?> rawMap : mapList) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) rawMap;
String type = (String) map.get("type");
if (type == null) continue;
Attribute attribute;
try {
NamespacedKey key = NamespacedKey.fromString(type.toLowerCase());
if (key == null) continue;
attribute = Registry.ATTRIBUTE.get(key);
} catch (IllegalArgumentException e) {
continue;
}
if (attribute == null) continue;
try {
AttributeModifier deserialize = AttributeModifier.deserialize(map);
modifiersWrapper.add(new AttributeWrapper(attribute, deserialize.getOperation(), deserialize.getAmount(), deserialize.getSlotGroup(), deserialize.getKey()));
} catch (IllegalArgumentException e) {
if (Configuration.enableDebug){
Logger.info("Error deserializing attribute modifier for attribute " + attribute.name() + ": " + e.getMessage());
e.printStackTrace();
}
}
}
return modifiersWrapper.isEmpty() ? null : new AttributeModifiersComponent(this.plugin,modifiersWrapper, mergeStrategy);
}
}