Giter VIP home page Giter VIP logo

feathermorph's Introduction

cover

Pic

客户端集成Mod | Wiki (施工中)

~ 72变,但是MC ~


功能和特色

  • 变形成游戏中的各种生物

  • 支持伪装为玩家!

  • 能增强使用体验的客户端集成,例如伪装选择界面和技能快捷键

  • 多语言支持!根据玩家客户端语言自动切换!

  • 涵盖了绝大多数原版特性的技能和天赋实现

  • 聊天覆盖 —— 在聊天中伪装自己的名称

  • 交互镜像 —— 将你的操作镜像到别人的身上 (好像这两个都不太属于一个变形插件该有的功能

依赖

此插件需要以下这些东西来正常运作:

  • 一个Paper系(Paper或基于Paper)的服务端

为了在服务端向其他人显示伪装,我们需要以下这些插件:

若要运行之前的版本(非1.x和0.13.x),还需安装LibsDisguises

下载

Available on Modrinth Available on GitHub

Modrinth | GitHub(中文更新日志可在这里查看)


快速上手

  1. 你可以通过 /morph 指令来使用变形功能,用 /unmorph 来变回自己

  2. 如果没有安装客户端集成,默认情况下使用技能的方法是手持羽毛潜行+使用

  3. 默认情况下,客户端集成打开选择界面的按键是 N,使用技能是 V,你可以在键位设置中了解更多

  4. 你可以用 /request 指令来管理交换请求,接受别人的交换请求后双方都可以变成对方的样子

  5. 插件的剩余指令均在 /fm(或 /feathermorph)中,你可以通过 help 子指令来查看更多信息

  6. 插件的大多数功能都可以通过指令配置,用法是 /fm option <id> <值>

注意!

  • 如果不安装ProtocolLib插件也能运行,但需要依赖客户端集成来向别人显示伪装

  • 若服务器安装了其他聊天插件,聊天覆盖功能可能会失效!


构建

#!/usr/bin/env bash
git clone https://github.com/XiaMoZhiShi/FeatherMorph
cd FeatherMorph

./gradlew build --no-daemon

生成的文件将位于build/libs中,FeatherMorph-x.x.x.jar就是构建出来的插件。

feathermorph's People

Contributors

matrix-feather avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

feathermorph's Issues

Folia下处于不同region是交互模拟会报错

[15:54:28 ERROR]: Thread Region Scheduler Thread #0 failed main thread check: Cannot getEntities asynchronously
java.lang.Throwable: null
        at io.papermc.paper.util.TickThread.ensureTickThread(TickThread.java:85) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.world.level.Level.getEntities(Level.java:1579) ~[?:?]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.getNearbyEntities(CraftWorld.java:1146) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTraceEntities(CraftWorld.java:1198) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTrace(CraftWorld.java:1282) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTrace(CraftWorld.java:1266) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at xiamomc.morph.misc.PlayerOperationSimulator.rayTrace(PlayerOperationSimulator.java:84) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.misc.PlayerOperationSimulator.simulateLeftClick(PlayerOperationSimulator.java:113) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.events.InteractionMirrorProcessor.simulateOperation(InteractionMirrorProcessor.java:432) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.events.InteractionMirrorProcessor.onPlayerInteract(InteractionMirrorProcessor.java:291) ~[FeatherMorph-1.0.14.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor328.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:77) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:git-Luminol-"7293124"]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:594) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:550) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:545) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:541) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleAnimate(ServerGamePacketListenerImpl.java:2575) ~[?:?]
        at net.minecraft.network.protocol.game.ServerboundSwingPacket.handle(ServerboundSwingPacket.java:25) ~[?:?]
        at net.minecraft.network.protocol.game.ServerboundSwingPacket.a(ServerboundSwingPacket.java:11) ~[?:?]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$2(PacketUtils.java:102) ~[?:?]
        at io.papermc.paper.threadedregions.EntityScheduler.executeTick(EntityScheduler.java:173) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1648) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:408) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:404) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool$TickThreadRunner.run(SchedulerThreadPool.java:525) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]
