Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 17 additions & 20 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,37 @@ anvilgui = "1.10.3-SNAPSHOT"
compose = "1.8.2"
coroutines = "1.10.2"
# @pin
creative = "1.9.4"
creative = "1.11.8"
customblockdata = "2.2.4"
dataframe = "0.15.0"
dependencyversions = "0.52.0"
dokka = "2.0.0"
dokka = "2.1.0"
exposed = "1.0.0-beta-3"
fastutil = "8.5.16"
fawe = "2.13.0"
itemsadder = "3.6.1"
fastutil = "8.5.18"
fawe = "2.14.3"
java = "21"
junit = "5.12.0"
jvm-for-kotlin-multiplatform = "21"
kaml = "0.85.0"
kotest = "6.0.0.M4"
kaml = "0.104.0"
kotest = "6.0.7"
# ENSURE KOTLIN MATCHES THE VERSION IN GRADLE-CONVENTIONS REPO.
# @pin
kotlin = "2.2.0"
kotlinxIO = "0.8.0"
logback = "1.5.18"
kotlin = "2.3.0"
kotlinxIO = "0.8.2"
logback = "1.5.23"
mccoroutine = "2.22.0"
# @pin
minecraft = "1.21.8-R0.1-SNAPSHOT"
minecraft = "1.21.11-R0.1-SNAPSHOT"
mockbukkit = "4.64.0"
mockk = "1.14.4"
modelengine = "R4.0.9"
mockk = "1.14.7"
modelengine = "R4.1.0"
morepersistentdatatypes = "2.4.0"
mythic-dist = "5.9.5"
mythiccrucible = "2.2.0-SNAPSHOT"
nexo = "1.8.0"
mythic-dist = "5.11.0"
mythiccrucible = "2.4.0-SNAPSHOT"
nexo = "1.17.0"
reflections = "0.10.2"
serialization = "1.9.0"
shadowjar = "9.0.1"
serialization = "1.10.0-RC"
shadowjar = "9.3.0"
sqlite-jdbc = "3.50.2.0"
sqlite = "2.5.2"
vault = "1.7"
Expand Down Expand Up @@ -79,9 +78,7 @@ minecraft-papermc = { module = "io.papermc.paper:paper-api", version.ref = "mine
#minecraft-cartridge = { module = "com.mineinabyss.cartridge:cartridge-api", version.ref = "minecraft" }
minecraft-plugin-fawe-bukkit = { module = "com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit", version.ref = "fawe" }
minecraft-plugin-fawe-core = { module = "com.fastasyncworldedit:FastAsyncWorldEdit-Core", version.ref = "fawe" }
minecraft-plugin-itemsadder = { module = "com.github.LoneDev6:api-itemsadder", version.ref = "itemsadder" }
minecraft-plugin-modelengine = { module = "com.ticxo.modelengine:ModelEngine", version.ref = "modelengine" }
minecraft-plugin-mythic-crucible = { module = "io.lumine:MythicCrucible", version.ref = "mythiccrucible" }
minecraft-plugin-mythic-dist = { module = "io.lumine:Mythic-Dist", version.ref = "mythic-dist" }
minecraft-plugin-nexo = { module = "com.nexomc:nexo", version.ref = "nexo" }
minecraft-plugin-vault = { module = "com.github.MilkBowl:VaultAPI", version.ref = "vault" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import it.unimi.dsi.fastutil.ints.IntList
import net.kyori.adventure.key.Key
import net.minecraft.network.Connection
import net.minecraft.network.protocol.Packet
import net.minecraft.network.protocol.game.ClientGamePacketListener
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.network.ServerGamePacketListenerImpl
import net.minecraft.resources.Identifier
import net.minecraft.tags.TagNetworkSerialization.NetworkPayload
import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin
Expand Down Expand Up @@ -55,8 +53,8 @@ fun JavaPlugin.interceptServerbound(key: String = "read_packet_interceptor", int

private val networkPayloadTagsField = NetworkPayload::class.java.getDeclaredField("tags").also { it.isAccessible = true }
private val networkPayloadConstructor = NetworkPayload::class.java.declaredConstructors.first().also { it.isAccessible = true }
fun NetworkPayload.tags() = (networkPayloadTagsField.get(this) as Map<ResourceLocation, IntList>).toMutableMap()
fun Map<ResourceLocation, IntList>.networkPayload() = networkPayloadConstructor.newInstance(this) as NetworkPayload
fun NetworkPayload.tags() = (networkPayloadTagsField.get(this) as Map<Identifier, IntList>).toMutableMap()
fun Map<Identifier, IntList>.networkPayload() = networkPayloadConstructor.newInstance(this) as NetworkPayload

object PacketListener {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.mineinabyss.idofront.nms.aliases

import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.*
import net.minecraft.world.entity.projectile.Snowball
import net.minecraft.world.entity.projectile.throwableitemprojectile.Snowball
import org.bukkit.entity.Creature

typealias NMSEntity = Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.mineinabyss.idofront.nms.nbt

import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.NbtIo
import net.minecraft.server.players.NameAndId
import net.minecraft.util.ProblemReporter
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
Expand All @@ -15,7 +16,7 @@ import kotlin.jvm.optionals.getOrNull
* Gets the PlayerData from file for this UUID.
*/
fun OfflinePlayer.getOfflinePlayerData(): CompoundTag? =
(Bukkit.getServer() as CraftServer).server.playerDataStorage.load(name ?: "Unknown Player Name", uniqueId.toString(), ProblemReporter.DISCARDING).getOrNull()
(Bukkit.getServer() as CraftServer).server.playerDataStorage.load(NameAndId(uniqueId, name ?: "Unknown Player Name")).getOrNull()

/**
* Gets a copy of the WrappedPDC for this OfflinePlayer.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ class WrappedPDC(
}
}

override fun getSize(): Int {
return compoundTag.size()
}

override fun readFromBytes(bytes: ByteArray, clear: Boolean) {
if (clear) compoundTag.keySet().forEach(compoundTag::remove)
DataInputStream(ByteArrayInputStream(bytes)).use { dataInput ->
Expand Down
2 changes: 0 additions & 2 deletions idofront-serializers/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ dependencies {
compileOnly(libs.kotlinx.serialization.json)
compileOnly(libs.kotlinx.serialization.kaml)
compileOnly(libs.minecraft.plugin.mythic.dist)
compileOnly(libs.minecraft.plugin.mythic.crucible)
compileOnly(libs.minecraft.plugin.nexo)
compileOnly(libs.minecraft.plugin.itemsadder)
compileOnly(libs.creative.api) { isTransitive = true }
implementation(projects.idofrontUtil)
implementation(projects.idofrontLogging)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.mineinabyss.idofront.serialization

import com.mineinabyss.idofront.serialization.SerializableDataTypes.ConsumeEffect.ClearAllEffectsConsumeEffect.toSerializable
import com.mineinabyss.idofront.serialization.SerializableDataTypes.Profile.ProfileProperty
import com.nexomc.nexo.utils.ticks
import io.papermc.paper.datacomponent.DataComponentType
import io.papermc.paper.datacomponent.DataComponentTypes
import io.papermc.paper.datacomponent.item.*
import io.papermc.paper.datacomponent.item.Equippable.equippable
import io.papermc.paper.datacomponent.item.MapDecorations.DecorationEntry
import io.papermc.paper.datacomponent.item.Tool.Rule
import io.papermc.paper.datacomponent.item.consumable.ItemUseAnimation
Expand All @@ -30,6 +33,7 @@ import org.bukkit.inventory.meta.trim.ArmorTrim
import org.bukkit.map.MapCursor
import org.bukkit.potion.PotionEffect
import org.bukkit.potion.PotionEffectType
import java.util.UUID
import kotlin.time.Duration
import kotlin.time.DurationUnit

Expand Down Expand Up @@ -554,7 +558,7 @@ object SerializableDataTypes {
@Serializable
data class Consumable(
val duration: @Serializable(DurationSerializer::class) Duration = 1.6f.toDuration(DurationUnit.SECONDS),
val sound: @Serializable(KeySerializer::class) Key? = Sound.ENTITY_GENERIC_EAT.key(),
val sound: @Serializable(KeySerializer::class) Key? = Registry.SOUNDS.getKey(Sound.ENTITY_GENERIC_EAT),
val animation: ItemUseAnimation = ItemUseAnimation.EAT,
val particles: Boolean = true,
val consumeEffects: List<ConsumeEffect> = listOf()
Expand Down Expand Up @@ -631,14 +635,14 @@ object SerializableDataTypes {
val slot: EquipmentSlot,
val model: @Serializable(KeySerializer::class) Key? = null,
val cameraOverlay: @Serializable(KeySerializer::class) Key? = null,
val equipSound: @Serializable(KeySerializer::class) Key? = Sound.ITEM_ARMOR_EQUIP_GENERIC.key(),
val equipSound: @Serializable(KeySerializer::class) Key? = Registry.SOUNDS.getKey(Sound.ITEM_ARMOR_EQUIP_GENERIC),
val allowedEntities: List<EntityType>? = null,
val damageOnHurt: Boolean = true,
val swappable: Boolean = true,
val dispensable: Boolean = true,
val equipOnInteract: Boolean = true,
val canBeSheared: Boolean = true,
val shearingsound: @Serializable(KeySerializer::class) Key? = Sound.ITEM_SHEARS_SNIP.key()
val shearingsound: @Serializable(KeySerializer::class) Key? = Registry.SOUNDS.getKey(Sound.ITEM_SHEARS_SNIP)
) : DataType {
constructor(equippable: io.papermc.paper.datacomponent.item.Equippable) : this(
equippable.slot(), equippable.assetId(), equippable.cameraOverlay(), equippable.equipSound(),
Expand Down Expand Up @@ -763,7 +767,120 @@ object SerializableDataTypes {
}
}

@Serializable
data class Profile(val name: String?, val uuid: @Serializable(UUIDSerializer::class) UUID?, val properties: List<ProfileProperty>) : DataType {

constructor(profile: ResolvableProfile) : this(profile.name(), profile.uuid(), profile.properties().map(::ProfileProperty))

override fun setDataType(itemStack: ItemStack) {
val profile = ResolvableProfile.resolvableProfile()
.name(name).uuid(uuid)
.addProperties(properties.map { it.toPaper() })
itemStack.setData(DataComponentTypes.PROFILE, profile.build())
}

@Serializable
data class ProfileProperty(val name: String, val value: String, val signature: String? = null) {

constructor(property: com.destroystokyo.paper.profile.ProfileProperty) : this(property.name, property.value, property.signature)

fun toPaper(): com.destroystokyo.paper.profile.ProfileProperty {
return com.destroystokyo.paper.profile.ProfileProperty(name, value, signature)
}
}
}

@Serializable
data class KineticWeapon(
val delay: @Serializable(DurationSerializer::class) Duration,
val contactDelay: @Serializable(DurationSerializer::class) Duration,
val forwardMovement: Float, val damageMultiplier: Float,
val sound: Key?, val hitSound: Key?,
val damageConditions: Condition?,
val dismountConditions: Condition?,
val knockbackConditions: Condition?
) : DataType {

constructor(kineticWeapon: io.papermc.paper.datacomponent.item.KineticWeapon) : this(
kineticWeapon.delayTicks().ticks, kineticWeapon.contactCooldownTicks().ticks,
kineticWeapon.forwardMovement(), kineticWeapon.damageMultiplier(),
kineticWeapon.sound(), kineticWeapon.hitSound(),
kineticWeapon.damageConditions()?.let(::Condition),
kineticWeapon.dismountConditions()?.let(::Condition),
kineticWeapon.knockbackConditions()?.let(::Condition),
)

override fun setDataType(itemStack: ItemStack) {
val kinetic = io.papermc.paper.datacomponent.item.KineticWeapon.kineticWeapon()
.delayTicks(delay.ticks).contactCooldownTicks(contactDelay.ticks)
.forwardMovement(forwardMovement).damageMultiplier(damageMultiplier)
.sound(sound).hitSound(hitSound)
.damageConditions(damageConditions?.toPaper())
.dismountConditions(dismountConditions?.toPaper())
.knockbackConditions(knockbackConditions?.toPaper())
itemStack.setData(DataComponentTypes.KINETIC_WEAPON, kinetic.build())
}

@Serializable
data class Condition(val maxDuration: @Serializable(DurationSerializer::class) Duration, val minSpeed: Float = 0f, val minRelativeSpeed: Float = 0f) {

constructor(condition: io.papermc.paper.datacomponent.item.KineticWeapon.Condition) : this(
condition.maxDurationTicks().ticks, condition.minSpeed(), condition.minRelativeSpeed()
)

fun toPaper(): io.papermc.paper.datacomponent.item.KineticWeapon.Condition {
return io.papermc.paper.datacomponent.item.KineticWeapon.condition(maxDuration.ticks, minSpeed, minRelativeSpeed)
}
}

}

@Serializable
data class PiercingWeapon(val dealsKnockback: Boolean = true, val dismounts: Boolean = false, val sound: Key?, val hitSound: Key?) : DataType {

constructor(piercing: io.papermc.paper.datacomponent.item.PiercingWeapon) : this(
piercing.dealsKnockback(), piercing.dismounts(), piercing.sound(), piercing.hitSound()
)

override fun setDataType(itemStack: ItemStack) {
val piercing = io.papermc.paper.datacomponent.item.PiercingWeapon.piercingWeapon()
.dealsKnockback(dealsKnockback).dismounts(dismounts).sound(sound).hitSound(hitSound)
itemStack.setData(DataComponentTypes.PIERCING_WEAPON, piercing.build())
}
}

@Serializable
data class SwingAnimation(
val type: io.papermc.paper.datacomponent.item.SwingAnimation.Animation,
val duration: @Serializable(DurationSerializer::class) Duration
) : DataType {

constructor(swingAnimation: io.papermc.paper.datacomponent.item.SwingAnimation) : this(swingAnimation.type(), swingAnimation.duration().ticks)

override fun setDataType(itemStack: ItemStack) {
val swingAnimation = io.papermc.paper.datacomponent.item.SwingAnimation.swingAnimation()
.type(type).duration(duration.ticks).build()
itemStack.setData(DataComponentTypes.SWING_ANIMATION, swingAnimation)
}
}

@Serializable
data class UseEffects(
val canSprint: Boolean = false,
val speedMultiplier: Float = 0.2f,
val interactVibrations: Boolean = true
) : DataType {

constructor(useEffects: io.papermc.paper.datacomponent.item.UseEffects) : this(
useEffects.canSprint(), useEffects.speedMultiplier(), useEffects.interactVibrations()
)

override fun setDataType(itemStack: ItemStack) {
val useEffects = io.papermc.paper.datacomponent.item.UseEffects.useEffects()
.canSprint(canSprint).speedMultiplier(speedMultiplier).interactVibrations(interactVibrations).build()
itemStack.setData(DataComponentTypes.USE_EFFECTS, useEffects)
}
}

@Serializable
data class PotDecorations(
Expand Down
Loading
Loading