应该如何防止玩家使用外挂的某些功能崩服(服务器不禁止外挂)
服务器版本:1.12.2
Crash Report:
服务器版本:1.12.2
Crash Report:
| ---- Minecraft Crash Report ---- // Surprise! Haha. Well, this is awkward. Time: 21-2-15 下午2:36 Description: Exception while ticking a block java.lang.NullPointerException: Exception while ticking a block at net.minecraft.server.v1_12_R1.DispenserRegistry$c.b(DispenserRegistry.java:765) at net.minecraft.server.v1_12_R1.DispenseBehaviorItem.a(DispenseBehaviorItem.java:13) at net.minecraft.server.v1_12_R1.BlockDispenser.dispense(BlockDispenser.java:87) at net.minecraft.server.v1_12_R1.BlockDispenser.b(BlockDispenser.java:113) at net.minecraft.server.v1_12_R1.WorldServer.a(WorldServer.java:773) at net.minecraft.server.v1_12_R1.WorldServer.doTick(WorldServer.java:312) at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:801) at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) at java.lang.Thread.run(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Server thread Stacktrace: at net.minecraft.server.v1_12_R1.DispenserRegistry$c.b(DispenserRegistry.java:765) at net.minecraft.server.v1_12_R1.DispenseBehaviorItem.a(DispenseBehaviorItem.java:13) at net.minecraft.server.v1_12_R1.BlockDispenser.dispense(BlockDispenser.java:87) at net.minecraft.server.v1_12_R1.BlockDispenser.b(BlockDispenser.java:113) -- Block being ticked -- Details: Block: minecraft:dispenser[facing=up,triggered=true] Block location: World: (69488,255,22596), Chunk: (at 0,15,4 in 4343,1412; contains blocks 69488,0,22592 to 69503,255,22607), Region: (135,44; contains chunks 4320,1408 to 4351,1439, blocks 69120,0,22528 to 69631,255,23039) Stacktrace: at net.minecraft.server.v1_12_R1.WorldServer.a(WorldServer.java:773) at net.minecraft.server.v1_12_R1.WorldServer.doTick(WorldServer.java:312) -- Affected level -- Details: Level name: world All players: 1 total; [EntityPlayer['xiaojin2009'/343, l='world', x=69490.40, y=255.00, z=22596.44](xiaojin2009 at 69490.4019913708,255.0,22596.44257720194)] Chunk stats: ServerChunkCache: 697 Drop: 0 Level seed: 2998001 Level generator: ID 00 - default, ver 1. Features enabled: true Level generator options: Level spawn location: World: (137,64,251), Chunk: (at 9,4,11 in 8,15; contains blocks 128,0,240 to 143,255,255), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Level time: 174542 game time, 174542 day time Level dimension: 0 Level storage version: 0x04ABD - Anvil Level weather: Rain time: 61275 (now: false), thunder time: 6941 (now: false) Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false Stacktrace: at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:801) at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) at java.lang.Thread.run(Unknown Source) -- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Windows Server 2019 (amd64) version 10.0 Java Version: 1.8.0_251, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 94197328 bytes (89 MB) / 526061568 bytes (501 MB) up to 2112618496 bytes (2014 MB) JVM Flags: 14 total; -Xincgc -Xmx2G -Xms512M -Xss512K -XX:+AggressiveOpts -XX:+UseCompressedOops -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=2 -XX:CMSInitiatingOccupancyFraction=70 -XX:-DisableExplicitGC -XX:TargetSurvivorRatio=90 IntCache: cache: 5, tcache: 0, allocated: 12, tallocated: 94 CraftBukkit Information: Running: CraftBukkit version git-Spigot-79a30d7-acbc348 (MC: 1.12.2) (Implementing API version 1.12.2-R0.1-SNAPSHOT) false Plugins: { CoreProtect v2.14.3 net.coreprotect.CoreProtect [Intelli], AntiWDL v1.0 net.andylizi.antiwdl.AntiWDL [andylizi], PlayerHeads v5.2.1-fifteen-1 org.shininet.bukkit.playerheads.PlayerHeads [meiskam, zand, crashdemons], WorldEdit v6.1.9;caf0ad9 com.sk89q.worldedit.bukkit.WorldEditPlugin [], SkinsRestorer v13.8.8 skinsrestorer.bukkit.SkinsRestorer [Th3Tr0LLeR, McLive, DoNotSpamPls, knat], antiRedstoneClock v1.0.5 com.trafalcraft.antiRedstoneClock.Main [Amosar], Essentials v2.17.0.0 com.earth2me.essentials.Essentials [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, md678685], DAutoMessage v1.4 yt.hang.dautomessage.DAutoMessage [Hang], GroupManager v3.1 org.anjocaido.groupmanager.GroupManager [HappyAreaBean], Bless v0.1 dim.www.bless [], ClearLag v3.2.2 me.minebuilders.clearlag.Clearlag [bob7l], AntiFlowDown v1.0.0 com.willzcode.AntiFlowDown [willz], AT v0.3 me.Brian.at.Main [[Brian, fyfly, nFeng, connection_lost, Bryan_lzh]], BetterRTP v2.8.2 me.SuperRonanCraft.BetterRTP.Main [SuperRonanCraft], ConsoleSpamFix v1.7.3 net.craftersland.consolefix.CSF [CraftersLand], ProtocolLib v4.4.0 com.comphenix.protocol.ProtocolLib [dmulloy2, comphenix],} Warnings: DEFAULT Reload Count: 0 Threads: { TIMED_WAITING Thread-10: [java.lang.Thread.sleep(Native Method), net.coreprotect.consumer.Consumer.run(Consumer.java:105), java.lang.Thread.run(Unknown Source)], TIMED_WAITING File IO Thread: [java.lang.Thread.sleep(Native Method), net.minecraft.server.v1_12_R1.FileIOThread.c(SourceFile:44), net.minecraft.server.v1_12_R1.FileIOThread.run(SourceFile:30), java.lang.Thread.run(Unknown Source)], RUNNABLE Signal Dispatcher: [], WAITING NonBlockingInputStreamThread: [java.lang.Object.wait(Native Method), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.run(NonBlockingInputStream.java:278), java.lang.Thread.run(Unknown Source)], TIMED_WAITING pool-11-thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source), java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source), java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Thread-9: [java.lang.Thread.sleep(Native Method), net.coreprotect.thread.CacheCleanUp.run(CacheCleanUp.java:15), java.lang.Thread.run(Unknown Source)], RUNNABLE Attach Listener: [], RUNNABLE Netty Server IO #0: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62), io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:753), io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:409), io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884), java.lang.Thread.run(Unknown Source)], RUNNABLE Server thread: [java.lang.Thread.dumpThreads(Native Method), java.lang.Thread.getAllStackTraces(Unknown Source), org.bukkit.craftbukkit.v1_12_R1.CraftCrashReport.call(CraftCrashReport.java:30), net.minecraft.server.v1_12_R1.CrashReportSystemDetails.a(SourceFile:78), net.minecraft.server.v1_12_R1.CrashReport.h(CrashReport.java:128), net.minecraft.server.v1_12_R1.CrashReport.<init>(CrashReport.java:35), net.minecraft.server.v1_12_R1.CrashReport.a(CrashReport.java:322), net.minecraft.server.v1_12_R1.WorldServer.a(WorldServer.java:775), net.minecraft.server.v1_12_R1.WorldServer.doTick(WorldServer.java:312), net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:801), net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406), net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679), net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Server Infinisleeper: [java.lang.Thread.sleep(Native Method), net.minecraft.server.v1_12_R1.DedicatedServer$1.run(DedicatedServer.java:60)], TIMED_WAITING Spigot Watchdog Thread: [java.lang.Thread.sleep(Native Method), org.spigotmc.WatchdogThread.run(WatchdogThread.java:92)], RUNNABLE Server console handler: [org.fusesource.jansi.internal.Kernel32.ReadConsoleInputW(Native Method), org.fusesource.jansi.internal.Kernel32.readConsoleInputHelper(Kernel32.java:761), org.fusesource.jansi.internal.Kernel32.readConsoleKeyInput(Kernel32.java:794), org.fusesource.jansi.internal.WindowsSupport.readConsoleInput(WindowsSupport.java:97), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.readConsoleInput(WindowsTerminal.java:215), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.access$000(WindowsTerminal.java:55), org.bukkit.craftbukkit.libs.jline.WindowsTerminal$1.read(WindowsTerminal.java:157), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:169), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:137), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:246), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:2145), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2349), net.minecraft.server.v1_12_R1.DedicatedServer$2.run(DedicatedServer.java:85)], WAITING pool-9-thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Abandoned connection cleanup thread: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(Unknown Source), com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], RUNNABLE DestroyJavaVM: [], WAITING Thread-4: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), com.mojang.util.QueueLogAppender.getNextLogEvent(QueueLogAppender.java:77), org.bukkit.craftbukkit.v1_12_R1.util.TerminalConsoleWriterThread.run(TerminalConsoleWriterThread.java:27), java.lang.Thread.run(Unknown Source)], WAITING Reference Handler: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Unknown Source), java.lang.ref.Reference.tryHandlePending(Unknown Source), java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)], WAITING Finalizer: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)], TIMED_WAITING ObjectCleanerThread: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(Unknown Source), io.netty.util.internal.ObjectCleaner$1.run(ObjectCleaner.java:54), io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Spigot Metrics Thread: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], RUNNABLE Netty Server IO #3: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62), io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:753), io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:409), io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Craft Scheduler Thread - 0: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source), java.util.concurrent.SynchronousQueue.poll(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], RUNNABLE Netty Server IO #1: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62), io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:753), io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:409), io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884), java.lang.Thread.run(Unknown Source)], RUNNABLE Netty Server IO #2: [sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), sun.nio.ch.SelectorImpl.select(Unknown Source), io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62), io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:753), io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:409), io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Timer-0: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], TIMED_WAITING Downloader 5: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source), java.util.concurrent.SynchronousQueue.poll(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], WAITING Chunk I/O Executor Thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Downloader 4: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source), java.util.concurrent.SynchronousQueue.poll(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Snooper Timer: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], TIMED_WAITING pool-10-thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source), java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source), java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Timer-1: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)],} Recent tasks from 1383-1413{Essentials:com.earth2me.essentials.EssentialsPlayerListener$1@544,} Profiler Position: N/A (disabled) Player Count: 3 / 20; [EntityPlayer['liumoumou'/236, l='world_the_end', x=2983.76, y=136.17, z=4845.98](liumoumou at 2983.7630396985455,136.16773175314464,4845.976337457759), EntityPlayer['KRIGERNMLG'/315, l='world_the_end', x=-3739.68, y=94.82, z=-4072.99](KRIGERNMLG at -3739.6793359509647,94.82457022862695,-4072.990685732501), EntityPlayer['xiaojin2009'/343, l='world', x=69490.40, y=255.00, z=22596.44](xiaojin2009 at 69490.4019913708,255.0,22596.44257720194)] Is Modded: Definitely; Server brand changed to 'Spigot' Type: Dedicated Server (map_server.txt) |
本帖最后由 名副其实 于 2021-2-15 15:52 编辑
此并非外挂,这是一个波及到大部分依赖 Spigot API 的恶性 BUG
具体修复请看 SpigotMC 官网
此外,依赖 Spigot API 的 CatServer 已对这个 BUG 进行了预先的修复,目前 GitHub 上已经有人就此问题提出了 issue
预计不久之后这个 BUG 将被完全修复
此并非外挂,这是一个波及到大部分依赖 Spigot API 的恶性 BUG
具体修复请看 SpigotMC 官网
此外,依赖 Spigot API 的 CatServer 已对这个 BUG 进行了预先的修复,目前 GitHub 上已经有人就此问题提出了 issue
预计不久之后这个 BUG 将被完全修复
我就只看懂了NullPointerException。应该是放置了什么方块导致蹦服的
名副其实 发表于 2021-2-15 15:41
此并非外挂,这是一个波及到大部分依赖 Spigot API 的恶性 BUG
具体修复请看 SpigotMC 官网
此外,依赖 Spi ...
目前有什么临时的解决方案吗
可以暂时禁止玩家使用发射器