Structure update

This commit is contained in:
bluefireoly
2020-09-12 22:19:29 +02:00
parent 33ca211325
commit 5c9c02891b
3 changed files with 34 additions and 10 deletions

View File

@@ -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)
}
} }

View File

@@ -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) }
}

View File

@@ -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()
) )
/** /**