Skip to content

Commit e7bce40

Browse files
committed
sync server config
1 parent 53c8c6a commit e7bce40

File tree

7 files changed

+146
-20
lines changed

7 files changed

+146
-20
lines changed

src/main/java/com/possible_triangle/create_jetpack/CreateJetpackMod.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import net.minecraftforge.fml.common.Mod;
44
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
57

68
@Mod.EventBusSubscriber
79
@Mod(CreateJetpackMod.MOD_ID)
810
public class CreateJetpackMod {
911

1012
public static final String MOD_ID = "create_jetpack";
13+
public static final Logger LOGGER = LogManager.getLogger();
1114

1215
public CreateJetpackMod() {
1316
var eventBus = FMLJavaModLoadingContext.get().getModEventBus();

src/main/kotlin/com/possible_triangle/create_jetpack/Content.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ object Content {
131131
LOADING_CONTEXT.registerConfig(ModConfig.Type.COMMON, Configs.SERVER_SPEC)
132132
LOADING_CONTEXT.registerConfig(ModConfig.Type.CLIENT, Configs.CLIENT_SPEC)
133133

134+
Configs.Network.register()
135+
134136
modBus.addListener { _: FMLCommonSetupEvent ->
135137
ModNetwork.init()
136138
}
@@ -149,6 +151,7 @@ object Content {
149151
FORGE_BUS.addListener(ControlManager::onLogout)
150152

151153
FORGE_BUS.addListener(JetpackLogic::tick)
154+
FORGE_BUS.addListener(Configs::syncConfig)
152155
FORGE_BUS.addGenericListener(ItemStack::class.java) { event: AttachCapabilitiesEvent<ItemStack> ->
153156
attachCapabilities(event.`object`, event::addCapability)
154157
}

src/main/kotlin/com/possible_triangle/create_jetpack/capability/JetpackLogic.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ import net.minecraft.world.phys.Vec3
2121
import net.minecraftforge.common.ForgeMod
2222
import net.minecraftforge.common.capabilities.ICapabilityProvider
2323
import net.minecraftforge.event.TickEvent
24-
import net.minecraftforge.fml.common.Mod
2524
import java.util.*
2625
import kotlin.math.max
2726
import kotlin.math.min
2827

29-
@Mod.EventBusSubscriber
3028
object JetpackLogic {
3129

3230
private val DIRECTIONS = listOf(
Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
package com.possible_triangle.create_jetpack.config
22

3+
import com.possible_triangle.create_jetpack.CreateJetpackMod
4+
import com.possible_triangle.create_jetpack.CreateJetpackMod.MOD_ID
5+
import net.minecraft.resources.ResourceLocation
6+
import net.minecraft.server.level.ServerPlayer
37
import net.minecraftforge.common.ForgeConfigSpec
8+
import net.minecraftforge.event.entity.player.PlayerEvent
9+
import net.minecraftforge.network.NetworkRegistry
10+
import net.minecraftforge.network.PacketDistributor
411

512
object Configs {
613

714
var SERVER_SPEC: ForgeConfigSpec
815
private set
9-
var SERVER: ServerConfig
10-
private set
16+
17+
private var LOCAL_SERVER: ServerConfig
18+
internal var SYNCED_SERVER: IServerConfig? = null
19+
20+
val SERVER: IServerConfig
21+
get() = SYNCED_SERVER ?: LOCAL_SERVER
1122

1223
var CLIENT_SPEC: ForgeConfigSpec
1324
private set
@@ -16,7 +27,7 @@ object Configs {
1627

1728
init {
1829
with(ForgeConfigSpec.Builder().configure { ServerConfig(it) }) {
19-
SERVER = left
30+
LOCAL_SERVER = left
2031
SERVER_SPEC = right
2132
}
2233

@@ -26,4 +37,31 @@ object Configs {
2637
}
2738
}
2839

40+
fun syncConfig(event: PlayerEvent.PlayerLoggedInEvent) {
41+
val player = event.player
42+
if (player !is ServerPlayer) return
43+
CreateJetpackMod.LOGGER.debug("Sending server config to ${player.scoreboardName}")
44+
Network.CHANNEL.send(PacketDistributor.PLAYER.with { player }, SyncConfigMessage(LOCAL_SERVER))
45+
}
46+
47+
object Network {
48+
private const val version = "1.0"
49+
internal val CHANNEL = NetworkRegistry.newSimpleChannel(
50+
ResourceLocation(MOD_ID, "configs"),
51+
{ version },
52+
version::equals,
53+
version::equals
54+
)
55+
56+
fun register() {
57+
CHANNEL.registerMessage(
58+
0,
59+
SyncConfigMessage::class.java,
60+
SyncConfigMessage::encode,
61+
SyncConfigMessage::decode,
62+
SyncConfigMessage::handle
63+
)
64+
}
65+
}
66+
2967
}

src/main/kotlin/com/possible_triangle/create_jetpack/config/ServerConfig.kt

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,48 @@ package com.possible_triangle.create_jetpack.config
22

33
import net.minecraftforge.common.ForgeConfigSpec
44

5-
class ServerConfig(builder: ForgeConfigSpec.Builder) {
5+
interface IServerConfig {
6+
val usesPerTank: Int
7+
val usesPerTankHover: Int
8+
val horizontalSpeed: Double
9+
val verticalSpeed: Double
10+
val acceleration: Double
11+
val hoverSpeed: Double
12+
val swimModifier: Double
13+
}
614

7-
val USES_PER_TANK = builder.defineInRange("air.uses_per_tank", 2048, 1, Integer.MAX_VALUE)
8-
val USES_PER_TANK_HOVER = builder.defineInRange("air.uses_per_tank_hover", 2048 * 10, 1, Integer.MAX_VALUE)
15+
data class SyncedConfig(
16+
override val usesPerTank: Int,
17+
override val usesPerTankHover: Int,
18+
override val horizontalSpeed: Double,
19+
override val verticalSpeed: Double,
20+
override val acceleration: Double,
21+
override val hoverSpeed: Double,
22+
override val swimModifier: Double,
23+
) : IServerConfig
924

10-
val HORIZONTAL_SPEED = builder.defineInRange("speed.horizontal", 0.02, 0.01, 100.0)
11-
val VERTICAL_SPEED = builder.defineInRange("speed.vertical", 0.4, 0.01, 100.0)
12-
val ACCELERATION = builder.defineInRange("speed.acceleration", 0.6, 0.01, 100.0)
13-
val HOVER_SPEED = builder.defineInRange("speed.hover_descend", -0.03, -100.0, 0.0)
14-
val SWIM_MODIFIER = builder.defineInRange("speed.swim_modifier", 1.8, 0.0, 100.0)
25+
class ServerConfig(builder: ForgeConfigSpec.Builder) : IServerConfig {
26+
27+
private val usesPerTankValue = builder.defineInRange("air.uses_per_tank", 2048, 1, Integer.MAX_VALUE)
28+
override val usesPerTank get() = usesPerTankValue.get()!!
29+
30+
private val usesPerTankHoverValue =
31+
builder.defineInRange("air.uses_per_tank_hover", 2048 * 10, 1, Integer.MAX_VALUE)
32+
override val usesPerTankHover get() = usesPerTankHoverValue.get()!!
33+
34+
private val horizontalSpeedValue = builder.defineInRange("speed.horizontal", 0.02, 0.01, 100.0)
35+
override val horizontalSpeed get() = horizontalSpeedValue.get()!!
36+
37+
private val verticalSpeedValue = builder.defineInRange("speed.vertical", 0.4, 0.01, 100.0)
38+
override val verticalSpeed get() = verticalSpeedValue.get()!!
39+
40+
private val accelerationValue = builder.defineInRange("speed.acceleration", 0.6, 0.01, 100.0)
41+
override val acceleration get() = accelerationValue.get()!!
42+
43+
private val hoverSpeedValue = builder.defineInRange("speed.hover_descend", -0.03, -100.0, 0.0)
44+
override val hoverSpeed get() = hoverSpeedValue.get()!!
45+
46+
private val swimModifierValue = builder.defineInRange("speed.swim_modifier", 1.8, 0.0, 100.0)
47+
override val swimModifier get() = swimModifierValue.get()!!
1548

1649
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.possible_triangle.create_jetpack.config
2+
3+
import com.possible_triangle.create_jetpack.CreateJetpackMod
4+
import net.minecraft.network.FriendlyByteBuf
5+
import net.minecraftforge.network.NetworkDirection
6+
import net.minecraftforge.network.NetworkEvent.Context
7+
import java.util.function.Supplier
8+
9+
class SyncConfigMessage (private val config: IServerConfig) {
10+
11+
companion object {
12+
13+
fun decode(buf: FriendlyByteBuf): SyncConfigMessage {
14+
val config = SyncedConfig(
15+
usesPerTank = buf.readInt(),
16+
usesPerTankHover = buf.readInt(),
17+
horizontalSpeed = buf.readDouble(),
18+
verticalSpeed = buf.readDouble(),
19+
acceleration = buf.readDouble(),
20+
hoverSpeed = buf.readDouble(),
21+
swimModifier = buf.readDouble(),
22+
)
23+
return SyncConfigMessage(config)
24+
}
25+
}
26+
27+
fun encode(buf: FriendlyByteBuf) {
28+
buf.writeInt(config.usesPerTank)
29+
buf.writeInt(config.usesPerTankHover)
30+
buf.writeDouble(config.horizontalSpeed)
31+
buf.writeDouble(config.verticalSpeed)
32+
buf.writeDouble(config.acceleration)
33+
buf.writeDouble(config.hoverSpeed)
34+
buf.writeDouble(config.swimModifier)
35+
}
36+
37+
fun handle(context: Supplier<Context>) {
38+
with(context.get()) {
39+
enqueueWork {
40+
if (direction == NetworkDirection.PLAY_TO_CLIENT) {
41+
CreateJetpackMod.LOGGER.debug("Hover speed: ${config.hoverSpeed}")
42+
Configs.SYNCED_SERVER = config
43+
} else {
44+
CreateJetpackMod.LOGGER.debug("Received server config of $direction")
45+
}
46+
}
47+
packetHandled = true
48+
}
49+
}
50+
51+
}

src/main/kotlin/com/possible_triangle/create_jetpack/item/BronzeJetpack.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ class BronzeJetpack(properties: Properties, blockItem: ItemEntry<CopperBacktankB
2020
private val capability = LazyOptional.of<IJetpack> { this }
2121

2222
override fun hoverSpeed(context: Context): Double {
23-
return Configs.SERVER.HOVER_SPEED.get()
23+
return Configs.SERVER.hoverSpeed
2424
}
2525

2626
override fun verticalSpeed(context: Context): Double {
27-
return Configs.SERVER.VERTICAL_SPEED.get()
27+
return Configs.SERVER.verticalSpeed
2828
}
2929

3030
override fun activeType(context: Context): ControlType {
@@ -36,15 +36,15 @@ class BronzeJetpack(properties: Properties, blockItem: ItemEntry<CopperBacktankB
3636
}
3737

3838
override fun horizontalSpeed(context: Context): Double {
39-
return Configs.SERVER.HORIZONTAL_SPEED.get()
39+
return Configs.SERVER.horizontalSpeed
4040
}
4141

4242
override fun acceleration(context: Context): Double {
43-
return Configs.SERVER.ACCELERATION.get()
43+
return Configs.SERVER.acceleration
4444
}
4545

4646
override fun swimModifier(context: Context): Double {
47-
return Configs.SERVER.SWIM_MODIFIER.get()
47+
return Configs.SERVER.swimModifier
4848
}
4949

5050
private val thrusters = listOf(-0.35, 0.35).map { offset ->
@@ -59,8 +59,8 @@ class BronzeJetpack(properties: Properties, blockItem: ItemEntry<CopperBacktankB
5959
}
6060

6161
private fun usesPerTank(context: Context): Int {
62-
return if (isHovering(context)) Configs.SERVER.USES_PER_TANK_HOVER.get()
63-
else Configs.SERVER.USES_PER_TANK.get()
62+
return if (isHovering(context)) Configs.SERVER.usesPerTankHover
63+
else Configs.SERVER.usesPerTank
6464
}
6565

6666
override fun isValid(context: Context): Boolean {

0 commit comments

Comments
 (0)