[15:54:28 ERROR]: Could not pass event PlayerInteractEvent to FeatherMorph v1.0.14
java.lang.IllegalStateException: Cannot getEntities asynchronously
        at io.papermc.paper.util.TickThread.ensureTickThread(TickThread.java:86) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.world.level.Level.getEntities(Level.java:1579) ~[?:?]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.getNearbyEntities(CraftWorld.java:1146) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTraceEntities(CraftWorld.java:1198) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTrace(CraftWorld.java:1282) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.CraftWorld.rayTrace(CraftWorld.java:1266) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at xiamomc.morph.misc.PlayerOperationSimulator.rayTrace(PlayerOperationSimulator.java:84) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.misc.PlayerOperationSimulator.simulateLeftClick(PlayerOperationSimulator.java:113) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.events.InteractionMirrorProcessor.simulateOperation(InteractionMirrorProcessor.java:432) ~[FeatherMorph-1.0.14.jar:?]
        at xiamomc.morph.events.InteractionMirrorProcessor.onPlayerInteract(InteractionMirrorProcessor.java:291) ~[FeatherMorph-1.0.14.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor328.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:77) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:git-Luminol-"7293124"]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[luminol-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:594) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:550) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:545) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:541) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleAnimate(ServerGamePacketListenerImpl.java:2575) ~[?:?]
        at net.minecraft.network.protocol.game.ServerboundSwingPacket.handle(ServerboundSwingPacket.java:25) ~[?:?]
        at net.minecraft.network.protocol.game.ServerboundSwingPacket.a(ServerboundSwingPacket.java:11) ~[?:?]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$2(PacketUtils.java:102) ~[?:?]
        at io.papermc.paper.threadedregions.EntityScheduler.executeTick(EntityScheduler.java:173) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1648) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:408) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:404) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool$TickThreadRunner.run(SchedulerThreadPool.java:525) ~[luminol-1.20.4.jar:git-Luminol-"7293124"]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]

question permissions

I have a question and that is that I want to give the users the disguises by permission what would be the permission that I would have to give them so that for example they can transform into the allay?

residence的nofly flag对伪装不起作用

即使打开领地的nofly玩家也能飞。把Multiverse-Core中世界选项的的allowFlight改成false也没用。
现在玩家能飞出主城,所以把伪装飞行关了。
但是这样在生存世界就不能飞行,除了用屏障把主城顶封起来再设置worldborder没什么解决办法。
如果可以希望加一个特定世界的配置功能,例如特定世界禁用伪装或者禁用飞行之类的

folia 报错

