Skip to content

Commit

Permalink
feat: hello channels registration (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
zly2006 committed Nov 11, 2023
1 parent 1f6503f commit cccd293
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 34 deletions.
4 changes: 3 additions & 1 deletion src/main/java/com/github/zly2006/reden/access/ServerData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,19 @@ import com.github.zly2006.reden.debugger.stages.ServerRootStage
import com.github.zly2006.reden.debugger.tree.StageTree
import com.github.zly2006.reden.utils.isClient
import com.github.zly2006.reden.utils.server
import net.fabricmc.loader.api.Version
import net.minecraft.client.MinecraftClient
import net.minecraft.server.MinecraftServer
import java.util.*

class ServerData(server: MinecraftServer?) : StatusAccess {
class ServerData(version: Version, server: MinecraftServer?) : StatusAccess {
@JvmField var realTicks = 0
override var status: Long = 0
var uuid: UUID? = null
var address: String = ""
var tickStage = if (server != null) ServerRootStage(server) else null
var tickStageTree = StageTree()
val featureSet = mutableSetOf<String>()

val breakpoints = BreakpointsManager()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.github.zly2006.reden.malilib
import com.github.zly2006.reden.Reden
import com.github.zly2006.reden.Sounds
import com.github.zly2006.reden.access.PlayerData.Companion.data
import com.github.zly2006.reden.access.ServerData.Companion.serverData
import com.github.zly2006.reden.gui.CreditScreen
import com.github.zly2006.reden.mixinhelper.StructureBlockHelper
import com.github.zly2006.reden.network.RvcDataS2CPacket
Expand All @@ -14,6 +15,7 @@ import com.github.zly2006.reden.rvc.gui.SelectionListScreen
import com.github.zly2006.reden.rvc.gui.selectedStructure
import com.github.zly2006.reden.rvc.remote.github.GithubAuthScreen
import com.github.zly2006.reden.sponsor.SponsorScreen
import com.github.zly2006.reden.utils.red
import com.github.zly2006.reden.utils.sendMessage
import com.github.zly2006.reden.utils.toBlockPos
import fi.dy.masa.malilib.gui.GuiConfigsBase
Expand All @@ -34,6 +36,10 @@ fun configureKeyCallbacks(mc: MinecraftClient) {
true
}
UNDO_KEY.keybind.setCallback { _, _ ->
if (mc.serverData()?.featureSet?.contains("undo") != true) {
mc.player?.sendMessage(Text.literal("Sorry, this server doesn't support undo.").red(), true)
return@setCallback false
}
onFunctionUsed("undo")
val playSound = Random.nextInt(100) < EASTER_EGG_RATE.integerValue
if (playSound) mc.world!!.playSound(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.zly2006.reden.mixin.common;

import com.github.zly2006.reden.Reden;
import com.github.zly2006.reden.access.ServerData;
import com.github.zly2006.reden.carpet.RedenCarpetSettings;
import com.github.zly2006.reden.debugger.stages.block.AbstractBlockUpdateStage;
Expand All @@ -15,15 +16,7 @@

@Mixin(MinecraftServer.class)
public abstract class MixinServer implements ServerData.ServerDataAccess {
@Unique ServerData serverData = new ServerData((MinecraftServer) (Object) this);

@Inject(
method = "tick",
at = @At("HEAD")
)
private void beforeTick(BooleanSupplier shouldKeepTicking, CallbackInfo ci) {
serverData.getTickStage().setShouldKeepTicking(shouldKeepTicking);
}
@Unique ServerData serverData = new ServerData(Reden.MOD_VERSION, (MinecraftServer) (Object) this);

@Inject(
method = "tick",
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/github/zly2006/reden/network/Channels.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ val TNT_SYNC_PACKET = Reden.identifier("tnt_sync_packet")
val RVC_DATA_SYNC = Reden.identifier("rvc_data_sync")
val RVC_TRACKPOINTS_C2S = Reden.identifier("rvc_trackpoints_c2s")
fun register() {
Hello.register()
TagBlockPos.register()
Undo.register()
UpdateBreakpointPacket.register()
Expand Down
48 changes: 43 additions & 5 deletions src/main/java/com/github/zly2006/reden/network/Hello.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.github.zly2006.reden.network
import com.github.zly2006.reden.Reden
import com.github.zly2006.reden.access.ServerData
import com.github.zly2006.reden.utils.isClient
import com.github.zly2006.reden.utils.translateMessage
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
import net.fabricmc.fabric.api.networking.v1.FabricPacket
import net.fabricmc.fabric.api.networking.v1.PacketType
Expand All @@ -12,28 +13,65 @@ import net.minecraft.client.MinecraftClient
import net.minecraft.network.PacketByteBuf

class Hello(
val version: Version
val version: Version,
val featureSet: Set<String>,
): FabricPacket {
override fun write(buf: PacketByteBuf) {
buf.writeString(version.toString())
buf.writeVarInt(featureSet.size)
featureSet.forEach {
buf.writeString(it)
}
}
override fun getType(): PacketType<*> = pType

companion object {
private val id = Reden.identifier("hello")
private val pType = PacketType.create(id) {
Hello(Version.parse(it.readString()))
private val pType = PacketType.create(id) { buf ->
val version = Version.parse(buf.readString())
val featureSet = mutableSetOf<String>()
repeat(buf.readVarInt()) {
featureSet.add(buf.readString())
}
Hello(version, featureSet)
}
fun register() {
if (isClient) {
ClientPlayNetworking.registerGlobalReceiver(pType) { packet, _, _ ->
Reden.LOGGER.info("Hello from server: ${packet.version}")
val mc = MinecraftClient.getInstance()
(mc as ServerData.ClientSideServerDataAccess).redenServerData = ServerData(null)
(mc as ServerData.ClientSideServerDataAccess).redenServerData =
ServerData(packet.version, null).apply {
featureSet.addAll(packet.featureSet)
}
packet.featureSet.forEach { name ->
when (name) {
"undo" -> ClientPlayNetworking.registerReceiver(Undo.pType) { packet, player, _ ->
player.sendMessage(
when (packet.status) {
0 -> translateMessage("undo", "rollback_success")
1 -> translateMessage("undo", "restore_success")
2 -> translateMessage("undo", "no_blocks_info")
16 -> translateMessage("undo", "no_permission")
32 -> translateMessage("undo", "not_recording")
64 -> translateMessage("undo", "busy")
65536 -> translateMessage("undo", "unknown_error")
else -> translateMessage("undo", "unknown_status")
}
)
}
}
}
}
}
ServerPlayConnectionEvents.JOIN.register { _, sender, _ ->
sender.sendPacket(Hello(Reden.MOD_VERSION))
sender.sendPacket(Hello(Reden.MOD_VERSION, setOf(
"reden",
"undo",
"hopper-cd",
"experimental:debugger",
"experimental:pearl",
)))
}
}
}
Expand Down
23 changes: 4 additions & 19 deletions src/main/java/com/github/zly2006/reden/network/Undo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ import com.github.zly2006.reden.Reden
import com.github.zly2006.reden.access.PlayerData
import com.github.zly2006.reden.access.PlayerData.Companion.data
import com.github.zly2006.reden.mixinhelper.UpdateMonitorHelper
import com.github.zly2006.reden.utils.*
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
import com.github.zly2006.reden.utils.debugLogger
import com.github.zly2006.reden.utils.server
import com.github.zly2006.reden.utils.setBlockNoPP
import net.fabricmc.fabric.api.networking.v1.FabricPacket
import net.fabricmc.fabric.api.networking.v1.PacketType
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
Expand All @@ -29,7 +30,7 @@ class Undo(

companion object {
val id = Reden.identifier("undo")
private val pType = PacketType.create(id) {
val pType = PacketType.create(id) {
Undo(it.readVarInt())
}
private fun operate(world: ServerWorld, record: PlayerData.UndoRedoRecord, redoRecord: PlayerData.RedoRecord?) {
Expand Down Expand Up @@ -150,22 +151,6 @@ class Undo(
else -> sendStatus(65536)
}
}
if (isClient) {
ClientPlayNetworking.registerGlobalReceiver(pType) { packet, player, res ->
player.sendMessage(
when (packet.status) {
0 -> translateMessage("undo", "rollback_success")
1 -> translateMessage("undo", "restore_success")
2 -> translateMessage("undo", "no_blocks_info")
16 -> translateMessage("undo", "no_permission")
32 -> translateMessage("undo", "not_recording")
64 -> translateMessage("undo", "busy")
65536 -> translateMessage("undo", "unknown_error")
else -> translateMessage("undo", "unknown_status")
}
)
}
}
}
}
}

0 comments on commit cccd293

Please sign in to comment.