Migrate to custom network context
This commit is contained in:
parent
b2d7f6c002
commit
242876d533
@ -13,7 +13,6 @@ import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener
|
||||
import net.minecraft.util.profiling.ProfilerFiller
|
||||
import net.minecraftforge.event.AddReloadListenerEvent
|
||||
import net.minecraftforge.event.OnDatapackSyncEvent
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.network.PacketDistributor
|
||||
import org.apache.logging.log4j.LogManager
|
||||
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.toNetwork
|
||||
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.onceServer
|
||||
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")
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
|
||||
if (NULLABLE_MINECRAFT_SERVER is IntegratedServer) {
|
||||
if (NULLABLE_MINECRAFT_SERVER is IntegratedServer)
|
||||
return
|
||||
}
|
||||
|
||||
val builder = ImmutableMap.builder<ResourceLocation, AndroidResearchType>()
|
||||
|
||||
|
@ -5,7 +5,6 @@ import net.minecraft.client.multiplayer.ClientLevel
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.world.entity.Entity
|
||||
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.android.AndroidSwitchableFeature
|
||||
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.math.times
|
||||
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.registry.AndroidFeatures
|
||||
import java.util.UUID
|
||||
@ -44,7 +44,7 @@ class ItemEntityDataPacket(val itemUUID: Int, val owner: UUID? = null, val age:
|
||||
buff.writeBoolean(hasPickupDelay)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val level = minecraft.player?.level() as ClientLevel? ?: return
|
||||
val entity = level.getEntity(itemUUID) as ItemEntity? ?: return
|
||||
datatable[entity] = SharedItemEntityData(owner, age, lifespan, hasPickupDelay)
|
||||
|
@ -4,7 +4,6 @@ import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
|
||||
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.plus
|
||||
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.MatteryPlayerNetworkChannel
|
||||
import ru.dbotthepony.mc.otm.network.SmokeParticlesPacket
|
||||
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
|
||||
import ru.dbotthepony.mc.otm.registry.MSoundEvents
|
||||
import java.util.function.Supplier
|
||||
|
||||
object TriggerJumpBoostPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {
|
||||
// no op
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val mattery = context.sender?.matteryPlayer ?: return
|
||||
|
||||
if (!mattery.isAndroid)
|
||||
@ -39,15 +38,13 @@ object TriggerJumpBoostPacket : MatteryPacket {
|
||||
if (feature.isActive && feature.cooldown <= 4 && mattery.androidEnergy.extractEnergyExact(AndroidConfig.JumpBoost.ENERGY_COST, false)) {
|
||||
feature.putOnCooldown()
|
||||
|
||||
context.sender?.let {
|
||||
it.level().playSound(
|
||||
it, it,
|
||||
MSoundEvents.ANDROID_JUMP_BOOST, SoundSource.PLAYERS,
|
||||
1f, 1f
|
||||
)
|
||||
context.sender.level().playSound(
|
||||
context.sender, context.sender,
|
||||
MSoundEvents.ANDROID_JUMP_BOOST, SoundSource.PLAYERS,
|
||||
1f, 1f
|
||||
)
|
||||
|
||||
GenericNetworkChannel.makeSmoke(it, it.x, it.y, it.z)
|
||||
}
|
||||
GenericNetworkChannel.makeSmoke(context.sender, context.sender.x, context.sender.y, context.sender.z)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
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.capability.MatteryPlayerCapability
|
||||
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.times
|
||||
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.MatteryPlayerNetworkChannel
|
||||
import ru.dbotthepony.mc.otm.network.ShockwaveEffectPacket
|
||||
@ -44,7 +44,7 @@ object TriggerShockwavePacket : MatteryPacket {
|
||||
// no op
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val shockwave = context.sender?.matteryPlayer?.getFeature(AndroidFeatures.SHOCKWAVE) ?: return
|
||||
|
||||
if (!shockwave.isOnCooldown && shockwave.isActive && shockwave.airTicks > 0) {
|
||||
|
@ -13,15 +13,14 @@ import net.minecraft.world.inventory.InventoryMenu
|
||||
import net.minecraft.world.inventory.Slot
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
|
||||
import ru.dbotthepony.mc.otm.capability.matteryPlayer
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu
|
||||
import ru.dbotthepony.mc.otm.menu.MatterySlot
|
||||
import ru.dbotthepony.mc.otm.network.MNetworkContext
|
||||
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
||||
import java.util.*
|
||||
import java.util.function.Supplier
|
||||
|
||||
private val menuConfigurations = WeakHashMap<AbstractContainerMenu, MenuConfiguration>()
|
||||
|
||||
@ -224,7 +223,7 @@ class InventoryScrollPacket(val scroll: Int) : MatteryPacket {
|
||||
}.scroll = scroll
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
play(context.sender ?: throw IllegalStateException("Illegal side"))
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,6 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider
|
||||
import net.minecraftforge.common.util.LazyOptional
|
||||
import net.minecraftforge.event.TickEvent
|
||||
import net.minecraftforge.event.TickEvent.ServerTickEvent
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.registries.ForgeRegistries
|
||||
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
||||
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.lazyPerServer
|
||||
import ru.dbotthepony.mc.otm.network.GenericNetworkChannel
|
||||
import ru.dbotthepony.mc.otm.network.MNetworkContext
|
||||
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
||||
import java.util.*
|
||||
import java.util.function.Function
|
||||
@ -372,7 +372,7 @@ class QuantumBatteryItem(val savedataID: String, val balanceValues: EnergyBalanc
|
||||
buff.writeDecimal(received)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val data = type.clientData.computeIfAbsent(uuid, Function { UnboundValues(it) })
|
||||
data.energy = energy
|
||||
data.passed = passed
|
||||
|
@ -18,7 +18,6 @@ import net.minecraftforge.client.event.RenderHandEvent
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent
|
||||
import net.minecraftforge.client.event.ViewportEvent
|
||||
import net.minecraftforge.event.TickEvent
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.fml.LogicalSide
|
||||
import ru.dbotthepony.mc.otm.capability.matteryEnergy
|
||||
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.tagNotNull
|
||||
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.WeaponNetworkChannel
|
||||
import java.util.*
|
||||
@ -60,7 +60,7 @@ enum class WeaponScopePacket(val scope: Boolean) : MatteryPacket {
|
||||
buff.writeBoolean(scope)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context){
|
||||
override fun play(context: MNetworkContext) {
|
||||
// TODO: Manual synchronization
|
||||
val stack = context.sender!!.mainHandItem
|
||||
val item = stack.item as? AbstractWeaponItem<*> ?: return
|
||||
@ -80,7 +80,7 @@ enum class WeaponFireInputPacket(val primary: Boolean) : MatteryPacket {
|
||||
buff.writeBoolean(primary)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context){
|
||||
override fun play(context: MNetworkContext) {
|
||||
// TODO: Manual synchronization
|
||||
val stack = context.sender!!.mainHandItem
|
||||
val item = stack.item as? AbstractWeaponItem<*> ?: return
|
||||
@ -91,9 +91,9 @@ enum class WeaponFireInputPacket(val primary: Boolean) : MatteryPacket {
|
||||
item.dataTable = null
|
||||
|
||||
if (primary)
|
||||
item.tryPrimaryFire(stack, context.sender!!)
|
||||
item.tryPrimaryFire(stack, context.sender)
|
||||
else
|
||||
item.trySecondaryFire(stack, context.sender!!)
|
||||
item.trySecondaryFire(stack, context.sender)
|
||||
|
||||
(item as AbstractWeaponItem<WeaponDataTable>).dataTable = predictedData
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ import ru.dbotthepony.mc.otm.core.util.writeCollection
|
||||
import ru.dbotthepony.mc.otm.core.writeItemType
|
||||
import ru.dbotthepony.mc.otm.milliTime
|
||||
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.registry.RegistryDelegate
|
||||
import ru.dbotthepony.mc.otm.secondTime
|
||||
@ -1888,7 +1889,7 @@ object MatterManager {
|
||||
buff.writeBytes(payload, 0, length)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
if (SERVER_IS_LIVE)
|
||||
return // singleplayer or LAN host
|
||||
|
||||
|
@ -24,7 +24,6 @@ import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.enchantment.EnchantmentHelper.hasBindingCurse
|
||||
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.MatteryCapability
|
||||
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.menu.input.InstantBooleanInput
|
||||
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.MenuFieldPacket
|
||||
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
|
||||
@ -118,9 +118,9 @@ abstract class MatteryMenu(
|
||||
buff.writeBytes(payload)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
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
|
||||
if (!input.test(context.sender)) return
|
||||
input.invoke(input.codec.read(DataInputStream(FastByteArrayInputStream(payload))))
|
||||
|
@ -11,7 +11,6 @@ import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.inventory.ClickAction
|
||||
import net.minecraft.world.inventory.ClickType
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.network.PacketDistributor
|
||||
import ru.dbotthepony.mc.otm.client.minecraft
|
||||
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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val sender = context.sender ?: return
|
||||
|
||||
if (!sender.isSpectator) {
|
||||
@ -59,7 +58,7 @@ data class ItemViewInteractPacket(val stackID: Int, val type: ClickType, val act
|
||||
}
|
||||
|
||||
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 view = (get as? INetworkedItemViewProvider)?.networkedItemView ?: throw IllegalStateException("No NetworkedItemView is present in currently open menu")
|
||||
action(view)
|
||||
|
@ -5,8 +5,6 @@ import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.player.Inventory
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.network.PacketDistributor
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.block.entity.matter.MatterPanelBlockEntity
|
||||
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 java.util.*
|
||||
import java.util.function.Predicate
|
||||
import java.util.function.Supplier
|
||||
|
||||
class CancelTaskPacket(val id: UUID) : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {
|
||||
buff.writeUUID(id)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val sender = context.sender!!
|
||||
(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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return
|
||||
|
||||
if (isUpdate) {
|
||||
@ -74,7 +71,7 @@ class TasksChangePacket(val isUpdate: Boolean, val tasks: Collection<Replication
|
||||
buff.writeCollection(tasks, ReplicationTask::write)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val menu = minecraft.player?.containerMenu as? MatterPanelMenu ?: return
|
||||
|
||||
if (isUpdate) {
|
||||
@ -99,7 +96,7 @@ class ReplicationRequestPacket(val id: UUID, amount: Int) : MatteryPacket {
|
||||
buff.writeInt(amount)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val sender = context.sender ?: return
|
||||
val menu = sender.containerMenu as? MatterPanelMenu ?: return
|
||||
|
||||
|
@ -9,7 +9,6 @@ import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.network.NetworkDirection
|
||||
import net.minecraftforge.network.PacketDistributor
|
||||
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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
minecraft.player?.level()?.let {
|
||||
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()
|
||||
}
|
||||
|
||||
|
@ -14,15 +14,25 @@ import net.minecraftforge.network.SimpleChannel
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
|
||||
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.locks.LockSupport
|
||||
import java.util.function.BiConsumer
|
||||
import java.util.function.Function
|
||||
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 {
|
||||
fun write(buff: FriendlyByteBuf)
|
||||
fun play(context: CustomPayloadEvent.Context)
|
||||
fun play(context: MNetworkContext)
|
||||
}
|
||||
|
||||
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>,
|
||||
writer: BiConsumer<T, FriendlyByteBuf>,
|
||||
reader: Function<FriendlyByteBuf, T>,
|
||||
handler: BiConsumer<T, CustomPayloadEvent.Context>,
|
||||
handler: (T, MNetworkContext) -> Unit,
|
||||
direction: NetworkDirection? = null,
|
||||
handleOnMainThread: Boolean = true,
|
||||
) {
|
||||
@ -85,11 +95,12 @@ abstract class MatteryNetworkChannel(val version: Int, val name: String) {
|
||||
}
|
||||
|
||||
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) {
|
||||
builder.consumerMainThread(handler)
|
||||
builder.consumerMainThread(bridgeHandler)
|
||||
} else {
|
||||
builder.consumerNetworkThread(handler)
|
||||
builder.consumerNetworkThread(bridgeHandler)
|
||||
}
|
||||
|
||||
builder.encoder(writer)
|
||||
|
@ -8,7 +8,6 @@ import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.player.Inventory
|
||||
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_SERVER
|
||||
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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val player: MatteryPlayerCapability
|
||||
|
||||
if (target != null) {
|
||||
@ -89,7 +88,7 @@ class AndroidResearchRequestPacket(val type: AndroidResearchType) : MatteryPacke
|
||||
buff.writeUtf(type.id.toString())
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val ply = context.sender ?: return
|
||||
if (ply.isSpectator) 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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
dataBytes ?: throw NullPointerException("No data bytes array is present")
|
||||
val android = minecraft.player?.matteryPlayer ?: return
|
||||
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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
dataBytes ?: throw NullPointerException("No data bytes array is present")
|
||||
val android = minecraft.player?.matteryPlayer ?: return
|
||||
android.computeIfAbsent(type).applyNetworkPayload(ByteArrayInputStream(dataBytes))
|
||||
@ -158,7 +157,7 @@ class AndroidFeatureRemovePacket(val type: AndroidFeatureType<*>) : MatteryPacke
|
||||
buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type))
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val android = minecraft.player?.matteryPlayer ?: return
|
||||
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
|
||||
|
||||
MatteryGUI.iteration = iteration
|
||||
@ -213,7 +212,7 @@ class ExopackCarriedPacket(val itemStack: ItemStack, val containerState: Int) :
|
||||
buff.writeInt(containerState)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val mattery = minecraft.player?.matteryPlayer ?: return
|
||||
|
||||
if (mattery.hasExopack) {
|
||||
@ -236,7 +235,7 @@ class ExopackSlotPacket(val slotId: Int, val itemStack: ItemStack, val container
|
||||
buff.writeInt(containerState)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
if (slotId < 0) {
|
||||
LOGGER.error("Unknown slot with ID {} in exosuit menu", slotId)
|
||||
return
|
||||
@ -281,7 +280,7 @@ class ExopackMenuInitPacket(val slots: List<ItemStack>, val carried: ItemStack,
|
||||
buff.writeInt(containerState)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val mattery = minecraft.player?.matteryPlayer ?: return
|
||||
|
||||
if (mattery.hasExopack) {
|
||||
@ -309,7 +308,7 @@ class ExopackMenuInitPacket(val slots: List<ItemStack>, val carried: ItemStack,
|
||||
object ExopackMenuOpen : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val player = context.sender ?: return
|
||||
val mattery = player.matteryPlayer ?: return
|
||||
|
||||
@ -325,7 +324,7 @@ class SwitchAndroidFeaturePacket(val type: AndroidFeatureType<*>, val newState:
|
||||
buff.writeBoolean(newState)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val matteryPlayer = context.sender?.matteryPlayer ?: return
|
||||
|
||||
if (!matteryPlayer.isAndroid) {
|
||||
@ -358,7 +357,7 @@ class ActivateAndroidFeaturePacket(val type: AndroidFeatureType<*>) : MatteryPac
|
||||
buff.writeInt(MRegistry.ANDROID_FEATURES.getID(type))
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val matteryPlayer = context.sender?.matteryPlayer ?: return
|
||||
|
||||
if (!matteryPlayer.isAndroid || matteryPlayer.ply.isSpectator) {
|
||||
@ -388,7 +387,7 @@ class PickItemFromInventoryPacket(
|
||||
buff.writeVarInt(sourceExosuitSlot)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
val player = context.sender ?: return
|
||||
val mattery = player.matteryPlayer ?: return
|
||||
|
||||
@ -422,7 +421,7 @@ class GlitchPacket(val millis: Long) : MatteryPacket {
|
||||
buff.writeVarLong(millis)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
GlitchRenderer.glitchFor(millis)
|
||||
}
|
||||
@ -441,7 +440,7 @@ class ShockwaveEffectPacket(val pos: Vector) : MatteryPacket {
|
||||
buff.writeDouble(pos.z)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
ShockwaveRenderer.handle(this)
|
||||
}
|
||||
@ -456,7 +455,7 @@ class ShockwaveEffectPacket(val pos: Vector) : MatteryPacket {
|
||||
object DisplayExopackPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.isExopackVisible = true
|
||||
}
|
||||
@ -465,7 +464,7 @@ object DisplayExopackPacket : MatteryPacket {
|
||||
object HideExopackPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.isExopackVisible = false
|
||||
}
|
||||
@ -474,7 +473,7 @@ object HideExopackPacket : MatteryPacket {
|
||||
object EnableExopackGlowPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.exopackGlows = true
|
||||
}
|
||||
@ -483,7 +482,7 @@ object EnableExopackGlowPacket : MatteryPacket {
|
||||
object DisableExopackGlowPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.exopackGlows = false
|
||||
}
|
||||
@ -492,7 +491,7 @@ object DisableExopackGlowPacket : MatteryPacket {
|
||||
object ResetExopackColorPacket : MatteryPacket {
|
||||
override fun write(buff: FriendlyByteBuf) {}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.exopackColor = null
|
||||
}
|
||||
@ -505,7 +504,7 @@ data class SetExopackColorPacket(val color: RGBAColor) : MatteryPacket {
|
||||
buff.writeFloat(color.blue)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
context.sender?.matteryPlayer?.exopackColor = color
|
||||
}
|
||||
@ -522,7 +521,7 @@ data class ExopackSmokePacket(val player: UUID) : MatteryPacket {
|
||||
buff.writeUUID(player)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
context.packetHandled = true
|
||||
// minecraft.player?.level()?.getPlayerByUUID(player)?.matteryPlayer?.spawnExopackSmoke = true
|
||||
|
||||
|
@ -3,7 +3,6 @@ package ru.dbotthepony.mc.otm.network
|
||||
import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraftforge.event.network.CustomPayloadEvent
|
||||
import net.minecraftforge.network.NetworkDirection
|
||||
import ru.dbotthepony.mc.otm.capability.matteryPlayer
|
||||
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)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
if (containerId == ExopackInventoryMenu.CONTAINER_ID) {
|
||||
minecraft.player?.matteryPlayer?.exoPackMenu?.mSynchronizer?.read(ByteArrayInputStream(bytes, 0, length))
|
||||
} else {
|
||||
@ -54,7 +53,7 @@ class SetCarriedPacket(val item: ItemStack) : MatteryPacket {
|
||||
buff.writeItem(item)
|
||||
}
|
||||
|
||||
override fun play(context: CustomPayloadEvent.Context) {
|
||||
override fun play(context: MNetworkContext) {
|
||||
minecraft.player?.containerMenu?.carried = item
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user