From 5c9c02891b58d33cfe15b298e135a6b63319f33d Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Sat, 12 Sep 2020 22:19:29 +0200 Subject: [PATCH] Structure update --- .../net/axay/kspigot/structures/Structure.kt | 23 +++++++++++++++---- .../kspigot/structures/StructureBuilder.kt | 8 +++++++ .../kspigot/structures/StructureLoader.kt | 13 ++++++----- 3 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 src/main/kotlin/net/axay/kspigot/structures/StructureBuilder.kt diff --git a/src/main/kotlin/net/axay/kspigot/structures/Structure.kt b/src/main/kotlin/net/axay/kspigot/structures/Structure.kt index 4a6eea51..5b625705 100644 --- a/src/main/kotlin/net/axay/kspigot/structures/Structure.kt +++ b/src/main/kotlin/net/axay/kspigot/structures/Structure.kt @@ -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.extensions.bukkit.spawnCleanEntity +import net.axay.kspigot.extensions.geometry.SimpleLocation3D +import net.axay.kspigot.particles.KSpigotParticle import org.bukkit.Location import org.bukkit.Material import org.bukkit.block.Block @@ -16,14 +18,16 @@ interface StructureData { } class SingleStructureData( - val location: Location, + val location: SimpleLocation3D, val structureData: StructureData ) data class Structure( - val blocks: Set = emptySet(), - val entities: Set = emptySet() -) + val structureData: Set +) { + constructor(vararg structureDataSets: Set) + : this(structureDataSets.flatMapTo(HashSet()) { it }) +} /* * Structure data implementations. @@ -62,9 +66,20 @@ data class StructureDataEntity( ) : StructureData { constructor(entity: Entity) : this(entity.type, entity.nbtData) + constructor(entityType: EntityType) : this(entityType, NBTData()) override fun createAt(loc: Location) { loc.spawnCleanEntity(entityType)?.nbtData = nbtData } +} + +data class StructureDataParticle( + val particle: KSpigotParticle +) : StructureData { + + override fun createAt(loc: Location) { + particle.spawnAt(loc) + } + } \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/structures/StructureBuilder.kt b/src/main/kotlin/net/axay/kspigot/structures/StructureBuilder.kt new file mode 100644 index 00000000..ec6b7a4e --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/structures/StructureBuilder.kt @@ -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) } +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/structures/StructureLoader.kt b/src/main/kotlin/net/axay/kspigot/structures/StructureLoader.kt index 9d972d15..cd61999b 100644 --- a/src/main/kotlin/net/axay/kspigot/structures/StructureLoader.kt +++ b/src/main/kotlin/net/axay/kspigot/structures/StructureLoader.kt @@ -1,6 +1,7 @@ package net.axay.kspigot.structures import net.axay.kspigot.extensions.geometry.LocationArea +import net.axay.kspigot.extensions.geometry.relationTo import org.bukkit.Location import org.bukkit.block.Block import org.bukkit.entity.Entity @@ -11,13 +12,13 @@ import org.bukkit.entity.Entity fun LocationArea.loadStructure(includeBlocks: Boolean = true, includeEntities: Boolean = false) = Structure( if (includeBlocks) - fillBlocks.mapTo(HashSet()) { SingleStructureData(it.location, StructureDataBlock(it)) } - else - emptySet(), + fillBlocks.mapTo(HashSet()) { + SingleStructureData(it.location relationTo minLoc, StructureDataBlock(it)) } + else emptySet(), if (includeEntities) - entities.mapTo(HashSet()) { SingleStructureData(it.location, StructureDataEntity(it)) } - else - emptySet() + entities.mapTo(HashSet()) { + SingleStructureData(it.location relationTo minLoc, StructureDataEntity(it)) } + else emptySet() ) /**