This commit is contained in:
Willem Cazander 2022-10-20 03:06:56 +02:00
parent 4f122133ce
commit 779e280b87
312 changed files with 1756 additions and 1621 deletions

View file

@ -0,0 +1,12 @@
package love.distributedrebirth.bassboon.death;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
import love.distributedrebirth.bassboon.clazz.pirate.BãßBȍőnꝐŕḯṿª;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public interface BãßBȍőnCoffin {
BãßBȍőnCoffinGhost UNHOLY(Class<? extends BãßBȍőnꝐŕḯṿª<?>> familyName);
BãßBȍőnCoffinGhostSpell UNHOLY_SPELL(Class<? extends BãßBȍőnꝐŕḯṿª<?>> familyName);
}

View file

@ -0,0 +1,91 @@
package love.distributedrebirth.bassboon.death;
import java.util.List;
import java.util.Map;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public interface BãßBȍőnCoffinGhost {
Object GHOST_OBJ(String key);
@SuppressWarnings("unchecked")
default <Y> Y GHOST_OBJ(String key, Class<Y> type) {
return (Y) GHOST_OBJ(key);
}
default String GHOST_STR(String key) {
return String.class.cast(GHOST_OBJ(key));
}
default Short GHOST_SHORT(String key) {
return Short.class.cast(GHOST_OBJ(key));
}
default Character GHOST_CHAR(String key) {
return Character.class.cast(GHOST_OBJ(key));
}
default Integer GHOST_INT(String key) {
return Integer.class.cast(GHOST_OBJ(key));
}
default Long GHOST_LONG(String key) {
return Long.class.cast(GHOST_OBJ(key));
}
default Boolean GHOST_BOOL(String key) {
return Boolean.class.cast(GHOST_OBJ(key));
}
default Float GHOST_FLOAT(String key) {
return Float.class.cast(GHOST_OBJ(key));
}
default Double GHOST_DOUBLE(String key) {
return Double.class.cast(GHOST_OBJ(key));
}
@SuppressWarnings("unchecked")
default Map<String,Object> GHOST_MAP_OBJ(String key) {
return Map.class.cast(GHOST_OBJ(key));
}
default Object GHOST_MAP_OBJ_VALUE(String key, String valueKey) {
return GHOST_MAP_OBJ(key).get(valueKey);
}
@SuppressWarnings("unchecked")
default Map<String,String> GHOST_MAP_STR(String key) {
return Map.class.cast(GHOST_OBJ(key));
}
default String GHOST_MAP_STR_VALUE(String key, String valueKey) {
return GHOST_MAP_STR(key).get(valueKey);
}
@SuppressWarnings("unchecked")
default Map<String,Integer> GHOST_MAP_INT(String key) {
return Map.class.cast(GHOST_OBJ(key));
}
default Integer GHOST_MAP_INT_VALUE(String key, String valueKey) {
return GHOST_MAP_INT(key).get(valueKey);
}
@SuppressWarnings("unchecked")
default List<Object> GHOST_LIST_OBJ(String key) {
return List.class.cast(GHOST_OBJ(key));
}
@SuppressWarnings("unchecked")
default List<String> GHOST_LIST_STR(String key) {
return List.class.cast(GHOST_OBJ(key));
}
@SuppressWarnings("unchecked")
default List<Integer> GHOST_LIST_INT(String key) {
return List.class.cast(GHOST_OBJ(key));
}
}

View file

@ -0,0 +1,24 @@
package love.distributedrebirth.bassboon.death;
import java.util.ArrayList;
import java.util.HashMap;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public interface BãßBȍőnCoffinGhostSpell extends BãßBȍőnCoffinGhost {
Object PUT_GHOST(String key, Object value);
default void PUT_GHOST_MAP(String key) {
PUT_GHOST(key, new HashMap<>());
}
default void PUT_GHOST_LIST(String key) {
PUT_GHOST(key, new ArrayList<>());
}
static BãßBȍőnCoffinGhostSpell castᴼᶠ(BãßBȍőnCoffinGhost death) {
return (BãßBȍőnCoffinGhostSpell) death;
}
}

View file

