Add pit wall replace function
This commit is contained in:
@@ -116,13 +116,29 @@ class PitManager(private val plugin: SpeedHG) {
|
||||
// ── 2. Luftschacht von Boden+1 bis über die Oberfläche ────────────────
|
||||
WorldEditUtils.createCylinder( world, airStartLoc, PIT_RADIUS, true, airHeight, Material.AIR )
|
||||
|
||||
// ── 3. Broadcast sofort ───────────────────────────────────────────────
|
||||
// ── 3. Wasser & Lava in den Wänden durch Glas ersetzen ────────────────
|
||||
// Radius + 1: erfasst die 1-Block-dicke Wand direkt außerhalb des Schachts.
|
||||
// Nur WATER, LAVA und AIR werden ersetzt — kein Terrain-Block wird angefasst.
|
||||
val wallLoc = Location( world, PIT_X, ( pitFloorY + 1 ).toDouble(), PIT_Z )
|
||||
WorldEditUtils.replaceCylinder(
|
||||
world,
|
||||
wallLoc,
|
||||
PIT_RADIUS + 1,
|
||||
airHeight,
|
||||
setOf( Material.WATER, Material.LAVA, Material.AIR ),
|
||||
Material.GRAY_STAINED_GLASS
|
||||
)
|
||||
|
||||
// ── 4. Pit-Inneres nochmals mit Luft freiräumen (Glas das rein gerutscht ist) ─
|
||||
WorldEditUtils.createCylinder( world, airStartLoc, PIT_RADIUS, true, airHeight, Material.AIR )
|
||||
|
||||
// ── 5. Broadcast sofort ───────────────────────────────────────────────
|
||||
Bukkit.getOnlinePlayers().forEach { p ->
|
||||
p.sendMsg( "pit.spawned" )
|
||||
p.playSound( p.location, Sound.ENTITY_WITHER_SPAWN, 1f, 0.5f )
|
||||
}
|
||||
|
||||
// ── 4. Spieler teleportieren (kurz nach WorldEdit-Commit) ─────────────
|
||||
// ── 6. Spieler teleportieren (kurz nach WorldEdit-Commit) ─────────────
|
||||
Bukkit.getScheduler().runTaskLater( plugin, { ->
|
||||
teleportPlayersToPit( world )
|
||||
startEscapeCheck( world )
|
||||
|
||||
@@ -2,7 +2,11 @@ package club.mcscrims.speedhg.util
|
||||
|
||||
import com.sk89q.worldedit.WorldEdit
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter
|
||||
import com.sk89q.worldedit.function.mask.BlockTypeMask
|
||||
import com.sk89q.worldedit.math.Vector2
|
||||
import com.sk89q.worldedit.regions.CylinderRegion
|
||||
import com.sk89q.worldedit.util.SideEffectSet
|
||||
import com.sk89q.worldedit.world.block.BlockTypes
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.World
|
||||
@@ -86,4 +90,45 @@ object WorldEditUtils {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
fun replaceCylinder(
|
||||
world: World,
|
||||
center: Location,
|
||||
radius: Int,
|
||||
height: Int,
|
||||
replaceMaterials: Set<Material>,
|
||||
replacement: Material
|
||||
) = try {
|
||||
val weWorld = BukkitAdapter.adapt( world )
|
||||
val centerVec = BukkitAdapter.asBlockVector( center )
|
||||
val radiusVec = Vector2.at( radius.toDouble(), radius.toDouble() )
|
||||
val region = CylinderRegion(
|
||||
weWorld,
|
||||
centerVec,
|
||||
radiusVec,
|
||||
centerVec.y,
|
||||
centerVec.y + height - 1
|
||||
)
|
||||
|
||||
val editSession = WorldEdit.getInstance().newEditSessionBuilder()
|
||||
.world( weWorld ).maxBlocks( -1 ).build()
|
||||
|
||||
editSession.sideEffectApplier = SideEffectSet.defaults()
|
||||
|
||||
val mask = BlockTypeMask(
|
||||
editSession,
|
||||
replaceMaterials.mapNotNull { mat ->
|
||||
BlockTypes.get("minecraft:${mat.key.key}")
|
||||
}
|
||||
)
|
||||
|
||||
val replacementState = BukkitAdapter.asBlockState( ItemStack( replacement ) )
|
||||
|
||||
editSession.replaceBlocks( region, mask, replacementState )
|
||||
|
||||
editSession.commit()
|
||||
editSession.close()
|
||||
} catch ( e: Exception ) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user