You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1.3 KiB
27 lines
1.3 KiB
package net.deliciousreya.minecraftportal.model
|
|
|
|
import net.deliciousreya.minecraftportal.extensions.toLocation
|
|
import net.deliciousreya.minecraftportal.extensions.toMaterial
|
|
import net.deliciousreya.minecraftportal.extensions.toMineralProto
|
|
import net.deliciousreya.minecraftportal.extensions.toProto
|
|
import net.deliciousreya.minecraftportal.proto.PortalSaveDataProtos
|
|
import org.bukkit.Material
|
|
import org.bukkit.Server
|
|
import java.lang.IllegalArgumentException
|
|
|
|
fun PortalSaveDataProtos.Portal.toPortal(server: Server, portalTypes: Map<Material, PortalType>): Portal {
|
|
val portalType = portalTypes[mineral.toMaterial()] ?: throw IllegalArgumentException("No portal type for $mineral")
|
|
val result = Portal(PortalFrame(lowerLeftFrontCorner.toLocation(server), exitDirection.toDirection()), portalType)
|
|
// TODO: assert that the saved portal and mineral match the actual state of the world
|
|
return result
|
|
}
|
|
|
|
class Portal(val frame: PortalFrame, val type: PortalType) {
|
|
fun toProto(): PortalSaveDataProtos.Portal {
|
|
return PortalSaveDataProtos.Portal.newBuilder()
|
|
.setLowerLeftFrontCorner(frame.lowerLeftFrontCorner.toProto())
|
|
.setExitDirection(frame.direction.toProto())
|
|
.setMineral(frame.mineral.toMineralProto())
|
|
.build()
|
|
}
|
|
} |