[ minecraft - forge 1.16 ]クライアントからの爆発を確認します.
以下の手順ではクライアント側で サーバ側に サーバー側で爆発を起こします. コードはKotlinで書かれます.
まず、
このイベントはクライアント側でのみ発生します.
Explosion Mod
を作りました.PlayerInteractEvent.LeftClickEmpty
を受け取ります.ExplosionMessage
を送ります.まず、
ExplosionMessage
クラスを作成します.class ExplosionMessage(
val x: Double,
val y: Double,
val z: Double
) {
companion object {
fun encode(message: ExplosionMessage, buf: PacketBuffer) {
buf.writeDouble(message.x)
buf.writeDouble(message.y)
buf.writeDouble(message.z)
}
fun from(buf: PacketBuffer): ExplosionMessage {
return ExplosionMessage(
buf.readDouble(),
buf.readDouble(),
buf.readDouble()
)
}
}
}
準備完了.class ExampleMod {
private val channel: SimpleChannel = NetworkRegistry.newSimpleChannel(
ResourceLocation(MOD_ID, "main"),
{ PROTOCOL_VERSION },
PROTOCOL_VERSION::equals,
PROTOCOL_VERSION::equals
)
init {
channel.registerMessage(
0,
ExplosionMessage::class.java,
ExplosionMessage::encode,
ExplosionMessage::from,
this::handle
)
MinecraftForge.EVENT_BUS.register(this)
}
...
SimpleChannel
.このイベントはクライアント側でのみ発生します.
@SubscribeEvent
fun on(event: PlayerInteractEvent.LeftClickEmpty) {
val loc = Minecraft.getInstance().hitResult?.location
if (loc == null) {
return
}
logger.info("ExplosionMessage send: ${loc?.x} ${loc?.y} ${loc?.z} ")
channel.sendToServer(ExplosionMessage(loc.x, loc.y, loc.z))
}
ハンドルPlayerInteractEvent.LeftClickEmpty
. fun handle(message: ExplosionMessage, context: Supplier<NetworkEvent.Context>) {
logger.info("ExplosionMessage received: ${message.x} ${message.y} ${message.z} ")
ServerLifecycleHooks.getCurrentServer().overworld().explode(
null,
message.x,
message.y,
message.z,
4.0F,
Explosion.Mode.BREAK
)
}
今我々は我々が欲しい任意の場所を爆発することができます!
Reference
この問題について([ minecraft - forge 1.16 ]クライアントからの爆発を確認します.), 我々は、より多くの情報をここで見つけました https://dev.to/nshmura/minecraft-forge-1-16-make-explosion-from-client-12d6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol