Migrate to custom network context

This commit is contained in:
DBotThePony 2023-12-31 17:01:57 +07:00
parent b2d7f6c002
commit 242876d533
Signed by: DBot
GPG Key ID: DCC23B5715498507
15 changed files with 76 additions and 76 deletions

View File

@ -13,7 +13,6 @@ import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener
import net.minecraft.util.profiling.ProfilerFiller import net.minecraft.util.profiling.ProfilerFiller
import net.minecraftforge.event.AddReloadListenerEvent import net.minecraftforge.event.AddReloadListenerEvent
import net.minecraftforge.event.OnDatapackSyncEvent import net.minecraftforge.event.OnDatapackSyncEvent
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.PacketDistributor import net.minecraftforge.network.PacketDistributor
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.MINECRAFT_SERVER import ru.dbotthepony.mc.otm.MINECRAFT_SERVER
@ -26,6 +25,7 @@ import ru.dbotthepony.mc.otm.core.fromNetwork
import ru.dbotthepony.mc.otm.core.set import ru.dbotthepony.mc.otm.core.set
import ru.dbotthepony.mc.otm.core.toNetwork import ru.dbotthepony.mc.otm.core.toNetwork
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.onceServer import ru.dbotthepony.mc.otm.onceServer
import java.util.LinkedList import java.util.LinkedList
@ -111,12 +111,11 @@ object AndroidResearchManager : SimpleJsonResourceReloadListener(GsonBuilder().s
LOGGER.debug("Constructed android research registry packet, ${buff.writerIndex()} bytes in size") LOGGER.debug("Constructed android research registry packet, ${buff.writerIndex()} bytes in size")
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
if (NULLABLE_MINECRAFT_SERVER is IntegratedServer) { if (NULLABLE_MINECRAFT_SERVER is IntegratedServer)
return return
}
val builder = ImmutableMap.builder<ResourceLocation, AndroidResearchType>() val builder = ImmutableMap.builder<ResourceLocation, AndroidResearchType>()

View File

@ -5,7 +5,6 @@ import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.FriendlyByteBuf
import net.minecraft.world.entity.Entity import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.entity.item.ItemEntity
import net.minecraftforge.event.network.CustomPayloadEvent
import ru.dbotthepony.mc.otm.config.AndroidConfig import ru.dbotthepony.mc.otm.config.AndroidConfig
import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
@ -20,6 +19,7 @@ import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.core.position import ru.dbotthepony.mc.otm.core.position
import ru.dbotthepony.mc.otm.core.math.times import ru.dbotthepony.mc.otm.core.math.times
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.registry.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import java.util.UUID import java.util.UUID
@ -44,7 +44,7 @@ class ItemEntityDataPacket(val itemUUID: Int, val owner: UUID? = null, val age:
buff.writeBoolean(hasPickupDelay) buff.writeBoolean(hasPickupDelay)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val level = minecraft.player?.level() as ClientLevel? ?: return val level = minecraft.player?.level() as ClientLevel? ?: return
val entity = level.getEntity(itemUUID) as ItemEntity? ?: return val entity = level.getEntity(itemUUID) as ItemEntity? ?: return
datatable[entity] = SharedItemEntityData(owner, age, lifespan, hasPickupDelay) datatable[entity] = SharedItemEntityData(owner, age, lifespan, hasPickupDelay)

View File

@ -4,7 +4,6 @@ import net.minecraft.client.gui.GuiGraphics
import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.FriendlyByteBuf
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.sounds.SoundSource import net.minecraft.sounds.SoundSource
import net.minecraftforge.event.network.CustomPayloadEvent
import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact
@ -16,19 +15,19 @@ import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.core.math.Vector import ru.dbotthepony.mc.otm.core.math.Vector
import ru.dbotthepony.mc.otm.core.math.plus import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.network.MatteryPlayerNetworkChannel import ru.dbotthepony.mc.otm.network.MatteryPlayerNetworkChannel
import ru.dbotthepony.mc.otm.network.SmokeParticlesPacket import ru.dbotthepony.mc.otm.network.SmokeParticlesPacket
import ru.dbotthepony.mc.otm.registry.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MSoundEvents import ru.dbotthepony.mc.otm.registry.MSoundEvents
import java.util.function.Supplier
object TriggerJumpBoostPacket : MatteryPacket { object TriggerJumpBoostPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) { override fun write(buff: FriendlyByteBuf) {
// no op // no op
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val mattery = context.sender?.matteryPlayer ?: return val mattery = context.sender?.matteryPlayer ?: return
if (!mattery.isAndroid) if (!mattery.isAndroid)
@ -39,15 +38,13 @@ object TriggerJumpBoostPacket : MatteryPacket {
if (feature.isActive && feature.cooldown <= 4 && mattery.androidEnergy.extractEnergyExact(AndroidConfig.JumpBoost.ENERGY_COST, false)) { if (feature.isActive && feature.cooldown <= 4 && mattery.androidEnergy.extractEnergyExact(AndroidConfig.JumpBoost.ENERGY_COST, false)) {
feature.putOnCooldown() feature.putOnCooldown()
context.sender?.let { context.sender.level().playSound(
it.level().playSound( context.sender, context.sender,
it, it,
MSoundEvents.ANDROID_JUMP_BOOST, SoundSource.PLAYERS, MSoundEvents.ANDROID_JUMP_BOOST, SoundSource.PLAYERS,
1f, 1f 1f, 1f
) )
GenericNetworkChannel.makeSmoke(it, it.x, it.y, it.z) GenericNetworkChannel.makeSmoke(context.sender, context.sender.x, context.sender.y, context.sender.z)
}
} }
} }
} }

View File

@ -8,7 +8,6 @@ import net.minecraft.sounds.SoundSource
import net.minecraft.world.entity.Entity import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.monster.warden.Warden import net.minecraft.world.entity.monster.warden.Warden
import net.minecraftforge.event.network.CustomPayloadEvent
import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact
@ -26,6 +25,7 @@ import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.core.math.roundToIntVector import ru.dbotthepony.mc.otm.core.math.roundToIntVector
import ru.dbotthepony.mc.otm.core.math.times import ru.dbotthepony.mc.otm.core.math.times
import ru.dbotthepony.mc.otm.core.position import ru.dbotthepony.mc.otm.core.position
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.network.MatteryPlayerNetworkChannel import ru.dbotthepony.mc.otm.network.MatteryPlayerNetworkChannel
import ru.dbotthepony.mc.otm.network.ShockwaveEffectPacket import ru.dbotthepony.mc.otm.network.ShockwaveEffectPacket
@ -44,7 +44,7 @@ object TriggerShockwavePacket : MatteryPacket {
// no op // no op
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val shockwave = context.sender?.matteryPlayer?.getFeature(AndroidFeatures.SHOCKWAVE) ?: return val shockwave = context.sender?.matteryPlayer?.getFeature(AndroidFeatures.SHOCKWAVE) ?: return
if (!shockwave.isOnCooldown && shockwave.isActive && shockwave.airTicks > 0) { if (!shockwave.isOnCooldown && shockwave.isActive && shockwave.airTicks > 0) {

View File

@ -13,15 +13,14 @@ import net.minecraft.world.inventory.InventoryMenu
import net.minecraft.world.inventory.Slot import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraftforge.event.network.CustomPayloadEvent
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.MatterySlot
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import java.util.* import java.util.*
import java.util.function.Supplier
private val menuConfigurations = WeakHashMap<AbstractContainerMenu, MenuConfiguration>() private val menuConfigurations = WeakHashMap<AbstractContainerMenu, MenuConfiguration>()
@ -224,7 +223,7 @@ class InventoryScrollPacket(val scroll: Int) : MatteryPacket {
}.scroll = scroll }.scroll = scroll
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
play(context.sender ?: throw IllegalStateException("Illegal side")) play(context.sender ?: throw IllegalStateException("Illegal side"))
} }

View File

@ -21,7 +21,6 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider
import net.minecraftforge.common.util.LazyOptional import net.minecraftforge.common.util.LazyOptional
import net.minecraftforge.event.TickEvent import net.minecraftforge.event.TickEvent
import net.minecraftforge.event.TickEvent.ServerTickEvent import net.minecraftforge.event.TickEvent.ServerTickEvent
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.registries.ForgeRegistries import net.minecraftforge.registries.ForgeRegistries
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
@ -50,6 +49,7 @@ import ru.dbotthepony.mc.otm.isClientThread
import ru.dbotthepony.mc.otm.isServerThread import ru.dbotthepony.mc.otm.isServerThread
import ru.dbotthepony.mc.otm.lazyPerServer import ru.dbotthepony.mc.otm.lazyPerServer
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import java.util.* import java.util.*
import java.util.function.Function import java.util.function.Function
@ -372,7 +372,7 @@ class QuantumBatteryItem(val savedataID: String, val balanceValues: EnergyBalanc
buff.writeDecimal(received) buff.writeDecimal(received)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val data = type.clientData.computeIfAbsent(uuid, Function { UnboundValues(it) }) val data = type.clientData.computeIfAbsent(uuid, Function { UnboundValues(it) })
data.energy = energy data.energy = energy
data.passed = passed data.passed = passed

View File

@ -18,7 +18,6 @@ import net.minecraftforge.client.event.RenderHandEvent
import net.minecraftforge.client.event.RenderPlayerEvent import net.minecraftforge.client.event.RenderPlayerEvent
import net.minecraftforge.client.event.ViewportEvent import net.minecraftforge.client.event.ViewportEvent
import net.minecraftforge.event.TickEvent import net.minecraftforge.event.TickEvent
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.fml.LogicalSide import net.minecraftforge.fml.LogicalSide
import ru.dbotthepony.mc.otm.capability.matteryEnergy import ru.dbotthepony.mc.otm.capability.matteryEnergy
import ru.dbotthepony.mc.otm.client.font import ru.dbotthepony.mc.otm.client.font
@ -41,6 +40,7 @@ import ru.dbotthepony.mc.otm.core.nbt.ints
import ru.dbotthepony.mc.otm.core.nbt.uuids import ru.dbotthepony.mc.otm.core.nbt.uuids
import ru.dbotthepony.mc.otm.core.tagNotNull import ru.dbotthepony.mc.otm.core.tagNotNull
import ru.dbotthepony.mc.otm.core.util.formatPower import ru.dbotthepony.mc.otm.core.util.formatPower
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.network.WeaponNetworkChannel import ru.dbotthepony.mc.otm.network.WeaponNetworkChannel
import java.util.* import java.util.*
@ -60,7 +60,7 @@ enum class WeaponScopePacket(val scope: Boolean) : MatteryPacket {
buff.writeBoolean(scope) buff.writeBoolean(scope)
} }
override fun play(context: CustomPayloadEvent.Context){ override fun play(context: MNetworkContext) {
// TODO: Manual synchronization // TODO: Manual synchronization
val stack = context.sender!!.mainHandItem val stack = context.sender!!.mainHandItem
val item = stack.item as? AbstractWeaponItem<*> ?: return val item = stack.item as? AbstractWeaponItem<*> ?: return
@ -80,7 +80,7 @@ enum class WeaponFireInputPacket(val primary: Boolean) : MatteryPacket {
buff.writeBoolean(primary) buff.writeBoolean(primary)
} }
override fun play(context: CustomPayloadEvent.Context){ override fun play(context: MNetworkContext) {
// TODO: Manual synchronization // TODO: Manual synchronization
val stack = context.sender!!.mainHandItem val stack = context.sender!!.mainHandItem
val item = stack.item as? AbstractWeaponItem<*> ?: return val item = stack.item as? AbstractWeaponItem<*> ?: return
@ -91,9 +91,9 @@ enum class WeaponFireInputPacket(val primary: Boolean) : MatteryPacket {
item.dataTable = null item.dataTable = null
if (primary) if (primary)
item.tryPrimaryFire(stack, context.sender!!) item.tryPrimaryFire(stack, context.sender)
else else
item.trySecondaryFire(stack, context.sender!!) item.trySecondaryFire(stack, context.sender)
(item as AbstractWeaponItem<WeaponDataTable>).dataTable = predictedData (item as AbstractWeaponItem<WeaponDataTable>).dataTable = predictedData
} }

View File

@ -97,6 +97,7 @@ import ru.dbotthepony.mc.otm.core.util.writeCollection
import ru.dbotthepony.mc.otm.core.writeItemType import ru.dbotthepony.mc.otm.core.writeItemType
import ru.dbotthepony.mc.otm.milliTime import ru.dbotthepony.mc.otm.milliTime
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.registry.RegistryDelegate import ru.dbotthepony.mc.otm.registry.RegistryDelegate
import ru.dbotthepony.mc.otm.secondTime import ru.dbotthepony.mc.otm.secondTime
@ -1888,7 +1889,7 @@ object MatterManager {
buff.writeBytes(payload, 0, length) buff.writeBytes(payload, 0, length)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
if (SERVER_IS_LIVE) if (SERVER_IS_LIVE)
return // singleplayer or LAN host return // singleplayer or LAN host

View File

@ -24,7 +24,6 @@ import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.enchantment.EnchantmentHelper.hasBindingCurse import net.minecraft.world.item.enchantment.EnchantmentHelper.hasBindingCurse
import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraftforge.event.network.CustomPayloadEvent
import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.UpgradeType import ru.dbotthepony.mc.otm.capability.UpgradeType
@ -55,6 +54,7 @@ import ru.dbotthepony.mc.otm.core.util.NullValueCodec
import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec
import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
import ru.dbotthepony.mc.otm.network.MNetworkContext
import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MatteryPacket
import ru.dbotthepony.mc.otm.network.MenuFieldPacket import ru.dbotthepony.mc.otm.network.MenuFieldPacket
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
@ -118,9 +118,9 @@ abstract class MatteryMenu(
buff.writeBytes(payload) buff.writeBytes(payload)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val menu = context.sender?.containerMenu as? MatteryMenu ?: return val menu = context.sender?.containerMenu as? MatteryMenu ?: return
if (menu.containerId != containerId || !menu.stillValid(context.sender!!)) return if (menu.containerId != containerId || !menu.stillValid(context.sender)) return
val input = menu.playerInputs.getOrNull(inputId) ?: return val input = menu.playerInputs.getOrNull(inputId) ?: return
if (!input.test(context.sender)) return if (!input.test(context.sender)) return
input.invoke(input.codec.read(DataInputStream(FastByteArrayInputStream(payload)))) input.invoke(input.codec.read(DataInputStream(FastByteArrayInputStream(payload))))

View File

@ -11,7 +11,6 @@ import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.ClickAction import net.minecraft.world.inventory.ClickAction
import net.minecraft.world.inventory.ClickType import net.minecraft.world.inventory.ClickType
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.PacketDistributor import net.minecraftforge.network.PacketDistributor
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.addSorted import ru.dbotthepony.mc.otm.core.addSorted
@ -42,7 +41,7 @@ data class ItemViewInteractPacket(val stackID: Int, val type: ClickType, val act
buff.writeEnum(action) buff.writeEnum(action)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val sender = context.sender ?: return val sender = context.sender ?: return
if (!sender.isSpectator) { if (!sender.isSpectator) {
@ -59,7 +58,7 @@ data class ItemViewInteractPacket(val stackID: Int, val type: ClickType, val act
} }
abstract class NetworkedItemViewPacket : MatteryPacket { abstract class NetworkedItemViewPacket : MatteryPacket {
final override fun play(context: CustomPayloadEvent.Context) { final override fun play(context: MNetworkContext) {
val get = Minecraft.getInstance().player?.containerMenu ?: return val get = Minecraft.getInstance().player?.containerMenu ?: return
val view = (get as? INetworkedItemViewProvider)?.networkedItemView ?: throw IllegalStateException("No NetworkedItemView is present in currently open menu") val view = (get as? INetworkedItemViewProvider)?.networkedItemView ?: throw IllegalStateException("No NetworkedItemView is present in currently open menu")
action(view) action(view)

View File

@ -5,8 +5,6 @@ import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.PacketDistributor
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.block.entity.matter.MatterPanelBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterPanelBlockEntity
import ru.dbotthepony.mc.otm.capability.matter.* import ru.dbotthepony.mc.otm.capability.matter.*
@ -26,14 +24,13 @@ import ru.dbotthepony.mc.otm.network.*
import ru.dbotthepony.mc.otm.registry.MMenus import ru.dbotthepony.mc.otm.registry.MMenus
import java.util.* import java.util.*
import java.util.function.Predicate import java.util.function.Predicate
import java.util.function.Supplier
class CancelTaskPacket(val id: UUID) : MatteryPacket { class CancelTaskPacket(val id: UUID) : MatteryPacket {
override fun write(buff: FriendlyByteBuf) { override fun write(buff: FriendlyByteBuf) {
buff.writeUUID(id) buff.writeUUID(id)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val sender = context.sender!! val sender = context.sender!!
(sender.containerMenu as? MatterPanelMenu)?.receiveTaskCancel(sender, id) (sender.containerMenu as? MatterPanelMenu)?.receiveTaskCancel(sender, id)
} }
@ -51,7 +48,7 @@ class PatternsChangePacket(val isUpdate: Boolean, val patterns: Collection<Patte
buff.writeCollection(patterns, PatternState::write) buff.writeCollection(patterns, PatternState::write)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return
if (isUpdate) { if (isUpdate) {
@ -74,7 +71,7 @@ class TasksChangePacket(val isUpdate: Boolean, val tasks: Collection<Replication
buff.writeCollection(tasks, ReplicationTask::write) buff.writeCollection(tasks, ReplicationTask::write)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return
if (isUpdate) { if (isUpdate) {
@ -99,7 +96,7 @@ class ReplicationRequestPacket(val id: UUID, amount: Int) : MatteryPacket {
buff.writeInt(amount) buff.writeInt(amount)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val sender = context.sender ?: return val sender = context.sender ?: return
val menu = sender.containerMenu as? MatterPanelMenu ?: return val menu = sender.containerMenu as? MatterPanelMenu ?: return

View File

@ -9,7 +9,6 @@ import net.minecraft.network.FriendlyByteBuf
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.util.RandomSource import net.minecraft.util.RandomSource
import net.minecraft.world.level.Level import net.minecraft.world.level.Level
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.NetworkDirection import net.minecraftforge.network.NetworkDirection
import net.minecraftforge.network.PacketDistributor import net.minecraftforge.network.PacketDistributor
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
@ -30,7 +29,7 @@ class SmokeParticlesPacket(val x: Double, val y: Double, val z: Double) : Matter
buff.writeDouble(z) buff.writeDouble(z)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
minecraft.player?.level()?.let { minecraft.player?.level()?.let {
makeSmoke(x, y, z, it.random, it) makeSmoke(x, y, z, it.random, it)
} }
@ -100,7 +99,7 @@ class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArray, val v
} }
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
execute() execute()
} }

View File

@ -14,15 +14,25 @@ import net.minecraftforge.network.SimpleChannel
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.core.GetterSetter
import java.util.concurrent.CompletableFuture
import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.ConcurrentLinkedQueue
import java.util.concurrent.locks.LockSupport import java.util.concurrent.locks.LockSupport
import java.util.function.BiConsumer import java.util.function.BiConsumer
import java.util.function.Function import java.util.function.Function
import kotlin.reflect.KClass import kotlin.reflect.KClass
class MNetworkContext(val sender: ServerPlayer?, packetHandled: GetterSetter<Boolean>, private val enqueuer: (Runnable) -> CompletableFuture<*>) {
var packetHandled by packetHandled
fun enqueueWork(callback: Runnable): CompletableFuture<*> {
return enqueuer(callback)
}
}
interface MatteryPacket { interface MatteryPacket {
fun write(buff: FriendlyByteBuf) fun write(buff: FriendlyByteBuf)
fun play(context: CustomPayloadEvent.Context) fun play(context: MNetworkContext)
} }
abstract class MatteryNetworkChannel(val version: Int, val name: String) { abstract class MatteryNetworkChannel(val version: Int, val name: String) {
@ -76,7 +86,7 @@ abstract class MatteryNetworkChannel(val version: Int, val name: String) {
packetClass: Class<T>, packetClass: Class<T>,
writer: BiConsumer<T, FriendlyByteBuf>, writer: BiConsumer<T, FriendlyByteBuf>,
reader: Function<FriendlyByteBuf, T>, reader: Function<FriendlyByteBuf, T>,
handler: BiConsumer<T, CustomPayloadEvent.Context>, handler: (T, MNetworkContext) -> Unit,
direction: NetworkDirection? = null, direction: NetworkDirection? = null,
handleOnMainThread: Boolean = true, handleOnMainThread: Boolean = true,
) { ) {
@ -85,11 +95,12 @@ abstract class MatteryNetworkChannel(val version: Int, val name: String) {
} }
val builder = channel.messageBuilder(packetClass, direction) val builder = channel.messageBuilder(packetClass, direction)
val bridgeHandler = BiConsumer<T, CustomPayloadEvent.Context> { a, b -> handler(a, MNetworkContext(b.sender, GetterSetter.of({ b.packetHandled }, { b.packetHandled = it }), b::enqueueWork)) }
if (handleOnMainThread) { if (handleOnMainThread) {
builder.consumerMainThread(handler) builder.consumerMainThread(bridgeHandler)
} else { } else {
builder.consumerNetworkThread(handler) builder.consumerNetworkThread(bridgeHandler)
} }
builder.encoder(writer) builder.encoder(writer)

View File

@ -8,7 +8,6 @@ import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.NetworkDirection.PLAY_TO_CLIENT import net.minecraftforge.network.NetworkDirection.PLAY_TO_CLIENT
import net.minecraftforge.network.NetworkDirection.PLAY_TO_SERVER import net.minecraftforge.network.NetworkDirection.PLAY_TO_SERVER
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
@ -54,7 +53,7 @@ class MatteryPlayerFieldPacket(val bytes: ByteArray, val length: Int, val isPubl
buff.writeBytes(bytes, 0, length) buff.writeBytes(bytes, 0, length)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val player: MatteryPlayerCapability val player: MatteryPlayerCapability
if (target != null) { if (target != null) {
@ -89,7 +88,7 @@ class AndroidResearchRequestPacket(val type: AndroidResearchType) : MatteryPacke
buff.writeUtf(type.id.toString()) buff.writeUtf(type.id.toString())
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val ply = context.sender ?: return val ply = context.sender ?: return
if (ply.isSpectator) return if (ply.isSpectator) return
val android = ply.matteryPlayer ?: return val android = ply.matteryPlayer ?: return
@ -114,7 +113,7 @@ class AndroidResearchSyncPacket(val type: AndroidResearchType, val dataList: Fas
buff.writeBytes(dataList.array, 0, dataList.length) buff.writeBytes(dataList.array, 0, dataList.length)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
dataBytes ?: throw NullPointerException("No data bytes array is present") dataBytes ?: throw NullPointerException("No data bytes array is present")
val android = minecraft.player?.matteryPlayer ?: return val android = minecraft.player?.matteryPlayer ?: return
android.getResearch(type).applyNetworkPayload(ByteArrayInputStream(dataBytes)) android.getResearch(type).applyNetworkPayload(ByteArrayInputStream(dataBytes))
@ -137,7 +136,7 @@ class AndroidFeatureSyncPacket(val type: AndroidFeatureType<*>, val dataList: Fa
buff.writeBytes(dataList.array, 0, dataList.length) buff.writeBytes(dataList.array, 0, dataList.length)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
dataBytes ?: throw NullPointerException("No data bytes array is present") dataBytes ?: throw NullPointerException("No data bytes array is present")
val android = minecraft.player?.matteryPlayer ?: return val android = minecraft.player?.matteryPlayer ?: return
android.computeIfAbsent(type).applyNetworkPayload(ByteArrayInputStream(dataBytes)) android.computeIfAbsent(type).applyNetworkPayload(ByteArrayInputStream(dataBytes))
@ -158,7 +157,7 @@ class AndroidFeatureRemovePacket(val type: AndroidFeatureType<*>) : MatteryPacke
buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type)) buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type))
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val android = minecraft.player?.matteryPlayer ?: return val android = minecraft.player?.matteryPlayer ?: return
android.removeFeature(type) android.removeFeature(type)
} }
@ -181,7 +180,7 @@ class PlayerIterationPacket(val iteration: Int, val deathLog: List<Pair<Int, Com
} }
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
MatteryGUI.iteration = iteration MatteryGUI.iteration = iteration
@ -213,7 +212,7 @@ class ExopackCarriedPacket(val itemStack: ItemStack, val containerState: Int) :
buff.writeInt(containerState) buff.writeInt(containerState)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val mattery = minecraft.player?.matteryPlayer ?: return val mattery = minecraft.player?.matteryPlayer ?: return
if (mattery.hasExopack) { if (mattery.hasExopack) {
@ -236,7 +235,7 @@ class ExopackSlotPacket(val slotId: Int, val itemStack: ItemStack, val container
buff.writeInt(containerState) buff.writeInt(containerState)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
if (slotId < 0) { if (slotId < 0) {
LOGGER.error("Unknown slot with ID {} in exosuit menu", slotId) LOGGER.error("Unknown slot with ID {} in exosuit menu", slotId)
return return
@ -281,7 +280,7 @@ class ExopackMenuInitPacket(val slots: List<ItemStack>, val carried: ItemStack,
buff.writeInt(containerState) buff.writeInt(containerState)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val mattery = minecraft.player?.matteryPlayer ?: return val mattery = minecraft.player?.matteryPlayer ?: return
if (mattery.hasExopack) { if (mattery.hasExopack) {
@ -309,7 +308,7 @@ class ExopackMenuInitPacket(val slots: List<ItemStack>, val carried: ItemStack,
object ExopackMenuOpen : MatteryPacket { object ExopackMenuOpen : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val player = context.sender ?: return val player = context.sender ?: return
val mattery = player.matteryPlayer ?: return val mattery = player.matteryPlayer ?: return
@ -325,7 +324,7 @@ class SwitchAndroidFeaturePacket(val type: AndroidFeatureType<*>, val newState:
buff.writeBoolean(newState) buff.writeBoolean(newState)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val matteryPlayer = context.sender?.matteryPlayer ?: return val matteryPlayer = context.sender?.matteryPlayer ?: return
if (!matteryPlayer.isAndroid) { if (!matteryPlayer.isAndroid) {
@ -358,7 +357,7 @@ class ActivateAndroidFeaturePacket(val type: AndroidFeatureType<*>) : MatteryPac
buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type)) buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type))
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val matteryPlayer = context.sender?.matteryPlayer ?: return val matteryPlayer = context.sender?.matteryPlayer ?: return
if (!matteryPlayer.isAndroid || matteryPlayer.ply.isSpectator) { if (!matteryPlayer.isAndroid || matteryPlayer.ply.isSpectator) {
@ -388,7 +387,7 @@ class PickItemFromInventoryPacket(
buff.writeVarInt(sourceExosuitSlot) buff.writeVarInt(sourceExosuitSlot)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
val player = context.sender ?: return val player = context.sender ?: return
val mattery = player.matteryPlayer ?: return val mattery = player.matteryPlayer ?: return
@ -422,7 +421,7 @@ class GlitchPacket(val millis: Long) : MatteryPacket {
buff.writeVarLong(millis) buff.writeVarLong(millis)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
GlitchRenderer.glitchFor(millis) GlitchRenderer.glitchFor(millis)
} }
@ -441,7 +440,7 @@ class ShockwaveEffectPacket(val pos: Vector) : MatteryPacket {
buff.writeDouble(pos.z) buff.writeDouble(pos.z)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
ShockwaveRenderer.handle(this) ShockwaveRenderer.handle(this)
} }
@ -456,7 +455,7 @@ class ShockwaveEffectPacket(val pos: Vector) : MatteryPacket {
object DisplayExopackPacket : MatteryPacket { object DisplayExopackPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.isExopackVisible = true context.sender?.matteryPlayer?.isExopackVisible = true
} }
@ -465,7 +464,7 @@ object DisplayExopackPacket : MatteryPacket {
object HideExopackPacket : MatteryPacket { object HideExopackPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.isExopackVisible = false context.sender?.matteryPlayer?.isExopackVisible = false
} }
@ -474,7 +473,7 @@ object HideExopackPacket : MatteryPacket {
object EnableExopackGlowPacket : MatteryPacket { object EnableExopackGlowPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.exopackGlows = true context.sender?.matteryPlayer?.exopackGlows = true
} }
@ -483,7 +482,7 @@ object EnableExopackGlowPacket : MatteryPacket {
object DisableExopackGlowPacket : MatteryPacket { object DisableExopackGlowPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.exopackGlows = false context.sender?.matteryPlayer?.exopackGlows = false
} }
@ -492,7 +491,7 @@ object DisableExopackGlowPacket : MatteryPacket {
object ResetExopackColorPacket : MatteryPacket { object ResetExopackColorPacket : MatteryPacket {
override fun write(buff: FriendlyByteBuf) {} override fun write(buff: FriendlyByteBuf) {}
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.exopackColor = null context.sender?.matteryPlayer?.exopackColor = null
} }
@ -505,7 +504,7 @@ data class SetExopackColorPacket(val color: RGBAColor) : MatteryPacket {
buff.writeFloat(color.blue) buff.writeFloat(color.blue)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
context.sender?.matteryPlayer?.exopackColor = color context.sender?.matteryPlayer?.exopackColor = color
} }
@ -522,7 +521,7 @@ data class ExopackSmokePacket(val player: UUID) : MatteryPacket {
buff.writeUUID(player) buff.writeUUID(player)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
context.packetHandled = true context.packetHandled = true
// minecraft.player?.level()?.getPlayerByUUID(player)?.matteryPlayer?.spawnExopackSmoke = true // minecraft.player?.level()?.getPlayerByUUID(player)?.matteryPlayer?.spawnExopackSmoke = true

View File

@ -3,7 +3,6 @@ package ru.dbotthepony.mc.otm.network
import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.FriendlyByteBuf
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.event.network.CustomPayloadEvent
import net.minecraftforge.network.NetworkDirection import net.minecraftforge.network.NetworkDirection
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
@ -29,7 +28,7 @@ class MenuFieldPacket(val containerId: Int, val bytes: ByteArray, val length: In
buff.writeBytes(bytes, 0, length) buff.writeBytes(bytes, 0, length)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
if (containerId == ExopackInventoryMenu.CONTAINER_ID) { if (containerId == ExopackInventoryMenu.CONTAINER_ID) {
minecraft.player?.matteryPlayer?.exoPackMenu?.mSynchronizer?.read(ByteArrayInputStream(bytes, 0, length)) minecraft.player?.matteryPlayer?.exoPackMenu?.mSynchronizer?.read(ByteArrayInputStream(bytes, 0, length))
} else { } else {
@ -54,7 +53,7 @@ class SetCarriedPacket(val item: ItemStack) : MatteryPacket {
buff.writeItem(item) buff.writeItem(item)
} }
override fun play(context: CustomPayloadEvent.Context) { override fun play(context: MNetworkContext) {
minecraft.player?.containerMenu?.carried = item minecraft.player?.containerMenu?.carried = item
} }