[FeatherMorph] Unhandled exception number 1024 occurred in onPacketSending(PacketEvent) for FeatherMorph
java.lang.IllegalStateException: Asynchronous Chunk getEntities call!
at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[luminol-1.20.4.jar:git-Luminol-"59a428e"]
at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:2832) ~[?:?]
at net.minecraft.server.level.ServerLevel.getEntity(ServerLevel.java:2246) ~[?:?]
at xiamomc.morph.backends.server.renderer.network.listeners.ProtocolListener.getNmsEntityFrom(ProtocolListener.java:56) ~[FeatherMor
ph-1.0.7-folia.jar:?]
at xiamomc.morph.backends.server.renderer.network.listeners.MetaPacketListener.onMetaPacket(MetaPacketListener.java:44) ~[FeatherMor
ph-1.0.7-folia.jar:?]
at xiamomc.morph.backends.server.renderer.network.listeners.MetaPacketListener.onPacketSending(MetaPacketListener.java:38) ~[Feather
Morph-1.0.7-folia.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:219) ~[ProtocolLib .
jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokeUnpackedPacketSending(SortedPacketListenerList.java:204) ~[Protoco
lLib .jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:160) ~[ProtocolLib .ja
r:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:139) ~[ProtocolLib .ja
r:?]
at com.comphenix.protocol.injector.PacketFilterManager.postPacketToListeners(PacketFilterManager.java:553) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:526) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.injector.netty.manager.NetworkManagerInjector.onPacketSending(NetworkManagerInjector.java:100) ~[ProtocolL
ib .jar:?]
at com.comphenix.protocol.injector.netty.channel.NettyChannelInjector.processOutbound(NettyChannelInjector.java:553) ~[ProtocolLib .
jar:?]
at com.comphenix.protocol.injector.netty.channel.NettyChannelInjector$2.doProxyRunnable(NettyChannelInjector.java:456) ~[ProtocolLib
.jar:?]
at com.comphenix.protocol.injector.netty.channel.NettyEventLoopProxy.proxyRunnable(NettyEventLoopProxy.java:43) ~[ProtocolLib .jar:?
]
at com.comphenix.protocol.injector.netty.channel.NettyEventLoopProxy.execute(NettyEventLoopProxy.java:252) ~[ProtocolLib .jar:?]
at net.minecraft.network.Connection.sendPacket(Connection.java:459) ~[?:?]
at net.minecraft.network.Connection$PacketSendAction.lambda$new$0(Connection.java:1043) ~[?:?]
at net.minecraft.network.Connection$WrappedConsumer.accept(Connection.java:1027) ~[?:?]
at net.minecraft.network.Connection.processQueue(Connection.java:590) ~[?:?]
at net.minecraft.network.Connection.flushQueue(Connection.java:547) ~[?:?]
at net.minecraft.network.Connection.send(Connection.java:438) ~[?:?]
at net.minecraft.server.network.ServerCommonPacketListenerImpl.send(ServerCommonPacketListenerImpl.java:295) ~[luminol-1.20.4.jar:gi
t-Luminol-"59a428e"]
at net.minecraft.server.network.ServerCommonPacketListenerImpl.send(ServerCommonPacketListenerImpl.java:280) ~[luminol-1.20.4.jar:gi
t-Luminol-"59a428e"]
at com.comphenix.protocol.reflect.accessors.DefaultMethodAccessor.invoke(DefaultMethodAccessor.java:23) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.injector.netty.channel.NettyChannelInjector.sendServerPacket(NettyChannelInjector.java:285) ~[ProtocolLib
.jar:?]
at com.comphenix.protocol.injector.netty.manager.NetworkManagerPlayerInjector.sendServerPacket(NetworkManagerPlayerInjector.java:59)
~[ProtocolLib .jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.sendServerPacket(PacketFilterManager.java:183) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.AsyncMarker.sendPacket(AsyncMarker.java:388) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.PacketSendingQueue.sendPacket(PacketSendingQueue.java:276) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.PacketSendingQueue.processPacketHolder(PacketSendingQueue.java:219) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.PacketSendingQueue.trySendPackets(PacketSendingQueue.java:140) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.PacketSendingQueue.signalPacketUpdate(PacketSendingQueue.java:102) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.AsyncFilterManager.signalPacketTransmission(AsyncFilterManager.java:437) ~[ProtocolLib .jar:?]
at com.comphenix.protocol.async.AsyncFilterManager.signalPacketTransmission(AsyncFilterManager.java:397) ~[ProtocolLib .jar:?]
at net.imprex.orebfuscator.obfuscation.ObfuscationListenerAsync.postChunkProcessing(ObfuscationListenerAsync.java:37) ~[orebfuscator
-plugin-5.4.3.jar:?]
at net.imprex.orebfuscator.obfuscation.ObfuscationListener.complete(ObfuscationListener.java:139) ~[orebfuscator-plugin-5.4.3.jar:?]
at net.imprex.orebfuscator.obfuscation.ObfuscationListener.lambda$onPacketSending$1(ObfuscationListener.java:101) ~[orebfuscator-plu
gin-5.4.3.jar:?]
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179) ~[?:?]
at net.imprex.orebfuscator.obfuscation.ObfuscationRequest.complete(ObfuscationRequest.java:72) ~[orebfuscator-plugin-5.4.3.jar:?]
at net.imprex.orebfuscator.cache.ObfuscationCache.lambda$get$0(ObfuscationCache.java:65) ~[orebfuscator-plugin-5.4.3.jar:?]
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150) ~[?:?]
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483) ~[?:?]
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387) ~[?:?]
at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312) ~[?:?]
at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843) ~[?:?]
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808) ~[?:?]
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188) ~[?:?]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.