Update GameStateListener.kt

Fix block breaking
This commit is contained in:
TDSTOS
2026-04-13 04:36:16 +02:00
parent b526b85262
commit f3f025a51e

View File

@@ -72,10 +72,10 @@ class GameStateListener : Listener {
) )
private val alwaysMaterials = mapOf( private val alwaysMaterials = mapOf(
Material.RED_MUSHROOM to Sound.BLOCK_GRASS_BREAK, Material.RED_MUSHROOM to Sound.BLOCK_GRASS_BREAK,
Material.BROWN_MUSHROOM to Sound.BLOCK_GRASS_BREAK, Material.BROWN_MUSHROOM to Sound.BLOCK_GRASS_BREAK,
Material.COCOA_BEANS to Sound.BLOCK_WOOD_BREAK, Material.COCOA to Sound.BLOCK_WOOD_BREAK, // ← Block heißt COCOA, nicht COCOA_BEANS
Material.CACTUS to Sound.BLOCK_WOOL_BREAK Material.CACTUS to Sound.BLOCK_WOOL_BREAK
) )
@EventHandler @EventHandler
@@ -114,21 +114,9 @@ class GameStateListener : Listener {
return return
} }
// Invincibility: nur Whitelist-Blöcke erlaubt // BUG 2 FIX: Kein separater Invis-Whitelist-Block mehr.
if ( gameManager.currentState == GameState.INVINCIBILITY ) // Beide States (INVINCIBILITY + INGAME) laufen direkt in pickupBlock —
{ // Map-Protection (Diamant, Eisen) ist bereits oben abgehandelt.
if ( beforeInvisMaterials.containsKey( block.type ) ||
alwaysMaterials.containsKey( block.type ) )
{
pickupBlock( event, player )
} else {
event.isCancelled = true
}
return
}
// INGAME: alle Blöcke direkt in Inventar — nie auf den Boden fallen lassen
// (ItemDespawnEvent cancelt sonst alle Drops sofort)
pickupBlock( event, player ) pickupBlock( event, player )
} }
@@ -138,7 +126,6 @@ class GameStateListener : Listener {
) { ) {
val block = event.block val block = event.block
// In pickupBlock, direkt vor event.isCancelled = true:
if ( block.type == Material.RED_MUSHROOM || if ( block.type == Material.RED_MUSHROOM ||
block.type == Material.BROWN_MUSHROOM ) block.type == Material.BROWN_MUSHROOM )
{ {
@@ -150,23 +137,32 @@ class GameStateListener : Listener {
event.isCancelled = true event.isCancelled = true
// BUG 1 FIX: !! entfernt → Elvis mit null-Safe-Fallback auf GENERIC_SOUND.
// Blöcke, die in keiner Map stehen (z.B. Erde, Gras im INGAME-State),
// bekommen einen neutralen Standard-Sound statt einer NPE.
val sound = beforeInvisMaterials[ block.type ] val sound = beforeInvisMaterials[ block.type ]
?: alwaysMaterials[ block.type ]!! ?: alwaysMaterials[ block.type ]
?: Sound.BLOCK_STONE_BREAK
// block.getDrops( tool, player ) gibt den korrekten Vanilla-Drop-Context // BUG 3 FIX: block.getDrops(tool, player) gibt für Material.COCOA
// inkl. Age-State bei Cocoa, Fortune-Enchant, Silk-Touch usw. // korrekt Material.COCOA_BEANS zurück — Paper löst den Block→Item-
// Mapping intern auf. Kein manueller Sonderfall nötig.
val drops = block.getDrops( player.inventory.itemInMainHand, player ) val drops = block.getDrops( player.inventory.itemInMainHand, player )
if ( !hasInventorySpace( player ) ) if ( !hasInventorySpace( player ) )
{ {
drops.forEach { player.world.dropItem( block.location, it ) } drops.forEach { player.world.dropItem( block.location, it ) }
player.playSound( player.location, sound, 1f, 1f )
block.type = Material.AIR block.type = Material.AIR
if ( sound != Sound.BLOCK_STONE_BREAK )
player.playSound( player.location, sound, 1f, 1f )
return return
} }
if ( sound != Sound.BLOCK_STONE_BREAK )
player.playSound( player.location, sound, 1f, 1f )
drops.forEach { player.inventory.addItem( it ) } drops.forEach { player.inventory.addItem( it ) }
player.playSound( player.location, sound, 1f, 1f )
block.type = Material.AIR block.type = Material.AIR
} }