Skip to content

Commit c276a68

Browse files
committed
added a 'full-legacy' configuration to avoid divinity modifying attributes, flags etc. if wished.
1 parent d4a7067 commit c276a68

File tree

10 files changed

+54
-9
lines changed

10 files changed

+54
-9
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<properties>
1919
<codex.version>1.1.1-R0.11-SNAPSHOT</codex.version>
20-
<fabled.version>1.0.4-R0.56-SNAPSHOT</fabled.version>
20+
<fabled.version>1.0.4-R0.63-SNAPSHOT</fabled.version>
2121
</properties>
2222

2323
<repositories>

src/main/java/studio/magemonkey/divinity/config/EngineCfg.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public EngineCfg(@NotNull Divinity plugin) throws InvalidConfigurationException
4848
public static boolean ATTRIBUTES_ALLOW_HOLD_REQUIREMENTS;
4949

5050
public static boolean ATTRIBUTES_DURABILITY_BREAK_ITEMS;
51+
public static boolean ATTRIBUTES_HIDE_FLAGS;
5152
public static boolean ATTRIBUTES_DURABILITY_REDUCE_FOR_MOBS;
5253
public static Set<String> ATTRIBUTES_DURABILITY_REDUCE_FOR_SKILL_API;
5354

@@ -56,6 +57,7 @@ public EngineCfg(@NotNull Divinity plugin) throws InvalidConfigurationException
5657
public static double COMBAT_SHIELD_BLOCK_BONUS_DAMAGE_MOD;
5758
public static int COMBAT_SHIELD_BLOCK_COOLDOWN;
5859
public static boolean LEGACY_COMBAT;
60+
public static boolean FULL_LEGACY;
5961
public static boolean COMBAT_DISABLE_VANILLA_SWEEP;
6062
public static boolean COMBAT_REDUCE_PLAYER_HEALTH_BAR;
6163
public static boolean COMBAT_FISHING_HOOK_DO_DAMAGE;
@@ -177,6 +179,7 @@ public void setup() {
177179
EngineCfg.ATTRIBUTES_EFFECTIVE_FOR_MOBS = cfg.getBoolean(path + "effective-for-mobs");
178180
EngineCfg.ATTRIBUTES_EFFECTIVE_IN_OFFHAND = cfg.getBoolean(path + "effective-in-offhand");
179181
EngineCfg.ATTRIBUTES_ALLOW_HOLD_REQUIREMENTS = cfg.getBoolean(path + "allow-hold-items-you-cant-use");
182+
EngineCfg.ATTRIBUTES_HIDE_FLAGS = cfg.getBoolean(path + "hide-flags");
180183

181184
path = "attributes.durability.";
182185
EngineCfg.ATTRIBUTES_DURABILITY_BREAK_ITEMS = cfg.getBoolean(path + "break-items-on-zero");

src/main/java/studio/magemonkey/divinity/manager/EntityManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import studio.magemonkey.divinity.api.event.DivinityDamageEvent;
2020
import studio.magemonkey.divinity.api.event.EntityDivinityItemPickupEvent;
2121
import studio.magemonkey.divinity.api.event.EntityEquipmentChangeEvent;
22+
import studio.magemonkey.divinity.config.EngineCfg;
2223
import studio.magemonkey.divinity.modules.api.QModuleDrop;
2324
import studio.magemonkey.divinity.stats.EntityStats;
2425
import studio.magemonkey.divinity.stats.EntityStatsTask;
@@ -90,6 +91,7 @@ public void shutdown() {
9091

9192
@EventHandler(priority = EventPriority.MONITOR)
9293
public void onStatsDeath(EntityDeathEvent e) {
94+
if(EngineCfg.FULL_LEGACY) return;
9395
LivingEntity entity = e.getEntity();
9496
previousEquipment.remove(e.getEntity().getUniqueId());
9597
EntityStats.get(entity).handleDeath();
@@ -98,17 +100,20 @@ public void onStatsDeath(EntityDeathEvent e) {
98100
// Clear stats on player exit
99101
@EventHandler(priority = EventPriority.HIGHEST)
100102
public void onStatsQuit(PlayerQuitEvent e) {
103+
if(EngineCfg.FULL_LEGACY) return;
101104
EntityStats.purge(e.getPlayer());
102105
}
103106

104107
@EventHandler(priority = EventPriority.HIGHEST)
105108
public void onStatsJoin(PlayerJoinEvent e) {
109+
if(EngineCfg.FULL_LEGACY) return;
106110
EntityStats.get(e.getPlayer());
107111
this.pushToUpdate(e.getPlayer(), 1D);
108112
}
109113

110114
@EventHandler
111115
public void quit(PlayerQuitEvent event) {
116+
if(EngineCfg.FULL_LEGACY) return;
112117
previousEquipment.remove(event.getPlayer().getUniqueId());
113118
}
114119

@@ -124,6 +129,7 @@ public void onStatsRegen(EntityRegainHealthEvent e) {
124129

125130
@EventHandler(ignoreCancelled = true)
126131
public void onPickup(EntityPickupItemEvent e) {
132+
if(EngineCfg.FULL_LEGACY) return;
127133
if (!ProjectileStats.isPickable(e.getItem())) {
128134
e.setCancelled(true);
129135
}
@@ -138,6 +144,7 @@ public void onPickup(EntityPickupItemEvent e) {
138144
}
139145

140146
private final void pushToUpdate(@NotNull LivingEntity entity, double time) {
147+
if(EngineCfg.FULL_LEGACY) return;
141148
EntityEquipment equip = new EntityEquipmentSnapshot(entity);
142149
previousEquipment.put(entity.getUniqueId(), equip);
143150
if (time <= 0D) {
@@ -153,6 +160,7 @@ public void run() {
153160
}
154161

155162
private final void addDuplicatorFixer(@NotNull Entity entity) {
163+
if(EngineCfg.FULL_LEGACY) return;
156164
entity.setMetadata(PACKET_DUPLICATOR_FIXER, new FixedMetadataValue(plugin, "fixed"));
157165
}
158166

src/main/java/studio/magemonkey/divinity/manager/listener/ListenerManager.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.jetbrains.annotations.NotNull;
44
import studio.magemonkey.codex.manager.api.Loadable;
55
import studio.magemonkey.divinity.Divinity;
6+
import studio.magemonkey.divinity.config.Config;
7+
import studio.magemonkey.divinity.config.EngineCfg;
68
import studio.magemonkey.divinity.hooks.HookListener;
79
import studio.magemonkey.divinity.manager.listener.object.*;
810
import studio.magemonkey.divinity.stats.items.ItemStats;
@@ -45,8 +47,13 @@ public void setup() {
4547
this.lisDynamic = new DynamicStatListener(this.plugin);
4648
this.lisDynamic.registerListeners();
4749

48-
this.lisQuantum = new VanillaWrapperListener(this.plugin);
49-
this.lisQuantum.registerListeners();
50+
if(!EngineCfg.LEGACY_COMBAT) {
51+
this.lisQuantum = new VanillaWrapperListener(this.plugin);
52+
this.lisQuantum.registerListeners();
53+
Divinity.getInstance().getLogger().info("Loaded " + this.lisQuantum.getClass().getSimpleName());
54+
} else {
55+
Divinity.getInstance().getLogger().info("Skipped " + VanillaWrapperListener.class.getSimpleName() + " due to legacy combat being enabled.");
56+
}
5057

5158
this.updater = new ItemUpdaterListener(this.plugin);
5259
this.updater.registerListeners();

src/main/java/studio/magemonkey/divinity/manager/listener/object/DynamicStatListener.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.jetbrains.annotations.Nullable;
1414
import studio.magemonkey.codex.manager.IListener;
1515
import studio.magemonkey.divinity.Divinity;
16+
import studio.magemonkey.divinity.config.EngineCfg;
1617
import studio.magemonkey.divinity.stats.items.ItemStats;
1718
import studio.magemonkey.divinity.stats.items.api.DynamicStat;
1819

@@ -27,19 +28,22 @@ public DynamicStatListener(@NotNull Divinity plugin) {
2728
}
2829

2930
public static void updateItem(@Nullable Player p, @NotNull ItemStack item) {
31+
if(EngineCfg.FULL_LEGACY) return;
3032
for (DynamicStat<?> dynamicStat : ItemStats.getDynamicStats()) {
3133
dynamicStat.updateItem(p, item);
3234
}
3335
}
3436

3537
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
3638
public void onDrop(PlayerDropItemEvent e) {
39+
if(EngineCfg.FULL_LEGACY) return;
3740
ItemStack item = e.getItemDrop().getItemStack();
3841
updateItem(null, item);
3942
}
4043

4144
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
4245
public void onPick(EntityPickupItemEvent e) {
46+
if(EngineCfg.FULL_LEGACY) return;
4347
LivingEntity entity = e.getEntity();
4448
if (!(entity instanceof Player)) return;
4549

@@ -50,6 +54,7 @@ public void onPick(EntityPickupItemEvent e) {
5054

5155
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
5256
public void onInvOpen(InventoryOpenEvent e) {
57+
if(EngineCfg.FULL_LEGACY) return;
5358
List<ItemStack> list = new ArrayList<>();
5459
Player player = (Player) e.getPlayer();
5560

@@ -64,6 +69,7 @@ public void onInvOpen(InventoryOpenEvent e) {
6469

6570
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
6671
public void onInvClose(InventoryCloseEvent e) {
72+
if(EngineCfg.FULL_LEGACY) return;
6773
Player player = (Player) e.getPlayer();
6874

6975
List<ItemStack> list = new ArrayList<>();

src/main/java/studio/magemonkey/divinity/manager/listener/object/ItemUpdaterListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import studio.magemonkey.codex.manager.IListener;
2626
import studio.magemonkey.codex.util.DataUT;
2727
import studio.magemonkey.divinity.Divinity;
28+
import studio.magemonkey.divinity.config.EngineCfg;
2829
import studio.magemonkey.divinity.stats.items.ItemStats;
2930

3031
public class ItemUpdaterListener extends IListener<Divinity> {
@@ -93,6 +94,7 @@ public void join(PlayerJoinEvent event) {
9394
}
9495

9596
public void update(ItemStack item, @Nullable Player player) {
97+
if(EngineCfg.LEGACY_COMBAT ||EngineCfg.FULL_LEGACY) return;
9698
if (item == null || item.getType() == Material.AIR) return;
9799

98100
ItemType itemType = CodexEngine.get().getItemManager().getMainItemType(item);

src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package studio.magemonkey.divinity.modules;
22

33
import org.apache.commons.lang3.ArrayUtils;
4+
import org.bukkit.Bukkit;
45
import org.bukkit.Color;
56
import org.bukkit.Material;
67
import org.bukkit.NamespacedKey;
78
import org.bukkit.attribute.Attribute;
89
import org.bukkit.attribute.AttributeModifier;
910
import org.bukkit.configuration.InvalidConfigurationException;
1011
import org.bukkit.enchantments.Enchantment;
12+
import org.bukkit.inventory.EquipmentSlot;
1113
import org.bukkit.inventory.ItemFlag;
1214
import org.bukkit.inventory.ItemStack;
1315
import org.bukkit.inventory.meta.*;
@@ -135,16 +137,25 @@ public ModuleItem(@NotNull Divinity plugin, @NotNull JYML cfg, @NotNull QModuleD
135137

136138
this.attributes = new HashMap<>();
137139
for (String attr : cfg.getSection("attributes")) {
138-
String[] attrData = cfg.getString("attributes." + attr, "").split(":");
139-
double value = Double.parseDouble(attrData[0]);
140-
String operation = attrData.length > 1 ? attrData[1] : "ADD_NUMBER";
141-
NBTAttribute nbtAttr = NBTAttribute.valueOf(attr.toUpperCase());
142-
AttributeModifier attrModifier = VersionManager.getCompat()
143-
.createAttributeModifier(nbtAttr, value, AttributeModifier.Operation.valueOf(operation));
140+
String[] attrData = cfg.getString("attributes." + attr, "").split(":");
141+
double value = Double.parseDouble(attrData[0]);
142+
String operation = attrData.length > 1 ? attrData[1] : "ADD_NUMBER";
143+
String equipmentSlot = attrData.length > 2 ? attrData[2] : null;
144+
NBTAttribute nbtAttr = NBTAttribute.valueOf(attr.toUpperCase());
145+
146+
// Check attribute through compat support
147+
AttributeModifier attrModifier = VersionManager.getCompat().createAttributeModifier(nbtAttr, value, AttributeModifier.Operation.valueOf(operation));
144148
if (attrModifier == null) {
145149
Codex.warn("Invalid attribute provided: " + attr + " (" + cfg.getFile().getName() + ")");
146150
continue;
147151
}
152+
// If everything was fine and equipmentslot != null, recreate the modifier including the equipment slot
153+
if(equipmentSlot != null) {
154+
EquipmentSlot slot = EquipmentSlot.valueOf(equipmentSlot.toUpperCase());
155+
attrModifier = new AttributeModifier(attrModifier.getUniqueId(), attrModifier.getName(), attrModifier.getAmount(), attrModifier.getOperation(), slot);
156+
// Debug
157+
Bukkit.getLogger().info("Registered attribute " + nbtAttr.name() + " with value " + value + ", operation " + operation + " and equipment slot " + equipmentSlot + " for item " + this.getId());
158+
}
148159
this.attributes.put(nbtAttr.getAttribute(), attrModifier);
149160
}
150161

@@ -277,6 +288,7 @@ protected ItemStack build(@NotNull ItemStack item) {
277288

278289
for (Map.Entry<Attribute, AttributeModifier> attribute : this.attributes.entrySet()) {
279290
if (attribute != null) {
291+
AttributeModifier mod = new AttributeModifier(attribute.getValue().getName(), attribute.getValue().getAmount(), attribute.getValue().getOperation());
280292
meta.addAttributeModifier(attribute.getKey(), attribute.getValue());
281293
}
282294
}

src/main/java/studio/magemonkey/divinity/stats/EntityStats.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ private void updateInventory() {
435435
}
436436

437437
public void updateAll() {
438+
if(EngineCfg.LEGACY_COMBAT) return;
438439
if (!EngineCfg.ATTRIBUTES_EFFECTIVE_FOR_MOBS && !this.isPlayer()) {
439440
return;
440441
}

src/main/java/studio/magemonkey/divinity/stats/items/ItemStats.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import studio.magemonkey.codex.modules.IModule;
2020
import studio.magemonkey.codex.util.DataUT;
2121
import studio.magemonkey.divinity.Divinity;
22+
import studio.magemonkey.divinity.config.EngineCfg;
2223
import studio.magemonkey.divinity.modules.api.QModuleDrop;
2324
import studio.magemonkey.divinity.stats.items.api.DuplicableItemLoreStat;
2425
import studio.magemonkey.divinity.stats.items.api.DynamicStat;
@@ -307,6 +308,8 @@ public static boolean hasStat(@NotNull ItemStack item, @Nullable Player player,
307308
// ----------------------------------------------------------------- //
308309

309310
public static void updateVanillaAttributes(@NotNull ItemStack item, @Nullable Player player) {
311+
//if(EngineCfg.LEGACY_COMBAT) return;
312+
310313
addAttribute(item, player, NBTAttribute.MAX_HEALTH, getStat(item, player, TypedStat.Type.MAX_HEALTH));
311314
addAttribute(item, player, NBTAttribute.MOVEMENT_SPEED, getStat(item, player, TypedStat.Type.MOVEMENT_SPEED));
312315
addAttribute(item, player, NBTAttribute.ATTACK_SPEED, getStat(item, player, TypedStat.Type.ATTACK_SPEED));
@@ -344,6 +347,7 @@ private static void addAttribute(@NotNull ItemStack item,
344347
@Nullable Player player,
345348
@NotNull NBTAttribute att,
346349
double value) {
350+
//if(EngineCfg.LEGACY_COMBAT) return;
347351
ItemMeta meta = item.getItemMeta();
348352
if (meta == null) return;
349353

src/main/resources/engine.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ attributes:
6363
# When enabled, allows to hold in hand items with requirements that player don't meet.
6464
# Even when this is 'true', item attributes won't be applied to a player until he meet the requirements.
6565
allow-hold-items-you-cant-use: false
66+
# When enabled, hides attributes and enchantments by default on all custom items.
67+
hide-flags: true
6668

6769
combat:
6870
# Whether to use the old combat formula for calculating defenses

0 commit comments

Comments
 (0)