From 84160328988b5d9d9cf99145ce0582e14ca44646 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Sun, 16 Jul 2023 10:40:27 +0200 Subject: [PATCH 1/3] Update FakeOnlinePlayer.kt --- .../xenondevs/nova/util/FakeOnlinePlayer.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/util/FakeOnlinePlayer.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/util/FakeOnlinePlayer.kt index 824775fb91..64166bba04 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/util/FakeOnlinePlayer.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/util/FakeOnlinePlayer.kt @@ -74,6 +74,8 @@ import org.jetbrains.annotations.Contract import xyz.xenondevs.nova.integration.permission.PermissionManager import java.net.InetAddress import java.net.InetSocketAddress +import java.time.Duration +import java.time.Instant import java.util.* /** @@ -124,6 +126,14 @@ class FakeOnlinePlayer( throw UnsupportedOperationException("Player is not online") } + override fun ban(reason: String?, expires: Instant?, source: String?, kickPlayer: Boolean): BanEntry? { + throw UnsupportedOperationException("Player is not online") + } + + override fun ban(reason: String?, expires: Duration?, source: String?, kickPlayer: Boolean): BanEntry? { + throw UnsupportedOperationException("Player is not online") + } + override fun getName(): String { return offlinePlayer.name ?: "OfflinePlayer" } @@ -188,6 +198,14 @@ class FakeOnlinePlayer( throw UnsupportedOperationException("Player is not online") } + override fun banIp(reason: String?, expires: Instant?, source: String?, kickPlayer: Boolean): BanEntry? { + throw UnsupportedOperationException("Player is not online") + } + + override fun banIp(reason: String?, expires: Duration?, source: String?, kickPlayer: Boolean): BanEntry? { + throw UnsupportedOperationException("Player is not online") + } + override fun chat(msg: String) { throw UnsupportedOperationException("Player is not online") } From 855f71c7e6497d3766a90fda1ee06e96f9cfbd25 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Mon, 17 Jul 2023 09:26:22 +0200 Subject: [PATCH 2/3] Disguise CBFCompoundTag as ByteArrayTag Fixes #252, because WorldEdit checks nbt tags using instanceof --- .../data/serialization/cbf/CBFCompoundTag.kt | 181 +++++++++++++++--- .../xyz/xenondevs/nova/util/data/NBTUtils.kt | 2 +- 2 files changed, 160 insertions(+), 23 deletions(-) diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/data/serialization/cbf/CBFCompoundTag.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/data/serialization/cbf/CBFCompoundTag.kt index 20d25c9bb2..92180670da 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/data/serialization/cbf/CBFCompoundTag.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/data/serialization/cbf/CBFCompoundTag.kt @@ -1,5 +1,7 @@ package xyz.xenondevs.nova.data.serialization.cbf +import net.minecraft.nbt.ByteArrayTag +import net.minecraft.nbt.ByteTag import net.minecraft.nbt.NbtAccounter import net.minecraft.nbt.StreamTagVisitor import net.minecraft.nbt.StringTag @@ -10,8 +12,14 @@ import xyz.xenondevs.cbf.CBF import xyz.xenondevs.cbf.io.ByteReader import java.io.DataInput import java.io.DataOutput +import java.util.* +import java.util.function.Consumer +import java.util.function.IntFunction +import java.util.function.Predicate +import java.util.function.UnaryOperator +import java.util.stream.Stream -internal object CBFCompoundTagType : TagType.VariableSize { +internal object CBFCompoundTagType : TagType.VariableSize { override fun load(input: DataInput, i: Int, accounter: NbtAccounter?): CBFCompoundTag { val reader = ByteReader.fromDataInput(input) @@ -41,16 +49,18 @@ internal object CBFCompoundTagType : TagType.VariableSize { } -internal class CBFCompoundTag(val compound: NamespacedCompound) : Tag { +@Suppress("OVERRIDE_DEPRECATION") +internal class CBFCompoundTag(val compound: NamespacedCompound) : ByteArrayTag(byteArrayOf()) { constructor() : this(NamespacedCompound()) override fun getId(): Byte = 7 // byte array - override fun getType(): TagType = CBFCompoundTagType - - override fun copy(): Tag { - return CBFCompoundTag(compound.copy()) - } + override fun getType(): TagType = CBFCompoundTagType + override fun copy(): Tag = CBFCompoundTag(compound.copy()) + override fun getAsByteArray(): ByteArray = CBF.write(compound) + override fun accept(visitor: StreamTagVisitor): StreamTagVisitor.ValueResult = visitor.visit(compound.toString()) + override fun accept(visitor: TagVisitor) = visitor.visitString(StringTag.valueOf(compound.toString())) // TODO + override fun acceptAsRoot(visitor: StreamTagVisitor) = throw UnsupportedOperationException() // TODO override fun write(out: DataOutput) { val bytes = CBF.write(compound) @@ -58,31 +68,158 @@ internal class CBFCompoundTag(val compound: NamespacedCompound) : Tag { out.write(bytes) } - // also accessed via reflection - fun compoundToByteArray(): ByteArray { - return CBF.write(compound) + override fun equals(other: Any?): Boolean { + if (other === this) + return true + + return other is CBFCompoundTag && asByteArray.contentEquals(other.asByteArray) } - override fun accept(visitor: StreamTagVisitor): StreamTagVisitor.ValueResult { - return visitor.visit(compound.toString()) + override fun hashCode(): Int = asByteArray.contentHashCode() + + // + override val size: Int + get() = throw UnsupportedOperationException() + + override fun sizeInBytes(): Int { + throw UnsupportedOperationException() } - override fun accept(visitor: TagVisitor) { - visitor.visitString(StringTag.valueOf(compound.toString())) // TODO + override fun get(index: Int): ByteTag { + throw UnsupportedOperationException() } - override fun equals(other: Any?): Boolean { - if (other === this) - return true - - return other is CBFCompoundTag && compoundToByteArray().contentEquals(other.compoundToByteArray()) + override fun set(index: Int, element: ByteTag): ByteTag { + throw UnsupportedOperationException() } - override fun hashCode(): Int = - compoundToByteArray().contentHashCode() + override fun add(index: Int, element: ByteTag) { + throw UnsupportedOperationException() + } - override fun sizeInBytes(): Int { + override fun add(element: ByteTag?): Boolean { + throw UnsupportedOperationException() + } + + override fun setTag(index: Int, element: Tag): Boolean { + throw UnsupportedOperationException() + } + + override fun addTag(index: Int, element: Tag): Boolean { + throw UnsupportedOperationException() + } + + override fun remove(element: ByteTag?): Boolean { + throw UnsupportedOperationException() + } + + override fun addAll(index: Int, elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun addAll(elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun clear() { + throw UnsupportedOperationException() + } + + override fun iterator(): MutableIterator { + throw UnsupportedOperationException() + } + + override fun removeAll(elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun retainAll(elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun contains(element: ByteTag?): Boolean { + throw UnsupportedOperationException() + } + + override fun containsAll(elements: Collection): Boolean { + throw UnsupportedOperationException() + } + + override fun isEmpty(): Boolean { + throw UnsupportedOperationException() + } + + override fun forEach(action: Consumer?) { + throw UnsupportedOperationException() + } + + override fun spliterator(): Spliterator { + throw UnsupportedOperationException() + } + + override fun toArray(): Array { + throw UnsupportedOperationException() + } + + override fun toArray(a: Array): Array { + throw UnsupportedOperationException() + } + + override fun toArray(generator: IntFunction>?): Array { + throw UnsupportedOperationException() + } + + override fun removeIf(filter: Predicate): Boolean { + throw UnsupportedOperationException() + } + + override fun stream(): Stream { + throw UnsupportedOperationException() + } + + override fun parallelStream(): Stream { + throw UnsupportedOperationException() + } + + override fun listIterator(): MutableListIterator { + throw UnsupportedOperationException() + } + + override fun listIterator(index: Int): MutableListIterator { + throw UnsupportedOperationException() + } + + override fun removeAt(i: Int): ByteTag { + throw UnsupportedOperationException() + } + + override fun subList(fromIndex: Int, toIndex: Int): MutableList { + throw UnsupportedOperationException() + } + + override fun indexOf(element: ByteTag?): Int { + throw UnsupportedOperationException() + } + + override fun lastIndexOf(element: ByteTag?): Int { + throw UnsupportedOperationException() + } + + override fun replaceAll(operator: UnaryOperator) { + throw UnsupportedOperationException() + } + + override fun sort(c: Comparator?) { + throw UnsupportedOperationException() + } + + override fun removeRange(fromIndex: Int, toIndex: Int) { + throw UnsupportedOperationException() + } + + override fun getElementType(): Byte { throw UnsupportedOperationException() } + // } \ No newline at end of file diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/util/data/NBTUtils.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/util/data/NBTUtils.kt index 892043a1f7..6fad829af7 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/util/data/NBTUtils.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/util/data/NBTUtils.kt @@ -76,7 +76,7 @@ object NBTUtils { } internal fun reserializeCBFCompoundTag(cbfTag: Any): CBFCompoundTag { - val toByteArrayMethod = cbfTag::class.java.getMethod("compoundToByteArray") + val toByteArrayMethod = cbfTag::class.java.getMethod("getAsByteArray") val serializedCBFCompound = toByteArrayMethod.invoke(cbfTag) as ByteArray return CBFCompoundTag(CBF.read(serializedCBFCompound)!!) } From 1b01de81ecd7ae4151981f7296c9fd45c40a3d64 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Mon, 17 Jul 2023 09:27:09 +0200 Subject: [PATCH 3/3] Bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e4e75fa0b3..bff6dd8e23 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ -version = 0.14.3 +version = 0.14.4 kotlin.daemon.jvmargs=-Xmx2g org.gradle.jvmargs=-Xmx2g