Skip to content

Instantly share code, notes, and snippets.

View SecretX33's full-sized avatar

SecretX SecretX33

View GitHub Profile
@SecretX33
SecretX33 / MyLogFilter.java
Last active June 12, 2022 14:18
How to create and register a Logger filter into Spigot/Paper server
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.filter.AbstractFilter;
import org.apache.logging.log4j.message.Message;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@SecretX33
SecretX33 / closeable.kt
Created April 30, 2022 17:35
Proper Kotlin Closeable close function
inline fun <T> Closeable.use(block: () -> T): T {
var exception: Throwable? = null
try {
return block()
} catch (e: Throwable) {
exception = e
throw e
} finally {
when (exception) {
null -> close()
@SecretX33
SecretX33 / benchmark.kt
Created April 30, 2021 20:36
Kotlin bench used to calculate how many times does a function take to run, on average
inline fun bench(run: () -> Unit) = (0..1_000_000).map {
measureTime(run).inMicroseconds
}.average()
bench {
// first code
}.toString() + "us"
bench {
// second code
@SecretX33
SecretX33 / ObservableSyncList.kt
Last active February 27, 2021 20:13
Observable Synchronized List
class ObservableSyncList<T>(list: MutableList<T> = ArrayList()) : SyncList<T>(list), ListListener {
override val observers: MutableMap<UUID, SilentObserver> = ConcurrentHashMap()
override fun add(element: T) = super.add(element).also { notifyObservers() }
override fun addAll(elements: Collection<T>) = super.addAll(elements).also { notifyObservers() }
override fun set(index: Int, element: T): T = super.set(index, element).also { notifyObservers() }
@SecretX33
SecretX33 / listenerObserver.kt
Last active March 23, 2021 13:14
Listener (without synchronization)
open class Listener<T>(element: T) {
var value: T = element
protected set(value) {
field = value
notifyObservers(field)
}
private val observers: MutableMap<UUID, Observer<T>> = ConcurrentHashMap()
private fun notifyObservers(newValue: T) {
observers.forEach { it.value.onChange(newValue) }