mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-30 20:39:10 +00:00
添加cooldown
This commit is contained in:
@@ -12,8 +12,10 @@ import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20;
|
||||
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20_5;
|
||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||
import net.momirealms.craftengine.bukkit.util.KeyUtils;
|
||||
import net.momirealms.craftengine.bukkit.util.Reflections;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.plugin.context.CooldownData;
|
||||
import net.momirealms.craftengine.core.plugin.network.*;
|
||||
import net.momirealms.craftengine.core.util.*;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -24,10 +26,12 @@ import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -191,17 +195,33 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Channel channel = getChannel(player);
|
||||
NetWorkUser user = removeUser(channel);
|
||||
if (user == null) return;
|
||||
saveCooldown(player, user);
|
||||
handleDisconnection(channel);
|
||||
this.onlineUsers.remove(player.getUniqueId());
|
||||
this.resetUserArray();
|
||||
}
|
||||
|
||||
private void saveCooldown(Player player, NetWorkUser user) {
|
||||
if (user instanceof BukkitServerPlayer serverPlayer) {
|
||||
CooldownData cd = serverPlayer.cooldown();
|
||||
if (cd != null) {
|
||||
try {
|
||||
byte[] data = CooldownData.toBytes(cd);
|
||||
player.getPersistentDataContainer().set(KeyUtils.toNamespacedKey(CooldownData.COOLDOWN_KEY), PersistentDataType.BYTE_ARRAY, data);
|
||||
} catch (IOException e) {
|
||||
player.getPersistentDataContainer().remove(KeyUtils.toNamespacedKey(CooldownData.COOLDOWN_KEY));
|
||||
this.plugin.logger().warn("Failed to save cooldown for player " + player.getName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void resetUserArray() {
|
||||
this.onlineUserArray = this.onlineUsers.values().toArray(new BukkitServerPlayer[0]);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||
import net.momirealms.craftengine.core.plugin.context.CooldownData;
|
||||
import net.momirealms.craftengine.core.plugin.network.ConnectionState;
|
||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||
import net.momirealms.craftengine.core.plugin.network.ProtocolVersion;
|
||||
@@ -35,11 +36,13 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.RayTraceResult;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.*;
|
||||
@@ -94,6 +97,8 @@ public class BukkitServerPlayer extends Player {
|
||||
// cache interaction range here
|
||||
private int lastUpdateInteractionRangeTick;
|
||||
private double cachedInteractionRange;
|
||||
// cooldown data
|
||||
private CooldownData cooldownData;
|
||||
|
||||
private final Map<Integer, EntityPacketHandler> entityTypeView = new ConcurrentHashMap<>();
|
||||
|
||||
@@ -107,6 +112,13 @@ public class BukkitServerPlayer extends Player {
|
||||
this.serverPlayerRef = new WeakReference<>(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player));
|
||||
this.uuid = player.getUniqueId();
|
||||
this.name = player.getName();
|
||||
byte[] bytes = player.getPersistentDataContainer().get(KeyUtils.toNamespacedKey(CooldownData.COOLDOWN_KEY), PersistentDataType.BYTE_ARRAY);
|
||||
try {
|
||||
this.cooldownData = CooldownData.fromBytes(bytes);
|
||||
} catch (IOException e) {
|
||||
this.cooldownData = new CooldownData();
|
||||
this.plugin.logger().warn("Failed to parse cooldown data", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -871,4 +883,14 @@ public class BukkitServerPlayer extends Player {
|
||||
if (type == null) return;
|
||||
this.platformPlayer().removePotionEffect(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearPotionEffects() {
|
||||
this.platformPlayer().clearActivePotionEffects();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CooldownData cooldown() {
|
||||
return this.cooldownData;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user