Links
Tags
Creators
Details
Licensed Apache-2.0
Published 4 months ago
Updated 4 months ago
All versions
1.0.5
Release
VanishCore 1.0.54 months ago 285
Compatibility
Minecraft: Java Edition
26.3
26.2
26.1.x
1.21.11
Platforms
Bukkit
BungeeCord
Folia
Paper
Purpur
Spigot
Changes
[1.0.5] - 2026-07-02
Fixed
- Silent chest: double chests were still visibly opening for viewers. Minecraft sends a
BLOCK_ACTIONlid-animation packet for both halves of a double chest when either half is opened, butSilentChestManageronly tracked the block that was actually right-clicked, so the untracked half's animation packet went through unsuppressed. Now the paired half is detected viaBlockData(Chest.Type/Chest.getFacing()) and tracked alongside the clicked block. Found by adding aprotocollib.debugconfig flag that logs every packet the filter inspects plus whether it matched — confirmed ProtocolLib 5.5.0-SNAPSHOT-5a9afed packet field reads (BLOCK_ACTIONposition,NAMED_SOUND_EFFECTfixed-point position) are all correct on MC 26.1.2 despite ProtocolLib's own "not yet tested" warning for that version; the miss was purely the double-chest tracking gap. - Silent chest didn't work at all for barrels: barrels don't use the chest-style
BLOCK_ACTIONlid-animation packet — their open/closed lid is an actual block-state property, sent to the client as a plain block-state-update packet (BLOCK_CHANGE), whichSilentChestManagernever listened to. AddedBLOCK_CHANGEto the packet filter alongsideBLOCK_ACTION/NAMED_SOUND_EFFECT, suppressed the same way when it lands on a tracked container coordinate. - Silent chest didn't work at all for copper chests:
COPPER_CHEST,EXPOSED_COPPER_CHEST,WEATHERED_COPPER_CHEST,OXIDIZED_COPPER_CHEST, and their four waxed variants exist as realMaterials on this Paper 1.21.11 build but were simply missing fromCONTAINER_MATERIALS, so they were never tracked as opened at all. Added all 8. They shareorg.bukkit.block.data.type.Chestwith regular chests, so double-chest pairing covers them automatically — no extra logic needed there. - Silent chest still leaked intermittently after the double-chest fix. Root cause:
recentOpenswas only ever populated fromPlayerInteractEvent(RIGHT_CLICK_BLOCK), so any container opened through a path that doesn't fire that exact event/action (another plugin forcing the inventory open, edge cases in event ordering, etc.) never got tracked — its BLOCK_ACTION/NAMED_SOUND_EFFECT packets sailed through unsuppressed. AddedInventoryOpenEventas a second, independent tracking path: it fires whenever a container inventory is actually opened for a player regardless of how, so it catches whatever the interact handler misses. Extracted the shared "track this block (+ its double-chest partner)" logic intotrackContainerOpen(), used by both handlers plus the existing close handler.
Added
- A silent-chest confirmation message for the vanished player themselves —
messages.silent-chest-open(default"&8[&5Vanish&8] &7Opened silently — no one saw or heard it."), sent once per confirmed open (from theInventoryOpenEventhandler, not the interact-event safety net, so double chests and the redundant tracking path don't double-send it). Toggle withprotocollib.notify-silent-chest-open(defaulttrue). protocollib.debugconfig key (defaultfalse) — logs everyBLOCK_ACTION/NAMED_SOUND_EFFECTpacket the silent-chest filter inspects, whether it matched a tracked open, and any packet-read exceptions. Diagnostic aid, noisy in normal play./vanish reload(/v reload, permissionvanishcore.reload) — reloadsconfig.ymlwithout a restart. Works from console too. Re-readsprotocollib.debugand the Bedrock skip flag onSilentChestManagerlive; most other config reads (messages, permission checks) were already dynamic. Note: togglingprotocollib.silent-chest-openfrom disabled to enabled still requires a restart, since the packet listener is only registered once at startup.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:N7JG67SC:6NvToiJv"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:N7JG67SC:6NvToiJv"
}

