feat: 暂时取消部分线程安全检测

Signed-off-by: 502647092 <admin@yumc.pw>
dev
502647092 2016-08-04 19:54:45 +08:00
parent 5491119c73
commit 60c08f0aca
2 changed files with 98 additions and 101 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>pw.yumc</groupId> <groupId>pw.yumc</groupId>
<artifactId>Yum</artifactId> <artifactId>Yum</artifactId>
<version>2.7.5</version> <version>2.7.6</version>
<name>Yum</name> <name>Yum</name>
<description>Minecraft 服务器插件管理系统</description> <description>Minecraft 服务器插件管理系统</description>
<build> <build>
@ -66,10 +66,9 @@
<update.description>§a全新 2.X 版本 更多守护与优化</update.description> <update.description>§a全新 2.X 版本 更多守护与优化</update.description>
<update.changes> <update.changes>
§c注意 §6- §aYum更新需要§d重启服务器!§c重启服务器!§4重启服务器!; §c注意 §6- §aYum更新需要§d重启服务器!§c重启服务器!§4重启服务器!;
§b2.7.6 §6- §c暂时取消部分线程安全检测§4(不稳定)...;
§b2.7.5 §6- §c修复§eBukkitDev§e下载为空时的异常...; §b2.7.5 §6- §c修复§eBukkitDev§e下载为空时的异常...;
§b2.7.4 §6- §e异步记录服务器报错与耗时操作 §a性能优化...; §b2.7.4 §6- §e异步记录服务器报错与耗时操作 §a性能优化...;
§b2.7.3 §6- §a调整lag判断条件 减少高峰期误报...;
§b2.7.2 §6- §c修复mi lag命令参数错误报错 §d百分比显示能耗...;
</update.changes> </update.changes>
<env.GIT_COMMIT>DEBUG</env.GIT_COMMIT> <env.GIT_COMMIT>DEBUG</env.GIT_COMMIT>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@ -1,98 +1,96 @@
package pw.yumc.Yum.listeners; package pw.yumc.Yum.listeners;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.event.world.WorldSaveEvent;
import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import cn.citycraft.PluginHelper.kit.PluginKit; import cn.citycraft.PluginHelper.kit.PluginKit;
import pw.yumc.Yum.Yum; import pw.yumc.Yum.Yum;
/** /**
* Fork From LagMonitor: https://github.com/games647/LagMonitor.git * Fork From LagMonitor: https://github.com/games647/LagMonitor.git
* We can listen to events which are intended to run sync to the main thread. * We can listen to events which are intended to run sync to the main thread.
* If those events are fired on a async task the operation was likely not thread-safe. * If those events are fired on a async task the operation was likely not thread-safe.
*/ */
public class ThreadSafetyListener implements Listener { public class ThreadSafetyListener implements Listener {
public ThreadSafetyListener(final Yum yum) { public ThreadSafetyListener(final Yum yum) {
Bukkit.getPluginManager().registerEvents(this, yum); Bukkit.getPluginManager().registerEvents(this, yum);
} }
@EventHandler @EventHandler
public void onChunkLoad(final ChunkLoadEvent chunkLoadEvent) { public void onChunkLoad(final ChunkLoadEvent chunkLoadEvent) {
checkSafety(chunkLoadEvent); checkSafety(chunkLoadEvent);
} }
@EventHandler @EventHandler
public void onChunkUnload(final ChunkUnloadEvent chunkUnloadEvent) { public void onChunkUnload(final ChunkUnloadEvent chunkUnloadEvent) {
checkSafety(chunkUnloadEvent); checkSafety(chunkUnloadEvent);
} }
@EventHandler @EventHandler
public void onCreatureSpawn(final CreatureSpawnEvent creatureSpawnEvent) { public void onCreatureSpawn(final CreatureSpawnEvent creatureSpawnEvent) {
checkSafety(creatureSpawnEvent); checkSafety(creatureSpawnEvent);
} }
@EventHandler public void onInventoryOpen(final InventoryOpenEvent inventoryOpenEvent) {
public void onInventoryOpen(final InventoryOpenEvent inventoryOpenEvent) { checkSafety(inventoryOpenEvent);
checkSafety(inventoryOpenEvent); }
}
@EventHandler
@EventHandler public void onItemSpawn(final ItemSpawnEvent itemSpawnEvent) {
public void onItemSpawn(final ItemSpawnEvent itemSpawnEvent) { checkSafety(itemSpawnEvent);
checkSafety(itemSpawnEvent); }
}
@EventHandler
@EventHandler public void onPlayerMove(final PlayerMoveEvent moveEvent) {
public void onPlayerMove(final PlayerMoveEvent moveEvent) { checkSafety(moveEvent);
checkSafety(moveEvent); }
}
@EventHandler
@EventHandler public void onPlayerQuit(final PlayerQuitEvent quitEvent) {
public void onPlayerQuit(final PlayerQuitEvent quitEvent) { checkSafety(quitEvent);
checkSafety(quitEvent); }
}
@EventHandler
@EventHandler public void onPlayerTeleport(final PlayerTeleportEvent teleportEvent) {
public void onPlayerTeleport(final PlayerTeleportEvent teleportEvent) { checkSafety(teleportEvent);
checkSafety(teleportEvent); }
}
@EventHandler
@EventHandler public void onWorldLoad(final WorldLoadEvent worldLoadEvent) {
public void onWorldLoad(final WorldLoadEvent worldLoadEvent) { checkSafety(worldLoadEvent);
checkSafety(worldLoadEvent); }
}
public void onWorldSave(final WorldSaveEvent worldSaveEvent) {
@EventHandler checkSafety(worldSaveEvent);
public void onWorldSave(final WorldSaveEvent worldSaveEvent) { }
checkSafety(worldSaveEvent);
} @EventHandler
public void onWorldUnload(final WorldUnloadEvent worldUnloadEvent) {
@EventHandler checkSafety(worldUnloadEvent);
public void onWorldUnload(final WorldUnloadEvent worldUnloadEvent) { }
checkSafety(worldUnloadEvent);
} private void checkSafety(final Event eventType) {
if (Yum.mainThread != null && Thread.currentThread() != Yum.mainThread && !eventType.isAsynchronous()) {
private void checkSafety(final Event eventType) { final String eventName = eventType.getEventName();
if (Yum.mainThread != null && Thread.currentThread() != Yum.mainThread && !eventType.isAsynchronous()) { final Plugin plugin = PluginKit.getOperatePlugin();
final String eventName = eventType.getEventName(); if (plugin != null) {
final Plugin plugin = PluginKit.getOperatePlugin(); throw new IllegalAccessError("[Yum 线程安全]: 请勿异步调用一个同步事件 " + eventName + " 操作插件: " + plugin.getName());
if (plugin != null) { }
throw new IllegalAccessError("[Yum 线程安全]: 请勿异步调用一个同步事件 " + eventName + " 操作插件: " + plugin.getName()); }
} }
} }
}
}