Skip to content

Instantly share code, notes, and snippets.

View aparx's full-sized avatar

Vinzent Alexander aparx

View GitHub Profile
@aparx
aparx / ColoredMaterial.java
Last active December 5, 2023 12:08
(Bukkit) A little utility that allows to get a colored material based off of a DyeColor input
package io.github.aparx.skywarz.utils.material;
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.Validate;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.EnumMap;
import java.util.function.Function;
@aparx
aparx / IndexMap.java
Last active December 18, 2023 10:14
Map-like implementation that associates objects to indices.
import com.google.common.base.Preconditions;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.errorprone.annotations.CheckReturnValue;
import lombok.Getter;
import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.dataflow.qual.Pure;
import java.util.*;
@aparx
aparx / joinArray.ts
Last active January 29, 2024 01:54
Typesafe string joining
type _JoinableElement = string | number | null | undefined | boolean;
type _JoinableArray = _JoinableElement[];
export type JoinArray<
TArray extends _JoinableArray,
TDelimiter extends string = " "
> = _JoinArray<TArray, TDelimiter>;
type _JoinArray<
TArray extends _JoinableArray,
@aparx
aparx / stringConcat.ts
Last active February 17, 2024 21:16
Typesafe string concat
export type StringConcat<TArgs extends string[]> = _Flatten<TArgs>;
type _Flatten<TArgs extends string[], _TArg extends string = ""> =
TArgs extends [infer TCurrent extends string, ...infer TNext extends string[]]
? _Flatten<TNext, `${_TArg}${TCurrent}`>
: _TArg;
export function stringConcat<const TArgs extends string[]>(...args: TArgs): StringConcat<TArgs> {
if (args.length === 0) return "" as StringConcat<TArgs>;
return "".concat(...args) as StringConcat<TArgs>;
@aparx
aparx / memoize.ts
Last active February 23, 2024 01:35
Memoization of a function call, depending on the arguments passed
export function memoize<TMemoizedFn extends (...args: any[]) => any>(
callback: TMemoizedFn,
checkArgs: boolean = true
): TMemoizedFn {
let memoized: true;
let memory: ReturnType<TMemoizedFn>;
let previousArgs: unknown[];
return function __memoized(...args: unknown[]): ReturnType<TMemoizedFn> {
if (!memoized || (checkArgs && !isSameArgs(previousArgs, args))) {
memory = callback(...args);