@ -0,0 +1,58 @@
package love.distributedrebirth.bassboon.death;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public interface BãßBȍőnCoffinGhostSpellLock extends BãßBȍőnCoffinGhostSpell {
BãßBȍőnCoffinGhost LOCK();
static BãßBȍőnCoffinGhostSpellLock castᴼᶠ(BãßBȍőnCoffinGhost death) {
return (BãßBȍőnCoffinGhostSpellLock) death;
}
static BãßBȍőnCoffinGhostSpellLock instanceᴺᵉʷ() {
Function<Map<String,Object>,BãßBȍőnCoffinGhost> keyMaker = v -> {
Map<String,Object> summonedGhosts = new HashMap<>(v);
for (String entity:v.keySet()) {
Object spirit = summonedGhosts.get(entity);
if (spirit instanceof List) {
summonedGhosts.put(entity, Collections.unmodifiableList((List<?>) spirit));
}
if (spirit instanceof Map) {
summonedGhosts.put(entity, Collections.unmodifiableMap((Map<?,?>) spirit));
}
}
return new BãßBȍőnCoffinGhost() {
@Override
public Object GHOST_OBJ(String key) {
return summonedGhosts.get(key);
}
};
};
return new BãßBȍőnCoffinGhostSpellLock() {
private final Map<String,Object> ouijaBoard = new HashMap<>();
@Override
public BãßBȍőnCoffinGhost LOCK() {
return keyMaker.apply(ouijaBoard);
}
@Override
public Object GHOST_OBJ(String key) {
return ouijaBoard.get(key);
}
@Override
public Object PUT_GHOST(String key, Object value) {
return ouijaBoard.put(key, value);
}
};
}
}

View file

@ -0,0 +1,82 @@
package love.distributedrebirth.bassboon.death.spider;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import love.distributedrebirth.bassboon.BãßBȍőnʸᴰ;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
import love.distributedrebirth.bassboon.clazz.pirate.BãßBȍőnꝐŕḯṿª;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class BãßBȍőnSpider {
private final Map<Class<?>, BãßBȍőnSpiderSilk> spiderWeb = new HashMap<>();
public BãßBȍőnSpider() {
}
public boolean hasEggType(Class<?> eggType) {
return spiderWeb.containsKey(eggType);
}
public BãßBȍőnSpiderSilk silkRoad(Class<?> eggType) {
BãßBȍőnSpiderSilk silkRoad = spiderWeb.get(eggType);
if (silkRoad == null) {
throw new IllegalStateException("No silk road found for type: "+eggType);
}
return silkRoad;
}
public void registrateEgg(Class<?> eggType, BãßBȍőnSpiderSilk spiderSilk) {
if (spiderWeb.containsKey(eggType)) {
throw new IllegalStateException("Can't registate class twice: "+eggType);
}
spiderWeb.put(eggType, spiderSilk);
}
public void registrateEgg(Class<?> eggType, BãßBȍőnꝐŕḯṿª<?> pirate, Method m) {
registrateEgg(eggType, createSenseWire(pirate, m));
}
public BãßBȍőnSpiderSilk createSenseWire(BãßBȍőnꝐŕḯṿª<?> pirate, Method m) {
boolean valid = false;
Class<?>[] para = m.getParameterTypes();
if (para.length == 0) {
valid = true;
}
if (para.length == 1 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0])) {
valid = true;
}
if (para.length == 2 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0]) && String.class.isAssignableFrom(para[1])) {
valid = true;
}
if (para.length == 3 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0]) && String.class.isAssignableFrom(para[1]) && String.class.isAssignableFrom(para[2])) {
valid = true;
}
if (!valid) {
throw new IllegalStateException("Unknown method parameters on: "+m.getDeclaringClass().getSimpleName()+"."+m.toGenericString());
}
return new BãßBȍőnSpiderSilk() {
@Override
public Object senseWire(BãßBȍőnʸᴰ<?> boon, String name, String description) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class<?>[] para = m.getParameterTypes();
if (para.length == 0) {
return m.invoke(pirate);
}
if (para.length == 1 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0])) {
return m.invoke(pirate, boon);
}
if (para.length == 2 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0]) && String.class.isAssignableFrom(para[1])) {
return m.invoke(pirate, boon, name);
}
if (para.length == 3 && BãßBȍőnʸᴰ.class.isAssignableFrom(para[0]) && String.class.isAssignableFrom(para[1]) && String.class.isAssignableFrom(para[2])) {
return m.invoke(pirate, boon, name, description);
}
throw new IllegalStateException("Unknown method parameters on: "+m.getDeclaringClass().getSimpleName()+"."+m.toGenericString());
}
};
}
}

View file

@ -0,0 +1,15 @@
package love.distributedrebirth.bassboon.death.spider;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface BãßBȍőnSpiderEgg注 {
}

View file

@ -0,0 +1,12 @@
package love.distributedrebirth.bassboon.death.spider;
import java.lang.reflect.InvocationTargetException;
import love.distributedrebirth.bassboon.BãßBȍőnʸᴰ;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public interface BãßBȍőnSpiderSilk {
Object senseWire(BãßBȍőnʸᴰ<?> boon, String name, String description) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException;
}

View file

@ -0,0 +1,18 @@
package love.distributedrebirth.bassboon.death.spider;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import love.distributedrebirth.bassboon.clazz.BãßBȍőnAuthor注;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface BãßBȍőnSpiderWire注 {
String name() default "";
String description() default "";
}