All Downloads are FREE. Search and download functionalities are using the official Maven repository.

walkmc.hologram.MoveableHologram.kt Maven / Gradle / Ivy

package walkmc.hologram

import org.bukkit.*
import walkmc.*
import walkmc.extensions.*
import walkmc.serializer.tag.impl.*

/**
 * Represents a moveable hologram.
 */
open class MoveableHologram : AbstractHologram {
	
	constructor() : super()
	constructor(world: MinecraftWorld) : super(world)
	
	var count = 0
	var max = 40
	var moveDelay = 1
	var offsetX = 0.0
	var offsetY = 0.08
	var offsetZ = 0.0
	
	var allowReverseOrder = false
	var isInReverseOrder = false
	
	override fun onTick() {
		super.onTick()
		
		if (ticksLived % moveDelay != 0)
			return
		
		if (!allowReverseOrder) {
			if (++count >= max) delete()
		} else {
			if (!isInReverseOrder) {
				if (++count >= max) isInReverseOrder = true
			} else {
				if (-max >= --count) isInReverseOrder = false
			}
		}
		
		move(relative(location), true)
	}
	
	override fun saveEntityData(tag: CompoundTag) {
		super.saveEntityData(tag)
		
		tag["CountMoves"] = count
		tag["MaxMoves"] = max
		tag["MoveDelay"] = moveDelay
		tag["OffsetX"] = offsetX
		tag["OffsetY"] = offsetY
		tag["OffsetZ"] = offsetZ
		tag["AllowReverseOrder"] = allowReverseOrder
		tag["IsInReverseOrder"] = isInReverseOrder
	}
	
	override fun loadEntityData(tag: CompoundTag) {
		super.loadEntityData(tag)
		
		count = tag.getInt("CountMoves")
		max = tag.getInt("MaxMoves", 40)
		moveDelay = tag.getInt("MoveDelay", 1)
		offsetX = tag.getDouble("OffsetX")
		offsetY = tag.getDouble("OffsetY", 0.08)
		offsetZ = tag.getDouble("OffsetZ")
		allowReverseOrder = tag.getBoolean("AllowReverseOrder")
		isInReverseOrder = tag.getBoolean("IsInReverseOrder")
	}
	
	fun relative(location: Location): Location {
		return if (!isInReverseOrder)
			location.getRelative(offsetX, offsetY, offsetZ)
		else
			location.getRelative(-offsetX, -offsetY, -offsetZ)
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy