From d00aceea413bf53c7ef4548e147b165e4060927e Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Mon, 2 Feb 2026 11:10:36 -0600 Subject: [PATCH 1/4] include default block states (untested) --- .../kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt | 5 +++-- .../main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt | 2 +- .../main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt b/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt index 537932b3d..2f0c429c2 100644 --- a/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt +++ b/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt @@ -82,11 +82,12 @@ object NmsAccessorImpl : NmsAccessor { override fun serializePdc(pdc: PersistentDataContainer): Component = PaperAdventure.asAdventure(TextComponentTagVisitor(" ").visit((pdc as CraftPersistentDataContainer).toTagCompound())) - override fun getStateProperties(block: Block, custom: Map>): Map { + override fun getStateProperties(block: Block, includeDefault: Boolean, custom: Map>): Map { val state = (block as CraftBlock).nms val map = mutableMapOf() val possibleValues = mutableMapOf() - for (property in state.properties) { + val properties = if (includeDefault) state.block.stateDefinition.properties else state.properties + for (property in properties) { @Suppress("UNCHECKED_CAST") property as Property> map[property.name] = state.getOptionalValue(property).map(property::getName).orElse("none") diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt index 952a18efe..7ebf05ba2 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt @@ -239,7 +239,7 @@ open class RebarBlock internal constructor(val block: Block) { */ open fun getBlockTextureItem() = defaultItem?.getItemStack()?.let { ItemStackBuilder(it) }?.apply { editPdc { it.set(rebarBlockTextureEntityKey, RebarSerializers.BOOLEAN, true) } - val properties = NmsAccessor.instance.getStateProperties(block, getBlockTextureProperties()) + val properties = NmsAccessor.instance.getStateProperties(block, true, getBlockTextureProperties()) for ((property, value) in properties) { addCustomModelDataString("$property=$value") } diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt index b77eed050..cde695442 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt @@ -34,7 +34,7 @@ interface NmsAccessor { fun serializePdc(pdc: PersistentDataContainer): Component - fun getStateProperties(block: Block, custom: Map> = mutableMapOf()): Map + fun getStateProperties(block: Block, includeDefault: Boolean = true, custom: Map> = mutableMapOf()): Map fun handleRecipeBookClick(event: PlayerRecipeBookClickEvent) From 9f77f4a1ec62f5afe71e9466e6405216efaabb5a Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Mon, 2 Feb 2026 12:57:28 -0600 Subject: [PATCH 2/4] fix block textures, increase base scale for shader support --- .../pylonmc/rebar/i18n/packet/PlayerPacketHandler.kt | 6 ++++-- rebar/build.gradle.kts | 4 ++-- .../io/github/pylonmc/rebar/block/RebarBlock.kt | 2 +- .../pylonmc/rebar/entity/packet/BlockTextureEntity.kt | 10 +++++++--- .../rebar/resourcepack/armor/ArmorTextureEngine.kt | 11 ++++------- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/nms/src/main/kotlin/io/github/pylonmc/rebar/i18n/packet/PlayerPacketHandler.kt b/nms/src/main/kotlin/io/github/pylonmc/rebar/i18n/packet/PlayerPacketHandler.kt index 3e45f7647..7a3b35845 100644 --- a/nms/src/main/kotlin/io/github/pylonmc/rebar/i18n/packet/PlayerPacketHandler.kt +++ b/nms/src/main/kotlin/io/github/pylonmc/rebar/i18n/packet/PlayerPacketHandler.kt @@ -53,12 +53,14 @@ class PlayerPacketHandler(private val player: ServerPlayer, private val handler: private inner class PacketHandler : ChannelDuplexHandler() { override fun write(ctx: ChannelHandlerContext, packet: Any, promise: ChannelPromise) { @Suppress("UNCHECKED_CAST") - super.write(ctx, handleOutgoingPacket(packet as Packet), promise) + val packet = packet as? Packet ?: return super.write(ctx, packet, promise) + super.write(ctx, handleOutgoingPacket(packet), promise) } override fun channelRead(ctx: ChannelHandlerContext, packet: Any) { @Suppress("UNCHECKED_CAST") - super.channelRead(ctx, handleIncomingPacket(packet as Packet)) + val packet = packet as? Packet ?: return super.channelRead(ctx, packet) + super.channelRead(ctx, handleIncomingPacket(packet)) } } diff --git a/rebar/build.gradle.kts b/rebar/build.gradle.kts index bee9d1739..cd5b1af10 100644 --- a/rebar/build.gradle.kts +++ b/rebar/build.gradle.kts @@ -42,8 +42,8 @@ dependencies { paperLibraryApi("com.github.shynixn.mccoroutine:mccoroutine-bukkit-core:2.22.0") paperLibraryApi("xyz.xenondevs.invui:invui:2.0.0-beta.1") paperLibraryApi("xyz.xenondevs.invui:invui-kotlin:2.0.0-beta.1") - implementation("com.github.Tofaa2.EntityLib:spigot:a5184b3bdc") - implementation("com.github.retrooper:packetevents-spigot:2.11.1") + implementation("com.github.Tofaa2.EntityLib:spigot:f0318e298f") + implementation("com.github.retrooper:packetevents-spigot:2.11.2") implementation("info.debatty:java-string-similarity:2.0.0") implementation("org.bstats:bstats-bukkit:2.2.1") paperLibrary("com.github.ben-manes.caffeine:caffeine:3.2.2") diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt index 7ebf05ba2..fccda0574 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt @@ -164,7 +164,7 @@ open class RebarBlock internal constructor(val block: Block) { meta.item = SpigotConversionUtil.fromBukkitItemStack(item) meta.displayType = ItemDisplayMeta.DisplayType.FIXED meta.brightnessOverride = 15 shl 4 or 15 shl 20; - meta.scale = Vector3f(1.0000175f, 1.0000175f, 1.0000175f) + meta.scale = Vector3f(BlockTextureEntity.BLOCK_OVERLAP_SCALE, BlockTextureEntity.BLOCK_OVERLAP_SCALE, BlockTextureEntity.BLOCK_OVERLAP_SCALE) meta.width = 0f meta.height = 0f } diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt index 05ee8c715..4a955c1d5 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt @@ -1,5 +1,7 @@ package io.github.pylonmc.rebar.entity.packet +import com.github.retrooper.packetevents.PacketEvents +import com.github.retrooper.packetevents.PacketEventsAPI import com.github.retrooper.packetevents.protocol.entity.data.EntityData import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes @@ -42,7 +44,7 @@ open class BlockTextureEntity( open fun sendPacketToViewer(viewer: UUID, wrapper: PacketWrapper<*>, distanceSquared: Double) { var packet = wrapper if (packet is WrapperPlayServerEntityMetadata) { - val scaleIncrease = (min(distanceSquared, 1600.0) * 0.0005 / 20.0).toFloat() + val scaleIncrease = (min(distanceSquared, 1600.0) * SCALE_DISTANCE_INCREASE / 20.0).toFloat() val metadata = ArrayList(packet.entityMetadata) var scale = metadata.find { it.index == SCALE_INDEX && it.type == EntityDataTypes.VECTOR3F } ?: return val index = metadata.indexOf(scale) @@ -51,12 +53,14 @@ open class BlockTextureEntity( packet = WrapperPlayServerEntityMetadata(packet.entityId, metadata) } - val protocolManager = EntityLib.getOptionalApi().orElse(null)?.packetEvents?.protocolManager ?: return + val protocolManager = PacketEvents.getAPI().protocolManager ?: return val channel = protocolManager.getChannel(viewer) ?: return protocolManager.sendPacket(channel, packet) } - protected companion object { + companion object { const val SCALE_INDEX = 12 + const val SCALE_DISTANCE_INCREASE = 0.0005f + const val BLOCK_OVERLAP_SCALE = 1.00035f } } \ No newline at end of file diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/resourcepack/armor/ArmorTextureEngine.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/resourcepack/armor/ArmorTextureEngine.kt index 53991143d..b6e29e222 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/resourcepack/armor/ArmorTextureEngine.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/resourcepack/armor/ArmorTextureEngine.kt @@ -5,6 +5,7 @@ package io.github.pylonmc.rebar.resourcepack.armor import com.github.retrooper.packetevents.event.PacketListener import com.github.retrooper.packetevents.event.PacketReceiveEvent import com.github.retrooper.packetevents.event.PacketSendEvent +import com.github.retrooper.packetevents.protocol.ConnectionState import com.github.retrooper.packetevents.protocol.item.ItemStack import com.github.retrooper.packetevents.protocol.packettype.PacketType import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientCreativeInventoryAction @@ -32,10 +33,10 @@ object ArmorTextureEngine : PacketListener { set(value) = this.persistentDataContainer.set(customArmorTexturesKey, PersistentDataType.BOOLEAN, RebarConfig.ArmorTextureConfig.FORCED || value) override fun onPacketSend(event: PacketSendEvent?) { - if (event == null) return + if (event == null || event.connectionState != ConnectionState.PLAY) return val player = event.getPlayer() - if (player == null || !player.hasCustomArmorTextures) return + if (!player.hasCustomArmorTextures) return when (event.packetType) { PacketType.Play.Server.SET_SLOT -> handleSetSlot(WrapperPlayServerSetSlot(event)) @@ -47,11 +48,7 @@ object ArmorTextureEngine : PacketListener { } override fun onPacketReceive(event: PacketReceiveEvent?) { - if (event == null) return - - val player = event.getPlayer() - if (player == null) return - + if (event == null || event.connectionState != ConnectionState.PLAY) return when (event.packetType) { PacketType.Play.Client.CREATIVE_INVENTORY_ACTION -> handleCreativeAction(WrapperPlayClientCreativeInventoryAction(event)) else -> {} From 044b58cb298af018174ea56742c2ffbb8152041e Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Mon, 2 Feb 2026 13:16:01 -0600 Subject: [PATCH 3/4] aha I figured it out --- .../kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt | 7 +++---- .../kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt | 2 +- .../main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt b/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt index 2f0c429c2..c4dcfc4b4 100644 --- a/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt +++ b/nms/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessorImpl.kt @@ -82,12 +82,11 @@ object NmsAccessorImpl : NmsAccessor { override fun serializePdc(pdc: PersistentDataContainer): Component = PaperAdventure.asAdventure(TextComponentTagVisitor(" ").visit((pdc as CraftPersistentDataContainer).toTagCompound())) - override fun getStateProperties(block: Block, includeDefault: Boolean, custom: Map>): Map { + override fun getStateProperties(block: Block, custom: Map>): Map { val state = (block as CraftBlock).nms val map = mutableMapOf() val possibleValues = mutableMapOf() - val properties = if (includeDefault) state.block.stateDefinition.properties else state.properties - for (property in properties) { + for (property in state.block.stateDefinition.properties) { @Suppress("UNCHECKED_CAST") property as Property> map[property.name] = state.getOptionalValue(property).map(property::getName).orElse("none") @@ -97,7 +96,7 @@ object NmsAccessorImpl : NmsAccessor { map[name] = pair.first possibleValues[name] = pair.second } - return map.toSortedMap().toSortedMap(compareBy { possibleValues[it] ?: 0 }.reversed()) + return map.toSortedMap(compareByDescending { possibleValues[it] ?: 0 }.thenBy { it }) } override fun handleRecipeBookClick(event: PlayerRecipeBookClickEvent) { diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt index fccda0574..5421b1feb 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/block/RebarBlock.kt @@ -239,7 +239,7 @@ open class RebarBlock internal constructor(val block: Block) { */ open fun getBlockTextureItem() = defaultItem?.getItemStack()?.let { ItemStackBuilder(it) }?.apply { editPdc { it.set(rebarBlockTextureEntityKey, RebarSerializers.BOOLEAN, true) } - val properties = NmsAccessor.instance.getStateProperties(block, true, getBlockTextureProperties()) + val properties = NmsAccessor.instance.getStateProperties(block, getBlockTextureProperties()) for ((property, value) in properties) { addCustomModelDataString("$property=$value") } diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt index cde695442..b77eed050 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/nms/NmsAccessor.kt @@ -34,7 +34,7 @@ interface NmsAccessor { fun serializePdc(pdc: PersistentDataContainer): Component - fun getStateProperties(block: Block, includeDefault: Boolean = true, custom: Map> = mutableMapOf()): Map + fun getStateProperties(block: Block, custom: Map> = mutableMapOf()): Map fun handleRecipeBookClick(event: PlayerRecipeBookClickEvent) From d20f09cd51161d0591d4047455d93d0987b0f9db Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Mon, 2 Feb 2026 13:21:05 -0600 Subject: [PATCH 4/4] scale up juuuuuust a bit more --- .../io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt b/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt index 4a955c1d5..aef03da25 100644 --- a/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt +++ b/rebar/src/main/kotlin/io/github/pylonmc/rebar/entity/packet/BlockTextureEntity.kt @@ -61,6 +61,6 @@ open class BlockTextureEntity( companion object { const val SCALE_INDEX = 12 const val SCALE_DISTANCE_INCREASE = 0.0005f - const val BLOCK_OVERLAP_SCALE = 1.00035f + const val BLOCK_OVERLAP_SCALE = 1.0004f } } \ No newline at end of file