Structure update
This commit is contained in:
@@ -4,6 +4,8 @@ import net.axay.kspigot.annotations.NMS_General
|
|||||||
import net.axay.kspigot.data.NBTData
|
import net.axay.kspigot.data.NBTData
|
||||||
import net.axay.kspigot.data.nbtData
|
import net.axay.kspigot.data.nbtData
|
||||||
import net.axay.kspigot.extensions.bukkit.spawnCleanEntity
|
import net.axay.kspigot.extensions.bukkit.spawnCleanEntity
|
||||||
|
import net.axay.kspigot.extensions.geometry.SimpleLocation3D
|
||||||
|
import net.axay.kspigot.particles.KSpigotParticle
|
||||||
import org.bukkit.Location
|
import org.bukkit.Location
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.block.Block
|
import org.bukkit.block.Block
|
||||||
@@ -16,14 +18,16 @@ interface StructureData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SingleStructureData(
|
class SingleStructureData(
|
||||||
val location: Location,
|
val location: SimpleLocation3D,
|
||||||
val structureData: StructureData
|
val structureData: StructureData
|
||||||
)
|
)
|
||||||
|
|
||||||
data class Structure(
|
data class Structure(
|
||||||
val blocks: Set<SingleStructureData> = emptySet(),
|
val structureData: Set<SingleStructureData>
|
||||||
val entities: Set<SingleStructureData> = emptySet()
|
) {
|
||||||
)
|
constructor(vararg structureDataSets: Set<SingleStructureData>)
|
||||||
|
: this(structureDataSets.flatMapTo(HashSet()) { it })
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure data implementations.
|
* Structure data implementations.
|
||||||
@@ -62,9 +66,20 @@ data class StructureDataEntity(
|
|||||||
) : StructureData {
|
) : StructureData {
|
||||||
|
|
||||||
constructor(entity: Entity) : this(entity.type, entity.nbtData)
|
constructor(entity: Entity) : this(entity.type, entity.nbtData)
|
||||||
|
constructor(entityType: EntityType) : this(entityType, NBTData())
|
||||||
|
|
||||||
override fun createAt(loc: Location) {
|
override fun createAt(loc: Location) {
|
||||||
loc.spawnCleanEntity(entityType)?.nbtData = nbtData
|
loc.spawnCleanEntity(entityType)?.nbtData = nbtData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
data class StructureDataParticle(
|
||||||
|
val particle: KSpigotParticle
|
||||||
|
) : StructureData {
|
||||||
|
|
||||||
|
override fun createAt(loc: Location) {
|
||||||
|
particle.spawnAt(loc)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
package net.axay.kspigot.structures
|
||||||
|
|
||||||
|
import net.axay.kspigot.extensions.geometry.plus
|
||||||
|
import org.bukkit.Location
|
||||||
|
|
||||||
|
fun Structure.buildAt(loc: Location) {
|
||||||
|
structureData.forEach { it.structureData.createAt(loc + it.location) }
|
||||||
|
}
|
@@ -1,6 +1,7 @@
|
|||||||
package net.axay.kspigot.structures
|
package net.axay.kspigot.structures
|
||||||
|
|
||||||
import net.axay.kspigot.extensions.geometry.LocationArea
|
import net.axay.kspigot.extensions.geometry.LocationArea
|
||||||
|
import net.axay.kspigot.extensions.geometry.relationTo
|
||||||
import org.bukkit.Location
|
import org.bukkit.Location
|
||||||
import org.bukkit.block.Block
|
import org.bukkit.block.Block
|
||||||
import org.bukkit.entity.Entity
|
import org.bukkit.entity.Entity
|
||||||
@@ -11,13 +12,13 @@ import org.bukkit.entity.Entity
|
|||||||
fun LocationArea.loadStructure(includeBlocks: Boolean = true, includeEntities: Boolean = false)
|
fun LocationArea.loadStructure(includeBlocks: Boolean = true, includeEntities: Boolean = false)
|
||||||
= Structure(
|
= Structure(
|
||||||
if (includeBlocks)
|
if (includeBlocks)
|
||||||
fillBlocks.mapTo(HashSet()) { SingleStructureData(it.location, StructureDataBlock(it)) }
|
fillBlocks.mapTo(HashSet()) {
|
||||||
else
|
SingleStructureData(it.location relationTo minLoc, StructureDataBlock(it)) }
|
||||||
emptySet(),
|
else emptySet(),
|
||||||
if (includeEntities)
|
if (includeEntities)
|
||||||
entities.mapTo(HashSet()) { SingleStructureData(it.location, StructureDataEntity(it)) }
|
entities.mapTo(HashSet()) {
|
||||||
else
|
SingleStructureData(it.location relationTo minLoc, StructureDataEntity(it)) }
|
||||||
emptySet()
|
else emptySet()
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user