Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions src/main/java/fr/openmc/core/listeners/EquipableItemListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@
import fr.openmc.core.OMCPlugin;
import fr.openmc.core.events.ArmorEquipEvent;
import fr.openmc.core.features.dream.DreamUtils;
import fr.openmc.core.features.dream.registries.DreamItemRegistry;
import fr.openmc.core.registry.items.CustomItem;
import fr.openmc.core.registry.items.CustomItemRegistry;
import fr.openmc.core.registry.items.options.EquipableItem;
import fr.openmc.core.utils.ArmorType;
import fr.openmc.core.utils.ItemUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand All @@ -20,11 +17,12 @@
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.HashMap;
import java.util.Map;
import java.util.*;

public class EquipableItemListener implements Listener {

private final Map<UUID, Set<PotionEffectType>> appliedEffectsByPlayer = new HashMap<>();

@EventHandler
public void onEquip(ArmorEquipEvent event) {
if (event.getType() == null) return;
Expand Down Expand Up @@ -57,6 +55,8 @@ public void onQuit(PlayerQuitEvent event) {
equipable.removeEffects(player);
}
}

appliedEffectsByPlayer.remove(player.getUniqueId());
}

@EventHandler
Expand All @@ -76,6 +76,15 @@ public void onDreamTeleport(PlayerTeleportEvent event) {
}

private void recalc(Player player, ItemStack oldPiece) {
UUID playerId = player.getUniqueId();

Set<PotionEffectType> previouslyApplied = appliedEffectsByPlayer.get(playerId);
if (previouslyApplied != null) {
for (PotionEffectType type : previouslyApplied) {
player.removePotionEffect(type);
}
}

if (oldPiece != null && !oldPiece.getType().isAir()) {

CustomItem customItem = CustomItemRegistry.getByItemStack(oldPiece);
Expand All @@ -101,6 +110,8 @@ private void recalc(Player player, ItemStack oldPiece) {
}
}

Set<PotionEffectType> newApplied = new HashSet<>();

for (var entry : effects.entrySet()) {
PotionEffectType type = entry.getKey();
int amplifier = entry.getValue();
Expand All @@ -115,6 +126,10 @@ private void recalc(Player player, ItemStack oldPiece) {
true
)
);

newApplied.add(type);
}

appliedEffectsByPlayer.put(playerId, newApplied);
}
}
Loading